from flask_wtf import FlaskForm from wtforms import StringField, TextAreaField, FloatField, SelectField, DateField, IntegerField, SubmitField from wtforms.validators import DataRequired, Email, NumberRange, Optional, Length from datetime import date from models import ClassGroup class AssessmentForm(FlaskForm): title = StringField('Titre', validators=[DataRequired(), Length(max=200)]) description = TextAreaField('Description', validators=[Optional()]) date = DateField('Date', validators=[DataRequired()], default=date.today) class_group_id = SelectField('Classe', validators=[DataRequired()], coerce=int) coefficient = FloatField('Coefficient', validators=[DataRequired(), NumberRange(min=0.1, max=10)], default=1.0) submit = SubmitField('Enregistrer') def __init__(self, *args, **kwargs): super(AssessmentForm, self).__init__(*args, **kwargs) self.class_group_id.choices = [(cg.id, cg.name) for cg in ClassGroup.query.order_by(ClassGroup.name).all()] class ClassGroupForm(FlaskForm): name = StringField('Nom de la classe', validators=[DataRequired(), Length(max=100)]) description = TextAreaField('Description', validators=[Optional()]) year = StringField('Année scolaire', validators=[DataRequired(), Length(max=20)], default="2024-2025") submit = SubmitField('Enregistrer') class StudentForm(FlaskForm): first_name = StringField('Prénom', validators=[DataRequired(), Length(max=100)]) last_name = StringField('Nom', validators=[DataRequired(), Length(max=100)]) email = StringField('Email', validators=[Optional(), Email(), Length(max=120)]) class_group_id = SelectField('Classe', validators=[DataRequired()], coerce=int) submit = SubmitField('Enregistrer') def __init__(self, *args, **kwargs): super(StudentForm, self).__init__(*args, **kwargs) self.class_group_id.choices = [(cg.id, cg.name) for cg in ClassGroup.query.order_by(ClassGroup.name).all()] class ExerciseForm(FlaskForm): title = StringField('Titre', validators=[DataRequired(), Length(max=200)]) description = TextAreaField('Description', validators=[Optional()]) order = IntegerField('Ordre', validators=[DataRequired(), NumberRange(min=1)], default=1) submit = SubmitField('Enregistrer') class GradingElementForm(FlaskForm): label = StringField('Libellé', validators=[DataRequired(), Length(max=200)]) description = TextAreaField('Description', validators=[Optional()]) skill = StringField('Compétence', validators=[Optional(), Length(max=200)]) max_points = FloatField('Barème (points max)', validators=[DataRequired(), NumberRange(min=0.1)], default=1.0) grading_type = SelectField('Type de notation', validators=[DataRequired()], choices=[('points', 'Points (ex: 2.5/4)'), ('score', 'Score (0, 1, 2, 3, .)')], default='points') submit = SubmitField('Enregistrer')