Development #47395
Calendrier d'indisponibilités : gérer l'affichage des indisponbilité dans les vues de listing des exceptions
0%
Description
Dans chrono-manager-time-period-exception-extract-list
et chrono-manager-time-period-exception-list
il faudrait aussi aller chercher les exceptions qui viennent des calendriers d'indisponiblités activés sur le guichet.
Peut-être marquer visuellement qu'il y a des exceptions qui sont paramétrées directement sur le guichet, et d'autre qui viennent de calendriers d'indisponibilités.
Ces dernières ne doivent pas pouvoir être éditées/supprimées en passant par ces vues.
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Emmanuel Cazenave il y a plus de 3 ans
- Lié à Development #46555: Permettre de poser une exception qui s'applique sur plusieurs agenda ajouté
Mis à jour par Emmanuel Cazenave il y a plus de 3 ans
- Statut changé de Nouveau à En cours
- Assigné à mis à Emmanuel Cazenave
Mis à jour par Emmanuel Cazenave il y a plus de 3 ans
- Fichier 0001-manager-grab-exceptions-from-unavailability-calendar.patch 0001-manager-grab-exceptions-from-unavailability-calendar.patch ajouté
- Statut changé de En cours à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Valentin Deniaud il y a plus de 3 ans
Il faut aussi les afficher dans la mini liste des exceptions qu'on voit par guichet sur la page de paramétrage d'un agenda.
Et en faisant ça, on remarque que la propritété from_settings
sert exactement aux mêmes endroits que exception.unavailability_calendar
, ça vaut peut être le coup de la remplacer par un can_be_deleted
qui engloberait les deux.
Mis à jour par Emmanuel Cazenave il y a plus de 3 ans
- Fichier 0001-manager-grab-exceptions-from-unavailability-calendar.patch 0001-manager-grab-exceptions-from-unavailability-calendar.patch ajouté
Valentin Deniaud a écrit :
Il faut aussi les afficher dans la mini liste des exceptions qu'on voit par guichet sur la page de paramétrage d'un agenda.
Oui bien vu, voilà.
Et en faisant ça, on remarque que la propritété
from_settings
sert exactement aux mêmes endroits queexception.unavailability_calendar
, ça vaut peut être le coup de la remplacer par uncan_be_deleted
qui engloberait les deux.
J'ai opté pour read_only
parce que ça détermine aussi l'affichage d'un lien vers la vue d'édition.
Et tout ceci fait augmenter significativement le nombre de requêtes en DB sur la vue settings cf le test modifié.
Pas trivial d'optimiser ça, je me suis perdu un bon moment dans la doc de l'ORM django sans rien en retirer d'utile, je laisserai bien l'optimisation éventuelle pour plus tard ou pour quelqu'un dans un autre ticket sauf si quelqu'un voit tout de suite un truc évident.
Mis à jour par Valentin Deniaud il y a plus de 3 ans
- Statut changé de Solution proposée à Solution validée
Emmanuel Cazenave a écrit :
Et tout ceci fait augmenter significativement le nombre de requêtes en DB sur la vue settings cf le test modifié.
Pas trivial d'optimiser ça, je me suis perdu un bon moment dans la doc de l'ORM django sans rien en retirer d'utile, je laisserai bien l'optimisation éventuelle pour plus tard ou pour quelqu'un dans un autre ticket sauf si quelqu'un voit tout de suite un truc évident.
Je note les choses plus explicitement pour ma compréhension : le truc qui fait exploser les requêtes c'est que timeperiodexception_set.all() était gratuit parce que préfetché, et là le remplacer par un filter fait une requête. Pas dramatique en soit, sauf que le code est écrit avec le prefetch en tête : le queryset gratuit et réévalué quatre fois par guichet, et comme on crée 10 guichets dans le test, bim 40 requêtes en plus.
Je ne sais pas si on s'en sort avec un prefetch compliqué ou si il faut réécrire le python : un autre ticket pour ça c'est bien, mais peut-être remplacer le commentaire qui dit que timeperiodexception_set est préfetché par un FIXME ?
Mis à jour par Emmanuel Cazenave il y a plus de 3 ans
- Statut changé de Solution validée à Résolu (à déployer)
Pour la compréhension oui c'est un truc dans ce goût là, get_exceptions_within_two_weeks
utilisait self.timeperiodexception_set
qui avait été préfetché, maintenant on ne peux plus se servir self.timeperiodexception_set puisqu'il faut aussi aller chercher des exceptions venant de calendriers d'indispo.
A labourer la doc django plus quelques tentatives je ne crois pas qu'on puisse utilise prefetch_related ou d'autre bidouilles de l'ORM pour ce cas, je crois que le seul chemin c'est de taper des requêtes sur mesure dans get_context_data et de mettre les données en forme pour une exploitation dans le template. Of course je peux me planter.
J'ai mis à jour le commentaire.
commit 2370a8eafa336f96d02087b13ea4357c71254861 Author: Emmanuel Cazenave <ecazenave@entrouvert.com> Date: Wed Nov 4 14:16:32 2020 +0100 manager: grab exceptions from unavailability calendars (#47395)
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Statut changé de Résolu (à déployer) à Solution déployée
manager: grab exceptions from unavailability calendars (#47395)