Make invoice for generic payment showable
This commit is contained in:
		
					parent
					
						
							
								d99271f71d
							
						
					
				
			
			
				commit
				
					
						a90bec98ec
					
				
			
		
					 2 changed files with 132 additions and 106 deletions
				
			
		|  | @ -39,7 +39,7 @@ | |||
|                     {% endif %} | ||||
|                 </span> | ||||
|             </p> | ||||
|             {% if order %} | ||||
|             {% if order and vm %} | ||||
|                 <p> | ||||
|                     <strong>{% trans "Status" %}: </strong> | ||||
|                     <strong> | ||||
|  | @ -93,77 +93,97 @@ | |||
|             <hr> | ||||
|             <div> | ||||
|                 <h4>{% trans "Order summary" %}</h4> | ||||
|                 <p> | ||||
|                     <strong>{% trans "Product" %}:</strong>  | ||||
|                     {% if vm.name %} | ||||
|                         {{ vm.name }} | ||||
|                     {% else %} | ||||
|                         {{ request.session.template.name }} | ||||
|                     {% endif %} | ||||
|                 </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> | ||||
|                 {% if vm %} | ||||
|                     <p> | ||||
|                         <strong>{% trans "Product" %}:</strong>  | ||||
|                         {% if vm.name %} | ||||
|                             {{ vm.name }} | ||||
|                         {% else %} | ||||
|                             {{ request.session.template.name }} | ||||
|                         {% endif %} | ||||
|                         <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 %} | ||||
|                         </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 %} | ||||
|                     </p> | ||||
|                     <div class="row"> | ||||
|                         <div class="col-sm-6"> | ||||
|                             <div class="subtotal-price"> | ||||
|                                 {% if vm.vat > 0 %} | ||||
|                                     <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> | ||||
|                             {% 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 %} | ||||
|                             <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 %} | ||||
|                                 {% 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> | ||||
|                             </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> | ||||
|                     {% 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> | ||||
|                         {% if vm.vat > 0 or vm.discount.amount > 0 %} | ||||
|                             <div class="col-sm-6"> | ||||
|                                 <div class="subtotal-price"> | ||||
|                                     {% if vm.vat > 0 %} | ||||
|                                         <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> | ||||
|                 {% 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> | ||||
|             <hr class="thin-hr"> | ||||
|         </div> | ||||
|  |  | |||
|  | @ -862,32 +862,18 @@ class OrdersHostingDetailView(LoginRequiredMixin, DetailView): | |||
|                 raise Http404 | ||||
| 
 | ||||
|         if obj is not None: | ||||
|             # invoice for previous order | ||||
|             try: | ||||
|                 vm_detail = VMDetail.objects.get(vm_id=obj.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'] | ||||
|                 context['subscription_end_date'] = vm_detail.end_date() | ||||
|             except VMDetail.DoesNotExist: | ||||
|             if obj.generic_payment_id is not None: | ||||
|                 # generic payment case | ||||
|                 logger.debug("Generic payment case") | ||||
| 
 | ||||
|             else: | ||||
|                 # invoice for previous order | ||||
|                 logger.debug("Invoice of VM order") | ||||
|                 try: | ||||
|                     manager = OpenNebulaManager( | ||||
|                         email=owner.email, password=owner.password | ||||
|                     ) | ||||
|                     vm = manager.get_vm(obj.vm_id) | ||||
|                     context['vm'] = VirtualMachineSerializer(vm).data | ||||
|                     vm_detail = VMDetail.objects.get(vm_id=obj.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'], | ||||
|  | @ -899,23 +885,43 @@ class OrdersHostingDetailView(LoginRequiredMixin, DetailView): | |||
|                     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.') | ||||
|                     ) | ||||
|                     context['vm']['total_price'] = price + vat - discount['amount'] | ||||
|                     context['subscription_end_date'] = vm_detail.end_date() | ||||
|                 except VMDetail.DoesNotExist: | ||||
|                     try: | ||||
|                         manager = OpenNebulaManager( | ||||
|                             email=owner.email, password=owner.password | ||||
|                         ) | ||||
|                         vm = manager.get_vm(obj.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: | ||||
|                         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: | ||||
|             # new order, confirm payment | ||||
|             if 'token' in self.request.session: | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue