Compare commits

...

6 Commits

Author SHA1 Message Date
iziram 8ce0af10e8 Assiduites: MAJ Doc API 2023-07-28 11:30:28 +02:00
Emmanuel Viennet beca815be2 Détails sur upgrade (clé gpg) 2023-07-28 09:55:18 +02:00
Emmanuel Viennet 9b290fe0fa Change version dans doc dev 2023-07-25 08:53:38 +02:00
Emmanuel Viennet 2082ae84ca détailssur upgrade 2023-07-24 22:40:03 +02:00
Emmanuel Viennet bcf99e292d add a link 2023-07-24 21:56:58 +02:00
Emmanuel Viennet 23a2609833 docs install ScoDOc 9.6 / Debian 12 2023-07-24 21:56:44 +02:00
19 changed files with 698 additions and 203 deletions

View File

@ -256,5 +256,6 @@ messages d'erreurs.
- [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)

View File

@ -119,7 +119,7 @@ Soit vous prenez les versions les plus à jour disponibles. Une façon rapide de
faire ceci est:
```bash
cut -d= -f 1 requirements-3.9.txt | xargs pip install
cut -d= -f 1 requirements-3.11.txt | xargs pip install
```
à adapter selon vos objectifs.
@ -127,7 +127,7 @@ faire ceci est:
Pour régénérer le fichier indiquant la liste des paquets:
```bash
pip freeze > requirements-3.9.txt
pip freeze > requirements-3.11.txt
```
Note: la mise à jour par `apt` recrée le virtualenv à chaque fois.

View File

@ -11,7 +11,7 @@ donc installer et configurer ScoDoc avec des connaissances réduites sur le
système Linux.
Cette documentation est prévue pour installer ScoDoc version 9 sur un système
[Debian](http://www.debian.org) 11 (Bullseye, stable) s'exécutant sur une
[Debian](http://www.debian.org) 11 (Bullseye, oldstable) s'exécutant sur une
machine intel-like **64bits** (architecture **AMD64** sur Intel/AMD, ou
**aarch64** sur Apple ARM). Debian s'installe facilement en cinq minutes, sur
une machine normale ou un serveur virtualisé. Il est **vivement déconseillé** de

View File

@ -0,0 +1,342 @@
# Installation de ScoDoc 9.6+ sur Debian 12 (Bookworm)
Ce document décrit la procédure d'installation et de configuration de ScoDoc
version 9.6 et suivantes.
Si vous mettez à jour une installation ScoDoc 9 existante (9.5 sous Debian 11
Bullseye), suivez la
[procédure de migration décrite sur cette page](UpgradeToDeb12Sco96.md).
La procédure décrite ici doit être effectué sur la machine serveur fraiche avec
un accès administrateur (root). **Ne pas l'utiliser pour migrer une installation existante**.
ScoDoc est livré avec des scripts d'installation qui configurer presque
automatiquement votre serveur (serveur web, base de données, etc): vous pouvez
donc installer et configurer ScoDoc avec des connaissances réduites sur le
système Linux.
Cette documentation est prévue pour installer ScoDoc version 9 sur un système
[Debian](http://www.debian.org) 12 (Bullseye, stable) s'exécutant sur une
machine intel-like **64bits** (architecture **AMD64** sur Intel/AMD, ou
**aarch64** sur Apple ARM). Debian s'installe facilement en cinq minutes, sur
une machine normale ou un serveur virtualisé. Il est **vivement déconseillé** de
tenter l'installation sur une autre version de Linux.
Merci de signaler tout problème [sur le Discord](https://discord.gg/ybw6ugtFsZ).
- Note: l'image du CD d'installation de Debian (amd64) peut se trouver ici:
[https://www.debian.org/CD/netinst/](https://www.debian.org/CD/netinst/),
choisir la version "petits CD" pour **amd64**
(*Il est indispensable d'utiliser une version 64 bits !*)
🚸 **Important:**
La procédure d'installation décrite ci-dessous suppose que ScoDoc va s'exécuter
sur un serveur dédié. Pour faire des tests, utilisez un serveur virtuel (comme
VirtualBox ou VMWare, ou UTM sur Mac). L'installation de ScoDoc va en effet
modifier de nombreux paramètres de votre système Linux (serveur web, firewall,
serveur SQL, messagerie, ...).
## 1) Préalable: configurer un serveur linux
Le serveur devrait être accessible depuis Internet.
### Configuration matérielle
- taille disque: prévoir au moins 24Go sur la partition où sera scodoc (en
général `/`).
- mémoire: prévoir au moins 8Go de RAM, et plutôt 12 ou 16.
### Informations sur les flux réseau
Le serveur est fréquemment installé sur un réseau protégé ou sur un VPN.
- le trafic entrant est sur le port 443 (le trafic http/80 est redirigé
vers le https).
- le serveur doit pouvoir envoyer du mail (serveur Postfix en local, à
configurer pour utiliser un relais smtp ou envoyer directement, selon votre
politique. Au besoin, pour le reconfigurer, lancer `dpkg-reconfigure postfix`);
- Les serveurs de mise à jour de Debian doivent être accessibles (en http,
voir `/etc/apt/sources.list`);
- Les serveurs `scodoc.org` et `scodoc.iutv.univ-paris13.fr` **doivent**
être accessibles (80 et 443).
### Installation Linux Debian
Nous recommandons d'effectuer une installation standard de Debian par le réseau
(netinst), et d'utiliser l'installation en mode texte, très simple et rapide.
Durant l'installation de Debian, lorsqu'il demande "logiciels à installer", tout
décocher sauf "Serveur SSH" et "Utilitaires standard du système". Le script
d'installation de ScoDoc se chargera ensuite d'installer tous les éléments
nécessaires (serveur web, messagerie, etc.).
🚸 *Veiller à sélectionner une locale `UTF-8` par défaut.*
![InstallDebian6-1.png](screens/InstallDebian6-1.png)
### Points à vérifier avant d'installer ScoDoc
Checklist minimale de votre système Linux Debian:
1. Connexion à Internet: le réseau doit être accessible. En effet, le script
d'installation va installer des paquetages du système Debian puis
télécharger la dernière mise à jour du logiciel ScoDoc (à partir du serveur
scodoc.org).
1. Vérifiez la connectivité, par exemple:
```bash
ping www.univ-paris13.fr
(quitter avec ctrl-c)
cd /tmp
wget --no-check-certificate https://scodoc.org
# doit créer un fichier index.html contenant du code HTML...
```
3. Nom DNS: le serveur doit avoir un nom ("serveur.exemple.fr") connu dans le
DNS (local ou public). Pour des tests, vous pouvez vous passer de DNS, mais
dans ce cas le nom de votre serveur sera son adresse IP (eg `192.168.0.10`) et
il ne sera peut être pas accessible de l'extérieur.
4. Mail: vérifiez que le serveur peut envoyer des e-mail: `mail
votre@adresse.fr`, puis entrer un message terminé par `ctrl-d`: si vous ne
recevez pas le message après quelques minutes, vérifiez votre configuration
(et le log `/var/log/mail.log`). Un serveur ScoDoc qui n'envoie pas de mail
ne peut pas vérifier ceux des utilisateurs, qui à leur tour ne pourront pas
changer leurs mots de passe (bien d'autres fonctions dépendent des mails).
Au besoin, revoir la configuration avec `dpkg-reconfigure postfix` (voir
aussi [envoi des courriers électroniques](ProblemesMail.md)).
1. Vérifiez que votre serveur est accessible depuis une autre machine de votre
réseau (voire d'Internet): par exemple `ping serveur.exemple.fr`.
1. Date et heure: vérifier que les dates et heure sont correctes, même après
reboot. L'utilisation d'un serveur de temps (ntp) est recommandée (
`apt-get install ntp`), et éventuellement `dpkg-reconfigure tzdata`).
1. Si vous avez installé à partir d'un support (DVD, clé USB...), pensez à le
retirer des sources Debian afin de ne pas bloquer les mises à jour (commenter
la ligne `deb cdrom:` dans le fichier `/etc/apt/sources.list`)
1. Cette liste est incomplète... et n'oubliez pas: avant de passer en
production, mettez en place des sauvegardes sérieuses !
#### Configuration si utilisation d'un proxy
Si votre accès à Internet passe par un proxy, l'indiquer au moment de
l'installation Debian.
Vérifiez aussi que ces variables sont bien définies dans `/etc/environment` (si
l'installeur Linux Debian ne les a pas déjà indiquées là, les ajouter ou créer
ce fichier):
```bash
# /etc/environment
export HTTP_PROXY=http://proxy.univ-xxx.fr:1234
export HTTPS_PROXY=http://proxy.univ-xxx.fr:1234
# Versions en minuscules utilisées par wget
export http_proxy="${HTTP_PROXY}"
export https_proxy="${HTTPS_PROXY}"
```
Ensuite, après installation du paquet scodoc9 (voir plus bas), il faudra
indiquer votre proxy: pour cela, éditer le fichier
```
/opt/scodoc/.env
```
et ajouter les variables d'environnement nécessaires. Typiquement, il s'agit de :
```bash
HTTP_PROXY=http://proxy.univ-xxx.fr:1234
HTTPS_PROXY=http://proxy.univ-xxx.fr:1234
```
Après modification de ces fichiers (qui *doivent* être lisible par l'utilisateur `scodoc`),
redémarrer le service:
```bash
sudo systemctl restart scodoc9
```
Dans les cas compliqués, il est possible qu'il vous faille configurer d'autres
éléments, voir par exemple
[ce post sur Stack Overflow](https://stackoverflow.com/questions/9445489/performing-http-requests-with-curl-using-proxy).
#### Note sur l'install dans un container LXC
Il y a deux possibilités :
**Option 1**, si vous installez dans un container LXC privilégié via le compte
root et/ou sudo, attention: la config par défaut de Redis (un gestionnaire de
cache utilisé par ScoDoc) n'est pas compatible, en raison d'un problème de
système de fichier en lecture seule. Installer redis avant ScoDoc, comme suit:
```bash
apt-get install redis
```
Puis créer un dossier `/etc/systemd/system/redis.service.d` contenant le fichier
`redis.conf` avec les lignes suivantes :
```text
[Service]
PrivateTmp=no
ProtectSystem=false
PrivateDevices=false
ProtectHome=no
ProtectControlGroups=no
ProtectKernelTunables=no
ProtectKernelModules=no
ReadWritePaths=
ReadOnlyDirectories=
```
Ensuite
```bash
systemctl daemon-reload
systemctl start redis
```
... et poursuivez l'installation comme ci-dessous.
**Option 2**, si vous installez dans un container LXC non-privilégié via un
compte utilisateur normal, vous pouvez activer l'option « nesting »
(imbriqué) de LXC pour permettre à Redis de fonctionner normalement.
🚸 Attention ! N'activez pas le *nesting* sur un conteneur privilégié. Cela
provoquerait une faille de sécurité.
Si vous avez construit votre conteneur manuellement avec `lxc-create`, modifiez
le fichier `/var/lib/lxc/${nomDuConteneur}/config` et ajoutez les lignes
ci-dessous :
```text
lxc.apparmor.allow_nesting = 1
lxc.apparmor.profile = generated
```
Si vous utilisez un conteneur LXC sur l'hyperviseur Proxmox, modifiez le
fichier `/etc/pve/lxc/${CTID}.conf` et ajoutez la ligne suivante :
```text
features: nesting=1
```
... et poursuivez l'installation comme ci-dessous.
## 2) Installation de ScoDoc sur Debian
### 2.1) Charger le logiciel
🚸 Les commandes ci-dessous sont à exécuter dans un terminal ouvert en tant que
**root** sur le serveur. Vous pouvez utiliser `su` (ou `sudo su`) pour devenir
**root**).
Remarque: *Si ce n'est pas déjà le cas, vous avez intérêt à ouvrir une session
`ssh` (ou `putty`) depuis une machine normale, afin de pouvoir copier/coller
facilement les commandes et éditer les fichiers de configuration.*
- Ajouter le dépot scodoc: copier ce fichier <a href="/attachments/scodoc.list"
download>scodoc.list</a> dans `/etc/apt/sources.list.d/`
ou bien le créer afin qu'il contienne juste cette ligne:
```text
# contenu du fichier /etc/apt/sources.list.d/scodoc.list
deb http://scodoc.org/deb/bookworm bookworm main
```
- Installer la clé: en `root` sur le serveur, lancer
```bash
apt-get -y install gnupg
wget -O - https://scodoc.org/misc/scodoc-repo.gpg.key | apt-key add -
```
- Installer le logiciel:
```bash
apt-get update
apt-get install nginx
```
S'assurer que le logiciel `nginx` s'est bien installé. En cas de problème se
référer à sa doc (par exemple, si
[votre serveur ne supporte pas
IPv6](https://techglimpse.com/nginx-error-address-family-solution/)).
Ensuite:
```bash
apt-get install scodoc9
```
Notez que l'installation du paquet `scodoc9` va créer automatiquement un
utilisateur `scodoc` qui sera utilisé par le serveur.
- Attribuer un mot de passe à l'utilisateur `scodoc`:
```bash
passwd scodoc
```
### 2.2) Configuration des logiciels et des données
Lancer le script suivant en tant que `root` sur votre serveur nouvellement installé:
```bash
/opt/scodoc/tools/configure-scodoc9.sh
```
Vous devrez répondre à quelques questions et saisir le mot de passe que vous
attribuerez à l'utilisateur `admin`.
(note: pour en savoir plus sur ce script, [voir l'explication](GuideInstallDebian11Advanced.md))
### 3) **Lancer ScoDoc**
```bash
sudo su # se connecter en root
systemctl restart nginx
systemctl restart scodoc9
```
✨ et voila !
Visiter `https://monscodoc.mondomaine.fr/` pour achever la configuration et
utiliser le logiciel: voir la page [GuideConfig](GuideConfig.md).
## Importation des données ScoDoc 7
Si vous aviez une installation très ancienne avec ScoDoc 7, vous pouvez migrer
toutes vos données (comptes utilisateurs, étudiants, formations, notes, photos
et fichiers divers) depuis une l'ancien serveur ScoDoc 7, ou même en place.
Voir [la procédure de migration](MigrationScoDoc7a9.md).
## En cas de problème
Ne pas hésiter à nous contacter (voir [contacts](Contact.md)).
- Problèmes d'envoi de courrier électronique (mail): voir [ProblemesMail](ProblemesMail.md)
Nota: sur certains réseaux, l'autoconfiguration IPv6 pose problème (par exemple:
bloquage des envois de mails). Au besoin, il est possible de désactiver IPv6
(voir par exemple [ici](https://wiki.debian-fr.xyz/D%C3%A9sactiver_l%27IPv6)).
## Ensuite...
- Mettez en place des [sauvegardes](SauvegardesBases.md)
- Si vous le souhaitez, vous pouvez mettre en place un anti-virus pour
surveiller les fichiers uploadés par les utilisateurs. Les fichiers sont
conservés dans `/opt/scodoc-data`: le plus simple est de faire surveiller tout
ce répertoire sauf `/opt/scodoc-data/logs`.
- Abonnez-vous au moins à la liste d'annonces ou rejoignez le Discord: voir [contacts](Contact.md)
!!! note "Voir aussi"
- [Guide configuration](GuideConfig.md)
- [Guide administrateur ScoDoc](GuideAdminSys.md)
- [FAQ](FAQ.md)
- [Contacts](Contact.md)

View File

@ -1467,7 +1467,10 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
* **Méthode:** GET
* **Permission: `ScoView`**
* **Paramètres:** `etudid`
* **Paramètres:**
* `etudid`
* `nip`
* `ine`
* **Query string:**
* `etat` ('present','retard','absent)
* `moduleimpl_id` (X : id du moduleimpl concerné)
@ -1479,6 +1482,12 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
* **Routes:**
* `/assiduites/<int:etudid>`
* `/assiduites/<int:etudid>/query?`
* `/assiduites/etudid/<int:etudid>`
* `/assiduites/etudid/<int:etudid>/query?`
* `/assiduites/nip/<nip>`
* `/assiduites/nip/<nip>/query?`
* `/assiduites/ine/<ine>`
* `/assiduites/ine/<ine>/query?`
* **Exemple d'utilisation:**
* `/api/assiduites/1`
* `/api/assiduites/1/query?etat=retard`
@ -1490,7 +1499,10 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
* **Méthode:** GET
* **Permission: `ScoView`**
* **Paramètres:** `etudid`
* **Paramètres:**
* `etudid`
* `nip`
* `ine`
* **Query string:**
* `etat` ('present','retard','absent)
* `moduleimpl_id` (X : id du moduleimpl concerné)
@ -1503,6 +1515,12 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
* **Routes:**
* `/assiduites/<int:etudid>/count`
* `/assiduites/<int:etudid>/count/query?`
* `/assiduites/etudid/<int:etudid>/count`
* `/assiduites/etudid/<int:etudid>/count/query?`
* `/assiduites/nip/<nip>/count`
* `/assiduites/nip/<nip>/count/query?`
* `/assiduites/ine/<ine>/count`
* `/assiduites/ine/<ine>/count/query?`
* **Exemple d'utilisation:**
* `/api/assiduites/1`
* `/api/assiduites/1/count/query?etat=retard`
@ -1515,7 +1533,7 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
* **Méthode:** GET
* **Permission: `ScoView`**
* **Paramètres:** `etudid`
* **Paramètres:** `formsemestre_id`
* **Query string:**
* `etat` ('present','retard','absent)
* `moduleimpl_id` (X : id du moduleimpl concerné)
@ -1537,7 +1555,7 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
* **Méthode:** GET
* **Permission: `ScoView`**
* **Paramètres:** `etudid`
* **Paramètres:** `formsemestre_id`
* **Query string:**
* `etat` ('present','retard','absent)
* `moduleimpl_id` (X : id du moduleimpl concerné)
@ -1607,7 +1625,7 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
* `/assiduites/create`
* **Exemple d'utilisation:** `/api/assiduites/create`
> `[{date_debut: "2022-10-27T08:00",date_fin: "2022-10-27T10:00",etat: "absent",etudid:1}]`
> `[{"date_debut": "2022-10-27T08:00","date_fin": "2022-10-27T10:00","etat": "absent","etudid":1}]`
* **Résultat:** Retourne un objet en deux parties (errors et success) contenant le retour de chaque objet donné dans la requête POST.
@ -1616,7 +1634,10 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
* **Méthode:** POST
* **Permission: `ScoAssiduiteChange`**
* **Paramètres:** `etudid`
* **Paramètres:**
* `etudid`
* `nip`
* `ine`
* **Data:**
```json
@ -1634,9 +1655,12 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
* **Routes:**
* `/assiduite/<int:etudid>/create`
* `/assiduites/etudid/<int:etudid>/create`
* `/assiduites/nip/<nip>/create`
* `/assiduites/ine/<ine>/create`
* **Exemple d'utilisation:** `/api/assiduite/1/create`
> `[{date_debut: "2022-10-27T08:00",date_fin: "2022-10-27T10:00",etat: "absent"}]`
> `[{"date_debut": "2022-10-27T08:00","date_fin": "2022-10-27T10:00","etat": "absent"}]`
* **Résultat:** Retourne un objet en deux parties (errors et success) contenant le retour de chaque objet donné dans la requête POST.
* **Exemple de résultat:** [assiduite_create.json](samples/sample_assiduite_create.json.md)
@ -1659,7 +1683,7 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
* **Routes:** `/assiduite/<int:assiduite_id>/edit`
* **Exemple d'utilisation:** `/api/assiduite/1/edit`
> `{etat: "absent"}`
> `{"etat": "absent"}`
* **Résultat:** Modifie l'assiduité désignée. Renvoie une erreur si la
modification rend incompatible la plage de l'assiduité par rapport aux autres
@ -1675,10 +1699,10 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
```json
[
{
"etudid":<int>
"etudid":<int>,
"etat"?: <string>,
"moduleimpl_id"?: <int>
"desc"?:<string>
"moduleimpl_id"?: <int>,
"desc"?:<string>,
},
...
]
@ -1688,7 +1712,7 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
* `/assiduites/edit`
* **Exemple d'utilisation:** `/api/assiduites/edit`
> `[{etat: "absent",assiduite_id:1},{etat: "retard",moduleimpl_id:12,assiduite_id:2}]`
> `[{"etat": "absent","assiduite_id":1},{"etat": "retard","moduleimpl_id":12,"assiduite_id":2}]`
* **Résultat:** Retourne un objet en deux parties (errors et success) contenant le retour de chaque objet donné dans la requête POST.
@ -1718,14 +1742,15 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
| attribut | type | commentaire |
| :----------- | :------------- | :------------------------------------------------------------ |
| *justif_id* | int | identifiant unique |
| *etudid* | int | identifiant unique de l'étudiant concerné par le justificatif |
| *date_debut* | string | date ISO du début de la période du justificatif |
| *date_fin* | string | date ISO de la fin de la période du justificatif |
| *etat* | string | état du justificatif ( attente, valide, non_valide, modifie) |
| *raison* | string ou null | explication du justificatif si présente |
| *fichier* | string | identifiant de l'archivage des fichiers |
| *entry_date* | string | date ISO de l'entrée du justificatif |
| *justif_id* | int | identifiant unique |
| *etudid* | int | identifiant unique de l'étudiant concerné par le justificatif |
| *date_debut* | string | date ISO du début de la période du justificatif |
| *date_fin* | string | date ISO de la fin de la période du justificatif |
| *etat* | string | état du justificatif ( attente, valide, non_valide, modifie) |
| *raison* | string ou null | explication du justificatif si présente |
| *fichier* | string | identifiant de l'archivage des fichiers |
|*user_id* | int or null | identifiant de l'utilisateur ayant créé le justificatif |
| *entry_date* | string | date ISO de l'entrée du justificatif |
#### **justificatif**
@ -1741,14 +1766,23 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
* **Méthode:** GET
* **Permission: `ScoView`**
* **Paramètres:** `etudid`
* **Paramètres:**
* `etudid`
* `nip`
* `ine`
* **Query string:**
* `etat` ( attente, valide, non_valide, modifie)
* `date_debut` (X : date format ISO)
* `date_fin` (X : date format ISO)
* **Routes:**
* `/justificatifs/<int:etudid>`
* `/justificatifs/<int:etudid>/query?etat=VALIDE`
* `/justificatifs/<int:etudid>/query`
* `/justificatifs/etudid/<etudid>`
* `/justificatifs/etudid/etudid>/query`
* `/justificatifs/nip/<nip>`
* `/justificatifs/nip/<nip>/query`
* `/justificatifs/ine/<ine>`
* `/justificatifs/ine/<ine>/query`
* **Exemple d'utilisation:**
* `/api/justificatifs/1`
* `/api/justificatifs/1/query?etat=modifie`
@ -1760,7 +1794,10 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
* **Méthode:** POST
* **Permission: `ScoJustifChange`**
* **Paramètres:** `etudid`
* **Paramètres:**
* `etudid`
* `nip`
* `ine`
* **Data:**
```json
@ -1777,7 +1814,11 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
> Un fichier justificatif peut être importé dans scodoc après avoir créer l'objet justificatif voir [importer un justificatif](FichiersJustificatifs.md#importer-un-fichier)
* **Routes:** `/justificatif/<int:etudid>/create`
* **Routes:**
* `/justificatif/<int:etudid>/create`
* `/justificatif/etudid/<etudid>/create`
* `/justificatif/nip/<nip>/create`
* `/justificatif/ine/<ine>/create`
* **Exemple d'utilisation:** `/api/justificatif/1/create`
```json
@ -1814,7 +1855,7 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
* **Routes:** `/justificatif/<int:justif_id>/edit`
* **Exemple d'utilisation:** `/api/justificatif/1/edit`
> `{etat: "valide"}`
> `{"etat": "valide"}`
* **Résultat:** Modifie le justificatif désigné.
* **Exemple de résultat:** [justificatif-edit.json](samples/sample_justificatif_edit.json.md)
@ -1823,7 +1864,6 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
* **Méthode:** POST
* **Permission: `ScoJustifChange`**
* **Paramètres:** `etudid`
* **Data:**
```json
@ -1883,7 +1923,7 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
* **Routes:** `/justificatif/<int:justif_id>/remove`
* **Résultat:** `{response:"removed"}` ou une erreur
* **Résultat:** `{"response":"removed"}` ou une erreur
* **Exemple de résultat:** [justificatif-remove.json](samples/sample_justificatif_remove.json.md)
#### **justificatif-list**

View File

@ -6,6 +6,13 @@ Linux Debian 11 vers la version suivante: ScoDoc 9.6 sous Debian 12.
On commence par mettre à jour normalement le système Debian, puis on change la
version de la base de données postgresql puis on met à jour ScoDoc.
Si vous souhaitez installer ScoDoc 9.6 sans partir d'un serveur 9.5,
[voir la page d'installation](GuideInstallDebian12.md)
Tout compris, la mise à jour d'un serveur typique prend environ 20 à 30 minutes
et ne demande aucune compétence particulière, autre que de suivre
scrupuleusement les instructions ci-dessous, sans oublier d'étape.
## Upgrade Debian 11 vers Debian 12
La documentation officielle est là:
@ -53,6 +60,7 @@ deb-src http://deb.debian.org/debian/ bookworm-updates main
#### Mettre à jour
```bash
/bin/rm /etc/apt/sources.list.d/scodoc.list
apt-get clean
apt-get update
```
@ -123,7 +131,7 @@ apt-get autoremove --purge postgresql-13 postgresql-client-13
- Supprimer l'ancien fichier:
```bash
rm /etc/apt/sources.list.d/scodoc*
/bin/rm -f /etc/apt/sources.list.d/scodoc*
```
- Ajouter le dépot scodoc: copier ce fichier <a href="/attachments/scodoc.list"
@ -135,13 +143,23 @@ ou bien l'éditer pour qu'il contienne juste cette ligne:
deb http://scodoc.org/deb/bookworm bookworm main
```
### Installation de la clé
L'ancienne clé crypto qui authentifie scodoc est toujours valide, mais il faut
l'installer différemment. Comme root, lancer:
```bash
apt-key export BBDA4CF7 | gpg --dearmour -o /etc/apt/trusted.gpg.d/scodoc.gpg
```
### Mise à jour du paquet scodoc9
```bash
apt update && apt upgrade
```
devrait installer `scodoc9.6.x`.
devrait installer `scodoc9.6.x` (cette première install est un peu longue, il
faut en effet charger et configurer de nombreux modules python).
### Migration des absences vers les assiduités
@ -152,6 +170,7 @@ les commandes suivantes:
```bash
systemctl stop scodoc9 # le service DOIT etre stoppé !
su scodoc
#
cd /opt/scodoc
source venv/bin/activate
flask migrate-abs-to-assiduites
@ -160,12 +179,14 @@ flask migrate-abs-to-assiduites
Pour plus de détails et paramétrages (plages horaires, ...), voir
[la documentation sur la migration des absences](AssiduitesMigration.md).
Le traitement est assez long et peut prendre plusieurs dizaines de minutes,
Le traitement est assez long et peut prendre plusieurs minutes,
suivant le nombre d'absences et la vitesse de votre serveur.
### Démarrage du service
Comme d'habitude, en tant que `root`:
Comme d'habitude, en tant que `root`: (faire `exit`si vous êtes resté dans le
shell scodoc précédent):
```bash
systemctl start scodoc9
```

View File

@ -1,16 +1,18 @@
### assiduite
#### GET /assiduite/1
```json
{
"assiduite_id": 1,
"date_debut": "2022-08-20T12:00:00.000000+02:00",
"date_fin": "2022-08-20T12:00:00.000000+02:00",
"desc": null,
"entry_date": "2022-08-20T12:00:00.000000+02:00",
"etat": "PRESENT",
"etudid": 1,
"moduleimpl_id": 8
"assiduite_id": 1,
"date_debut": "2022-09-25T08:00:00+0200",
"date_fin": "2022-09-25T08:00:00+0200",
"desc": null,
"entry_date": "2023-07-28T11:13:45+0200",
"est_just": false,
"etat": "PRESENT",
"etudid": 1,
"moduleimpl_id": 8,
"user_id": null
}
```

View File

@ -1,18 +1,21 @@
### assiduite_create
#### POST /assiduite/1/create
> `Content-Type: application/json`
>
>
> `[{"date_debut": "2022-10-27T08:00","date_fin": "2022-10-27T10:00","etat": "absent"}]`
```json
{
"errors": {},
"success": {
"0": {
"assiduite_id": 60
}
"errors": [],
"success": [
{
"indice": 0,
"message": {
"assiduite_id": 60
}
}
]
}
```

View File

@ -1,23 +1,28 @@
### assiduite_delete
#### POST /assiduite/delete
> `Content-Type: application/json`
>
>
> `[2,2,3]`
```json
{
"errors": {
"1": "Assiduite non existante"
},
"success": {
"0": {
"OK": true
},
"2": {
"OK": true
}
"errors": [
{
"indice": 1,
"message": "Assiduite non existante"
}
],
"success": [
{
"indice": 0,
"message": "OK"
},
{
"indice": 2,
"message": "OK"
}
]
}
```

View File

@ -1,35 +1,37 @@
### assiduite_edit
#### POST /assiduite/1/edit
> `Content-Type: application/json`
>
> `{"etat": "retard","moduleimpl_id":3}`
```json
{
"OK": true
}
```
#### POST /assiduite/1/edit
> `Content-Type: application/json`
>
> `{"etat":"absent"}`
```json
{
"OK": true
}
```
#### POST /assiduite/1/edit
> `Content-Type: application/json`
>
>
> `{"moduleimpl_id":2}`
```json
{
"OK": true
"OK": true
}
```
#### POST /assiduite/1/edit
> `Content-Type: application/json`
>
> `{"etat": "retard","moduleimpl_id":3}`
```json
{
"OK": true
}
```
#### POST /assiduite/1/edit
> `Content-Type: application/json`
>
> `{"etat":"absent"}`
```json
{
"OK": true
}
```

View File

@ -1,63 +1,71 @@
### assiduites
#### GET /assiduites/1
```json
[
{
"assiduite_id": 1,
"date_debut": "2022-08-20T12:00:00.000000+02:00",
"date_fin": "2022-08-20T12:00:00.000000+02:00",
"desc": null,
"entry_date": "2022-08-20T12:00:00.000000+02:00",
"etat": "PRESENT",
"etudid": 1,
"moduleimpl_id": 8
},
{
"assiduite_id": 2,
"date_debut": "2022-08-20T12:00:00.000000+02:00",
"date_fin": "2022-08-20T12:00:00.000000+02:00",
"desc": null,
"entry_date": "2022-08-20T12:00:00.000000+02:00",
"etat": "RETARD",
"etudid": 1,
"moduleimpl_id": 13
},
"..."
{
"assiduite_id": 1,
"date_debut": "2022-09-25T08:00:00+0200",
"date_fin": "2022-09-25T08:00:00+0200",
"desc": null,
"entry_date": "2023-07-28T11:13:45+0200",
"est_just": false,
"etat": "PRESENT",
"etudid": 1,
"moduleimpl_id": 8,
"user_id": null
},
{
"assiduite_id": 2,
"date_debut": "2022-09-26T08:00:00+0200",
"date_fin": "2022-09-26T09:00:00+0200",
"desc": null,
"entry_date": "2023-07-28T11:13:45+0200",
"est_just": false,
"etat": "RETARD",
"etudid": 1,
"moduleimpl_id": 13,
"user_id": null
},
"..."
]
```
#### GET /assiduites/1/query?etat=retard
```json
[
{
"assiduite_id": 2,
"date_debut": "2022-08-20T12:00:00.000000+02:00",
"date_fin": "2022-08-20T12:00:00.000000+02:00",
"desc": null,
"entry_date": "2022-08-20T12:00:00.000000+02:00",
"etat": "RETARD",
"etudid": 1,
"moduleimpl_id": 13
},
{
"assiduite_id": 3,
"date_debut": "2022-08-20T12:00:00.000000+02:00",
"date_fin": "2022-08-20T12:00:00.000000+02:00",
"desc": null,
"entry_date": "2022-08-20T12:00:00.000000+02:00",
"etat": "RETARD",
"etudid": 1,
"moduleimpl_id": 14
},
"..."
{
"assiduite_id": 2,
"date_debut": "2022-09-26T08:00:00+0200",
"date_fin": "2022-09-26T09:00:00+0200",
"desc": null,
"entry_date": "2023-07-28T11:13:45+0200",
"est_just": false,
"etat": "RETARD",
"etudid": 1,
"moduleimpl_id": 13,
"user_id": null
},
{
"assiduite_id": 3,
"date_debut": "2022-09-27T08:00:00+0200",
"date_fin": "2022-09-27T10:00:00+0200",
"desc": null,
"entry_date": "2023-07-28T11:13:45+0200",
"est_just": false,
"etat": "RETARD",
"etudid": 1,
"moduleimpl_id": 14,
"user_id": null
},
"..."
]
```
#### GET /assiduites/1/query?moduleimpl_id=1
```json
[
"..."
]
```
```json
["..."]
```

View File

@ -1,30 +1,32 @@
### assiduites_count
#### GET /assiduites/1/count
```json
{
"compte": 4,
"demi": 3,
"heure": 6.0,
"journee": 4
"compte": 4,
"demi": 3,
"heure": 6.0,
"journee": 4
}
```
#### GET /assiduites/1/count/query?etat=present,retard&metric=compte,heure
```json
{
"compte": 4,
"heure": 6.0
"compte": 4,
"heure": 6.0
}
```
#### GET /assiduites/1/count/query?etat=retard
```json
{
"compte": 3,
"demi": 3,
"heure": 6.0,
"journee": 3
"compte": 3,
"demi": 3,
"heure": 6.0,
"journee": 3
}
```

View File

@ -1,23 +1,73 @@
### assiduites_formsemestre
#### GET /assiduites/formsemestre/1
```json
[
"..."
{
"assiduite_id": 1,
"date_debut": "2022-09-25T08:00:00+0200",
"date_fin": "2022-09-25T08:00:00+0200",
"desc": null,
"entry_date": "2023-07-28T11:13:45+0200",
"est_just": false,
"etat": "PRESENT",
"etudid": 1,
"moduleimpl_id": 8,
"user_id": null
},
{
"assiduite_id": 2,
"date_debut": "2022-09-26T08:00:00+0200",
"date_fin": "2022-09-26T09:00:00+0200",
"desc": null,
"entry_date": "2023-07-28T11:13:45+0200",
"est_just": false,
"etat": "RETARD",
"etudid": 1,
"moduleimpl_id": 13,
"user_id": null
},
"..."
]
```
#### GET /assiduites/formsemestre/1/query?etat=retard
```json
[
"..."
{
"assiduite_id": 2,
"date_debut": "2022-09-26T08:00:00+0200",
"date_fin": "2022-09-26T09:00:00+0200",
"desc": null,
"entry_date": "2023-07-28T11:13:45+0200",
"est_just": false,
"etat": "RETARD",
"etudid": 1,
"moduleimpl_id": 13,
"user_id": null
},
"..."
]
```
#### GET /assiduites/formsemestre/1/query?moduleimpl_id=1
```json
[
"..."
{
"assiduite_id": 3,
"date_debut": "2022-09-27T08:00:00+0200",
"date_fin": "2022-09-27T08:00:00+0200",
"desc": null,
"entry_date": "2023-07-28T11:13:45+0200",
"est_just": false,
"etat": "PRESENT",
"etudid": 1,
"moduleimpl_id": 1,
"user_id": null
},
"..."
]
```

View File

@ -1,30 +1,32 @@
### assiduites_formsemestre_count
#### GET /assiduites/formsemestre/1/count
```json
{
"compte": 0,
"demi": 0,
"heure": 0.0,
"journee": 0
"compte": 0,
"demi": 0,
"heure": 0.0,
"journee": 0
}
```
#### GET /assiduites/formsemestre/1/count/query?etat=present,retard&metric=compte,heure
```json
{
"compte": 0,
"heure": 0.0
"compte": 0,
"heure": 0.0
}
```
#### GET /assiduites/formsemestre/1/count/query?etat=retard
```json
{
"compte": 0,
"demi": 0,
"heure": 0.0,
"journee": 0
"compte": 0,
"demi": 0,
"heure": 0.0,
"journee": 0
}
```

View File

@ -3,14 +3,15 @@
#### GET /justificatif/1
```json
{
"date_debut": "2022-08-20T12:00:00.000000+02:00",
"date_fin": "2022-08-20T12:00:00.000000+02:00",
"entry_date": "2022-08-20T12:00:00.000000+02:00",
"date_debut": "2022-09-25T08:00:00+0200",
"date_fin": "2022-09-25T16:00:00+0200",
"entry_date": "2023-07-28T11:13:45+0200",
"etat": "VALIDE",
"etudid": 1,
"fichier": null,
"justif_id": 1,
"raison": "raison"
"raison": "raison",
"user_id": null
}
```

View File

@ -1,18 +1,22 @@
### justificatif_create
#### POST /justificatif/1/create
> `Content-Type: application/json`
>
>
> `[{"date_debut": "2022-10-27T08:00","date_fin": "2022-10-27T10:00","etat": "attente"}]`
```json
{
"errors": {},
"success": {
"0": {
"justif_id": 12
}
"errors": [],
"success": [
{
"indice": 0,
"message": {
"couverture": [],
"justif_id": 12
}
}
]
}
```

View File

@ -1,23 +1,28 @@
### justificatif_delete
#### POST /justificatif/delete
> `Content-Type: application/json`
>
>
> `[2,2,3]`
```json
{
"errors": {
"1": "Justificatif non existant"
},
"success": {
"0": {
"OK": true
},
"2": {
"OK": true
}
"errors": [
{
"indice": 1,
"message": "Justificatif non existant"
}
],
"success": [
{
"indice": 0,
"message": "OK"
},
{
"indice": 2,
"message": "OK"
}
]
}
```

View File

@ -1,24 +1,31 @@
### justificatif_edit
#### POST /justificatif/1/edit
> `Content-Type: application/json`
>
>
> `{"etat":"valide"}`
```json
{
"OK": true
"couverture": {
"apr\u00e8s": [26],
"avant": [1, 26, 38]
}
}
```
#### POST /justificatif/1/edit
> `Content-Type: application/json`
>
>
> `{"raison":"MEDIC"}`
```json
{
"OK": true
"couverture": {
"apr\u00e8s": [26],
"avant": [1, 26, 38]
}
}
```

View File

@ -1,26 +1,26 @@
### justificatifs
#### GET /justificatifs/1
```json
[
{
"date_debut": "2022-08-20T12:00:00.000000+02:00",
"date_fin": "2022-08-20T12:00:00.000000+02:00",
"entry_date": "2022-08-20T12:00:00.000000+02:00",
"etat": "VALIDE",
"etudid": 1,
"fichier": null,
"justif_id": 1,
"raison": "raison"
},
"..."
{
"date_debut": "2022-09-25T08:00:00+0200",
"date_fin": "2022-09-25T16:00:00+0200",
"entry_date": "2023-07-28T11:13:45+0200",
"etat": "VALIDE",
"etudid": 1,
"fichier": null,
"justif_id": 1,
"raison": "raison",
"user_id": null
},
"..."
]
```
#### GET /justificatifs/1/query?etat=attente
```json
[
"..."
]
```
```json
["..."]
```