Projet

Général

Profil

Bug #66632

[Visibilité d'une cellule] Difficultés à appliquer des conditions négatives ou avec des variables contenant du texte

Ajouté par Mikaël Ates (de retour le 29 avril) il y a presque 2 ans. Mis à jour il y a presque 2 ans.

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

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Suite à #66263 je rencontre quelques difficultés pour appliquer des conditions négatives.

J'essai de réduire le cas avec un premier exemple puis je décris ensuite le cas de départ.

Je crée sur la page https://portail-minint.test.entrouvert.org/manage/pages/81/une variable nommée var_not_empty qui ne contient rien dans le champs gabarit.

Sur cette même page je crée une cellule texte avec la condition not var_not_empty.

La cellule s'affiche ce qui est attendu.

Je met désormais la chaîne de caractère « coucou » dans la variable var_not_empty.

La cellule s'affiche alors qu'elle ne devrait pas.

Si je change la condition de la cellule texte pour mettre uniquement var_not_empty.

Quand la variable est vide, la cellule ne s'affiche pas. Quand la variable est renseignée avec la chaîne « coucou », la cellule ne s'affiche pas non plus.

Je renseigne maintenant dans la variable {{ "coucou" }}. La cellule s'affiche.

Le cas d'usage de départ. Sur la page https://portail-minint.test.entrouvert.org/manage/pages/81/, 2 variables de page fiche_agent et fiche_referent qui contiennent chacune le résultat d'une requête sur fiche.

Aucun de ces 2 requêtes ne doit aboutir pour un utilisateur "normal".

Dans une cellule proto json (pour comparaison) il y a :

<p>{{ fiche_referent }}</p>
<p>{{ fiche_agent }}</p>
{% if fiche_referent == "None" and fiche_agent == "None" %}
<p>Vous ne disposez d'aucun accès.</p>
{% endif %}

Je me connecte avec un user "normal" où les 2 variables doivent être vides : /Test4242$

Ce qui donne :

None

None

Vous ne disposez d'aucun accès.

C'est le résultat attendu.

Également sur cette page une cellule texte avec la même condition : fiche_referent "None" and fiche_agent "None" et contenant le texte Vous ne disposez d'aucun accès..

Cette cellule ne s'affiche pas ce qui veut donc dire que la condition n'est pas évualée "de la même façon". (Le problème est là, je déroule ensuite d'autres tests.)

Je me connecte avec un utilisateur qui a une fiche afin qu'une des 2 fiches soit renseignée, /Test4242$.

La cellule proto json affiche :

Entr'ouvert - 123 - REF UN Ref un exploctestrefun@yopmail.com

None

La condition fonctionne.

La cellule texte ne s'affiche pas ce qui est aussi le comportement attendu.

Je change le test de non-existance en not fiche_referent and not fiche_agent qui me semble la bonne condition.

Je me connecte avec l'utilisateur pour lequel les variables doivent ne pas être renseignées :

None

None

Le message ne s'affiche pas, la condition n'est pas satisfaite alors qu'elle devrait l'être.

La cellule texte elle s'affiche, la condition est bien satisfaite.

Je me connecte avec l'utilisateur pour lequel une des variables est renseignée.

La cellule proto json affiche :

Entr'ouvert - 123 - REF UN Ref un exploctestrefun@yopmail.com

None

La condition semble ici correctement évaluée.

La cellule texte s'affiche à nouveau, la condition est satisfaite alors qu'elle ne devrait pas. (Problème ici aussi)

Bilan :
  • condition fiche_referent "None" and fiche_agent "None" à l'interieur de la cellule proto json : OK
  • condition fiche_referent "None" and fiche_agent "None" sur une cellule texte : KO
  • condition not fiche_referent and not fiche_agent à l'interieur de la cellule proto json : KO
  • condition not fiche_referent and not fiche_agent sur une cellule texte : KO

Fichiers


Demandes liées

Lié à Combo - Development #66263: Visibilité d'une cellule - ajouter une condition d'affichageFermé15 juin 2022

Actions

Révisions associées

Révision f9702223 (diff)
Ajouté par Lauréline Guérin il y a presque 2 ans

data: inject computed variables in context for cell condition (#66632)

Historique

#1

Mis à jour par Mikaël Ates (de retour le 29 avril) il y a presque 2 ans

  • Lié à Development #66263: Visibilité d'une cellule - ajouter une condition d'affichage ajouté
#2

Mis à jour par Mikaël Ates (de retour le 29 avril) il y a presque 2 ans

  • Sujet changé de [Visibilité d'une cellule] Difficultés à appliquer des conditions négatives et du texte à [Visibilité d'une cellule] Difficultés à appliquer des conditions négatives ou avec des variables contenant du texte
#3

Mis à jour par Mikaël Ates (de retour le 29 avril) il y a presque 2 ans

L'exemple avec var_not_empty remproduit sur https://validation.test.entrouvert.org/manage/pages/134/. Constat en un clic : https://validation.test.entrouvert.org/tests-conditions/. A constater : la cellule ne s'affiche pas.

#4

Mis à jour par Mikaël Ates (de retour le 29 avril) il y a presque 2 ans

  • Tracker changé de Development à Bug
#6

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

  • Assigné à mis à Mikaël Ates (de retour le 29 avril)

Tes variables:
{{ cards|objects:"agent-bailleur"|filter_by:"actif"|filter_value:"Oui"|filter_by_user:request.user|first|get:"text" }}

(note le |get:"text" à la fin)

Ca produit, lorsque la fiche n'est pas trouvée, une chaîne "None", qui n'est pas une chaîne vide.
Donc soit dans tes conditions tu écris var == "None", soit pour simplifier tu supprimes le |get à la fin de ta variable; dans le cas où la fiche n'est pas trouvée tu auras un None, et du coup tu peux écrire not var

J'ai fait la modif des variables (supprimer le |get) et adapté les if de la cellule protojson, est-ce que c'est mieux ?

#7

Mis à jour par Mikaël Ates (de retour le 29 avril) il y a presque 2 ans

  • Assigné à changé de Mikaël Ates (de retour le 29 avril) à Lauréline Guérin

Non, la cellule json fonctionnait correctement et je m'en suis servi pour illustrer la condition qui ne fonctionne pas sur la cellule texte.

J'avais aussi testé cette modification des variables.

Le problème porte sur la quatirème cellule du contenu de la page. C'est une cellule texte avec comme condition : not fiche_referent and not fiche_agent. La cellule s'affiche même quand ces variables sont valorisées. Tu peux le constater en te connectant avec /Test4242$ : la cellule texte s'affiche alors que l'on voit grâce à la cellule json que fiche_referent est valorisée.

#8

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

ok en effet, il y a un bug :)

#10

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

Explications:

j'avais pris comme modèle l'utilisation des variables de page dans la cellule stats, où au lieu de calculer la variable et de l'injecter dans le contexte, le nom de la variable (si trouvé dans le gabarit) est remplacé par son expression:

    def evaluate_range_template(self, value):
        if value in self.page.extra_variables:
            value = self.page.extra_variables[value].strip('{ }')

        context = self.request_context
        context.update({'now': datetime.now, 'today': datetime.now})
        try:
            return Template('{{ %s|date:"Y-m-d" }}' % value).render(context)
        except (VariableDoesNotExist, TemplateSyntaxError):
            return None

Mais ça suppose que la condition ne contienne que le nom de la variable. Or ici Mik a besoin d'écrire un "not var" ou même un "not var1 and not var2" (et c'est bien normal).

Donc changement de comportement: les variables sont évaluées et injectées dans le contexte d'évaluation de la condition.
(Et on se rapproche du comportement des variables dans la cellule fiche ou dans une cellule protojson, où on a bien leur évaluation et non leur expression).

Petit bémol: du coup dans le contexte on se retrouve avec des string, donc une variable de la forme {{ cards|objects:"ma-fiche"|first }} qui donne une fiche, donc normalement un dict, n'est plus un dict dans le contexte. Il faut bien écrire ses variables de façon à obtenir une chaîne de caractères à la fin.

#12

Mis à jour par Valentin Deniaud il y a presque 2 ans

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

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

  • Statut changé de Solution validée à Résolu (à déployer)
commit f97022233e9c2a92a45ca3bc285b90682970e966
Author: Lauréline Guérin <zebuline@entrouvert.com>
Date:   Mon Jun 27 16:44:25 2022 +0200

    data: inject computed variables in context for cell condition (#66632)
#15

Mis à jour par Transition automatique il y a presque 2 ans

  • Statut changé de Résolu (à déployer) à Solution déployée
#16

Mis à jour par Transition automatique il y a plus d'un an

Automatic expiration

Formats disponibles : Atom PDF