Implement get invoice
This commit is contained in:
parent
ba6fa531db
commit
7de2129a00
1 changed files with 76 additions and 0 deletions
|
@ -1191,6 +1191,82 @@ class InvoiceDetailView(LoginRequiredMixin, DetailView):
|
|||
invoice_obj = None
|
||||
return invoice_obj
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
# Get context
|
||||
context = super(InvoiceDetailView, self).get_context_data(**kwargs)
|
||||
obj = self.get_object()
|
||||
|
||||
if obj is not None:
|
||||
vm_id = obj.get_vm_id()
|
||||
try:
|
||||
# Try to get vm details from database
|
||||
vm_detail = VMDetail.objects.get(vm_id=vm_id)
|
||||
context['vm'] = vm_detail.__dict__
|
||||
context['vm']['name'] = '{}-{}'.format(
|
||||
context['vm']['configuration'], context['vm']['vm_id'])
|
||||
price, vat, vat_percent, discount = get_vm_price_with_vat(
|
||||
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']
|
||||
except VMDetail.DoesNotExist:
|
||||
# fallback to get it from the infrastructure
|
||||
try:
|
||||
manager = OpenNebulaManager(
|
||||
email=self.request.email,
|
||||
password=self.request.password
|
||||
)
|
||||
vm = manager.get_vm(vm_id)
|
||||
context['vm'] = VirtualMachineSerializer(vm).data
|
||||
price, vat, vat_percent, discount = get_vm_price_with_vat(
|
||||
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']
|
||||
)
|
||||
except WrongIdError:
|
||||
logger.error("WrongIdError while accessing "
|
||||
"invoice {}".format(obj.invoice_id))
|
||||
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'
|
||||
return context
|
||||
|
||||
# add context params from monthly hosting bill
|
||||
context['period_start'] = obj.period_start
|
||||
context['period_end'] = obj.period_end
|
||||
context['paid_at'] = obj.paid_at
|
||||
context['total_in_chf'] = obj.total_in_chf()
|
||||
context['invoice_number'] = obj.invoice_number
|
||||
context['discount_on_stripe'] = obj.discount_in_chf()
|
||||
return context
|
||||
else:
|
||||
raise Http404
|
||||
|
||||
@method_decorator(decorators)
|
||||
def get(self, request, *args, **kwargs):
|
||||
context = self.get_context_data()
|
||||
return self.render_to_response(context)
|
||||
|
||||
|
||||
class OrdersHostingDeleteView(LoginRequiredMixin, DeleteView):
|
||||
login_url = reverse_lazy('hosting:login')
|
||||
|
|
Loading…
Reference in a new issue