diff --git a/docs/ApiGenerationBulletinsPdf.md b/docs/ApiGenerationBulletinsPdf.md
index ef29c1a2..e8988bbb 100644
--- a/docs/ApiGenerationBulletinsPdf.md
+++ b/docs/ApiGenerationBulletinsPdf.md
@@ -1,22 +1,26 @@
-# Générer des bulletins en Python
+# Génération des bulletins en Python
-Il est possible de coder de nouveaux styles de bulletins de notes (web et/ou
-PDF), pour répondre précisément aux besoins de votre établissement.
+Informations internes à destination des développeurs.
-Ce n'est pas très difficile, mais il faudra coder en langage Python avec pour le
-PDF la bibliothèque ReportLab (qui est bien documentée, [voir le
-guide](http://www.reportlab.com/software/opensource/rl-toolkit/guide/)).
+## Types de bulletins
-ScoDoc demande la création d'un bulletin pour un étudiant donné dans semestre
-donné (`formsemestre_id`). Le bulletin doit être rendu sous forme d'une liste
-d'objets PLATYPUS (voir le chapitre 5 du "User Guide" de ReportLab cité plus
-haut).
+- Formations classiques
+ - HTML, court, intermédiaire, long
+ - XML (deprecated)
+ - JSON
+ - PDF
+- Formations BUT
+ - JSON (utilisé par la version HTML)
+ - XML (partiel, deprecated)
+ - PDF
+ - "but court" HTML
+ - "but court" PDF
- Attention (août 2011): nouvelle version, changement d'API: les
-informations ci-dessous s'appliquent à partir de la subversion 1047.
+## Balises décisions de jury pour chaque type
-## Organisation
+
+
+## Organisation
A minima, il vous faut créer un module python (fichier .py) qui se définira une
classe chargée de générer vos bulletins.
@@ -138,33 +142,33 @@ nom de l'université.
### Informations sur l'étudiant
-#### Identité
+#### Identité
-Type | Nom | Description | Exemple de valeur
+Type | Nom | Description | Exemple de valeur
----| --- | ---- | ---
- | string * | etudid | id ScoDoc de l'étudiant | 'EID15219' |
- string | code_ine | | *
- string | code_nip | | *
- string | codepostaldomicile | | '75018'
- | date_naissance | | *
- | annee_naissance | | '1947'
- | domicile | | *
- | email | | *
- | lieu_naissance | | *
- | nationalite | | *
- | ne | "e" si étudiante, vide sinon | *
- | nom | | 'FOURIER'
- | prenom | | 'JOSEPH'
- | sexe | | 'M.'
- | nomprenom | | 'M. Joseph Fourier'
- | paysdomicile | | *
- | telephone | | *
- | telephonemobile | | *
- | telephonemobilestr | | *
- | telephonestr | | *
- | typeadresse | | 'domicile'
- | villedomicile | | *
- | villelycee | |
+ | string * | etudid | id ScoDoc de l'étudiant | 'EID15219' |
+ string | code_ine | | *
+ string | code_nip | | *
+ string | codepostaldomicile | | '75018'
+ | date_naissance | | *
+ | annee_naissance | | '1947'
+ | domicile | | *
+ | email | | *
+ | lieu_naissance | | *
+ | nationalite | | *
+ | ne | "e" si étudiante, vide sinon | *
+ | nom | | 'FOURIER'
+ | prenom | | 'JOSEPH'
+ | sexe | | 'M.'
+ | nomprenom | | 'M. Joseph Fourier'
+ | paysdomicile | | *
+ | telephone | | *
+ | telephonemobile | | *
+ | telephonemobilestr | | *
+ | telephonestr | | *
+ | typeadresse | | 'domicile'
+ | villedomicile | | *
+ | villelycee | |
#### Admission
@@ -172,37 +176,36 @@ Informations importées dans ScoDoc lors de la création de l'étudiant
(import des données d'admission): établissement d'origine, notes de
lycée, etc.)
-Type | Nom | Description | Exemple de valeur
+Type | Nom | Description | Exemple de valeur
----| --- | ---- | ---
- | bac | Série de bac | 'S'
- | specialite | Spécialité de bac | 'SVT'
- | math | note math antérieure (en terminale ou au bac ou ...) | *
- | physique | note physique antérieure | *
- | francais | note francais (au bac en général) | *
- | anglais | note anglais antérieure | *
- | annee_bac | année d'obtention du bac | '2010'
- | nomlycee | | *
- | codelycee | | *
- | codepostallycee | | *
- | qualite | note de qualité du dossier attribuée par le jury d'admission | *
- | rang | rang de cet établissement dans les voeux du candidat (si applicable) | *
- | rap | | "Pas d'informations sur les conditions d'admission."
- | rapporteur | pseudo du collègue chargé de l'examen de ce dossier | *
- | score | Score calculé pour ce dossier à l'admission | *
- | commentaire | Commentaire du jury d'admission| *
- | decision | Décision du jury d'admission | 'ADMIS'
- | description | Comment l'étudiant a été inscrit | '(creation individuelle)'
-
+ | bac | Série de bac | 'S'
+ | specialite | Spécialité de bac | 'SVT'
+ | math | note math antérieure (en terminale ou au bac ou ...) | *
+ | physique | note physique antérieure | *
+ | francais | note francais (au bac en général) | *
+ | anglais | note anglais antérieure | *
+ | annee_bac | année d'obtention du bac | '2010'
+ | nomlycee | | *
+ | codelycee | | *
+ | codepostallycee | | *
+ | qualite | note de qualité du dossier attribuée par le jury d'admission | *
+ | rang | rang de cet établissement dans les voeux du candidat (si applicable) | *
+ | rap | | "Pas d'informations sur les conditions d'admission."
+ | rapporteur | pseudo du collègue chargé de l'examen de ce dossier | *
+ | score | Score calculé pour ce dossier à l'admission | *
+ | commentaire | Commentaire du jury d'admission| *
+ | decision | Décision du jury d'admission | 'ADMIS'
+ | description | Comment l'étudiant a été inscrit | '(creation individuelle)'
#### Inscription
- Type | Nom | Description | Exemple de valeur
+ Type | Nom | Description | Exemple de valeur
----| --- | ---- | ---
int | annee | | 2011
- string | etatincursem | état (I=inscrit, D=démissionnaire) | 'I'
- string | inscription | | 'DUT GEII, semestre 1 FI (Mars 2011 - Jul 2011)'
- string | situation | | 'inscrit en DUT GEII, semestre 1 FI (Mars 2011 - Jul 2011) le 11/09/2011'
- string | statut | ? | *
+ string | etatincursem | état (I=inscrit, D=démissionnaire) | 'I'
+ string | inscription | | 'DUT GEII, semestre 1 FI (Mars 2011 - Jul 2011)'
+ string | situation | | 'inscrit en DUT GEII, semestre 1 FI (Mars 2011 - Jul 2011) le 11/09/2011'
+ string | statut | ? | *
| descr_inscription | | 'Inscrit le 27/06/2011.'
En outre, les attributs `sems`, `cursem` et `ins` apportent des informations
@@ -220,142 +223,143 @@ Type | Nom | Description | Exemple de valeur
string | refcomp_specialite | code spécialité | "RT"
string | refcomp_specialite_long| spécialité | "Réseaux et Télécommunications"
-### Résultats (notes) de l'étudiant dans le semestre
+### Résultats (notes) de l'étudiant dans le semestre
+
Quelques infos sur les résultats. Le détail des notes est dans la
liste `infos['ues']` et ses sous-listes imbriquées (modules, evaluation).
- Type | Nom | Description | Exemple de valeur
+ Type | Nom | Description | Exemple de valeur
----| --- | ---- | ---
- string | moy_gen | moyenne générale de l'étudiant dans le semestre | '12.00'
- string | bonus_sport_culture | bonus appliqué | 0
- string | moy_max | moyenne max promo | '12.00'
- string | moy_min | moyenne min promo | '10.00'
- string | moy_moy | moyenne des moyennes promo | '11.00'
- int | nb_inscrits | nombre étudiants du semestre (incluant démissionnaires et défaillants) | 78
- int | nb_demissions | nombre de démissions dans le semestre | 3
- int | nb_defaillants | nombre de défaillants dans le semestre | 2
- int | nbabs | nombre de 1/2 journées d'absences | 0L
- int | nbabsjust | idem, justifiées | 0L
- string | rang | classement | '(attente)'
- string | rang_txt | classement (avec titre) | 'Rang (attente) / 2'
- list | ues | résultats dans les UE, voir ci-dessous | [ liste de dict ]
+ string | moy_gen | moyenne générale de l'étudiant dans le semestre | '12.00'
+ string | bonus_sport_culture | bonus appliqué | 0
+ string | moy_max | moyenne max promo | '12.00'
+ string | moy_min | moyenne min promo | '10.00'
+ string | moy_moy | moyenne des moyennes promo | '11.00'
+ int | nb_inscrits | nombre étudiants du semestre (incluant démissionnaires et défaillants) | 78
+ int | nb_demissions | nombre de démissions dans le semestre | 3
+ int | nb_defaillants | nombre de défaillants dans le semestre | 2
+ int | nbabs | nombre de 1/2 journées d'absences | 0L
+ int | nbabsjust | idem, justifiées | 0L
+ string | rang | classement | '(attente)'
+ string | rang_txt | classement (avec titre) | 'Rang (attente) / 2'
+ list | ues | résultats dans les UE, voir ci-dessous | [ liste de dict ]
Chaque élément de la liste `ues` représente les résultats de
l'étudiant dans une UE.
- Type | Nom | Description | Exemple de valeur
+ Type | Nom | Description | Exemple de valeur
----| --- | ---- | ---
- string | acronyme | | 'UE 1'
- string | coef_ue_txt | Coefficient (chaîne) | '2'
- string| cur_moy_ue_txt | Moyenne prise en compte pour cette UE | '12.00'
- float | max | moyenne max promo | 12.0
- float | min | moyenne min promo | 10.0
- list | modules | détails notes dans les modules de l'UE | [ liste de dict]
- list | modules_capitalized | | []
- float | moy | | 11.0
- string | moy_ue_txt | moyenne étudiant dans UE | '12.00'
- int | nb_moy | nombre de moyenens calculées dans cette UE (inscrits, sans démissionnaires ni défaillants) | 76
- int | numero | rang tri UE | 1
- string | titre | | 'Formation Générale'
- int | type | code type UE | 0
- string | ue_code | code dans programme formation | 'UCOD5'
- string | ue_descr_html | rang ou autre info à afficher | '(attente)/2'
- string | ue_descr_txt | rang ou autre info à afficher | '(attente)/2'
- string | ue_id | id interne ScoDoc | 'UE14572'
- dict | ue_status | statut de l'UE (voir ci-dessous)| { dict }
+ string | acronyme | | 'UE 1'
+ string | coef_ue_txt | Coefficient (chaîne) | '2'
+ string| cur_moy_ue_txt | Moyenne prise en compte pour cette UE | '12.00'
+ float | max | moyenne max promo | 12.0
+ float | min | moyenne min promo | 10.0
+ list | modules | détails notes dans les modules de l'UE | [ liste de dict]
+ list | modules_capitalized | | []
+ float | moy | | 11.0
+ string | moy_ue_txt | moyenne étudiant dans UE | '12.00'
+ int | nb_moy | nombre de moyenens calculées dans cette UE (inscrits, sans démissionnaires ni défaillants) | 76
+ int | numero | rang tri UE | 1
+ string | titre | | 'Formation Générale'
+ int | type | code type UE | 0
+ string | ue_code | code dans programme formation | 'UCOD5'
+ string | ue_descr_html | rang ou autre info à afficher | '(attente)/2'
+ string | ue_descr_txt | rang ou autre info à afficher | '(attente)/2'
+ string | ue_id | id interne ScoDoc | 'UE14572'
+ dict | ue_status | statut de l'UE (voir ci-dessous)| { dict }
**Statut d'une UE (champ `ue_status`):**
- Type | Nom | Description | Exemple de valeur
+ Type | Nom | Description | Exemple de valeur
----| --- | ---- | ---
- float | coef_ue | | 2.0
- | coefs_bonus_gen | | []
- | cur_coef_ue | | 2.0
- | cur_moy_ue | | 12.0
- string | expr_diag | infos erreur calcul formule utilisateur | {}
- bool | is_capitalized | est-elle capitalisée? | False
- | moy | | 12.0
- | nb_missing | | 1
- | nb_notes | | 1
- | notes_bonus_gen | | []
- | sum_coefs | | 2.0
- | was_capitalized | | False
+ float | coef_ue | | 2.0
+ | coefs_bonus_gen | | []
+ | cur_coef_ue | | 2.0
+ | cur_moy_ue | | 12.0
+ string | expr_diag | infos erreur calcul formule utilisateur | {}
+ bool | is_capitalized | est-elle capitalisée? | False
+ | moy | | 12.0
+ | nb_missing | | 1
+ | nb_notes | | 1
+ | notes_bonus_gen | | []
+ | sum_coefs | | 2.0
+ | was_capitalized | | False
**Résultats dans un module:**
- Type | Nom | Description | Exemple de valeur
+ Type | Nom | Description | Exemple de valeur
----| --- | ---- | ---
- | code | | *
- | code_html | | *
- | code_txt | | *
- | computation_expr | | *
- | ens | | []
- | evaluations | | []
- | formsemestre_id | | 'SEM15176'
- | mat | | {'titre': 'Mathématiques' }
- | mod_coef_txt | | '2'
- | mod_descr_txt | | "Module Fondamentaux d'algèbre et de trigonométrie, coef. 2 (Béatrice DUPONT)"
- | mod_eff | | 2
- | mod_moy_txt | | '12.00'
- | mod_rang | | '(attente)'
- | mod_rang_txt | | '(attente)/2'
- | module | | {voir plus loin}
- | module_id | | 'MOD14576'
- | moduleimpl_id | | 'MIP15178'
- | name | | 'Algèbre'
- | responsable_id | id du responsable | 'dupont'
- | stats | statistiques sur les notes du module | `{'moy': 9.576, 'nb_missing': 2, 'max': 16.5, 'min': 0.0, 'nb_notes': 39, 'nb_valid_evals': 1}`
+ | code | | *
+ | code_html | | *
+ | code_txt | | *
+ | computation_expr | | *
+ | ens | | []
+ | evaluations | | []
+ | formsemestre_id | | 'SEM15176'
+ | mat | | {'titre': 'Mathématiques' }
+ | mod_coef_txt | | '2'
+ | mod_descr_txt | | "Module Fondamentaux d'algèbre et de trigonométrie, coef. 2 (Béatrice DUPONT)"
+ | mod_eff | | 2
+ | mod_moy_txt | | '12.00'
+ | mod_rang | | '(attente)'
+ | mod_rang_txt | | '(attente)/2'
+ | module | | {voir plus loin}
+ | module_id | | 'MOD14576'
+ | moduleimpl_id | | 'MIP15178'
+ | name | | 'Algèbre'
+ | responsable_id | id du responsable | 'dupont'
+ | stats | statistiques sur les notes du module | `{'moy': 9.576, 'nb_missing': 2, 'max': 16.5, 'min': 0.0, 'nb_notes': 39, 'nb_valid_evals': 1}`
Le module (tel que décrit dans le programme de la formation) est représenté par:
-
- Type | Nom | Description | Exemple de valeur
+
+ Type | Nom | Description | Exemple de valeur
----| --- | ---- | ---
- string | titre | | "Fondamentaux d'algèbre et de trigonométrie"
- string | abbrev | | 'Algèbre'
- string | code | | 'M1'
- float | coefficient | | 2.0
- | ects | | None
- | formation_id | | 'FORM14570'
- | heures_cours | | 0.0
- | heures_td | | 30.0
- | heures_tp | | 0.0
- | matiere_id | | 'MAT14574'
- | module_id | | 'MOD14576'
- | numero | | 10
- | semestre_id | | 1
- | ue_id | | 'UE14572'
+ string | titre | | "Fondamentaux d'algèbre et de trigonométrie"
+ string | abbrev | | 'Algèbre'
+ string | code | | 'M1'
+ float | coefficient | | 2.0
+ | ects | | None
+ | formation_id | | 'FORM14570'
+ | heures_cours | | 0.0
+ | heures_td | | 30.0
+ | heures_tp | | 0.0
+ | matiere_id | | 'MAT14574'
+ | module_id | | 'MOD14576'
+ | numero | | 10
+ | semestre_id | | 1
+ | ue_id | | 'UE14572'
**Résultat dans une évaluation:**
- Type | Nom | Description | Exemple de valeur
+ Type | Nom | Description | Exemple de valeur
----| --- | ---- | ---
- | coef_txt | | '1'
- | coefficient | | 1.0
- | descrheure | | ' ? 08h00'
- | description | | *
- | duree | | '2h'
- | etat | | { voir plus loin }
- | evaluation_id | | 'EVAL15226'
- | evaluation_type | | 0
- | heure_debut | | '08h00'
- | heure_fin | | '08h00'
- | jour | | '01/07/2011'
- | moduleimpl_id | | 'MIP15178'
- | name | | 'le 01/07/2011'
- | nb_abs | | 0
- | nb_att | | 0
- | nb_inscrits | | 2
- | nb_neutre | | 0
- | nb_notes | | 2
- | note_html | | '12.00'
- | note_max | | 20.0
- | note_txt | | '12.00'
- | notes | | { voir plus loin }
- | publish_incomplete | | '0'
- | visibulletin | | '1'
+ | coef_txt | | '1'
+ | coefficient | | 1.0
+ | descrheure | | ' ? 08h00'
+ | description | | *
+ | duree | | '2h'
+ | etat | | { voir plus loin }
+ | evaluation_id | | 'EVAL15226'
+ | evaluation_type | | 0
+ | heure_debut | | '08h00'
+ | heure_fin | | '08h00'
+ | jour | | '01/07/2011'
+ | moduleimpl_id | | 'MIP15178'
+ | name | | 'le 01/07/2011'
+ | nb_abs | | 0
+ | nb_att | | 0
+ | nb_inscrits | | 2
+ | nb_neutre | | 0
+ | nb_notes | | 2
+ | note_html | | '12.00'
+ | note_max | | 20.0
+ | note_txt | | '12.00'
+ | notes | | { voir plus loin }
+ | publish_incomplete | | '0'
+ | visibulletin | | '1'
**Etat d'une évaluation:**
@@ -366,59 +370,59 @@ Le champ `etat` d'une évaluation est un dict donnant des informations sur les r
bool | evalattente | | False
bool | evalcomplete | | True
| evaluation_id | id interne | 15226
- list | gr_incomplets | | []
- list | gr_moyennes | | []
- list | groups | liste des groupes | {}
- datetime | last_modif | | datetime
- string | median | note médianne promo | '11.00'
- string | moy | note moyenne promo | '11.00'
- | nb_abs | nb étudiants absents | 0
- | nb_att | nb notes en attente | 0
- | nb_inscrits | nb inscrits à ce module | 2
- | nb_neutre | nb notes neutralisées | 0
- | nb_notes | nb notes saisies | 2
+ list | gr_incomplets | | []
+ list | gr_moyennes | | []
+ list | groups | liste des groupes | {}
+ datetime | last_modif | | datetime
+ string | median | note médianne promo | '11.00'
+ string | moy | note moyenne promo | '11.00'
+ | nb_abs | nb étudiants absents | 0
+ | nb_att | nb notes en attente | 0
+ | nb_inscrits | nb inscrits à ce module | 2
+ | nb_neutre | nb notes neutralisées | 0
+ | nb_notes | nb notes saisies | 2
`gr_moyennes` est un dict:
- Type | Nom | Description | Exemple de valeur
+ Type | Nom | Description | Exemple de valeur
----| --- | ---- | ---
- | gr_median | | '11.00'
- | gr_moy | | '11.00'
- | gr_nb_att | | 0
- | gr_nb_notes | | 2
- | group_id | | 'G24919'
- | group_name | | None
+ | gr_median | | '11.00'
+ | gr_moy | | '11.00'
+ | gr_nb_att | | 0
+ | gr_nb_notes | | 2
+ | group_id | | 'G24919'
+ | group_name | | None
**Notes dans une évaluation:**
Le champ `notes` dans une évaluation est un dictionnaire dont les clés sont les `etudids`, et les valeurs des dictionnaires donnant les informations sur la note de l'étudiant dans cette évaluation:
-
- Type | Nom | Description | Exemple de valeur
+
+ Type | Nom | Description | Exemple de valeur
----| --- | ---- | ---
- string | comment | commentaire saisie note | *
- datetime | date | date de saisie |
- string | etudid | | 'EID15214'
- string | evaluation_id | | 'EVAL15226'
- string | uid | utilisateur ayant saisi la note | 'admin'
- float | value | valeur de la note (sur 20) | 10.0
+ string | comment | commentaire saisie note | *
+ datetime | date | date de saisie |
+ string | etudid | | 'EID15214'
+ string | evaluation_id | | 'EVAL15226'
+ string | uid | utilisateur ayant saisi la note | 'admin'
+ float | value | valeur de la note (sur 20) | 10.0
-### Décisions de jury et autres informations
-
- Type | Nom | Description | Exemple de valeur
+### Décisions de jury et autres informations
+
+ Type | Nom | Description | Exemple de valeur
----| --- | ---- | ---
- | decision_sem | | None ou dict
- string | decision_jury | décision du jury en clair (présent seulement si décision saisie) | 'Validé'
- list | appreciations | | []
- list | appreciations_list | | []
- list | appreciations_txt | | []
- string | mention | texte de la mention calculée | 'Très bien'
- | filigranne | texte en surimpression | 'Provisoire'
+ | decision_sem | | None ou dict
+ string | decision_jury | décision du jury en clair (présent seulement si décision saisie) | 'Validé'
+ list | appreciations | | []
+ list | appreciations_list | | []
+ list | appreciations_txt | | []
+ string | mention | texte de la mention calculée | 'Très bien'
+ | filigranne | texte en surimpression | 'Provisoire'
-## Note: la fonction log
+## Note: la fonction log
Pour la mise au point, il peut être utile de recourir à la bonne vieille
fonction log, qui envoie du texte dans le fichier de log courant, normalement