From 03a17839bee6e0bc193a1466d33c1541e8a4683f Mon Sep 17 00:00:00 2001 From: agp8x Date: Wed, 4 Dec 2019 01:10:36 +0100 Subject: [PATCH] add parts list --- partdoc/parts/templates/parts/parts.html | 28 ++++++++++++++++++++++++ partdoc/parts/urls.py | 1 + partdoc/parts/views.py | 27 +++++++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 partdoc/parts/templates/parts/parts.html diff --git a/partdoc/parts/templates/parts/parts.html b/partdoc/parts/templates/parts/parts.html new file mode 100644 index 0000000..75c1310 --- /dev/null +++ b/partdoc/parts/templates/parts/parts.html @@ -0,0 +1,28 @@ +

parts

+ + + + + + {% for product in products %} + + {% endfor %} + + + +{% for part in quantities %} + + + + {% for product in part.quantities %} + + {% endfor %} + + +{% endfor %} + + + + + +
Teil-Nr.Teilbezeichnung{{product.name}}Summe
{{part.number}}{{part.name}}{{product}}{{part.sum}}
Summe:{{len}}Teile
diff --git a/partdoc/parts/urls.py b/partdoc/parts/urls.py index b2ebf38..91dadcf 100644 --- a/partdoc/parts/urls.py +++ b/partdoc/parts/urls.py @@ -7,6 +7,7 @@ urlpatterns = [ path('', views.index, name="index"), path('product//', views.product, name="detail"), path('sketch//', views.sketch, name="sketch"), + path('parts', views.parts, name="parts"), path('add//sketch/', views.sketch_add, name="continue_sketch"), path('add//sketch', views.sketch_add, name="new_sketch"), path('search/part/', views.part_search, name="part_search"), diff --git a/partdoc/parts/views.py b/partdoc/parts/views.py index cc523af..bb5074e 100644 --- a/partdoc/parts/views.py +++ b/partdoc/parts/views.py @@ -3,6 +3,7 @@ from django.shortcuts import get_object_or_404, render from django.http import HttpResponseRedirect, HttpResponse from django.urls import reverse from django.db import transaction +from django.db.models import Sum from .models import * @@ -28,6 +29,32 @@ def sketch(request, sketch_id): return render(request, 'parts/sketch.html', context) +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) + quantities.append({ + "name": part.get_name(), + "number": part.number, + "quantities": prod_qtys, + "sum": sum(prod_qtys), + }) + + context = {'products': products, 'parts': parts, 'quantities': quantities, 'len': len(quantities)} + return render(request, 'parts/parts.html', context) + + def part_search(request): if "term" in request.GET: term = request.GET.get("term", '')