diff --git a/apps/member/forms.py b/apps/member/forms.py index e567fbd5de9aaa3b080f60f82be5e4460bf2c4e7..6fe95f5a1bf37369dbd9ecdc41dc1d773bf62f89 100644 --- a/apps/member/forms.py +++ b/apps/member/forms.py @@ -50,6 +50,12 @@ class ClubForm(forms.ModelForm): class MembershipForm(forms.ModelForm): + soge = forms.BooleanField( + label=_("Inscription paid by Société Générale"), + required=False, + help_text=_("Check this case is the Société Générale paid the inscription."), + ) + credit_type = forms.ModelChoiceField( queryset=NoteSpecial.objects, label=_("Credit type"), diff --git a/apps/member/views.py b/apps/member/views.py index f9b761350a3f7bbe33b86aaf2e8eafddf6a17776..50c3b8132c13c418e151af833adee93777185bc9 100644 --- a/apps/member/views.py +++ b/apps/member/views.py @@ -18,14 +18,14 @@ from django.views.generic.edit import FormMixin from django_tables2.views import SingleTableView from rest_framework.authtoken.models import Token from note.forms import ImageForm -from note.models import Alias, NoteUser +from note.models import Alias, NoteUser, NoteSpecial from note.models.transactions import Transaction, SpecialTransaction from note.tables import HistoryTable, AliasTable from permission.backends import PermissionBackend from permission.views import ProtectQuerysetMixin from .forms import ProfileForm, ClubForm, MembershipForm, CustomAuthenticationForm -from .models import Club, Membership +from .models import Club, Membership, Role from .tables import ClubTable, UserTable, MembershipTable @@ -355,6 +355,16 @@ class ClubAddMemberView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView): club = Club.objects.filter(PermissionBackend.filter_queryset(self.request.user, Club, "view"))\ .get(pk=self.kwargs["club_pk"]) form.fields['credit_amount'].initial = club.membership_fee_paid + + if club.name != "BDE": + del form.fields['soge'] + else: + fee = 0 + bde = Club.objects.get(name="BDE") + fee += bde.membership_fee_paid + kfet = Club.objects.get(name="Kfet") + fee += kfet.membership_fee_paid + context["total_fee"] = "{:.02f}".format(fee / 100, ) else: old_membership = self.get_queryset().get(pk=self.kwargs["pk"]) club = old_membership.club @@ -368,6 +378,16 @@ class ClubAddMemberView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView): form.fields['last_name'].initial = user.last_name form.fields['first_name'].initial = user.first_name + if club.name != "BDE" or user.profile.soge: + del form.fields['soge'] + else: + fee = 0 + bde = Club.objects.get(name="BDE") + fee += bde.membership_fee_paid if user.profile.paid else bde.membership_fee_unpaid + kfet = Club.objects.get(name="Kfet") + fee += kfet.membership_fee_paid if user.profile.paid else kfet.membership_fee_unpaid + context["total_fee"] = "{:.02f}".format(fee / 100, ) + context['club'] = club return context @@ -389,6 +409,18 @@ class ClubAddMemberView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView): last_name = form.cleaned_data["last_name"] first_name = form.cleaned_data["first_name"] bank = form.cleaned_data["bank"] + soge = form.cleaned_data["soge"] and not user.profile.soge and club.name == "BDE" + + if soge: + credit_type = NoteSpecial.objects.get(special_type="Virement bancaire") + bde = club + kfet = Club.objects.get(name="Kfet") + if user.profile.paid: + fee = bde.membership_fee_paid + kfet.membership_fee_paid + else: + fee = bde.membership_fee_unpaid + kfet.membership_fee_unpaid + credit_amount = fee + bank = "Société générale" if credit_type is None: credit_amount = 0 @@ -456,6 +488,33 @@ class ClubAddMemberView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView): valid=True, ) + if soge: + user.profile.soge = True + user.profile.save() + + kfet = Club.objects.get(name="Kfet") + kfet_fee = kfet.membership_fee_paid if user.profile.paid else kfet.membership_fee_unpaid + + old_membership = Membership.objects.filter( + club__name="Kfet", + user=user, + date_start__lte=datetime.today(), + date_end__gte=datetime.today(), + ) + + membership = Membership.objects.create( + club=kfet, + user=user, + fee=kfet_fee, + date_start=old_membership.get().date_end + timedelta(days=1) + if old_membership.exists() else form.instance.date_start, + ) + if old_membership.exists(): + membership.roles.set(old_membership.get().roles.all()) + else: + membership.roles.add(Role.objects.get(name="Adhérent Kfet")) + membership.save() + return super().form_valid(form) def get_success_url(self): diff --git a/templates/member/add_members.html b/templates/member/add_members.html index f9b2276d69b14de766fdf1d64ca5c83102aaca46..ad6f1f297a77ec7e2d58e401405fd0414f4a61ce 100644 --- a/templates/member/add_members.html +++ b/templates/member/add_members.html @@ -16,14 +16,40 @@ {% endblock %} {% block extrajavascript %} -<script> - function autocompleted(user) { - $("#id_last_name").val(user.last_name); - $("#id_first_name").val(user.first_name); - $.getJSON("/api/members/profile/" + user.id + "/", function(profile) { - let fee = profile.paid ? {{ club.membership_fee_paid }} : {{ club.membership_fee_unpaid }}; - $("#id_credit_amount").val((fee / 100).toFixed(2)); - }); - } -</script> + <script> + function autocompleted(user) { + $("#id_last_name").val(user.last_name); + $("#id_first_name").val(user.first_name); + $.getJSON("/api/members/profile/" + user.id + "/", function(profile) { + let fee = profile.paid ? {{ club.membership_fee_paid }} : {{ club.membership_fee_unpaid }}; + $("#id_credit_amount").val((fee / 100).toFixed(2)); + }); + } + + soge_field = $("#id_soge"); + + function fillFields() { + let checked = soge_field.is(':checked'); + if (!checked) { + $("input").attr('disabled', false); + $("#id_user").attr('disabled', true); + $("select").attr('disabled', false); + return; + } + + let credit_type = $("#id_credit_type"); + credit_type.attr('disabled', true); + credit_type.val(4); + + let credit_amount = $("#id_credit_amount"); + credit_amount.attr('disabled', true); + credit_amount.val('{{ total_fee }}'); + + let bank = $("#id_bank"); + bank.attr('disabled', true); + bank.val('Société générale'); + } + + soge_field.change(fillFields); + </script> {% endblock %}