# Module "Assiduités"

Ce module de ScoDoc remplace l'ancien module de suivi des absences de Scodoc.
En plus de moderniser l'ancien module, le module assiduités met à disposition une API complète.

Ce projet a été développé en 2022-2023, par Matthias Hartmann, apprenti de l'IUT de
Lannion financé par l'Association ScoDoc.

**Ce module est disponible à partir de ScoDoc version 9.6**.

[Vidéo de présentation du module d'assiduités ](https://youtu.be/p7xips26W54)

## Fonctionnalités

Le module fournit:

- Gestion des absences/présences/retards
- Précision des saisies (périodes déterminées par une heure de début et une
  heure de fin au lieu de demi-journées)
- Gestion et sauvegarde de justificatifs (documents)
- Une [API complète](ScoDoc9API.md#api-assiduites)

## Guide d'utilisation

- [Module "Assiduités"](#module-assiduités)
  - [Fonctionnalités](#fonctionnalités)
  - [Guide d'utilisation](#guide-dutilisation)
    - [Migration de l'ancien module](#migration-de-lancien-module)
    - [Personnalisation du module](#personnalisation-du-module)
    - [Saisie des Assiduités](#saisie-des-assiduités)
      - [Saisie d'un groupe](#saisie-dun-groupe)
      - [Saisie Journalière](#saisie-journalière)
      - [Saisie différée](#saisie-différée)

### Migration de l'ancien module

Afin de favoriser la transition de l'ancien module au nouveau, un script de
migration a été développé: à l'installation de ScoDoc 9.6, les anciennes
données d'absences et justificatifs sont traduites pour ce module.

Voir détails dans [la documentation d'installation](UpgradeToDeb12Sco96.md) et
sur la [documentation des commandes de migration des absences](AssiduitesMigration.md).

### Personnalisation du module

Le module possède deux types de configuration, une générale et une par département/semestre.

**La configuration générale permet de configurer la ligne temporelle visible sur certaines pages de saisie d'assiduités.**

![Configuration de l'assiduité : Général](screens/config_assiduites_gen.png)

Route : `/ScoDoc/config_assiduites`

- `Début de la journée` : l'heure de début de la ligne temporelle (par défaut :
  8h00)
- `L'heure de midi` : l'heure pivot qui sépare la matinée de l'après-midi (par
  défaut : 13h00)
- `Fin de la journée` : l'heure de fin de la ligne temporelle (par défaut :
  18h00)
- `Granularité` : La granularité de la ligne temporelle. (par défaut : 15 min)

**La configuration par département/semestre permet de configurer certaines actions liés à l'assiduité**

![Configuration de l'assiduité : département](screens/config_assiduites_dept.png)

Route : `/ScoDoc/<Dept>/Scolarite/edit_preferences`

- `Forcer la déclaration du module` : Forcer les utilisateurs de ScoDoc à
  renseigner le module à chaque saisie d'assiduités.
- `Forcer l'appel des présents` : Force les utilisateurs à noter les
  présences/absences/retard lors d'une saisie.
- `Durée par défaut d'un créneau` : Détermine la durée classique d'un cours. (Ce
  sera la période préenregistrée sur la ligne temporelle)
- `Définir l'état par défaut` : Défini l'état par défaut qui sera appliqué aux
  étudiants avant validation d'une saisie d'assiduité.
- `Jours non travaillés` : Défini les jours sur lesquels la saisie d'assiduités
  ne sera pas possible.
- `Métrique de l'assiduité` : Défini l'unité de l'assiduité qui sera utilisé par
  les autres modules de ScoDoc.
  - `1/2 J.` : Demi-Journée
  - `J.` : Journées
  - `H.` : Heures

### Saisie des Assiduités

La saisie se fait soit sur un groupe soit sur un étudiant. Dans tous les cas il
y a deux façons de saisir l'assiduité. Une saisie `Journalière` et une saisie
`Différée`.

#### Saisie d'un groupe

Comme dans l'ancien système, pour saisir l'assiduité d'un groupe il faut se
rendre sur la page un semestre du département concerné.

![Page du semestre concerné](#)

Au bas de cette page vous retrouverez la liste des groupes du semestre. Si vous
avez la permission de modifier l'assiduité, vous observerez 3 boutons
supplémentaires sur chaque groupe vous permettant de voir ou saisir l'assiduité
du groupe.

#### Saisie Journalière

La première chose à faire lorsque vous êtes arrivés sur la page "Saisie
Journalière" c'est de compléter les informations de la séance :

![Capture des sélecteurs](#)

- Le ou les groupes sélectionnés (dans la plupart des cas, le groupe est déjà
  présélectionné)
- Le module concerné (par défaut il n'est pas obligatoire de sélectionner un
  module, cependant une configuration permet de forcer la sélection)
- La date de la saisie. Attention, seule les dates comprises dans le semestre
  sont valides. (Un message d'erreur vous le signalera si la date n'est pas
  valide)

Lorsque vous êtes sûr de vous, appuyer sur le bouton `Valider`.

**Attention : La validation est définitive, si vous avez fait une erreur il faudra recharger la page**

Après la validation, les champs précédents seront grisés.

Explication de l'interface

![Capture de l'interface](#)

1. La ligne temporelle (Timeline) sert à désigner la période de l'assiduité qui sera saisie.

    Il est possible de la déplacer en maintenant le clic gauche dessus puis en
    bougeant la souris.

    Si la période n'est pas de la bonne taille, il est possible de l'agrandir ou
    de la réduire en plaçant sa souris à l'extrémité droite.

    Votre curseur devrait changer, à partir de ce moment là vous pouvez cliquer
    puis bouger l'extrémité pour modifier la taille de la période.

    Si la période bouge toujours alors que vous avez lâché le clic gauche,
    cliquer à nouveau.

2. Les boutons d'actions de masse `Mettre tout le monde : `. Ces boutons
   définirons le même état pour chaque étudiant sur la période sélectionnée.

    En cliquant sur un bouton d'état, l'état sera mis pour chaque étudiant, pour
    modifier cet état il faut appuyer sur un autre bouton d'état.

    Si vous souhaitez retirer les assiduités, il faut cliquer sur le bouton
    d'état ayant le même état que les étudiants.

3. Les lignes étudiants sont des lignes montrant les informations d'assiduité de
   chaque étudiant. Chaque ligne est composée de 3 parties :

    1. Le nom, le prénom et une photo de l'étudiant afin de le reconnaître
       facilement

    2. Une petite ligne temporelle montrant l'assiduité de l'étudiant sur la
       journée.

        Le carré au début de la ligne montre la dernière assiduité du jour
        précédent.

        En passant votre souris au dessus des couleurs, vous aurez accès à plus
        d'informations sur l'assiduité de l'étudiant.

        Cliquer sur une assiduité positionnera la ligne temporelle globale sur
        la période de l'assiduité.

        La période globale est représentée par un encadré bleu sur la ligne
        temporelle.

        Les assiduités justifiées et validés sont représentés par leur couleur
        respective + un hachage bleu

        Les assiduités justifiées mais non validées sont représentés par leur
        couleur respective + un hachage rouge.

    3. Les boutons d'assiduités individuels. Ces boutons permettent de déterminer l'état de l'étudiant.

        Ils fonctionnent de la même façon que les boutons `mettre tout le monde :`.

        Si la ligne de l'étudiant est rouge, cela signifie que la période
        sélectionnée rentre en conflit avec les assiduités de l'étudiant.
        Cliquer sur un bouton d'assiduité ne modifiera pas l'état de l'étudiant
        mais ouvrira un menu de résolution de conflit.
        
        ![Résolution de conflit](#)

Les assiduités de la page sont enregistrées en temps réel. Lorsque la saisie est
terminée vous pouvez fermer la page.

#### Saisie différée

La page saisie différée a pour but de faciliter la saisie d'assiduités avec
plusieurs périodes.

![Page différée](#)

La page est composée d'un tableau et d'un bouton valider.
**Cette page ne sauvegarde pas automatiquement les modifications**

Explication du tableau :

- La colonne `Noms` : Vous y retrouverez tous les étudiants du groupe
  sélectionné. En cliquant sur le titre de la colonne vous pourrez changer
  l'ordre des étudiants (croissant ou décroissant)
- Les colonnes `Assiduités` : Lorsque vous arrivez sur la page, une seule
  colonne d'assiduité est présente.

    Si vous avez besoins d'autres colonnes, appuyer sur le bouton `+`.

    Si vous souhaitez supprimer une colonne appuyer sur la `croix X` de la
    colonne.

    Il vous faudra remplir la colonne afin de pouvoir saisir l'assiduité des
    étudiants :

    1. La date de début : Sur la première colonne, la date par défaut sera la
       date du jour, sur les nouvelles colonnes, la date par défaut sera la date
       de fin de la colonne précédente.
    2. La date de fin : La date de fin n'est pas renseignée par défaut,
       cependant la première fois que vous changer la date de début de la
       colonne, la date de fin sera automatiquement mise à jour de façon à
       prendre la taille d'un créneau classique (configuration du
       semestre/département).
    3. Le module concerné par l'assiduité. Ce sélecteur n'est pas obligatoire
       par défaut (configuration du semestre/département).
    4. `Sélectionner une assiduité` permet de mettre tous les étudiants à un
       certain état. Ce sélecteur n'est pas obligatoire.

- Chaque ligne du tableau correspond à un étudiant. Vous pouvez alors
  sélectionner l'état de l'assiduité de chaque étudiant pour chaque colonne.

Après avoir rempli le tableau il faudra valider en cliquant sur `valider les assiduités`.

Après validation, toutes les colonnes seront désactivées, si besoins vous pouvez
les réactiver en cliquant sur `Activer` pour chaque colonne.

Il est possible que des erreurs apparaissent. Les erreurs sont gérées par
colonnes puis par étudiant. Cela signifie qu'une erreur de colonne (ex: une
mauvaise date) désactivera complètement la colonne alors qu'une erreur
d'étudiant (ex: l'étudiant possède déjà une assiduité sur cette période)
désactivera uniquement l'envoie de l'assiduité le concernant.

Vous pouvez obtenir plus d'informations sur l'erreur en plaçant votre souris au dessus du `ℹ️`.

Il est possible de forcer la mise à jour des assiduités : **Attention, cela ne
fonctionnera que pour les assiduités ayant exactement la même période** (ceci
permet de corriger facilement les saisies où l'on aurait oublié d'indiquer le
module).

Chaque colonne possède un numéro distinctif qui est visible en laissant la
souris au dessus de l'entête de la colonne. Ce numéro est utilisé dans les
messages d'erreurs.

!!! note "Voir aussi"

    - [Migration des absences vers les assiduités](AssiduitesMigration.md)
    - [API](ScoDoc9API.md) : API pour interfaçage avec d'autres applications
    - [API et fichiers justificatifs](FichiersJustificatifs)
    - [FAQ](FAQ.md)
    - [Contacts](Contact.md)
