Bug #42332
Erreur dans le filtrage de rendez-vous bookés (dans get_all_slots())
Statut:
Rejeté
Priorité:
Normal
Assigné à:
-
Catégorie:
-
Version cible:
-
Début:
30 avril 2020
Echéance:
% réalisé:
0%
Temps estimé:
Patch proposed:
Non
Planning:
Non
Description
Je pense qu'il y a actuellement une erreur arithmétique dans le filtrage des rendez-vous déjà bookés :
agenda.event_set.filter( agenda=agenda, start_datetime__gte=used_min_datetime, start_datetime__lte=used_max_datetime + meeting_duration_td )
logiquement la condition d'un chevauchement de taille non nulle avec
[min_datetime,max_datetime]
et si on avait un attribute end_datetime sur Event ce serait :start_datetime < max_datetime end_datetime > min_datetime # (mesure([a,b] ∩ [c,d]) > 0) ⇔ (a < d et c < b))
comme a pas de
end_datetime
mais qu'on le calcule via start_datetime + meeting_duration_td
ça devient :start_datetime < max_datetime start_datetime + meeting_duration_td > min_datetime
et donc :
start_datetime < max_datetime start_datetime > min_datetime - meeting_duration_td
ou
start_datetime__lt=used_max_datetime, start_datetime__gt=used_min_datetime - meeting_duration_td,
Demandes liées
Historique
Mis à jour par Benjamin Dauvergne il y a presque 4 ans
- Lié à Development #42169: perfs, structure/algos sur les intervalles ajouté
Mis à jour par Benjamin Dauvergne il y a presque 4 ans
- Statut changé de Nouveau à Rejeté
Je n'avais pas vu que get_min_datetime()/get_max_datetime() étaient toujours calés à 0h00 ou minuit du jour concerné, il n'y a pas de problème dans ce cas (sauf si une page d'ouverture commence à 0h00 un jour, on va attendre que ça arrive).