Affichage d'extrafields dans la liste des interventions

Bonsoir,
J’ai créé un attribut supplémentaire au niveau des lignes d’intervention, mais malgré la visibilité réglée su « 1 », le champ n’apparaît pas dans la liste…
C’est un champ type liste déroulante. Est-ce lié ?
Si vous avez un retour là-dessus je suis preneur !

Bonjour,

Vous avez cliquez sur les trois traits horizontaux ?

Bien sûr, mais mon champ n’apparaît pas dans la liste.
J’ai créé d’autres champs au niveau des interventions et eux apparaissent bien, mais pas ceux créés au niveau des lignes d’intervention…
D’ailleurs c’est sensé être la liste des interventions mais c’est la liste des lignes d’intervention. On serait sur une sorte d’hybride ? Ça fait un peu bug non ?

Bonjour,
Les attributs supplémentaires par ligne dans les bons d’intervention ne s’affiche effectivement pas dans la vue liste.

Pour ma part, j’ai du modifier le code du fichier list.php du module fichinter.

OK @Loic86 , est-ce que tu peux me dire ce que tu as changé ? (je suis en v13)
Je ne suis pas fan de modifier le code du core mais ça me serait vraiment vraiment utile…

Je l’ai fait en v13, et les appliqué presque identiquement pour la v14.
Attention, cette solution n’est pas une solution pérenne en cas de mise à jour ! Et je ne sais pas si elle respecte une charte quelconque de développement Dolibarr ! Mais elle m’a permit de solutionner le problème de l’affichage des attributs supplémentaires des lignes de bon d’interventions dans la liste

voici comment j’ai fait.

(bien remplacer les champs <mon_attribut> dans l’exemple par le bon nom d’attribut )

Premièrement j’ai ajouté dans la requêtes sql général un LEFT JOIN pour récupérer mon champ d’attribut supplémentaire. En dessous de la ligne :

$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."fichinterdet as fd ON fd.fk_fichinter = f.rowid";

j’ai ajouté :

$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."fichinterdet_extrafields as fde ON fde.fk_object = fd.rowid";

puis dans la ligne :

$sql .= " fd.rowid as lineid, fd.description as descriptiondetail, fd.date as dp, fd.duree,  ";

j’ai ajouté mon attribut supplémentaire :

$sql .= " fd.rowid as lineid, fd.description as descriptiondetail, fd.date as dp, fd.duree, fde.<mon_attribut>, ";

Après j’ai ajouté à $arrayfields = array( ma nouvelle valeur :

'fde.<mon_attribut>'=>array('label'=>'A facturer', 'checked'=>1, 'enabled'=>empty($conf->global->FICHINTER_DISABLE_DETAILS) ? 1 : 0),

Dans la partie d’affichage des ligne en dessous du bloc if
if (!empty($arrayfields['f.description']['checked'])) {
j’ai mit en place l’affichage de la ligne de recherche

        if (!empty($arrayfields['fde.<mon_attribut>']['checked']))
        {
                print '<td class="liste_titre">';
                print '<input type="text" class="flat" name="search_<mon_attribut>" value="" size="12">';
                print '</td>';
        }

Ensuite en dessous de la ligne :

if (!empty($arrayfields['f.description']['checked']))  print_liste_field_titre($arrayfields['f.description']['label'], $_SERVER["PHP_SELF"], "f.description", "", $param, '', $sortfield, $sortorder);

ajouter :

if (!empty($arrayfields['fde.<mon_attribut>']['checked']))  print_liste_field_titre($arrayfields['fde.<mon_attribut>']['label'], $_SERVER["PHP_SELF"], "fde.<mon_attribut>", "", $param, '', $sortfield, $sortorder);

Et enfin en dessous de :

                if (!empty($arrayfields['f.description']['checked']))
                {
                        print '<td>'.dol_trunc(dolGetFirstLineOfText($obj->description), 48).'</td>';
                        if (!$i) $totalarray['nbfield']++;
                }

Mettre la vue dans la colonne de l’attribut supplémentaire

                 if (!empty($arrayfields['fde.<mon_attribut>']['checked']))
                {
                        $sql1 = "SELECT ft.rowid FROM ".MAIN_DB_PREFIX."fichinterdet_extrafields as ft, ".MAIN_DB_PREFIX."fichinterdet as fd WHERE fd.rowid = ft.fk_object AND fd.description='".$obj->descriptiondetail."' AND ft.<nom_attribut>='0' " ;
                        $resql1 = $db->query($sql1);
                        if ($resql1->num_rows)
                        {
                                print '<td>Le terme à affiché si case coché</td>';
                        }
                        else
                        {
                                print '<td>Le terme à affiché si case non coché </td>';
                        }
                        if (!$i) $totalarray['nbfield']++;
                }

J’avoue que ce n’est pas top top comme solution, mais cela m’a permit d’avoir mon attribut supplémentaire de ligne affiché dans la liste des bon d’intervention.

Il est possible d’améliorer les filtres en ajoutant une valriable search_<nom_attribut> comme pour :

$search_status = GETPOST('search_status', 'alpha');

De plus il est aussi possible d’améliorer l’affichage de la colonne en ajoutant un peu de css, exemple au lieu de :

print '<td>Le terme à affiché si case coché</td>';

Mettre 

<td><span class="badge  badge-status4 badge-status" title="Validé">Oui</span></td>

Ci dessous la vue de la liste

1 « J'aime »

Sinon il faut passer par des moduels externes type mylist

Bonjour @Loic86
J’ai enfin trouvé le temps de tester ta solution, c’est top ! J’ai un peu adapté pour cause de listes de valeurs, mais çe fonctionne bien, en tout cas ça me convient en attendant une amélioration du module.
Bonne journée et merci encore

Bonjour @Jpdelaunay ,
vraiment ravi que cela est servi.
Bonne journée.