8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-12-23 15:33:45 +00:00

Buy a membership during the registration

This commit is contained in:
Yohann D'ANELLO 2021-02-01 02:36:03 +01:00
parent 71a08a4b19
commit 37ff0c7974
No known key found for this signature in database
GPG key ID: 3A75C55819C8CF85
3 changed files with 59 additions and 3 deletions

View file

@ -21,7 +21,10 @@
from django import forms from django import forms
from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.forms import UserCreationForm
from django.db.models import Q
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from cotisations.models import Article, Paiement
from re2o.widgets import AutocompleteModelWidget from re2o.widgets import AutocompleteModelWidget
from users.models import Adherent from users.models import Adherent
@ -49,3 +52,15 @@ class AdherentForm(UserCreationForm):
}, },
), ),
} }
class MembershipForm(forms.Form):
payment_method = forms.ModelChoiceField(
Paiement.objects.filter(available_for_everyone=True),
)
article = forms.ModelChoiceField(
Article.objects.filter(Q(duration_connection__gt=0) | Q(duration_days_connection__gt=0),
available_for_everyone=True,
need_membership=False),
)

View file

@ -11,6 +11,7 @@
<form class="form" method="post"> <form class="form" method="post">
{% csrf_token %} {% csrf_token %}
{% bootstrap_form form %} {% bootstrap_form form %}
{% bootstrap_form membership_form %}
{% trans "Confirm" as tr_confirm %} {% trans "Confirm" as tr_confirm %}
{% bootstrap_button tr_confirm button_type="submit" icon='ok' button_class='btn-success' %} {% bootstrap_button tr_confirm button_type="submit" icon='ok' button_class='btn-success' %}
</form> </form>

View file

@ -19,12 +19,14 @@
# with this program; if not, write to the Free Software Foundation, Inc., # with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
from cotisations.models import Facture, Vente
from cotisations.utils import find_payment_method
from django.contrib.auth import login from django.contrib.auth import login
from django.db import transaction from django.db import transaction
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.views.generic import CreateView from django.views.generic import CreateView
from .forms import AdherentForm from .forms import AdherentForm, MembershipForm
class SignUpView(CreateView): class SignUpView(CreateView):
@ -33,13 +35,51 @@ class SignUpView(CreateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context["membership_form"] = MembershipForm(self.request.POST or None)
return context return context
@transaction.atomic @transaction.atomic
def form_valid(self, form): def form_valid(self, form):
ret = super().form_valid(form) membership_form = MembershipForm(self.request.POST or None)
if not membership_form.is_valid():
return self.form_invalid(form)
form.save()
user = form.instance
login(self.request, form.instance) login(self.request, form.instance)
return ret
payment_method = membership_form.cleaned_data["payment_method"]
article = membership_form.cleaned_data["article"]
true_payment_method = find_payment_method(payment_method)
if hasattr(true_payment_method, "check_price"):
price_ok, msg = true_payment_method.check_price(article.prix, user)
if not price_ok:
membership_form.add_error(None, msg)
return self.form_invalid(membership_form)
invoice = Facture.objects.create(
user=user,
paiement=payment_method,
)
Vente.objects.create(
facture=invoice,
name=article.name,
prix=article.prix,
duration_connection=article.duration_connection,
duration_days_connection=article.duration_days_connection,
duration_membership=article.duration_membership,
duration_days_membership=article.duration_days_membership,
number=1,
)
super().form_valid(form)
# POOP CODE, pliz Re2o
return payment_method.end_payment(invoice, self.request)
def get_success_url(self): def get_success_url(self):
return reverse_lazy("users:profil", args=(self.object.pk,)) return reverse_lazy("users:profil", args=(self.object.pk,))