xcaeag / MenuFromProject-Qgis-Plugin

Build layers shortcuts menus based on QGis projects
8 stars 7 forks source link

[Amélioration] Rapatriement dans le projet enfant des relations construites dans le projet parent #51

Closed JuPsco closed 6 months ago

JuPsco commented 3 years ago

Bonjour,

Je crée ce ticket pour suggérer une amélioration de ce plugin très utile ! :)

Dans le projet parent, je construis des relations entre plusieurs des jeux de données qui y sont chargés :

image

J'exploite ensuite ces relations dans le formulaire du jeu de données principal avec une section dédiée et un widget de référence de relation :

image

En revanche, lorsque j'ouvre un nouveau projet pour charger les trois jeux de données en relation, le formulaire est bien reconstruit mais avec une section relation vide car la relation n'est pas récupérée :

image

image

Le souhait d'amélioration consisterait à rapatrier en plus des couches, les relations construites dans le projet parent vers le projet enfant.

xcaeag commented 3 years ago

Merci pour l'idée, Quand j'aurai un peu de temps, je regarderai la faisabilité, ce qu'offre l'API PyQGis pour cela.

Comme pour les jointures (récemment prises en compte), c'est l'ouverture de la couche parente qui pourrait entrainer avec elle l’ouverture des couches 'enfants' ?

cpornin commented 1 year ago

Bonjour @xcaeag @Guts @Gustry ,

Je me permets de relancer l'idée de @JuPsco car je rencontre le même problème : ce plugin est génial pour faciliter l'accès aux données à des utilisateurs non géomaticiens depuis une base de donnée et avec l'ensemble des styles paramétrés ; mais mes développements de formulaires plus poussés qui utiliseraient des relations sont bloqués par l'impossibilité de charger ces relations à l'ouverture des couches concernées.

Idéalement, il faudrait que l'ouverture de la couche de référence entraine celle de la couche de référencement et inversement et que la relation apparaisse dans les propriétés du projet QGIS.

Pour information, lorsqu'une relation est définie en base de données postgres et que l'on charge une table avec une foreignkey depuis la connexion à la base de données dans l'explorateur, la relation est bien chargée dans les propriétés du projet qgis. Cela peut permettre de charger les couches avec les relations mais la connexion directe à la base avec les noms de table en brut est tout de même bien moins sympathique pour les utilisateurs que la création d'un menu via le plugin.

Je reste évidemment disponible pour échanger à ce sujet et filer un coup de main sur le développement (dans les limites de mes compétences ...) ou à minima pour tester !

xcaeag commented 1 year ago

Bonjour,

promis, je vais regarder ça !

La mécanique sous-jacente qui charge les couches (une lecture du document XML avec une fonction 'setReadExtentFromXml') semble ignorer les relations (effectivement, la couche voisine n'existe pas encore)..

L'enchainement est à revoir... peut être qu'à l'ouverture d'une couche, il faudra :

  1. lire aussi les informations relatives au relations (niveau projet)
  2. vérifier si la couche choisie est concernée par une relation
  3. charger les couches concernées
  4. construire les relations

je vous tiens au courant et vous testerez bien sûr (si cela abouti)

cpornin commented 1 year ago

Merci pour ce retour et avec plaisir pour les tests !

xcaeag commented 1 year ago

Et bien ce n'est pas si simple... un pb de compétences.

Après avoir surmonté qq difficultés (relations qui bouclent, changement d'identifiant des couches...), je coince sur le formulaire d'attributs qui ne prends pas en considération les relations.

Le souci est que QGis impose de créer les couches avant de définir les relations (logique)... mais au chargement de la couche, les relations sont nécessaires pour affecter les formulaires. Peut être que l'API permettrai de régler ça, sans en être sûr, je ne connais pas assez cette partie mais j'ai l'impression qu'il ne manque pas grand chose.

Je vais explorer un peu plus tard les classes QgsEditFormConfig, QgsAttributeEditorContainer, QgsAttributeEditorRelation...

La branche de test : https://github.com/xcaeag/MenuFromProject-Qgis-Plugin/tree/test

xcaeag commented 1 year ago

Peut-être une première version de test demain !

xcaeag commented 1 year ago

Et donc une version là : https://github.com/xcaeag/MenuFromProject-Qgis-Plugin/releases/download/v2.1.0-beta/menu_from_project-2.1.0-beta.zip

Ne manipulant pas plus que ça les relations au quotidien, toutes les subtilités ne sont peut être pas gérées.

Mon projet de test (non partageable) restait assez simple, avec tout de même des relations réciproques, mais sans formulaire particulier. N'ai pas pris encore le temps de créer de projet portable.

Si vous avez l'occasion de tester, de faire un premier retour, n'hésitez pas !

mickarival commented 1 year ago

Bonjour,

Je travaille avec @cpornin. Elle est indisponible pendant une certaine période mais je peux apporter ma contribution en faisant des tests. Merci pour le travail accompli, j'ai fait quelques tests de mon côté :

J'ai tout d'abord testé votre update avec des relations assez complexes et la couche parente que je souhaitais charger appelée "habitats" ne s'est pas chargée dans le projet. (à noter que avec la version a jour de lmfp, habitats se charge dans le projet) Voici le message d'erreur :

2023-07-31T13:49:57     WARNING    addLayer 0 habitats_13850bd2_0aeb_4b85_863a_8e5420a6eff1
2023-07-31T13:49:57     WARNING    buildRelations habitats_13850bd2_0aeb_4b85_863a_8e5420a6eff1, parentsLoop = {}
2023-07-31T13:49:57     WARNING    appel récursif !
2023-07-31T13:49:57     WARNING     .. addLayer 1 habitats_d0f16e1b_ad25_4516_b66d_c7a512d53420
2023-07-31T13:49:57     WARNING     .. buildRelations habitats_d0f16e1b_ad25_4516_b66d_c7a512d53420, parentsLoop = {'habitats_13850bd2_0aeb_4b85_863a_8e5420a6eff1': 'Lcfc2154e0f4640fbaee5d2b60415208b'}
2023-07-31T13:49:57     WARNING     .. relationsToBuild = []
2023-07-31T13:49:57     WARNING    'NoneType' object has no attribute 'name'

En voyant que cela ne fonctionnait pas, j'ai décidé de repartir avec un projet plus simple avec deux couches : parent (la "référencée) et enfant (la "référencante). Quand je charge parent, cela charge bien la couche enfant dans le projet. L'inverse n'est pas constaté (à raison). Cependant, la relation du projet et donc la relation dans le formulaire ne sont pas chargées. Un message d'erreur est alors affiché :

2023-07-31T12:10:37     WARNING    addLayer 0 parent_38b879e7_da97_451c_a17b_d054ba4e3c89
2023-07-31T12:10:37     WARNING    buildRelations parent_38b879e7_da97_451c_a17b_d054ba4e3c89, parentsLoop = {}
2023-07-31T12:10:37     WARNING    appel récursif !
2023-07-31T12:10:37     WARNING     .. addLayer 1 enfant_5cb151c3_1088_4562_adc7_f9cd355bfa4b
2023-07-31T12:10:37     WARNING     .. buildRelations enfant_5cb151c3_1088_4562_adc7_f9cd355bfa4b, parentsLoop = {'parent_38b879e7_da97_451c_a17b_d054ba4e3c89': 'L65ea3b1a8a134e59b9925ee41383b38a'}
2023-07-31T12:10:37     WARNING     .. relationsToBuild = []
2023-07-31T12:10:37     WARNING     .. layer added : enfant Lb2c0c7d0aaed450f96c645f40a4ecc5f
2023-07-31T12:10:37     WARNING    relationsToBuild = [{'strength': 'Association', 'referencedLayer': 'L65ea3b1a8a134e59b9925ee41383b38a', 'id': 'enfant_5cb_id_parent_parent_38b_fid', 'name': 'parent_enfant', 'referencingLayer': 'Lb2c0c7d0aaed450f96c645f40a4ecc5f', 'referencedField': 'fid', 'referencingField': 'id_parent'}]
2023-07-31T12:10:37     WARNING    layer added : parent L65ea3b1a8a134e59b9925ee41383b38a
2023-07-31T12:10:37     WARNING    {'strength': 'Association', 'referencedLayer': 'L65ea3b1a8a134e59b9925ee41383b38a', 'id': 'enfant_5cb_id_parent_parent_38b_fid', 'name': 'parent_enfant', 'referencingLayer': 'Lb2c0c7d0aaed450f96c645f40a4ecc5f', 'referencedField': 'fid', 'referencingField': 'id_parent'}
2023-07-31T12:10:37     WARNING    Invalid relation R0616a7d610e648c3bcae6ebee73c60c1

J'ai testé avec et sans un formulaire qui appelle à la relation. Les deux tests amènent au même résultat.

J'ai produit un géopackage contenant le projet et les données sur le deuxième test. Je pourrai vous le fournir si jamais vous voulez faire vos tests dessus. (J'admets ne surtout pas savoir comment partager sur GitHub un gpkg)

En espérant avoir été suffisamment exhaustif, Merci encore, et je me tiens disponible !

xcaeag commented 1 year ago

Mince, j'étais trop optimiste...

Vous pouvez m'envoyer le ou les projets tests à mon adresse, qui figure dans le fichier metadata.txt du plugin, mais la voici : xavier.culos@eau-adour-garonne.fr, ce projet me sera bien sûr très utile pour avancer.

Quelle version de QGis utilsez-vous ?

mickarival commented 1 year ago

Je vous envoie cela.

Alors, j'avais créé le projet en 3.32 et j'ai fait les tests de catalogue en 3.32. Mais j'ai aussi testé en stable en enregistrant le projet en 3.28 et en faisant mes tests en 3.28.

xcaeag commented 1 year ago

Bonjour,

une version expérimentale est diffusée sur le dépôt des plugins. https://plugins.qgis.org/plugins/menu_from_project/ une nouvelle option de configuration permet de prendre en compte ou non les relations (et jointures).

@Tokimasasogo, if you wish, you can translate two texts relating to the new configuration option, in test version yet.

    <message>
        <location filename="../ui/conf_dialog.ui" line="345"/>
        <source>Opens with layer, layers linked by &apos;relations&apos; or joins.</source>
        <translation type="unfinished">???</translation>
    </message>
    <message>
        <location filename="../ui/conf_dialog.ui" line="348"/>
        <source>Also load linked layers.</source>
        <translation type="unfinished">???</translation>
    </message>

merci encore

cpornin commented 1 year ago

Bonjour, Merci encore pour cette mise à jour du plugin ! Quelle belle nouvelle pour le retour de congés 👍

mickarival commented 11 months ago

[like] Mickaël RIVAL reacted to your message:


From: Céline Pornin @.> Sent: Monday, August 21, 2023 2:01:59 PM To: xcaeag/MenuFromProject-Qgis-Plugin @.> Cc: Mickaël RIVAL @.>; Comment @.> Subject: Re: [xcaeag/MenuFromProject-Qgis-Plugin] [Amélioration] Rapatriement dans le projet enfant des relations construites dans le projet parent (#51)

Bonjour, Merci encore pour cette mise à jour du plugin ! Quelle belle nouvelle pour le retour de congés 👍

— Reply to this email directly, view it on GitHubhttps://github.com/xcaeag/MenuFromProject-Qgis-Plugin/issues/51#issuecomment-1686394270, or unsubscribehttps://github.com/notifications/unsubscribe-auth/BBT5NJQPO57KLRPQBWQSXH3XWNS5PANCNFSM5A2EYEZA. You are receiving this because you commented.Message ID: @.***>