Basculement automatique d'une ligne formation dès le lendemain de la formation passée

Bonjour, Dans Grist j’ai une page Formation. Je souhaite que les formations passées basculent dans la page formations passées le lendemain de la formation afin que les agents puissent remplir le formulaire de feed back grace au QR code le jour de la formation. J’aurai aimé créer un trigger formula mais je ne trouve pas ce type de colonne. Pouvez-vous m’aider ? merci

Excellente question, je me la posais tout à l’heure aussi.
J’ai voulu faire un fonctionnement similaire, une modification d’une valeur une fois que l’heure (ou le jour) est passé. En me disant qu’une simple formule d’initialisation (du type if $Date_et_heure > NOW(): « Nouveau statut »).
Mais visiblement, un changement d’heure ne permet pas de déclencher une formule d’initialisation. Ni même une formule normale d’ailleurs.

On m’a suggéré que le changement de jour faisait recalculer les formules (et formules d’initialisation ?). Je viens donc de lancer un test, je verrais demain (ou lundi) ce qu’il en est concrètement.

1 « J'aime »

Bonjour,

Je partage ici le modèle du grist qu’on utilise pour les inscriptions aux webinaires : Modèle : Grist pour des inscriptions à des formations, avec questionnaire de satisfaction

On a une seule table Formations et on utilise une colonne Booléen Done qu’on active à la main quand la formation est passée. Avec l’astuce expliquée, ça permet de n’afficher que les formations à venir dans le formulaire d’inscription, et dans le questionnaire de satisfaction les formations passées.

J’ai testé de mettre cette formule dans la colonne booléen :

import datetime

$Date.timestamp() < datetime.datetime.now(datetime.timezone.utc).timestamp()

cela fonctionne bien pour retourner True quand la formation est passée (le timestamp permet de s’affranchir du fuseau horaire, j’avais un décalage sinon, en utilisant seulement datetime).

Par contre, au vu de cet échange eu avec Paul de GristLabs, je pense qu’il faut attendre 1h pour que la formule se redéclenche (ou sinon il faut recharger le moteur de données, ou faire une action qui redéclenche le calcul, comme changer le nom de la colonne qui la contient, par exemple).

Les serveurs Grist conservent les documents ouverts lorsque les utilisateurs les consultent et un long moment après leur fermeture (au cas où ils reviendraient). Lorsqu’un serveur ouvre un document, toutes les formules sont recalculées. Cela ne ralentit pas la lecture des données en cache, mais doit être terminé avant la première modification. Pour un document ouvert, le serveur met également à jour l’horodatage toutes les heures, de sorte que toutes les formules dépendantes du temps sont recalculées. Le calcul n’est pas déclenché par l’ouverture de tables ou de vues spécifiques. Si le document est fermé sur le serveur, l’ouverture d’une table ou d’une vue entraînera l’ouverture du document sur le serveur, ce qui déclenchera un recalcul complet comme indiqué ci-dessus.

Bonjour,
Normalement dans Grist une formule dépendant du temps doit se recalculer toutes les heures, j’ai testé celle-ci et ça a bien été basculé, je n’ai pas le temps exact après lequel ça a basculé, mais je pense que c’est bien 1h après que j’aie ouvert le document :

import datetime

$Date.timestamp() < datetime.datetime.now(datetime.timezone.utc).timestamp()

En fait, ça semble fonctionner tb aussi avec

$Date < NOW()

Dans le templete événements multiples, c’est cette formule qui était utilisée $Passe_ == True
Ou dois-je mettre votre formule ?

Des tests que j’ai fait :

  • pas de maj automatique « instantanée », lors d’un changement de minute par exemple
  • recharger le moteur de données actualise en effet les formules dépendantes des heures
  • au bout d’une heure, pas de maj automatique. Par contre au bout de 2h c’était bon, donc je ne sais pas quelle est la durée exacte
  • je pense que ça recharge à la journée (ou une autre fréquence ?), puisque ma formule était actualisée alors que je ne l’avais pas regardée depuis plusieurs jours
    Et, en effet, fermer et rouvrir un document juste après ne fait rien, donc il doit y avoir cette « latence » d’une heure.

Dans tous les cas, pour répondre à la question de @amelie, la bascule sera bien faite le lendemain.

1 « J'aime »

Bonjour Amélie,

Dans le modèle « événements multiples », je vois bien la formule $Date < NOW() dans la colonne « Passé ? »

Par contre ce modèle va quand même afficher les évènements passés dans le form d’inscription, et les évènements futurs dans le form « feedback ».

Pour éviter cet écueil, vous pouvez utiliser l’astuce expliquée ici :