1
0
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:
Yohann D'ANELLO
2020-07-25 19:59:04 +02:00
parent fb5e2578af
commit 55bc288deb
6 changed files with 285 additions and 223 deletions

View File

@ -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(

View File

@ -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):

View File

@ -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,

View File

@ -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