mirror of
https://gitlab.crans.org/bde/nk20
synced 2025-06-20 17:41:55 +02:00
Some roles can only be given in some clubs
This commit is contained in:
@ -284,6 +284,7 @@ class Membership(models.Model):
|
||||
verbose_name=_('fee'),
|
||||
)
|
||||
|
||||
@property
|
||||
def valid(self):
|
||||
"""
|
||||
A membership is valid if today is between the start and the end date.
|
||||
@ -301,6 +302,13 @@ class Membership(models.Model):
|
||||
if not Membership.objects.filter(user=self.user, club=self.club.parent_club).exists():
|
||||
raise ValidationError(_('User is not a member of the parent club') + ' ' + self.club.parent_club.name)
|
||||
|
||||
for role in self.roles.all():
|
||||
club = role.for_club
|
||||
if club is not None:
|
||||
if club.pk != self.club_id:
|
||||
raise ValidationError(_('The role {role} does not apply to the club {club}.')
|
||||
.format(role=role.name, club=club.name))
|
||||
|
||||
created = not self.pk
|
||||
if created:
|
||||
if Membership.objects.filter(
|
||||
|
@ -24,6 +24,7 @@ from note.tables import HistoryTable, AliasTable
|
||||
from permission.backends import PermissionBackend
|
||||
from permission.models import Role
|
||||
from permission.views import ProtectQuerysetMixin
|
||||
from wei.models import WEIClub
|
||||
|
||||
from .forms import ProfileForm, ClubForm, MembershipForm, CustomAuthenticationForm
|
||||
from .models import Club, Membership
|
||||
@ -426,6 +427,8 @@ class ClubAddMemberView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView):
|
||||
club = Club.objects.filter(PermissionBackend.filter_queryset(self.request.user, Club, "view"))\
|
||||
.get(pk=self.kwargs["club_pk"], weiclub=None)
|
||||
form.fields['credit_amount'].initial = club.membership_fee_paid
|
||||
form.fields['roles'].queryset = Role.objects.filter(Q(weirole__isnull=not isinstance(club, WEIClub))
|
||||
& (Q(for_club__isnull=True) | Q(for_club=club))).all()
|
||||
form.fields['roles'].initial = Role.objects.filter(name="Membre de club").all()
|
||||
|
||||
# If the concerned club is the BDE, then we add the option that Société générale pays the membership.
|
||||
@ -445,6 +448,8 @@ class ClubAddMemberView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView):
|
||||
user = old_membership.user
|
||||
form.fields['user'].initial = user
|
||||
form.fields['user'].disabled = True
|
||||
form.fields['roles'].queryset = Role.objects.filter(Q(weirole__isnull=not isinstance(club, WEIClub))
|
||||
& (Q(for_club__isnull=True) | Q(for_club=club))).all()
|
||||
form.fields['roles'].initial = old_membership.roles.all()
|
||||
form.fields['date_start'].initial = old_membership.date_end + timedelta(days=1)
|
||||
form.fields['credit_amount'].initial = club.membership_fee_paid if user.profile.paid \
|
||||
@ -635,6 +640,11 @@ class ClubManageRolesView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView):
|
||||
del form.fields['last_name']
|
||||
del form.fields['first_name']
|
||||
del form.fields['bank']
|
||||
|
||||
club = self.object.club
|
||||
form.fields['roles'].queryset = Role.objects.filter(Q(weirole__isnull=isinstance(club, WEIClub))
|
||||
& (Q(for_club__isnull=True) | Q(for_club=club))).all()
|
||||
|
||||
return form
|
||||
|
||||
def get_success_url(self):
|
||||
|
@ -2059,6 +2059,7 @@
|
||||
"model": "permission.role",
|
||||
"pk": 1,
|
||||
"fields": {
|
||||
"for_club": 1,
|
||||
"name": "Adh\u00e9rent BDE",
|
||||
"permissions": [
|
||||
1,
|
||||
@ -2083,6 +2084,7 @@
|
||||
"model": "permission.role",
|
||||
"pk": 2,
|
||||
"fields": {
|
||||
"for_club": 2,
|
||||
"name": "Adh\u00e9rent Kfet",
|
||||
"permissions": [
|
||||
34,
|
||||
@ -2109,13 +2111,16 @@
|
||||
"model": "permission.role",
|
||||
"pk": 3,
|
||||
"fields": {
|
||||
"name": "Membre de club"
|
||||
"for_club": null,
|
||||
"name": "Membre de club",
|
||||
"permissions": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "permission.role",
|
||||
"pk": 4,
|
||||
"fields": {
|
||||
"for_club": null,
|
||||
"name": "Bureau de club",
|
||||
"permissions": [
|
||||
22,
|
||||
@ -2128,6 +2133,7 @@
|
||||
"model": "permission.role",
|
||||
"pk": 5,
|
||||
"fields": {
|
||||
"for_club": null,
|
||||
"name": "Pr\u00e9sident\u00b7e de club",
|
||||
"permissions": [
|
||||
50,
|
||||
@ -2140,6 +2146,7 @@
|
||||
"model": "permission.role",
|
||||
"pk": 6,
|
||||
"fields": {
|
||||
"for_club": null,
|
||||
"name": "Tr\u00e9sorier\u00b7\u00e8re de club",
|
||||
"permissions": [
|
||||
59,
|
||||
@ -2158,6 +2165,7 @@
|
||||
"model": "permission.role",
|
||||
"pk": 7,
|
||||
"fields": {
|
||||
"for_club": 1,
|
||||
"name": "Pr\u00e9sident\u00b7e BDE",
|
||||
"permissions": [
|
||||
24,
|
||||
@ -2172,6 +2180,7 @@
|
||||
"model": "permission.role",
|
||||
"pk": 8,
|
||||
"fields": {
|
||||
"for_club": 1,
|
||||
"name": "Tr\u00e9sorier\u00b7\u00e8re BDE",
|
||||
"permissions": [
|
||||
23,
|
||||
@ -2208,6 +2217,7 @@
|
||||
"model": "permission.role",
|
||||
"pk": 9,
|
||||
"fields": {
|
||||
"for_club": 1,
|
||||
"name": "Respo info",
|
||||
"permissions": [
|
||||
1,
|
||||
@ -2343,6 +2353,7 @@
|
||||
"model": "permission.role",
|
||||
"pk": 10,
|
||||
"fields": {
|
||||
"for_club": 2,
|
||||
"name": "GC Kfet",
|
||||
"permissions": [
|
||||
32,
|
||||
@ -2370,6 +2381,7 @@
|
||||
"model": "permission.role",
|
||||
"pk": 11,
|
||||
"fields": {
|
||||
"for_club": 2,
|
||||
"name": "Res[pot]",
|
||||
"permissions": [
|
||||
37,
|
||||
@ -2387,6 +2399,7 @@
|
||||
"model": "permission.role",
|
||||
"pk": 12,
|
||||
"fields": {
|
||||
"for_club": null,
|
||||
"name": "GC WEI",
|
||||
"permissions": [
|
||||
76,
|
||||
@ -2420,6 +2433,7 @@
|
||||
"model": "permission.role",
|
||||
"pk": 13,
|
||||
"fields": {
|
||||
"for_club": null,
|
||||
"name": "Chef de bus",
|
||||
"permissions": [
|
||||
117,
|
||||
@ -2435,6 +2449,7 @@
|
||||
"model": "permission.role",
|
||||
"pk": 14,
|
||||
"fields": {
|
||||
"for_club": null,
|
||||
"name": "Chef d'\u00e9quipe",
|
||||
"permissions": [
|
||||
116,
|
||||
@ -2448,27 +2463,34 @@
|
||||
"model": "permission.role",
|
||||
"pk": 15,
|
||||
"fields": {
|
||||
"name": "\u00c9lectron libre"
|
||||
"for_club": null,
|
||||
"name": "\u00c9lectron libre",
|
||||
"permissions": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "permission.role",
|
||||
"pk": 16,
|
||||
"fields": {
|
||||
"name": "\u00c9lectron libre (avec perm)"
|
||||
"for_club": null,
|
||||
"name": "\u00c9lectron libre (avec perm)",
|
||||
"permissions": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "permission.role",
|
||||
"pk": 17,
|
||||
"fields": {
|
||||
"name": "1A"
|
||||
"for_club": null,
|
||||
"name": "1A",
|
||||
"permissions": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"model": "permission.role",
|
||||
"pk": 18,
|
||||
"fields": {
|
||||
"for_club": null,
|
||||
"name": "Adhérent WEI",
|
||||
"permissions": [
|
||||
97,
|
||||
|
@ -320,6 +320,14 @@ class Role(models.Model):
|
||||
verbose_name=_("permissions"),
|
||||
)
|
||||
|
||||
for_club = models.ForeignKey(
|
||||
"member.Club",
|
||||
verbose_name=_("for club"),
|
||||
on_delete=models.PROTECT,
|
||||
null=True,
|
||||
default=None,
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
Reference in New Issue
Block a user