forked from ScoDoc/ScoDoc
Assiduité : Permission JustifValidate #823
This commit is contained in:
parent
ddfd94b0ba
commit
48376724f5
@ -374,6 +374,10 @@ def _create_one(
|
||||
errors.append("param 'etat': invalide")
|
||||
|
||||
etat: scu.EtatJustificatif = scu.EtatJustificatif.get(etat)
|
||||
if etat != scu.EtatJustificatif.ATTENTE and not current_user.has_permission(
|
||||
Permission.JustifValidate
|
||||
):
|
||||
errors.append("param 'etat': non autorisé (Permission.JustifValidate)")
|
||||
|
||||
# cas 2 : date_debut
|
||||
date_debut: str = data.get("date_debut", None)
|
||||
@ -473,7 +477,10 @@ def justif_edit(justif_id: int):
|
||||
if etat is None:
|
||||
errors.append("param 'etat': invalide")
|
||||
else:
|
||||
if current_user.has_permission(Permission.JustifValidate):
|
||||
justificatif_unique.etat = etat
|
||||
else:
|
||||
errors.append("param 'etat': non autorisé (Permission.JustifValidate)")
|
||||
|
||||
# Cas 2 : raison
|
||||
raison: str = data.get("raison", False)
|
||||
|
@ -170,13 +170,7 @@ class AjoutJustificatifEtudForm(AjoutAssiOrJustForm):
|
||||
)
|
||||
etat = SelectField(
|
||||
"État du justificatif",
|
||||
choices=[
|
||||
("", "Choisir..."), # Placeholder
|
||||
(scu.EtatJustificatif.ATTENTE.value, "En attente de validation"),
|
||||
(scu.EtatJustificatif.NON_VALIDE.value, "Non valide"),
|
||||
(scu.EtatJustificatif.MODIFIE.value, "Modifié"),
|
||||
(scu.EtatJustificatif.VALIDE.value, "Valide"),
|
||||
],
|
||||
choices=[], # sera rempli dynamiquement
|
||||
validators=[DataRequired(message="This field is required.")],
|
||||
)
|
||||
fichiers = MultipleFileField(label="Ajouter des fichiers")
|
||||
|
@ -1136,7 +1136,9 @@ def formsemestre_status(formsemestre_id=None, check_parcours=True):
|
||||
|
||||
# --- Lien Traitement Justificatifs:
|
||||
|
||||
if current_user.has_permission(Permission.AbsJustifView):
|
||||
if current_user.has_permission(
|
||||
Permission.AbsJustifView
|
||||
) and current_user.has_permission(Permission.JustifValidate):
|
||||
H.append(
|
||||
f"""<p>
|
||||
<a class="stdlink" href="{url_for('assiduites.traitement_justificatifs',
|
||||
|
@ -68,6 +68,11 @@ _SCO_PERMISSIONS = (
|
||||
"AbsJustifView",
|
||||
"Visualisation du détail des justificatifs (motif, fichiers)",
|
||||
),
|
||||
(
|
||||
1 << 51,
|
||||
"JustifValidate",
|
||||
"Définir la validité d'un justificatif (valide, invalide, modifié)",
|
||||
),
|
||||
# Attention: les permissions sont codées sur 64 bits.
|
||||
)
|
||||
|
||||
|
@ -519,11 +519,22 @@ def _record_assiduite_etud(
|
||||
|
||||
if assi_etat != scu.EtatAssiduite.PRESENT and form.est_just.data:
|
||||
# si la case "justifiée est cochée alors on créé un justificatif de même période"
|
||||
|
||||
# L'état est Valide si l'user à la permission JustifValidate
|
||||
etat: scu.EtatJustificatif = scu.EtatJustificatif.ATTENTE
|
||||
if current_user.has_permission(Permission.JustifValidate):
|
||||
etat = scu.EtatJustificatif.VALIDE
|
||||
else:
|
||||
flash(
|
||||
"Vous ne pouvez pas créer de justificatif valide,"
|
||||
+ " il est automatiquement passé 'EN ATTENTE'",
|
||||
)
|
||||
|
||||
justi: Justificatif = Justificatif.create_justificatif(
|
||||
etudiant=etud,
|
||||
date_debut=dt_debut_tz_server,
|
||||
date_fin=dt_fin_tz_server,
|
||||
etat=scu.EtatJustificatif.VALIDE,
|
||||
etat=etat,
|
||||
user_id=current_user.id,
|
||||
)
|
||||
|
||||
@ -642,6 +653,21 @@ def edit_justificatif_etud(justif_id: int):
|
||||
readonly = not current_user.has_permission(Permission.AbsChange)
|
||||
|
||||
form = AjoutJustificatifEtudForm(obj=justif)
|
||||
# Limite les choix d'état si l'utilisateur n'a pas la permission de valider
|
||||
choix_etat: list = [
|
||||
(scu.EtatJustificatif.ATTENTE.value, "En attente de validation")
|
||||
]
|
||||
|
||||
if current_user.has_permission(Permission.JustifValidate):
|
||||
choix_etat = [
|
||||
("", "Choisir..."),
|
||||
(scu.EtatJustificatif.ATTENTE.value, "En attente de validation"),
|
||||
(scu.EtatJustificatif.NON_VALIDE.value, "Non valide"),
|
||||
(scu.EtatJustificatif.MODIFIE.value, "Modifié"),
|
||||
(scu.EtatJustificatif.VALIDE.value, "Valide"),
|
||||
]
|
||||
|
||||
form.etat.choices = choix_etat
|
||||
|
||||
if readonly:
|
||||
form.disable_all()
|
||||
@ -717,6 +743,21 @@ def ajout_justificatif_etud():
|
||||
)
|
||||
|
||||
form = AjoutJustificatifEtudForm()
|
||||
# Limite les choix d'état si l'utilisateur n'a pas la permission de valider
|
||||
choix_etat: list = [
|
||||
(scu.EtatJustificatif.ATTENTE.value, "En attente de validation")
|
||||
]
|
||||
|
||||
if current_user.has_permission(Permission.JustifValidate):
|
||||
choix_etat = [
|
||||
("", "Choisir..."),
|
||||
(scu.EtatJustificatif.ATTENTE.value, "En attente de validation"),
|
||||
(scu.EtatJustificatif.NON_VALIDE.value, "Non valide"),
|
||||
(scu.EtatJustificatif.MODIFIE.value, "Modifié"),
|
||||
(scu.EtatJustificatif.VALIDE.value, "Valide"),
|
||||
]
|
||||
|
||||
form.etat.choices = choix_etat
|
||||
if form.validate_on_submit():
|
||||
if form.cancel.data: # cancel button
|
||||
return redirect(redirect_url)
|
||||
@ -782,6 +823,16 @@ def _record_justificatif_etud(
|
||||
form.set_error("Erreur: état invalide")
|
||||
return False
|
||||
|
||||
if (
|
||||
not current_user.has_permission(Permission.JustifValidate)
|
||||
and etat != scu.EtatJustificatif.ATTENTE
|
||||
):
|
||||
log("_record_justificatif_etud: pas la permission")
|
||||
form.set_error(
|
||||
"Erreur: vous n'avez pas la permission de définir la validité d'un justificatif"
|
||||
)
|
||||
return False
|
||||
|
||||
try:
|
||||
message = ""
|
||||
if justif:
|
||||
@ -1521,12 +1572,22 @@ def tableau_assiduite_actions():
|
||||
|
||||
# Justification d'une assiduité depuis le tableau
|
||||
if action == "justifier" and obj_type == "assiduite":
|
||||
# L'état est Valide si l'user à la permission JustifValidate
|
||||
etat: scu.EtatJustificatif = scu.EtatJustificatif.ATTENTE
|
||||
if current_user.has_permission(Permission.JustifValidate):
|
||||
etat = scu.EtatJustificatif.VALIDE
|
||||
else:
|
||||
flash(
|
||||
"Vous ne pouvez pas créer de justificatif valide,"
|
||||
+ " il est automatiquement passé 'EN ATTENTE'",
|
||||
)
|
||||
|
||||
# Création du justificatif correspondant
|
||||
justificatif_correspondant: Justificatif = Justificatif.create_justificatif(
|
||||
etudiant=objet.etudiant,
|
||||
date_debut=objet.date_debut,
|
||||
date_fin=objet.date_fin,
|
||||
etat=scu.EtatJustificatif.VALIDE,
|
||||
etat=etat,
|
||||
user_id=current_user.id,
|
||||
)
|
||||
|
||||
@ -1534,6 +1595,7 @@ def tableau_assiduite_actions():
|
||||
scass.simple_invalidate_cache(
|
||||
justificatif_correspondant.to_dict(), objet.etudiant.id
|
||||
)
|
||||
if etat == scu.EtatJustificatif.VALIDE:
|
||||
flash(f"{objet_name} justifiée")
|
||||
return redirect(request.referrer)
|
||||
|
||||
@ -1695,6 +1757,7 @@ def signale_evaluation_abs(etudid: int = None, evaluation_id: int = None):
|
||||
|
||||
@bp.route("traitement_justificatifs")
|
||||
@scodoc
|
||||
@permission_required(Permission.JustifValidate)
|
||||
@permission_required(Permission.AbsJustifView)
|
||||
def traitement_justificatifs():
|
||||
"""Page de traitement des justificatifs
|
||||
|
Loading…
Reference in New Issue
Block a user