mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-11-04 09:12:11 +01:00 
			
		
		
		
	Merge branch 'beta' into ouvreureuse
This commit is contained in:
		@@ -346,8 +346,8 @@ X-WR-CALNAME:Kfet Calendar
 | 
			
		||||
NAME:Kfet Calendar
 | 
			
		||||
CALSCALE:GREGORIAN
 | 
			
		||||
BEGIN:VTIMEZONE
 | 
			
		||||
TZID:Europe/Berlin
 | 
			
		||||
X-LIC-LOCATION:Europe/Berlin
 | 
			
		||||
TZID:Europe/Paris
 | 
			
		||||
X-LIC-LOCATION:Europe/Paris
 | 
			
		||||
BEGIN:DAYLIGHT
 | 
			
		||||
TZOFFSETFROM:+0100
 | 
			
		||||
TZOFFSETTO:+0200
 | 
			
		||||
@@ -369,10 +369,10 @@ END:VTIMEZONE
 | 
			
		||||
DTSTAMP:{"{:%Y%m%dT%H%M%S}".format(activity.date_start)}Z
 | 
			
		||||
UID:{md5((activity.name + "$" + str(activity.id) + str(activity.date_start)).encode("UTF-8")).hexdigest()}
 | 
			
		||||
SUMMARY;CHARSET=UTF-8:{self.multilines(activity.name, 75, 22)}
 | 
			
		||||
DTSTART;TZID=Europe/Berlin:{"{:%Y%m%dT%H%M%S}".format(activity.date_start)}
 | 
			
		||||
DTEND;TZID=Europe/Berlin:{"{:%Y%m%dT%H%M%S}".format(activity.date_end)}
 | 
			
		||||
DTSTART:{"{:%Y%m%dT%H%M%S}Z".format(activity.date_start)}
 | 
			
		||||
DTEND:{"{:%Y%m%dT%H%M%S}Z".format(activity.date_end)}
 | 
			
		||||
LOCATION:{self.multilines(activity.location, 75, 9) if activity.location else "Kfet"}
 | 
			
		||||
DESCRIPTION;CHARSET=UTF-8:""" + self.multilines(activity.description.replace("\n", "\\n"), 75, 26) + """
 | 
			
		||||
DESCRIPTION;CHARSET=UTF-8:""" + self.multilines(activity.description.replace("\n", "\\n"), 75, 26) + f"""
 | 
			
		||||
 -- {activity.organizer.name}
 | 
			
		||||
END:VEVENT
 | 
			
		||||
"""
 | 
			
		||||
 
 | 
			
		||||
@@ -56,13 +56,13 @@ def save_object(sender, instance, **kwargs):
 | 
			
		||||
    # noinspection PyProtectedMember
 | 
			
		||||
    previous = instance._previous
 | 
			
		||||
 | 
			
		||||
    # Si un utilisateur est connecté, on récupère l'utilisateur courant ainsi que son adresse IP
 | 
			
		||||
    # Si un⋅e utilisateur⋅rice est connecté⋅e, on récupère l'utilisateur⋅rice courant⋅e ainsi que son adresse IP
 | 
			
		||||
    request = get_current_request()
 | 
			
		||||
 | 
			
		||||
    if request is None:
 | 
			
		||||
        # Si la modification n'a pas été faite via le client Web, on suppose que c'est du à `manage.py`
 | 
			
		||||
        # On récupère alors l'utilisateur·trice connecté·e à la VM, et on récupère la note associée
 | 
			
		||||
        # IMPORTANT : l'utilisateur dans la VM doit être un des alias note du respo info
 | 
			
		||||
        # IMPORTANT : l'utilisateur⋅rice dans la VM doit être un des alias note du respo info
 | 
			
		||||
        ip = "127.0.0.1"
 | 
			
		||||
        username = Alias.normalize(getpass.getuser())
 | 
			
		||||
        note = NoteUser.objects.filter(alias__normalized_name=username)
 | 
			
		||||
@@ -134,13 +134,13 @@ def delete_object(sender, instance, **kwargs):
 | 
			
		||||
    if instance._meta.label_lower in EXCLUDED or hasattr(instance, "_no_signal"):
 | 
			
		||||
        return
 | 
			
		||||
 | 
			
		||||
    # Si un utilisateur est connecté, on récupère l'utilisateur courant ainsi que son adresse IP
 | 
			
		||||
    # Si un⋅e utilisateur⋅rice est connecté⋅e, on récupère l'utilisateur⋅rice courant⋅e ainsi que son adresse IP
 | 
			
		||||
    request = get_current_request()
 | 
			
		||||
 | 
			
		||||
    if request is None:
 | 
			
		||||
        # Si la modification n'a pas été faite via le client Web, on suppose que c'est du à `manage.py`
 | 
			
		||||
        # On récupère alors l'utilisateur·trice connecté·e à la VM, et on récupère la note associée
 | 
			
		||||
        # IMPORTANT : l'utilisateur dans la VM doit être un des alias note du respo info
 | 
			
		||||
        # IMPORTANT : l'utilisateur⋅rice dans la VM doit être un des alias note du respo info
 | 
			
		||||
        ip = "127.0.0.1"
 | 
			
		||||
        username = Alias.normalize(getpass.getuser())
 | 
			
		||||
        note = NoteUser.objects.filter(alias__normalized_name=username)
 | 
			
		||||
 
 | 
			
		||||
@@ -210,9 +210,9 @@ class MembershipForm(forms.ModelForm):
 | 
			
		||||
    class Meta:
 | 
			
		||||
        model = Membership
 | 
			
		||||
        fields = ('user', 'date_start')
 | 
			
		||||
        # Le champ d'utilisateur est remplacé par un champ d'auto-complétion.
 | 
			
		||||
        # Le champ d'utilisateur⋅rice est remplacé par un champ d'auto-complétion.
 | 
			
		||||
        # Quand des lettres sont tapées, une requête est envoyée sur l'API d'auto-complétion
 | 
			
		||||
        # et récupère les noms d'utilisateur valides
 | 
			
		||||
        # et récupère les noms d'utilisateur⋅rices valides
 | 
			
		||||
        widgets = {
 | 
			
		||||
            'user':
 | 
			
		||||
                Autocomplete(
 | 
			
		||||
 
 | 
			
		||||
@@ -295,7 +295,14 @@ class Club(models.Model):
 | 
			
		||||
 | 
			
		||||
        today = datetime.date.today()
 | 
			
		||||
 | 
			
		||||
        while (today - self.membership_start).days >= 365:
 | 
			
		||||
        # Avoid any problems on February 29
 | 
			
		||||
        if self.membership_start.month == 2 and self.membership_start.day == 29:
 | 
			
		||||
            self.membership_start -= datetime.timedelta(days=1)
 | 
			
		||||
        if self.membership_end.month == 2 and self.membership_end.day == 29:
 | 
			
		||||
            self.membership_end += datetime.timedelta(days=1)
 | 
			
		||||
 | 
			
		||||
        while today >= datetime.date(self.membership_start.year + 1,
 | 
			
		||||
                                     self.membership_start.month, self.membership_start.day):
 | 
			
		||||
            if self.membership_start:
 | 
			
		||||
                self.membership_start = datetime.date(self.membership_start.year + 1,
 | 
			
		||||
                                                      self.membership_start.month, self.membership_start.day)
 | 
			
		||||
@@ -473,10 +480,10 @@ class Membership(models.Model):
 | 
			
		||||
 | 
			
		||||
            if self.club.parent_club.name == "BDE":
 | 
			
		||||
                parent_membership.roles.set(
 | 
			
		||||
                    Role.objects.filter(Q(name="Adhérent BDE") | Q(name="Membre de club")).all())
 | 
			
		||||
                    Role.objects.filter(Q(name="Adhérent⋅e BDE") | Q(name="Membre de club")).all())
 | 
			
		||||
            elif self.club.parent_club.name == "Kfet":
 | 
			
		||||
                parent_membership.roles.set(
 | 
			
		||||
                    Role.objects.filter(Q(name="Adhérent Kfet") | Q(name="Membre de club")).all())
 | 
			
		||||
                    Role.objects.filter(Q(name="Adhérent⋅e Kfet") | Q(name="Membre de club")).all())
 | 
			
		||||
            else:
 | 
			
		||||
                parent_membership.roles.set(Role.objects.filter(name="Membre de club").all())
 | 
			
		||||
            parent_membership.save()
 | 
			
		||||
 
 | 
			
		||||
@@ -291,7 +291,7 @@ class TestMemberships(TestCase):
 | 
			
		||||
 | 
			
		||||
        response = self.client.post(reverse("member:club_manage_roles", args=(self.membership.pk,)), data=dict(
 | 
			
		||||
            roles=[role.id for role in Role.objects.filter(
 | 
			
		||||
                Q(name="Membre de club") | Q(name="Trésorier·ère de club") | Q(name="Bureau de club")).all()],
 | 
			
		||||
                Q(name="Membre de club") | Q(name="Trésorièr⋅e de club") | Q(name="Bureau de club")).all()],
 | 
			
		||||
        ))
 | 
			
		||||
        self.assertRedirects(response, self.user.profile.get_absolute_url(), 302, 200)
 | 
			
		||||
        self.membership.refresh_from_db()
 | 
			
		||||
 
 | 
			
		||||
@@ -827,8 +827,8 @@ class ClubAddMemberView(ProtectQuerysetMixin, ProtectedCreateView):
 | 
			
		||||
 | 
			
		||||
        ret = super().form_valid(form)
 | 
			
		||||
 | 
			
		||||
        member_role = Role.objects.filter(Q(name="Adhérent BDE") | Q(name="Membre de club")).all() \
 | 
			
		||||
            if club.name == "BDE" else Role.objects.filter(Q(name="Adhérent Kfet") | Q(name="Membre de club")).all() \
 | 
			
		||||
        member_role = Role.objects.filter(Q(name="Adhérent⋅e BDE") | Q(name="Membre de club")).all() \
 | 
			
		||||
            if club.name == "BDE" else Role.objects.filter(Q(name="Adhérent⋅e Kfet") | Q(name="Membre de club")).all() \
 | 
			
		||||
            if club.name == "Kfet"else Role.objects.filter(name="Membre de club").all()
 | 
			
		||||
        # Set the same roles as before
 | 
			
		||||
        if old_membership:
 | 
			
		||||
@@ -864,7 +864,7 @@ class ClubAddMemberView(ProtectQuerysetMixin, ProtectedCreateView):
 | 
			
		||||
                membership.refresh_from_db()
 | 
			
		||||
                if old_membership.exists():
 | 
			
		||||
                    membership.roles.set(old_membership.get().roles.all())
 | 
			
		||||
                membership.roles.set(Role.objects.filter(Q(name="Adhérent Kfet") | Q(name="Membre de club")).all())
 | 
			
		||||
                membership.roles.set(Role.objects.filter(Q(name="Adhérent⋅e Kfet") | Q(name="Membre de club")).all())
 | 
			
		||||
                membership.save()
 | 
			
		||||
 | 
			
		||||
        return ret
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
    Par ailleurs, le BDE ne sert pas d'alcool aux adhérents dont le solde
 | 
			
		||||
    Par ailleurs, le BDE ne sert pas d'alcool aux adhérent⋅es dont le solde
 | 
			
		||||
    est inférieur à 0 €.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -22,4 +22,4 @@ virement bancaire.
 | 
			
		||||
--
 | 
			
		||||
Le BDE
 | 
			
		||||
 | 
			
		||||
{% trans "Mail generated by the Note Kfet on the" %} {% now "j F Y à H:i:s" %}
 | 
			
		||||
{% trans "Mail generated by the Note Kfet on the" %} {% now "j F Y à H:i:s" %}
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@
 | 
			
		||||
			"mask": 1,
 | 
			
		||||
			"field": "",
 | 
			
		||||
			"permanent": true,
 | 
			
		||||
			"description": "Voir son compte utilisateur"
 | 
			
		||||
			"description": "Voir son compte utilisateur⋅rice"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -68,7 +68,7 @@
 | 
			
		||||
			"mask": 1,
 | 
			
		||||
			"field": "",
 | 
			
		||||
			"permanent": true,
 | 
			
		||||
			"description": "Voir sa propre note d'utilisateur"
 | 
			
		||||
			"description": "Voir sa propre note d'utilisateur⋅rice"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -116,7 +116,7 @@
 | 
			
		||||
			"mask": 1,
 | 
			
		||||
			"field": "",
 | 
			
		||||
			"permanent": false,
 | 
			
		||||
			"description": "Voir les aliases des notes des clubs et des adhérents du club BDE"
 | 
			
		||||
			"description": "Voir les alias des notes des clubs et des adhérent⋅es du club BDE"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -772,7 +772,7 @@
 | 
			
		||||
			"mask": 3,
 | 
			
		||||
			"field": "",
 | 
			
		||||
			"permanent": false,
 | 
			
		||||
			"description": "Voir les adhérents du club"
 | 
			
		||||
			"description": "Voir les adhérent⋅es du club"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -788,7 +788,7 @@
 | 
			
		||||
			"mask": 2,
 | 
			
		||||
			"field": "",
 | 
			
		||||
			"permanent": false,
 | 
			
		||||
			"description": "Ajouter un membre à un club"
 | 
			
		||||
			"description": "Ajouter un⋅e membre à un club"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -852,7 +852,7 @@
 | 
			
		||||
			"mask": 3,
 | 
			
		||||
			"field": "",
 | 
			
		||||
			"permanent": false,
 | 
			
		||||
			"description": "Modifier n'importe quel utilisateur"
 | 
			
		||||
			"description": "Modifier n'importe quel⋅le utilisateur⋅rice"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -868,7 +868,7 @@
 | 
			
		||||
			"mask": 3,
 | 
			
		||||
			"field": "",
 | 
			
		||||
			"permanent": false,
 | 
			
		||||
			"description": "Ajouter un utilisateur"
 | 
			
		||||
			"description": "Ajouter un⋅e utilisateur⋅rice"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -1284,7 +1284,7 @@
 | 
			
		||||
			"mask": 2,
 | 
			
		||||
			"field": "",
 | 
			
		||||
			"permanent": false,
 | 
			
		||||
			"description": "Inscrire un 1A au WEI"
 | 
			
		||||
			"description": "Inscrire un⋅e 1A au WEI"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -1956,7 +1956,7 @@
 | 
			
		||||
			"mask": 1,
 | 
			
		||||
			"field": "",
 | 
			
		||||
			"permanent": true,
 | 
			
		||||
			"description": "Voir mes activitées passées, même après la fin de l'adhésion BDE"
 | 
			
		||||
			"description": "Voir mes activités passées, même après la fin de l'adhésion BDE"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -2100,7 +2100,7 @@
 | 
			
		||||
			"mask": 3,
 | 
			
		||||
			"field": "",
 | 
			
		||||
			"permanent": false,
 | 
			
		||||
			"description": "Voir n'importe quel utilisateur"
 | 
			
		||||
			"description": "Voir n'importe quel⋅le utilisateur⋅rice"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -2228,7 +2228,7 @@
 | 
			
		||||
			"mask": 3,
 | 
			
		||||
			"field": "",
 | 
			
		||||
			"permanent": false,
 | 
			
		||||
			"description": "Créer une note d'utilisateur"
 | 
			
		||||
			"description": "Créer une note d'utilisateur⋅rice"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -2276,7 +2276,7 @@
 | 
			
		||||
			"mask": 3,
 | 
			
		||||
			"field": "",
 | 
			
		||||
			"permanent": false,
 | 
			
		||||
			"description": "Voir tous les adhérents de tous les clubs"
 | 
			
		||||
			"description": "Voir toustes les adhérent⋅es de tous les clubs"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -2292,7 +2292,7 @@
 | 
			
		||||
			"mask": 3,
 | 
			
		||||
			"field": "",
 | 
			
		||||
			"permanent": false,
 | 
			
		||||
			"description": "Ajouter un membre à n'importe quel club"
 | 
			
		||||
			"description": "Ajouter un⋅e membre à n'importe quel club"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -2372,7 +2372,7 @@
 | 
			
		||||
			"mask": 1,
 | 
			
		||||
			"field": "name",
 | 
			
		||||
			"permanent": false,
 | 
			
		||||
			"description": "Modifier le nom d'une activité non validée dont on est l'auteur"
 | 
			
		||||
			"description": "Modifier le nom d'une activité non validée dont on est l'auteur⋅rice"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -2388,7 +2388,7 @@
 | 
			
		||||
			"mask": 1,
 | 
			
		||||
			"field": "description",
 | 
			
		||||
			"permanent": false,
 | 
			
		||||
			"description": "Modifier la description d'une activité non validée dont on est l'auteur"
 | 
			
		||||
			"description": "Modifier la description d'une activité non validée dont on est l'auteur⋅rice"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -2404,7 +2404,7 @@
 | 
			
		||||
			"mask": 1,
 | 
			
		||||
			"field": "location",
 | 
			
		||||
			"permanent": false,
 | 
			
		||||
			"description": "Modifier le lieu d'une activité non validée dont on est l'auteur"
 | 
			
		||||
			"description": "Modifier le lieu d'une activité non validée dont on est l'auteur⋅rice"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -2420,7 +2420,7 @@
 | 
			
		||||
			"mask": 1,
 | 
			
		||||
			"field": "activity_type",
 | 
			
		||||
			"permanent": false,
 | 
			
		||||
			"description": "Modifier le type d'une activité non validée dont on est l'auteur"
 | 
			
		||||
			"description": "Modifier le type d'une activité non validée dont on est l'auteur⋅rice"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -2436,7 +2436,7 @@
 | 
			
		||||
			"mask": 1,
 | 
			
		||||
			"field": "organizer",
 | 
			
		||||
			"permanent": false,
 | 
			
		||||
			"description": "Modifier l'organisateur d'une activité non validée dont on est l'auteur"
 | 
			
		||||
			"description": "Modifier l'organisateur d'une activité non validée dont on est l'auteur⋅rice"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -2452,7 +2452,7 @@
 | 
			
		||||
			"mask": 1,
 | 
			
		||||
			"field": "attendees_club",
 | 
			
		||||
			"permanent": false,
 | 
			
		||||
			"description": "Modifier le club attendu d'une activité non validée dont on est l'auteur"
 | 
			
		||||
			"description": "Modifier le club attendu d'une activité non validée dont on est l'auteur⋅rice"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -2468,7 +2468,7 @@
 | 
			
		||||
			"mask": 1,
 | 
			
		||||
			"field": "date_start",
 | 
			
		||||
			"permanent": false,
 | 
			
		||||
			"description": "Modifier la date de début d'une activité non validée dont on est l'auteur"
 | 
			
		||||
			"description": "Modifier la date de début d'une activité non validée dont on est l'auteur⋅rice"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -2484,7 +2484,7 @@
 | 
			
		||||
			"mask": 1,
 | 
			
		||||
			"field": "date_end",
 | 
			
		||||
			"permanent": false,
 | 
			
		||||
			"description": "Modifier la date de fin d'une activité non validée dont on est l'auteur"
 | 
			
		||||
			"description": "Modifier la date de fin d'une activité non validée dont on est l'auteur⋅rice"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -2756,7 +2756,7 @@
 | 
			
		||||
			"mask": 3,
 | 
			
		||||
			"field": "",
 | 
			
		||||
			"permanent": false,
 | 
			
		||||
			"description": "Modifier n'importe quel utilisateur non encore inscrit"
 | 
			
		||||
			"description": "Modifier n'importe quel⋅le utilisateur⋅rice non encore inscrit⋅e"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -2788,7 +2788,7 @@
 | 
			
		||||
			"mask": 3,
 | 
			
		||||
			"field": "",
 | 
			
		||||
			"permanent": false,
 | 
			
		||||
			"description": "Voir tous les alias, y compris ceux des non adhérents"
 | 
			
		||||
			"description": "Voir tous les alias, y compris ceux des non adhérent⋅es"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -2820,7 +2820,7 @@
 | 
			
		||||
			"mask": 2,
 | 
			
		||||
			"field": "",
 | 
			
		||||
			"permanent": false,
 | 
			
		||||
			"description": "Voir n'importe quel utilisateur non encore inscrit"
 | 
			
		||||
			"description": "Voir n'importe quel⋅le utilisateur⋅rice non encore inscrit⋅e"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -2847,12 +2847,12 @@
 | 
			
		||||
				"auth",
 | 
			
		||||
				"user"
 | 
			
		||||
			],
 | 
			
		||||
			"query": "{\"memberships__club__name\": \"BDE\", \"memberships__roles__name\": \"Adhérent BDE\", \"memberships__date_start__lte\": [\"today\"], \"memberships__date_end__gte\": [\"today\"]}",
 | 
			
		||||
			"query": "{\"memberships__club__name\": \"BDE\", \"memberships__roles__name\": \"Adhérent⋅e BDE\", \"memberships__date_start__lte\": [\"today\"], \"memberships__date_end__gte\": [\"today\"]}",
 | 
			
		||||
			"type": "view",
 | 
			
		||||
			"mask": 2,
 | 
			
		||||
			"field": "",
 | 
			
		||||
			"permanent": false,
 | 
			
		||||
			"description": "Voir n'importe quel utilisateur qui est adhérent BDE"
 | 
			
		||||
			"description": "Voir n'importe quel⋅le utilisateur⋅rice qui est adhérent⋅e BDE"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -3044,7 +3044,7 @@
 | 
			
		||||
			"mask": 3,
 | 
			
		||||
			"field": "",
 | 
			
		||||
			"permanent": false,
 | 
			
		||||
			"description": "Voir toutes les amitiés, y compris celles des non adhérents"
 | 
			
		||||
			"description": "Voir toutes les amitiés, y compris celles des non adhérent⋅es"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
@@ -3309,7 +3309,7 @@
 | 
			
		||||
		"pk": 1,
 | 
			
		||||
		"fields": {
 | 
			
		||||
			"for_club": 1,
 | 
			
		||||
			"name": "Adh\u00e9rent BDE",
 | 
			
		||||
			"name": "Adh\u00e9rent\u22c5e BDE",
 | 
			
		||||
			"permissions": [
 | 
			
		||||
				1,
 | 
			
		||||
				2,
 | 
			
		||||
@@ -3362,7 +3362,7 @@
 | 
			
		||||
		"pk": 2,
 | 
			
		||||
		"fields": {
 | 
			
		||||
			"for_club": 2,
 | 
			
		||||
			"name": "Adh\u00e9rent Kfet",
 | 
			
		||||
			"name": "Adh\u00e9rent\u22c5e Kfet",
 | 
			
		||||
			"permissions": [
 | 
			
		||||
				22,
 | 
			
		||||
				36,
 | 
			
		||||
@@ -3426,7 +3426,7 @@
 | 
			
		||||
		"pk": 5,
 | 
			
		||||
		"fields": {
 | 
			
		||||
			"for_club": null,
 | 
			
		||||
			"name": "Pr\u00e9sident\u00b7e de club",
 | 
			
		||||
			"name": "Pr\u00e9sident\u22c5e de club",
 | 
			
		||||
			"permissions": [
 | 
			
		||||
				62,
 | 
			
		||||
				142,
 | 
			
		||||
@@ -3439,7 +3439,7 @@
 | 
			
		||||
		"pk": 6,
 | 
			
		||||
		"fields": {
 | 
			
		||||
			"for_club": null,
 | 
			
		||||
			"name": "Tr\u00e9sorier\u00b7\u00e8re de club",
 | 
			
		||||
			"name": "Tr\u00e9sorièr\u22c5e de club",
 | 
			
		||||
			"permissions": [
 | 
			
		||||
				19,
 | 
			
		||||
				20,
 | 
			
		||||
@@ -3463,7 +3463,7 @@
 | 
			
		||||
		"pk": 7,
 | 
			
		||||
		"fields": {
 | 
			
		||||
			"for_club": 1,
 | 
			
		||||
			"name": "Pr\u00e9sident\u00b7e BDE",
 | 
			
		||||
			"name": "Pr\u00e9sident\u22c5e BDE",
 | 
			
		||||
			"permissions": [
 | 
			
		||||
				24,
 | 
			
		||||
				25,
 | 
			
		||||
@@ -3492,7 +3492,7 @@
 | 
			
		||||
		"pk": 8,
 | 
			
		||||
		"fields": {
 | 
			
		||||
			"for_club": 1,
 | 
			
		||||
			"name": "Tr\u00e9sorier\u00b7\u00e8re BDE",
 | 
			
		||||
			"name": "Tr\u00e9sorièr\u22c5e BDE",
 | 
			
		||||
			"permissions": [
 | 
			
		||||
				23,
 | 
			
		||||
				24,
 | 
			
		||||
@@ -3664,7 +3664,7 @@
 | 
			
		||||
		"pk": 13,
 | 
			
		||||
		"fields": {
 | 
			
		||||
			"for_club": null,
 | 
			
		||||
			"name": "Chef de bus",
 | 
			
		||||
			"name": "Chef\u22c5fe de bus",
 | 
			
		||||
			"permissions": [
 | 
			
		||||
				22,
 | 
			
		||||
				84,
 | 
			
		||||
@@ -3683,7 +3683,7 @@
 | 
			
		||||
		"pk": 14,
 | 
			
		||||
		"fields": {
 | 
			
		||||
			"for_club": null,
 | 
			
		||||
			"name": "Chef d'\u00e9quipe",
 | 
			
		||||
			"name": "Chef\u22c5fe d'\u00e9quipe",
 | 
			
		||||
			"permissions": [
 | 
			
		||||
				22,
 | 
			
		||||
				84,
 | 
			
		||||
@@ -3732,7 +3732,7 @@
 | 
			
		||||
		"pk": 18,
 | 
			
		||||
		"fields": {
 | 
			
		||||
			"for_club": null,
 | 
			
		||||
			"name": "Adhérent WEI",
 | 
			
		||||
			"name": "Adhérent\u22c5e WEI",
 | 
			
		||||
			"permissions": [
 | 
			
		||||
				77,
 | 
			
		||||
				114
 | 
			
		||||
 
 | 
			
		||||
@@ -36,8 +36,8 @@ class RightsTable(tables.Table):
 | 
			
		||||
 | 
			
		||||
    def render_roles(self, record):
 | 
			
		||||
        # If the user has the right to manage the roles, display the link to manage them
 | 
			
		||||
        roles = record.roles.filter((~(Q(name="Adhérent BDE")
 | 
			
		||||
                                     | Q(name="Adhérent Kfet")
 | 
			
		||||
        roles = record.roles.filter((~(Q(name="Adhérent⋅e BDE")
 | 
			
		||||
                                     | Q(name="Adhérent⋅e Kfet")
 | 
			
		||||
                                     | Q(name="Membre de club")
 | 
			
		||||
                                     | Q(name="Bureau de club"))
 | 
			
		||||
                                     & Q(weirole__isnull=True))).all()
 | 
			
		||||
 
 | 
			
		||||
@@ -58,7 +58,7 @@ class OAuth2TestCase(TestCase):
 | 
			
		||||
        # Create membership to validate permissions
 | 
			
		||||
        NoteUser.objects.create(user=self.user)
 | 
			
		||||
        membership = Membership.objects.create(user=self.user, club_id=bde.pk)
 | 
			
		||||
        membership.roles.add(Role.objects.get(name="Adhérent BDE"))
 | 
			
		||||
        membership.roles.add(Role.objects.get(name="Adhérent⋅e BDE"))
 | 
			
		||||
        membership.save()
 | 
			
		||||
 | 
			
		||||
        # User is now a member and can now see its own user detail
 | 
			
		||||
@@ -85,7 +85,7 @@ class OAuth2TestCase(TestCase):
 | 
			
		||||
        bde = Club.objects.get(name="BDE")
 | 
			
		||||
        NoteUser.objects.create(user=self.user)
 | 
			
		||||
        membership = Membership.objects.create(user=self.user, club_id=bde.pk)
 | 
			
		||||
        membership.roles.add(Role.objects.get(name="Adhérent BDE"))
 | 
			
		||||
        membership.roles.add(Role.objects.get(name="Adhérent⋅e BDE"))
 | 
			
		||||
        membership.save()
 | 
			
		||||
 | 
			
		||||
        resp = self.client.get(reverse('permission:scopes'))
 | 
			
		||||
 
 | 
			
		||||
@@ -35,11 +35,9 @@ class ProtectQuerysetMixin:
 | 
			
		||||
        try:
 | 
			
		||||
            return super().get_object(queryset)
 | 
			
		||||
        except Http404 as e:
 | 
			
		||||
            try:
 | 
			
		||||
                super().get_object(self.get_queryset(filter_permissions=False))
 | 
			
		||||
                raise PermissionDenied()
 | 
			
		||||
            except Http404:
 | 
			
		||||
            if self.get_queryset(filter_permissions=False).count() == self.get_queryset().count():
 | 
			
		||||
                raise e
 | 
			
		||||
            raise PermissionDenied()
 | 
			
		||||
 | 
			
		||||
    def get_form(self, form_class=None):
 | 
			
		||||
        form = super().get_form(form_class)
 | 
			
		||||
@@ -131,8 +129,8 @@ class RightsView(TemplateView):
 | 
			
		||||
            special_memberships = Membership.objects.filter(
 | 
			
		||||
                date_start__lte=date.today(),
 | 
			
		||||
                date_end__gte=date.today(),
 | 
			
		||||
            ).filter(roles__in=Role.objects.filter((~(Q(name="Adhérent BDE")
 | 
			
		||||
                                                      | Q(name="Adhérent Kfet")
 | 
			
		||||
            ).filter(roles__in=Role.objects.filter((~(Q(name="Adhérent⋅e BDE")
 | 
			
		||||
                                                      | Q(name="Adhérent⋅e Kfet")
 | 
			
		||||
                                                      | Q(name="Membre de club")
 | 
			
		||||
                                                      | Q(name="Bureau de club"))
 | 
			
		||||
                                                    & Q(weirole__isnull=True))))\
 | 
			
		||||
 
 | 
			
		||||
@@ -377,7 +377,7 @@ class FutureUserDetailView(ProtectQuerysetMixin, LoginRequiredMixin, FormMixin,
 | 
			
		||||
#                membership._soge = True
 | 
			
		||||
            membership.save()
 | 
			
		||||
            membership.refresh_from_db()
 | 
			
		||||
            membership.roles.add(Role.objects.get(name="Adhérent BDE"))
 | 
			
		||||
            membership.roles.add(Role.objects.get(name="Adhérent⋅e BDE"))
 | 
			
		||||
            membership.save()
 | 
			
		||||
 | 
			
		||||
        if join_kfet:
 | 
			
		||||
@@ -391,7 +391,7 @@ class FutureUserDetailView(ProtectQuerysetMixin, LoginRequiredMixin, FormMixin,
 | 
			
		||||
#                membership._soge = True
 | 
			
		||||
            membership.save()
 | 
			
		||||
            membership.refresh_from_db()
 | 
			
		||||
            membership.roles.add(Role.objects.get(name="Adhérent Kfet"))
 | 
			
		||||
            membership.roles.add(Role.objects.get(name="Adhérent⋅e Kfet"))
 | 
			
		||||
            membership.save()
 | 
			
		||||
 | 
			
		||||
        for club, join_club in join_clubs:
 | 
			
		||||
 
 | 
			
		||||
 Submodule apps/scripts updated: f580f9b9e9...472c9c33ce
									
								
							@@ -74,7 +74,7 @@ class WEIChooseBusForm(forms.Form):
 | 
			
		||||
        queryset=WEIRole.objects.filter(~Q(name="1A")),
 | 
			
		||||
        label=_("WEI Roles"),
 | 
			
		||||
        help_text=_("Select the roles that you are interested in."),
 | 
			
		||||
        initial=WEIRole.objects.filter(name="Adhérent WEI").all(),
 | 
			
		||||
        initial=WEIRole.objects.filter(name="Adhérent⋅e WEI").all(),
 | 
			
		||||
        widget=CheckboxSelectMultiple(),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -84,5 +84,5 @@ class Command(BaseCommand):
 | 
			
		||||
            s += sep + user.profile.section_generated
 | 
			
		||||
            s += sep + bus.name
 | 
			
		||||
            s += sep + (team.name if team else "--")
 | 
			
		||||
            s += sep + ", ".join(role.name for role in membership.roles.filter(~Q(name="Adhérent WEI")).all())
 | 
			
		||||
            s += sep + ", ".join(role.name for role in membership.roles.filter(~Q(name="Adhérent⋅e WEI")).all())
 | 
			
		||||
            self.stdout.write(s)
 | 
			
		||||
 
 | 
			
		||||
@@ -504,7 +504,7 @@ class TestWEIRegistration(TestCase):
 | 
			
		||||
                emergency_contact_phone='+33600000000',
 | 
			
		||||
                bus=[self.bus.id],
 | 
			
		||||
                team=[self.team.id],
 | 
			
		||||
                roles=[role.id for role in WEIRole.objects.filter(name="Adhérent WEI").all()],
 | 
			
		||||
                roles=[role.id for role in WEIRole.objects.filter(name="Adhérent⋅e WEI").all()],
 | 
			
		||||
                information_json=self.registration.information_json,
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
@@ -558,7 +558,7 @@ class TestWEIRegistration(TestCase):
 | 
			
		||||
                emergency_contact_phone='+33600000000',
 | 
			
		||||
                bus=[self.bus.id],
 | 
			
		||||
                team=[self.team.id],
 | 
			
		||||
                roles=[role.id for role in WEIRole.objects.filter(name="Adhérent WEI").all()],
 | 
			
		||||
                roles=[role.id for role in WEIRole.objects.filter(name="Adhérent⋅e WEI").all()],
 | 
			
		||||
                information_json=self.registration.information_json,
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
 
 | 
			
		||||
@@ -916,7 +916,7 @@ class WEIValidateRegistrationView(ProtectQuerysetMixin, ProtectedCreateView):
 | 
			
		||||
                    form["team"].initial = BusTeam.objects.get(pk=information["preferred_team_pk"][0])
 | 
			
		||||
                if "preferred_roles_pk" in information:
 | 
			
		||||
                    form["roles"].initial = WEIRole.objects.filter(
 | 
			
		||||
                        Q(pk__in=information["preferred_roles_pk"]) | Q(name="Adhérent WEI")
 | 
			
		||||
                        Q(pk__in=information["preferred_roles_pk"]) | Q(name="Adhérent⋅e WEI")
 | 
			
		||||
                    ).all()
 | 
			
		||||
        return form
 | 
			
		||||
 | 
			
		||||
@@ -1008,7 +1008,7 @@ class WEIValidateRegistrationView(ProtectQuerysetMixin, ProtectedCreateView):
 | 
			
		||||
 | 
			
		||||
        membership.save()
 | 
			
		||||
        membership.refresh_from_db()
 | 
			
		||||
        membership.roles.add(WEIRole.objects.get(name="Adhérent WEI"))
 | 
			
		||||
        membership.roles.add(WEIRole.objects.get(name="Adhérent⋅e WEI"))
 | 
			
		||||
 | 
			
		||||
        return super().form_valid(form)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user