Suggestion: filtrer par catégorie dans les exports

Bonjour.

Un de mes clients est surpris de ne pouvoir exporter ses tiers en les filtrant par catégorie.
Est-il « simple » de rajouter cette fonctionnalité ?
Dans quel fichier faut-il que je regarde ?

Merci d’avance pour le tuyau!
Belles fêtes de fin d’année et cordiales salutations.

Bonjour
La définition de l’export se trouve dans le fichier de définition du module /core/modules/modSociete.class.php
Il faut pour cela ajouter le champ à exporter, modifier la requete SQL de sélection pour intégrer les liens à la table catégories
Attention
il y a dans ce cas 2 tables à prendre en compte
un tiers peut se trouver dans plusieurs catégories

pensez à proposer le correctif si il fonctionne ensuite

Merci pour le tuyau.
Au moment de la réponse, j’étais en train d’essayer une liste personnalisée sous MyList.
Du coup, j’ai la requête qui inclut les 2 tables de catégories concernées :

SELECT DISTINCT * FROM llx_societe as s LEFT JOIN llx_societe_extrafields as extra ON s.rowid = extra.fk_object LEFT JOIN llx_c_typent as t ON s.fk_typent = t.id LEFT JOIN llx_c_pays as p ON s.fk_pays = p.rowid LEFT JOIN llx_c_effectif as ce ON s.fk_effectif = ce.id LEFT JOIN llx_c_forme_juridique as cfj ON s.fk_forme_juridique = cfj.code LEFT JOIN llx_c_departements as d ON s.fk_departement = d.rowid LEFT JOIN llx_c_stcomm as st ON s.fk_stcomm = st.id LEFT JOIN llx_categorie_societe as cs ON s.rowid = cs.fk_societe LEFT JOIN llx_categorie as c ON cs.fk_categorie = c.rowid WHERE c.label = "#NOMCAT#"

Par contre dans le code du fichier /core/modules/modSociete.class.php je ne vois pas encore vraiment où se gère les filtres (hormis ligne 301 $typeFilter ; mais je crois que c’est seul. pour les ExtrFields)
Je m’y replonge… Merci!

Je profite que l’auteur de MyList suit ce fil : est-il possible d’offrir un menu déroulant pour sélectionner les catégories ?
@+

1 « J'aime »

Il y a effectivement aussi myList qui permet de le faire , j’aurai du appeler ce module mcguyver :wink:

Pour activer le filtrage c’est dans le tableau $export_TypeFields_array que cela se passe : le fait d’y ajouter le champ et son type permet de le filtrer.

Pour la liste des catégories, avec le champs c.rowid en mode list et en bricolant les paramètres on doit pouvoir y arriver

Je commence doucement à remplir ma liste d’évolution à venir pour myList, vivement 2015

Merci beaucoup McGyver! :wink:
J’avance en ayant ajouté ,'c.label'=>'Category' à la ligne 267 et ,'c.label'=>'List:categorie:label:label' à la ligne 270.
Par contre, je ne sais/vois pas ce qu’il faut ajouter à la condition WHERE : quelle est la variable qui récupère le n° de la cat. de ma liste déroulante ?

AND c.rowid = $???
Merci encore!

À noter que j’ai déjà ajouté les 2 lignes ci-dessous après la ligne 316 :

		$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'categorie_societe as cs ON s.rowid = cs.fk_societe';
		$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'categorie as c ON cs.fk_categorie = c.rowid';

en fait il ne faut rien ajouter à la condition where, le filtrage se fait tous seul
Par contre il va sans doute y avoir un soucis par rapport au catégorie : la table contient toute les catégories (société, contact, produit…)
dans ce cas, il faut passer par une vue et l’utiliser pour la définition de la liste

OK, parfait. C’est dingue ces choses qui se font « toutes seules » !!

Effectivement, je n’avais pas réalisé cela, le client n’ayant que des catégories de Tiers…
Il faudrait la filtrer par Type (2 pour Société)

À ce stade, j’ai une limite : je ne vois (pour l’instant) pas comment faire cela… :wink:
Y a-t-il un exemple quelque part duquel je peux m’inspirer et apprendre ?

Merci encore!

c’est dans mysql : create vue …

dans le cas qui nous intéresse, créer la requete sql filtrant que les catégories société
ensuite il faut utiliser cette vue pour la liste
C’est une astuce que j’utilise pas mal dans les extrafields pour limiter les enregs à afficher dans une liste de sélection par table…

grrrr ma session a soi-disant expiré, je suis bon pour tout réécrire :

Merci, je vois bien l’idée.

Dans phpmyadmin, j’ai testé le code ci-après mais MySQL a retourné un résultat vide (aucune ligne) :

CREATE VIEW liste_cat_soc (rowid, label) AS SELECT rowid, label FROM llx_categorie WHERE type=2
j’ai également testé avec des alias, mais idem :

CREATE VIEW liste_cat_soc (id, etiquette) AS SELECT rowid, label FROM llx_categorie categorie WHERE type=2

Ensuite, je ne vois pas où ni comment intégrer cette requête.
Est-ce que ça se fait toujours dans le même fichier /core/modules/modSociete.class.php ?

Encore…et toujours merci!!

je viens de faire un test de la première requete et cela fonctionne chez moi

Oh!..
Mais je viens de comprendre : le résultat est bien vidé, mais je n’avais pas vu les Vues créées. Donc c’est fonctionnel aussi chez moi.

Je viens de me replonger dans le code du fichier modSociete.class.php et j’ai vu la partie « Add extra fields ».
J’ai tenté de faire de même pour récupérer les catégories, mais n’ai pas encore testé le code :

[code]

    // Add Categories
    $sql="SELECT rowid, label FROM ".MAIN_DB_PREFIX."categorie WHERE type = 2";
    $resql=$this->db->query($sql);
    if ($resql)    // This can fail when class is used on old database (during migration for example)
    {
    	while ($obj=$this->db->fetch_object($resql))
    	{
    		$fieldname='cat.'.$obj->name;
    		$fieldlabel='Catégorie';
    		$typeFilter="List:categorie:".$obj->label.":".$obj->.rowid;
    		$this->export_fields_array[$r][$fieldname]=$fieldlabel;
    		$this->export_TypeFields_array[$r][$fieldname]=$typeFilter;
    		$this->export_entities_array[$r][$fieldname]='company';
    	}
    }[/code]

Qu’en pensez-vous ?

déjà qu’il faut penser à incrémenter progressivement le $r
ensuite je ne vois pas le fonctionnement
d’un coté vous allez avoir toute vos catégorie comme champs exportable
de l’autre je ne vois pas ce que vous allez filtrer…

OK, compris, merci beaucoup!

Questions subsidiaires :

  1. les noms des catégories sont tronquées et comme plusieurs noms de catégorie comment avec le même libellé, il n’est plus possible de les distinguer au moment de choisir dans la liste déroulante…

  2. si j’exporte également la catégorie, je récupère l’ID dans le fichier d’export. Est-il possible de récupérer le libellé ?
    J’ai tenté - sans succès - de modifier 267 et 270 (qui d’ailleurs sont fausses, je vais aller les corriger de suite : il s’agit de c.rowid et non c.label)
    Bon : ce que je pourrais faire, c’est de filtrer par label plutôt que par rowid (dans la requête), ainsi les libellés s’afficheront dans l’export.

Grâce à ce post, j’ai pu trouver qu’il faut modifier la ligne 406 du fichier /exports/class/export.class.php

D’autre part, j’ai corrigé le code ci-dessus.
Ainsi, hormis le filtre (vue sql) sur les catégories Société uniquement, c’est fonctionnel.