############################################################################## # ScoDoc # Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved. # See LICENSE ############################################################################## """Formulaire édition description formsemestre """ from wtforms import ( BooleanField, FileField, SelectField, StringField, TextAreaField, SubmitField, ) from wtforms.validators import AnyOf, Optional from app.forms import ScoDocForm from app.models import FORMSEMESTRE_DISPOSITIFS from app.scodoc import sco_utils as scu class DateDMYField(StringField): "Champ date JJ/MM/AAAA" def __init__(self, *args, **kwargs): render_kw = kwargs.pop("render_kw", {}) render_kw.update({"class": "datepicker", "size": 10}) super().__init__(*args, render_kw=render_kw, **kwargs) # note: process_formdata(self, valuelist) ne fonctionne pas # en cas d'erreur de saisie les valeurs ne sont pas ré-affichées. # On vérifie donc les valeurs dans le code de la vue. def process_data(self, value): "Process data from model to form" if value: self.data = value.strftime(scu.DATE_FMT) else: self.data = "" class FormSemestreDescriptionForm(ScoDocForm): "Formulaire édition description formsemestre" description = TextAreaField( "Description", validators=[Optional()], description="""texte libre : informations sur le contenu, les objectifs, les modalités d'évaluation, etc.""", ) horaire = StringField( "Horaire", validators=[Optional()], description="ex: les lundis 9h-12h" ) date_debut_inscriptions = DateDMYField( "Date de début des inscriptions", description="""date d'ouverture des inscriptions (laisser vide pour autoriser tout le temps)""", render_kw={ "id": "date_debut_inscriptions", }, ) date_fin_inscriptions = DateDMYField( "Date de fin des inscriptions", render_kw={ "id": "date_fin_inscriptions", }, ) image = FileField( "Image", validators=[Optional()], description="Image illustrant cette formation" ) campus = StringField( "Campus", validators=[Optional()], description="ex: Villetaneuse" ) salle = StringField("Salle", validators=[Optional()], description="ex: salle 123") dispositif = SelectField( "Dispositif", choices=FORMSEMESTRE_DISPOSITIFS.items(), coerce=int, description="modalité de formation", validators=[AnyOf(FORMSEMESTRE_DISPOSITIFS.keys())], ) modalites_mcc = TextAreaField( "Modalités de contrôle des connaissances", validators=[Optional()], description="texte libre", ) photo_ens = FileField( "Photo de l'enseignant(e)", validators=[Optional()], description="ou autre illustration", ) public = StringField( "Public visé", validators=[Optional()], description="ex: débutants" ) prerequis = TextAreaField( "Prérequis", validators=[Optional()], description="texte libre" ) responsable = StringField( "Responsable", validators=[Optional()], description="""nom de l'enseignant de la formation, ou personne chargée de l'organisation du semestre.""", ) wip = BooleanField( "Travaux en cours", description="work in progress: si coché, affichera juste le titre du semestre", ) submit = SubmitField("Enregistrer") cancel = SubmitField("Annuler", render_kw={"formnovalidate": True})