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…
	
	Add table
		Add a link
		
	
		Reference in a new issue