diff --git a/home/views.py b/home/views.py index df4f15e9c2544cb0417f81509ff4177a6c0fe872..1865f160e453d602310fadd0eb02c40285b49f8b 100644 --- a/home/views.py +++ b/home/views.py @@ -238,7 +238,7 @@ class AdminView(SuperuserRequiredMixin, TemplateView): participants_2 = {x.participant for x in base_qs.filter(slot=slot_2)} intersection = participants_1.intersection(participants_2) if intersection: - errors += '<br> •  {} participe(nt) à la fois à "{}" et à "{}"'.format( + errors += '<br> •  {} participe à la fois à "{}" et à "{}"'.format( ", ".join(str(x) for x in intersection), slot_1, slot_2 ) @@ -262,6 +262,33 @@ class AdminView(SuperuserRequiredMixin, TemplateView): ) return '<li class="success">Toutes les activités demandant une liste de participants ont au moins un créneau</li>' + def validate_multiple_similar_inscription(self): + """verifie que personne n'est inscrit à la même activité plusieurs fois""" + slots = models.InterludesSlot.objects.filter(subscribing_open=True) + conflicts = [] + for i, slot_1 in enumerate(slots): + for slot_2 in slots[i+1:]: + if slot_1.activity == slot_2.activity: + conflicts.append((slot_1, slot_2)) + base_qs = models.InterludesActivityChoices.objects.filter( + accepted=True, participant__is_registered=True + ) + errors = "" + for slot_1, slot_2 in conflicts: + participants_1 = {x.participant for x in base_qs.filter(slot=slot_1)} + participants_2 = {x.participant for x in base_qs.filter(slot=slot_2)} + intersection = participants_1.intersection(participants_2) + if intersection: + errors += '<br> •  {} inscrit aux créneaux "{}" et "{}" de l\'activité "{}"'.format( + ", ".join(str(x) for x in intersection), slot_1, slot_2, slot_1.activity + ) + + if errors: + return '<li class="error">Des participants sont inscrits plusieurs fois à la même activité :{}</li>'.format( + errors + ) + return '<li class="success">Aucun inscrit plusieurs fois à une même activité</li>' + def validate_activity_allocation(self): settings = SiteSettings.load() validations = '<ul class="messagelist">' @@ -279,6 +306,7 @@ class AdminView(SuperuserRequiredMixin, TemplateView): # longer validations validations += self.validate_activity_participant_nb() validations += self.validate_activity_conflicts() + validations += self.validate_multiple_similar_inscription() validations += self.validate_slot_less() if settings.discord_link: