billing form in settings page

This commit is contained in:
Arvind Tiwari 2017-08-29 17:42:35 +05:30
parent 49cc441fa0
commit ce1d346bc1
5 changed files with 48 additions and 55 deletions

View file

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-29 14:38+0530\n" "POT-Creation-Date: 2017-08-29 17:41+0530\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -343,10 +343,7 @@ msgstr ""
msgid "Type" msgid "Type"
msgstr "Kartentyp" msgstr "Kartentyp"
msgid "You are not making any payment here." msgid "No Cards found for your account."
msgstr ""
msgid "Add new Card"
msgstr "" msgstr ""
msgid "Add your public SSH key" msgid "Add your public SSH key"

View file

@ -271,6 +271,20 @@
margin-top: 15px; margin-top: 15px;
} }
.settings-container .credit-card-details {
padding-bottom: 15px;
border-bottom: 1px solid #eee;
}
.settings-container .credit-card-details h5 {
font-weight: bold;
font-size: 16px;
}
.credit-card-form { .credit-card-form {
max-width: 360px; max-width: 360px;
} }
.btn-wide {
min-width: 120px;
}

View file

@ -17,6 +17,9 @@
{% csrf_token %} {% csrf_token %}
{% bootstrap_field field show_label=False type='fields'%} {% bootstrap_field field show_label=False type='fields'%}
{% endfor %} {% endfor %}
<div class="form-group text-right">
<button type="submit" class="btn btn-default btn-custom-delete btn-wide">Save</button>
</div>
</form> </form>
</div> </div>
<div class="col-sm-7 col-md-6 creditcard-box dcl-creditcard"> <div class="col-sm-7 col-md-6 creditcard-box dcl-creditcard">
@ -25,45 +28,14 @@
<div> <div>
<div> <div>
{% if credit_card_data.last4 %} {% if credit_card_data.last4 %}
<form role="form" id="payment-form-with-creditcard" novalidate> <div class="credit-card-details">
<h5 class="billing-head">{% trans "Credit Card" %}</h5> <h5 class="billing-head">{% trans "Credit Card" %}</h5>
<h5 class="membership-lead">{% trans "Last" %} 4: *****{{credit_card_data.last4}}</h5> <h5 class="membership-lead">{% trans "Last" %} 4: *****{{credit_card_data.last4}}</h5>
<h5 class="membership-lead">{% trans "Type" %}: {{credit_card_data.cc_brand}}</h5> <h5 class="membership-lead">{% trans "Type" %}: {{credit_card_data.cc_brand}}</h5>
<input type="hidden" name="credit_card_needed" value="false"/>
</form>
<div class="row">
<div class="col-xs-12">
{% if not messages and not form.non_field_errors %}
<p class="card-warning-content card-warning-addtional-margin">
{% blocktrans %}You are not making any payment here.{% endblocktrans %}
</p>
{% endif %}
<div id='payment_error'>
{% for message in messages %}
{% if 'failed_payment' or 'make_charge_error' in message.tags %}
<ul class="list-unstyled"><li>
<p class="card-warning-content card-warning-error">{{ message|safe }}</p>
</li></ul>
{% endif %}
{% endfor %}
{% for error in form.non_field_errors %}
<p class="card-warning-content card-warning-error">
{{ error|escape }}
</p>
{% endfor %}
</div>
</div>
<div class="col-xs-12">
<div class="col-xs-6 pull-right">
<button id="payment_button_with_creditcard" class="btn btn-success stripe-payment-btn"
type="submit">
{%trans "Submit" %}
</button>
</div>
</div>
</div> </div>
{% else %} {% else %}
<h4>{% trans "Add new Card" %}</h4> <h4>{% trans "No Cards found for your account." %}</h4>
{% comment %}
<form action="" id="payment-form-new" class="credit-card-form" method="POST"> <form action="" id="payment-form-new" class="credit-card-form" method="POST">
<input type="hidden" name="token"/> <input type="hidden" name="token"/>
<div class="credit-card-goup"> <div class="credit-card-goup">
@ -120,6 +92,7 @@
<p class="payment-errors"></p> <p class="payment-errors"></p>
</div> </div>
</form> </form>
{% endcomment %}
{% endif %} {% endif %}
</div> </div>
</div> </div>

View file

@ -480,22 +480,14 @@ class SettingsView(LoginRequiredMixin, FormView):
login_url = reverse_lazy('hosting:login') login_url = reverse_lazy('hosting:login')
form_class = BillingAddressForm form_class = BillingAddressForm
def get_form_kwargs(self): def get_form(self, form_class):
current_billing_address = self.request.user.billing_addresses.first() """
form_kwargs = super(SettingsView, self).get_form_kwargs() Check if the user already saved contact details. If so, then show
if not current_billing_address: the form populated with those details, to let user change them.
return form_kwargs """
return form_class(
form_kwargs.update({ instance=self.request.user.billing_addresses.first(),
'initial': { **self.get_form_kwargs())
'cardholder_name': current_billing_address.cardholder_name,
'street_address': current_billing_address.street_address,
'city': current_billing_address.city,
'postal_code': current_billing_address.postal_code,
'country': current_billing_address.country,
}
})
return form_kwargs
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(SettingsView, self).get_context_data(**kwargs) context = super(SettingsView, self).get_context_data(**kwargs)
@ -520,6 +512,22 @@ class SettingsView(LoginRequiredMixin, FormView):
return context return context
def post(self, request, *args, **kwargs):
form = self.get_form()
if form.is_valid():
billing_address_data = form.cleaned_data
billing_address_data.update({
'user': self.request.user.id
})
billing_address_user_form = UserBillingAddressForm(
instance=self.request.user.billing_addresses.first(),
data=billing_address_data)
billing_address_user_form.save()
return self.render_to_response(self.get_context_data())
else:
billing_address_data = form.cleaned_data
return self.form_invalid(form)
class PaymentVMView(LoginRequiredMixin, FormView): class PaymentVMView(LoginRequiredMixin, FormView):
template_name = 'hosting/payment.html' template_name = 'hosting/payment.html'

View file

@ -117,6 +117,7 @@ class UserBillingAddressForm(forms.ModelForm):
class Meta: class Meta:
model = UserBillingAddress model = UserBillingAddress
# cardholder name not saved
fields = ['street_address', 'city', 'postal_code', 'country', 'user'] fields = ['street_address', 'city', 'postal_code', 'country', 'user']
labels = { labels = {
'street_address': _('Street Building'), 'street_address': _('Street Building'),