parent
f9320f9b81
commit
d4050516ba
|
|
@ -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
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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"),
|
||||
]
|
||||
|
|
@ -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])
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
django
|
||||
psycopg2
|
||||
django-extensions
|
||||
Loading…
Reference in New Issue