Projet

Général

Profil

Development #44155

exposer les vues personnalisées globales des fiches en source de données

Ajouté par Frédéric Péters il y a presque 4 ans. Mis à jour il y a plus de 3 ans.

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

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

C'est une idée pas nouvelle mais je ne retombe pas sur un ticket existant.

On expose les fiches en source de données pour les champs listes/etc., mais c'est forcément toutes les fiches.

On voudrait pouvoir faire une vue personnalisée filtrant les fiches (par exemple on aurait des fiches "lieux cultures", et dedans un attribut "type de lieu", et on ferait une vue "salles de concert", ou on aurait des fiches "piscines", et on ferait une vue "piscines ouvertes" se basant sur le statut). Et pouvoir ensuite sélectionner cette vue comme source de données.


Fichiers


Demandes liées

Lié à w.c.s. - Development #46989: source de données dynamique via des fiches / vues personnaliséesFermé25 septembre 2020

Actions
Bloque w.c.s. - Development #46862: fiches : empêcher de vider le gabarit de résumé si des vues "source de donnée" existentFermé22 septembre 2020

Actions

Révisions associées

Révision 4f8903b6 (diff)
Ajouté par Frédéric Péters il y a plus de 3 ans

misc: move carddef data source support to carddef module (#44155)

Révision 3f60f3c8 (diff)
Ajouté par Frédéric Péters il y a plus de 3 ans

general: expose custom views as data sources (#44155)

Historique

#1

Mis à jour par Pierre Cros il y a presque 4 ans

Pour moi ça remplacerait même #43328. J'ai l'impression que je peux faire la même chose avec ça.

#2

Mis à jour par Stéphane Laget il y a presque 4 ans

La limite, pour remplacer les requêtes csv, c'est de ne pas pouvoir modifier la projection, des doublons et il faudrait également si possible pouvoir passer des variables (mais peut-être que c'est hors sujet)

#3

Mis à jour par Frédéric Péters il y a presque 4 ans

C'est hors sujet, il y aura d'autres tickets.

#4

Mis à jour par Lauréline Guérin il y a presque 4 ans

notes de l'EO day: ça ne remplace pas #43328

ajouter la possibilité de configurer une vue globale de fiche ou de demande en source de données (case à cocher pour exposer la vue en tant que source de données)

#6

Mis à jour par Thomas Noël il y a presque 4 ans

Et pouvoir ensuite sélectionner cette vue comme source de données.

Je note ici qu'en plus des filtrages il serait pertinant que l'ordre de tri de la vue soit respecté dans la source de donnée correspondante.

#7

Mis à jour par Thomas Noël il y a plus de 3 ans

Thomas Noël a écrit :

Et pouvoir ensuite sélectionner cette vue comme source de données.

Je note ici qu'en plus des filtrages il serait pertinant que l'ordre de tri de la vue soit respecté dans la source de donnée correspondante.

Et aussi, permettre de choisir quelle sera la colonne définissant "id", et quelle sera celle qui définira le "text". Sachant que pour le text, on pourrait rêver que ça soit un gabarit mais ce n'est pas évident (problème de performance).

#8

Mis à jour par Frédéric Péters il y a plus de 3 ans

Ça devrait être un autre ticket.

#9

Mis à jour par Thomas Noël il y a plus de 3 ans

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

Ça devrait être un autre ticket.

Oui : #45633

#10

Mis à jour par Frédéric Péters il y a plus de 3 ans

  • Assigné à mis à Frédéric Péters
#12

Mis à jour par Frédéric Péters il y a plus de 3 ans

0001 qui déplace juste un peu de code, 0002 qui fait le travail.

#13

Mis à jour par Thomas Noël il y a plus de 3 ans

0001 : ok

0002.

Sur ce passage :

    @classmethod
    def get_as_data_source_options(cls):
        carddefs = {}
        for carddef in cls.select(lightweight=True, ignore_errors=True, order_by='name'):
            if not carddef.digest_template:
                continue
            data_source_id = 'carddef:%s' % carddef.url_name
            carddefs[carddef.id] = {'url_name': carddef.url_name, 'name': carddef.name}
            yield (data_source_id, carddef.name, data_source_id)
        clauses = [Equal('formdef_type', 'carddef'), Equal('visibility', 'datasource')]
        for custom_view in get_publisher().custom_view_class.select(clauses):
            carddef = carddefs.get(custom_view.formdef_id)
            data_source_id = 'carddef:%s:%s' % (carddef['url_name'], custom_view.slug)
            yield (data_source_id, '%s - %s' % (carddef['name'], custom_view.title), data_source_id)

il y aura un problème ici si le gabarit de résumé de la fiche n'existe pas : carddefs.get(custom_view.formdef_id) sera vide.

Je propose l'ajout d'un « if not carddef: continue » juste après le « carddef = carddefs.get(custom_view.formdef_id) »


Pour le reste ça me semble ok.

Deux remarques :
  • avec ça, j'ai eu l'impression que l'ajout systématique des fiches en tant que source de donnée perd tout intérêt (mais en fait non, car c'est utile de conserver la possibilité de lien vers "n'importe quelle fiche")
  • il sera sans doute demandé d'avoir la possibilité de configurer un gabarit de résumé pour chaque source ainsi créée, ou au moins de pouvoir décider qu'une autre colonne est le text... mais bon, passons là dessus pour l'instant.
#14

Mis à jour par Frédéric Péters il y a plus de 3 ans

il y aura un problème ici si le gabarit de résumé de la fiche n'existe pas : carddefs.get(custom_view.formdef_id) sera vide.

J'ai ajouté le "if not carddef: continue" mais la situation ne peut normalement pas arriver, vu qu'on ne peut activer en source de données une vue que si elle a le digest_template,

            if isinstance(self.formdef, CardDef) and self.formdef.digest_template:
                options.append(('datasource', _('as data source'), 'datasource'))

J'ai poussé vers la branche la version rebasée.

#16

Mis à jour par Thomas Noël il y a plus de 3 ans

  • Statut changé de Solution proposée à Solution validée

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

J'ai ajouté le "if not carddef: continue" mais la situation ne peut normalement pas arriver, vu qu'on ne peut activer en source de données une vue que si elle a le digest_template,

En fait c'est en jouant que j'ai rencontré le crash, ça arrive dès que tu mets un digest_template, que tu créées une vue "source de données", puis que tu retires les digest_template. Ok, c'est tordu. En fait on devrait aussi interdire la suppression du digest_template si des vues "source de données" existent → #46862

#19

Mis à jour par Lauréline Guérin il y a plus de 3 ans

  • Bloque Development #46862: fiches : empêcher de vider le gabarit de résumé si des vues "source de donnée" existent ajouté
#20

Mis à jour par Frédéric Péters il y a plus de 3 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 3f60f3c8e1784c72ba139e7a452d9a26b73bcd80
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Mon Aug 24 14:27:35 2020 +0200

    general: expose custom views as data sources (#44155)

commit 4f8903b6e94aa860e0278c0873d93a4df128f093
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Sat Aug 22 21:31:09 2020 +0200

    misc: move carddef data source support to carddef module (#44155)
#21

Mis à jour par Frédéric Péters il y a plus de 3 ans

  • Lié à Development #46989: source de données dynamique via des fiches / vues personnalisées ajouté
#22

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

Formats disponibles : Atom PDF