Pas d'UEs externes en BUT. Voir #542

This commit is contained in:
Emmanuel Viennet 2022-12-17 23:14:13 -03:00 committed by iziram
parent 872e741d9f
commit a0a6dbea00
4 changed files with 28 additions and 22 deletions

View File

@ -349,7 +349,7 @@ class FormSemestre(db.Model):
return [ModuleImpl.query.get(modimpl_id) for modimpl_id in cursor]
def can_be_edited_by(self, user):
"""Vrai si user peut modifier ce semestre"""
"""Vrai si user peut modifier ce semestre (est chef ou l'un des responsables)"""
if not user.has_permission(Permission.ScoImplement): # pas chef
if not self.resp_can_edit or user.id not in [
resp.id for resp in self.responsables

View File

@ -1217,7 +1217,8 @@ def make_menu_autres_operations(
"formsemestre_id": formsemestre.id,
"etudid": etud.id,
},
"enabled": sco_permissions_check.can_validate_sem(formsemestre.id),
"enabled": sco_permissions_check.can_validate_sem(formsemestre.id)
and not formsemestre.formation.is_apc(),
},
{
"title": "Entrer décisions jury",

View File

@ -77,10 +77,10 @@ def convert_note_from_string(
note,
note_max,
note_min=scu.NOTES_MIN,
etudid=None,
absents=None,
tosuppress=None,
invalids=None,
etudid: int = None,
absents: list[int] = None,
tosuppress: list[int] = None,
invalids: list[int] = None,
):
"""converti une valeur (chaine saisie) vers une note numérique (float)
Les listes absents, tosuppress et invalids sont modifiées

View File

@ -54,7 +54,7 @@ Solution proposée (nov 2014):
"""
import flask
from flask import flash, request
from flask import flash, g, request, url_for
from flask_login import current_user
from app.models.formsemestre import FormSemestre
@ -68,8 +68,6 @@ from app.scodoc import sco_edit_matiere
from app.scodoc import sco_edit_module
from app.scodoc import sco_edit_ue
from app.scodoc import sco_evaluation_db
from app.scodoc import sco_formations
from app.scodoc import sco_formsemestre
from app.scodoc import sco_moduleimpl
from app.scodoc import sco_saisie_notes
from app.scodoc import sco_etud
@ -217,7 +215,7 @@ def get_external_moduleimpl_id(formsemestre_id: int, ue_id: int) -> int:
)
# Web function
# Web view
def external_ue_create_form(formsemestre_id: int, etudid: int):
"""Formulaire création UE externe + inscription étudiant et saisie note
- Demande UE: peut-être existante (liste les UE externes de cette formation),
@ -226,15 +224,18 @@ def external_ue_create_form(formsemestre_id: int, etudid: int):
Note: pour l'édition éventuelle de ces informations, on utilisera les
fonctions standards sur les UE/modules/notes
En BUT, pas d'UEs externes. Voir https://scodoc.org/git/ScoDoc/ScoDoc/issues/542
"""
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
formsemestre: FormSemestre = FormSemestre.query.get_or_404(formsemestre_id)
# Contrôle d'accès:
if not current_user.has_permission(Permission.ScoImplement):
if not sem["resp_can_edit"] or (current_user.id not in sem["responsables"]):
raise AccessDenied("vous n'avez pas le droit d'effectuer cette opération")
if not formsemestre.can_be_edited_by(current_user):
raise AccessDenied("vous n'avez pas le droit d'effectuer cette opération")
if formsemestre.formation.is_apc():
raise ScoValueError("Impossible d'ajouter une UE externe en BUT")
etud = sco_etud.get_etud_info(filled=True, etudid=etudid)[0]
formation_id = sem["formation_id"]
formation_id = formsemestre.formation.id
existing_external_ue = get_existing_external_ue(formation_id)
H = [
@ -251,8 +252,7 @@ def external_ue_create_form(formsemestre_id: int, etudid: int):
""",
]
html_footer = html_sco_header.sco_footer()
Fo = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0]
parcours = sco_codes_parcours.get_parcours_from_code(Fo["type_parcours"])
parcours = formsemestre.formation.get_parcours()
ue_types = [
typ for typ in parcours.ALLOWED_UE_TYPES if typ != sco_codes_parcours.UE_SPORT
]
@ -341,9 +341,11 @@ def external_ue_create_form(formsemestre_id: int, etudid: int):
cancelbutton="Annuler",
)
bull_url = "formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s" % (
formsemestre_id,
etudid,
bull_url = url_for(
"notes.formsemestre_bulletinetud",
scodoc_dept=g.scodoc_dept,
formsemestre_id=formsemestre_id,
etudid=etudid,
)
if tf[0] == 0:
return "\n".join(H) + "\n" + tf[1] + html_footer
@ -351,7 +353,9 @@ def external_ue_create_form(formsemestre_id: int, etudid: int):
return flask.redirect(bull_url)
else:
note = tf[2]["note"].strip().upper()
note_value, invalid = sco_saisie_notes.convert_note_from_string(note, 20.0)
note_value, invalid = sco_saisie_notes.convert_note_from_string(
note, 20.0, etudid=etudid, absents=[], tosuppress=[], invalids=[]
)
if invalid:
return (
"\n".join(H)
@ -386,4 +390,5 @@ def external_ue_create_form(formsemestre_id: int, etudid: int):
formsemestre_id,
{etudid: note_value},
)
return flask.redirect(bull_url + "&head_message=Ajout%20effectué")
flash("Ajout effectué")
return flask.redirect(bull_url)