forked from ScoDoc/ScoDoc
53 lines
1.5 KiB
Python
53 lines
1.5 KiB
Python
|
"""
|
||
|
Formulaire configuration des codes Apo et EDT des modimps d'un formsemestre
|
||
|
"""
|
||
|
|
||
|
from flask_wtf import FlaskForm
|
||
|
from wtforms import validators
|
||
|
from wtforms.fields.simple import BooleanField, StringField, SubmitField
|
||
|
|
||
|
from app.models import FormSemestre, ModuleImpl
|
||
|
|
||
|
|
||
|
class _EditModimplsCodesForm(FlaskForm):
|
||
|
"form. définition des liens personnalisés"
|
||
|
# construit dynamiquement ci-dessous
|
||
|
|
||
|
|
||
|
def EditModimplsCodesForm(formsemestre: FormSemestre) -> _EditModimplsCodesForm:
|
||
|
"Création d'un formulaire pour éditer les codes"
|
||
|
|
||
|
# Formulaire dynamique, on créé une classe ad-hoc
|
||
|
class F(_EditModimplsCodesForm):
|
||
|
pass
|
||
|
|
||
|
def _gen_mod_form(modimpl: ModuleImpl):
|
||
|
field = StringField(
|
||
|
modimpl.module.code,
|
||
|
validators=[
|
||
|
validators.Optional(),
|
||
|
validators.Length(min=1, max=80),
|
||
|
],
|
||
|
default="",
|
||
|
render_kw={"size": 32},
|
||
|
)
|
||
|
setattr(F, f"modimpl_apo_{modimpl.id}", field)
|
||
|
field = StringField(
|
||
|
"",
|
||
|
validators=[
|
||
|
validators.Optional(),
|
||
|
validators.Length(min=1, max=80),
|
||
|
],
|
||
|
default="",
|
||
|
render_kw={"size": 12},
|
||
|
)
|
||
|
setattr(F, f"modimpl_edt_{modimpl.id}", field)
|
||
|
|
||
|
for modimpl in formsemestre.modimpls_sorted:
|
||
|
_gen_mod_form(modimpl)
|
||
|
|
||
|
F.submit = SubmitField("Valider")
|
||
|
F.cancel = SubmitField("Annuler", render_kw={"formnovalidate": True})
|
||
|
|
||
|
return F()
|