exclude discount from total price
This commit is contained in:
		
					parent
					
						
							
								144d885fbd
							
						
					
				
			
			
				commit
				
					
						2ff8c25034
					
				
			
		
					 5 changed files with 27 additions and 25 deletions
				
			
		| 
						 | 
					@ -36,22 +36,27 @@ class VMPricing(models.Model):
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
    discount_name = models.CharField(max_length=255, null=True, blank=True)
 | 
					    discount_name = models.CharField(max_length=255, null=True, blank=True)
 | 
				
			||||||
    discount_amount = models.DecimalField(
 | 
					    discount_amount = models.DecimalField(
 | 
				
			||||||
        max_digits=4, decimal_places=2, default=0
 | 
					        max_digits=6, decimal_places=2, default=0
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __str__(self):
 | 
					    def __str__(self):
 | 
				
			||||||
        return self.name + ' => ' + ' - '.join([
 | 
					        display_str = self.name + ' => ' + ' - '.join([
 | 
				
			||||||
            '{}/Core'.format(self.cores_unit_price.normalize()),
 | 
					            '{}/Core'.format(self.cores_unit_price.normalize()),
 | 
				
			||||||
            '{}/GB RAM'.format(self.ram_unit_price.normalize()),
 | 
					            '{}/GB RAM'.format(self.ram_unit_price.normalize()),
 | 
				
			||||||
            '{}/GB SSD'.format(self.ssd_unit_price.normalize()),
 | 
					            '{}/GB SSD'.format(self.ssd_unit_price.normalize()),
 | 
				
			||||||
            '{}/GB HDD'.format(self.hdd_unit_price.normalize()),
 | 
					            '{}/GB HDD'.format(self.hdd_unit_price.normalize()),
 | 
				
			||||||
            '{}% VAT'.format(self.vat_percentage.normalize())
 | 
					            '{}% VAT'.format(self.vat_percentage.normalize())
 | 
				
			||||||
            if not self.vat_inclusive else 'VAT-Incl',
 | 
					            if not self.vat_inclusive else 'VAT-Incl',
 | 
				
			||||||
            '{} {}'.format(
 | 
					 | 
				
			||||||
                self.discount_amount if self.discount_amount else '',
 | 
					 | 
				
			||||||
                self.discount_name if self.discount_name else 'Discount'
 | 
					 | 
				
			||||||
            ),
 | 
					 | 
				
			||||||
        ])
 | 
					        ])
 | 
				
			||||||
 | 
					        if self.discount_amount:
 | 
				
			||||||
 | 
					            display_str = ' - '.join([
 | 
				
			||||||
 | 
					                display_str,
 | 
				
			||||||
 | 
					                '{} {}'.format(
 | 
				
			||||||
 | 
					                    self.discount_amount,
 | 
				
			||||||
 | 
					                    self.discount_name if self.discount_name else 'Discount'
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
 | 
					            ])
 | 
				
			||||||
 | 
					        return display_str
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @classmethod
 | 
					    @classmethod
 | 
				
			||||||
    def get_vm_pricing_by_name(cls, name):
 | 
					    def get_vm_pricing_by_name(cls, name):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -76,7 +76,7 @@
 | 
				
			||||||
                                <span class="pull-right">{{vm.vat|floatformat:2|intcomma}} CHF</span>
 | 
					                                <span class="pull-right">{{vm.vat|floatformat:2|intcomma}} CHF</span>
 | 
				
			||||||
                            </p>
 | 
					                            </p>
 | 
				
			||||||
                        {% endif %}
 | 
					                        {% endif %}
 | 
				
			||||||
                        {% if vm_pricing.discount_amount %}
 | 
					                        {% if vm.discount > 0 %}
 | 
				
			||||||
                            <p class="text-primary">
 | 
					                            <p class="text-primary">
 | 
				
			||||||
                                {%trans "Discount" as discount_name %}
 | 
					                                {%trans "Discount" as discount_name %}
 | 
				
			||||||
                                <span>{{ vm_pricing.discount_name|default:discount_name }}: </span>
 | 
					                                <span>{{ vm_pricing.discount_name|default:discount_name }}: </span>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -158,7 +158,7 @@ class IndexView(CreateView):
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
            return HttpResponseRedirect(referer_url + "#order_form")
 | 
					            return HttpResponseRedirect(referer_url + "#order_form")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        price, vat, vat_percent = get_vm_price_with_vat(
 | 
					        price, vat, vat_percent, discount = get_vm_price_with_vat(
 | 
				
			||||||
            cpu=cores,
 | 
					            cpu=cores,
 | 
				
			||||||
            memory=memory,
 | 
					            memory=memory,
 | 
				
			||||||
            ssd_size=storage,
 | 
					            ssd_size=storage,
 | 
				
			||||||
| 
						 | 
					@ -171,7 +171,8 @@ class IndexView(CreateView):
 | 
				
			||||||
            'price': price,
 | 
					            'price': price,
 | 
				
			||||||
            'vat': vat,
 | 
					            'vat': vat,
 | 
				
			||||||
            'vat_percent': vat_percent,
 | 
					            'vat_percent': vat_percent,
 | 
				
			||||||
            'total_price': price + vat,
 | 
					            'discount': discount,
 | 
				
			||||||
 | 
					            'total_price': price + vat - discount,
 | 
				
			||||||
            'pricing_name': vm_pricing_name
 | 
					            'pricing_name': vm_pricing_name
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        request.session['specs'] = specs
 | 
					        request.session['specs'] = specs
 | 
				
			||||||
| 
						 | 
					@ -388,9 +389,6 @@ class OrderConfirmationView(DetailView):
 | 
				
			||||||
                request.session.get('billing_address_data')
 | 
					                request.session.get('billing_address_data')
 | 
				
			||||||
            ),
 | 
					            ),
 | 
				
			||||||
            'cms_integration': get_cms_integration('default'),
 | 
					            'cms_integration': get_cms_integration('default'),
 | 
				
			||||||
            'vm_pricing': VMPricing.get_vm_pricing_by_name(
 | 
					 | 
				
			||||||
                self.request.session['specs']['pricing_name']
 | 
					 | 
				
			||||||
            ),
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return render(request, self.template_name, context)
 | 
					        return render(request, self.template_name, context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -655,7 +655,7 @@ class PaymentVMView(LoginRequiredMixin, FormView):
 | 
				
			||||||
            'stripe_key': settings.STRIPE_API_PUBLIC_KEY,
 | 
					            'stripe_key': settings.STRIPE_API_PUBLIC_KEY,
 | 
				
			||||||
            'vm_pricing': VMPricing.get_vm_pricing_by_name(
 | 
					            'vm_pricing': VMPricing.get_vm_pricing_by_name(
 | 
				
			||||||
                self.request.session['specs']['pricing_name']
 | 
					                self.request.session['specs']['pricing_name']
 | 
				
			||||||
            )
 | 
					            ),
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return context
 | 
					        return context
 | 
				
			||||||
| 
						 | 
					@ -753,7 +753,7 @@ class OrdersHostingDetailView(LoginRequiredMixin, DetailView):
 | 
				
			||||||
                context['vm'] = vm_detail.__dict__
 | 
					                context['vm'] = vm_detail.__dict__
 | 
				
			||||||
                context['vm']['name'] = '{}-{}'.format(
 | 
					                context['vm']['name'] = '{}-{}'.format(
 | 
				
			||||||
                    context['vm']['configuration'], context['vm']['vm_id'])
 | 
					                    context['vm']['configuration'], context['vm']['vm_id'])
 | 
				
			||||||
                price, vat, vat_percent = 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'],
 | 
				
			||||||
                    memory=context['vm']['memory'],
 | 
					                    memory=context['vm']['memory'],
 | 
				
			||||||
| 
						 | 
					@ -762,8 +762,9 @@ class OrdersHostingDetailView(LoginRequiredMixin, DetailView):
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
                context['vm']['vat'] = vat
 | 
					                context['vm']['vat'] = vat
 | 
				
			||||||
                context['vm']['price'] = price
 | 
					                context['vm']['price'] = price
 | 
				
			||||||
 | 
					                context['vm']['discount'] = discount
 | 
				
			||||||
                context['vm']['vat_percent'] = vat_percent
 | 
					                context['vm']['vat_percent'] = vat_percent
 | 
				
			||||||
                context['vm']['total_price'] = price + vat
 | 
					                context['vm']['total_price'] = price + vat - discount
 | 
				
			||||||
                context['subscription_end_date'] = vm_detail.end_date()
 | 
					                context['subscription_end_date'] = vm_detail.end_date()
 | 
				
			||||||
            except VMDetail.DoesNotExist:
 | 
					            except VMDetail.DoesNotExist:
 | 
				
			||||||
                try:
 | 
					                try:
 | 
				
			||||||
| 
						 | 
					@ -772,7 +773,7 @@ class OrdersHostingDetailView(LoginRequiredMixin, DetailView):
 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
                    vm = manager.get_vm(obj.vm_id)
 | 
					                    vm = manager.get_vm(obj.vm_id)
 | 
				
			||||||
                    context['vm'] = VirtualMachineSerializer(vm).data
 | 
					                    context['vm'] = VirtualMachineSerializer(vm).data
 | 
				
			||||||
                    price, vat, vat_percent = 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'],
 | 
				
			||||||
                        memory=context['vm']['memory'],
 | 
					                        memory=context['vm']['memory'],
 | 
				
			||||||
| 
						 | 
					@ -781,8 +782,9 @@ class OrdersHostingDetailView(LoginRequiredMixin, DetailView):
 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
                    context['vm']['vat'] = vat
 | 
					                    context['vm']['vat'] = vat
 | 
				
			||||||
                    context['vm']['price'] = price
 | 
					                    context['vm']['price'] = price
 | 
				
			||||||
 | 
					                    context['vm']['discount'] = discount
 | 
				
			||||||
                    context['vm']['vat_percent'] = vat_percent
 | 
					                    context['vm']['vat_percent'] = vat_percent
 | 
				
			||||||
                    context['vm']['total_price'] = price + vat
 | 
					                    context['vm']['total_price'] = price + vat - discount
 | 
				
			||||||
                except WrongIdError:
 | 
					                except WrongIdError:
 | 
				
			||||||
                    messages.error(
 | 
					                    messages.error(
 | 
				
			||||||
                        self.request,
 | 
					                        self.request,
 | 
				
			||||||
| 
						 | 
					@ -809,9 +811,6 @@ class OrdersHostingDetailView(LoginRequiredMixin, DetailView):
 | 
				
			||||||
            context['cc_brand'] = card_details.get('response_object').get(
 | 
					            context['cc_brand'] = card_details.get('response_object').get(
 | 
				
			||||||
                'cc_brand')
 | 
					                'cc_brand')
 | 
				
			||||||
            context['vm'] = self.request.session.get('specs')
 | 
					            context['vm'] = self.request.session.get('specs')
 | 
				
			||||||
            context['vm_pricing'] = VMPricing.get_vm_pricing_by_name(
 | 
					 | 
				
			||||||
                self.request.session['specs']['pricing_name']
 | 
					 | 
				
			||||||
            ),
 | 
					 | 
				
			||||||
        return context
 | 
					        return context
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @method_decorator(decorators)
 | 
					    @method_decorator(decorators)
 | 
				
			||||||
| 
						 | 
					@ -1071,7 +1070,7 @@ class CreateVirtualMachinesView(LoginRequiredMixin, View):
 | 
				
			||||||
                                 extra_tags='storage')
 | 
					                                 extra_tags='storage')
 | 
				
			||||||
            return redirect(CreateVirtualMachinesView.as_view())
 | 
					            return redirect(CreateVirtualMachinesView.as_view())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        price, vat, vat_percent = get_vm_price_with_vat(
 | 
					        price, vat, vat_percent, discount = get_vm_price_with_vat(
 | 
				
			||||||
            cpu=cores,
 | 
					            cpu=cores,
 | 
				
			||||||
            memory=memory,
 | 
					            memory=memory,
 | 
				
			||||||
            ssd_size=storage,
 | 
					            ssd_size=storage,
 | 
				
			||||||
| 
						 | 
					@ -1085,7 +1084,7 @@ class CreateVirtualMachinesView(LoginRequiredMixin, View):
 | 
				
			||||||
            'price': price,
 | 
					            'price': price,
 | 
				
			||||||
            'vat': vat,
 | 
					            'vat': vat,
 | 
				
			||||||
            'vat_percent': vat_percent,
 | 
					            'vat_percent': vat_percent,
 | 
				
			||||||
            'total_price': price + vat,
 | 
					            'total_price': price + vat - discount,
 | 
				
			||||||
            'pricing_name': vm_pricing_name
 | 
					            'pricing_name': vm_pricing_name
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -111,8 +111,7 @@ def get_vm_price_with_vat(cpu, memory, ssd_size, hdd_size=0,
 | 
				
			||||||
        (decimal.Decimal(cpu) * pricing.cores_unit_price) +
 | 
					        (decimal.Decimal(cpu) * pricing.cores_unit_price) +
 | 
				
			||||||
        (decimal.Decimal(memory) * pricing.ram_unit_price) +
 | 
					        (decimal.Decimal(memory) * pricing.ram_unit_price) +
 | 
				
			||||||
        (decimal.Decimal(ssd_size) * pricing.ssd_unit_price) +
 | 
					        (decimal.Decimal(ssd_size) * pricing.ssd_unit_price) +
 | 
				
			||||||
        (decimal.Decimal(hdd_size) * pricing.hdd_unit_price) -
 | 
					        (decimal.Decimal(hdd_size) * pricing.hdd_unit_price)
 | 
				
			||||||
        pricing.discount_amount
 | 
					 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
    if pricing.vat_inclusive:
 | 
					    if pricing.vat_inclusive:
 | 
				
			||||||
        vat = decimal.Decimal(0)
 | 
					        vat = decimal.Decimal(0)
 | 
				
			||||||
| 
						 | 
					@ -124,4 +123,5 @@ def get_vm_price_with_vat(cpu, memory, ssd_size, hdd_size=0,
 | 
				
			||||||
    cents = decimal.Decimal('.01')
 | 
					    cents = decimal.Decimal('.01')
 | 
				
			||||||
    price = price.quantize(cents, decimal.ROUND_HALF_UP)
 | 
					    price = price.quantize(cents, decimal.ROUND_HALF_UP)
 | 
				
			||||||
    vat = vat.quantize(cents, decimal.ROUND_HALF_UP)
 | 
					    vat = vat.quantize(cents, decimal.ROUND_HALF_UP)
 | 
				
			||||||
    return float(price), float(vat), float(vat_percent)
 | 
					    discount = pricing.discount_amount
 | 
				
			||||||
 | 
					    return float(price), float(vat), float(vat_percent), float(discount)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue