Projet

Général

Profil

Bug #46974

agenda virtuel : erreur sur l'ajout d'un agenda qui eu de l'activité sur ses types de rendez-vous

Ajouté par Thomas Noël 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:
24 septembre 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Quand on veut ajouter un agenda dans un agenda virtuel, mais que ce premier agenda a des meetingtype marqués comme "deleted" (cf #44132), il peut y avoir refus si le type est incompatible avec les types des agendas déjà existants dans l'agenda virtuel.

J'imagine qu'il faut ajouter un delete=False dans les requêtes qui cherchent à vérifier la cohérence des meetingtype.


Fichiers

Révisions associées

Révision d7a75f17 (diff)
Ajouté par Lauréline Guérin il y a plus de 3 ans

virtual agenda: don't check deleted meeting types (#46974)

Révision 52b48d6b (diff)
Ajouté par Lauréline Guérin il y a plus de 3 ans

perfs: less queryset in VirtualMember clean method (#46974)

Historique

#2

Mis à jour par Thomas Noël il y a plus de 3 ans

J'imagine quelque chose comme :

diff --git a/chrono/agendas/models.py b/chrono/agendas/models.py
index a36d212..0ece0b7 100644
--- a/chrono/agendas/models.py
+++ b/chrono/agendas/models.py
@@ -515,6 +515,7 @@ class VirtualMember(models.Model):
                     label=meetingtype.label,
                     slug=meetingtype.slug,
                     duration=meetingtype.duration,
+                    deleted=False,
                 )
             except MeetingType.DoesNotExist:
                 error = True
@@ -531,9 +532,9 @@ class VirtualMember(models.Model):
         num_virt_meetingtypes = len(virtual_meetingtypes)
         if (
             num_virt_meetingtypes
-            and num_virt_meetingtypes != MeetingType.objects.filter(agenda=self.real_agenda).count()
+            and num_virt_meetingtypes != MeetingType.objects.filter(agenda=self.real_agenda, deleted=False).count()
         ):
-            extra_qs = MeetingType.objects.filter(agenda=self.real_agenda)
+            extra_qs = MeetingType.objects.filter(agenda=self.real_agenda, deleted=False)
             for virt_meetingtype in virtual_meetingtypes:
                 extra_qs = extra_qs.exclude(
                     slug=virt_meetingtype.slug,

mais je m'avoue un peu dépassé :/

#3

Mis à jour par Benjamin Dauvergne il y a plus de 3 ans

iter_meetingtypes() contient déjà des deleted=False donc de ce coté ça doit aller, ils manquent donc juste ceux de la deuxième partie du patch que tu décris (mais sans test on ne saura pas vraiment).

#4

Mis à jour par Lauréline Guérin il y a plus de 3 ans

  • Assigné à mis à Lauréline Guérin
#7

Mis à jour par Thomas Noël il y a plus de 3 ans

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

Et en plus le code devient quasi lisible (pour moi). Que demander de plus ?

#8

Mis à jour par Lauréline Guérin il y a plus de 3 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 52b48d6b786fa2a85c519e15d7f4ac08087b2530
Author: Lauréline Guérin <zebuline@entrouvert.com>
Date:   Fri Sep 25 14:54:29 2020 +0200

    perfs: less queryset in VirtualMember clean method (#46974)

commit d7a75f172c3e65e8103ea9a6591244bf4a081ffb
Author: Lauréline Guérin <zebuline@entrouvert.com>
Date:   Fri Sep 25 14:51:55 2020 +0200

    virtual agenda: don't check deleted meeting types (#46974)
#9

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