Adding subtotal, VAT and total to order. Also redirect to shop index if there are no products.
This commit is contained in:
parent
373a4cf65b
commit
9eefc6bdfd
|
@ -70,6 +70,24 @@ class Order(CreatedUpdatedModel):
|
||||||
sum=Sum('orderproductrelation__quantity')
|
sum=Sum('orderproductrelation__quantity')
|
||||||
)['sum']
|
)['sum']
|
||||||
|
|
||||||
|
@property
|
||||||
|
def subtotal(self):
|
||||||
|
return self.products.aggregate(
|
||||||
|
sum=Sum(
|
||||||
|
models.F('orderproductrelation__product__price') *
|
||||||
|
models.F('orderproductrelation__quantity'),
|
||||||
|
output_field=models.IntegerField()
|
||||||
|
)
|
||||||
|
)['sum']
|
||||||
|
|
||||||
|
@property
|
||||||
|
def vat(self):
|
||||||
|
return (self.subtotal/100)*25
|
||||||
|
|
||||||
|
@property
|
||||||
|
def total(self):
|
||||||
|
return self.subtotal + self.vat
|
||||||
|
|
||||||
|
|
||||||
class ProductCategory(CreatedUpdatedModel, UUIDModel):
|
class ProductCategory(CreatedUpdatedModel, UUIDModel):
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
|
@ -48,7 +48,26 @@
|
||||||
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{# TODO: Add total + VAT info #}
|
<tr>
|
||||||
|
<td colspan="2">
|
||||||
|
<td>
|
||||||
|
<strong>Subtotal</strong>
|
||||||
|
<td>
|
||||||
|
{{ order.subtotal }}
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td colspan="2">
|
||||||
|
<td>
|
||||||
|
<strong>VAT (25%)</strong>
|
||||||
|
<td>
|
||||||
|
{{ order.vat }}
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td colspan="2">
|
||||||
|
<td>
|
||||||
|
<strong>Total</strong>
|
||||||
|
<td>
|
||||||
|
{{ order.total }}
|
||||||
|
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
|
@ -60,16 +60,13 @@ class OrderDetailView(LoginRequiredMixin, DetailView):
|
||||||
context_object_name = 'order'
|
context_object_name = 'order'
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
if self.get_object().user != request.user:
|
order = self.get_object()
|
||||||
|
|
||||||
|
if order.user != request.user:
|
||||||
raise Http404("Order not found")
|
raise Http404("Order not found")
|
||||||
|
|
||||||
if self.get_object().paid:
|
if not order.products.count() > 0:
|
||||||
messages.error(request, 'This order is already paid for!')
|
return HttpResponseRedirect(reverse_lazy('shop:index'))
|
||||||
return HttpResponseRedirect('shop:order_detail')
|
|
||||||
|
|
||||||
if not self.get_object().products:
|
|
||||||
messages.error(request, 'This order contains no products!')
|
|
||||||
return HttpResponseRedirect('shop:order_detail')
|
|
||||||
|
|
||||||
return super(OrderDetailView, self).get(request, *args, **kwargs)
|
return super(OrderDetailView, self).get(request, *args, **kwargs)
|
||||||
|
|
||||||
|
@ -111,6 +108,8 @@ class OrderDetailView(LoginRequiredMixin, DetailView):
|
||||||
product_remove = request.POST.get('remove_product')
|
product_remove = request.POST.get('remove_product')
|
||||||
if product_remove:
|
if product_remove:
|
||||||
order.orderproductrelation_set.filter(pk=product_remove).delete()
|
order.orderproductrelation_set.filter(pk=product_remove).delete()
|
||||||
|
if not order.products.count() > 0:
|
||||||
|
return HttpResponseRedirect(reverse_lazy('shop:index'))
|
||||||
|
|
||||||
return super(OrderDetailView, self).get(request, *args, **kwargs)
|
return super(OrderDetailView, self).get(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue