* impove add_sketch

* support adding entries to existing sketches
master
agp8x 2018-01-18 13:47:25 +01:00
parent f9320f9b81
commit d4050516ba
8 changed files with 102 additions and 49 deletions

View File

@ -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

View File

@ -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)
return "ProductUsage: " + self.product.name + " @ " + str(self.quantity) + "; "+ str(no)

View File

@ -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);

View File

@ -1,34 +1,64 @@
{% load static %}
<script type="text/javascript" src="{% static 'parts/add_sketch.js' %}"> </script>
<script type="text/javascript" src="{% static 'parts/jquery-3.2.1.min.js' %}"> </script>
<script src="{% static 'parts/jquery-ui-1.12.1/jquery-ui.min.js' %}" type="text/javascript"></script>
<link rel="stylesheet" href="{% static 'parts/jquery-ui-1.12.1/jquery-ui.min.css' %}" type="text/css" media="all" />
<script type="text/javascript" src="{% static 'parts/jquery-3.2.1.min.js' %}"></script>
<script type="text/javascript" src="{% static 'parts/jquery-ui-1.12.1/jquery-ui.min.js' %}"></script>
<script type="text/javascript" src="{% static 'parts/add_sketch.js' %}"></script>
<link rel="stylesheet" href="{% static 'parts/jquery-ui-1.12.1/jquery-ui.min.css' %}" type="text/css" media="all"/>
<h1>add sketch to {{product.name}}</h1>
{% 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 %}
<button type="button" onclick="addRow()">add row</button>
<h1>add sketch to {{ product.name }}</h1>
<form action="{{ form_action }}" method="post">
{% csrf_token %}
<input type="submit"/>
<p><label for="sketch_name">Name:</label><input type="text" name="sketch_name" value="{{ sketch.name }}"/></p>
<table id="table">
<tr>
<th>Bild-Nr.</th>
<th>Teil-Nr.</th>
<th>Intern</th>
<th>Teilbezeichnung</th>
<th>Anzahl</th>
<th>verbaut bis</th>
<th>verbaut ab</th>
<th>ersetzt durch</th>
<th>Anmerkungen</th>
</tr>
{% if sketch.usage_set.exists %}
{% for usage in sketch.usage_set.all %}
{% for productusage in usage.productusage_set.all %}
<tr>
<td>{{ usage.sketch_number }}</td>
<td>{{ usage.part.number }}</td>
<td>{{ productusage.internal_note }}</td>
<td>{{ usage.part.part.name }}</td>
<td>{{ productusage.quantity }}</td>
<td>{{ productusage.used_until }}</td>
<td>{{ productusage.used_since }}</td>
<td>{{ productusage.replaced_by }}</td>
<td>{{ productusage.note }}</td>
</tr>
{% endfor %}
{% endfor %}
<form action="{% url 'parts:new_sketch' product.id %}" method="post">
{% csrf_token %}
<p><label for="sketch_name">Name:</label><input type="text" name="sketch_name" /></p>
<table id="table">
<tr>
<th>Bild-Nr.</th><th>Teil-Nr.</th><th>Intern</th><th>Teilbezeichnung</th><th>Anzahl</th><th>verbaut bis</th><th>verbaut ab</th><th>ersetzt durch</th><th>Anmerkungen</th>
</tr>
</table>
<input type="submit" />
{% endif %}
</table>
</form>
<button type="button" onclick="addRow()">add row</button>
<table style="display:none;">
<tr id="template">
<td><input type="text" size="8" name="fignumber" /></td>
<td><input type="text" size="13" name="partnumber" /></td>
<td><input type="text" size="1" name="internal" /></td>
<td><input type="text" size="32" name="name" /></td>
<td><input type="number" size="4" name="quantity" /></td>
<td><input type="text" size="16" name="last_version" /></td>
<td><input type="text" size="16" name="first_version" /></td>
<td><input type="text" size="13" name="replaced_by" /></td>
<td><input type="text" size="16" name="notes" /></td>
</tr>
<tr id="template">
<td><input type="text" size="8" name="fignumber"/></td>
<td><input type="text" size="13" name="partnumber"/></td>
<td><input type="text" size="1" name="internal"/></td>
<td><input type="text" size="32" name="name"/></td>
<td><input type="number" size="4" name="quantity"/></td>
<td><input type="text" size="16" name="last_version"/></td>
<td><input type="text" size="16" name="first_version"/></td>
<td><input type="text" size="13" name="replaced_by"/></td>
<td><input type="text" size="16" name="notes"/></td>
</tr>
</table>
<script type="text/javascript">addRow();</script>

View File

@ -6,4 +6,6 @@
{% endfor %}
</ul>
<p>{{sketch.get_brand}}</p>
<p>{{sketch.get_brand.name.foo}}</p>
<p>{{sketch.get_brand.name.foo}}</p>
<a href="{% url "parts:continue_sketch" sketch.product_id sketch.id %}">Edit</a>

View File

@ -7,6 +7,7 @@ urlpatterns = [
url(r'^$', views.index, name="index"),
url(r'^product/(?P<product_id>[0-9]+)/$', views.product, name="detail"),
url(r'^sketch/(?P<sketch_id>[0-9]+)/$', views.sketch, name="sketch"),
url(r'^add/(?P<product_id>[0-9]+)/sketch/(?P<sketch_id>[0-9]+)', views.sketch_add, name="continue_sketch"),
url(r'^add/(?P<product_id>[0-9]+)/sketch', views.sketch_add, name="new_sketch"),
url(r'^search/part/$', views.part_search, name="part_search"),
]

View File

@ -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,)))
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])

View File

@ -1,3 +0,0 @@
django
psycopg2
django-extensions