Tri par Réf anormal dans Liste Adhérents

Version de Dolibarr : 16.01
Hébergement : dédier
Base de donnée : MySQL or MariaDB 5.5.5-10.4.21-MariaDB-1:10.4.21+maria~focal
Type d’installation : Package .zip
Module complémentaire (provenant de Dolistore ou autre installé) : Aucun
J’ai reproduit cette anomalie dans le Dolibarr de demo (Login @ 16.0.0) : Oui

Dans Adhérents, Liste si on clic sur Réf les numéros ne sont pas classé par ordre croissant:


Alors que dans le menu Liste (Cotisations)
Les numéros se classe bien du plus grand au plus petit (ou inversement)
https://demo.dolibarr.org/adherents/subscription/list.php?sortfield=c.rowid&sortorder=asc&begin=&contextpage=subscriptionlist&statut=1&

Ce bug se produit depuis la version 14 (15 et 16 comprise) en version 13 je n’avais pas ce soucis.
Savez vous comment signaler ce bug afin de le faire corriger.
Impossible d’afficher les dernier adhérent par ordre décroissant depuis, à moins d’ajouter un colonne date de création.

Hello,

Ce coup-ci, j’ai compris et trouvé l’origine du problème.

Le 10 novembre 2020 @frederic34 dans un commit (Update llx_adherent.sql · Dolibarr/dolibarr@8650054 · GitHub) a ajouté le champs ref avec un type varchar, soit du texte, à la table adherent qui n’existait pas jusque là.

En effet, c’était le champs rowid avec un type integer, soit entier, qui sert de champs « ref » pour le moment (soit en date du 10 novembre 2020).

Ce même jour, dans un autre commit (Update 12.0.0-13.0.0.sql · Dolibarr/dolibarr@016c991 · GitHub), @frederic34 modifie le fichier adherent/list.php pour que le champs affiché dans les listes et dans d’autres fichiers soit le champs ref qu’il a ajouté précédemment.

Le problème, c’est que la liste est triée selon un critère de texte sur le no de référence puisqu’il est de type varchar, alors qu’avant elle était triée numériquement sur le rowid.

Ce que je ne comprends pas c’est le pourquoi de cette modification de la gestion des adherents, surtout qu’il me semble qu’en l’état les deux champs sont identiques et enregistre exactement la même valeur, une fois sous format numeric (integer) et une fois sous format texte (varchar).

Avant de soumettre une modification de code, j’aimerais savoir dans quel but @eldy a approuvé la modification originale du traitement des adhérents.

Bonne journée

1 « J'aime »

Top, on dirait que cela avance, dans le bon sens. Merci d’avoir pris le temps de vérifier, en espérant que cela vient bien de là.

Le but était de préparer le terrain afin d’introduire une notion de « ref » qui soit un texte auto-généré comme pour les autres notions. Pour la transition on y met le rowid mait à terme ce sera un code, par exemple
MEM2201-12345

1 « J'aime »

Est-ce qu’on pourrait ajouter des zéros devant le rowid lors de l’enregistrement en bd de la ref ?

Il s’agirait de compléter les espaces manquants pour que la chaîne textuelle soit tjs de 30 caractères. Ça permettrait de trier de manière « naturelle » les chiffres enregistrés comme du textes.

On pourrait « convertir » la chaine lors de l’affichage pour que les zéro n’apparaissent pas.

1 « J'aime »

Hello @sbadenis,

j’ai essayé une stratégie ici: WIP - List sorted by ref in adherents module by daraelmin · Pull Request #22847 · Dolibarr/dolibarr · GitHub
Est-ce que tu pourrais la tester (pas en prod) pour que je sache si on est sur la bonne voie ?
Il faudrait vérifier si ça joue avec de nouveaux adhérents, pour les anciens, j’ai pas encore trouvé de moyen d’intervenir sur la base sans relancer une migration SQL, donc j’aimerai savoir si ça fonctionne comme ça avant d’aller plus loin.
Je dois encore un peu travailler sur la question d’enlever les zéros à l’affichage, mais…

A plus

Hello,

Désolé, mais le bug va rester jusqu’à une prochaine version de dolibarr.

Voici le fix refusé

Bonne soiree

1 « J'aime »

Bonjour

Proposition de numérotation des adhérents.

A suivre

Fred

2 « J'aime »

Hello @frederic34,

Comment convertir les bases anciennes à cette numérotation avancée ?
Ne serait-il pas judicieux de prévoir que lorsque la gestion des ref est simple, le tri par ref se fait sur rowid ? Ça va plus vite et ça évite les problèmes avec les anciens dolibarr à migrer.

A part ça, merci pour le boulot !

1 « J'aime »

Bonjour

La modif permet de conserver l’ancien système, on peut utiliser la nouvelle numérotation 1,2,3,4,5,6 etc ou définir une constante MEMBER_MOD_SIMPLE_LPAD pour définir la taille de la ref pour le module « Simple » soit si on met 4: 0000,0001,0002,0003 etc
Avec le module Advanced on aura MEM2212-0001 etc

Ce sera pour la V18, ça donne le temps de tester…

Fred

2 « J'aime »