Repository: GeotrekCE/Geotrek-admin

Issue:
Tri des évènements touristiques dans l'API
Par défaut les évènement ne sont pas triés par date de départ, ce qui implique qu'ils apparaissent dans le désordre dans Geotrek-Rando.

Il faut modifier l'API pour changer cela.

https://github.com/GeotrekCE/Geotrek-admin/blob/master/geotrek/api/v2/views/tourism.py#LL103C30-L103C30


Discussion:
La question des événements et des dates pose souvent question. 
La plupart des événements ont une date de début égale à la date de fin.
Mais il y a aussi des événements longs sur plusieurs mois, notamment les expositions, dont la date de début est souvent passée.
Pour bien gérer ce cas, on s'appuie plutôt sur la date de fin et non pas la date de début pour remonter ou non des évenements et pour les trier par défaut.
Fixed in release [2.100.0](https://github.com/GeotrekCE/Geotrek-admin/releases/tag/2.100.0)
Plusieurs retours concernant le tri, des territoires ne comprennent pas pourquoi on tri par date de fin et pas par date de début.

Ce n'est pas un tri intuitif pour un utilisateur qui visite le site GTR3. 

En fait le tri par date de fin ne rend service qu'au évènement très longs, sur plusieurs mois, mais dès qu'il s'agit d'évènement sur quelques jours ça reste logique de trier par date de début. 

Resolving patch:
diff --git a/geotrek/api/v2/views/tourism.py b/geotrek/api/v2/views/tourism.py
--- a/geotrek/api/v2/views/tourism.py
+++ b/geotrek/api/v2/views/tourism.py
@@ -1,6 +1,6 @@
 from django.conf import settings
 from django.contrib.gis.db.models.functions import Transform
-from django.db.models import F, Case, When
+from django.db.models import F
 from django.db.models.query import Prefetch
 from django.shortcuts import get_object_or_404
 from django.utils.translation import activate
@@ -100,11 +100,7 @@ def get_queryset(self):
                                        queryset=Attachment.objects.select_related('license', 'filetype', 'filetype__structure'))
                               ) \
             .annotate(geom_transformed=Transform(F('geom'), settings.API_SRID)) \
-            .annotate(ordering_date=Case(
-                When(end_date__isnull=True, then=F('begin_date')),
-                default=F('end_date'),
-            )) \
-            .order_by('ordering_date')  # Required for reliable pagination
+            .order_by('begin_date')  # Required for reliable pagination
 
 
 class TouristicEventPlaceViewSet(api_viewsets.GeotrekGeometricViewset):


Test patch:
diff --git a/geotrek/api/tests/test_v2.py b/geotrek/api/tests/test_v2.py
--- a/geotrek/api/tests/test_v2.py
+++ b/geotrek/api/tests/test_v2.py
@@ -3247,15 +3247,15 @@ def test_touristic_event_list_2(self):
         # Only two because past events are filter by default
         self.assertEqual(response.json().get("count"), 2)
         # Event with no end date is returned with begin date as end date
-        self.assertEqual(response.json().get("results")[0]['end_date'], "2022-02-20")
+        self.assertEqual(response.json().get("results")[1]['end_date'], "2022-02-20")
         # start_time replaces meeting_time
-        self.assertEqual(response.json().get("results")[0]['meeting_time'], "12:34:00")
+        self.assertEqual(response.json().get("results")[1]['meeting_time'], "12:34:00")
         # capacity replaces participant_number
-        self.assertEqual(response.json().get("results")[0]['participant_number'], '12')
+        self.assertEqual(response.json().get("results")[1]['participant_number'], '12')
         # Event with end date returns right end date
-        self.assertEqual(response.json().get("results")[1]['end_date'], "2202-02-22")
+        self.assertEqual(response.json().get("results")[0]['end_date'], "2202-02-22")
         # Sorted by end date
-        self.assertLessEqual(response.json().get("results")[0]['end_date'], response.json().get("results")[1]['end_date'])
+        self.assertLessEqual(response.json().get("results")[0]['begin_date'], response.json().get("results")[1]['begin_date'])
 
     def test_touristic_event_dates_filters_1(self):
         response = self.get_touristicevent_list({'dates_before': '2200-01-01', 'dates_after': '1970-01-01'})