Project

General

Profile

Development #61083

dataviz, extension à l'API pour permettre des sous-filtres

Added by Valentin Deniaud 7 months ago. Updated 6 months ago.

Status:
Fermé
Priority:
Normal
Target version:
-
Start date:
25 January 2022
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

Description

Dans l'API stat des différentes briques, on expose d'abord un catalogue des statistiques disponibles avec d'éventuels filtres par statistiques, type :

{
'data': [
  {
    'name': 'Nombre de demandes',
    'url': 'https://wcs.dev.publik.love/api/statistics/forms/count/',
    'id': 'forms_counts',
    'filters': [
      {
    'id': 'form',
    'label': 'Formulaire',
    'options': [
      {'id': '_all', 'label': 'Tous'},
      {'id': '1', 'label': 'Inscription piscine'},
      {'id': '2', 'label': 'Commande de bacs'},
    ],
    'required': True,
    'default': '_all',
      },
    ],
  }
]
}

Dans cet exemple wcs expose une statistique « Nombre de demandes », filtrable selon le formulaire.

Imaginons maintenant que l'on veuille permettre un filtrage selon les champs du formulaire, à la bijoe. Cela dépend entièrement du choix réalisé, on ne les connaît pas à l'avance.

Normalement si je sélectionne un formulaire ça donne :

GET https://wcs.dev.publik.love/api/statistics/forms/count/?form=2

{
  'data': {
    'series': [{'data': [1, 2], 'label': 'Nombre de demandes'}],
    'x_labels': ['2020-07', '2020-08']
    },
  'err': 0
}

Et je me dis que ça pourrait renvoyer des sous-filtres dans une clé supplémentaire :

GET https://wcs.dev.publik.love/api/statistics/forms/count/?form=2

{
  'data': {
    'series': [{'data': [1, 2], 'label': 'Nombre de demandes'}],
    'x_labels': ['2020-07', '2020-08'],
    'subfilters':
      [
        {
          'id': 'nb_bacs',
          'label': 'Nombre de bacs',
          'options': [
            {'id': '1', 'label': 'Un'},
            {'id': '2', 'label': 'Deux'},
          ],
        },
      ],
    },
  'err': 0
}

ce qui permet ensuite de réinterroger avec ?nb_bacs=xxx.


Files

0001-wip.patch (3.54 KB) 0001-wip.patch Valentin Deniaud, 25 January 2022 05:35 PM
0001-dataviz-add-support-for-subfilters-61083.patch (9.39 KB) 0001-dataviz-add-support-for-subfilters-61083.patch Valentin Deniaud, 07 February 2022 06:04 PM
0001-dataviz-add-support-for-subfilters-61083.patch (10.9 KB) 0001-dataviz-add-support-for-subfilters-61083.patch Valentin Deniaud, 15 February 2022 05:11 PM

Associated revisions

Revision 30d1483f (diff)
Added by Valentin Deniaud 6 months ago

dataviz: add support for subfilters (#61083)

History

#1

Updated by Valentin Deniaud 7 months ago

Patch tout simple pour illustrer.

Le problème avec ça c'est qu'il y a besoin de deux clics sur le bouton pour avoir les nouveaux champs :
  • Sélection du formulaire
  • Clic sur « Enregistrer »
    • Les champs sont rafraîchis
    • Le graphe avec les nouvelles données et les sous-filtres correspondant au formulaire choisi est récupéré en ajax
    • Donc les sous-filtres n'apparaissent pas dans les champs de la cellule
  • Nouveau clic sur « Enregistrer »
    • Les champs sont rafraîchis, et les sous-filtres sont là

Je ne sais pas encore comment faire, sûrement du JS pour forcer le rafraîchissement du graphe avant celui du formulaire.

#2

Updated by Valentin Deniaud 7 months ago

  • Status changed from Solution proposée to En cours
#3

Updated by Valentin Deniaud 6 months ago

Même pas de javascript, à la place une petite astuce pour recharger le formulaire après le save() (lire PageEditCellView.form_valid pour comprendre).

Aussi par rapport à la description, j'ajoute une clé has_subfilters au filtre qui déclenche l'apparation des sous-filtres, pour ne pas recharger les données inutilement.

#4

Updated by Frédéric Péters 6 months ago

Je verrais bien un commentaire au-dessus de :

                self.__init__()

(ou découper l'init pour avoir une méthode avec un nom explicite qui serait appelée ici).

#5

Updated by Valentin Deniaud 6 months ago

Frédéric Péters a écrit :

Je verrais bien un commentaire au-dessus de :

[...]

(ou découper l'init pour avoir une méthode avec un nom explicite qui serait appelée ici).

Yep, il s'agit de 1/ virer les champs obsolètes 2/ ajouter les nouveaux, je découpe pour le 2/ mais le 1/ était géré par le super().__init__(), donc il faut faire un peu autrement (et c'est tant mieux).

#6

Updated by Frédéric Péters 6 months ago

  • Status changed from Solution proposée to Solution validée
#7

Updated by Valentin Deniaud 6 months ago

  • Status changed from Solution validée to Résolu (à déployer)
commit 30d1483f03d17344bb9c7adc5f6d3d4e5e7ce1b7
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Mon Jan 24 18:13:24 2022 +0100

    dataviz: add support for subfilters (#61083)
#8

Updated by Transition automatique 6 months ago

  • Status changed from Résolu (à déployer) to Solution déployée
#9

Updated by Transition automatique 4 months ago

Automatic expiration

Also available in: Atom PDF