Projet

Général

Profil

Development #47395

Calendrier d'indisponibilités : gérer l'affichage des indisponbilité dans les vues de listing des exceptions

Ajouté par Emmanuel Cazenave il y a plus de 3 ans. Mis à jour il y a plus de 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
06 octobre 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

Lié à Chrono - Development #46555: Permettre de poser une exception qui s'applique sur plusieurs agendaFermé11 septembre 2020

Actions

Révisions associées

Révision 2370a8ea (diff)
Ajouté par Emmanuel Cazenave il y a plus de 3 ans

manager: grab exceptions from unavailability calendars (#47395)

Historique

#1

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é
#2

Mis à jour par Emmanuel Cazenave il y a plus de 3 ans

  • Statut changé de Nouveau à En cours
  • Assigné à mis à Emmanuel Cazenave
#3

Mis à jour par Emmanuel Cazenave il y a plus de 3 ans

#4

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.

#5

Mis à jour par Emmanuel Cazenave il y a plus de 3 ans

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 que exception.unavailability_calendar, ça vaut peut être le coup de la remplacer par un can_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.

#6

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 ?

#7

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)
#8

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

Formats disponibles : Atom PDF