MTES-MCT / metadata-postgresql

Plume : gestion des métadonnées du patrimoine PostgreSQL
https://mtes-mct.github.io/metadata-postgresql/
GNU Affero General Public License v3.0
1 stars 1 forks source link

Gestion des modèles #99

Closed WREATCHED closed 9 months ago

WREATCHED commented 1 year ago

Afin de faciliter la création de modèles spécifiques aux besoins de chaque service, il serait souhaite (voir conclusion suite à la présentation au GT PostGIS du 10/12/2022) de développer un assistant dans l'application Plume.

Liste des besoins pour la gestion des modèles

A faire / Ok Priorité Contexte Besoin Retour Qui
OK 1 Ouverture de Plume Requête des droits pour afficher l’icône dans la barre d’outils pour gérer ou activer la gestion des modèles
  • En fonction de l’installation de l’extension Plume_pg et des droits idoines
  • Genre g_admin et super utilisateur, avoir les droits nécessaires sur les tables de conception de la gestion des modèles
    Boolen LL
    OK 1 Création d’une icône D’un SVG qui te convient svg LL
    OK 1 Création d’une icône dans la barre d’outil Insérer une nouvelle icône dans la première ligne de la barre d’outil Où ? Entre la roue crantée et le ? code DL
    OK 1 Lecture Affichage des modèles disponibles Requête qui retourne sous forme de liste ou dictionnaire, à voir ce qui est plus simple pour nous deux la liste des modèles existants pour chaque modèle existant, les catégories utilisées la liste des catégories (je ferais la diff pour les non utilisées ou directement les non utilisées pour chaque modèle existant, les attributs
    • Label
    • tooltip
    • value
    • la liste des onglets pour alimenter la QComboBox
    Query LL
    OK Implémentation dans le plugin DL
    OK 1 Sauvegarde (Create and Update) Affichage des modèles disponibles Description Query LL
    OK Implémentation dans le plugin DL
    OK 2 Lecture Liste des modèles Requête qui retourne sous forme de liste ou dictionnaire, à voir ce qui est plus simple pour nous deux la liste des modèles existants pour chaque modèle existant, les attributs des modèles
    • Label
    • tooltip
    • value
    Query LL
    OK Implémentation dans le plugin DL
    OK 2 Sauvegarde(Create and Update) Liste des modèles Description Query LL
    OK Implémentation dans le plugin DL
    OK 3 Lecture Liste des métadonnées (catégories) Requête qui retourne sous forme de liste ou dictionnaire, à voir ce qui est plus simple pour nous deux la liste des métadonnées existantes pour chaque métadonnée existante, les attributs des modèles
    • Label
    • tooltip
    • value
    Query LL
    OK 3 Implémentation dans le plugin DL
    OK 3 Sauvegarde (Create and Update) Liste des métadonnées Description Query LL
    OK Implémentation dans le plugin DL
    OK 4 Lecture Liste des onglets (catégories) Requête qui retourne sous forme de liste ou dictionnaire, à voir ce qui est plus simple pour nous deux la liste des onglets existants pour chaque onglet existant, les attributs des onglets
    • Label
    • tooltip
    • value
    Query LL
    OK 4 Implémentation dans le plugin DL
    OK 4 Sauvegarde (Create and Update) Liste des onglets Description Query LL
    OK 4 Implémentation dans le plugin DL
    alhyss commented 1 year ago

    @WREATCHED Normalement ça devrait être bon pour les fonctions de lecture. Avec un fetchall sur le résultat de la requête, tu auras toujours une liste de tuples, mais chaque tuple contient un unique dictionnaire dont les clés sont les noms des champs de la table.

    Quelque chose de cette forme :

    [
        (
            {
                'tab': 'Onglet n°1',
                'tab_num': 1
            }
        ),
        (
            {
                'tab': 'Onglet n°2',
                'tab_num': 2
            }
        )
    ]
    alhyss commented 1 year ago

    @WREATCHED Il y aura des choses à affiner, mais tu devrais avoir une bonne base pour travailler avec ce que j'ai préparé, maintenant...

    Tu as une fonction pour savoir si l'utilisateur peut gérer les modèles, des fonctions pour récupérer les données des modèles, des fonctions pour les modifier (insertion/mise à jour d'une part, suppression d'autre part), et des fonctions pour récupérer les valeurs des types énumérés.

    Leur usage est expliqué dans la page Modèles de formulaire de la documentation technique. J'ai aussi mis quelques éléments sur la manière dont les attributs des différentes tables devront être gérés dans les formulaires de saisie, même si c'est loin d'être complet.

    WREATCHED commented 1 year ago

    Pour traçabilité sur la gestion des catégories non utilisées et des catégories utilisées

    Comme tu peux le constater dans cet exemple ['dct:conformsTo', 1, False] est à False pour is_node, donc je ne peux pas le récupérer dans cette condition pour les Cat OUT La question est : Est-ce normal ?

    Ce n'est sans doute pas du tout comme ça que tu comptais procéder, mais - pour faire (relativement) simple - je te suggère d'appliquer cette méthode pour constituer tes deux listes CategoryIn et CategoryOut :

    Ce fonctionnement a aussi l'intérêt de gérer correctement les cas où des catégories parentes auraient été sauvagement supprimées. Il rend possible les groupes vides, dans le cas où seul le groupe - sans aucun de ses enfants - était inclus dans le modèle. Mais je pense que c'est nécessaire, considérant que l'utilisateur enregistre ses ajouts de catégories un par un. S'il commence par ajouter un groupe, il y aura un moment où l'arbre CategoryIn devra présenter un groupe vide, avant que (en principe) il y ajoute des catégories.

    Quand une catégorie bascule de CategoryIn à CategoryOut, rien à faire de particulier côté CategoryIn. Dès lors qu'on admet les groupes vides, cela veut dire qu'on laisse l'utilisateur faire le ménage à la main. Côté CategoryOut, il faut procéder comme lors de l'initialisation de l'arbre : boucler sur les ancêtres de la catégorie à ajouter pour s'assurer qu'ils y sont tous.

    Quand une catégorie bascule de CategoryOut à CategoryIn, il faut ajouter les ancêtres d'autant que de besoin côté CategoryIn. Côté CategoryOut, il faut supprimer les groupes vides en bouclant sur la liste des ancêtres triée dans l'ordre inverse - ['a / b', 'a'] au lieu de ['a', 'a / b'] pour les ancêtres de 'a / b / c', par exemple. Si is_node vaut True et que le groupe n'a plus d'enfant, tu le supprimes.

    WREATCHED commented 1 year ago

    https://user-images.githubusercontent.com/66324136/216618479-1c9725c2-9d2a-4ac3-b132-8b8e0ac57f83.mp4

    WREATCHED commented 1 year ago

    Avec les chemins complets

    https://user-images.githubusercontent.com/66324136/219092038-da53f9e2-490a-422d-b9ec-d954d01422b3.mp4

    WREATCHED commented 1 year ago

    Avec le libellé et le nom de la catégorie

    https://user-images.githubusercontent.com/66324136/219092306-e3b98c68-79bc-4a60-8092-e184260b5311.mp4

    WREATCHED commented 1 year ago

    Avec le nom de la catégorie et le libellé pour les catégories dites communes et avec le libellé et le nom de la catégorie pour les catégories dites locales**** https://user-images.githubusercontent.com/66324136/219303002-6315c32f-189b-4844-8167-428b1310bf19.mp4

    WREATCHED commented 1 year ago

    https://user-images.githubusercontent.com/66324136/224352886-b6e4bc9d-1feb-4e2b-9dab-061661f950fb.mp4

    alhyss commented 1 year ago

    Est-ce que ce serait possible de masquer l'onglet Modèles de la fenêtre Personnalisation de l'interface tant que l'interface de gestion des modèles n'est prête à être diffusée ? Outre le fait que les utilisateurs risquent de se demander à quoi servent ces paramètres, on ne voudrait pas qu'ils aient des erreurs parce qu'ils y ont touché avant que ce soit stabilisé... (peu de chance vu les paramètres en question, mais tout de même)

    Accessoirement, il faudra sans doute à terme mettre la même condition d'apparition sur cet onglet que sur le reste des outils de gestion des modèles ?

    WREATCHED commented 1 year ago

    Résolu image

    alhyss commented 1 year ago

    J'ai une erreur quand je tente d'ouvrir le menu Personnalisation de l'interface alors que je n'ai encore chargé aucune fiche de métadonnées :

    Traceback (most recent call last):
      File "C:\Users/leslie.lemaire/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\plume\plume_ui.py", line 916, in clickColorDialog
        d = docolorbloc.Dialog(self)
      File "C:\Users/alhyss/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\plume\docolorbloc.py", line 14, in __init__
        self.setupUiColorBloc(self, mDialog)
      File "C:\Users/alhyss/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\plume\colorbloc_ui.py", line 158, in setupUiColorBloc
        if self.mDialog .mIfActivateRightsToManageModels : self.tabWidget.addTab(self.tab_widget_Templates,labelTab_Templates)
    AttributeError: 'Dialog' object has no attribute 'mIfActivateRightsToManageModels'
    WREATCHED commented 1 year ago

    Corrigé ce jour

    WREATCHED commented 1 year ago

    Visualisation des double-clics et des menus contextuels sur chaque catégorie ventilée dans le modèle disponible

    https://user-images.githubusercontent.com/66324136/228877341-823e3441-8f84-4199-a681-05e2af6a5520.mp4

    WREATCHED commented 1 year ago

    Point au 2023/ 04 / 17 https://user-images.githubusercontent.com/66324136/232530443-fb42f68b-d8c3-4224-b8b2-014148d994bf.mp4

    WREATCHED commented 1 year ago

    Les sauvegardes des catégories utilisées et non utilisées pou un modèle sélectionné

    https://user-images.githubusercontent.com/66324136/237055773-a8dd2b5a-c433-4870-bcb2-28473eb97ebc.mp4

    WREATCHED commented 1 year ago

    Nouvelle IHM Trois boutons :

    image

    alhyss commented 1 year ago

    C'est vraiment beaucoup plus clair !

    Je note qu'il faut une icône pour la réinitialisation.

    La seule chose qui m'ennuie un peu, c'est le titre "choix des métadonnées pour le modèle sélectionné". On ne voit pas très bien que c'est le titre de tout ce qui suit... Est-ce que tu peux déjà essayer de mettre une majuscule à "Choix" et l'éloigner un peu de la liste de choix du modèle ?

    Pour les infobulles, "utilisées ou non utilisées" et "associées" sont redondants. Que penses-tu de :

    WREATCHED commented 1 year ago

    OK, je m'y attèle

    WREATCHED commented 1 year ago

    Ton avis ?? image

    WREATCHED commented 1 year ago

    Personnalisation des QTreeView https://github.com/MTES-MCT/metadata-postgresql/assets/66324136/affe7707-9cc7-4540-b7b7-6e5345779d3b

    WREATCHED commented 1 year ago

    Robustesse Plume embarque le gestion de contexte dans le cadre de la validation des informations saisies.

    WREATCHED commented 1 year ago

    image

    alhyss commented 1 year ago

    @WREATCHED Comme convenu, j'ai ajouté quelques petites fonctions pour récupérer les informations qui alimenteront l'aide à la saisie du champ sources. Elles sont présentées dans la nouvelle sous-partie Champ source de la documentation technique. N'hésite pas si j'ai oublié quelque chose qui te paraîtrait utile.

    WREATCHED commented 11 months ago

    La vie de Plume continue et son dev aussi

    https://github.com/MTES-MCT/metadata-postgresql/assets/66324136/e58fba78-8dc7-49b6-b492-81c3f3ad9678

    WREATCHED commented 11 months ago

    LECLERC Didier @didier.leclerc 16:46 @Leslie / Didier

    Suite aux échanges - mettre l'aide dans la boite d'assistance quand le QWidget a setEnabled(False)

    WREATCHED commented 11 months ago

    https://github.com/MTES-MCT/metadata-postgresql/assets/66324136/6c46c6e2-8de9-4f34-af50-d2ed4f1b9f31

    WREATCHED commented 11 months ago

    https://github.com/MTES-MCT/metadata-postgresql/assets/66324136/6e0ba59d-2044-4574-a17d-9fb684e86ec9

    WREATCHED commented 11 months ago

    Fin de semaine https://github.com/MTES-MCT/metadata-postgresql/assets/66324136/e0b56b7b-f951-4a54-acf1-1946576761fa