From aa571a3cca67dfe94d1892b3352d49b3f7456474 Mon Sep 17 00:00:00 2001 From: Jean-Marie PLACE Date: Thu, 4 Aug 2022 10:56:05 +0200 Subject: [PATCH] dept et formation ok --- docs/ScoDoc9API.md | 1130 +- docs/img/API_Chart.odg | Bin 26887 -> 26244 bytes docs/img/API_Chart.svg | 19126 +++------------------ docs/samples/sample_departement.json.md | 14 + docs/samples/sample_departements.json.md | 17 + docs/samples/sample_formation.json.md | 20 + mkdocs.yml | 5 + 7 files changed, 3335 insertions(+), 16977 deletions(-) create mode 100644 docs/samples/sample_departement.json.md create mode 100644 docs/samples/sample_departements.json.md create mode 100644 docs/samples/sample_formation.json.md diff --git a/docs/ScoDoc9API.md b/docs/ScoDoc9API.md index 5f346f4b0..ae44ce716 100644 --- a/docs/ScoDoc9API.md +++ b/docs/ScoDoc9API.md @@ -161,6 +161,7 @@ par le serveur ScoDoc. * [500](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/500) : Erreur inconnue côté serveur. +<<<<<<< HEAD ![Carte syntaxique de l'API ScoDoc](img/API_Chart.svg) @@ -168,6 +169,8 @@ par le serveur ScoDoc. [source svg](img/API_Chart.svg) +======= +>>>>>>> b2469f2 (dept et formation ok) ## Règles générales * une route s'écrit comme une suite de noms et d'identifiants @@ -180,10 +183,93 @@ par le serveur ScoDoc. * Au pluriel une collection d'objets est renvoyée, si aucun obket n'est trouvé, retourne une collection vide * un type d'objet au singulier est généralement suivi immédiatement de son identifiant (unique). Exception: pour un étudiant, on peut également utiliser le NIP ou l'INE (qui ne sont pas uniques) -## Départements +## Référence + +### Carte syntaxique -#### **departements_ids** +![carte_syntaxique](img/API_Chart.svg)#### Structure Département +### Tableau récapitulatif des point de l'API + +Ce tableau est trié selon le type des informations retournées + +* Un nom simple représente un seul objet de ce type; +* suivi de `+`désigne une forme 'longue' d'objet de ce type +* suivi de `*` désigne une liste de 0, 1 ou plusieurs objets du type; +* suivi de `#` désigne une liste d'entiers (les ids des objets du type). +* suivi de `:` puis d'un nom en majuscule indique une requête (POST) qui modifie les données de ScoDoc + +| Retour | Remarque | Méthode | Navigation | +|:---------------------------|:----------------------------------|---------|--------------------------------------------------------------------------------------------------------------------| +| departement**`*`** | tous les depts |GET | [departements](http://localhost:8000/ScoDoc9API/**`**`#`**`**departements) | +| departement**`#`** | tous les ids des depts |GET | [departements-ids](http://localhost:8000/ScoDoc9API/**`#`**departements-ids) | +| departement | recherche par id |GET | [departement](http://localhost:8000/ScoDoc9API/**`#`**departement) | +| departement | recherche par acronyme |GET | [departement](http://localhost:8000/ScoDoc9API/**`#`**departement) | +| formation**`*`** | toutes les formations accessibles |GET | [formations](http://localhost:8000/ScoDoc9API/**`#`**formations) | +| formation**`#`** | ids des formations accessibles |GET | [formations-ids](http://localhost:8000/ScoDoc9API/**`#`**formations-ids) | +| formation | une formation |GET | [formation](http://localhost:8000/ScoDoc9API/**`#`**formation) | +| export | |GET | [formation-export](http://localhost:8000/ScoDoc9API/**`#`**formation-export) | +| export**`+`** | |GET | [formation-export_with_ids](http://localhost:8000/ScoDoc9API/**`#`**formation-export_with_ids) | +| referentiel_competences | |GET | [formation-referenciel_competences](http://localhost:8000/ScoDoc9API/**`#`**formation-referenciel_competences) | +| formsemestre**`#`** | |GET | [departement-formsemestres_ids](http://localhost:8000/ScoDoc9API/**`#`**departement-formsemestres_ids) | +| formsemestre**`*`** | |GET | [departement-formsemestres_courants](http://localhost:8000/ScoDoc9API/**`#`**departement-formsemestres_courants) | +| formsemestre**`*`** | |GET | [formsemestre-query](http://localhost:8000/ScoDoc9API/**`#`**formsemestre-query) | +| formsemestre**`*`** | |GET | [etudiant-formsemestres](http://localhost:8000/ScoDoc9API/**`#`**etudiant-formsemestres) | +| formsemestre | |GET | [formsemestre](http://localhost:8000/ScoDoc9API/**`#`**formsemestre) | +| moduleimpl | |GET | [moduleimpl](http://localhost:8000/ScoDoc9API/**`#`**moduleimpl) | +| partition**`*`** | |GET | [formsemestre-partitions](http://localhost:8000/ScoDoc9API/**`#`**formsemestre-partitions) | +| partition | |GET | [partition](http://localhost:8000/ScoDoc9API/**`#`**partition) | +| partition:CREATE | |POST | [formsemestre-partition-create](http://localhost:8000/ScoDoc9API/**`#`**formsemestre-partition-create) | +| partition:EDIT | |POST | [partition-edit](http://localhost:8000/ScoDoc9API/**`#`**partition-edit) | +| partition:ACTION | |POST | [formsemestre-partitions-order](http://localhost:8000/ScoDoc9API/**`#`**formsemestre-partitions-order) | +| partition:DELETE | |POST | [partition-delete](http://localhost:8000/ScoDoc9API/**`#`**partition-delete) | +| partition:ACTION | |POST | [partition-remove_etudiant](http://localhost:8000/ScoDoc9API/**`#`**partition-remove_etudiant) | +| group:CREATE | |POST | [partition-group-create](http://localhost:8000/ScoDoc9API/**`#`**partition-group-create) | +| group:EDIT | |POST | [group-edit](http://localhost:8000/ScoDoc9API/**`#`**group-edit) | +| group:ACTION | |POST | [partition-groups-order](http://localhost:8000/ScoDoc9API/**`#`**partition-groups-order) | +| group:DELETE | |POST | [group-delete](http://localhost:8000/ScoDoc9API/**`#`**group-delete) | +| group* | |POST | [etudiant-formsemestre-groups](http://localhost:8000/ScoDoc9API/**`#`**etudiant-formsemestre-groups) | +| group:ACTION | |GET | [group-set_etudiant](http://localhost:8000/ScoDoc9API/**`#`**group-set_etudiant) | +| group:ACTION | |POST | [group-remove_etudiant](http://localhost:8000/ScoDoc9API/**`#`**group-remove_etudiant) | +| etudiant**`*`** | tous les étudiants |GET | [etudiants](http://localhost:8000/ScoDoc9API/**`#`**etudiants) | +| etudiant**`*`** | recherche par etudid, nip ou i |GET | [etudiants-clé](http://localhost:8000/ScoDoc9API/**`#`**etudiants-clé) | +| etudiant**`*`** | les étudiants actuels |GET | [etudiants-courant](http://localhost:8000/ScoDoc9API/**`#`**etudiants-courant) | +| etudiant**`*`** | |GET | [departement-etudiants](http://localhost:8000/ScoDoc9API/**`#`**departement-etudiants) | +| etudiant**`*`** | |GET | [formsemestre-etudiants](http://localhost:8000/ScoDoc9API/**`#`**formsemestre-etudiants) | +| etudiant**`*`** | |GET | [formsemestre-etudiants-defaillants](http://localhost:8000/ScoDoc9API/**`#`**formsemestre-etudiants-defaillants) | +| etudiant**`*`** | |GET | [formsemestre-etudiants-demissionnaires](http://localhost:8000/ScoDoc9API/**`#`**formsemestre-etudiants-demissionnaires) | +| etudiant**`*`** | |GET | [group-etudiants](http://localhost:8000/ScoDoc9API/**`#`**group-etudiants) | +| etudiant**`*`** | |GET | [group-etudiants-query](http://localhost:8000/ScoDoc9API/**`#`**group-etudiants-query) | +| etudiant | |GET | [etudiant](http://localhost:8000/ScoDoc9API/**`#`**etudiant) | +| | |GET | [jury-formsemestre-decisions_jury](http://localhost:8000/ScoDoc9API/**`#`**jury-formsemestre-decisions_jury) | +| bulletin**`*`** | |GET | [formsemestre-bulletin](http://localhost:8000/ScoDoc9API/**`#`**formsemestre-bulletin) | +| bulletin | |GET | [etudiant-formsemestre-bulletin](http://localhost:8000/ScoDoc9API/**`#`**etudiant-formsemestre-bulletin) | +| programme | |GET | [formsemestre-programme](http://localhost:8000/ScoDoc9API/**`#`**formsemestre-programme) | +| | |GET | [formsemestre-etat_evals](http://localhost:8000/ScoDoc9API/**`#`**formsemestre-etat_evals) | +| | |GET | [formsemestre-resultats](http://localhost:8000/ScoDoc9API/**`#`**formsemestre-resultats) | +| evaluation* | |GET | [evaluations](http://localhost:8000/ScoDoc9API/**`#`**evaluations) | +| note* | |GET | [evaluation-notes](http://localhost:8000/ScoDoc9API/**`#`**evaluation-notes) | +| user | |GET | [user](http://localhost:8000/ScoDoc9API/**`#`**user) | + +### **Départements** + + +| attribut | type | commentaire | +|:-----------------|:--------|:---------------------------------------| +| _id_ | int | identifiant unique | +| _acronym_ | string | nom du dépatement (en principe unique) | +| _descripton_ | string | | +| _visible_ | bool | affiché ou non dans la page d'accueil | +| _date_creation_ | string | date ISO | + +#### **departements** +* **Méthode:** GET +* **Routes:** `/departements` +* **Exemple d'utilisation:** `/api/departements` +* **Résultat:** Liste des tous les départements (visibles ou non). +* **Exemple de résultat:** [departements.json](samples/sample_departements.json.md) + +#### **departements-ids** * **Méthode:** GET * **Routes:** `/departements_ids` * **Résultat:** Liste des id départements (visibles ou non). @@ -193,69 +279,80 @@ par le serveur ScoDoc. ``` #### **departement** - * **Méthode:** GET * **Routes:** * `/departement/id/` * `/departement/` * **Résultat:** Un département -* **Exemple de résultat:** +* **Exemple de résultat:** [departement.json](samples/sample_departement.json.md) + +### **Formation** +#### Structure Formation +| attribut | type | commentaire | +|:----------------------------|:------------|:--------------------------------------------------| +| _dept_id_ | int | _redondant avec departement.id ?_ | +| _acronyme_ | string | | +| _titre_ | string | _URL encoded ?_ | +| _version_ | int | | +| _type_parcours_ | int | | +| _referentiel_competence_id_ | int | null si pas de referentiel associé | +| _id_ | int | id unique de formation | +| _titre_officiel_ | string | | +| _formation_code_ | string | défini la compatibilité avec d'autres formations | +| _code_specialité_ | string | | +| _departement_ | Département | _pour `/formations` mais pas pour `/formation` ?_ | +| _formation_id_ | | _redondant avec id ?_ | + +#### **`formations`** +* **Méthode:** GET +* **Routes:** `/formations` +* **Exemple d'utilisation:** `/ScoDoc/api/formations` +* **Résultat:** Retourne la liste de toutes les formations (tous + départements) +* **Exemple de résultat:** [formations.json](samples/sample_formations.json.md) + +#### **`formations-ids`** +* **Méthode:** GET +* **Routes:** `/formations_ids` +* **Exemple d'utilisation:** `/ScoDoc/api/formations_ids` +* **Résultat:** Retourne la liste des ids de toutes les formations (tous départements accessibles) +* **Exemple de résultat:** ```json -{ - "id": 1, - "acronym": "TAPI", - "description": null, - "visible": true, - "date_creation": "Fri, 15 Apr 2022 12:19:28 GMT" -} +[17, 99, 32] ``` -#### **departements** - +#### **`formation`** * **Méthode:** GET -* **Routes:** `/departements` -* **Exemple d'utilisation:** `/api/departements` -* **Résultat:** Liste des tous les départements (visibles ou non). -* **Exemple de résultat:** - ```json - [ - { un département } - ... - ] - ``` - chaque département est décrit selon [departement](ScoDoc9API.md#departement) +* **Paramètres:** `formation_id` +* **Routes:** `/formation/` +* **Exemple d'utilisation:** `/ScoDoc/api/formation/1` +* **Résultat:** Retourne la formation d'id donné +* **Exemple de résultat:** [formation.json](samples/sample_formation.json.md) -#### **Étudiants d'un département** +### **Formsemestre** - * **Méthode:** GET - * **Paramètres:** `dept`, `dept_id` - * **Routes:** - * `/departement/id//etudiants` - * `/departement//etudiants` - * **Exemple d'utilisation:** `/api/departement/MMI/etudiants` - * **Résultat:** liste tous les étudiants (passés ou présents) d'un département. - On peut spécifier l'acronyme du département ("MMI") ou son id (un entier). - Attention, la liste peut être longue: requête coûteuse à éviter. - * **Exemple de résultat:** - ```json - [ - { - "civilite": "M", // M, F ou X - "ine": "7899X61616", - "code_nip": "F6777H88", - "date_naissance": null, - "email": "toto@toto.fr", - "emailperso": null, - "etudid": 18, - "nom": "MOREL", // en majuscules - "prenom": "JACQUES" - }, - ... - ] - ``` +Les sessions de formation (qu'elles durent une année ou un mois) sont représentées par les `formsemestre`. -#### **Formsemestres d'un département** +#### Note sur les identifiants de formsemestre +Le `session_id` peut être utilisé pour identifier de façon prévisible et +(presque) unique un formsemestre) dans un établissement, ce qui est utile +notamment pour interfacer ScoDoc à d'autres logiciels (par exemple gestion +d'emplois du temps ou de services d'enseignement). Cet identifiant est constitué +des informations suivantes: +* **Département** (RT, GEII, INFO...) (acronyme en majuscules) +* **Nom parcours:** BUT, LP, ... (défini au niveau du parcours dans ScoDoc = NAME) +* **Modalité:** FI, FC, FA +* **"Spécialité":** S1 (ou S1D pour les semestres décalés), ou le + `code_specialite` si pas de semestres. Le code spécialité est un champ + (libre) dans la "formation" (le programme pédagogique). +* **Année:** année de début de l'année scolaire correspondante (2014 pour + une session appartenant à l'année scolaire 2014-2015, même si elle + commence en mars 2015). + +**Exemple:** `INFO-DUT-FI-S1-2014` équivaut à un semestre S1 d'un DUT informatique de 2014 en formation initiale (FI) + +#### **departement-formsemestres_ids** * **Méthode:** GET * **Paramètres:** `dept` * **Routes:** @@ -266,10 +363,9 @@ par le serveur ScoDoc. * **Exemple de résultat:** ```[ 28, 99, 3 ]``` -#### **Formsemestres en cours d'un département** - +#### **departement-formsemestres-courants** * **Méthode:** GET -* **Paramètres:** `dept` +* **Paramètres:** `dept_id` * **Routes:** * `/departement/id//formsemestres_courants` * `/departement//formsemestres_courants` @@ -277,19 +373,7 @@ par le serveur ScoDoc. * **Résultat:** Liste des formsemestres en cours d'un département donné. * **Exemple de résultat:** [departement-formsemestres-courants.json](samples/sample_departement-formsemestres-courants.json.md) -### **Semestres** - -#### **Formsemestre** - -* **Méthode:** GET -* **Paramètres:** `formsemestre_id` -* **Route:** `/formsemestre/` -* **Exemple d'utilisation:** `/api/formsemestre/1` -* **Résultat:** Données d'un formsemestre spécifié par son id. -* **[Exemple de résultat:](samples/sample_formsemestre.json.md)** - -#### **Formsemestres** - +#### **formsemestres-query** * **Méthode:** GET * **Paramètres:** aucun * **Query string:** `etape_apo`, `annee_scolaire`, `dept_acronym`, `dept_id` @@ -297,101 +381,186 @@ par le serveur ScoDoc. * **Exemple d'utilisation:** `/api/formsemestres/query?etape_apo=V7HU1&annee_scolaire=2021` * **Résultat:** Données d'un formsemestre spécifié par son id. Si plusieurs paramètres sont donnés, c'est la conjonction (ET) des critères qui est recherchée. Si aucun formsemestre ne satisfait la requ^te, une liste vide est retournée * **Exemple de résultat:** [formsemestres.json](samples/sample_formsemestres.json.md) - -#### **Bulletins d'un formsemestre** +#### **etudiant_formsemestres** +* **Méthode:** GET +* **Paramètres:** `etudid`, `nip`, `ine` +* **Routes:** : + * `/etudiant/etudid//formsemestres` ou + * `/etudiant/nip//formsemestres` ou + * `/etudiant/ine//formsemestres` +* **Exemple d'utilisation:** `/etudiant/ine/1/formsemestres` +* **Résultat:** Retourne la liste des semestres qu'un étudiant a suivis, triés par ordre chronologique. (json) +* **Exemple de résultat:** [etudiant-formsemestres.json](samples/sample_etudiant-formsemestres.json.md) + +#### **formsemestre** * **Méthode:** GET * **Paramètres:** `formsemestre_id` -* **Route:** `/formsemestres//bulletins -* **Exemple d'utilisation:** `/api/formsemestre/1/bulletins` -* **Résultat:** Bulletins d'un formsemestre spécifié par son id. -* **Exemple de résultat:** [formsemestre-bulletins.json](samples/sample_formsemestre-bulletins.json.md) +* **Route:** `/formsemestre/` +* **Exemple d'utilisation:** `/api/formsemestre/1` +* **Résultat:** Données d'un formsemestre spécifié par son id. +* **[Exemple de résultat:](samples/sample_formsemestre.json.md)** -#### **Programme d'un formsemestre** +### **Moduleimpl** +Le moduleimpl est la mise en place d'un module dans un formsemestre (avec son +responsable et ses enseignants). + +#### **`moduleimpl`** * **Méthode:** GET +* **Paramètres:** `moduleimpl_id` +* **Routes:** `/moduleimpl/` +* **Exemple d'utilisation:** `/ScoDoc/api/formation/moduleimpl/1` +* **Résultat:** Retourne la liste des moduleimpl +* **Exemple de résultat:** [moduleimpl.json](samples/sample_moduleimpl.json.md) + +### **Partition** + +L'ensemble des étudiants d'un semestre peut être réparti selon une ou +plusieurs partitions (types de groupes). Chaque partition est constituée +d'un nombre quelconque de groupes d'étudiants. + +#### **`formsemestre-partitions`** +* **Méthode: GET** * **Paramètres:** `formsemestre_id` -* **Route:** `/formsemestres/programme -* **Exemple d'utilisation:** `/api/formsemestre/1/programme` -* **Résultat:** Liste des UEs, ressources et SAE d'un formsemestre spécifié par son id. -* **Exemple de résultat:** [formsemestre-programme.json](samples/sample_formsemestre-programme.json.md) +* **Routes:** `/formsemestre//partitions` +* **Exemple d'utilisation:** `/ScoDoc/api/formsemestre/911/partitions` +* **Résultat:** La liste de toutes les partitions d'un formsemestre. +* **Exemple de résultat:** [formsemestre-partitions.json](samples/sample_formsemestre-partitions.json.md) -#### **Etudiants d'un formsemestre** +#### **`partition`** +* **Méthode: GET** +* **Paramètres:** `partition_id` +* **Routes:** `/partition/` +* **Exemple d'utilisation:** `/ScoDoc/api/partition/1963` +* **Résultat:** La description d'une partition (y compris la liste de ses groupes). +* **Exemple de résultat:** [partition.json](samples/sample_partition.json.md) -* **Méthode:** GET +#### **`formsemestre-partition-create`** +* **Méthode: POST** * **Paramètres:** `formsemestre_id` -* **Route:** - * `/formsemestres/etudiants` - * `/formsemestres/etudiants/demissionnaires` - * `/formsemestres/etudiants/defaillants` -* **Exemple d'utilisation:** `/api/formsemestre/1/etudiants` -* **Résultat:** Etudiants d'un formsemestre spécifié par son id. Liste est restreinte aux étudiants démissionnaires/défaillants si l'option correspondante est ajoutée au chemin -* **Exemple de résultat:** [formsemestre-etudiants.json](samples/sample_formsemestre-etudiants.json.md) +* **Data:** `{ "partition_name" : }` +* **Routes:** `/formsemestre//partition/create` +>`{ "partition_name" : "PART" }` +* **Exemple d'utilisation:** `/ScoDoc/api/formsemestre/944/partition/create` +* **Résultat:** Crée une nouvelle partition dans un formsemestre. +* **[Exemple de résultat:](samples/sample_formsemestre-partition-create.json.md)** -#### **Etat des évaluations d'un formsemestre** +#### **`partition-edit`** +* **Méthode: POST** +* **Paramètres:** `partition_id` +* **Data:** `{ partition_name : }` +* **Routes:** `/partition//edit` +* **Exemple d'utilisation:** `/ScoDoc/api/partition/2047/edit` +>`{ "partition_name" : "PART4" }` +* **Résultat:** Renomme une partition +* **[Exemple de résultat](samples/sample_partition-edit.json.md)** -* **Méthode:** GET +#### **`formsemestre-partition-order`** +* **Méthode: POST** * **Paramètres:** `formsemestre_id` -* **Route:** `/formsemestres/etat_evals` -* **Exemple d'utilisation:** `/api/formsemestre/1/etat_evals` -* **Résultat:** informations sur les évaluations d'un formsemestre spécifié par son id. -* **Exemple de résultat:** [formsemestre-etat-eval.json](samples/sample_formsemestre-etat_evals.json.md) +* **Data:** `[ , , ... ]` +* **Routes:** `/formsemestre//partition/order` +* **Exemple d'utilisation:** `/ScoDoc/api/formsemestre/944/partition/order` +>`[ 2048, 2054 ]` +* **Résultat:** Spécifie l'ordre des partitions d'un formsemestre. +* **[Exemple de résultat:](samples/sample_formsemestre-partition-order.json.md)** -#### **Résultats d'un formsemestre** +#### **`partition-delete`** +* **Méthode: POST** +* **Paramètres:** `partition_id` +* **Routes:** `/partition//delete` +* **Exemple d'utilisation:** `/ScoDoc/api/partition/2047/delete` +* **Résultat:** Supprime une partition. +* **[Exemple de résultat](samples/sample_partition-delete.json.md)** +#### **`partition-remove_etudiant`** +* **Méthode: POST** +* **Permission: `ScoEtudChangeGroups`*** +* **Paramètres:** `partition_id` +* **Routes:** `/partition//remove_etudiant/` +* **Exemple d'utilisation:** `/ScoDoc/api/partition/1962/remove_etudiant/12107` +* **Résultat:** Reture un étudiant des groupes de la partition. +* **[Exemple de résultat](samples/sample_partition-remove_etudiant.json.md)** + +### **Groupe** + +#### **`partition-group-create`** +* **Méthode: POST** +* **Permission: `ScoEtudChangeGroups`*** +* **Paramètres:** `partition_id` +* **Data:** `{ group_name : }` +* **Routes:** `/partition//create` +* **Exemple d'utilisation:** `/ScoDoc/api/partition/1962/create` +>`{ "group_name" : "A" }` +* **Résultat:** Crée un groupe dans une partition. +* **[Exemple de résultat](samples/sample_formsemestre-partition-create.json.md)** + +#### **`group-edit`** +* **Méthode: POST** +* **Permission: `ScoEtudChangeGroups`*** +* **Paramètres:** `group_id` +* **Data:** `{ group_name : }` +* **Routes:** `/group//edit` +* **Exemple d'utilisation:** `/ScoDoc/api/group/4581/edit` +>`{ "group_name" : "nouveau" }` +* **Résultat:** Renomme un groupe. +* **[Exemple de résultat](samples/sample_group-edit.json.md)** + +#### **`partition-groups-order`** +* **Méthode: POST** +* **Paramètres:** `partition_id` +* **Data:** `[ , , ... ]` +* **Routes:** `/partition//groups/order` +* **Exemple d'utilisation:** `/ScoDoc/api/partition/1962/groups/order` +>`[ 4383, 4379, 4380, 4381, 4382, 4384 ]` +* **Résultat:** Spécifie l'ordre des groupes d'une partition. +* **[Exemple de résultat:](samples/sample_partition-groups-order.json.md)** + +#### **`group-delete`** +* **Méthode: POST** +* **Permission: `ScoEtudChangeGroups`*** +* **Paramètres:** `group_id` +* **Routes:** `/group//delete` +* **Exemple d'utilisation:** `/ScoDoc/api/group/4581/delete` +* **Résultat:** Supprime un groupe. +* **[Exemple de résultat](samples/sample_group-delete.json.md)** + +#### **etudiant-formsemestre-groupes** * **Méthode:** GET -* **Paramètres:** `formsemestre_id` -* **Query string: `format` -* **Route:** `/formsemestres/resultats` -* **Exemple d'utilisation:** `/api/formsemestre/1/resultats` -* **Résultat:** [formsemestre-resultats.json](samples/sample_formsemestre-resultats.json.md) +* **Paramètres:** `formsemestre_id`, `etudid`, `nip`, `ine` +* **Routes:** `/etudiant/etudid//semestre//groups` ou `/etudiant/nip//semestre//groups` ou `/etudiant/ine//semestre//groups` +* **Exemple d'utilisation:** `/etudiant/nip/1/semestre/1/groups` +* **Résultat:** Retourne la liste des groupes auxquels appartient l'étudiant dans le semestre indiqué. (json) +* **Exemple de résultat:** [groupes-formsemestre-etudiant.json](samples/sample_groupes-formsemestre-etudiant.json.md) -Récapitulatif par étudiant (état, groupe(s), moyennes d'UEs et de modules -pour un formsemestre spécifié par son id. -Par défaut les valeurs numériques sont formattées en chaînes. Si format=raw, valeurs numériques -mais pas JSON compliant à cause des _NaN_. +#### **`group-set_etudiant`** +* **Méthode: POST** +* **Permission: `ScoEtudChangeGroups`*** +* **Paramètres:** `group_id`, `etudid` +* **Routes:** `/group//set_etudiant/` +* **Exemple d'utilisation:** `/ScoDoc/api/group/4085/set_etudiant/12108` +* **Résultat:** Affecte un étudiant dans un groupe. +* **[Exemple de résultat](samples/sample_group-set_etudiant.json.md)** -* **Exemple de résultat:** - -## Étudiants - -#### **`etudiants_courants`** - -* **Méthode:** GET -* **Routes:** - * `/etudiants/courants` - * `/etudiants/courants/long` -* **Exemple d'utilisation:** `/api/etudiants/courants` -* **Résultat:** Liste des étudiants inscrits dans un formsemestre - actuellement en cours. Avec `/long`, donne tous les attributs de - l'étudiants (plus lent). -* **Exemple de résultat:** [etudiants-courants.json](samples/sample_etudiants-courants.json.md) - -#### **`etudiant`** - - * **Méthode:** GET - * **Paramètres:** `etudid`, `nip`, `ine` - * **Routes:** - * `/etudiant/etudid/` ou - * `/etudiant/nip/` ou - * `/etudiant/ine/` - * **Exemple d'utilisation:** `/api/etudiant/nip/1` - * **Résultat:** Retourne les informations sur l'étudiant correspondant à - l'id passé en paramètres. - Les codes INE et NIP sont uniques au sein d'un département. - Si plusieurs objets étudiant ont le même code, on ramène le plus récemment inscrit. - * **Exemple de résultat:** [etudiant.json](samples/sample_etudiant.json.md) - -#### **`tous les etudiants` (TODO)** - - * **Méthode:** GET - * **Routes:** `/etudiants - * **Exemple d'utilisation:** `/api/etudiants` - * **Résultat:** Liste complète de tous les étudiants (passés ou présents) pour lequel l'utilisateur a la permission ScoView. - * **Exemple de résultat:** [tous-les-etudiant.json](samples/sample_tous-les-etudiants.json.md) +#### **`group-remove_etudiant`** +* **Méthode: POST** +* **Permission: `ScoEtudChangeGroups`*** +* **Paramètres:** `group_id`, `etudid` +* **Routes:** `/group//remove_etudiant/` +* **Exemple d'utilisation:** `/ScoDoc/api/group/4085/remove_etudiant/12108` +* **Résultat:** Retire un étudiant d'un groupe. +* **[Exemple de résultat](samples/sample_group-remove_etudiant.json.md)** +### **Etudiant** #### **`etudiants`** +* **Méthode:** GET +* **Routes:** `/etudiants +* **Exemple d'utilisation:** `/api/etudiants` +* **Résultat:** Liste complète de tous les étudiants (passés ou présents) pour lequel l'utilisateur a la permission ScoView. +* **Exemple de résultat:** [tous-les-etudiant.json](samples/sample_tous-les-etudiants.json.md) +#### **`etudiants-clef`** * **Méthode:** GET * **Paramètres:** `etudid`, `nip`, `ine` * **Routes:** `/etudiants/etudid/` ou `/etudiants/nip/` ou `/etudiants/ine/` @@ -404,339 +573,65 @@ mais pas JSON compliant à cause des _NaN_. dept.). * **Exemple de résultat:** [etudiants.json](samples/sample_etudiants.json.md) -### Cursus +#### **`etudiants-courants`** +* **Méthode:** GET +* **Routes:** + * `/etudiants/courants` + * `/etudiants/courants/long` +* **Exemple d'utilisation:** `/api/etudiants/courants` +* **Résultat:** Liste des étudiants inscrits dans un formsemestre + actuellement en cours. Avec `/long`, donne tous les attributs de + l'étudiants (plus lent). +* **Exemple de résultat:** [etudiants-courants.json](samples/sample_etudiants-courants.json.md) -#### **etudiant_formsemestres** - * **Méthode:** GET - * **Paramètres:** `etudid`, `nip`, `ine` - * **Routes:** : - * `/etudiant/etudid//formsemestres` ou - * `/etudiant/nip//formsemestres` ou - * `/etudiant/ine//formsemestres` - * **Exemple d'utilisation:** `/etudiant/ine/1/formsemestres` - * **Résultat:** Retourne la liste des semestres qu'un étudiant a suivis, triés par ordre chronologique. (json) - * **Exemple de résultat:** [etudiant-formsemestres.json](samples/sample_etudiant-formsemestres.json.md) - -### Bulletin - -#### **Bulletin d'un formsemestre d'un étudiant ** - - * **Méthode:** GET - * **Paramètres:** `formsemestre_id`, `etudid`, `nip`, `ine` - * **Routes:** - `/etudiant/etudid//formsemestre//bulletin[/format][/pdf]` - ou `/etudiant/nip//formsemestre//bulletin[/format][/pdf]` - ou `/etudiant/ine//formsemestre//bulletin[/format][/pdf]` - - On peut spécifier le format: `long`ou `short`, et indiquer si l'on veut le - bulletin PDF. - * **Exemple d'utilisation:** `/etudiant/nip/1/formsemestre/1/bulletin` - * **Résultat:** Bulletin de l'étudiant dans le formsemestre. - Deux versions disponibles `long` et `short` (par défaut `long` ajoutez - `/short` pour la version plus courte). - - * **Exemple de résultat:** [bulletin-formsemestre-etudiant.json](samples/sample_bulletin-formsemestre-etudiant.json.md) - - -#### **Groupes d'un formsemestre d'un étudiant** - - * **Méthode:** GET - * **Paramètres:** `formsemestre_id`, `etudid`, `nip`, `ine` - * **Routes:** `/etudiant/etudid//semestre//groups` ou `/etudiant/nip//semestre//groups` ou `/etudiant/ine//semestre//groups` - * **Exemple d'utilisation:** `/etudiant/nip/1/semestre/1/groups` - * **Résultat:** Retourne la liste des groupes auxquels appartient l'étudiant dans le semestre indiqué. (json) - * **Exemple de résultat:** [groupes-formsemestre-etudiant.json](samples/sample_groupes-formsemestre-etudiant.json.md) - -## Programmes de formations - -#### **`formation`** - - * **Méthode:** GET - * **Paramètres:** `formation_id` - * **Routes:** `/formation/` - * **Exemple d'utilisation:** `/ScoDoc/api/formation/1` - * **Résultat:** Retourne la formation d'id donné - * **Exemple de résultat:** - ``` +#### **departement-etudiants** +* **Méthode:** GET +* **Paramètres:** `dept`, `dept_id` +* **Routes:** + * `/departement/id//etudiants` + * `/departement//etudiants` +* **Exemple d'utilisation:** `/api/departement/MMI/etudiants` +* **Résultat:** liste tous les étudiants (passés ou présents) d'un département. + On peut spécifier l'acronyme du département ("MMI") ou son id (un entier). + Attention, la liste peut être longue: requête coûteuse à éviter. +* **Exemple de résultat:** + ```json + [ { - "id": 1, - "acronyme": "BUT R&T", - "titre_officiel": "Bachelor technologique réseaux et télécommunications", - "formation_code": "V1RET", - "code_specialite": null, - "dept_id": 1, - "titre": "BUT R&T", - "version": 1, - "type_parcours": 700, - "referentiel_competence_id": null, - "formation_id": 1 - } - ``` + "civilite": "M", // M, F ou X + "ine": "7899X61616", + "code_nip": "F6777H88", + "date_naissance": null, + "email": "toto@toto.fr", + "emailperso": null, + "etudid": 18, + "nom": "MOREL", // en majuscules + "prenom": "JACQUES" + }, + ... + ] + ``` -#### **`formations_ids`** - - * **Méthode:** GET - * **Routes:** `/formations_ids` - * **Exemple d'utilisation:** `/ScoDoc/api/formations_ids` - * **Résultat:** Retourne la liste des ids de toutes les formations (tous départements) - * **Exemple de résultat:** `[17, 99, 32]` - -#### **`formations`** - - * **Méthode:** GET - * **Routes:** `/formations` - * **Exemple d'utilisation:** `/ScoDoc/api/formations` - * **Résultat:** Retourne la liste de toutes les formations (tous - départements) - * **Exemple de résultat:** [formations.json](samples/sample_formations.json.md) -### Export programme - -#### **`formation export`** - - * **Méthode:** GET - * **Paramètres:** `formation_id`, `export_ids` (False par défaut. Ajouter `/with_ids` pour le passer à True) - * **Routes:** - * `/formation/export/` - * `/formation/export//with_ids` - * **Exemple d'utilisation:** `/ScoDoc/api/formation/formation_export/1` - * **Résultat:** Retourne la formation, avec UE, matières, modules - * **Exemple de résultat:** [formation-export.json](samples/sample_formation-referentiel_competences.json.md) - -#### **`referentiel_competences`** - - * **Méthode:** GET - * **Paramètres:** `formation_id` - * **Routes:** `/formation//referentiel_competences` - * **Exemple d'utilisation:** `api/formation/1/referentiel_competences` - * **Résultat:** Le référentiel de compétences d'une formation donnée (json). (_pas toujours présent_) - * **Exemple de résultat:** [formation-referentiel_competences.json](samples/sample_formation-referentiel_competences.json.md) - * -XXX obtenir la liste des référentiels ? - -## Formsemestres - -Les sessions de formation (qu'elles durent une année ou un mois) sont représentées par les `formsemestre`. - -#### **`formsemestre`** - - * **Méthode:** GET - * **Paramètres:** `formsemestre_id` - * **Routes:** `/formsemestre/` - * **Exemple d'utilisation:** `/ScoDoc/api/formsemestre/1` - * **Résultat:** Retourne l'information sur le formsemestre correspondant au formsemestre_id - * **Exemple de résultat:** - ``` - { - "annee_scolaire" : "2021 - 2022", - "block_moyennes": false, - "bul_bgcolor": "white", - "bul_hide_xml": false, - "date_debut_iso": "2021-09-01", - "date_debut": "01/09/2021", - "date_fin_iso": "2022-08-31", - "date_fin": "31/08/2022", - "dept_id": 1, - "elt_annee_apo": null, - "elt_sem_apo": null, - "ens_can_edit_eval": false, - "etat": true, - "formation_id": 1, - "formsemestre_id": 1, - "gestion_compensation": false, - "gestion_semestrielle": false, - "id": 1, - "modalite": "FI", - "resp_can_change_ens": true, - "resp_can_edit": false, - "responsables": [ - 12, - 42 - ], - "scodoc7_id": null, - "semestre_id": 1, - "titre_court": "BUT MMI", - "titre_num": "Semestre test semestre 1", - "titre": "Semestre test", - "session_id": "MMI-BUT-FI-S1-2021", - } - ``` - -#### **`formsemestre_apo`** - - * **Méthode:** GET - * **Paramètres:** `etape_apo` - * **Routes:** `/formsemestre/apo/` - * **Exemple d'utilisation:** `/ScoDoc/api/formsemestre/1` - * **Résultat:** Retourne les informations sur les formsemestres - * **Exemple de résultat:** - ``` - [ { formsemestre comme ci-dessus }, ... ] - ``` - -### Note sur les identifiants de formsemestre -Le `session_id` peut être utilisé pour identifier de façon prévisible et -(presque) unique un formsemestre) dans un établissement, ce qui est utile -notamment pour interfacer ScoDoc à d'autres logiciels (par exemple gestion -d'emplois du temps ou de services d'enseignement). Cet identifiant est constitué -des informations suivantes: - - * **Département** (RT, GEII, INFO...) (acronyme en majuscules) - * **Nom parcours:** BUT, LP, ... (défini au niveau du parcours dans ScoDoc = NAME) - * **Modalité:** FI, FC, FA - * **"Spécialité":** S1 (ou S1D pour les semestres décalés), ou le - `code_specialite` si pas de semestres. Le code spécialité est un champ - (libre) dans la "formation" (le programme pédagogique). - * **Année:** année de début de l'année scolaire correspondante (2014 pour - une session appartenant à l'année scolaire 2014-2015, même si elle - commence en mars 2015). - - -**Exemple:** `INFO-DUT-FI-S1-2014` équivaut à un semestre S1 d'un DUT informatique de 2014 en formation initiale (FI) - -### Étudiants inscrits et bulletins -#### **etudiants d'un formsemestre** - * **Méthode:** GET - * **Paramètres:** `formsemestre_id`, `etat` (par défaut égal à "I" pour les étudiants inscrits) - * **Routes:** `/formsemestre//etudiants` XXX voir si - filtrage par état (dem, def, ...) - * **Résultat:** les étudiants inscrits à ce semestres XXX préciser état - (DEM, DEF)) - -#### * **`bulletins d'un formsemestre`** - - * **Méthode:** GET - * **Paramètres:** `formsemestre_id` - * **Routes:** `/formsemestre//bulletins` - * **Exemple d'utilisation:** `/ScoDoc/api/formsemestre/1/bulletins` - * **Résultat:** tous les bulletins d'un formsemestre. - * **[Exemple de résultat](samples/sample_formsemestre-bulletins.json.md)** - -#### **etat_evals d'un formsemestre** - - * **Méthode:** GET - * **Paramètres:** `formsemestre_id` - * **Routes:** `/formsemestre//etat_evals` - * **Exemple d'utilisation:** `/ScoDoc/api/formsemestre/1/etat_evals` - * **Résultat:** Retourne les informations sur l'état des évaluations d'un semestre donné - * **Exemple de résultat:** [formsemestre-etat_evals.json](samples/sample_formsemestre-etat_evals.json.md) - -#### **`jury`** (**non implémentée**) - - * **Méthode:** GET - * **Paramètres:** `formsemestre_id` - * **Routes:** `/formsemestre//jury` - * **Exemple d'utilisation:** `/ScoDoc/api/formsemestre/1/jury` - * **Résultat:** Retourne le récapitulatif des décisions jury - * **Exemple de résultat:** - ``` - XXX A COMPLETER - ``` - -### Programme d'un formsemestre - -#### **UE et modules** - - * **Méthode:** GET - * **Paramètres:** `dept`, `formsemestre_id` - * **Routes:** `/formsemestre//programme` - * **Exemple d'utilisation:** `/ScoDoc/api/formsemestre/1/programme` - * **Résultat:** Retourne la liste des UEs, modules, ressources et SAE d'un semestre. - * **Exemple de résultat:** [formsemestre-programme.json](samples/sample_formsemestre-programme.json.md) - - -#### Module d'un formsemestre - -Le moduleimpl est la mise en place d'un module dans un formsemestre (avec son -responsable et ses enseignants). - -#### **`moduleimpl`** - - * **Méthode:** GET - * **Paramètres:** `moduleimpl_id` - * **Routes:** `/moduleimpl/` - * **Exemple d'utilisation:** `/ScoDoc/api/formation/moduleimpl/1` - * **Résultat:** Retourne la liste des moduleimpl - * **Exemple de résultat:** [moduleimpl.json](samples/sample_moduleimpl.json.md) - -### Groupes et partitions - -L'ensemble des étudiants d'un semestre peut être réparti selon une ou -plusieurs partitions (types de groupes). Chaque partition est constituée -d'un nombre quelconque de groupes d'étudiants. - -#### **`partitions`** - -* **Méthode: GET** +#### **formsemestre-etudiants** +* **Méthode:** GET * **Paramètres:** `formsemestre_id` -* **Routes:** `/formsemestre//partitions` -* **Exemple d'utilisation:** `/ScoDoc/api/formsemestre/911/partitions` -* **Résultat:** La liste de toutes les partitions d'un formsemestre. -* **Exemple de résultat:** [formsemestre-partitions.json](samples/sample_formsemestre-partitions.json.md) +* **Routes:** `/formsemestre//etudiants` XXX voir si + filtrage par état (dem, def, ...) +* **Route:** + * `/formsemestres/etudiants` + * `/formsemestres/etudiants/demissionnaires` + * `/formsemestres/etudiants/defaillants` +* **Exemple d'utilisation:** `/api/formsemestre/1/etudiants` +* **Résultat:** Etudiants d'un formsemestre spécifié par son id. Liste est restreinte aux étudiants démissionnaires/défaillants si l'option correspondante est ajoutée au chemin +* **Exemple de résultat:** [formsemestre-etudiants.json](samples/sample_formsemestre-etudiants.json.md) -#### **`partition`** - -* **Méthode: GET** -* **Paramètres:** `partition_id` -* **Routes:** `/partition/` -* **Exemple d'utilisation:** `/ScoDoc/api/partition/1963` -* **Résultat:** La description d'une partition (y compris la liste de ses groupes). -* **Exemple de résultat:** [partition.json](samples/sample_partition.json.md) - -#### **`partition-edit`** - -* **Méthode: POST** -* **Paramètres:** `partition_id` -* **Data:** `{ partition_name : }` -* **Routes:** `/partition//edit` -* **Exemple d'utilisation:** `/ScoDoc/api/partition/2047/edit` ->`{ "partition_name" : "PART4" }` -* **Résultat:** Renomme une partition -* **[Exemple de résultat](samples/sample_partition-edit.json.md)** - -#### **`partition-delete`** - -* **Méthode: POST** -* **Paramètres:** `partition_id` -* **Routes:** `/partition//delete` -* **Exemple d'utilisation:** `/ScoDoc/api/partition/2047/delete` -* **Résultat:** Supprime une partition. -* **[Exemple de résultat](samples/sample_partition-delete.json.md) - -#### **`formsemestre-partition-create`** - -* **Méthode: POST** -* **Paramètres:** `formsemestre_id` -* **Data:** `{ "partition_name" : }` -* **Routes:** `/formsemestre//partition/create` ->`{ "partition_name" : "PART" }` -* **Exemple d'utilisation:** `/ScoDoc/api/formsemestre/944/partition/create` -* **Résultat:** Crée une nouvelle partition dans un formsemestre. -* **[Exemple de résultat:](samples/sample_formsemestre-partition-create.json.md)** - -#### **`formsemestre-partition-order`** - -* **Méthode: POST** -* **Paramètres:** `formsemestre_id` -* **Data:** `[ , , ... ]` -* **Routes:** `/formsemestre//partition/order` -* **Exemple d'utilisation:** `/ScoDoc/api/formsemestre/944/partition/order` ->`[ 2048, 2054 ]` -* **Résultat:** Spécifie l'ordre des partitions d'un formsemestre. -* **[Exemple de résultat:](samples/sample_formsemestre-partition-order.json.md)** - -#### **`partition-groups-order`** - -* **Méthode: POST** -* **Paramètres:** `partition_id` -* **Data:** `[ , , ... ]` -* **Routes:** `/partition//groups/order` -* **Exemple d'utilisation:** `/ScoDoc/api/partition/1962/groups/order` ->`[ 4383, 4379, 4380, 4381, 4382, 4384 ]` -* **Résultat:** Spécifie l'ordre des groupes d'une partition. -* **[Exemple de résultat:](samples/sample_partition-groups-order.json.md)** +#### **formsemestre-etudiants-etat** +* **Méthode:** GET +* **Paramètres:** `formsemestre_id`, `etat` (par défaut égal à "I" pour les étudiants inscrits) +* **Résultat:** les étudiants inscrits à ce semestres XXX préciser état + (DEM, DEF)) #### **`group-etudiants`** - * **Méthode: GET** * **Paramètres:** `group_id` * **Routes:** `/group//etudiants` @@ -745,7 +640,6 @@ d'un nombre quelconque de groupes d'étudiants. * **Exemple de résultat:** [group-etudiants.json](samples/sample_group-etudiants.json.md) #### **`groups-etudiants-query`** - * **Méthode: GET** * **Paramètres:** `group_id` * **Query string:** `etat` ('I', 'D' ou 'DEF') @@ -754,115 +648,184 @@ d'un nombre quelconque de groupes d'étudiants. * **Résultat:** Retourne la liste des étudiants dans un groupe. * **Exemple de résultat:** [group-etudiants-query.json](samples/sample_group-etudiants-query.json.md) -#### **`groups-set_etudiant`** +#### **`etudiant`** +* **Méthode:** GET +* **Paramètres:** `etudid`, `nip`, `ine` +* **Routes:** + * `/etudiant/etudid/` ou + * `/etudiant/nip/` ou + * `/etudiant/ine/` +* **Exemple d'utilisation:** `/api/etudiant/nip/1` +* **Résultat:** Retourne les informations sur l'étudiant correspondant à + l'id passé en paramètres. + Les codes INE et NIP sont uniques au sein d'un département. + Si plusieurs objets étudiant ont le même code, on ramène le plus récemment inscrit. +* **Exemple de résultat:** [etudiant.json](samples/sample_etudiant.json.md) -* **Méthode: POST** -* **Permission: `ScoEtudChangeGroups`*** -* **Paramètres:** `group_id`, `etudid` -* **Routes:** `/group//set_etudiant/` -* **Exemple d'utilisation:** `/ScoDoc/api/group/4085/set_etudiant/12108` -* **Résultat:** Affecte un étudiant dans un groupe. -* **[Exemple de résultat](samples/sample_group-set_etudiant.json.md)** +### Programme, Référentiel -#### **`groups-remove_etudiant`** +#### **`formation-export`** +* **Méthode:** GET +* **Paramètres:** `formation_id`, `export_ids` (False par défaut. Ajouter `/with_ids` pour le passer à True) +* **Routes:** + * `/formation//export` + * `/formation//export_with_ids` +* **Exemple d'utilisation:** `/ScoDoc/api/formation/formation_export/1` +* **Résultat:** Retourne la formation, avec UE, matières, modules +* **Exemple de résultat:** [formation-export.json](samples/sample_formation-referentiel_competences.json.md) -* **Méthode: POST** -* **Permission: `ScoEtudChangeGroups`*** -* **Paramètres:** `group_id`, `etudid` -* **Routes:** `/group//remove_etudiant/` -* **Exemple d'utilisation:** `/ScoDoc/api/group/4085/remove_etudiant/12108` -* **Résultat:** Retire un étudiant d'un groupe. -* **[Exemple de résultat](samples/sample_group-remove_etudiant.json.md)** +#### **`formation-referentiel_competences`** +* **Méthode:** GET +* **Paramètres:** `formation_id` +* **Routes:** `/formation//referentiel_competences` +* **Exemple d'utilisation:** `api/formation/1/referentiel_competences` +* **Résultat:** Le référentiel de compétences d'une formation donnée (json). (_pas toujours présent_) +* **Exemple de résultat:** [formation-referentiel_competences.json](samples/sample_formation-referentiel_competences.json.md) +* +XXX obtenir la liste des référentiels ? -#### **`partition-group-create`** +### **Bulletin, Evaluations, Notes** +#### **formsemestre-bulletins** +* **Méthode:** GET +* **Paramètres:** `formsemestre_id` +* **Route:** `/formsemestre//bulletins +* **Exemple d'utilisation:** `/api/formsemestre/1/bulletins` +* **Résultat:** Bulletins d'un formsemestre spécifié par son id. +* **Exemple de résultat:** [formsemestre-bulletins.json](samples/sample_formsemestre-bulletins.json.md) -* **Méthode: POST** -* **Permission: `ScoEtudChangeGroups`*** -* **Paramètres:** `partition_id` -* **Data:** `{ group_name : }` -* **Routes:** `/partition//create` -* **Exemple d'utilisation:** `/ScoDoc/api/partition/1962/create` ->`{ "group_name" : "A" }` -* **Résultat:** Crée un groupe dans une partition. -* **[Exemple de résultat](samples/sample_formsemestre-partition-create.json.md)** +#### **etudiant-formsemestre-bulletin** +* **Méthode:** GET +* **Paramètres:** `formsemestre_id`, `etudid`, `nip`, `ine` +* **Routes:** + `/etudiant/etudid//formsemestre//bulletin[/format][/pdf]` + ou `/etudiant/nip//formsemestre//bulletin[/format][/pdf]` + ou `/etudiant/ine//formsemestre//bulletin[/format][/pdf]` -#### **`partition-group-delete`** +On peut spécifier le format: `long`ou `short`, et indiquer si l'on veut le +bulletin PDF. +* **Exemple d'utilisation:** `/etudiant/nip/1/formsemestre/1/bulletin` +* **Résultat:** Bulletin de l'étudiant dans le formsemestre. + Deux versions disponibles `long` et `short` (par défaut `long` ajoutez + `/short` pour la version plus courte). +* **Exemple de résultat:** [bulletin-formsemestre-etudiant.json](samples/sample_bulletin-formsemestre-etudiant.json.md) -* **Méthode: POST** -* **Permission: `ScoEtudChangeGroups`*** -* **Paramètres:** `group_id` -* **Routes:** `/group//delete` -* **Exemple d'utilisation:** `/ScoDoc/api/group/4581/delete` -* **Résultat:** Supprime un groupe. -* **[Exemple de résultat](samples/sample_group-delete.json.md)** +#### **formsemestre-programme** +* **Méthode:** GET +* **Paramètres:** `dept`, `formsemestre_id` +* **Routes:** `/formsemestre//programme` +* **Exemple d'utilisation:** `/ScoDoc/api/formsemestre/1/programme` +* **Résultat:** Retourne la liste des UEs, modules, ressources et SAE d'un semestre. +* **Exemple de résultat:** [formsemestre-programme.json](samples/sample_formsemestre-programme.json.md) -#### **`partition-remove_etudiant`** +#### **formsemestre-etat_evals** +* **Méthode:** GET +* **Paramètres:** `formsemestre_id` +* **Route:** `/formsemestre//etat_evals` +* **Exemple d'utilisation:** `/api/formsemestre/1/etat_evals` +* **Résultat:** informations sur les évaluations d'un formsemestre spécifié par son id. +* **Exemple de résultat:** [formsemestre-etat-eval.json](samples/sample_formsemestre-etat_evals.json.md) -* **Méthode: POST** -* **Permission: `ScoEtudChangeGroups`*** -* **Paramètres:** `partition_id` -* **Routes:** `/partition//remove_etudiant/` -* **Exemple d'utilisation:** `/ScoDoc/api/partition/1962/remove_etudiant/12107` -* **Résultat:** Reture un étudiant des groupes de la partition. -* **[Exemple de résultat](samples/sample_partition-remove_etudiant.json.md)** +#### **formsemestre-resultats** +* **Méthode:** GET +* **Paramètres:** `formsemestre_id` +* **Query string: `format` +* **Route:** `/formsemestres/resultats` +* **Exemple d'utilisation:** `/api/formsemestre/1/resultats` +* **Résultat:** [formsemestre-resultats.json](samples/sample_formsemestre-resultats.json.md) -#### **`group-edit`** +Récapitulatif par étudiant (état, groupe(s), moyennes d'UEs et de modules +pour un formsemestre spécifié par son id. +Par défaut les valeurs numériques sont formattées en chaînes. Si format=raw, valeurs numériques +mais pas JSON compliant à cause des _NaN_. -* **Méthode: POST** -* **Permission: `ScoEtudChangeGroups`*** -* **Paramètres:** `group_id` -* **Data:** `{ group_name : }` -* **Routes:** `/group//edit` -* **Exemple d'utilisation:** `/ScoDoc/api/group/4581/edit` ->`{ "group_name" : "nouveau" }` -* **Résultat:** Renomme un groupe. -* **[Exemple de résultat](samples/sample_group-edit.json.md)** +* **Exemple de résultat:** + +#### **`evaluations`** +* **Méthode:** GET +* **Paramètres:** `moduleimpl_id` +* **Routes:** `/moduleimpl//evaluations` +* **Exemple d'utilisation:** `/ScoDoc/api/moduleimpl/1/evaluations` +* **Résultat:** Retourne la liste des évaluations à partir de l'id d'un + moduleimpl (quel que soit leur statut). +* **[Exemple de résultat](samples/sample_moduleimpl-evaluations.json.md)** + +#### **`evaluations/notes`** +* **Méthode**: GET +* **Paramètres**: `evaluation_id` +* **Routes:** `/evaluations/eval_notes/` +* **Exemple d'utilisation:** `/ScoDoc/api/evaluations/notes/1` +* **Résultat:** Retourne la liste des notes d'une évaluation +* **Exemple de résultat:** + XXX à revoir (à spécifier/reprendre implémentation XXX was eval_notes) + +### **User** + +### Logos +#### **`logos`** +* **Méthode:** GET +* **Paramètres:** `format` (json, xml), json par défaut +* **Route :** `/ScoDoc/api/logos` +* **Exemple d'utilisation :** `/ScoDoc/api/logos?format=xml` +* **Résultat :** Liste des noms des logos définis pour le site scodoc. +* **Exemple de résultat:** `['header', 'footer', 'custom']` + +XXX vérifier si on supporte XML et pour qui ? + +#### **`logo`** +* **Méthode:** GET +* **Paramètres :** Aucun +* **Route:** `/logos/` +* **Exemple d'utilisation :** `/ScoDoc/api/logo/header` +* **Résultat :** l'image (format png ou jpg) + +#### **`departement-logos`** +* **Méthode:** GET +* **Paramètres:** `format` (json, xml) +* **Route :** `/departements//logos` +* **Exemple d'utilisation :** `/ScoDoc/api/departements/MMI/logos` +* **Résultat :** Liste des noms des logos définis pour le département visé. +* **Exemple de résultat:** `['footer', 'signature', 'universite']` + +#### **`departement-logo`** +* **Méthode:** GET +* **Paramètres :** Aucun +* **Route:** `/departements//logo/` +* **Exemple d'utilisation:** `/ScoDoc/api/departements/MMI/logos/header` +* **Résultat :** l'image (format png ou jpg) + +------------------------------------------------------------------------------------------------------------------------------------------------------- + +## **Réserve** +### Étudiants inscrits et bulletins +#### * **`formsemestre-bulletins`** + * **Méthode:** GET + * **Paramètres:** `formsemestre_id` + * **Routes:** `/formsemestre//bulletins` + * **Exemple d'utilisation:** `/ScoDoc/api/formsemestre/1/bulletins` + * **Résultat:** tous les bulletins d'un formsemestre. + * **[Exemple de résultat](samples/sample_formsemestre-bulletins.json.md)** + +#### **formsemestre-etat_evals** + * **Méthode:** GET + * **Paramètres:** `formsemestre_id` + * **Routes:** `/formsemestre//etat_evals` + * **Exemple d'utilisation:** `/ScoDoc/api/formsemestre/1/etat_evals` + * **Résultat:** Retourne les informations sur l'état des évaluations d'un semestre donné + * **Exemple de résultat:** [formsemestre-etat_evals.json](samples/sample_formsemestre-etat_evals.json.md) + +#### **`formsemestre-decision_jury`** + * **Méthode:** GET + * **Paramètres:** `formsemestre_id` + * **Routes:** `/formsemestre//decision_jury` + * **Exemple d'utilisation:** `/ScoDoc/api/formsemestre/1/jury` + * **Résultat:** Retourne le récapitulatif des décisions jury + * **Exemple de résultat:** + ``` + XXX A COMPLETER + ``` ### Évaluations -#### **`evaluations`** - - * **Méthode:** GET - * **Paramètres:** `moduleimpl_id` - * **Routes:** `/evaluations/` - * **Exemple d'utilisation:** `/ScoDoc/api/evaluations/1` - * **Résultat:** Retourne la liste des évaluations à partir de l'id d'un - moduleimpl (quel que soit leur statut). - * **Exemple de résultat:** - ``` - [ - { - "apresmidi": 0 - "coefficient": 1, - "description": "Compte-rendu de TP 2", - 'date_debut': '2022-05-13T11:30:00', - 'date_fin': '2022-05-13T12:30:00', - "evaluation_id": 1, - "evaluation_type": 0, - "id": 1, - "jour": "13/05/2022", - "matin": 1, - "moduleimpl_id": 1, - "note_max": 20, - "numero": 0, - "publish_incomplete": false, - "poids" : {1896: 0.0, 1897: 2.3, 1898: 4.2}, - "visibulletin": true, - } - ] - ``` - - -#### **`evaluations/notes`** - - * **Méthode**: GET - * **Paramètres**: `evaluation_id` - * **Routes:** `/evaluations/eval_notes/` - * **Exemple d'utilisation:** `/ScoDoc/api/evaluations/notes/1` - * **Résultat:** Retourne la liste des notes d'une évaluation - * **Exemple de résultat:** - XXX à revoir (à spécifier/reprendre implémentation XXX was eval_notes) - ### Absences **Remarques**, les dates sont au format iso `yyyy-mm-dd`. Les dates de fin ne sont pas incluses. Et `demi_journee`= 2 si journée complète, =1 si uniquement le matin, =0 si uniquement l'après-midi. @@ -960,45 +923,6 @@ d'un nombre quelconque de groupes d'étudiants. XXX A COMPLETER ``` -### Logos - -#### **`liste des logos globaux`** - - * **Méthode:** GET - * **Paramètres:** `format` (json, xml), json par défaut - * **Route :** `/ScoDoc/api/logos` - * **Exemple d'utilisation :** `/ScoDoc/api/logos?format=xml` - * **Résultat :** Liste des noms des logos définis pour le site scodoc. - * **Exemple de résultat:** `['header', 'footer', 'custom']` - - XXX vérifier si on supporte XML et pour qui ? - -#### **`récupération d'un logo global`** - * **Méthode:** GET - * **Paramètres :** Aucun - * **Route:** `/logos/` - * **Exemple d'utilisation :** `/ScoDoc/api/logos/header` - * **Résultat :** l'image (format png ou jpg) - - -#### **`logo d'un département`** - - * **Méthode:** GET - * **Paramètres:** `format` (json, xml) - * **Route :** `/departements//logos` - * **Exemple d'utilisation :** `/ScoDoc/api/departements/MMI/logos` - * **Résultat :** Liste des noms des logos définis pour le département visé. - * **Exemple de résultat:** `['footer', 'signature', 'universite']` - - -#### **`récupération d'un logo global`** - - * **Méthode:** GET - * **Paramètres :** Aucun - * **Route:** `/departements//logos/` - * **Exemple d'utilisation:** `/ScoDoc/api/departements/MMI/logos/header` - * **Résultat :** l'image (format png ou jpg) - ### En savoir plus Voir exemples d'utilisation de l'API en Python, dans `tests/api/`. diff --git a/docs/img/API_Chart.odg b/docs/img/API_Chart.odg index e330eea4b9e9fba99cefd5bbebc827ea4e206b9d..f2572f5dc0796d4f521906f24c12e83145b9da78 100644 GIT binary patch delta 24783 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 delta 25418 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 diff --git a/docs/img/API_Chart.svg b/docs/img/API_Chart.svg index 360514271..e88a257af 100644 --- a/docs/img/API_Chart.svg +++ b/docs/img/API_Chart.svg @@ -1,16401 +1,2779 @@ - - - - - + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - + + + + + + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + + + - - - - - - - - - - - <id:dept_id> - - - - - - - - departements - - - - - - - - departements_ids - - - - - - - - departement - - - - - - - - etudiants - - - - - - - - formsemestres_ids - - - - - - - - formsemestres_courants - - - - - - - - / - - - - - - - - <string : dept_acronym> - - - - - - - - id - - - - - - - - / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - etudiants - - - - - - - - departement - - - - - - - - etudiants - - - - - - - - formsemestres_ids - - - - - - - - formsemestres_courants - - - - - - - - / - - - - - - - - / - - - - - - - - <string:dept_acronym> - - - - - - - - id - - - - - - - - / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - courants - - - - - - - - long - - - - - - - - / - - - - - - - - / - - - - - - - - etudiant - - - - - - - - formsemestres - - - - - - - - formsemestre - - - - - - - - <int:formsemestre_id> - - - - - - - - etudid - - - - - - - - <int:etudid> - - - - - - - - / - - - - - - - - nip - - - - - - - - <string:nip> - - - - - - - - / - - - - - - - - ine - - - - - - - - <int:ine> - - - - - - - - / - - - - - - - - bulletin - - - - - - - - groups - - - - - - - - / - - - - - - - - / - - - - - - - - / - - - - - - - - / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - formations - - - - - - - - formation - - - - - - - - formations_ids - - - - - - - - / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <int:formation_id> - - - - - - - - moduleimpl - - - - - - - - / - - - - - - - - <int:moduleimpl_id> - - - - - - - - export - - - - - - - - / - - - - - - - - <int:formation_id> - - - - - - - - with_ids - - - - - - - - referentiel_competence - - - - - - - - logos - - - - - - - - / - - - - - - - - / - - - - - - - - - - - - - - - / - - - - - - - - / - - - - - - - - <string:logo_name> - - - - - - - - / - - - - - - - - ? - id408 - - - - - - - - ? - id409 - - - - - - - - ? - id410 - - - - - - - - ? - id411 - - - - - - - - ? - id412 - - - - - - - - formsemestres - - - - - - - - / - - - - - - - - query - - - - - - - - ? - - - - - - - - & - - - - - - - - etape_apo - - - - - - - - = - - - - - - - - <string:etape_apo> - - - - - - - - annee_scolaire - - - - - - - - = - - - - - - - - <int:annee> - - - - - - - - dept_acronym - - - - - - - - = - - - - - - - - <string:acronym> - - - - - - - - dept_id - - - - - - - - = - - - - - - - - <int:dept_id> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - formsemestre - - - - - - - - / - - - - - - - - <int:formsemestre_id> - - - - - - - - / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ? - - - - - - - - - - - - - - - bulletins - - - - - - - - jury - - - - - - - - programme - - - - - - - - etudiants - - - - - - - - / - - - - - - - - demissionnaires - - - - - - - - defaillants - - - - - - - - - - - - - - - - - - - - - - etat_evals - - - - - - - - partitions - - - - - - - - resultats - - - - - - - - ? - - - - - - - - format - - - - - - - - = - - - - - - - - raw - - - - - - - - - - - - - - - / - - - - - - - - create - - - - - - - - logos - - - - - - - - / - - - - - - - - <string:logo_name> - - - - - - - - user - - - - - - - - / - - - - - - - - <int:id> - - - - - - - - order - - - - - - - - - - - - - - - - - - - - - - group - - - - - - - - / - - - - - - - - <int:group_id> - - - - - - - - / - - - - - - - - etudiants - - - - - - - - query - - - - - - - - edit - - - - - - - - delete - - - - - - - - ? - - - - - - - - etat - - - - - - - - = - - - - - - - - <string:etat> - - - - - - - - set_etudiant - - - - - - - - / - - - - - - - - <int:etudiant_id> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - partition - - - - - - - - / - - - - - - - - <int:partition_id> - - - - - - - - / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - edit - - - - - - - - delete - - - - - - - - remove_etudiant - - - - - - - - / - - - - - - - - <int:etudiant_id> - - - - - - - - group - - - - - - - - / - - - - - - - - create - - - - - - - - - - - - - - - evaluations - - - - - - - - / - - - - - - - - <int:moduleimpl_id> - - - - - - - - eval_notes - - - - - - - - <int:evaluaton_id> - - - - - - - - - - - - - - - - - - - - - - jury - - - - - - - - / - - - - - - - - <int:formsemestre_id> - - - - - - - - formsemestre - - - - - - - - preparation_jury - - - - - - - - decisions_jury - - - - - - - - - - - - - - - - - - - - - - / - - - - - - - - / - - - - - - - - groups - - - - - - - - / - - - - - - - - order - - - - - - - - - - - - - - - absences - - - - - - - - etudid - - - - - - - - <int:etudid> - - - - - - - - / - - - - - - - - nip - - - - - - - - <string:nip> - - - - - - - - / - - - - - - - - ine - - - - - - - - <int:ine> - - - - - - - - / - - - - - - - - / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / - - - - - - - - - - - - - - - - - - - - - - just - - - - - - - - / - - - - - - - - - - - - - - - - - - - - - - abs_annule - - - - - - - - - - - - - - - / - - - - - - - - ? - - - - - - - - - - - - - - - etudid - - - - - - - - <int:etudid> - - - - - - - - / - - - - - - - - jour - - - - - - - - <string:jour> - - - - - - - - / - - - - - - - - matin - - - - - - - - <string:matin> - - - - - - - - / - - - - - - - - / - - - - - - - - & - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <int:etudid> - - - - - - - - - - - - - - - abs_annule_justif - - - - - - - - etudid - - - - - - - - <int:etudid> - - - - - - - - / - - - - - - - - jour - - - - - - - - <string:jour> - - - - - - - - / - - - - - - - - matin - - - - - - - - <string:matin> - - - - - - - - / - - - - - - - - / - - - - - - - - ? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - abs_group_etat - - - - - - - - <int:group_id> - - - - - - - - / - - - - - - - - - - - - - - - / - - - - - - - - date_debut - - - - - - - - / - - - - - - - - <date:date_debut> - - - - - - - - / - - - - - - - - date_fin - - - - - - - - / - - - - - - - - <date:date_fin> - - - - - - - - - - - - - - - - - - - - - - / - - - - - - - - ? - - - - - - - - - - - - - - - list_abs - - - - - - - - / - - - - - - - - / - - - - - - - - - - - - - - - / - - - - - - - - <int:etudid> - - - - - - - - <string:list_abs> - - - - - - - - / - - - - - - - - - - - - - - - reset_etud_abs - - - - - - - - only_not_just - - - - - - - - only_just - - - - - - - - / - - - - - - - - - - - - - - - - - - - - - - / - - - - - - - - ? - id413 - - - - - - - - ? - id414 - - - - - - - - ? - id415 - - - - - - - - ? - id416 - - - - - - - - ? - id417 - - - - - - - - ? - id418 - - - - - - - - ? - id419 - - - - - - - - ? - id420 - - - - - - - - ? - id421 - - - - - - - - ? - id422 - - - - - - - - ? - id423 - - - - - - - - ? - id424 - - - - - - - - ? - id425 - - - - - - - - ? - id426 - - - - - - - - ? - id427 - - - - - - - - ? - id428 - - - - - - - - ? - id429 - - - - - - - - ? - id430 - - - - - - - - ? - id431 - - - - - - - - ? - id432 - - - - - - - - ? - id433 - - - - - - - - ? - id434 - - - - - - - - ? - id435 - - - - - - - - ? - id436 - - - - - - - - ? - id437 - - - - - - - - ? - id438 - - - - - - - - ? - id439 - - - - - - - - ? - id440 - - - - - - - - ? - id441 - - - - - - - - ? - id442 - - - - - - - - ? - id443 - - - - - - - - ? - id444 - - - - - - - - ? - id445 - - - - - - - - ? - id446 - - - - - - - - ? - id447 - - - - - - - - ? - id448 - - - - - - - - ? - id449 - - - - - - - - ? - id450 - - - - - - - - ? - id451 - - - - - - - - ? - id452 - - - - - - - - ? - id453 - - - - - - - - ? - id454 - - - - - - - - ? - id455 - - - - - - - - ? - id456 - - - - - - - - ? - id457 - - - - - - - - ? - id458 - - - - - - - - ? - id459 - - - - - - - - ? - id460 - - - - - - - - ? - id461 - - - - - - - - ? - id462 - - - - - - - - ? - id463 - - - - - - - - ? - id464 - - - - - - - - ? - id465 - - - - - - - - ? - id466 - - - - - - - - ? - id467 - - - - - - - - ? - id468 - - - - - - - - ? - id469 - - - - - - - - ? - id470 - - - - - - - - ? - id471 - - - - - - - - ? - id472 - - - - - - - - ? - id473 - - - - - - - - ? - id474 - - - - - - - - ? - id475 - - - - - - - - ? - id476 - - - - - - - - ? - id477 - - - - - - - - ? - id478 - - - - - - - - ? - id479 - - - - - - - - ? - id480 - - - - - - - - ? - id481 - - - - - - - - ? - id482 - - - - - - - - ? - id483 - - - - - - - - etudid - - - - - - - - <int:etudid> - - - - - - - - / - - - - - - - - nip - - - - - - - - <string:nip> - - - - - - - - / - - - - - - - - ine - - - - - - - - <int:ine> - - - - - - - - / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ? - id484 - - - - - - - - ? - id485 - - - - - - - - ? - id486 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + <id:dept_id> + + + + + + + + departements + + + + + + + + departements_ids + + + + + + + + departement + + + + + + + + etudiants + + + + + + + + formsemestres_ids + + + + + + + + formsemestres_courants + + + + + + + + / + + + + + + + + <string : dept_acronym> + + + + + + + + id + + + + + + + + / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + etudiants + + + + + + + + departement + + + + + + + + etudiants + + + + + + + + formsemestres_ids + + + + + + + + formsemestres_courants + + + + + + + + / + + + + + + + + / + + + + + + + + <string:dept_acronym> + + + + + + + + id + + + + + + + + / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + courants + + + + + + + + long + + + + + + + + / + + + + + + + + / + + + + + + + + etudiant + + + + + + + + formsemestres + + + + + + + + formsemestre + + + + + + + + <int:formsemestre_id> + + + + + + + + etudid + + + + + + + + <int:etudid> + + + + + + + + / + + + + + + + + nip + + + + + + + + <string:nip> + + + + + + + + / + + + + + + + + ine + + + + + + + + <int:ine> + + + + + + + + / + + + + + + + + bulletin + + + + + + + + groups + + + + + + + + / + + + + + + + + / + + + + + + + + / + + + + + + + + / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + formations + + + + + + + + formation + + + + + + + + formations_ids + + + + + + + + / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <int:formation_id> + + + + + + + + moduleimpl + + + + + + + + / + + + + + + + + <int:moduleimpl_id> + + + + + + + + export + + + + + + + + / + + + + + + + + <int:formation_id> + + + + + + + + with_ids + + + + + + + + referentiel_competence + + + + + + + + logo + + + + + + + + / + + + + + + + + / + + + + + + + + + + + + + + + / + + + + + + + + / + + + + + + + + <string:logo_name> + + + + + + + + / + + + + + + + + ? + id344 + + + + + + + + ? + id345 + + + + + + + + formsemestres + + + + + + + + / + + + + + + + + query + + + + + + + + ? + + + + + + + + & + + + + + + + + etape_apo + + + + + + + + = + + + + + + + + <string:etape_apo> + + + + + + + + annee_scolaire + + + + + + + + = + + + + + + + + <int:annee> + + + + + + + + dept_acronym + + + + + + + + = + + + + + + + + <string:acronym> + + + + + + + + dept_id + + + + + + + + = + + + + + + + + <int:dept_id> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + formsemestre + + + + + + + + / + + + + + + + + <int:formsemestre_id> + + + + + + + + / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ? + + + + + + + + + + + + + + + bulletins + + + + + + + + jury + + + + + + + + programme + + + + + + + + etudiants + + + + + + + + / + + + + + + + + demissionnaires + + + + + + + + defaillants + + + + + + + + + + + + + + + + + + + + + + etat_evals + + + + + + + + partitions + + + + + + + + resultats + + + + + + + + ? + + + + + + + + format + + + + + + + + = + + + + + + + + raw + + + + + + + + + + + + + + + / + + + + + + + + create + + + + + + + + logos + + + + + + + + / + + + + + + + + <string:logo_name> + + + + + + + + user + + + + + + + + / + + + + + + + + <int:id> + + + + + + + + order + + + + + + + + + + + + + + + + + + + + + + group + + + + + + + + / + + + + + + + + <int:group_id> + + + + + + + + / + + + + + + + + etudiants + + + + + + + + query + + + + + + + + edit + + + + + + + + delete + + + + + + + + ? + + + + + + + + etat + + + + + + + + = + + + + + + + + <string:etat> + + + + + + + + set_etudiant + + + + + + + + / + + + + + + + + <int:etudiant_id> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + partition + + + + + + + + / + + + + + + + + <int:partition_id> + + + + + + + + / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + edit + + + + + + + + delete + + + + + + + + remove_etudiant + + + + + + + + / + + + + + + + + <int:etudiant_id> + + + + + + + + group + + + + + + + + / + + + + + + + + create + + + + + + + + + + + + + + + evaluations + + + + + + + + / + + + + + + + + <int:moduleimpl_id> + + + + + + + + eval_notes + + + + + + + + <int:evaluaton_id> + + + + + + + + + + + + + + + + + + + + + + jury + + + + + + + + / + + + + + + + + <int:formsemestre_id> + + + + + + + + formsemestre + + + + + + + + preparation_jury + + + + + + + + decisions_jury + + + + + + + + + + + + + + + + + + + + + + / + + + + + + + + / + + + + + + + + groups + + + + + + + + / + + + + + + + + order + + + + + + + + + + + + + + + absences + + + + + + + + etudid + + + + + + + + <int:etudid> + + + + + + + + / + + + + + + + + nip + + + + + + + + <string:nip> + + + + + + + + / + + + + + + + + ine + + + + + + + + <int:ine> + + + + + + + + / + + + + + + + + / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / + + + + + + + + + + + + + + + + + + + + + + just + + + + + + + + / + + + + + + + + + + + + + + + + + + + + + + abs_annule + + + + + + + + + + + + + + + / + + + + + + + + ? + + + + + + + + + + + + + + + etudid + + + + + + + + <int:etudid> + + + + + + + + / + + + + + + + + jour + + + + + + + + <string:jour> + + + + + + + + / + + + + + + + + matin + + + + + + + + <string:matin> + + + + + + + + / + + + + + + + + / + + + + + + + + & + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <int:etudid> + + + + + + + + + + + + + + + abs_annule_justif + + + + + + + + etudid + + + + + + + + <int:etudid> + + + + + + + + / + + + + + + + + jour + + + + + + + + <string:jour> + + + + + + + + / + + + + + + + + matin + + + + + + + + <string:matin> + + + + + + + + / + + + + + + + + / + + + + + + + + ? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + abs_group_etat + + + + + + + + <int:group_id> + + + + + + + + / + + + + + + + + + + + + + + + / + + + + + + + + date_debut + + + + + + + + / + + + + + + + + <date:date_debut> + + + + + + + + / + + + + + + + + date_fin + + + + + + + + / + + + + + + + + <date:date_fin> + + + + + + + + + + + + + + + + + + + + + + / + + + + + + + + ? + + + + + + + + + + + + + + + list_abs + + + + + + + + / + + + + + + + + / + + + + + + + + + + + + + + + / + + + + + + + + <int:etudid> + + + + + + + + <string:list_abs> + + + + + + + + / + + + + + + + + + + + + + + + reset_etud_abs + + + + + + + + only_not_just + + + + + + + + only_just + + + + + + + + / + + + + + + + + + + + + + + + + + + + + + + / + + + + + + + + ? + id346 + + + + + + + + ? + id347 + + + + + + + + ? + id348 + + + + + + + + ? + id349 + + + + + + + + ? + id350 + + + + + + + + ? + id351 + + + + + + + + ? + id352 + + + + + + + + etudid + + + + + + + + <int:etudid> + + + + + + + + / + + + + + + + + nip + + + + + + + + <string:nip> + + + + + + + + / + + + + + + + + ine + + + + + + + + <int:ine> + + + + + + + + / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + logos + + + + + + + + / + + + + + + + + / + + + + + + + + + + + + + + + ? + id353 + + + + + + + + ? + id354 @@ -16403,4 +2781,4 @@ - + \ No newline at end of file diff --git a/docs/samples/sample_departement.json.md b/docs/samples/sample_departement.json.md new file mode 100644 index 000000000..288076759 --- /dev/null +++ b/docs/samples/sample_departement.json.md @@ -0,0 +1,14 @@ +### departements + +`/api/departement/1` + + +```json +{ + "id": 1, + "acronym": "BIO", + "description": "migré de ScoDoc7", + "visible": true, + "date_creation": "2021-11-04T15:38:09.397095+01:00" +} +``` diff --git a/docs/samples/sample_departements.json.md b/docs/samples/sample_departements.json.md new file mode 100644 index 000000000..b48831ffa --- /dev/null +++ b/docs/samples/sample_departements.json.md @@ -0,0 +1,17 @@ +### departements + +`/api/departements` + + +```json +[ + { + "id": 1, + "acronym": "BIO", + "description": "migré de ScoDoc7", + "visible": true, + "date_creation": "2021-11-04T15:38:09.397095+01:00" + }, + ... +] +``` diff --git a/docs/samples/sample_formation.json.md b/docs/samples/sample_formation.json.md new file mode 100644 index 000000000..c679453e5 --- /dev/null +++ b/docs/samples/sample_formation.json.md @@ -0,0 +1,20 @@ +### formations + +/api/formations + +```json +{ + "id": 1, + "acronyme": "BUT R&T", + "titre_officiel": "Bachelor technologique réseaux et télécommunications", + "formation_code": "V1RET", + "code_specialite": null, + "dept_id": 1, + "titre": "BUT R&T", + "version": 1, + "type_parcours": 700, + "referentiel_competence_id": null, + "formation_id": 1 +} + +``` diff --git a/mkdocs.yml b/mkdocs.yml index 2ac6ed6ff..f48f85870 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -71,3 +71,8 @@ markdown_extensions: - name: mermaid class: mermaid format: !!python/name:pymdownx.superfences.fence_code_format + +plugins: + - search + - inline-svg + \ No newline at end of file