Development #48386
liste à choix multiples dynamique
0%
Description
-Dans la continuité des vues personnalisées dynamiques sur les fiches qui permet d'avoir des champs liste filtrés, pouvoir les faire fonctionner avec des champs liste à choix multiple.
1 formulaire de test ici :
https://demarches-slaget.test.entrouvert.org/zz_ressources-parametrage/inscriptions-multiples-pour-test/-
Fichiers
Demandes liées
Historique
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Sujet changé de les vues personnalisées dynamiques sur les fiches ne fonctionnent pas avec les liste multiples à liste à choix multiples dynamique
Ok pas lié à "vues personnalisées dynamiques sur les fiches" : ce serait juste pareil avec n'importe quelle autre source de données, les champs "liste à choix multiples" ne sont pas dynamiques. Le travail doit commencer par permettre à ces champs d'être rendus via un gabarit, c'est #23413, je viens de me l'assigner.
Mis à jour par Frédéric Péters il y a presque 3 ans
- Dupliqué par Development #53763: Rafraichissement d'un champ liste à choix multiples en fonction d'un champ liste (sur une même page) ajouté
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
Si la description parle bien de pouvoir définir un gabarit comme filtre d'un champ liste à choix multiple, je pense que ce ticket résoudrait #59745.
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Fichier 0001-carddef-add-custom-view-dynamic-filter-on-items-fiel.patch 0001-carddef-add-custom-view-dynamic-filter-on-items-fiel.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
Ça accepte une liste simple "1,2,3", une liste venant d'un template "{{ "1,2" }}" (c'est moche mais ça simule le cas "{% for x in truc }{{ x.id }},{ endfor %}") et une liste directe du style "{{ form_var_items_raw }}"), ça fait un ".strip()" sur chaque élément histoire de ne pas avoir des erreurs dans les templates dues à un simple espace perdu. Si un autre séparateur a été évoqué/prévu, c'est à changer.
Mis à jour par Frédéric Péters il y a plus de 2 ans
La demande c'est l'équivalent à #46989, c'est-à-dire qu'il y a aussi à gérer l'affichage/mise à jour sur une même page.
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Fichier 0001-carddef-add-custom-view-dynamic-filter-on-items-fiel.patch 0001-carddef-add-custom-view-dynamic-filter-on-items-fiel.patch ajouté
Ok, je me suis inspiré du code et du test dans #46989.
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
Ça ne gère pas le cas où on passe une liste de item['text']
(typiquement si on passe un form_var_blah
où blah est un ItemsField vers une DS, et pas une liste simple) mais ce n'est pas géré non plus pour un ItemField. Si on va vers ça je pense que ça demanderait un peu de factorisation dans une méthode pour évaluer un template contenant des id ou text et obtenir la liste des ids en retour d'un seul coup (sachant que ça peut être intéressant pour un ItemField aussi de matcher une liste, en modifiant le Equal en Contains au passage, si on peut gérer les deux sans rien changer à l'interface ce sera pratique).
Mis à jour par Frédéric Péters il y a plus de 2 ans
Par rapport à #46989 dans ta branche on n'a pas de changement sur le champ liste à choix multiples, cf fichier attaché. (ou pour une version longue, la vidéo dans #46989, ~reprise sur la page de documentation, https://doc-publik.entrouvert.com/admin-fonctionnel/les-tutos/vue-personnalisee-dynamique/).
Ça demande la prise en charge des listes à choix multiple dans live_process_fields(), pour fournir la nouvelle liste d'options lors de l'appel à /live + le js qui va actualiser les cases à cocher. Dans live_process_fields() il y a deux parties, la première pour obtenir la liste des options il y a des chances que juste faire
- if field.key == 'item' and field.data_source: + if field.key in ('item', 'items') and field.data_source:
et la deuxième ça concerne le préremplissage dynamique, ça peut être laissé de côté il y a un autre ticket spécifique (#59052).
Pour le js ça serait qommon.forms.js, ici :
- if (value.items && $widget.is('.RadiobuttonsWidget')) { + if (value.items && $widget.is('.CheckboxesWidget')) { + ... + } else if (value.items && $widget.is('.RadiobuttonsWidget')) {
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Statut changé de Solution proposée à En cours
Ok je vais regarder ça.
Mis à jour par Frédéric Péters il y a plus de 2 ans
Suite au dernier commentaire sur #59745 je regarde le tout et en fait ça n'est pas lié à ce ticket, qui est d'avoir une "liste à choix multiples dynamique", i.e. un champ liste à choix multiples, sur un formulaire, dont le contenu varie. Alors que dans #59745 le formulaire ça reste un champ liste simple dessus, c'est le critère qui porte sur une liste à choix multiples. (ça explique totalement pourquoi je ne voyais que des trucs manquants dans le patch par rapport à ce ticket).
Mis à jour par Frédéric Péters il y a plus de 2 ans
1 formulaire de test ici :
https://demarches-slaget.test.entrouvert.org/zz_ressources-parametrage/inscriptions-multiples-pour-test/
Qui n'existe plus; donc compliqué ce ticket :/
Bref comme c'est parti sur ma suggestion en lien avec #59745, je serais pour en faire la nouvelle interprétation, et laisser les champs sélection multiple dynamiques dans un formulaire à nouveau ticket que je créerai.
Je regarde donc enfin le code, je ne suis pas fan de la forme dans le with publisher.complex_data():
, je préférais qu'on y aie un minimum, comme vu ailleurs,
+ with publisher.complex_data(): + value = WorkflowStatusItem.compute(expression, allow_complex=True) + value = publisher.get_cached_complex_data(value)
et ne pas introduire de gestion de valeurs multiples (qu'on n'a pas sur l'interprétation que fait /api/autocomplete/), donc dans la suite simplement,
+ if isinstance(value, list): + criteria.value = value + elif isinstance(value, str): + criteria.value = [value.strip()] + else: + criteria.value = None
En vérifiant le comportement de Intersects() avec None comme valeur, pour que ça corresponde à ce que fait l'absence de valeur sur l'autocomplete (i.e. ignorer le critère). (ça demande peut-être de retirer le critère que passer None).
Mis à jour par Frédéric Péters il y a plus de 2 ans
pour que ça corresponde à ce que fait (…) sur l'autocomplete
À continuer à réfléchir, je pense que cette correspondance doit être centrale et que ça amène qu'on ne doit pas gérer les données complexes ici. (sauf à également vouloir se lancer dans leur prise en charge dans l'autocomplete).
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Fichier 0001-carddef-add-custom-view-dynamic-filter-on-items-fiel.patch 0001-carddef-add-custom-view-dynamic-filter-on-items-fiel.patch ajouté
- Statut changé de En cours à Solution proposée
Voilà, restreint au problème du filtrage via un template d'un champ list à choix multiple dans une vue dynamique et ne supportant qu'une seule valeur, pas de liste pas de donnée complexe.
Mis à jour par Nicolas Roche il y a plus de 2 ans
Testé vite fait (pour #60423) et juste pour info, je récupère bien les valeurs dans la liste à choix multiple, mais uniquement sur une page suivante (pas en live).
Mis à jour par Frédéric Péters il y a plus de 2 ans
- Dupliqué par Development #53763: Rafraichissement d'un champ liste à choix multiples en fonction d'un champ liste (sur une même page) supprimé
Mis à jour par Frédéric Péters il y a plus de 2 ans
- Lié à Development #53763: Rafraichissement d'un champ liste à choix multiples en fonction d'un champ liste (sur une même page) ajouté
Mis à jour par Frédéric Péters il y a plus de 2 ans
Testé vite fait (pour #60423)
Oui ça n'a plus de rapport j'ai lié le bon ticket.
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Description mis à jour (diff)
Je ferme ce ticket mal nommé, la discussion n'a pas d'intérêt pour la suite.
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Copié vers Development #60428: Filtrer un champ liste à choix multiple par un template dans une vue personnalisée de type source de donnée ajouté
Mis à jour par Frédéric Péters il y a plus de 2 ans
- Copié vers Development #60428: Filtrer un champ liste à choix multiple par un template dans une vue personnalisée de type source de donnée supprimé
Mis à jour par Frédéric Péters il y a plus de 2 ans
- Lié à Development #60428: Filtrer un champ liste à choix multiple par un template dans une vue personnalisée de type source de donnée ajouté
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Statut changé de Solution proposée à Fermé
Remplacé par #53763 qui est plus frais.