Projet

Général

Profil

Development #71797

Plage horaire unique vs agenda virtuel et période d'exclusion

Ajouté par Emmanuel Cazenave il y a plus d'un an. Mis à jour il y a plus d'un an.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
28 novembre 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Un agenda avec une plage horaire régulière le mardi et une plage horaire unique un jeudi dans longtemps.

Un agenda virtuel avec des exclusion sur le mardi pour réserver certains horaires aux agents. On veut faire la même chose pour le jeudi dans longtemps, et comme on ne peut pas paramétrer de période d'exclusion unique, on met des périodes d'exclusion pour tous les jeudi.

Et bim dans le ../datetimes de l'agenda virtuel apparaissent des créneaux sur tous les jeudis, alors qu'il y a un seul jeudi d'ouvert.


Fichiers

Révisions associées

Révision 688c12e2 (diff)
Ajouté par Valentin Deniaud il y a plus d'un an

agendas: retain time period date attribute in exclusion computation (#71797)

Historique

#1

Mis à jour par Emmanuel Cazenave il y a plus d'un an

Un test pour reproduire.

#2

Mis à jour par Emmanuel Cazenave il y a plus d'un an

  • Lié à Development #70185: Permettre l'ajout d'une période horaire à une date spécifique ajouté
#3

Mis à jour par Emmanuel Cazenave il y a plus d'un an

  • Lié à Development #70185: Permettre l'ajout d'une période horaire à une date spécifique supprimé
#5

Mis à jour par Emmanuel Cazenave il y a plus d'un an

  • Statut changé de Solution proposée à Nouveau
  • Patch proposed changé de Oui à Non
#6

Mis à jour par Emmanuel Cazenave il y a plus d'un an

  • Assigné à changé de Valentin Deniaud à Emmanuel Cazenave
#7

Mis à jour par Emmanuel Cazenave il y a plus d'un an

Je suis tombé dans un bon puits.

Dans #70185, il y a eu ajout d'un attribut date sur la classe WeekTime. Les objets WeekTime sont utilisés dans IntervalSet pour faire des calculs ... d’intervalle.

Mais IntervalSet ne gère pas les date, il ne gère que des jours de la semaine et les heures, c'est un miracle que #70185 ait marché jusqu'à maintenant.

Je ne sais pas trop s'il faut aller de l'avant en essayant de faire gérer les dates à IntervalSet, je ne sais pas même pas si ça a un sens de faire des calculs d'intervalle sur un mélange d'objets datés/non datés.

#8

Mis à jour par Valentin Deniaud il y a plus d'un an

Emmanuel Cazenave a écrit :

Je ne sais pas trop s'il faut aller de l'avant en essayant de faire gérer les dates à IntervalSet, je ne sais pas même pas si ça a un sens de faire des calculs d'intervalle sur un mélange d'objets datés/non datés.

Dis comme ça moi non plus, en tout cas on ne peut pas revert, tu veux que je regarde ?

#9

Mis à jour par Emmanuel Cazenave il y a plus d'un an

Emmanuel Cazenave a écrit :

Je suis tombé dans un bon puits.

Mais IntervalSet ne gère pas les date, il ne gère que des jours de la semaine et les heures, c'est un miracle que #70185 ait marché jusqu'à maintenant.

Je me suis en peu emballé, le problème ici est assez localisé, c'est dans get_effective_time_periods_virtual :

IntervalSet.simple(*time_period_interval) - closed_hours_by_days

où on a à gauche un IntervalSet avec des périodes horaires datées, a droite des périodes horaires non datées, ça renvoie des périodes horaires non datées alors qu'on voudrait que la date reste. Et à la sortie cette apparition de créneaux tous les jeudis au lieu du jeudi machin.

J'y ai pensé un moment :

  • pour faire en sorte que IntervalSet gère ce cas correctement : je sèche complètement, le code est dur dur.
  • contourner en revoyant l'implémentation de #70185 pour ne pas tomber de ce cas : c'est le gros chantier

Je propose ici une troisième voie au plus simple : que les exclusions de périodes horaires n'aient pas d'influence sur les périodes horaires datées.

Ça me semble pas un comportement incohérent, ça peut appeler un nouveau développement qui serait "permettre les exclusions datées", ça peut aussi être vu comme une solution transitoire pour ne plus avoir ce bug assez sale, en attendant mieux.

(et là tout de suite flemme de comprendre comment faire avec gitea, je met mon patch à l'ancienne).

#10

Mis à jour par Emmanuel Cazenave il y a plus d'un an

Emmanuel Cazenave a écrit :

J'y ai pensé un moment :

passé

#11

Mis à jour par Valentin Deniaud il y a plus d'un an

Emmanuel Cazenave a écrit :

Ça me semble pas un comportement incohérent

Moi je trouve ça pas follement cohérent non plus. J'ai l'impression que le problème se résume à « on perd l'info de date après la soustraction des périodes d'exclusion », donc le patch ça pourrait être « ne pas perdre l'info de date » : patch attaché, avec le test que tu as écrit qui passe. Tu en penses quoi ?

#12

Mis à jour par Emmanuel Cazenave il y a plus d'un an

Malin le patch, bien vu, je suis vexé de pas avoir trouvé ça.

Je pense quand même que la politique pas d'interactions entre périodes datées et exclusions non datées a plus d'avenir (sous réserve de faire le dev exclusions datées). Genre une plage d'ouverture le premier samedi du mois, avec des exclusions. Puis une ouverture exceptionnelle un samedi machin où on voudrait des exclusions différentes ou pas d'exclusions; ça me semble plus souple.

Un troisième avis façon juge de paix me semble bienvenu.

#13

Mis à jour par Emmanuel Cazenave il y a plus d'un an

  • Statut changé de Solution proposée à Solution validée
  • Assigné à changé de Emmanuel Cazenave à Valentin Deniaud

Emmanuel Cazenave a écrit :

Un troisième avis façon juge de paix me semble bienvenu.

Et benj de ton avis sur jabber, allez zou.

#14

Mis à jour par Valentin Deniaud il y a plus d'un an

Je pense que maintenant qu'on a compris le problème on peut faire mieux que le test qui réplique exactement la situation découverte dans le ticket lié : ce qui déclenche le bug c'est le fait d'avoir plus d'une période d'exclusion sur l'agenda virtuel, c'est donc plus explicite de restreindre le test à ça.

#15

Mis à jour par Emmanuel Cazenave il y a plus d'un an

  • Statut changé de Solution proposée à Solution validée
#16

Mis à jour par Valentin Deniaud il y a plus d'un an

  • Statut changé de Solution validée à Résolu (à déployer)
commit 688c12e20172e84642321e8a8881631facc0934c
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Thu Dec 1 17:04:18 2022 +0100

    agendas: retain time period date attribute in exclusion computation (#71797)
#17

Mis à jour par Transition automatique il y a plus d'un an

  • Statut changé de Résolu (à déployer) à Solution déployée
#18

Mis à jour par Transition automatique il y a environ un an

Automatic expiration

Formats disponibles : Atom PDF