Projet

Général

Profil

Development #48386

liste à choix multiples dynamique

Ajouté par Stéphane Laget il y a plus de 3 ans. Mis à jour il y a plus de 2 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
08 novembre 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

Lié à w.c.s. - Development #53763: Rafraichissement d'un champ liste à choix multiples en fonction d'un champ liste (sur une même page)Fermé05 mai 2021

Actions
Lié à w.c.s. - Development #60428: Filtrer un champ liste à choix multiple par un template dans une vue personnalisée de type source de donnéeFermé07 janvier 2022

Actions

Historique

#1

Mis à jour par Stéphane Laget il y a plus de 3 ans

  • Description mis à jour (diff)
#2

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.

#4

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é
#6

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.

#8

Mis à jour par Benjamin Dauvergne il y a plus de 2 ans

  • Assigné à mis à Benjamin Dauvergne
#9

Mis à jour par Benjamin Dauvergne il y a plus de 2 ans

#10

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.

#11

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.

#13

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).

#14

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')) {
#15

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.

#16

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).

#18

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).

#19

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).

#20

Mis à jour par Benjamin Dauvergne il y a plus de 2 ans

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.

#21

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).

#24

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é
#25

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é
#26

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.

#30

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.

#31

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é
#32

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é
#33

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é
#34

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.

Formats disponibles : Atom PDF