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")
|
errors.append("param 'etat': invalide")
|
||||||
|
|
||||||
etat: scu.EtatJustificatif = scu.EtatJustificatif.get(etat)
|
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
|
# cas 2 : date_debut
|
||||||
date_debut: str = data.get("date_debut", None)
|
date_debut: str = data.get("date_debut", None)
|
||||||
@ -473,7 +477,10 @@ def justif_edit(justif_id: int):
|
|||||||
if etat is None:
|
if etat is None:
|
||||||
errors.append("param 'etat': invalide")
|
errors.append("param 'etat': invalide")
|
||||||
else:
|
else:
|
||||||
justificatif_unique.etat = etat
|
if current_user.has_permission(Permission.JustifValidate):
|
||||||
|
justificatif_unique.etat = etat
|
||||||
|
else:
|
||||||
|
errors.append("param 'etat': non autorisé (Permission.JustifValidate)")
|
||||||
|
|
||||||
# Cas 2 : raison
|
# Cas 2 : raison
|
||||||
raison: str = data.get("raison", False)
|
raison: str = data.get("raison", False)
|
||||||
|
@ -170,13 +170,7 @@ class AjoutJustificatifEtudForm(AjoutAssiOrJustForm):
|
|||||||
)
|
)
|
||||||
etat = SelectField(
|
etat = SelectField(
|
||||||
"État du justificatif",
|
"État du justificatif",
|
||||||
choices=[
|
choices=[], # sera rempli dynamiquement
|
||||||
("", "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"),
|
|
||||||
],
|
|
||||||
validators=[DataRequired(message="This field is required.")],
|
validators=[DataRequired(message="This field is required.")],
|
||||||
)
|
)
|
||||||
fichiers = MultipleFileField(label="Ajouter des fichiers")
|
fichiers = MultipleFileField(label="Ajouter des fichiers")
|
||||||
|
@ -1136,7 +1136,9 @@ def formsemestre_status(formsemestre_id=None, check_parcours=True):
|
|||||||
|
|
||||||
# --- Lien Traitement Justificatifs:
|
# --- 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(
|
H.append(
|
||||||
f"""<p>
|
f"""<p>
|
||||||
<a class="stdlink" href="{url_for('assiduites.traitement_justificatifs',
|
<a class="stdlink" href="{url_for('assiduites.traitement_justificatifs',
|
||||||
|
@ -68,6 +68,11 @@ _SCO_PERMISSIONS = (
|
|||||||
"AbsJustifView",
|
"AbsJustifView",
|
||||||
"Visualisation du détail des justificatifs (motif, fichiers)",
|
"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.
|
# 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:
|
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"
|
# 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(
|
justi: Justificatif = Justificatif.create_justificatif(
|
||||||
etudiant=etud,
|
etudiant=etud,
|
||||||
date_debut=dt_debut_tz_server,
|
date_debut=dt_debut_tz_server,
|
||||||
date_fin=dt_fin_tz_server,
|
date_fin=dt_fin_tz_server,
|
||||||
etat=scu.EtatJustificatif.VALIDE,
|
etat=etat,
|
||||||
user_id=current_user.id,
|
user_id=current_user.id,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -642,6 +653,21 @@ def edit_justificatif_etud(justif_id: int):
|
|||||||
readonly = not current_user.has_permission(Permission.AbsChange)
|
readonly = not current_user.has_permission(Permission.AbsChange)
|
||||||
|
|
||||||
form = AjoutJustificatifEtudForm(obj=justif)
|
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:
|
if readonly:
|
||||||
form.disable_all()
|
form.disable_all()
|
||||||
@ -717,6 +743,21 @@ def ajout_justificatif_etud():
|
|||||||
)
|
)
|
||||||
|
|
||||||
form = AjoutJustificatifEtudForm()
|
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.validate_on_submit():
|
||||||
if form.cancel.data: # cancel button
|
if form.cancel.data: # cancel button
|
||||||
return redirect(redirect_url)
|
return redirect(redirect_url)
|
||||||
@ -782,6 +823,16 @@ def _record_justificatif_etud(
|
|||||||
form.set_error("Erreur: état invalide")
|
form.set_error("Erreur: état invalide")
|
||||||
return False
|
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:
|
try:
|
||||||
message = ""
|
message = ""
|
||||||
if justif:
|
if justif:
|
||||||
@ -1521,12 +1572,22 @@ def tableau_assiduite_actions():
|
|||||||
|
|
||||||
# Justification d'une assiduité depuis le tableau
|
# Justification d'une assiduité depuis le tableau
|
||||||
if action == "justifier" and obj_type == "assiduite":
|
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
|
# Création du justificatif correspondant
|
||||||
justificatif_correspondant: Justificatif = Justificatif.create_justificatif(
|
justificatif_correspondant: Justificatif = Justificatif.create_justificatif(
|
||||||
etudiant=objet.etudiant,
|
etudiant=objet.etudiant,
|
||||||
date_debut=objet.date_debut,
|
date_debut=objet.date_debut,
|
||||||
date_fin=objet.date_fin,
|
date_fin=objet.date_fin,
|
||||||
etat=scu.EtatJustificatif.VALIDE,
|
etat=etat,
|
||||||
user_id=current_user.id,
|
user_id=current_user.id,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -1534,7 +1595,8 @@ def tableau_assiduite_actions():
|
|||||||
scass.simple_invalidate_cache(
|
scass.simple_invalidate_cache(
|
||||||
justificatif_correspondant.to_dict(), objet.etudiant.id
|
justificatif_correspondant.to_dict(), objet.etudiant.id
|
||||||
)
|
)
|
||||||
flash(f"{objet_name} justifiée")
|
if etat == scu.EtatJustificatif.VALIDE:
|
||||||
|
flash(f"{objet_name} justifiée")
|
||||||
return redirect(request.referrer)
|
return redirect(request.referrer)
|
||||||
|
|
||||||
# Si on arrive ici, c'est que l'action n'est pas autorisée
|
# Si on arrive ici, c'est que l'action n'est pas autorisée
|
||||||
@ -1695,6 +1757,7 @@ def signale_evaluation_abs(etudid: int = None, evaluation_id: int = None):
|
|||||||
|
|
||||||
@bp.route("traitement_justificatifs")
|
@bp.route("traitement_justificatifs")
|
||||||
@scodoc
|
@scodoc
|
||||||
|
@permission_required(Permission.JustifValidate)
|
||||||
@permission_required(Permission.AbsJustifView)
|
@permission_required(Permission.AbsJustifView)
|
||||||
def traitement_justificatifs():
|
def traitement_justificatifs():
|
||||||
"""Page de traitement des justificatifs
|
"""Page de traitement des justificatifs
|
||||||
|
Loading…
Reference in New Issue
Block a user