From 1d91c5da384024d6413bca0aa687f7804feffec6 Mon Sep 17 00:00:00 2001 From: agp8x Date: Thu, 5 Dec 2019 23:45:42 +0100 Subject: [PATCH] partlist: fix product alignment, add product sum --- partdoc/parts/templates/parts/parts.html | 3 +++ partdoc/parts/views.py | 30 ++++++++++++++---------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/partdoc/parts/templates/parts/parts.html b/partdoc/parts/templates/parts/parts.html index 21fe47e..47831d8 100644 --- a/partdoc/parts/templates/parts/parts.html +++ b/partdoc/parts/templates/parts/parts.html @@ -24,5 +24,8 @@ Summe: {{len}} + {% for product in product_sums %} + {{product}} + {% endfor %} Teile diff --git a/partdoc/parts/views.py b/partdoc/parts/views.py index 0b77aa8..2a53682 100644 --- a/partdoc/parts/views.py +++ b/partdoc/parts/views.py @@ -1,4 +1,5 @@ import json +from collections import defaultdict from django.shortcuts import get_object_or_404, render from django.http import HttpResponseRedirect, HttpResponse from django.urls import reverse @@ -45,17 +46,16 @@ def parts(request): products = Product.objects.order_by('name') parts = BrandedPart.objects.order_by('number') quantities = [] - for part in parts: # FIXME! - qtys = part.usage_set.values('productusage__product__name').annotate(Sum('productusage__quantity')).order_by('productusage__product__name') - #prod_qtys = {} - prod_qtys = [] - for obj in qtys: - # FIXME: make sure there are n(==products) entries - #prod_qtys['productusage__product__name'] = obj['productusage__quantity__sum'] - qty = obj['productusage__quantity__sum'] - if not qty: - qty = 0 - prod_qtys.append(qty) + product_sums = defaultdict(lambda: 0) + for part in parts: # TODO: replace by sophisticated query + qtys = defaultdict(lambda: 0) + for result in part.usage_set.values('productusage__product__name').annotate(Sum('productusage__quantity')).order_by('productusage__product__name'): + prod_name = result['productusage__product__name'] + prod_sum = result['productusage__quantity__sum'] + if prod_sum: + qtys[prod_name] = prod_sum + product_sums[prod_name] += prod_sum + prod_qtys = [qtys[prod.name] for prod in products] quantities.append({ "name": part.get_name(), "number": part.number, @@ -64,7 +64,13 @@ def parts(request): "id": part.id, }) - context = {'products': products, 'parts': parts, 'quantities': quantities, 'len': len(quantities)} + context = { + 'products': products, + 'parts': parts, + 'quantities': quantities, + 'len': len(quantities), + 'product_sums': [product_sums[prod.name] for prod in products] + } return render(request, 'parts/parts.html', context)