diff --git a/apps/member/forms.py b/apps/member/forms.py index a31acb80..c4849e2a 100644 --- a/apps/member/forms.py +++ b/apps/member/forms.py @@ -77,8 +77,6 @@ class ClubForm(forms.ModelForm): class MembershipForm(forms.ModelForm): - roles = forms.ModelMultipleChoiceField(queryset=Role.objects.filter(weirole=None).all()) - soge = forms.BooleanField( label=_("Inscription paid by Société Générale"), required=False, @@ -117,7 +115,7 @@ class MembershipForm(forms.ModelForm): class Meta: model = Membership - fields = ('user', 'roles', 'date_start') + fields = ('user', 'date_start') # Le champ d'utilisateur 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 @@ -133,3 +131,27 @@ class MembershipForm(forms.ModelForm): ), 'date_start': DatePickerInput(), } + +class MembershipRolesForm(forms.ModelForm): + user = forms.ModelChoiceField( + queryset=User.objects, + label=_("User"), + disabled=True, + widget=Autocomplete( + User, + attrs={ + 'api_url': '/api/user/', + 'name_field': 'username', + 'placeholder': 'Nom ...', + }, + ), + ) + + roles = forms.ModelMultipleChoiceField( + queryset=Role.objects.filter(weirole=None).all(), + label=_("Roles"), + ) + + class Meta: + model = Membership + fields = ('user', 'roles') \ No newline at end of file diff --git a/apps/member/views.py b/apps/member/views.py index bc0ed3dd..8e5a0f68 100644 --- a/apps/member/views.py +++ b/apps/member/views.py @@ -27,7 +27,7 @@ from permission.backends import PermissionBackend from permission.models import Role from permission.views import ProtectQuerysetMixin -from .forms import ProfileForm, ClubForm, MembershipForm, CustomAuthenticationForm, UserForm +from .forms import ProfileForm, ClubForm, MembershipForm, CustomAuthenticationForm, UserForm, MembershipRolesForm from .models import Club, Membership from .tables import ClubTable, UserTable, MembershipTable @@ -435,9 +435,6 @@ 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 hasattr(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. if club.name != "BDE": @@ -456,9 +453,6 @@ 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 hasattr(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 \ else club.membership_fee_unpaid @@ -588,6 +582,10 @@ class ClubAddMemberView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView): ret = super().form_valid(form) + member_role = Role.objects.filter(name="Membre de club").all() + form.instance.roles.set(member_role) + form.instance.save() + # If Société générale pays, then we assume that this is the BDE membership, and we auto-renew the # Kfet membership. if soge: @@ -629,7 +627,7 @@ class ClubManageRolesView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView): Manage the roles of a user in a club """ model = Membership - form_class = MembershipForm + form_class = MembershipRolesForm template_name = 'member/add_members.html' extra_context = {"title": _("Manage roles of an user in the club")} @@ -641,14 +639,6 @@ class ClubManageRolesView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView): def get_form(self, form_class=None): form = super().get_form(form_class) - # We don't create a full membership, we only update one field - form.fields['user'].disabled = True - del form.fields['date_start'] - del form.fields['credit_type'] - del form.fields['credit_amount'] - 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=not hasattr(club, 'weiclub'))