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] return [ModuleImpl.query.get(modimpl_id) for modimpl_id in cursor]
def can_be_edited_by(self, user): 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 user.has_permission(Permission.ScoImplement): # pas chef
if not self.resp_can_edit or user.id not in [ if not self.resp_can_edit or user.id not in [
resp.id for resp in self.responsables resp.id for resp in self.responsables

View File

@ -1217,7 +1217,8 @@ def make_menu_autres_operations(
"formsemestre_id": formsemestre.id, "formsemestre_id": formsemestre.id,
"etudid": etud.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", "title": "Entrer décisions jury",

View File

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

View File

@ -54,7 +54,7 @@ Solution proposée (nov 2014):
""" """
import flask import flask
from flask import flash, request from flask import flash, g, request, url_for
from flask_login import current_user from flask_login import current_user
from app.models.formsemestre import FormSemestre 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_module
from app.scodoc import sco_edit_ue from app.scodoc import sco_edit_ue
from app.scodoc import sco_evaluation_db 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_moduleimpl
from app.scodoc import sco_saisie_notes from app.scodoc import sco_saisie_notes
from app.scodoc import sco_etud 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): def external_ue_create_form(formsemestre_id: int, etudid: int):
"""Formulaire création UE externe + inscription étudiant et saisie note """Formulaire création UE externe + inscription étudiant et saisie note
- Demande UE: peut-être existante (liste les UE externes de cette formation), - 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 Note: pour l'édition éventuelle de ces informations, on utilisera les
fonctions standards sur les UE/modules/notes 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: # Contrôle d'accès:
if not current_user.has_permission(Permission.ScoImplement): if not formsemestre.can_be_edited_by(current_user):
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")
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] 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) existing_external_ue = get_existing_external_ue(formation_id)
H = [ H = [
@ -251,8 +252,7 @@ def external_ue_create_form(formsemestre_id: int, etudid: int):
""", """,
] ]
html_footer = html_sco_header.sco_footer() html_footer = html_sco_header.sco_footer()
Fo = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0] parcours = formsemestre.formation.get_parcours()
parcours = sco_codes_parcours.get_parcours_from_code(Fo["type_parcours"])
ue_types = [ ue_types = [
typ for typ in parcours.ALLOWED_UE_TYPES if typ != sco_codes_parcours.UE_SPORT 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", cancelbutton="Annuler",
) )
bull_url = "formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s" % ( bull_url = url_for(
formsemestre_id, "notes.formsemestre_bulletinetud",
etudid, scodoc_dept=g.scodoc_dept,
formsemestre_id=formsemestre_id,
etudid=etudid,
) )
if tf[0] == 0: if tf[0] == 0:
return "\n".join(H) + "\n" + tf[1] + html_footer 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) return flask.redirect(bull_url)
else: else:
note = tf[2]["note"].strip().upper() 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: if invalid:
return ( return (
"\n".join(H) "\n".join(H)
@ -386,4 +390,5 @@ def external_ue_create_form(formsemestre_id: int, etudid: int):
formsemestre_id, formsemestre_id,
{etudid: note_value}, {etudid: note_value},
) )
return flask.redirect(bull_url + "&head_message=Ajout%20effectué") flash("Ajout effectué")
return flask.redirect(bull_url)