{% blocktrans %}Already signed up? By logging in you can retrieve saved billing information.{% endblocktrans %}
-
@@ -58,7 +59,7 @@
{% endfor %}
@@ -153,22 +154,12 @@
{% endif %}
{% for message in messages %}
- {% if 'failed_payment' in message.tags or 'make_charge_error' in message.tags %}
+ {% if 'failed_payment' in message.tags or 'make_charge_error' in message.tags or 'error' in message.tags %}
{{ message|safe }}
- {% elif not form.non_field_errors %}
-
- {% trans "You are not making any payment yet. After placing your order, you will be taken to the Submit Payment Page." %}
-
{% endif %}
{% endfor %}
-
- {% for error in form.non_field_errors %}
-
- {{ error|escape }}
-
- {% endfor %}
diff --git a/datacenterlight/views.py b/datacenterlight/views.py
index 81c83685..bd1a7f51 100644
--- a/datacenterlight/views.py
+++ b/datacenterlight/views.py
@@ -345,26 +345,45 @@ class PaymentOrderView(FormView):
else:
return BillingAddressFormSignup
- def get_form_kwargs(self):
- form_kwargs = super(PaymentOrderView, self).get_form_kwargs()
- # if user is signed in, get billing address
- if self.request.user.is_authenticated():
- form_kwargs.update({
- 'instance': self.request.user.billing_addresses.first()
- })
- if 'billing_address_data' in self.request.session:
- billing_address_data = self.request.session['billing_address_data']
- form_kwargs.update({
- 'initial': billing_address_data
- })
- return form_kwargs
-
def get_context_data(self, **kwargs):
context = super(PaymentOrderView, self).get_context_data(**kwargs)
+ if 'billing_address_data' in self.request.session:
+ billing_address_data = self.request.session['billing_address_data']
+ else:
+ billing_address_data = {}
+
+ if self.request.user.is_authenticated():
+ if billing_address_data:
+ billing_address_form = BillingAddressForm(
+ initial=billing_address_data
+ )
+ else:
+ billing_address_form = BillingAddressForm(
+ instance=self.request.user.billing_addresses.first()
+ )
+ # Get user last order
+ last_hosting_order = HostingOrder.objects.filter(
+ customer__user=self.request.user
+ ).last()
+
+ # If user has already an hosting order, get the credit card
+ # data from it
+ if last_hosting_order:
+ credit_card_data = last_hosting_order.get_cc_data()
+ if credit_card_data:
+ context['credit_card_data'] = credit_card_data
+ else:
+ context['credit_card_data'] = None
+ else:
+ billing_address_form = BillingAddressFormSignup(
+ initial=billing_address_data
+ )
+
context.update({
'stripe_key': settings.STRIPE_API_PUBLIC_KEY,
'site_url': reverse('datacenterlight:index'),
- 'login_form': HostingUserLoginForm()
+ 'login_form': HostingUserLoginForm(prefix='login_form'),
+ 'billing_address_form': billing_address_form
})
return context
@@ -376,9 +395,32 @@ class PaymentOrderView(FormView):
return self.render_to_response(self.get_context_data())
def post(self, request, *args, **kwargs):
- form = self.get_form()
- if form.is_valid():
- token = form.cleaned_data.get('token')
+ if 'login_form' in request.POST:
+ login_form = HostingUserLoginForm(data=request.POST,
+ prefix='login_form')
+ if login_form.is_valid():
+ email = login_form.cleaned_data.get('email')
+ password = login_form.cleaned_data.get('password')
+ auth_user = authenticate(email=email, password=password)
+ if auth_user:
+ login(self.request, auth_user)
+ return HttpResponseRedirect(
+ reverse('datacenterlight:payment')
+ )
+ else:
+ context = self.get_context_data()
+ context['login_form'] = login_form
+ return self.render_to_response(context)
+ if request.user.is_authenticated():
+ address_form = BillingAddressForm(
+ data=request.POST,
+ )
+ else:
+ address_form = BillingAddressFormSignup(
+ data=request.POST,
+ )
+ if address_form.is_valid():
+ token = address_form.cleaned_data.get('token')
if request.user.is_authenticated():
this_user = {
'email': request.user.email,
@@ -388,8 +430,8 @@ class PaymentOrderView(FormView):
email=this_user.get('email'),
token=token)
else:
- user_email = form.cleaned_data.get('email')
- user_name = form.cleaned_data.get('name')
+ user_email = address_form.cleaned_data.get('email')
+ user_name = address_form.cleaned_data.get('name')
this_user = {
'email': user_email,
'name': user_name
@@ -422,13 +464,18 @@ class PaymentOrderView(FormView):
token=token,
customer_name=user_name)
- request.session['billing_address_data'] = form.cleaned_data
+ request.session['billing_address_data'] = address_form.cleaned_data
request.session['user'] = this_user
# Get or create stripe customer
if not customer:
- form.add_error("__all__", "Invalid credit card")
+ address_form.add_error(
+ "__all__", "Invalid credit card"
+ )
return self.render_to_response(
- self.get_context_data(form=form))
+ self.get_context_data(
+ billing_address_form=address_form
+ )
+ )
request.session['token'] = token
if type(customer) is StripeCustomer:
request.session['customer'] = customer.stripe_id
@@ -437,7 +484,9 @@ class PaymentOrderView(FormView):
return HttpResponseRedirect(
reverse('datacenterlight:order_confirmation'))
else:
- return self.form_invalid(form)
+ context = self.get_context_data()
+ context['billing_address_form'] = address_form
+ return self.render_to_response(context)
class OrderConfirmationView(DetailView):
@@ -548,9 +597,13 @@ class OrderConfirmationView(DetailView):
try:
custom_user = CustomUser.objects.get(
email=user.get('email'))
- customer = StripeCustomer.objects.filter(
+ stripe_customer = StripeCustomer.objects.filter(
user_id=custom_user.id).first()
- stripe_customer_id = customer.id
+ if stripe_customer is None:
+ stripe_customer = StripeCustomer.objects.create(
+ user=custom_user, stripe_id=stripe_api_cus_id
+ )
+ stripe_customer_id = stripe_customer.id
except CustomUser.DoesNotExist:
logger.debug(
"Customer {} does not exist.".format(user.get('email')))
diff --git a/hosting/forms.py b/hosting/forms.py
index 056d0004..7be7a588 100644
--- a/hosting/forms.py
+++ b/hosting/forms.py
@@ -29,6 +29,8 @@ class HostingUserLoginForm(forms.Form):
def clean(self):
email = self.cleaned_data.get('email')
password = self.cleaned_data.get('password')
+ if self.errors:
+ return self.cleaned_data
is_auth = authenticate(email=email, password=password)
if not is_auth:
raise forms.ValidationError(