diff --git a/partdoc/partdoc/settings.py b/partdoc/partdoc/settings.py index 31adb7d..94ae01c 100644 --- a/partdoc/partdoc/settings.py +++ b/partdoc/partdoc/settings.py @@ -45,7 +45,7 @@ MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', + #'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', @@ -125,3 +125,7 @@ USE_TZ = True STATIC_URL = '/static/' STATIC_ROOT = 'static/' + + + +DATA_UPLOAD_MAX_NUMBER_FIELDS = 10000 \ No newline at end of file diff --git a/partdoc/parts/models.py b/partdoc/parts/models.py index d91dc22..8db21ce 100644 --- a/partdoc/parts/models.py +++ b/partdoc/parts/models.py @@ -67,7 +67,7 @@ class Part(PartModel): class BrandedPart(PartModel): part = models.ForeignKey(Part, null=True) brand = models.ForeignKey(Brand) - number = models.CharField(max_length=32, unique=True, blank=True, null=True) + number = models.CharField(max_length=64, unique=True, blank=True, null=True) def get_name(self): return self.part.name if self.part else "--None--" @@ -105,4 +105,4 @@ class ProductUsage(PartModel): def __str__(self): no = self.usage.part.number if self.usage else "--(part.number)--" - return "ProductUsage: " + self.product.name + " @ " + str(self.quantity) + "; "+ str(no) \ No newline at end of file + return "ProductUsage: " + self.product.name + " @ " + str(self.quantity) + "; "+ str(no) diff --git a/partdoc/parts/static/parts/add_sketch.js b/partdoc/parts/static/parts/add_sketch.js index ad00576..f82f9a3 100644 --- a/partdoc/parts/static/parts/add_sketch.js +++ b/partdoc/parts/static/parts/add_sketch.js @@ -3,7 +3,14 @@ function addRow(){ var clone = src.cloneNode(true); clone.id = ""; clone.className ="entry"; - clone.children[0].children[0].value = document.getElementsByClassName("entry").length + 1 + + var rows = $('#table > tr:last-child > td > input[name="fignumber"]'); + var fignumber = 1; + if (rows.length){ + fignumber = parseInt(rows[0].value) + 1; + } + + clone.children[0].children[0].value = fignumber; document.getElementById("table").appendChild(clone); var number = $("input[name|='partnumber']", clone); diff --git a/partdoc/parts/templates/parts/add.html b/partdoc/parts/templates/parts/add.html index 724cde0..e2feecd 100644 --- a/partdoc/parts/templates/parts/add.html +++ b/partdoc/parts/templates/parts/add.html @@ -1,34 +1,64 @@ {% load static %} - - - - + + + + -

add sketch to {{product.name}}

+{% if sketch.id %} + {% url "parts:continue_sketch" sketch.product_id sketch.id as form_action %} +{% else %} + {% url 'parts:new_sketch' product.id as form_action %} +{% endif %} - +

add sketch to {{ product.name }}

+
+ {% csrf_token %} + +

+ + + + + + + + + + + + + {% if sketch.usage_set.exists %} + {% for usage in sketch.usage_set.all %} + {% for productusage in usage.productusage_set.all %} + + + + + + + + + + + + {% endfor %} + {% endfor %} - -{% csrf_token %} -

-
Bild-Nr.Teil-Nr.InternTeilbezeichnungAnzahlverbaut bisverbaut abersetzt durchAnmerkungen
{{ usage.sketch_number }}{{ usage.part.number }}{{ productusage.internal_note }}{{ usage.part.part.name }}{{ productusage.quantity }}{{ productusage.used_until }}{{ productusage.used_since }}{{ productusage.replaced_by }}{{ productusage.note }}
- - - -
Bild-Nr.Teil-Nr.InternTeilbezeichnungAnzahlverbaut bisverbaut abersetzt durchAnmerkungen
- + {% endif %} +
+ - - - - - - - - - - - + + + + + + + + + + +
\ No newline at end of file diff --git a/partdoc/parts/templates/parts/sketch.html b/partdoc/parts/templates/parts/sketch.html index 4676218..cc4fb29 100644 --- a/partdoc/parts/templates/parts/sketch.html +++ b/partdoc/parts/templates/parts/sketch.html @@ -6,4 +6,6 @@ {% endfor %}

{{sketch.get_brand}}

-

{{sketch.get_brand.name.foo}}

\ No newline at end of file +

{{sketch.get_brand.name.foo}}

+ +Edit \ No newline at end of file diff --git a/partdoc/parts/urls.py b/partdoc/parts/urls.py index 37b7f6e..ded6360 100644 --- a/partdoc/parts/urls.py +++ b/partdoc/parts/urls.py @@ -7,6 +7,7 @@ urlpatterns = [ url(r'^$', views.index, name="index"), url(r'^product/(?P[0-9]+)/$', views.product, name="detail"), url(r'^sketch/(?P[0-9]+)/$', views.sketch, name="sketch"), + url(r'^add/(?P[0-9]+)/sketch/(?P[0-9]+)', views.sketch_add, name="continue_sketch"), url(r'^add/(?P[0-9]+)/sketch', views.sketch_add, name="new_sketch"), url(r'^search/part/$', views.part_search, name="part_search"), ] \ No newline at end of file diff --git a/partdoc/parts/views.py b/partdoc/parts/views.py index 290cadd..f518dc4 100644 --- a/partdoc/parts/views.py +++ b/partdoc/parts/views.py @@ -43,12 +43,15 @@ def part_search(request): return HttpResponse("404") @transaction.atomic -def sketch_add(request, product_id): +def sketch_add(request, product_id, sketch_id=None): product = get_object_or_404(Product, pk=product_id) - print(request.POST) + print(sketch_id) + if sketch_id: + sketch = Sketch.objects.get(id=sketch_id) + else: + sketch = Sketch() if not "sketch_name" in request.POST: - return render(request, 'parts/add.html', {'product': product}) - sketch = Sketch() + return render(request, 'parts/add.html', {'product': product, "sketch": sketch}) sketch.name = request.POST["sketch_name"] sketch.product = product sketch.brand = product.brand @@ -56,15 +59,14 @@ def sketch_add(request, product_id): for i in range(len(request.POST.getlist('name'))): print(i) usage = Usage() - print("ASDF2") usage.sketch = sketch usage.sketch_number = request.POST.getlist('fignumber')[i] - if "ähn" in usage.sketch_number or "vgl" in usage.sketch_number: - usage.exact_sketch = False - - print("ASDF3") - branded_part, created = BrandedPart.objects.get_or_create(brand=product.brand, number=request.POST.getlist('partnumber')[i]) - print("ASDF", branded_part, created) + usage.exact_sketch = is_exact_sketchnumber(usage.sketch_number) + + part_number = request.POST.getlist('partnumber')[i] + if len(part_number)<1: + continue + branded_part, created = BrandedPart.objects.get_or_create(brand=product.brand, number=part_number) if created: try: part, _ = Part.objects.get_or_create(name=request.POST.getlist('name')[i]) @@ -73,14 +75,13 @@ def sketch_add(request, product_id): branded_part.part = part branded_part.brand = product.brand branded_part.save() - print("ASDF") usage.part = branded_part usage.save() prod = ProductUsage() prod.usage = usage prod.product = product - prod.quantity = int(request.POST.getlist('quantity')[i]) + prod.quantity = get_quantity(request.POST.getlist('quantity')[i].strip()) last_version = request.POST.getlist('last_version')[i] if len(last_version): version, _ = Version.objects.get_or_create(product=product, name=last_version) @@ -96,10 +97,21 @@ def sketch_add(request, product_id): if len(replaced): #replacement, _ = ProductUsage.objects.get_or_create(product=product, usage__part__number=replaced) #prod.replaced_by = replacement - prod.note+= "{REP:"+str(replaced)+"}" + prod.note+= "{REP:"+str(replaced)+"}" #TODO internal = request.POST.getlist('internal')[i] if len(internal): prod.internal = internal prod.save() - return HttpResponseRedirect(reverse('parts:sketch', args=(sketch.id,))) \ No newline at end of file + return HttpResponseRedirect(reverse('parts:sketch', args=(sketch.id,))) + + +def get_quantity(qnty_str): + qnty = 0 + if len(qnty_str): + qnty = int(qnty_str) + return qnty + +def is_exact_sketchnumber(sketch_number): + approximate = ("ähn", "vgl", "~", "zu") + return not any([i in sketch_number for i in approximate]) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 2796b7c..0000000 --- a/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -django -psycopg2 -django-extensions