Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
SCODOC_R6A06
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Jean-Marie Place
SCODOC_R6A06
Commits
dd8edc37
Commit
dd8edc37
authored
5 months ago
by
Emmanuel Viennet
Browse files
Options
Downloads
Patches
Plain Diff
PE: ajout option pour générer comptes d'absences
parent
b4f1c1a4
No related branches found
No related tags found
No related merge requests found
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
app/forms/pe/pe_sem_recap.py
+2
-1
2 additions, 1 deletion
app/forms/pe/pe_sem_recap.py
app/pe/pe_etudiant.py
+26
-6
26 additions, 6 deletions
app/pe/pe_etudiant.py
app/pe/pe_jury.py
+19
-16
19 additions, 16 deletions
app/pe/pe_jury.py
app/pe/pe_view.py
+1
-0
1 addition, 0 deletions
app/pe/pe_view.py
with
48 additions
and
23 deletions
app/forms/pe/pe_sem_recap.py
+
2
−
1
View file @
dd8edc37
...
@@ -27,7 +27,7 @@ Formulaire options génération table poursuite études (PE)
...
@@ -27,7 +27,7 @@ Formulaire options génération table poursuite études (PE)
"""
"""
from
flask_wtf
import
FlaskForm
from
flask_wtf
import
FlaskForm
from
wtforms
import
BooleanField
,
HiddenField
,
SubmitField
from
wtforms
import
BooleanField
,
SubmitField
class
ParametrageClasseurPE
(
FlaskForm
):
class
ParametrageClasseurPE
(
FlaskForm
):
...
@@ -61,5 +61,6 @@ class ParametrageClasseurPE(FlaskForm):
...
@@ -61,5 +61,6 @@ class ParametrageClasseurPE(FlaskForm):
# default=False,
# default=False,
# render_kw={"checked": ""},
# render_kw={"checked": ""},
)
)
assiduite
=
BooleanField
(
"
Inclure les comptes d
'
absences non justifiées
"
)
submit
=
SubmitField
(
"
Générer les classeurs poursuites d
'
études
"
)
submit
=
SubmitField
(
"
Générer les classeurs poursuites d
'
études
"
)
cancel
=
SubmitField
(
"
Annuler
"
,
render_kw
=
{
"
formnovalidate
"
:
True
})
cancel
=
SubmitField
(
"
Annuler
"
,
render_kw
=
{
"
formnovalidate
"
:
True
})
This diff is collapsed.
Click to expand it.
app/pe/pe_etudiant.py
+
26
−
6
View file @
dd8edc37
...
@@ -49,11 +49,13 @@ from app.comp.res_sem import load_formsemestre_results
...
@@ -49,11 +49,13 @@ from app.comp.res_sem import load_formsemestre_results
class
EtudiantsJuryPE
:
class
EtudiantsJuryPE
:
"""
Classe centralisant la gestion des étudiants à prendre en compte dans un jury de PE
"""
"""
Classe centralisant la gestion des étudiants à prendre en compte dans un jury de PE
"""
def
__init__
(
self
,
annee_diplome
:
int
):
def
__init__
(
self
,
annee_diplome
:
int
,
options
:
dict
|
None
=
None
):
"""
"""
Args:
Args:
annee_diplome: L
'
année de diplomation
annee_diplome: L
'
année de diplomation
"""
"""
self
.
options
=
options
or
{}
"
Options de configuration (cf. pe_sem_recap)
"
self
.
annee_diplome
=
annee_diplome
self
.
annee_diplome
=
annee_diplome
"""
L
'
année du diplôme
"""
"""
L
'
année du diplôme
"""
...
@@ -388,6 +390,10 @@ class EtudiantsJuryPE:
...
@@ -388,6 +390,10 @@ class EtudiantsJuryPE:
# Ajout des noms de semestres parcourus
# Ajout des noms de semestres parcourus
etapes
=
etapes_du_cursus
(
formsemestres
,
nbre_semestres_max
)
etapes
=
etapes_du_cursus
(
formsemestres
,
nbre_semestres_max
)
administratif
[
etudid
]
|=
etapes
administratif
[
etudid
]
|=
etapes
if
self
.
options
[
"
assiduite
"
]:
# Colonnes avec absences non jutifiées
abs_dict
=
absences_du_cursus
(
etudiant
,
formsemestres
)
administratif
[
etudid
]
|=
abs_dict
# Construction du dataframe
# Construction du dataframe
df
=
pd
.
DataFrame
.
from_dict
(
administratif
,
orient
=
"
index
"
)
df
=
pd
.
DataFrame
.
from_dict
(
administratif
,
orient
=
"
index
"
)
...
@@ -586,9 +592,22 @@ def arret_de_formation(etud: Identite, cosemestres: dict[int, FormSemestre]) ->
...
@@ -586,9 +592,22 @@ def arret_de_formation(etud: Identite, cosemestres: dict[int, FormSemestre]) ->
return
est_demissionnaire
return
est_demissionnaire
def
absences_du_cursus
(
etud
:
Identite
,
semestres
:
dict
[
int
,
FormSemestre
]
)
->
dict
[
str
,
int
]:
"""
Ajoute les absences non just. de chaque formsemestre du cursus
de cet étudiant.
"""
abs_dict
=
{}
for
i
,
formsemestre
in
enumerate
(
reversed
(
semestres
.
values
()),
start
=
1
):
nbabsnj
,
nbabsjust
,
nbabs
=
formsemestre
.
get_abs_count
(
etud
.
id
)
abs_dict
[
f
"
Etape
{
i
+
1
}
_ABS
"
]
=
nbabsnj
return
abs_dict
def
etapes_du_cursus
(
def
etapes_du_cursus
(
semestres
:
dict
[
int
,
FormSemestre
],
nbre_etapes_max
:
int
semestres
:
dict
[
int
,
FormSemestre
],
nbre_etapes_max
:
int
)
->
list
[
str
]:
)
->
dict
[
str
,
str
]:
"""
Partant d
'
un dictionnaire de semestres (qui retrace
"""
Partant d
'
un dictionnaire de semestres (qui retrace
la scolarité d
'
un étudiant), liste les noms des
la scolarité d
'
un étudiant), liste les noms des
semestres (en version abbrégée)
semestres (en version abbrégée)
...
@@ -598,15 +617,15 @@ def etapes_du_cursus(
...
@@ -598,15 +617,15 @@ def etapes_du_cursus(
avec i variant jusqu
'
à nbre_semestres_max. (S
'
il n
'
y a pas de semestre à l
'
étape i,
avec i variant jusqu
'
à nbre_semestres_max. (S
'
il n
'
y a pas de semestre à l
'
étape i,
le nom affiché est vide.
le nom affiché est vide.
La fonction suppose la
liste
des semestres trié
e
s par ordre
La fonction suppose la
items du dict
des semestres
sont
triés par ordre
décroissant de date.
décroissant de date.
Args:
Args:
semestres: un
e liste de
``FormSemestre``
semestres: un
dict formsemestre_id :
``FormSemestre``
nbre_etapes_max: le nombre d
'
étapes max prise en compte
nbre_etapes_max: le nombre d
'
étapes max prise en compte
Returns:
Returns:
Une liste de nom de semestre (dans le même ordre que les ``semestres``)
Une liste de nom
s
de semestre (dans le même ordre que les ``semestres``)
See also:
See also:
app.pe.pe_affichage.nom_semestre_etape
app.pe.pe_affichage.nom_semestre_etape
...
@@ -626,11 +645,12 @@ def nom_semestre_etape(semestre: FormSemestre, avec_fid=False) -> str:
...
@@ -626,11 +645,12 @@ def nom_semestre_etape(semestre: FormSemestre, avec_fid=False) -> str:
"""
Nom d
'
un semestre à afficher dans le descriptif des étapes de la scolarité
"""
Nom d
'
un semestre à afficher dans le descriptif des étapes de la scolarité
d
'
un étudiant.
d
'
un étudiant.
Par ex: Pour un S2, affiche ``
"
Semestre 2 FI S014-2015
(129)
"
`` avec :
Par ex: Pour un S2, affiche ``
"
Semestre 2 FI S014-2015
"
`` avec :
* 2 le numéro du semestre,
* 2 le numéro du semestre,
* FI la modalité,
* FI la modalité,
* 2014-2015 les dates
* 2014-2015 les dates
Si avec_fid, ajoute le fid du semestre (debug).
Args:
Args:
semestre: Un ``FormSemestre``
semestre: Un ``FormSemestre``
...
...
This diff is collapsed.
Click to expand it.
app/pe/pe_jury.py
+
19
−
16
View file @
dd8edc37
...
@@ -90,18 +90,20 @@ class JuryPE(object):
...
@@ -90,18 +90,20 @@ class JuryPE(object):
diplome : l
'
année d
'
obtention du diplome BUT et du jury de PE (généralement février XXXX)
diplome : l
'
année d
'
obtention du diplome BUT et du jury de PE (généralement février XXXX)
"""
"""
def
__init__
(
_default_options
=
{
self
,
diplome
:
int
,
formsemestre_id_base
,
options
=
{
"
moyennes_tags
"
:
True
,
"
moyennes_tags
"
:
True
,
"
moyennes_ue_res_sae
"
:
True
,
"
moyennes_ue_res_sae
"
:
True
,
"
moyennes_ues_rcues
"
:
True
,
"
moyennes_ues_rcues
"
:
True
,
"
min_max_moy
"
:
False
,
"
min_max_moy
"
:
False
,
"
publipostage
"
:
False
,
"
publipostage
"
:
False
,
},
"
assiduite
"
:
False
,
):
}
def
__init__
(
self
,
diplome
:
int
,
formsemestre_id_base
,
options
:
dict
|
None
=
None
):
options
=
options
or
{}
for
k
,
y
in
self
.
_default_options
.
items
():
if
k
not
in
options
:
options
[
k
]
=
v
pe_affichage
.
pe_start_log
()
pe_affichage
.
pe_start_log
()
self
.
diplome
=
diplome
self
.
diplome
=
diplome
"
L
'
année du diplome
"
"
L
'
année du diplome
"
...
@@ -123,21 +125,22 @@ class JuryPE(object):
...
@@ -123,21 +125,22 @@ class JuryPE(object):
pe_affichage
.
pe_print
(
"
Options
"
,
info
=
True
)
pe_affichage
.
pe_print
(
"
Options
"
,
info
=
True
)
for
cle
,
val
in
self
.
options
.
items
():
for
cle
,
val
in
self
.
options
.
items
():
if
cle
!=
"
csrf_token
"
:
pe_affichage
.
pe_print
(
f
"
>
{
cle
}
->
{
val
}
"
,
info
=
True
)
pe_affichage
.
pe_print
(
f
"
>
{
cle
}
->
{
val
}
"
,
info
=
True
)
# Chargement des étudiants à prendre en compte dans le jury
# Chargement des étudiants à prendre en compte dans le jury
pe_affichage
.
pe_print
(
pe_affichage
.
pe_print
(
f
"""
***********************************************************
"""
"""
***********************************************************
"""
)
)
pe_affichage
.
pe_print
(
pe_affichage
.
pe_print
(
f
"""
*** Recherche des étudiants diplômés 🎓 en
{
self
.
diplome
}
"""
,
info
=
True
f
"""
*** Recherche des étudiants diplômés 🎓 en
{
self
.
diplome
}
"""
,
info
=
True
)
)
pe_affichage
.
pe_print
(
pe_affichage
.
pe_print
(
f
"""
***********************************************************
"""
"""
***********************************************************
"""
)
)
# Les infos sur les étudiants
# Les infos sur les étudiants
self
.
etudiants
=
pe_etudiant
.
EtudiantsJuryPE
(
self
.
diplome
)
self
.
etudiants
=
pe_etudiant
.
EtudiantsJuryPE
(
self
.
diplome
,
self
.
options
)
"""
Les informations sur les étudiants du jury PE
"""
"""
Les informations sur les étudiants du jury PE
"""
self
.
etudiants
.
find_etudiants
()
self
.
etudiants
.
find_etudiants
()
self
.
diplomes_ids
=
self
.
etudiants
.
diplomes_ids
self
.
diplomes_ids
=
self
.
etudiants
.
diplomes_ids
...
...
This diff is collapsed.
Click to expand it.
app/pe/pe_view.py
+
1
−
0
View file @
dd8edc37
...
@@ -90,6 +90,7 @@ def pe_view_sem_recap(formsemestre_id: int):
...
@@ -90,6 +90,7 @@ def pe_view_sem_recap(formsemestre_id: int):
sco
=
ScoData
(
formsemestre
=
formsemestre
),
sco
=
ScoData
(
formsemestre
=
formsemestre
),
cosemestres
=
affichage_cosemestres_tries
,
cosemestres
=
affichage_cosemestres_tries
,
rangs_tries
=
sorted
(
affichage_cosemestres_tries
.
keys
()),
rangs_tries
=
sorted
(
affichage_cosemestres_tries
.
keys
()),
title
=
"
Avis de poursuite d
'
étude
"
,
)
)
# request.method == "POST"
# request.method == "POST"
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment