From 8cf85f78a8015b07349842f414bf04e4d3ff8122 Mon Sep 17 00:00:00 2001
From: Emmanuel Viennet <emmanuel.viennet@gmail.com>
Date: Thu, 8 Feb 2024 16:23:14 +0100
Subject: [PATCH] Assiduite: filtrage par formsemestre: intersection dates

---
 app/models/formsemestre.py   |  2 +-
 app/scodoc/sco_assiduites.py | 12 ++++++------
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/app/models/formsemestre.py b/app/models/formsemestre.py
index 6cdaef8a..9d2f5b13 100644
--- a/app/models/formsemestre.py
+++ b/app/models/formsemestre.py
@@ -68,7 +68,7 @@ class FormSemestre(db.Model):
     semestre_id = db.Column(db.Integer, nullable=False, default=1, server_default="1")
     titre = db.Column(db.Text(), nullable=False)
     date_debut = db.Column(db.Date(), nullable=False)
-    date_fin = db.Column(db.Date(), nullable=False)
+    date_fin = db.Column(db.Date(), nullable=False)  # jour inclus
     edt_id: str | None = db.Column(db.Text(), index=True, nullable=True)
     "identifiant emplois du temps (unicité non imposée)"
     etat = db.Column(db.Boolean(), nullable=False, default=True, server_default="true")
diff --git a/app/scodoc/sco_assiduites.py b/app/scodoc/sco_assiduites.py
index b429187e..40da4a9f 100644
--- a/app/scodoc/sco_assiduites.py
+++ b/app/scodoc/sco_assiduites.py
@@ -499,9 +499,9 @@ def filter_by_formsemestre(
     formsemestre: FormSemestre,
 ) -> Query:
     """
-    Filtrage d'une collection : conserve les élements
-     - si l'étudiant est inscrit au formsemestre
-     - Et que la plage de dates est complètement incluse dans le semestre (bizarre!)
+    Filtrage d'une collection : conserve les élements tels que
+     - l'étudiant est inscrit au formsemestre
+     - et la plage de dates intersecte celle du formsemestre
     """
 
     if formsemestre is None:
@@ -520,10 +520,10 @@ def filter_by_formsemestre(
     form_date_fin = formsemestre.date_fin + timedelta(days=1)
 
     collection_result = collection_result.filter(
-        collection_class.date_debut >= form_date_debut
-    )
+        collection_class.date_debut <= form_date_fin
+    ).filter(collection_class.date_fin >= form_date_debut)
 
-    return collection_result.filter(collection_class.date_fin <= form_date_fin)
+    return collection_result
 
 
 def filter_by_modimpls(
-- 
GitLab