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 ?
@+
Il y a effectivement aussi myList qui permet de le faire , j’aurai du appeler ce module mcguyver
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!
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…
Y a-t-il un exemple quelque part duquel je peux m’inspirer et apprendre ?
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…
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]
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…
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…
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.