Template Grist : Dépôt de demandes avec PJ

Voici un prototype pour utiliser Grist comme portail / front-office de dépôt et suivi de demandes usagers, avec chargement de pièce-jointe.

Il peut servir d’interface pour déposer par exemple des demandes de remboursement de factures ou notes de frais.

- Page « Nouvelle demande » : une fiche permet de renseigner les informations de demande de remboursement (nom, contact, montant) et de charger la PJ (facture, note de frais ou autre). Elle est accessible à des utilisateurs anonymes (non connectés) ou à des utilisateurs ayant un compte (connectés).

- Page « Suivi de demandes » :

  • affiche un tableau avec les demandes soumises : pour les utilisateurs anonymes, cela permet de modifier la demande en cas d’erreur (ne fonctionnera que tant que l’id de session du navigateur est le même) ; pour les utilisateurs connectés, cela permet d’accéder au suivi de leurs demandes déjà déposées (se base sur l’email de la personne connectée qui est comparé à l’email indiqué lors du dépôt de la demande)
  • affiche un tableau de discussion : permettant de discuter avec le demandeur, par exemple pour demander un complément d’information ou en cas de document manquant. Ce tableau est dynamique, basé sur l’identifiant de la demande.

Vue utilisateur anonyme :
depot fact anon

Vue propriétaire :
depot fact owner

Les permissions :

C’est au niveau des permissions avancées que ça se joue : elles sont réglées pour que l’utilisateur qui ajoute une demande puisse voir cette demande uniquement, sans voir les demandes des autres. Cela signifie :

  • pour un utilisateur ayant un compte : il pourra soumettre une demande et voir toutes ses demandes passées

  • pour un utilisateur anonyme : il pourra soumettre une demande et voir cette demande tant qu’il reste dans une même session sur son navigateur internet. Ca fonctionne avec un « sessionID », qui est un identifiant de session du navigateur. Si ce même utilisateur anonyme se rend sur l’url du document le lendemain, il ne verra plus sa demande. Par contre si il crée un compte avec l’email de contact qu’il a renseigné dans le formulaire, et qu’il se connecte, il pourra accéder à ses demandes passées.

Pour tester en utilisateur anonyme, on peut par exemple ouvrir l’url dans une fenêtre de navigation privée

  • seuls les propriétaires du document voient les demandes de tout le monde.

Aller plus loin :

  • connecter à n8n pour envoyer un mail au demandeur en cas de changement de statut, ou sur demande du propriétaire du document
  • ajouter la validation des champs de la fiche (avec newRec)

N’hésitez-pas si vous avez des idées d’améliorations !


Enregistrer une copie du modèle (bouton « Utiliser ce modèle » en haut à droite de l’écran) :
https://grist.incubateur.anct.gouv.fr/o/tutos-templates/vN4A44Uw99Ao/Prototype-depot-de-demandes-avec-PJ/p/5

Lien de téléchargement direct (à importer ensuite dans un dossier, bouton Nouveau > Importer un document)
Prototype dépôt de demandes avec PJ.grist (236 Ko)

Bonjour Aude,
Merci pour cette nouvelle proposition inspirante…

Question : Où/comment est stockée la variable rec.sessionID que tu utilises pour gérer les droits sur la session de navigation (user.SessionID) ?

Hello Éric, merci de ton retour, c’est une formule d’initialisation
user.SessionID
que j’ai stockée dans une colonne « sessionID » de ma table « Demandes de remboursement ». J’y accède ensuite via rec.sessionID depuis les permissions.

C’est un champ accessible grâce à la variable user, au même titre que user.Email par exemple. D’après la doc :

user.SessionID:
une chaîne unique attribuée aux utilisateurs anonymes pendant la durée de la session de cet utilisateur. Pour les utilisateurs connectés, user.SessionID est toujours "u" + l’ID numérique de l’utilisateur.

Pour ma formule, elle s’initialise dès que l’utilisateur commence à taper une valeur dans un des champs de fiche. J’ai masqué la colonne et j’ai mis comme règle qu’elle était non modifiable.

C’est l’astuce que j’ai trouvée pour que l’utilisateur qui ajoute une demande puisse voir cette demande uniquement, sans voir les demandes des autres.
Pour les anonymes, j’avais essayé au départ de mettre seulement la permission « Create » (et pas « Read »), sauf que dès que je tapais une valeur dans un champ, puis que je passais dans un autre, je ne voyais même plus la valeur du premier champ (vu que je ne pouvais pas Read…). Ça empêchait complètement de remplir la fiche.

Mais il y a peut être des trous dans la raquette car je viens de découvrir ce sessionID…ou peut-être existe t’il une autre solution…

Je ne voyais pas cette variable dans ta table mais tu nous l’as interdit !

Je comprends mieux maintenant ! Merci !

1 « J'aime »

Ah mais oui forcément :sweat_smile: sorry

1 « J'aime »