settings page design
This commit is contained in:
parent
c87e2cd36b
commit
daa50d4672
3 changed files with 225 additions and 14 deletions
|
@ -6,6 +6,11 @@
|
||||||
max-width: 768px;
|
max-width: 768px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.dashboard-container.wide {
|
||||||
|
padding-top: 90px;
|
||||||
|
max-width: 980px;
|
||||||
|
}
|
||||||
|
|
||||||
.content-dashboard{
|
.content-dashboard{
|
||||||
min-height: calc(100vh - 70px);
|
min-height: calc(100vh - 70px);
|
||||||
width: 80%;
|
width: 80%;
|
||||||
|
@ -234,3 +239,26 @@
|
||||||
-ms-transform: translate(-50%,-50%);
|
-ms-transform: translate(-50%,-50%);
|
||||||
transform: translate(-50%,-50%);
|
transform: translate(-50%,-50%);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.settings-container {
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-container h4 {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-container .card-expiry-element,
|
||||||
|
.settings-container .card-cvc-element {
|
||||||
|
padding: 0 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-container .stripe-payment-btn {
|
||||||
|
float: none;
|
||||||
|
position: static;
|
||||||
|
}
|
||||||
|
|
||||||
|
.credit-card-form {
|
||||||
|
max-width: 360px;
|
||||||
|
}
|
151
hosting/templates/hosting/settings.html
Normal file
151
hosting/templates/hosting/settings.html
Normal file
|
@ -0,0 +1,151 @@
|
||||||
|
{% extends "hosting/base_short.html" %}
|
||||||
|
{% load staticfiles bootstrap3 i18n %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="dashboard-container wide">
|
||||||
|
<div class="dashboard-container-head">
|
||||||
|
<h1 class="dashboard-title-thin">{% trans "My Settings" %}</h1>
|
||||||
|
</div>
|
||||||
|
<!-- Credit card form -->
|
||||||
|
<div class="settings-container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-5 col-md-6 billing dcl-billing">
|
||||||
|
<h3>{%trans "Billing Address"%}</h3>
|
||||||
|
<hr>
|
||||||
|
<form role="form" id="billing-form" method="post" action="" novalidate>
|
||||||
|
{% for field in form %}
|
||||||
|
{% csrf_token %}
|
||||||
|
{% bootstrap_field field show_label=False type='fields'%}
|
||||||
|
{% endfor %}
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-7 col-md-6 creditcard-box dcl-creditcard">
|
||||||
|
<h3>{%trans "Credit Card"%}</h3>
|
||||||
|
<hr>
|
||||||
|
<div>
|
||||||
|
<div>
|
||||||
|
{% if credit_card_data.last4 %}
|
||||||
|
<form role="form" id="payment-form-with-creditcard" novalidate>
|
||||||
|
<h5 class="billing-head">Credit Card</h5>
|
||||||
|
<h5 class="membership-lead">Last 4: *****{{credit_card_data.last4}}</h5>
|
||||||
|
<h5 class="membership-lead">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 yet. After submitting your card information, you will be taken to the Confirm Order Page.{% 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>
|
||||||
|
{% endif %}
|
||||||
|
<h4>{% trans "Add new Card" %}</h4>
|
||||||
|
<form action="" id="payment-form-new" class="credit-card-form" method="POST">
|
||||||
|
<input type="hidden" name="token"/>
|
||||||
|
<div class="credit-card-goup">
|
||||||
|
<div class="card-element card-number-element">
|
||||||
|
<label>{%trans "Card Number" %}</label>
|
||||||
|
<div id="card-number-element" class="field my-input"></div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-6 col-sm-4 card-element card-expiry-element">
|
||||||
|
<label>{%trans "Expiry Date" %}</label>
|
||||||
|
<div id="card-expiry-element" class="field my-input"></div>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 col-sm-4 col-sm-offset-4 card-element card-cvc-element">
|
||||||
|
<label>{%trans "CVC" %}</label>
|
||||||
|
<div id="card-cvc-element" class="field my-input"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-element brand">
|
||||||
|
<label>{%trans "Card Type" %}</label>
|
||||||
|
<i class="pf pf-credit-card" id="brand-icon"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="card-errors" role="alert"></div>
|
||||||
|
<div>
|
||||||
|
{% if not messages and not form.non_field_errors %}
|
||||||
|
<p class="card-warning-content">
|
||||||
|
{% blocktrans %}You are not making any payment here. After submitting your card information, you will be taken to the Confirm Order Page.{% 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 class="row">
|
||||||
|
<div class="col-xs-6 col-xs-offset-6 text-right">
|
||||||
|
<button class="btn btn-success stripe-payment-btn" type="submit">{%trans "Submit" %}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="display:none;">
|
||||||
|
<p class="payment-errors"></p>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- stripe key data -->
|
||||||
|
{% if stripe_key %}
|
||||||
|
{% get_current_language as LANGUAGE_CODE %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
window.processing_text = '{%trans "Processing" %}';
|
||||||
|
window.enter_your_card_text = '{%trans "Enter your credit card number" %}';
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
window.stripeKey = "{{stripe_key}}";
|
||||||
|
window.current_lan = "{{LANGUAGE_CODE}}";
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
{%endif%}
|
||||||
|
|
||||||
|
{% if credit_card_data.last4 and credit_card_data.cc_brand %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
(function () {
|
||||||
|
window.hasCreditcard = true;
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
{%endif%}
|
||||||
|
{%endblock%}
|
|
@ -40,20 +40,6 @@ CONNECTION_ERROR = "Your VMs cannot be displayed at the moment due to a backend
|
||||||
connection error. please try again in a few minutes."
|
connection error. please try again in a few minutes."
|
||||||
|
|
||||||
|
|
||||||
class SettingsView(View):
|
|
||||||
template_name = "hosting/settings.html"
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
context = {
|
|
||||||
|
|
||||||
}
|
|
||||||
return context
|
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
|
||||||
context = self.get_context_data()
|
|
||||||
return render(request, self.template_name, context)
|
|
||||||
|
|
||||||
|
|
||||||
class DjangoHostingView(ProcessVMSelectionMixin, View):
|
class DjangoHostingView(ProcessVMSelectionMixin, View):
|
||||||
template_name = "hosting/django.html"
|
template_name = "hosting/django.html"
|
||||||
|
|
||||||
|
@ -489,6 +475,52 @@ class SSHKeyCreateView(LoginRequiredMixin, FormView):
|
||||||
return self.form_invalid(form)
|
return self.form_invalid(form)
|
||||||
|
|
||||||
|
|
||||||
|
class SettingsView(LoginRequiredMixin, FormView):
|
||||||
|
template_name = "hosting/settings.html"
|
||||||
|
login_url = reverse_lazy('hosting:login')
|
||||||
|
form_class = BillingAddressForm
|
||||||
|
|
||||||
|
def get_form_kwargs(self):
|
||||||
|
current_billing_address = self.request.user.billing_addresses.first()
|
||||||
|
form_kwargs = super(SettingsView, self).get_form_kwargs()
|
||||||
|
if not current_billing_address:
|
||||||
|
return form_kwargs
|
||||||
|
|
||||||
|
form_kwargs.update({
|
||||||
|
'initial': {
|
||||||
|
'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):
|
||||||
|
context = super(SettingsView, self).get_context_data(**kwargs)
|
||||||
|
# Get user
|
||||||
|
user = self.request.user
|
||||||
|
|
||||||
|
# Get user last order
|
||||||
|
last_hosting_order = HostingOrder.objects.filter(
|
||||||
|
customer__user=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()
|
||||||
|
context.update({
|
||||||
|
'credit_card_data': credit_card_data if credit_card_data else None,
|
||||||
|
})
|
||||||
|
|
||||||
|
context.update({
|
||||||
|
'stripe_key': settings.STRIPE_API_PUBLIC_KEY
|
||||||
|
})
|
||||||
|
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
class PaymentVMView(LoginRequiredMixin, FormView):
|
class PaymentVMView(LoginRequiredMixin, FormView):
|
||||||
template_name = 'hosting/payment.html'
|
template_name = 'hosting/payment.html'
|
||||||
login_url = reverse_lazy('hosting:login')
|
login_url = reverse_lazy('hosting:login')
|
||||||
|
|
Loading…
Reference in a new issue