Make invoice for generic payment showable

This commit is contained in:
PCoder 2018-09-24 08:22:46 +02:00
parent d99271f71d
commit a90bec98ec
2 changed files with 132 additions and 106 deletions

View file

@ -39,7 +39,7 @@
{% endif %} {% endif %}
</span> </span>
</p> </p>
{% if order %} {% if order and vm %}
<p> <p>
<strong>{% trans "Status" %}: </strong> <strong>{% trans "Status" %}: </strong>
<strong> <strong>
@ -93,77 +93,97 @@
<hr> <hr>
<div> <div>
<h4>{% trans "Order summary" %}</h4> <h4>{% trans "Order summary" %}</h4>
<p> {% if vm %}
<strong>{% trans "Product" %}:</strong>&nbsp; <p>
{% if vm.name %} <strong>{% trans "Product" %}:</strong>&nbsp;
{{ vm.name }} {% if vm.name %}
{% else %} {{ vm.name }}
{{ request.session.template.name }} {% else %}
{% endif %} {{ request.session.template.name }}
</p>
<div class="row">
<div class="col-sm-6">
{% if vm.created_at %}
<p>
<span>{% trans "Period" %}: </span>
<span>
<span class="locale_date" data-format="YYYY/MM/DD">{{ vm.created_at|date:'Y-m-d h:i a' }}</span> - <span class="locale_date" data-format="YYYY/MM/DD">{{ subscription_end_date|date:'Y-m-d h:i a' }}</span>
</span>
</p>
{% endif %} {% endif %}
<p> </p>
<span>{% trans "Cores" %}: </span> <div class="row">
{% if vm.cores %}
<strong class="pull-right">{{vm.cores|floatformat}}</strong>
{% else %}
<strong class="pull-right">{{vm.cpu|floatformat}}</strong>
{% endif %}
</p>
<p>
<span>{% trans "Memory" %}: </span>
<strong class="pull-right">{{vm.memory}} GB</strong>
</p>
<p>
<span>{% trans "Disk space" %}: </span>
<strong class="pull-right">{{vm.disk_size}} GB</strong>
</p>
</div>
<div class="col-sm-12">
<hr class="thin-hr">
</div>
{% if vm.vat > 0 or vm.discount.amount > 0 %}
<div class="col-sm-6"> <div class="col-sm-6">
<div class="subtotal-price"> {% if vm.created_at %}
{% if vm.vat > 0 %} <p>
<p> <span>{% trans "Period" %}: </span>
<strong>{% trans "Subtotal" %} </strong> <span>
<strong class="pull-right">{{vm.price|floatformat:2|intcomma}} CHF</strong> <span class="locale_date" data-format="YYYY/MM/DD">{{ vm.created_at|date:'Y-m-d h:i a' }}</span> - <span class="locale_date" data-format="YYYY/MM/DD">{{ subscription_end_date|date:'Y-m-d h:i a' }}</span>
</p> </span>
<p> </p>
<small>{% trans "VAT" %} ({{ vm.vat_percent|floatformat:2|intcomma }}%) </small> {% endif %}
<strong class="pull-right">{{vm.vat|floatformat:2|intcomma}} CHF</strong> <p>
</p> <span>{% trans "Cores" %}: </span>
{% if vm.cores %}
<strong class="pull-right">{{vm.cores|floatformat}}</strong>
{% else %}
<strong class="pull-right">{{vm.cpu|floatformat}}</strong>
{% endif %} {% endif %}
{% if vm.discount.amount > 0 %} </p>
<p class="text-primary"> <p>
{%trans "Discount" as discount_name %} <span>{% trans "Memory" %}: </span>
<strong>{{ vm.discount.name|default:discount_name }} </strong> <strong class="pull-right">{{vm.memory}} GB</strong>
<strong class="pull-right">- {{ vm.discount.amount }} CHF</strong> </p>
</p> <p>
{% endif %} <span>{% trans "Disk space" %}: </span>
</div> <strong class="pull-right">{{vm.disk_size}} GB</strong>
</p>
</div> </div>
<div class="col-sm-12"> <div class="col-sm-12">
<hr class="thin-hr"> <hr class="thin-hr">
</div> </div>
{% endif %} {% if vm.vat > 0 or vm.discount.amount > 0 %}
<div class="col-sm-6"> <div class="col-sm-6">
<p class="total-price"> <div class="subtotal-price">
<strong>{% trans "Total" %} </strong> {% if vm.vat > 0 %}
<strong class="pull-right">{% if vm.total_price %}{{vm.total_price|floatformat:2|intcomma}}{% else %}{{vm.price|floatformat:2|intcomma}}{% endif %} CHF</strong> <p>
</p> <strong>{% trans "Subtotal" %} </strong>
<strong class="pull-right">{{vm.price|floatformat:2|intcomma}} CHF</strong>
</p>
<p>
<small>{% trans "VAT" %} ({{ vm.vat_percent|floatformat:2|intcomma }}%) </small>
<strong class="pull-right">{{vm.vat|floatformat:2|intcomma}} CHF</strong>
</p>
{% endif %}
{% if vm.discount.amount > 0 %}
<p class="text-primary">
{%trans "Discount" as discount_name %}
<strong>{{ vm.discount.name|default:discount_name }} </strong>
<strong class="pull-right">- {{ vm.discount.amount }} CHF</strong>
</p>
{% endif %}
</div>
</div>
<div class="col-sm-12">
<hr class="thin-hr">
</div>
{% endif %}
<div class="col-sm-6">
<p class="total-price">
<strong>{% trans "Total" %} </strong>
<strong class="pull-right">{% if vm.total_price %}{{vm.total_price|floatformat:2|intcomma}}{% else %}{{vm.price|floatformat:2|intcomma}}{% endif %} CHF</strong>
</p>
</div>
</div> </div>
</div> {% else %}
<div class="row">
<div class="col-sm-6">
<p>
<span>{% trans "Amount" %}: </span>
<strong class="pull-right">{{order.price|floatformat:2|intcomma}} CHF</strong>
</p>
{% if order.subscription_id %}
<p>
<span>{% trans "Recurring" %}: </span>
<strong class="pull-right">{{order.created_at|date:'d'|ordinal}} {% trans "of every month" %}</strong>
</p>
{% endif %}
</div>
<div class="col-sm-12">
<hr class="thin-hr">
</div>
</div>
{% endif %}
</div> </div>
<hr class="thin-hr"> <hr class="thin-hr">
</div> </div>

View file

@ -862,32 +862,18 @@ class OrdersHostingDetailView(LoginRequiredMixin, DetailView):
raise Http404 raise Http404
if obj is not None: if obj is not None:
# invoice for previous order if obj.generic_payment_id is not None:
try: # generic payment case
vm_detail = VMDetail.objects.get(vm_id=obj.vm_id) logger.debug("Generic payment case")
context['vm'] = vm_detail.__dict__
context['vm']['name'] = '{}-{}'.format( else:
context['vm']['configuration'], context['vm']['vm_id']) # invoice for previous order
price, vat, vat_percent, discount = get_vm_price_with_vat( logger.debug("Invoice of VM order")
cpu=context['vm']['cores'],
ssd_size=context['vm']['disk_size'],
memory=context['vm']['memory'],
pricing_name=(obj.vm_pricing.name
if obj.vm_pricing else 'default')
)
context['vm']['vat'] = vat
context['vm']['price'] = price
context['vm']['discount'] = discount
context['vm']['vat_percent'] = vat_percent
context['vm']['total_price'] = price + vat - discount['amount']
context['subscription_end_date'] = vm_detail.end_date()
except VMDetail.DoesNotExist:
try: try:
manager = OpenNebulaManager( vm_detail = VMDetail.objects.get(vm_id=obj.vm_id)
email=owner.email, password=owner.password context['vm'] = vm_detail.__dict__
) context['vm']['name'] = '{}-{}'.format(
vm = manager.get_vm(obj.vm_id) context['vm']['configuration'], context['vm']['vm_id'])
context['vm'] = VirtualMachineSerializer(vm).data
price, vat, vat_percent, discount = get_vm_price_with_vat( price, vat, vat_percent, discount = get_vm_price_with_vat(
cpu=context['vm']['cores'], cpu=context['vm']['cores'],
ssd_size=context['vm']['disk_size'], ssd_size=context['vm']['disk_size'],
@ -899,23 +885,43 @@ class OrdersHostingDetailView(LoginRequiredMixin, DetailView):
context['vm']['price'] = price context['vm']['price'] = price
context['vm']['discount'] = discount context['vm']['discount'] = discount
context['vm']['vat_percent'] = vat_percent context['vm']['vat_percent'] = vat_percent
context['vm']['total_price'] = ( context['vm']['total_price'] = price + vat - discount['amount']
price + vat - discount['amount'] context['subscription_end_date'] = vm_detail.end_date()
) except VMDetail.DoesNotExist:
except WrongIdError: try:
messages.error( manager = OpenNebulaManager(
self.request, email=owner.email, password=owner.password
_('The VM you are looking for is unavailable at the ' )
'moment. Please contact Data Center Light support.') vm = manager.get_vm(obj.vm_id)
) context['vm'] = VirtualMachineSerializer(vm).data
self.kwargs['error'] = 'WrongIdError' price, vat, vat_percent, discount = get_vm_price_with_vat(
context['error'] = 'WrongIdError' cpu=context['vm']['cores'],
except ConnectionRefusedError: ssd_size=context['vm']['disk_size'],
messages.error( memory=context['vm']['memory'],
self.request, pricing_name=(obj.vm_pricing.name
_('In order to create a VM, you need to create/upload ' if obj.vm_pricing else 'default')
'your SSH KEY first.') )
) context['vm']['vat'] = vat
context['vm']['price'] = price
context['vm']['discount'] = discount
context['vm']['vat_percent'] = vat_percent
context['vm']['total_price'] = (
price + vat - discount['amount']
)
except WrongIdError:
messages.error(
self.request,
_('The VM you are looking for is unavailable at the '
'moment. Please contact Data Center Light support.')
)
self.kwargs['error'] = 'WrongIdError'
context['error'] = 'WrongIdError'
except ConnectionRefusedError:
messages.error(
self.request,
_('In order to create a VM, you need to create/upload '
'your SSH KEY first.')
)
else: else:
# new order, confirm payment # new order, confirm payment
if 'token' in self.request.session: if 'token' in self.request.session: