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