invoice page redesigned
This commit is contained in:
parent
6dfbf67d7d
commit
6c381dd3fb
7 changed files with 157 additions and 125 deletions
|
@ -580,9 +580,9 @@ a.unlink:hover {
|
||||||
}
|
}
|
||||||
|
|
||||||
.dcl-place-order-text{
|
.dcl-place-order-text{
|
||||||
font-size: 13px;
|
/* font-size: 13px; */
|
||||||
color: #808080;
|
color: #808080;
|
||||||
margin-bottom: 15px;
|
/* margin-bottom: 15px; */
|
||||||
}
|
}
|
||||||
|
|
||||||
.dcl-order-table-total .tbl-total {
|
.dcl-order-table-total .tbl-total {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
.order-detail-container {
|
.order-detail-container {
|
||||||
max-width: 600px;
|
max-width: 600px;
|
||||||
margin: 100px auto;
|
margin: 100px auto 40px;
|
||||||
border: 1px solid #ccc;
|
border: 1px solid #ccc;
|
||||||
padding: 30px;
|
padding: 30px;
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
.order-detail-container .dashboard-title-thin {
|
.order-detail-container .dashboard-title-thin {
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
|
margin-left: -3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.order-detail-container .dashboard-title-thin .un-icon {
|
.order-detail-container .dashboard-title-thin .un-icon {
|
||||||
|
@ -32,6 +33,7 @@
|
||||||
.order-detail-container .dashboard-container-head {
|
.order-detail-container .dashboard-container-head {
|
||||||
position: relative;
|
position: relative;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
margin-bottom: 38px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.order-detail-container .dashboard-container-options {
|
.order-detail-container .dashboard-container-options {
|
||||||
|
@ -43,4 +45,34 @@
|
||||||
height: 20px;
|
height: 20px;
|
||||||
/* margin-right: 5px; */
|
/* margin-right: 5px; */
|
||||||
width: 20px;
|
width: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-detail-container .order-details {
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-detail-container .order-details strong {
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-detail-container h4 {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-detail-container p {
|
||||||
|
margin-bottom: 5px;
|
||||||
|
color: #595959;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-detail-container hr {
|
||||||
|
margin: 15px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.order-confirm-btn {
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
}
|
}
|
15
hosting/static/hosting/js/order.js
Normal file
15
hosting/static/hosting/js/order.js
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('.btn-pdf').click(function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
var $target = $($(this).attr('data-target')) || $('body');
|
||||||
|
var fileName = $target.attr('id') + '.pdf';
|
||||||
|
html2pdf($target[0], {
|
||||||
|
filename: fileName,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
$('.btn-print').click(function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
console.log('a');
|
||||||
|
window.print();
|
||||||
|
});
|
||||||
|
});
|
|
@ -1,4 +1,5 @@
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
|
$('.modal-text').removeClass('hide');
|
||||||
var create_vm_form = $('#virtual_machine_create_form');
|
var create_vm_form = $('#virtual_machine_create_form');
|
||||||
create_vm_form.submit(function () {
|
create_vm_form.submit(function () {
|
||||||
$('#btn-create-vm').prop('disabled', true);
|
$('#btn-create-vm').prop('disabled', true);
|
||||||
|
@ -22,6 +23,7 @@ $(document).ready(function () {
|
||||||
fa_icon = $('.modal-icon > .fa');
|
fa_icon = $('.modal-icon > .fa');
|
||||||
fa_icon.attr('class', 'fa fa-times');
|
fa_icon.attr('class', 'fa fa-times');
|
||||||
$('.modal-header > .close').attr('class', 'close');
|
$('.modal-header > .close').attr('class', 'close');
|
||||||
|
$('.modal-text').addClass('hide');
|
||||||
if (typeof(create_vm_error_message) !== 'undefined') {
|
if (typeof(create_vm_error_message) !== 'undefined') {
|
||||||
$('#createvm-modal-title').text(create_vm_error_message);
|
$('#createvm-modal-title').text(create_vm_error_message);
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,6 +94,13 @@
|
||||||
<!-- Init JavaScript -->
|
<!-- Init JavaScript -->
|
||||||
<script src="{% static 'hosting/js/initial.js' %}"></script>
|
<script src="{% static 'hosting/js/initial.js' %}"></script>
|
||||||
|
|
||||||
|
{% block js_extra %}
|
||||||
|
{% comment %}
|
||||||
|
this block is above some files, because on stripe error scripts below the stripe
|
||||||
|
script are not properly executed.
|
||||||
|
{% endcomment %}
|
||||||
|
{% endblock js_extra %}
|
||||||
|
|
||||||
<script src="https://js.stripe.com/v3/"></script>
|
<script src="https://js.stripe.com/v3/"></script>
|
||||||
<script src="https://js.stripe.com/v2/"></script>
|
<script src="https://js.stripe.com/v2/"></script>
|
||||||
<!-- Stripe Lib -->
|
<!-- Stripe Lib -->
|
||||||
|
@ -108,8 +115,6 @@
|
||||||
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
|
||||||
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment-with-locales.js"></script>
|
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment-with-locales.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<div id="order-detail" class="order-detail-container">
|
<div id="order-detail{{order.pk}}" class="order-detail-container">
|
||||||
{% if messages %}
|
{% if messages %}
|
||||||
<div class="alert alert-warning">
|
<div class="alert alert-warning">
|
||||||
{% for message in messages %}
|
{% for message in messages %}
|
||||||
|
@ -19,18 +19,18 @@
|
||||||
<img src="{% static 'hosting/img/billing.svg' %}" class="un-icon">{% blocktrans with page_header_text=page_header_text|default:"Invoice" %}{{page_header_text}}{% endblocktrans %}
|
<img src="{% static 'hosting/img/billing.svg' %}" class="un-icon">{% blocktrans with page_header_text=page_header_text|default:"Invoice" %}{{page_header_text}}{% endblocktrans %}
|
||||||
</h1>
|
</h1>
|
||||||
<div class="dashboard-container-options">
|
<div class="dashboard-container-options">
|
||||||
<button class="btn-plain"><img src="{% static 'hosting/img/icon-pdf.svg' %}" class="svg-img"></button>
|
<button type="button" class="btn-plain btn-pdf" data-target="#order-detail{{order.pk}}"><img src="{% static 'hosting/img/icon-pdf.svg' %}" class="svg-img"></button>
|
||||||
<button class="btn-plain"><img src="{% static 'hosting/img/icon-print.svg' %}" class="svg-img"></button>
|
<button type="button" class="btn-plain btn-print"><img src="{% static 'hosting/img/icon-print.svg' %}" class="svg-img"></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="order-details">
|
<div class="order-details">
|
||||||
{% if order %}
|
{% if order %}
|
||||||
<div>
|
|
||||||
<strong>{% trans "Order #"%} {{order.id}}</strong>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div>
|
<p>
|
||||||
<strong>{% trans "Invoice Date"%}:</strong>
|
<strong>{% trans "Order #" %} {{order.id}}</strong>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<strong>{% trans "Invoice Date" %}:</strong>
|
||||||
<span id="order-created_at">
|
<span id="order-created_at">
|
||||||
{% if order %}
|
{% if order %}
|
||||||
{{order.created_at|date:'Y-m-d H:i'}}
|
{{order.created_at|date:'Y-m-d H:i'}}
|
||||||
|
@ -38,46 +38,43 @@
|
||||||
{% now "Y-m-d H:i" %}
|
{% now "Y-m-d H:i" %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</p>
|
||||||
{% if order %}
|
{% if order %}
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div>
|
<p>
|
||||||
<strong>{% trans "Status" %}: </strong>
|
<strong>{% trans "Status" %}: </strong>
|
||||||
<strong>
|
<strong>
|
||||||
{% if order.status == 'Approved' %}
|
{% if order.status == 'Approved' %}
|
||||||
<span class="vm-status-active">{% trans "Approved" %}</span>
|
<span class="vm-color-online">{% trans "Approved" %}</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<span class="vm-status-failed">{% trans "Declined" %}</span>
|
<span class="vm-status-failed">{% trans "Declined" %}</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</strong>
|
</strong>
|
||||||
</div>
|
</p>
|
||||||
<hr>
|
<hr>
|
||||||
<div>
|
<div>
|
||||||
<address>
|
<address>
|
||||||
<h4>{% trans "Billed to" %}:</h4>
|
<h4>{% trans "Billed to" %}:</h4>
|
||||||
<div>
|
<p>
|
||||||
{% if order %}
|
{% if order %}
|
||||||
{{user.name}}<br>
|
{{user.name}}<br>
|
||||||
{{order.billing_address.street_address}},{{order.billing_address.postal_code}}<br>
|
{{order.billing_address.street_address}}, {{order.billing_address.postal_code}}<br>
|
||||||
{{order.billing_address.city}},
|
{{order.billing_address.city}}, {{order.billing_address.country}}
|
||||||
{{order.billing_address.country}}.
|
|
||||||
{% else %}
|
{% else %}
|
||||||
{% with request.session.billing_address_data as billing_address %}
|
{% with request.session.billing_address_data as billing_address %}
|
||||||
{{billing_address.cardholder_name}}<br>
|
{{billing_address.cardholder_name}}<br>
|
||||||
{{billing_address.street_address}},
|
{{billing_address.street_address}}, {{billing_address.postal_code}}<br>
|
||||||
{{billing_address.postal_code}}<br>
|
{{billing_address.city}}, {{billing_address.country}}
|
||||||
{{billing_address.city}},
|
|
||||||
{{billing_address.country}}.
|
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</p>
|
||||||
</address>
|
</address>
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
<div>
|
<div>
|
||||||
<h4>{% trans "Payment method" %}:</h4>
|
<h4>{% trans "Payment method" %}:</h4>
|
||||||
<div>
|
<p>
|
||||||
{% if order %}
|
{% if order %}
|
||||||
{{order.cc_brand}} {% trans "ending in" %} ****
|
{{order.cc_brand}} {% trans "ending in" %} ****
|
||||||
{{order.last4}}<br>
|
{{order.last4}}<br>
|
||||||
|
@ -87,82 +84,55 @@
|
||||||
{{cc_last4}}<br>
|
{{cc_last4}}<br>
|
||||||
{{request.session.user.email}}
|
{{request.session.user.email}}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<h4>{% trans "Order summary"%}</h4>
|
|
||||||
<div>
|
|
||||||
{% if request.session.specs %}
|
|
||||||
{% request.session.specs as vm %}
|
|
||||||
{% endif %}
|
|
||||||
<strong>{% trans "Product" %}:</strong> {{request.session.template.name}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h3><b></b></h3>
|
|
||||||
<hr>
|
|
||||||
<div class="content">
|
|
||||||
|
|
||||||
<p><b>{% trans "Cores"%}</b>
|
|
||||||
<span class="pull-right">{{vm.cpu}}</span>
|
|
||||||
</p>
|
|
||||||
<hr>
|
|
||||||
<p><b>{% trans "Memory"%}</b>
|
|
||||||
<span class="pull-right">{{vm.memory}} GB</span>
|
|
||||||
</p>
|
|
||||||
<hr>
|
|
||||||
<p><b>{% trans "Disk space"%}</b>
|
|
||||||
<span class="pull-right">{{vm.disk_size}} GB</span>
|
|
||||||
</p>
|
|
||||||
<hr>
|
|
||||||
<p><b>{% trans "Configuration"%}</b>
|
|
||||||
<span class="pull-right">{{request.session.template.name}}</span>
|
|
||||||
</p>
|
|
||||||
<hr>
|
|
||||||
<h4>{% trans "Total"%}
|
|
||||||
<p class="pull-right">
|
|
||||||
<b>{{vm.price}} CHF</b>
|
|
||||||
<span class="dcl-price-month"> /{% trans "Month" %}
|
|
||||||
</span>
|
|
||||||
</p>
|
</p>
|
||||||
</h4>
|
</div>
|
||||||
{% endwith %}
|
|
||||||
{% else %}
|
|
||||||
<p><b>{% trans "Cores"%}</b>
|
|
||||||
<span class="pull-right">{{vm.cores}}</span>
|
|
||||||
</p>
|
|
||||||
<hr>
|
<hr>
|
||||||
<p><b>{% trans "Memory"%}</b>
|
<div>
|
||||||
<span class="pull-right">{{vm.memory}} GB</span>
|
<h4>{% trans "Order summary" %}</h4>
|
||||||
</p>
|
<p>
|
||||||
<hr>
|
<strong>{% trans "Product" %}:</strong> {{vm.name}}
|
||||||
<p><b>{% trans "Disk space"%}</b>
|
</p>
|
||||||
<span class="pull-right">{{vm.disk_size}} GB</span>
|
<div class="row">
|
||||||
</p>
|
<div class="col-sm-6">
|
||||||
<hr>
|
{% comment %}
|
||||||
<h4>{% trans "Total"%}<p class="pull-right"><b>{{vm.price}}
|
<p>
|
||||||
CHF</b><span
|
<span>{% trans "Period" %}</span>
|
||||||
class="dcl-price-month"> /{% trans "Month" %}</span>
|
<span class="pull-right">{{vm.cpu}}</span>
|
||||||
</p></h4>
|
</p>
|
||||||
|
{% endcomment %}
|
||||||
|
<p>
|
||||||
|
<span>{% trans "Cores" %}</span>
|
||||||
|
<span class="pull-right">{{vm.cpu}}</span>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<span>{% trans "Memory" %}</span>
|
||||||
|
<span class="pull-right">{{vm.memory}} GB</span>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<span>{% trans "Disk space" %}</span>
|
||||||
|
<span class="pull-right">{{vm.disk_size}} GB</span>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<span>{% trans "Total" %}</span>
|
||||||
|
<span class="pull-right">{{vm.price}} CHF</span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% if not order %}
|
||||||
|
<hr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<br/>
|
|
||||||
{% if not order %}
|
{% if not order %}
|
||||||
<form method="post" id="virtual_machine_create_form">
|
<form method="post" id="virtual_machine_create_form">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<p class="dcl-place-order-text">{% blocktrans with vm_price=request.session.specs.price %}By clicking "Place order" this plan will charge your credit card account with the fee of {{ vm_price }}CHF/month{% endblocktrans %}.</p>
|
<div class="dcl-place-order-text">{% blocktrans with vm_price=request.session.specs.price %}By clicking "Place order" this plan will charge your credit card account with the fee of {{ vm_price }}CHF/month{% endblocktrans %}.</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-4 content">
|
<div class="col-sm-4 order-confirm-btn text-right">
|
||||||
<button class="btn btn-info pull-right"
|
<button class="btn choice-btn" id="btn-create-vm" data-href="{% url 'hosting:order-confirmation' %}" data-toggle="modal" data-target="#createvm-modal">
|
||||||
id="btn-create-vm"
|
{% trans "Place order" %}
|
||||||
data-href="{% url 'hosting:order-confirmation' %}"
|
|
||||||
data-toggle="modal"
|
|
||||||
data-target="#createvm-modal">
|
|
||||||
{% trans "Place order"%}
|
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -170,35 +140,43 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<!-- Create VM Modal -->
|
|
||||||
<div class="modal fade" id="createvm-modal" tabindex="-1" role="dialog"
|
<div class="text-center" style="margin-bottom: 50px;">
|
||||||
aria-hidden="true" data-backdrop="static" data-keyboard="false">
|
<a class="btn btn-vm-back" href="{% url 'hosting:orders' %}">{% trans "BACK TO LIST" %}</a>
|
||||||
<div class="modal-dialog">
|
</div>
|
||||||
<div class="modal-content">
|
{% if order %}
|
||||||
<div class="modal-header">
|
{% endif %}
|
||||||
<button type="button" class="close hidden" data-dismiss="modal"
|
|
||||||
aria-label="create-vm-close">
|
{% if not order %}
|
||||||
<span aria-hidden="true">×</span>
|
<!-- Create VM Modal -->
|
||||||
</button>
|
<div class="modal fade" id="createvm-modal" tabindex="-1" role="dialog"
|
||||||
</div>
|
aria-hidden="true" data-backdrop="static" data-keyboard="false">
|
||||||
<div class="modal-body">
|
<div class="modal-dialog">
|
||||||
<div class="modal-icon">
|
<div class="modal-content">
|
||||||
<i class="fa fa-cog fa-spin fa-3x fa-fw"></i>
|
<div class="modal-header">
|
||||||
<span class="sr-only">{% trans "Processing..." %}</span>
|
<button type="button" class="close hidden" data-dismiss="modal"
|
||||||
|
aria-label="create-vm-close">
|
||||||
|
<span aria-hidden="true">×</span>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<h4 class="modal-title" id="createvm-modal-title">
|
<div class="modal-body">
|
||||||
</h4>
|
<div class="modal-icon">
|
||||||
<div class="modal-text" id="createvm-modal-body">
|
<i class="fa fa-cog fa-spin fa-3x fa-fw"></i>
|
||||||
{% trans "Hold tight, we are processing your request" %}
|
<span class="sr-only">{% trans "Processing..." %}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<h4 class="modal-title" id="createvm-modal-title">
|
||||||
|
</h4>
|
||||||
|
<div class="modal-text" id="createvm-modal-body">
|
||||||
|
{% trans "Hold tight, we are processing your request" %}
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<!-- / Create VM Modal -->
|
||||||
<!-- / Create VM Modal -->
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
{% trans "Some problem encountered. Please try again later." as err_msg %}
|
{% trans "Some problem encountered. Please try again later." as err_msg %}
|
||||||
|
@ -210,13 +188,12 @@
|
||||||
document.getElementById('order-created_at').innerHTML = locale_date;
|
document.getElementById('order-created_at').innerHTML = locale_date;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
</script>
|
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.5/jspdf.min.js"></script>
|
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.min.js"></script>
|
|
||||||
<script src="{% static 'hosting/js/html2pdf.js' %}"></script>
|
|
||||||
<script>
|
|
||||||
html2pdf(document.getElementById('order-detail'));
|
|
||||||
</script>
|
</script>
|
||||||
{%endblock%}
|
{%endblock%}
|
||||||
|
|
||||||
|
{% block js_extra %}
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.5/jspdf.min.js"></script>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.min.js"></script>
|
||||||
|
<script src="{% static 'hosting/js/html2pdf.js' %}"></script>
|
||||||
|
<script src="{% static 'hosting/js/order.js' %}"></script>
|
||||||
|
{% endblock js_extra %}
|
|
@ -698,6 +698,7 @@ class OrdersHostingDetailView(LoginRequiredMixin,
|
||||||
'last4')
|
'last4')
|
||||||
context['cc_brand'] = card_details.get('response_object').get(
|
context['cc_brand'] = card_details.get('response_object').get(
|
||||||
'cc_brand')
|
'cc_brand')
|
||||||
|
context['vm'] = request.session.get('specs')
|
||||||
return context
|
return context
|
||||||
|
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
|
|
Loading…
Reference in a new issue