Development #45419
détection homonymes/doublons à la création d'un utilisateur
0%
Description
Lors de la validation de la créatin d'un utilisateur, avoir une recherche de doublons, et inviter l'agent à examiner ceux-ci si jamais il y en a.
Ça pourrait passer par un écran dédié, ou l'ajout d'un encart au-dessus du bouton (clic sur le bouton, recherche asynchrone, ajout encart, cf capture), ou autre UI à deviser.
La détection pourrait s'inspirer de ce qui a été réalisé dans Zoo (https://git.entrouvert.org/zoo.git/tree/zoo/zoo_nanterre/duplicates.py#n74)
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a presque 4 ans
- Lié à Development #42639: ajouter un index trigram sur CONCAT(first_name, ' ', last_name) ajouté
Mis à jour par Valentin Deniaud il y a plus de 3 ans
- Fichier 0001-manager-look-for-duplicates-on-user-creation-45419.patch 0001-manager-look-for-duplicates-on-user-creation-45419.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Version sans rien d'asynchrone, je gère ça comme une erreur de validation, qui une fois affichée permet de valider le formulaire.
Aussi dans ton screen tu inclus les attributs adresse, ici c'est inutile vu que pour l'instant ils ne sont pas pris en compte dans la recherche. Par contre inclure la date de naissance, pourquoi pas, mais je ne sais pas trop comment faire (la partie user.attributes.birthdate, ok, mais quelle condition pour vérifier qu'un tel attribut existe et ne pas crasher salement le template).
Mis à jour par Thomas Noël il y a plus de 3 ans
Même si la recherche ne se base que sur nom et prénom, il est important d'afficher sur les lignes des résultats d'invalidation l'ensemble des attributs (dans l'ordre de déclaration dans A2) et infos dispos sur chaque utilisateur trouvé :
- prénom1 nom1
<email1>
date-de-naissance - adresse - attribut - attribut ... [créé le ... - dernière activité le ...] - prénom2 nom2
<email2>
date-de-naissance - adresse - attribut - attribut - ... [créé le ... - dernière activité le ...]
ça permet de voir s'il s'agit de la même personne que celle qu'on cherche à créer sans forcément avoir à cliquer pour avoir les détails (on les voit déjà à 90%)
Mis à jour par Benjamin Dauvergne il y a plus de 3 ans
Valentin Deniaud a écrit :
Aussi dans ton screen tu inclus les attributs adresse, ici c'est inutile vu que pour l'instant ils ne sont pas pris en compte dans la recherche. Par contre inclure la date de naissance, pourquoi pas, mais je ne sais pas trop comment faire (la partie user.attributes.birthdate, ok, mais quelle condition pour vérifier qu'un tel attribut existe et ne pas crasher salement le template).
Je dirais que {% if form.cleaned_data.birthdate and user.attributes.birthdate %}...{% endif %}
ne devrait pas cracher, ou alors attributes a un souci à corriger (il devrait lever un AttributeError si pas présent, gentiment ignoré par le template).
Par rapport aux remarques de Thomas je mettrais un target="_blank"
sur les liens sinon les gens vont jurer après avoir cliqué (parce qu'il me semble qu'il y a plus de gens qui savent fermer un onglet plutôt qu'utiliser le bouton Back, mais ça se discute).
Mis à jour par Thomas Noël il y a plus de 3 ans
Benjamin Dauvergne a écrit :
(parce qu'il me semble qu'il y a plus de gens qui savent fermer un onglet plutôt qu'utiliser le bouton Back, mais ça se discute).
Les agents ne sont pas plus doués pour se retrouver avec des onglets que les usagers lambda... laissons les target tranquilles :)
Mis à jour par Valentin Deniaud il y a plus de 3 ans
- Fichier 0001-manager-look-for-duplicates-on-user-creation-45419.patch 0001-manager-look-for-duplicates-on-user-creation-45419.patch ajouté
Benjamin Dauvergne a écrit :
Je dirais que
{% if form.cleaned_data.birthdate and user.attributes.birthdate %}...{% endif %}
ne devrait pas cracher, ou alors attributes a un souci à corriger (il devrait lever un AttributeError si pas présent, gentiment ignoré par le template).
Effectivement c'est moi qui oubliait qu'on s'en foutait des AttributeError dans un template.
Mais pas la peine finalement, je pars sur l'affichage de tous les attributs sans distinction.
Par rapport aux remarques de Thomas je mettrais un
target="_blank"
sur les liens sinon les gens vont jurer après avoir cliqué (parce qu'il me semble qu'il y a plus de gens qui savent fermer un onglet plutôt qu'utiliser le bouton Back, mais ça se discute).
Je vote en faveur du bouton back, Thomas pourra nous départager si il a envie !
Mis à jour par Valentin Deniaud il y a plus de 3 ans
- Fichier 1601989018.png 1601989018.png ajouté
Mis à jour par Benjamin Dauvergne il y a plus de 3 ans
Thomas Noël a écrit :
Les agents ne sont pas plus doués pour se retrouver avec des onglets que les usagers lambda... laissons les target tranquilles :)
Si on trouve un outil pour faire des formulaires, à l'occasion je ferai bien un sondage :)
Mis à jour par Benjamin Dauvergne il y a plus de 3 ans
Valentin Deniaud a écrit :
Benjamin Dauvergne a écrit :
Je dirais que
{% if form.cleaned_data.birthdate and user.attributes.birthdate %}...{% endif %}
ne devrait pas cracher, ou alors attributes a un souci à corriger (il devrait lever un AttributeError si pas présent, gentiment ignoré par le template).Effectivement c'est moi qui oubliait qu'on s'en foutait des AttributeError dans un template.
Mais pas la peine finalement, je pars sur l'affichage de tous les attributs sans distinction.Par rapport aux remarques de Thomas je mettrais un
target="_blank"
sur les liens sinon les gens vont jurer après avoir cliqué (parce qu'il me semble qu'il y a plus de gens qui savent fermer un onglet plutôt qu'utiliser le bouton Back, mais ça se discute).Je vote en faveur du bouton back, Thomas pourra nous départager si il a envie !
<a href="{% url 'a2-manager-user-detail' pk=user.pk %}">{{ user.get_full_name }}</a> {{ user.email }} {% for attribute in user.attribute_values.all %} {% if attribute.content and attribute.attribute.name != "first_name" and attribute.attribute.name != "last_name" %} - {{ attribute.content }} {% endif %} {% endfor %}
1. J'en ferais un template à part qu'on puisse le surcharger sans toucher à tout ça {% include "authentic2/manager/user-create-duplicate.html" with user=user %}
2. On a aucune idée de l'ordre ou du contenu des attributs, il ne faut pas les afficher comme ça, à la rigueur l'attribut nommé birthdate comme je l'ai montré et que s'il était présent lors de la recherche, mais de toute façon si on veut faire mieux on le fera au niveau du thème Publik;
3. J'aurais mis la suggestion de Thomas sur la date de création et dernier login, ça on est sûr que ça existe et c'est pertinent pour différencier des doublons.
Mis à jour par Valentin Deniaud il y a plus de 3 ans
Mis à jour par Thomas Noël il y a plus de 3 ans
Pour la date de naissance aussi ça serait bien d'avoir une traduction à la « Birthdate: {{ date }} »
Pourquoi ne pas afficher l'adresse ? On connait l'ordre des attributs dans Authentic, non ?
Mis à jour par Benjamin Dauvergne il y a plus de 3 ans
- Statut changé de Solution proposée à Solution validée
{{ user.attributes.birthdate|date }}
birthdate est déjà un objet Date, |date ne doit pas être nécessaire, non ? (et si ça n'en est pas ça ne va juste pas marcher non plus)- je n'aurai pas mis les
<li></li>
danssrc/authentic2/manager/templates/authentic2/manager/duplicate_user_add.html
si quelqu'un veut présenter ailleurs ou autrement (ou oublie de les mettre)
Thomas Noël a écrit :
Pour la date de naissance aussi ça serait bien d'avoir une traduction à la « Birthdate: {{ date }} »
Pourquoi ne pas afficher l'adresse ? On connaît l'ordre des attributs dans Authentic, non ?
Mouais bof ça donnera un truc moche en général parce qu'il y a n'importe quoi dans les adresses (les gens remplissent sans savoir à quoi ça sert je pense, et quand ça pré-remplit n'importe quoi ils corrigent le formulaire directement mais jamais leur profil parce qu'ils ne savent pas que ça existe), mais si tu penses très fort au Nord, pourquoi pas :
{% if user.attributes.address %}- {{ user.attributes.address }}{% endif %}{% if user.attributes.zipcode %} {{ user.attributes.zipcode}}{% endif %}{% if user.attributes.city %} {{ user.attributes.city }}{% endif %}{% if user.attributes.country %}- {{ user.attributes.country }}{% endif %}
Mis à jour par Thomas Noël il y a plus de 3 ans
Benjamin Dauvergne a écrit :
Mouais bof ça donnera un truc moche en général parce qu'il y a n'importe quoi dans les adresses (les gens remplissent sans savoir à quoi ça sert je pense, et quand ça pré-remplit n'importe quoi ils corrigent le formulaire directement mais jamais leur profil parce qu'ils ne savent pas que ça existe), mais si tu penses très fort au Nord, pourquoi pas :
Je voulais juste m'éviter un paramétrage caché au fin fond de publik-base-theme. Tant pis.
Mis à jour par Benjamin Dauvergne il y a plus de 3 ans
Thomas Noël a écrit :
Je voulais juste m'éviter un paramétrage caché au fin fond de publik-base-theme. Tant pis.
Je proposais le bout de template pour que Valentin l'inclut par charité chrétienne, pas pour te pousser à ouvrir un ticket sur publik-base-theme macarel!
Mis à jour par Valentin Deniaud il y a plus de 3 ans
Thomas Noël a écrit :
Pourquoi ne pas afficher l'adresse ? On connait l'ordre des attributs dans Authentic, non ?
Je pense que soit on itère sur tous les attributs et on les affiche comme j'avais fait, mais à ce moment là on se retrouve avec des lignes de taille imprévisible potentiellement très moches, soit on affiche rien (enfin, juste birthdate, mais c'est déjà borderline). Tout ça pour reporter à publik-base-theme le soin d'afficher joliment les attributs connus posés par hobo (ce qu'il n'est pas possible de faire dans un template a2, parce qu'on n'a aucune idée des noms des attributs et c'est pas beau de les guesser).
Mis à jour par Frédéric Péters il y a plus de 3 ans
ce qu'il n'est pas possible de faire dans un template a2, parce qu'on n'a aucune idée des noms des attributs
Mais euh ? Authentic connait totalement les attributs des utilisateurs, il les présente sur la page dans le bon ordre, etc.
Ma position serait d'afficher côte à côte, prénom/nom puis, séparés par des tirets, tous les attributs qualifiés de "searchable" :
ex: Frédéric Péters - fpeters@entrouvert.com - rue de Liedekerke 82 - 1210 - Bruxelles (i.e. comme la capture/maquette)
Mis à jour par Valentin Deniaud il y a plus de 3 ans
Frédéric Péters a écrit :
ce qu'il n'est pas possible de faire dans un template a2, parce qu'on n'a aucune idée des noms des attributs
Mais euh ? Authentic connait totalement les attributs des utilisateurs, il les présente sur la page dans le bon ordre, etc.
Par « connaître » j'entends bien sûr « appeler par son nom », type user.attributes.address
tapé plus haut. À partir du moment où on peut boucler genre sur
tous les attributs qualifiés de "searchable"
C'est bon, mais c'est modulo le searchable ce que j'avais fait plus haut dans le ticket, un pas en avant/un pas en arrière, ça me paraissait un bon moyen de faire avancer le truc que de déporter les discussions de la tête que ça devait avoir dans publik-base-theme.
Mis à jour par Frédéric Péters il y a plus de 3 ans
la tête que ça devait avoir dans publik-base-theme
publik-base-theme c'est bien pour permettre des points qu'on ne souhaiterait pas dans authentic, mais avoir une solution bonne pour tout le monde directement dans authentic, ça doit quand même rester l'objectif.
Donc pour moi, de base un gabarit dans authentic, qui affiche comme j'écrivais. (+ la date de création qui a été notée comme étant utile aussi).
Mais de Benjamin :
{% for attribute in user.attribute_values.all %}
2. On a aucune idée de l'ordre ou du contenu des attributs (...)
Ça veut peut-être dire qu'il manque le nécessaire pour boucler sur les attributs dans le bon ordre ? (qui serait à ajouter)
Mis à jour par Thomas Noël il y a plus de 3 ans
Frédéric Péters a écrit :
Ça veut peut-être dire qu'il manque le nécessaire pour boucler sur les attributs dans le bon ordre ? (qui serait à ajouter)
Au passage : dans l'API de recherche des doublons, pour chaque usager trouvé on renvoie un "text" qui est actuellement juste le nom complet. On devrait en réalité renvoyer ce qu'on projette ici. Et donc, je me dis que c'est dans la fonction find_duplicates qu'il faudrait générer l'information « text = full_name - email - attributs - date de création - date de dernier login », et elle serait utilisée ici.
tous les attributs qualifiés de "searchable"
Plutôt tous les attributs affichés à l'usager. Le fait qu'un attribut soit "searchable" ne veut pas dire qu'il permet de distinguer deux comptes (je dirais presque : "au contraire").
Mis à jour par Frédéric Péters il y a plus de 3 ans
affichés à l'usager
Mais on est en backoffice où tous les attributs sont affichés; pourquoi considérer ce qui serait affiché à l'usager ?
Mis à jour par Thomas Noël il y a plus de 3 ans
Frédéric Péters a écrit :
affichés à l'usager
Mais on est en backoffice où tous les attributs sont affichés; pourquoi considérer ce qui serait affiché à l'usager ?
Parce que je parlais de l'API, mais oui, considérons que même elle sera toujours utilisée en backoffice, alors go go go : tous les attributs.
Mis à jour par Valentin Deniaud il y a plus de 3 ans
- Fichier 0001-manager-look-for-duplicates-on-user-creation-45419.patch 0001-manager-look-for-duplicates-on-user-creation-45419.patch ajouté
- Statut changé de Solution validée à Solution proposée
Re une itération en montrant les attributs searchable=True, donc.
Mis à jour par Thomas Noël il y a plus de 3 ans
Valentin Deniaud a écrit :
Re une itération en montrant les attributs searchable=True, donc.
Je vais être pénible mais on avait dit "tous les attributs" :)
Mis à jour par Valentin Deniaud il y a plus de 3 ans
- Fichier 0001-manager-look-for-duplicates-on-user-creation-45419.patch 0001-manager-look-for-duplicates-on-user-creation-45419.patch ajouté
Thomas Noël a écrit :
Valentin Deniaud a écrit :
Re une itération en montrant les attributs searchable=True, donc.
Je vais être pénible mais on avait dit "tous les attributs" :)
Fred ne paraissait pas convaincu...
Mis à jour par Thomas Noël il y a plus de 3 ans
Je n'avais pas vu le champs caché « <input type="hidden" name="confirm-creation-token" ...> ». Si je comprends bien si on clique une seconde fois sur le bouton de validation, ça va ajouter l'utilisateur tant pis pour les doublons. Je préférerais quelque chose de plus explicite, soit changer le titre du bouton en "Créer quand même" soit (ma préférence) avoir une case à cocher « [ ] Créer ce nouvel utilisateur, ce n'est pas un doublon »
Mis à jour par Thomas Noël il y a plus de 3 ans
- Statut changé de Solution proposée à Solution validée
En fait ça va tout compliquer d'avoir une case à cocher. Le texte « vérifier avant de valider » suffit.
Mis à jour par Valentin Deniaud il y a plus de 3 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 8ae42a05d8faa2898bd6ab0a9765435ad7b6301a Author: Valentin Deniaud <vdeniaud@entrouvert.com> Date: Mon Oct 5 16:13:00 2020 +0200 manager: look for duplicates on user creation (#45419)
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Statut changé de Résolu (à déployer) à Solution déployée
manager: look for duplicates on user creation (#45419)