diff --git a/commands.py b/commands.py index 67248bc..07bf046 100644 --- a/commands.py +++ b/commands.py @@ -45,6 +45,7 @@ def init_db(): assessment = Assessment( title="Évaluation de mathématiques", description="Évaluation sur les fractions et les décimaux", + trimester=1, class_group_id=classe_6a.id, coefficient=2.0 ) diff --git a/forms.py b/forms.py index 22681da..f623c9d 100644 --- a/forms.py +++ b/forms.py @@ -8,6 +8,8 @@ class AssessmentForm(FlaskForm): title = StringField('Titre', validators=[DataRequired(), Length(max=200)]) description = TextAreaField('Description', validators=[Optional()]) date = DateField('Date', validators=[DataRequired()], default=date.today) + trimester = SelectField('Trimestre', validators=[DataRequired()], coerce=int, + choices=[(1, '1er trimestre'), (2, '2ème trimestre'), (3, '3ème trimestre')]) 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') diff --git a/models.py b/models.py index 9d53772..38822f9 100644 --- a/models.py +++ b/models.py @@ -37,10 +37,15 @@ class Assessment(db.Model): title = db.Column(db.String(200), nullable=False) description = db.Column(db.Text) date = db.Column(db.Date, nullable=False, default=datetime.utcnow) + trimester = db.Column(db.Integer, nullable=False) # 1, 2, ou 3 class_group_id = db.Column(db.Integer, db.ForeignKey('class_group.id'), nullable=False) coefficient = db.Column(db.Float, default=1.0) # Garder Float pour compatibilité exercises = db.relationship('Exercise', backref='assessment', lazy=True, cascade='all, delete-orphan') + __table_args__ = ( + CheckConstraint('trimester IN (1, 2, 3)', name='check_trimester_valid'), + ) + def __repr__(self): return f'' diff --git a/routes/assessments.py b/routes/assessments.py index 77d6ef8..9b3e7f5 100644 --- a/routes/assessments.py +++ b/routes/assessments.py @@ -69,6 +69,7 @@ def _handle_unified_assessment_request(form, assessment=None, is_edit=False): 'title': form.title.data, 'description': form.description.data, 'date': form.date.data, + 'trimester': form.trimester.data, 'class_group_id': form.class_group_id.data, 'coefficient': form.coefficient.data }) @@ -77,6 +78,7 @@ def _handle_unified_assessment_request(form, assessment=None, is_edit=False): 'title': form.title.data, 'description': form.description.data, 'date': form.date.data, + 'trimester': form.trimester.data, 'class_group_id': form.class_group_id.data, 'coefficient': form.coefficient.data }) diff --git a/services.py b/services.py index 441ad0a..08c954f 100644 --- a/services.py +++ b/services.py @@ -13,6 +13,7 @@ class AssessmentService: title=form_data['title'], description=form_data.get('description', ''), date=form_data['date'], + trimester=form_data['trimester'], class_group_id=form_data['class_group_id'], coefficient=form_data['coefficient'] ) @@ -27,6 +28,7 @@ class AssessmentService: assessment.title = form_data['title'] assessment.description = form_data.get('description', '') assessment.date = form_data['date'] + assessment.trimester = form_data['trimester'] assessment.class_group_id = form_data['class_group_id'] assessment.coefficient = form_data['coefficient'] log_user_action("Modification évaluation", f"ID: {assessment.id}") @@ -41,13 +43,18 @@ class AssessmentService: def process_assessment_with_exercises(assessment_data, is_edit=False, existing_assessment=None): """Traite une évaluation complète avec exercices et éléments""" # Validation des données de base - required_fields = ['title', 'date', 'class_group_id', 'coefficient'] + required_fields = ['title', 'date', 'trimester', 'class_group_id', 'coefficient'] validate_json_data(assessment_data, required_fields) # Validation et conversion des types try: class_group_id = safe_int_conversion(assessment_data['class_group_id'], "ID de classe") coefficient = safe_decimal_conversion(assessment_data['coefficient'], "coefficient") + trimester = safe_int_conversion(assessment_data['trimester'], "trimestre") + + # Validation du trimestre + if trimester not in [1, 2, 3]: + raise ValidationError("Le trimestre doit être 1, 2 ou 3") # Validation de la date date_str = assessment_data.get('date') @@ -64,6 +71,7 @@ class AssessmentService: 'title': assessment_data['title'].strip(), 'description': assessment_data.get('description', '').strip(), 'date': date_obj, + 'trimester': trimester, 'class_group_id': class_group_id, 'coefficient': coefficient } diff --git a/templates/assessment_detail.html b/templates/assessment_detail.html index 5d154a3..4c50f66 100644 --- a/templates/assessment_detail.html +++ b/templates/assessment_detail.html @@ -10,7 +10,7 @@ ← Retour aux évaluations

{{ assessment.title }}

-

{{ assessment.class_group.name }} - {{ assessment.date.strftime('%d/%m/%Y') }}

+

{{ assessment.class_group.name }} - {{ assessment.date.strftime('%d/%m/%Y') }} - Trimestre {{ assessment.trimester }}

@@ -40,6 +40,10 @@
Date
{{ assessment.date.strftime('%d/%m/%Y') }}
+
+
Trimestre
+
{{ assessment.trimester }}
+
Coefficient
{{ assessment.coefficient }}
diff --git a/templates/assessment_form_unified.html b/templates/assessment_form_unified.html index 409d09b..44422a3 100644 --- a/templates/assessment_form_unified.html +++ b/templates/assessment_form_unified.html @@ -76,6 +76,20 @@ {% endif %}
+
+ + {{ form.trimester(class="block w-full border border-gray-300 rounded-md px-3 py-2 focus:ring-blue-500 focus:border-blue-500") }} + {% if form.trimester.errors %} +
+ {% for error in form.trimester.errors %} +

{{ error }}

+ {% endfor %} +
+ {% endif %} +
+