Compare commits

..

175 Commits

Author SHA1 Message Date
989930e4ce Merge branch 'new_api' of https://scodoc.org/git/leonard.montalbano/ScoDoc into new_api 2022-07-07 14:48:19 +02:00
1fd296179d fix des conflits 2022-07-07 14:47:06 +02:00
7c340c798a version 2022-07-07 12:09:55 +02:00
d1250555b9 Merge branch 'master' of https://scodoc.org/git/viennet/ScoDoc 2022-07-07 12:01:16 +02:00
89a64d92d3 Merge pull request 'Correction bug : "Faire figurer les décisions sur les bulletins"' (#436) from lehmann/ScoDoc-Front:master into master
Reviewed-on: https://scodoc.org/git/ScoDoc/ScoDoc/pulls/436
2022-07-06 23:28:20 +02:00
f9b4a582f5 Correction bug : "Faire figurer les décisions sur les bulletins" 2022-07-06 21:17:39 +02:00
97b5ab8179 Page saisie jury: affiche version classique ou BUT 2022-07-06 00:19:02 +02:00
c9aa55979b Misc fixes. Suppr. validations BUT. 2022-07-06 00:05:14 +02:00
83ddd2bf03 Bul. DUT/ classic JSON: champ 'publie' 2022-07-05 20:40:21 +02:00
312faf74fb Fix: publication bulletin 2022-07-05 20:37:38 +02:00
180c21ffc4 Merge pull request 'Décisions RCUE relevé' (#429) from lehmann/ScoDoc-Front:master into master
Reviewed-on: https://scodoc.org/git/ScoDoc/ScoDoc/pulls/429
2022-07-05 19:55:52 +02:00
428cc61527 Décisions RCUE relevé 2022-07-05 15:46:17 +02:00
aa97a10bf8 Ajout d'informations sur l'arrêté BUT 2022-07-05 11:41:58 +02:00
512b38665f Jury BUT: traitement des DEF et DEM. Close #426 2022-07-04 23:50:55 +02:00
fa358c2da4 Fix: import users vide 2022-07-04 17:23:51 +02:00
b6052bf75f merge 2022-07-04 17:16:54 +02:00
0ad0521a6e Merge pull request 'Edit coef : correction flottants + somme ne prend plus en compte les bonus' (#427) from lehmann/ScoDoc-Front:master into master
Reviewed-on: https://scodoc.org/git/ScoDoc/ScoDoc/pulls/427
2022-07-04 17:13:49 +02:00
9bf05dd9cd Edit coef : correction flotants + somme ne prend plus en compte les bonus 2022-07-04 16:42:10 +02:00
3e62d9b425 Edit coef : correction nombres flotant & somme sans bonus 2022-07-04 16:38:26 +02:00
7e642317d3 cosmetic 2022-07-03 22:45:56 +02:00
d65a30a9e9 Tableaux recap: sauvegarde état. Close #414 2022-07-03 16:14:03 +02:00
c1f7bcdb92 Clé tri étudiants: laisse espaces internes 2022-07-03 11:30:07 +02:00
962015563a Fix: bug calcul année but 2022-07-03 08:38:12 +02:00
835234779f annotations 2022-07-03 08:31:01 +02:00
0bf636814d Merge branch 'master' of https://scodoc.org/git/viennet/ScoDoc 2022-07-02 11:17:15 +02:00
c5c7e9135b quelques annotations 2022-07-02 11:17:04 +02:00
fc7d844e53 Merge pull request 'fix logoname with dot problem' (#424) from jmplace/ScoDoc-Lille:fix_logoname_with_dot into master
Reviewed-on: https://scodoc.org/git/ScoDoc/ScoDoc/pulls/424
2022-07-02 10:57:55 +02:00
Jean-Marie PLACE
bc11f97354 fix logoname with dot problem 2022-07-02 10:53:56 +02:00
720e891f23 Optimisation apo_semset_maq_status 2022-07-02 00:00:29 +02:00
d23649d725 Améliore PV jury BUT: col. UEs, largeurs en excel, divers. 2022-07-01 22:29:31 +02:00
dbf562b701 Export table tcue: close #421 2022-07-01 16:34:36 +02:00
5a8add1aac Fix: calcul malus sur données vides 2022-07-01 09:48:08 +02:00
bf8614a386 Tri PV jury BUT 2022-07-01 00:15:55 +02:00
e8e27dd964 PV jury annuel BUT 2022-06-30 23:49:39 +02:00
372a6e6ed6 Pas de décision de sem. affichée en BUT: ficheEtud et bul. json 2022-06-30 20:43:09 +02:00
8310d20a77 doc 2022-06-30 20:20:36 +02:00
266d5c1472 BUT : ajout code ATJ sur année, UEs, RCUEs 2022-06-30 20:13:30 +02:00
36cef70c46 Fusion + suppr. symlink 2022-06-30 19:54:50 +02:00
ecba9ecc8d Merge pull request 'Relevé : code + explications - décision année jury' (#420) from lehmann/ScoDoc-Front:master into master
Reviewed-on: https://scodoc.org/git/ScoDoc/ScoDoc/pulls/420
2022-06-30 19:52:59 +02:00
e3bfbf1e40 Relevé : code + explications - décision année jury 2022-06-30 17:43:23 +02:00
969e0d4a97 Merge pull request '0 à la place de - si 0 ECTS' (#419) from lehmann/ScoDoc-Front:master into master
Reviewed-on: https://scodoc.org/git/ScoDoc/ScoDoc/pulls/419
2022-06-30 17:37:01 +02:00
92bd46d1d5 0 à la place de - si 0 ECTS 2022-06-30 16:54:06 +02:00
9c81715139 Bul. BUT JSON: decisions jury selon option "Faire figurer les décisions sur les bulletins" 2022-06-30 15:43:48 +02:00
b9694b21b9 Fix: code RED. Close #416 2022-06-30 15:32:22 +02:00
33b5621af7 Fix: calcul du malus BUT par UE. Close #417 2022-06-30 15:25:58 +02:00
c0c78074b2 Fix: calcul du malus BUT par UE. Close #417 2022-06-30 15:11:30 +02:00
9f46849729 Fix: API formsemestre 2022-06-30 13:34:40 +02:00
7645247357 Jury BUT: garde fou si mix classic/BUT... 2022-06-30 09:37:41 +02:00
e9c5914a9f Fix: bulletins Qlio mails 2022-06-30 09:31:05 +02:00
0330544a0b Fix:archives (again...) 2022-06-30 09:27:46 +02:00
0fe89b0501 Fix: fiche etud BUT 2022-06-30 08:59:19 +02:00
a476854fac 9.3.8 2022-06-29 23:16:20 +02:00
f08c741734 Fix: archivage PV (encoding) 2022-06-29 23:03:53 +02:00
d227264283 Liens navigation sur saise jury BUT 2022-06-29 22:53:56 +02:00
e1cdc232f8 9.3.6 2022-06-29 21:17:40 +02:00
63f024152a Oups: fichier oublié 2022-06-29 21:16:49 +02:00
01f3766082 css tableau résultats jury BUT 2022-06-29 19:54:22 +02:00
2e8b529801 css tableau résultats jury BUT 2022-06-29 19:38:39 +02:00
fd21172398 Export décisions jury BUT dans bulletins JSON 2022-06-29 19:25:08 +02:00
16b3221daa Refactoring / année BUT sur fiche étudiant (montage provoisoire) 2022-06-29 18:16:37 +02:00
b0e78b67ea WIP: amelioration form jury BUT 2022-06-29 16:30:01 +02:00
581131f54f Affichage code jury sem. sur table recap classic en mode jury. Close #409 2022-06-29 14:42:52 +02:00
dbb1264863 Fix: AP formsemestre avec parcours 2022-06-29 13:56:36 +02:00
081ad0d5e9 Fix: suppression anciennes UE avec formules 2022-06-29 13:41:22 +02:00
72144a4952 Minor bugs (edit_ue) 2022-06-29 09:08:31 +02:00
a02437323b Jury BUT: cas ou une UE sans niveau a été ajoutée au programme 2022-06-28 11:18:12 +02:00
a204e67efc Bonus La Roche-sur-Yon 2022-06-27 22:22:38 +02:00
860f5b9ad5 Modif exception _formsemestre_enrich 2022-06-27 22:12:57 +02:00
6ffa4b8d7a Fix: contrainte SQL unicite réf. comp. 2022-06-27 20:25:58 +02:00
4e02928c04 Fix: bug suppression d'un groupe 2022-06-27 19:49:29 +02:00
e8c8815b24 Jury BUT: cosmetic tableau jury (v2) 2022-06-27 19:47:41 +02:00
aa138133dc Fix: archivage PV: bug encoding 2022-06-27 19:20:26 +02:00
fa3ea025ed Jury BUT: cosmetic tableau jury 2022-06-27 18:53:44 +02:00
0c05c4f31d Jury BUT: fix pour cas GB avec NaN + présentation btableau multi-parcours 2022-06-27 18:41:54 +02:00
9f42244612 Fix: création auto de bonus si matières sans numéros 2022-06-27 09:32:26 +02:00
8dd3f6396d Facilie l'ajout de modules de malus sur les UE BUT 2022-06-26 22:45:53 +02:00
4ae831c3ac Fix: typo => bug jury 2022-06-26 21:17:56 +02:00
e3d2e30449 Ajout répertoire pour liens 2022-06-26 18:00:00 +02:00
6b1d4d1afd Modifie URL vers ressources statiques selon la version. Close #404 2022-06-26 17:55:05 +02:00
f7463cbbb0 Jury BUT: pas de saisie pour les DEM 2022-06-26 17:02:18 +02:00
a00296250f Fix: ne compte pas les UE bonus dans le tabelau recap 2022-06-26 16:37:08 +02:00
b2098c833a Jury BUT: Avertissement si plusieurs parcours mais étduiant non assigné 2022-06-26 16:08:28 +02:00
4087fd6096 Codes jury: enregistrement transcodage BUT, tableau documentation 2022-06-26 15:43:46 +02:00
3d5361ce50 Fix: calcul evaluations en attente / démissionnaires 2022-06-26 14:30:21 +02:00
69ceb8affc Fix: calcul evaluations en attente / démissionnaires 2022-06-26 14:29:57 +02:00
40e21f6f0d Corrige documentation codes jury BUT 2022-06-26 10:06:38 +02:00
8863c6efa1 Jury BUT: codes annuels identiques pour les non admis, non passage de droit 2022-06-26 09:59:43 +02:00
8fd696ff7e Jury BUT: code par défaut RED si 1 RCUE < 8 2022-06-26 09:52:50 +02:00
4f7827f8c2 Jurys BUT: améliore message erreur si pas RCUE 2022-06-26 09:37:50 +02:00
21460df51a Fix: edition UE / ref. comp. 2022-06-25 23:42:39 +02:00
060b7ad7cd Fix: Bulletin BUT: calcul des UE de chaque etud 2022-06-25 23:22:20 +02:00
29c2fb25e8 Fix: message erreur jury BUT si pas de ref. de comp. associé 2022-06-25 22:54:46 +02:00
c36a20c8b3 9.3.0 | avec page décision jury provisoire 2022-06-25 17:18:05 +02:00
1d3ccb565a Fix: enregistrement code jury BUT 2022-06-25 17:00:00 +02:00
01d28eac90 Table recap / jury: mémorise ordre de tri 2022-06-25 16:23:39 +02:00
b5138d3dfe Suppression décisions de jury BUT 2022-06-25 14:18:34 +02:00
cc4fd76187 Tableau recap. codes jury BUT 2022-06-25 12:32:00 +02:00
d776bdca66 Fix: affichage coef bonus. Closes #382 2022-06-25 08:22:08 +02:00
ca5fd33e4e Fix: pd PDF si prefs. vides 2022-06-25 07:41:37 +02:00
f9b50bb290 Jury BUT: génération des autorisations d'inscription 2022-06-25 03:52:28 +02:00
d364d30176 Jury BUT: calcul auto des décisions 2022-06-25 02:59:43 +02:00
be3d692202 Table jury BUT: affichage optionnel des codes enregistrés 2022-06-24 16:57:44 +02:00
5335e5cfae version history 2022-06-24 15:24:51 +02:00
7b1aec46e1 Fix: enregistrement codes décisions BUT + moyennes UEs 2022-06-24 15:24:33 +02:00
441200dd5b Jury BUT: documentation des codes 2022-06-24 13:40:05 +02:00
8a83e41698 BUT: pondération des UE dans les RCUEs 2022-06-24 12:39:54 +02:00
00f66be1c5 Table jury BUT: pas de colonnes rangs et admissions 2022-06-24 12:00:08 +02:00
dcee2a441f Tableau jury BUT: col. RCUEs avec tri sur moy. gen. S_pair 2022-06-24 08:59:09 +02:00
145f69aee2 Jury BUT: navigation liste/saisie 2022-06-24 07:28:27 +02:00
d1c55a317a Merge branch 'master' of https://scodoc.org/git/viennet/ScoDoc into dev93 2022-06-24 06:17:53 +02:00
27271e5c96 Cosmetic / n'affiche pas ECTS pour UE bonus 2022-06-24 04:16:31 +02:00
3e5ae5d961 Fix "Da Nang": invalidation caches poids evals sur modifs UEs 2022-06-24 03:34:52 +02:00
f546837821 Modif config log: moins verbeux, evite requetes ordinaires 2022-06-24 03:32:48 +02:00
6f842dc877 Fix: bug "rennes" sur les formsemestres sans formation associée 2022-06-23 17:53:27 +02:00
995fe1981b Pas de niveau de compétence pour les UE bonus 2022-06-23 15:33:01 +02:00
a41f92d550 ue_edit: interdit association de 2 UE du meme sem. auy même niveau de comp. 2022-06-23 15:04:08 +02:00
99c22bdb83 Fix: chargement ref. MT2E 2022-06-23 14:16:53 +02:00
bb68b85b61 Fix: ues_impair_sans_rcue 2022-06-23 13:51:56 +02:00
9c80c36425 Fix: set_ue_niveau_competence 2022-06-23 13:48:43 +02:00
137e04be04 raccordement migrations (insertion "calais") 2022-06-23 11:28:20 +02:00
58551c7c4f Merge branch 'master' of https://scodoc.org/git/viennet/ScoDoc into dev93 2022-06-23 11:13:55 +02:00
5dc20aece0 Fix pour base de IUT Calais 2022-06-23 11:10:41 +02:00
f1d8b6dedf Jurys BUT: corrige tri étudiants, ajout des groupes 2022-06-23 10:13:18 +02:00
baccf122fe Fix: clé de tri des étudiants (caractères spéciaux) 2022-06-23 09:37:35 +02:00
cfef65fc68 ue_edit: alert() lors de l'enregisttement du niveau de compétence 2022-06-23 09:06:17 +02:00
e87e8723d6 Fix: titre col RCUE 2022-06-23 09:00:52 +02:00
4ec1b9c906 WIP: jury but: table annuelle 2022-06-23 08:40:33 +02:00
cdef38b62b WIP: jury BUT: début table recap (inachevée) 2022-06-23 06:33:03 +02:00
0939feb9fc WIP: jurys BUT: force jury annuel (en attendant page dédiée pour semestres isolés) 2022-06-22 14:09:08 +02:00
c17e2bae47 WIP: jury BUT: enregistrement des décisions 2022-06-22 11:44:03 +02:00
d4a8b74c0a WIP: jury BUT: formulaire avec style (merci @sebL) 2022-06-21 18:33:43 +02:00
c1e279ed5c WIP: jury BUT: esquisse page saisie 2022-06-21 11:21:41 +02:00
a37a2c08e2 WIP: jury BUT: validations annee, RCUE, UE 2022-06-21 11:21:17 +02:00
cd2de51bcc Merge branch 'master' of https://scodoc.org/git/viennet/ScoDoc into dev93 2022-06-21 05:26:30 +02:00
30b4a28b7f Bonus Orléans (contrib. F. Masson) 2022-06-20 18:12:00 +02:00
4272fd0444 Merge branch 'iziram-master' 2022-06-20 18:03:49 +02:00
a709e9d6e9 WIP: jurys BUT: décisions possibles sur année 2022-06-20 17:56:27 +02:00
Matthias Hartmann
cf99d3c618 Fix Issue 364 : vérif group_name déjà existant 2022-06-17 20:42:45 +02:00
Matthias Hartmann
d3226a32f4 Revert "Fix Issue 364 : vérif group_name déjà existant"
This reverts commit 1a4461cfb0.
2022-06-17 20:36:02 +02:00
Matthias Hartmann
1a4461cfb0 Fix Issue 364 : vérif group_name déjà existant 2022-06-17 20:10:09 +02:00
a3cccac2d2 Liste saisies de notes: formattage des valeurs 2022-06-09 14:01:47 +02:00
9cc7a80fb0 Merge branch 'master' of https://scodoc.org/git/viennet/ScoDoc into dev93 2022-06-09 07:40:10 +02:00
483de3ed0b WIP: jurys BUT 2022-06-09 07:39:58 +02:00
109e00b6eb Codes décisions jury pour BUT 2022-06-05 13:01:29 +02:00
5f9a916135 Merge branch 'master' of https://scodoc.org/git/viennet/ScoDoc into dev93 2022-06-02 11:54:26 +02:00
2b2fb80403 Bulletin BUT: n'affiche que les UE du parcours de l'étudiant. 2022-06-02 10:48:28 +02:00
ad5bdd03d1 BUT: moyenne gen. considérant les UE du parcours de chaque étudiant 2022-06-02 03:14:13 +02:00
41b8b675f0 Merge branch 'master' of https://scodoc.org/git/viennet/ScoDoc into dev93 2022-06-02 00:18:29 +02:00
2ca53511db Merge branch 'master' of https://scodoc.org/git/viennet/ScoDoc into dev93 2022-06-01 06:09:21 +02:00
a9924a3884 typo 2022-05-30 17:23:45 +02:00
8cd6fb8320 Merge branch 'master' of https://scodoc.org/git/viennet/ScoDoc into dev93 2022-05-30 12:51:48 +02:00
b25ba0bc39 WIP: BUT validations/parcours. 2022-05-29 17:34:03 +02:00
6596bd778c Amélioration édition module 2022-05-29 17:31:29 +02:00
45449f0465 BUT: Partition de parcours et inscriptions 2022-05-28 11:38:22 +02:00
5af4b5bed6 WIP: Partitions non editables (pour groupes de parcours) 2022-05-26 23:45:57 +02:00
3c9cc3121f Cascades sur Identite. Inscription aux parcours BUT. 2022-05-26 03:55:03 +02:00
06be6d0ac5 Methode .modimpls_parcours listant les modimpls d'un parcours 2022-05-22 07:03:20 +02:00
6030d12aca Ajout colonne parcours sur table description semestre 2022-05-22 07:02:01 +02:00
40f0bca74d Création d'une partition avec groupes de parcours 2022-05-22 05:01:25 +02:00
fd8116a772 Parcours BUT / Ref. Compétences
+ association UE -> ApcNiveau
    + choix sur la page ue_edit
 + association Module <-> ensemble de ApcParcours
    + choix sur la page module_edit
 + association Module - ApcAppCritique
    ~ choix sur la page module_edit
    TODO: revoir pour présenter les AC du semestre et parcours sélectionnés (JS)

 + association FormSemestre <-> ApcParcours
    + choix sur la page formsemestre_editwithmodules
2022-05-22 03:26:39 +02:00
539041fd0d Merge branch 'master' of https://scodoc.org/git/viennet/ScoDoc into dev93 2022-05-21 07:41:09 +02:00
f7e908c92d repr 2022-05-21 07:27:00 +02:00
91544aa254 Merge branch 'master' of https://scodoc.org/git/viennet/ScoDoc into dev93 2022-05-09 20:43:15 +02:00
c0edf3b1cf Merge branch 'master' of https://scodoc.org/git/viennet/ScoDoc into dev93 2022-05-06 09:39:19 +02:00
fc0413303f Merge branch 'master' of https://scodoc.org/git/viennet/ScoDoc into dev93 2022-05-06 07:33:37 +02:00
96248ccfd3 BUT: assoc. modules <-> App. Critiques 2022-05-02 14:39:06 +02:00
f537cd2e48 Code cleaning 2022-05-02 11:13:56 +02:00
c11fccab02 Edition tag sur modules 2022-05-02 10:54:52 +02:00
72dc72d286 WIP: BUT association modules <-> parcours 2022-05-01 23:58:41 +02:00
5d7085b858 Fix @permission_required to avoid double call 2022-04-30 06:10:45 +02:00
1a18fef3e0 BUT: association UE <-> niveau competence 2022-04-29 08:17:04 +02:00
0709b53bbe Merge branch 'master' of https://scodoc.org/git/viennet/ScoDoc into dev93 2022-04-28 16:09:22 +02:00
cbfc0ef641 db: merge migrations 2022-04-28 05:28:24 +02:00
7b12552121 Merge branch 'master' of https://scodoc.org/git/viennet/ScoDoc into dev93 2022-04-28 01:22:28 +02:00
e465acdd73 Add index on news 2022-04-26 12:57:41 +02:00
12 changed files with 160 additions and 82 deletions

View File

@ -473,7 +473,7 @@ def etudiant_bulletin_semestre( # XXX TODO Ajouter la possibilité de retourner
return response
return sco_bulletins.get_formsemestre_bulletin_etud_json(
formsemestre, etud, version
formsemestre, etud, version=version
)

View File

@ -650,7 +650,7 @@ class ResultatsSemestre(ResultatsCache):
elif nb_ues_validables < len(ues_sans_bonus):
row["_ues_validables_class"] += " moy_inf"
row["_ues_validables_order"] = nb_ues_validables # pour tri
if mode_jury:
if mode_jury and self.validations:
dec_sem = self.validations.decisions_jury.get(etudid)
jury_code_sem = dec_sem["code"] if dec_sem else ""
idx = add_cell(

View File

@ -451,6 +451,7 @@ class ApcAppCritique(db.Model, XMLModel):
if competence is not None:
query = query.filter(ApcNiveau.competence == competence)
return query
<<<<<<< HEAD
def __init__(self, id, niveau_id, code, libelle, modules):
self.id = id
@ -458,6 +459,8 @@ class ApcAppCritique(db.Model, XMLModel):
self.code = code
self.libelle = libelle
self.modules = modules
=======
>>>>>>> 7c340c798ad59c41653efc83bfd079f11fce1938
def to_dict(self) -> dict:
return {"libelle": self.libelle}
@ -544,11 +547,14 @@ class ApcAnneeParcours(db.Model, XMLModel):
)
ordre = db.Column(db.Integer)
"numéro de l'année: 1, 2, 3"
<<<<<<< HEAD
def __init__(self, id, parcours_id, ordre):
self.id = id
self.parcours_id = parcours_id
self.ordre = ordre
=======
>>>>>>> 7c340c798ad59c41653efc83bfd079f11fce1938
def __repr__(self):
return f"<{self.__class__.__name__} ordre={self.ordre!r} parcours={self.parcours.code!r}>"

View File

@ -43,6 +43,7 @@ class ApcValidationRCUE(db.Model):
formsemestre_id = db.Column(
db.Integer, db.ForeignKey("notes_formsemestre.id"), index=True, nullable=True
)
"formsemestre pair du RCUE"
# Les deux UE associées à ce niveau:
ue1_id = db.Column(db.Integer, db.ForeignKey("notes_ue.id"), nullable=False)
ue2_id = db.Column(db.Integer, db.ForeignKey("notes_ue.id"), nullable=False)

View File

@ -58,7 +58,6 @@ from app.scodoc import sco_formations
from app.scodoc import sco_formsemestre
from app.scodoc import sco_groups
from app.scodoc import sco_permissions_check
from app.scodoc import sco_photos
from app.scodoc import sco_preferences
from app.scodoc import sco_pvjury
from app.scodoc import sco_users
@ -66,15 +65,6 @@ import app.scodoc.sco_utils as scu
from app.scodoc.sco_utils import ModuleType, fmt_note
import app.scodoc.notesdb as ndb
# ----- CLASSES DE BULLETINS DE NOTES
from app.scodoc import sco_bulletins_standard
from app.scodoc import sco_bulletins_legacy
# import sco_bulletins_example # format exemple (à désactiver en production)
# ... ajouter ici vos modules ...
from app.scodoc import sco_bulletins_ucac # format expérimental UCAC Cameroun
def get_formsemestre_bulletin_etud_json(
formsemestre: FormSemestre,

View File

@ -92,7 +92,6 @@ def formsemestre_bulletinetud_published_dict(
nt: NotesTableCompat = res_sem.load_formsemestre_results(formsemestre)
d = {"type": "classic", "version": "0"}
if (not sem["bul_hide_xml"]) or force_publishing:
published = True
else:
@ -134,6 +133,7 @@ def formsemestre_bulletinetud_published_dict(
)
d["etudiant"]["sexe"] = d["etudiant"]["civilite"] # backward compat for our clients
# Disponible pour publication ?
d["publie"] = published
if not published:
return d # stop !
@ -364,8 +364,35 @@ def formsemestre_bulletinetud_published_dict(
return d
def dict_decision_jury(etudid, formsemestre_id, with_decisions=False):
"dict avec decision pour bulletins json"
def dict_decision_jury(etudid, formsemestre_id, with_decisions=False) -> dict:
"""dict avec decision pour bulletins json
- decision : décision semestre
- decision_ue : list des décisions UE
- situation
with_decision donne les décision même si bul_show_decision est faux.
Exemple:
{
'autorisation_inscription': [{'semestre_id': 4}],
'decision': {'code': 'ADM',
'compense_formsemestre_id': None,
'date': '2022-01-21',
'etat': 'I'},
'decision_ue': [
{
'acronyme': 'UE31',
'code': 'ADM',
'ects': 16.0,
'numero': 23,
'titre': 'Approfondissement métiers',
'ue_id': 1787
},
...
],
'situation': 'Inscrit le 25/06/2021. Décision jury: Validé. UE acquises: '
'UE31, UE32. Diplôme obtenu.'}
"""
from app.scodoc import sco_bulletins
d = {}

View File

@ -35,13 +35,17 @@ from app.models.etudiants import Identite
import app.scodoc.notesdb as ndb
import app.scodoc.sco_utils as scu
from app import log
from app import db, log
from app.comp import res_sem
from app.comp.res_compat import NotesTableCompat
from app.models import FormSemestre
from app.models.notes import etud_has_notes_attente
from app.models.validations import (
ScolarAutorisationInscription,
ScolarFormSemestreValidation,
)
from app.models.but_validations import ApcValidationRCUE, ApcValidationAnnee
from app.scodoc.sco_exceptions import ScoValueError
from app.scodoc.scolog import logdb
from app.scodoc.sco_codes_parcours import *
@ -989,28 +993,32 @@ def do_formsemestre_validation_auto(formsemestre_id):
def formsemestre_validation_suppress_etud(formsemestre_id, etudid):
"""Suppression des decisions de jury pour un etudiant."""
log("formsemestre_validation_suppress_etud( %s, %s)" % (formsemestre_id, etudid))
cnx = ndb.GetDBConnexion()
cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor)
args = {"formsemestre_id": formsemestre_id, "etudid": etudid}
try:
# -- Validation du semestre et des UEs
cursor.execute(
"""delete from scolar_formsemestre_validation
where etudid = %(etudid)s and formsemestre_id=%(formsemestre_id)s""",
args,
)
# -- Autorisations d'inscription
cursor.execute(
"""delete from scolar_autorisation_inscription
where etudid = %(etudid)s and origin_formsemestre_id=%(formsemestre_id)s""",
args,
)
cnx.commit()
except:
cnx.rollback()
raise
"""Suppression des décisions de jury pour un étudiant/formsemestre.
Efface toutes les décisions enregistrées concernant ce formsemestre et cet étudiant:
code semestre, UEs, autorisations d'inscription
"""
log(f"formsemestre_validation_suppress_etud( {formsemestre_id}, {etudid})")
# Validations jury classiques (semestres, UEs, autorisations)
for v in ScolarFormSemestreValidation.query.filter_by(
etudid=etudid, formsemestre_id=formsemestre_id
):
db.session.delete(v)
for v in ScolarAutorisationInscription.query.filter_by(
etudid=etudid, origin_formsemestre_id=formsemestre_id
):
db.session.delete(v)
# Validations jury spécifiques BUT
for v in ApcValidationRCUE.query.filter_by(
etudid=etudid, formsemestre_id=formsemestre_id
):
db.session.delete(v)
for v in ApcValidationAnnee.query.filter_by(
etudid=etudid, formsemestre_id=formsemestre_id
):
db.session.delete(v)
db.session.commit()
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
_invalidate_etud_formation_caches(

View File

@ -224,9 +224,26 @@ class releveBUT extends HTMLElement {
<div class=abs>Non justifiées</div>
<div>${data.semestre.absences?.injustifie ?? "-"}</div>
<div class=abs>Total</div><div>${data.semestre.absences?.total ?? "-"}</div>
</div>
<a class=photo href="${data.etudiant.fiche_url}"><img src="${data.etudiant.photo_url || "default_Student.svg"}" alt="photo de l'étudiant" title="fiche de l'étudiant" height="120" border="0"></a>
`;
</div>`;
if(data.semestre.decision_rcue?.length){
output += `
<div>
<div class=enteteSemestre>RCUE</div><div></div>
${(()=>{
let output = "";
data.semestre.decision_rcue.forEach(competence=>{
output += `<div class=rang>${competence.niveau.competence.titre}</div><div>${competence.code}</div>`;
})
return output;
})()}
</div>
</div>`
}
output += `
<a class=photo href="${data.etudiant.fiche_url}">
<img src="${data.etudiant.photo_url || "default_Student.svg"}" alt="photo de l'étudiant" title="fiche de l'étudiant" height="120" border="0">
</a>`;
/*${data.semestre.groupes.map(groupe => {
return `
<div>
@ -240,9 +257,11 @@ class releveBUT extends HTMLElement {
}).join("")
}*/
this.shadow.querySelector(".infoSemestre").innerHTML = output;
if(data.semestre.decision_annee?.code){
/*if(data.semestre.decision_annee?.code){
this.shadow.querySelector(".decision_annee").innerHTML = "Décision année : " + data.semestre.decision_annee.code + " - " + correspondanceCodes[data.semestre.decision_annee.code];
}
}*/
this.shadow.querySelector(".decision").innerHTML = data.semestre.situation || "";
/*if (data.semestre.decision?.code) {

View File

@ -258,7 +258,7 @@
<li><a href="https://www.enseignementsup-recherche.gouv.fr/fr/bo/21/Special4/ESRS2114777A.htm">Bulletin
officiel spécial n°4 du 17 juin 2021</a></li>
<li><a
href="https://cache.media.enseignementsup-recherche.gouv.fr//file/SPE4-MESRI-17-6-2021/19/4/SP4_ESR_17_6_2021_1413194.pdf">version
href="https://cache.media.enseignementsup-recherche.gouv.fr//file/SPE4-MESRI-17-6-2021/19/4/SP4_ESR_17_6_2021_1413194.pdf">Version
pdf complète</a></li>
</ul>

View File

@ -57,7 +57,7 @@ from app.models.ues import UniteEns
from app import api
from app import db
from app import models
from app.models import ScolarNews
from app.models import ScolarNews, but_validations
from app.auth.models import User
from app.but import apc_edit_ue, jury_but_recap
from app.decorators import (
@ -71,7 +71,7 @@ from app.views import notes_bp as bp
# ---------------
from app.scodoc import sco_utils as scu
from app.scodoc import sco_bulletins_json, sco_utils as scu
from app.scodoc import notesdb as ndb
from app import log, send_scodoc_alarm
@ -2143,6 +2143,16 @@ def formsemestre_validation_etud_form(
):
"Formulaire choix jury pour un étudiant"
readonly = not sco_permissions_check.can_validate_sem(formsemestre_id)
formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
if formsemestre.formation.is_apc():
return redirect(
url_for(
"notes.formsemestre_validation_but",
scodoc_dept=g.scodoc_dept,
formsemestre_id=formsemestre_id,
etudid=etudid,
)
)
return sco_formsemestre_validation.formsemestre_validation_etud_form(
formsemestre_id,
etudid=etudid,
@ -2515,51 +2525,68 @@ def do_formsemestre_validation_auto(formsemestre_id):
def formsemestre_validation_suppress_etud(
formsemestre_id, etudid, dialog_confirmed=False
):
"""Suppression des decisions de jury pour un etudiant."""
"""Suppression des décisions de jury pour un étudiant."""
if not sco_permissions_check.can_validate_sem(formsemestre_id):
return scu.confirm_dialog(
message="<p>Opération non autorisée pour %s</h2>" % current_user,
dest_url=scu.ScoURL(),
)
etud = Identite.query.get_or_404(etudid)
formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
if formsemestre.formation.is_apc():
next_url = url_for(
"scolar.ficheEtud",
scodoc_dept=g.scodoc_dept,
etudid=etudid,
)
else:
next_url = url_for(
"notes.formsemestre_validation_etud_form",
scodoc_dept=g.scodoc_dept,
formsemestre_id=formsemestre_id,
etudid=etudid,
)
if not dialog_confirmed:
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
sem = formsemestre.to_dict()
nt: NotesTableCompat = res_sem.load_formsemestre_results(formsemestre)
decision_jury = nt.get_etud_decision_sem(etudid)
if decision_jury:
existing = (
"<p>Décision existante: %(code)s du %(event_date)s</p>" % decision_jury
)
d = sco_bulletins_json.dict_decision_jury(
etudid, formsemestre_id, with_decisions=True
)
d.update(but_validations.dict_decision_jury(etud, formsemestre))
descr_ues = [f"{u['acronyme']}: {u['code']}" for u in d.get("decision_ue", [])]
dec_annee = d.get("decision_annee")
if dec_annee:
descr_annee = dec_annee.get("code", "-")
else:
existing = ""
descr_annee = "-"
existing = f"""
<ul>
<li>Semestre : {d.get("decision", {"code":"-"})['code'] or "-"}</li>
<li>Année BUT: {descr_annee}</li>
<li>UEs : {", ".join(descr_ues)}</li>
<li>RCUEs: {len(d.get("decision_rcue", []))} décisions</li>
</ul>
"""
return scu.confirm_dialog(
"""<h2>Confirmer la suppression des décisions du semestre %s (%s - %s) pour %s ?</h2>%s
<p>Cette opération est irréversible.
</p>
"""
% (
sem["titre_num"],
sem["date_debut"],
sem["date_fin"],
etud["nomprenom"],
existing,
),
f"""<h2>Confirmer la suppression des décisions du semestre
{formsemestre.titre_mois()} pour {etud.nomprenom}
</h2>
<p>Cette opération est irréversible.</p>
<div>
{existing}
</div>
""",
OK="Supprimer",
dest_url="",
cancel_url="formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s"
% (formsemestre_id, etudid),
cancel_url=next_url,
parameters={"etudid": etudid, "formsemestre_id": formsemestre_id},
)
sco_formsemestre_validation.formsemestre_validation_suppress_etud(
formsemestre_id, etudid
)
return flask.redirect(
scu.ScoURL()
+ "/Notes/formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s&head_message=Décision%%20supprimée"
% (formsemestre_id, etudid)
)
flash("Décisions supprimées")
return flask.redirect(next_url)
# ------------- PV de JURY et archives

View File

@ -1,7 +1,7 @@
# -*- mode: python -*-
# -*- coding: utf-8 -*-
SCOVERSION = "9.3.15"
SCOVERSION = "9.3.16"
SCONAME = "ScoDoc"

View File

@ -33,7 +33,7 @@ except NameError:
load_dotenv(os.path.join(BASEDIR, ".env"))
CHK_CERT = bool(int(os.environ.get("CHECK_CERTIFICATE", False)))
SCODOC_URL = os.environ["SCODOC_URL"] or "http://localhost:5000"
SCODOC_URL = os.environ.get("SCODOC_URL") or "http://localhost:5000"
API_URL = SCODOC_URL + "/ScoDoc/api"
SCODOC_USER = os.environ["SCODOC_USER"]
SCODOC_PASSWORD = os.environ["SCODOC_PASSWORD"]
@ -85,13 +85,13 @@ if r.status_code != 200:
print(f"{len(r.json())} étudiants courants")
# Bulletin d'un BUT
formsemestre_id = 1052 # A adapter
etudid = 16400
formsemestre_id = 1063 # A adapter
etudid = 16450
bul = GET(f"/etudiant/etudid/{etudid}/formsemestre/{formsemestre_id}/bulletin")
# d'un DUT
formsemestre_id = 1028 # A adapter
etudid = 14721
formsemestre_id = 1062 # A adapter
etudid = 16309
bul_dut = GET(f"/etudiant/etudid/{etudid}/formsemestre/{formsemestre_id}/bulletin")