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:
parent
71a08a4b19
commit
37ff0c7974
3 changed files with 59 additions and 3 deletions
|
@ -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),
|
||||||
|
)
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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,))
|
||||||
|
|
Loading…
Reference in a new issue