PnX-SI / gn_mobile_occtax

Application mobile pour la saisie dans le module Occtax de GeoNature
GNU General Public License v3.0
13 stars 4 forks source link

[Etape 5 dénombrement] : pas de prise en compte du taxon dans les listes déroulantes des nomenclatures #152

Closed TheoLechemia closed 2 years ago

TheoLechemia commented 2 years ago

Version de l'application

Version d'Occtax-mobile affectée par le bug : 2.1.0 Version de GeoNature utilisée : 2.9.0

Terminal et Version Android

Marque et modèle du terminal : Version d'Android :11

Description du bug et comportement attendu

La liste des valeurs de nomenclature n'est pas filtrée en fonction des "valeurs possibles" du taxon saisi. C'est en revanche bien fonctionnel sur l'étape précédente (pour les nomenclatures de techniques d'obs etc...)

Comment reproduire

Sélectionner un oiseau dans la liste des taxons, passer à l'étape 5 et sélectionner "stade de vie". Les items "Pleine floraison", "stade boutons floraux", "stade végétatif" ne devrait pas être présents car elles sont associés uniquement aux taxons de flore.

C'est également fonctionnel sur la version web, le problème ne doit pas venir de l'API.

DonovanMaillard commented 2 years ago

sauf erreur c'était bien fonctionnel avant. Est-ce qu'il y a eu des modifications sur ce point lors du passage à une seule appli @sgrimault ?

sgrimault commented 2 years ago

Je vais voir de mon coté car cette partie là n'a pas changé sur les derniers développements. Je vous tiens au courant :)

DonovanMaillard commented 2 years ago

merci à toi!

sgrimault commented 2 years ago

@DonovanMaillard,

C'est sur quelle instance ?

De mon côté, sur l'instance de demo, tout est ok, tu trouveras ci-dessous les requêtes SQL jouées par l'application.

Depuis la liste des taxons, j'ai appliqué le filtre sur les "Oiseaux" :

SELECT
  taxa."_id" AS taxa__id,
  taxa."name" AS taxa_name,
  taxa."kingdom" AS taxa_kingdom,
  taxa."group" AS taxa_group,
  taxa."name_common" AS taxa_name_common,
  taxa."description" AS taxa_description,
  taxa."rank" AS taxa_rank
FROM taxa taxa
WHERE (((taxa_kingdom = 'Animalia')
  AND (taxa_group = 'Oiseaux')))
ORDER BY taxa_name ASC

et sélectionné un taxon (id: 188728, name: 'Accipiter', taxonomy: (kingdom='Animalia', group='Oiseaux'))

Depuis la page "Informations", récupération de la nomenclature :

SELECT
  nomenclature_types."_id" AS nomenclature_types__id,
  nomenclature_types."mnemonic" AS nomenclature_types_mnemonic,
  nomenclature_types."default_label" AS nomenclature_types_default_label
FROM nomenclature_types nomenclature_types
ORDER BY nomenclature_types_mnemonic ASC

et des valeurs par défaut :

SELECT
  nomenclatures."_id" AS nomenclatures__id,
  nomenclatures."code" AS nomenclatures_code,
  nomenclatures."hierarchy" AS nomenclatures_hierarchy,
  nomenclatures."default_label" AS nomenclatures_default_label,
  nomenclatures."type_id" AS nomenclatures_type_id,
  nomenclature_types."_id" AS nomenclature_types__id,
  nomenclature_types."mnemonic" AS nomenclature_types_mnemonic,
  nomenclature_types."default_label" AS nomenclature_types_default_label,
  default_nomenclatures."module" AS default_nomenclatures_module,
  default_nomenclatures."nomenclature_id" AS default_nomenclatures_nomenclature_id
FROM nomenclatures nomenclatures
JOIN nomenclature_types AS nomenclature_types
  ON nomenclature_types__id = nomenclatures_type_id
JOIN default_nomenclatures AS default_nomenclatures
  ON default_nomenclatures_nomenclature_id = nomenclatures__id
  AND default_nomenclatures_module = 'occtax'
ORDER BY nomenclatures_default_label ASC

Si je sélectionne un champ, par exemple "Statut biologique" (code : STATUT_BIO):

SELECT
  nomenclatures."_id" AS nomenclatures__id,
  nomenclatures."code" AS nomenclatures_code,
  nomenclatures."hierarchy" AS nomenclatures_hierarchy,
  nomenclatures."default_label" AS nomenclatures_default_label,
  nomenclatures."type_id" AS nomenclatures_type_id,
  nomenclature_types."_id" AS nomenclature_types__id,
  nomenclature_types."mnemonic" AS nomenclature_types_mnemonic,
  nomenclature_types."default_label" AS nomenclature_types_default_label,
  nomenclatures_taxonomy."nomenclature_id" AS nomenclatures_taxonomy_nomenclature_id,
  nomenclatures_taxonomy."kingdom" AS nomenclatures_taxonomy_kingdom,
  nomenclatures_taxonomy."group" AS nomenclatures_taxonomy_group
FROM nomenclatures nomenclatures
JOIN nomenclature_types AS nomenclature_types ON nomenclature_types__id = nomenclatures_type_id
  AND nomenclature_types_mnemonic = 'STATUT_BIO'
JOIN nomenclatures_taxonomy AS nomenclatures_taxonomy
  ON nomenclatures_taxonomy_nomenclature_id = nomenclatures__id
  AND (
    ((nomenclatures_taxonomy_kingdom = 'Animalia') AND (nomenclatures_taxonomy_group = 'Oiseaux'))
    OR ((nomenclatures_taxonomy_kingdom = 'Animalia') AND (nomenclatures_taxonomy_group = 'any'))
    OR ((nomenclatures_taxonomy_kingdom = 'any') AND (nomenclatures_taxonomy_group = 'any'))
  )
ORDER BY nomenclatures_default_label ASC
nomenclatures__id nomenclatures_code nomenclatures_default_label nomenclatures_type_id nomenclature_types_mnemonic nomenclature_types_default_label nomenclatures_taxonomy_nomenclature_id nomenclatures_taxonomy_kingdom nomenclatures_taxonomy_group
34 5 Estivation 13 STATUT_BIO Statut biologique 34 Animalia Oiseaux
33 4 Hibernation 13 STATUT_BIO Statut biologique 33 Animalia Oiseaux
29 0 Inconnu 13 STATUT_BIO Statut biologique 29 any any
31 2 Non Déterminé 13 STATUT_BIO Statut biologique 31 any any
30 1 Non renseigné 13 STATUT_BIO Statut biologique 30 any any
35 9 Pas de reproduction 13 STATUT_BIO Statut biologique 35 Animalia any
32 3 Reproduction 13 STATUT_BIO Statut biologique 32 Animalia any

Cette requête me retourne bien les valeurs correspondant à la taxonomie du taxon (ici : "Animalia" - "Oiseaux"). Pour information, la dernière jointure applique le filtre qui permet de ne garder que les valeurs selon la taxonomie :

Dans ton cas, c'est comme si les données en base n'étaient pas rattachées à une taxonomie d'où le fait qu'elles soient systématiquement remontées lors de l'affichage des valeurs possible pour un champ donnée.

DonovanMaillard commented 2 years ago

@TheoLechemia pour le détail ;)

sgrimault commented 2 years ago

Oups désolé @TheoLechemia, je n'ai pas fais attention que c'était toi à l'origine de l'issue.

TheoLechemia commented 2 years ago

C'est sur notre instance de prod: https://geonature.ecrins-parcnational.fr Je revérifie demain

TheoLechemia commented 2 years ago

Je te confirme le comportement : j'ai bien les nomenclatures de flore, alors que l'API web ne les renvoie pas : https://geonature.ecrins-parcnational.fr/api/nomenclatures/nomenclature/STADE_VIE?regne=Animalia&group2_inpn=Oiseaux&orderby=label_default

sgrimault commented 2 years ago

Attention, coté application je fais appel à la route https://geonature.ecrins-parcnational.fr/api/nomenclatures/nomenclatures/taxonomy pour récupérer toutes les valeurs possible pour la nomenclature. En regardant vite fait le retour, notamment sur STADE_VIE (ID : 10), la valeur "Pleine de floraison" n'a pas d'entrées pour l'attribut taxref :

{
    "id_nomenclature": 481,
    "cd_nomenclature": "127",
    "mnemonique": "Pleine floraison",
    "label_default": "Pleine floraison",
    "label_fr": "Pleine floraison",
    "label_en": null,
    "label_es": null,
    "label_de": null,
    "label_it": null,
    "hierarchy": "010.127",
    "taxref": []
}

qui du coup est interprété comme suit coté application :

{
  "id_nomenclature": 481,
  "cd_nomenclature": "127",
  "mnemonique": "Pleine floraison",
  "label_default": "Pleine floraison",
  "label_fr": "Pleine floraison",
  "label_en": null,
  "label_es": null,
  "label_de": null,
  "label_it": null,
  "hierarchy": "010.127",
  "taxref": [
    {
      "regne": "all",
      "group2_inpn": "all"
    }
  ]
}

donc applicable pour tous les taxons.

TheoLechemia commented 2 years ago

Bien vu, je n'avais plus en tête les deux routes différentes.