Development #44158
Paramétrage de notifications sur les agendas/événements
0%
Description
Il y a régulièrement utilité à notifier un gestionnaire, pour lui signifier qu'un événement est complet (ex: #44156), ou presque complet (?), ou annulé (ex: #44151, après #44157).
On pourrait avoir dans le paramétrage d'un agenda une section notifications :
Notifications ------------------------------------------------------------------ Événement presque complet (90%) : [ .............................. |v] Événement complet : [ .............................. |v] Événement annulé : [ .............................. |v]
Et ce serait des <select> avec des rôles + une option "autre" qui donne un <input> pour taper une ou plusieurs adresses.
Le contenu du message de notification en lui-même ne serait pas paramétrable (dans ce premier temps en tout cas).
Fichiers
Révisions associées
agendas: add email notifications for events (#44158)
Historique
Mis à jour par Valentin Deniaud il y a presque 4 ans
Frédéric Péters a écrit :
Et ce serait des <select> avec des rôles
Et l'idée serait d'envoyer un mail aux adresses associées au rôle dans authentic ? Comment on les récupère ?
Mis à jour par Frédéric Péters il y a presque 4 ans
Et l'idée serait d'envoyer un mail aux adresses associées au rôle dans authentic ?
Oui.
Bien sûr j'avais oublié que le provisionning n'enregistrait pas cette info; il pourrait/devrait, mais ça amène une zone nébuleuse de dépendance à hobo.
Peut-être zapper ça pour le moment et juste avoir un champ texte où saisir une adresse.
Mis à jour par Valentin Deniaud il y a presque 4 ans
Je voulais juste m'assurer que je ne passais pas à côté de quelque chose, je pense que c'est une bonne idée de se baser sur l'info déjà présente dans a2, je vais faire le ticket qui va bien dans hobo (et pourquoi pas faire en sorte de ne pas introduire de dépendance ici, en cachant les bons champs au bon moment).
Mis à jour par Valentin Deniaud il y a presque 4 ans
- Fichier 0001-wip.patch 0001-wip.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
La partie db + ui, surtout pour avoir des remarques sur l'ui.
Frédéric Péters a écrit :
Et ce serait des <select> avec des rôles + une option "autre" qui donne un <input> pour taper une ou plusieurs adresses.
De mes essais il ressort que ce n'est pas souhaitable de tordre le ModelChoiceField des rôles pour lui ajouter une autre option.
Je suis parti sur une case à cocher pour ajouter soit un rôle soit des emails, cocher/décocher la case fait changer les champs.
Sinon, pour la liste des rôles, est-ce qu'il vaut mieux la limiter aux seuls rôles d'édition et de modif ? À défaut, les mettre en haut ?
Mis à jour par Valentin Deniaud il y a presque 4 ans
- Statut changé de Solution proposée à En cours
Valentin Deniaud a écrit :
De mes essais il ressort que ce n'est pas souhaitable de tordre le ModelChoiceField des rôles pour lui ajouter une autre option.
Je me remets là-dessus, en fait c'est faisable on peut facilement écraser les champs par défaut et mettre ce qu'on veut, du coup je vais le faire.
Sinon pour gérer le mailing, ça me paraît inenvisageable d'avoir un send_mail dans le .save() d'un Event, donc je pars sur un cron. Il devra s'exécuter plus régulièrement que toutes les heures, et boucler sur tous les agendas ayant défini une notification puis regarder tous les events, j'espère que ça ne sera pas trop coûteux à long terme.
Mis à jour par Valentin Deniaud il y a presque 4 ans
- Fichier 0001-agendas-add-almost_full-event-flag-44158.patch 0001-agendas-add-almost_full-event-flag-44158.patch ajouté
- Fichier 0002-agendas-add-email-notifications-for-events-44158.patch 0002-agendas-add-email-notifications-for-events-44158.patch ajouté
- Statut changé de En cours à Solution proposée
Patch assez obèse, je peux voir pour découper si besoin.
Mis à jour par Frédéric Péters il y a presque 4 ans
(relecture juste du début, surtout de la forme)
subject = _('Alert: event "%(event)s" is %(status)s') % {
Plutôt avoir des phrases complètes correspondant aux différentes situations, ça fera des phrases plus agréables à lire/traduire.
body = _('You can view it here: %s.') % urljoin(
Passer par un template (2 même, text/plain, text/html), pour pouvoir faire de beaux messages.
Mis à jour par Valentin Deniaud il y a plus de 3 ans
Mis à jour par Frédéric Péters il y a plus de 3 ans
Il y aura pour les emails le même soucis que dans #43469 (absence de template_vars dans le contexte).
Mis à jour par Frédéric Péters il y a plus de 3 ans
+from django.conf import settings as django_settings
C'est je trouve plus simple de garder aux imports un nom constant; alors oui arrive plus loin une variable qui s'appelle "settings" mais justement, c'est la partie que je ne trouve pas des masses lisibles du patch,
+ notifications_settings = AgendaNotificationsSettings.objects.all() + for settings in notifications_settings.select_related('agenda'): + for setting, recipients in settings:
J'inverserais et trouverais plus clair de boucler sur les agendas, et ensuite, il y a un seul AgendaNotificationsSettings par agenda, non ? Ce doute c'est à cause de l'autre boucle, qui vient peut-être parce que :
+ def __iter__(self): + for field in self.get_setting_fields(): + yield (field.name, self.get_recipients(field.name)) +
Je préférerais quelque chose de bien plus explicite, genre
def get_notification_types(self): return ['almost_full', 'full', 'cancelled']
sans introspection ici du modèle pour en sortir les champs.
Et puis un
def get_recipients(self, notification_type): ...
Et même impression côté gabarit, sur la partie,
+{% for setting, value in object.notifications_settings.display_info %}
mais qui m'amènerait peut-être à vouloir reformuler ce que je notais plus haut,
def get_notification_types(self): for notification_type in ['almost_full', 'full', 'cancelled']: return NotificationType(notification_type, self)
avec la class NotificationType qui aurait une méthode pour retourner la liste d'adresses/rôles, une méthode pour retourner le libellé, etc.
En fait j'ai l'impression qu'il y a beaucoup d'efforts pour ne pas répéter les trois libellés, à les chercher à travers les champs du modèle, et à mon goût ça complexifie trop l'ensemble, je préfèrerais vraiment avoir une répétition de libellé.
C'est là mon retour principal.
Moins important parce que ça retourne presque juste sur une discussion de nommage,
+ # flags for detecting changes + was_almost_full = models.BooleanField(default=False) + was_full = models.BooleanField(default=False) + was_cancelled = models.BooleanField(default=False)
Si j'ai bien compris, je serais pour mettre almost_full_notification_timestamp etc., avec des datetime, ça évitera de se dire que c'était plein et ça ne l'est plus ?
Mis à jour par Valentin Deniaud il y a plus de 3 ans
- Fichier 0001-agendas-add-almost_full-event-flag-44158.patch 0001-agendas-add-almost_full-event-flag-44158.patch ajouté
- Fichier 0002-agendas-add-email-notifications-for-events-44158.patch 0002-agendas-add-email-notifications-for-events-44158.patch ajouté
Effectivement cette partie du code n'était pas claire, je suis parti sur l'idée de la classe NotificationType pour l'améliorer. J'ai pris en compte les autres remarques également.
Mis à jour par Valentin Deniaud il y a plus de 3 ans
Petits ajustements pour verdir les tests poussés sur la branche.
Mis à jour par Valentin Deniaud il y a plus de 3 ans
Aussi,
Frédéric Péters a écrit :
Si j'ai bien compris, je serais pour mettre almost_full_notification_timestamp etc., avec des datetime, ça évitera de se dire que c'était plein et ça ne l'est plus ?
J'ai appliqué ce changement sans vraiment comprendre l'avantage (le sens de la dernière virgule), du coup je me suis contenté de remplacer les was_full=False par full_notification_timestamp__isnull=True, en passant peut-être à côté d'un comportement plus intelligent à ajouter.
Et dans la même veine, le cas full --> plus full --> full ne déclenche qu'une notification, la première, je pense que si besoin ce cas peut être mieux géré plus tard, je me contente juste de le noter explicitement ici.
Mis à jour par Frédéric Péters il y a plus de 3 ans
"ça évitera de se dire que c'était plein et ça ne l'est plus ?"
C'est ma question quand je lis was_full. Que signifie l'attribut, que c'était plein et que ça ne l'est plus ? (alors que non ça voudrait dire que c'était plein et que ce flag a été mis pour le signaler parce qu'il y a un truc interne de notif qui a besoin de savoir ça mais si jamais l'événement reste plein ça va rester à was_full et s'il n'est plus plein ça va rester à was_full quand même). (si j'ai bien compris)
De là avoir full_notification_timestamp qui dit juste "c'est le moment où la notification a été envoyée signalant l'événement plein".
Mis à jour par Frédéric Péters il y a plus de 3 ans
Il me semble juste rester à compléter un peu, et marquer pour traduction, les messages de notification :
+++ b/chrono/agendas/templates/agendas/event_notification_body.txt (et le .html aussi) @@ -0,0 +1 @@ +You can view it here: {{ event_url }}.
(compléter en disant bonjour et en reprenant dedans les infos de l'événement, genre)
Mis à jour par Valentin Deniaud il y a plus de 3 ans
- Fichier 0001-agendas-add-almost_full-event-flag-44158.patch 0001-agendas-add-almost_full-event-flag-44158.patch ajouté
- Fichier 0002-agendas-add-email-notifications-for-events-44158.patch 0002-agendas-add-email-notifications-for-events-44158.patch ajouté
Frédéric Péters a écrit :
(compléter en disant bonjour et en reprenant dedans les infos de l'événement, genre)
Fait (mais niveau info de l'évènement, si tu imaginais le statut repris dans le message, il faudra en remettre une couche parce qu'il n'est pas facilement accessible tel que c'est fichu actuellement).
Mis à jour par Emmanuel Cazenave il y a plus de 3 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Valentin Deniaud il y a plus de 3 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit e2fdbb8f583d99814f256bb3dc49e7553fd3214e Author: Valentin Deniaud <vdeniaud@entrouvert.com> Date: Thu Jul 16 15:12:47 2020 +0200 agendas: add email notifications for events (#44158) commit f8f324a9455759d74adb44e65b06e6c312ef353d Author: Valentin Deniaud <vdeniaud@entrouvert.com> Date: Thu Jul 16 15:07:18 2020 +0200 agendas: add almost_full event flag (#44158)
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
agendas: add almost_full event flag (#44158)