diff --git a/docker-compose.yml b/docker-compose.yml index cce2ca9..f1dda66 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,7 +7,7 @@ services: env_file: postgres.env volumes: - ./partdoc/:/app/ - - ./sketches/:/app/sketches/ + #- ./sketches/:/app/sketches/ working_dir: /app command: python3 ./manage.py runserver 0.0.0.0:8000 ports: diff --git a/partdoc/parts/static/parts/add_sketch.js b/partdoc/parts/static/parts/add_sketch.js index f82f9a3..942abee 100644 --- a/partdoc/parts/static/parts/add_sketch.js +++ b/partdoc/parts/static/parts/add_sketch.js @@ -12,6 +12,8 @@ function addRow(){ clone.children[0].children[0].value = fignumber; document.getElementById("table").appendChild(clone); + var tabables = $("input[tabindex|='-1']", clone); + tabables.attr("tabindex", $('#table > tr').length); var number = $("input[name|='partnumber']", clone); number.autocomplete({ @@ -19,8 +21,27 @@ function addRow(){ change: function (event, ui){setPartDesc(number, ui);}, delay: 50 }); + + var fig = $("input[name|='fignumber']", clone); + fig.focus(function() { + var prev = fig.parent().parent().prev("tr"); + if (prev.length && parseInt(fig.val())) { + var rawnumber = prev[0].children[0].children[0].value; + var prevnumber = parseInt(rawnumber.split(" ").pop()); + if (prevnumber){ + var fignumber = prevnumber + 1; + fig.val(fignumber); + console.log(fignumber); + }else{ + console.log("failed to parse int: " + rawnumber); + } + }else{ + console.log("failed to load prev"); + } + }); + $("#addRowBtn")[0].innerHTML = $('#table > tr').length; } function setPartDesc(target, option){ var part = $("input[name|='name']", event.target.parentNode.parentNode); part.attr("value", option.item.name); -} \ No newline at end of file +} diff --git a/partdoc/parts/templates/parts/add.html b/partdoc/parts/templates/parts/add.html index 834b553..746698d 100644 --- a/partdoc/parts/templates/parts/add.html +++ b/partdoc/parts/templates/parts/add.html @@ -13,9 +13,10 @@

add sketch to {{ product.name }}

{% csrf_token %} +

- + @@ -50,15 +51,15 @@
Bild-Nr.
- - + + - - + +
- \ No newline at end of file + 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", '')