# Gestion des notifications (présence/absence séminaire) [non terminé - 5 semaines]
## Descriptif actuel
Nous avons un outil intra-tuteur destiné aux tuteurs des étudiants. Il permet de suivre l'assiduité d'un étudiant:
- voir les notes
- voir les créneaux d'e-learning
- voir les déclaratifs
https://intra-tuteur.staging.etna.io/#!/contracts
## Mission
L'objectif principal est de limité l'envoie de mails au tuteur :
- Une interface à destination des tuteurs pour lire les messages sur l'intra-tuteur.
- Deux interfaces à destination des ADM sur l'outil GSA:
- une pour notifier les tuteurs
- une pour consulté les données des tuteurs
## Réunion 08-02-2024
- Messages tuteur : set as viewed a fix
- Questionnaires : Automatiser l'envoi de certains formulaires selon des workflow ( https://tickets.etna-alternance.net/admin/#/task/271524 )
- Donner la possibiliter à l'adm de se logger sur l'intra tuteur pour pouvoir potentiellement accompagner un tuteur à remplir un formulaire
- Pouvoir cloturer un questionnaire : date d'envoi + date de close.
- Besoin de statistiques.
- Possibiliter de voir les formulaires en tant que : ADM
## Réunion 30-10-2023 Valérie
- comment les tuteurs sauront qu'ils ont reçu un mesage sur l'intra-tuteur ? Via mail "Vous avez-reçu une nouvelle notification sur votre intra-tuteur."
- message des absences : reprendre le mail qui est actuellement envoyé : "Vous trouverez en P-J l'absence de votre alternant."
- But futur: réaliser des extracts avec les notifs validés ou non selon les tuteurs (acknowledge a pour but d'engendrer une action, celle de faire un extract avec les tuteurs qui ont acknowledgé ou non leur notifs.)
- Important de faire le tri des lus - non lus. Car Le tuteur aura beaucoup de messages, minimum deux par semaines
- important sous onglet : msg assiduité, msg divers
## Réunion 16-10-2023 Daily
- Interface de consultation tuteur : similaire à Outlook (séparateur , deux colonnes: une pour la liste des messages, une pour voir le message)
- Archivé un message dans les boutons actions à coté de la croix
- Commencé par l'implémentation de la frame 8 (grand écran -> frame 8 , petit écran frame 11)
- Différence messages lus et non lus (icone ouvert ou fermé , retiré les chevrons)
- Filtré les messages par étudiant (dans le futur)
- Interface broadcast ADM : dédié et différente selon absence-présence ou le reste (form,evenement) => car les form/event utiliseront weasyprint et non le sprinter.
- choix de weasyprint sur le hub: plus simple à utiliser et plus récent, dans le but de générer des documents html en pdf.
Questions:
- est-ce-qu'on garde le sprinter pour l'interface dédié absence/présence ?
Objectif réu:
- déterminer ce qu'on a besoin en bdd pour l'interface de consultation des tuteurs
PS: niveau back-end : notification des tuteurs des absences/présence ne devra plus envoyer de mails mais des notifications sur l'intra tuteur.
## Réunion 06-10-2023 - Ux/ui avec Maude - Interface tuteur
- check user stories correspondent au user flows
- maquette bien couverte
- L'ADM pas censé avoir accès, c'est pas RGPD
- L'ADM doit être au courant sans consulté l'intra-tuteur, il doit être capable de savoir si ca été lu ou non et acknowledgé
- Possibilité interaction tuteur à l'ADM avec un bouton "j'ai besoin d'échanger avec l'ADM"
- frame 6:
- trop d'espaces et de vide, c'est angoissant et ça ne prends pas assez de place dans l'onglet grisé : faire 50/50 pour les deux composants de l'espace grisé. (responsivité: moins facile)
- frame 5:
- mieux que la 6. Cependant le message ouvert doit prendre tout l'écran, comme si c'était un mail (responsivité: plus facile)
- frame 2:
- Différenciation non suffisante. Un individu pourrait croire que la couelur signifie que le message est séléctionné.
- ajouter un tag non lu ou lu
- trié les message par timeline afin de mieux se réperer dans le temps
- question:
- a droite de la liste des messages, il ya un grand espace vide, faut-il élargir ou centré la liste des messages au milieu afin de limité l'espace perdue ?
## Idée cf. Enzo
1. Automatisation formulaire -> onglet configuration -> cron
- faire un formulaire complétement à part avec une liste des conditions d'envois en dessous c'est un peu tricky comme manière de penser parce qu'on ne l'a encore jamais fais sur les outils
- en gros pourquoi pas utiliser un formulaire comme une sorte de charte d'envoi de message, une liste en dessous qui les récapitule, chaque liste aurait une preview des messages qu'il va envoyer à qui etc
- en gros les 5 formulaires génériques existeraient potentiellement toujours mais on automatise l'envoie des messages sous certaines conditions
2. Interface broadcast ADM :
- Les evenements sont une liste de message prédéfinies pour les innov'camp, présentation GPE, conférence, rentrée.....
## User story (qui, quoi, pourquoi)
Dans un premier temps, nous partons du principe que c'est à sens unique.
#### Point de vue Tuteur - Interface de consultation
- En tant que Tuteur, je souhaite voir la liste de mes messages, afin de pouvoir m'assurer que je reçois bien mes messages.
- En tant que Tuteur, je souhaite pouvoir consulter un message, afin de pouvoir le lire.
- En tant que Tuteur, je souhaite pouvoir savoir si j'ai déjà lu un message, afin de simplifier la lecture de mes messages.
- En tant que Tuteur, je souhaite pouvoir savoir si j'ai acknowledger un message, afin de savoir si j'ai déjà certifié en avoir pris connaissance.
- En tant que Tuteur, je souhaite voir l'auteur et la date de création du message, afin de pouvoir retracer le message.
## User flow (comment)
#### Point de vue Tuteur - Interface de consultation
Je suis un tuteur et j'accède à mes messages
```mermaid
flowchart TD
A[J'ouvre le site intra-tuteur https://intra-tuteur.etna-alternance.net. <br> Je suis sur la page formulaire de connexion. <br> Je saisie mon email et mon mot de passe. Je clique sur le bouton envoyer.] -->|Implique| B(Je suis redirigé sur la page Etudiants.)
B --> C[Je clique sur l'onglet Messages.]
C -->|Implique| D[Je suis sur la page Messages : https://intra-tuteur.etna-alternance.net/messages <br> Je vois la liste des messages avec un titre, une date, et un auteur. <br> On peut distinguer les messages lu des non-lus avec un border-color différent.]
```
Je suis un tuteur et j'accède à un message
```mermaid
flowchart TD
A[Je suis sur la page mes messages https://intra-tuteur.etna-alternance.net/messages <br> Je vois la liste des messages avec un titre, une date, et un auteur. <br> On peut distinguer les messages lu des non-lus avec un border-color différent.] --> B(Je clique sur un message pour l'ouvrir.)
B --> C[Une fenêtre avec le message s'ouvre.<br>Je vois le titre, la date, l'auteur, le contenu du message et une croix pour fermer le message. <br> Le message se voit marqué comme lu immédiatement à l'ouverture si je suis le tuteur.]
C -->|Si acknowldege nécessaire| D[Je peux acknowledger le message en apuyant sur le bouton <br> certifié avoir pris connaissance du dit document.]
```
## Problèmes rencontrés
Pas pour le moment ...
## Maquette ADM - Interface de Broadcast



## Maquette ADM - Interface de consultation



## Maquette Tuteur - Interface de consultation




# Architecture Backend-end
## Fonctionnalités
Organisation:
:open_file_folder: app
:open_file_folder: svelte
:open_file_folder: api
:file_cabinet: message.tsx
Message.tsx va permettre de faire l'API:
Pour simuler des données nous utilesrons une variable globale fake_tutor_messages.
- lire la liste des messages avec titre
`GET /base_url/{tuteur_id}/messages`
retour {id,tutor_id,title,content,view,acknowledge,file_url,type,posted_at,created_by}
- lire un message
`GET /base_url/{tuteur_id}/messages/{message_id}`
{id,tutor_id,title,content,view,acknowledge,file_url,type,posted_at,created_by}
- Savoir si le message doit être acknowledger ou non
- Savoir si le message a été lu par le tuteur
~~Répondre a une notification : Tuteur et ADM~~
## MCD
<!--
| conversation_tutor |
|-------------------- |
| id : int |
| title: char |-->
| message_tutor |
|---------------------------|
| **id** : int(10) |
| **title** : varchar(255) |
| **tutor_id** : int(10) |
| **content** : text |
| **view**: bool |
| **acknowledge**: bool |
| **file_url**: varchar(255) |
| **type** : enum |
| **posted_date**: datetime |
| **created_by**: varchar(10) |
Exemple:
```json
{
{
id : 1,
tutor_id : 39095,
title: "Absence de monsieur Quentin Vignan S23",
content : "Bonjour, votre alternant Quentin Vignan a été absent lors du séminaire S23",
view : false,
acknowledge : false,
file_url : "https://link-api.etna-alternance.net/download/etudiants/99999/absence_seminaire_s23.pdf",
type : "with_attachment",
posted_date: '2023-10-06:11:11:11',
created_by: "Cara_Melmou"
},
{
id : 2,
tutor_id : 32333,
title: "Notation de votre alternant Quentin Vignan",
content : "Bonjour, veuillez notez votre alternant Quentin Vignan via un google form.",
view : false,
acknowledge : false,
file_url : "https://some-google-form-url.etna-alternance.net",
type : "with_form",
posted_date: '2023-10-06:11:11:11',
created_by: "Cara_Melmou"
},
{
id : 3,
tutor_id : 32333,
title: "Semaine d'inno'v Camp de Quentin Vignan",
content : "Bonjour, votre alternant Quentin Vignan sera absent toute la première semaine de janvier pour motif d'innov camp et sera en présentiel a l'etna.",
view : false,
acknowledge : false,
file_url : null,
type : "default",
posted_date: '2023-10-06:10:10:10',
created_by: "Cara_Melmou"
},
}
```
Le champ type pourra contenir différentes valeurs : "with_form", "with_attachment", "default"
## Gestion des absences/présences par les ADM
La gestion est manuelle. Actuellement l'ADM se rend sur GSA, il clique dans l'onglet notifier les tuteurs, puis sélectionne une promo, par exemple 2024 - Master Octobre. Une liste d'étudiants (présents ou absent) aux séminaires non notifiés aux tuteurs apparaît.
On sélectionne un étudiant, puis il faut cliquer sur la checkbox notifiée, sélectionner un sprinter, puis cliquer sur le bouton notifié avec l'icône de mail.
## Fichiers nécessaire:
...
#### Source utilisée pour réaliser cette documentation
- https://docs.google.com/document/d/1Z0B349seh9MY2aThsCX6Dw1gIuGtX7BoPZREE0XgYMo/edit