Arborescence des relations
#1
Bonjour,

Nous avons besoin de visualiser l'arborescence des relations d'une personne ou entreprise.
Nous avons déjà fait la requête SQL (elle est en fin de message). Il nous reste à créer le code Python et le bouton au bon endroit.

Dans un premier temps, nous allons afficher de manière très simple sous forme de texte :
Code :
Contact 1    Entreprise 4        Contact 17
                                        Contact 2
                                        Entreprise 20

                Contact 4            Contact 5
                                        Entreprise 20
  
                Contact 24
                          
                Entrepise 20
Contact 1 connaît Entreprise 4 + Contact 4 + Contact 24 + Entreprise 20. C'est le premier niveau d'arborescence.
Et par exemple Contact 4 connaît Contact 5 + Entreprise 20. C'est le second niveau.

Une fois que ceci fonctionnera, nous améliorerons la présentation. Probablement sous une forme bien plus graphique.
Et les entités seront cliquables pour enrouler/dérouler leurs sous-relations.


Il y a un "mais" Smile
Nous ne savons pas à quel endroit il faut regarder pour ajouter le bouton que nous souhaitons.
Dans la fenêtre "Contact", nous voulons ajouter un bouton sur la même ligne que "Supprimer toutes les relations" et "Nouvelles relations".
Même chose dans la fenêtre "Société".
L'idée est d'ouvrir un nouvel onglet pour afficher l'arborescence, ou d'afficher ça sous forme d'overlay.
--> quelqu'un saurait nous indiquer où aller pour ajouter ce bouton ?

La requête SQL :
Code :
SELECT min_id, R1.`header_filter_search_field`, max_id, R2.`header_filter_search_field`
FROM (    SELECT
            CASE
                WHEN `creme_core_relation`.`object_entity_id`<`creme_core_relation`.`subject_entity_id` THEN `creme_core_relation`.`object_entity_id`
                ELSE `creme_core_relation`.`subject_entity_id`
            END AS min_id,
            CASE
                WHEN `creme_core_relation`.`object_entity_id`<`creme_core_relation`.`subject_entity_id` THEN `creme_core_relation`.`subject_entity_id`
                ELSE `creme_core_relation`.`object_entity_id`
            END AS max_id
        FROM `creme_core_cremeentity` AS CCC1
        INNER JOIN `creme_core_relation`
        ON `creme_core_relation`.`subject_entity_id`=CCC1.`id`
        INNER JOIN `creme_core_cremeentity` AS CCC2
        ON `creme_core_relation`.`object_entity_id`=CCC2.`id`
        WHERE     CCC1.`is_deleted`=0 AND CCC2.`is_deleted`=0
                AND    `creme_core_relation`.`is_deleted`=0
                AND (CCC1.`entity_type_id`=63 OR CCC1.`entity_type_id`=67)
                AND (CCC2.`entity_type_id`=63 OR CCC2.`entity_type_id`=67)
                AND (`creme_core_relation`.`object_entity_id`=XXXX OR `creme_core_relation`.`subject_entity_id`=XXXX)
                GROUP BY min_id, max_id
     ) AS relations
INNER JOIN `creme_core_cremeentity` AS R1
ON relations.min_id=R1.`id`
INNER JOIN `creme_core_cremeentity` AS R2
ON relations.max_id=R2.`id`
WHERE  R1.`header_filter_search_field` != R2.`header_filter_search_field`
Les 2 emplacements marqués "XXXX" reçoivent l'identifiant du contact ou de l'entreprise.
Pour l'instant nous avons codé en dur les identifiants 63 et 67 qui correspondent aux types "contact" et "entreprise". Nous irons par la suite les prendre dans les bonnes tables, mais là il se fait tard.
  Répondre


Messages dans ce sujet

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)