Merge pull request #644 from SchrodingersGat/supplier-part-tabs

Supplier part tabs
This commit is contained in:
Oliver 2020-02-12 12:55:54 +11:00 committed by GitHub
commit f03f6c4386
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 809 additions and 391 deletions

View File

@ -1,172 +0,0 @@
{% extends "base.html" %}
{% load static %}
{% load i18n %}
{% block page_title %}
InvenTree | {{ company.name }} - {% trans "Parts" %}
{% endblock %}
{% block content %}
<div class='row'>
<div class='col-sm-6'>
<h3>{% trans "Supplier Part" %}</h3>
<div class='btn-row'>
<div class='btn-group'>
<button type='button' class='btn btn-default btn-glyph' id='edit-part' title='Edit supplier part'>
<span class='glyphicon glyphicon-edit'/>
</button>
<button type='button' class='btn btn-default btn-glyph' id='delete-part' title='Delete supplier part'>
<span class='glyphicon glyphicon-trash'/>
</button>
</div>
</div>
</div>
<div class='col-sm-6'>
<div class='media-left'>
<img class='part-thumb'
{% if part.part.image %}
src='{{ part.part.image.url }}'
{% else %}
src="{% static 'img/blank_image.png' %}"
{% endif %}/>
</div>
</div>
</div>
<hr>
<div class='row'>
<div class='col-sm-6'>
<h4>{% trans "Supplier Part Details" %}</h4>
<table class="table table-striped table-condensed">
<tr>
<td>{% trans "Internal Part" %}</td>
<td>
{% if part.part %}
<a href="{% url 'part-suppliers' part.part.id %}">{{ part.part.full_name }}</a>
{% endif %}
</td>
</tr>
<tr><td>{% trans "Supplier" %}</td><td><a href="{% url 'company-detail-parts' part.supplier.id %}">{{ part.supplier.name }}</a></td></tr>
<tr><td>{% trans "SKU" %}</td><td>{{ part.SKU }}</tr></tr>
{% if part.URL %}
<tr><td>{% trans "URL" %}</td><td><a href="{{ part.URL }}">{{ part.URL }}</a></td></tr>
{% endif %}
{% if part.description %}
<tr><td>{% trans "Description" %}</td><td>{{ part.description }}</td></tr>
{% endif %}
{% if part.manufacturer %}
<tr><td>{% trans "Manufacturer" %}</td><td>{{ part.manufacturer }}</td></tr>
<tr><td>{% trans "MPN" %}</td><td>{{ part.MPN }}</td></tr>
{% endif %}
{% if part.note %}
<tr><td>{% trans "Note" %}</td><td>{{ part.note }}</td></tr>
{% endif %}
</table>
</div>
<div class='col-sm-6'>
<h4>{% trans "Pricing Information" %}</h4>
<table class="table table-striped table-condensed">
<tr><td>{% trans "Order Multiple" %}</td><td>{{ part.multiple }}</td></tr>
{% if part.base_cost > 0 %}
<tr><td>{% trans "Base Price (Flat Fee)" %}</td><td>{{ part.base_cost }}</td></tr>
{% endif %}
<tr>
<th>{% trans "Price Breaks" %}</th>
<th>
<div style='float: right;'>
<button class='btn btn-primary' id='new-price-break' type='button'>{% trans "New Price Break" %}</button>
</div>
</th>
</tr>
<tr>
<th>{% trans "Quantity" %}</th>
<th>{% trans "Price" %}</th>
</tr>
{% if part.price_breaks.all %}
{% for pb in part.price_breaks.all %}
<tr>
<td>{{ pb.quantity }}</td>
<td>
{% if pb.currency %}{{ pb.currency.symbol }}{% endif %}
{{ pb.cost }}
{% if pb.currency %}{{ pb.currency.suffix }}{% endif %}
<div class='btn-group' style='float: right;'>
<button title='Edit Price Break' class='btn btn-default btn-sm pb-edit-button' type='button' url="{% url 'price-break-edit' pb.id %}"><span class='glyphicon glyphicon-edit'></span></button>
<button title='Delete Price Break' class='btn btn-default btn-sm pb-delete-button' type='button' url="{% url 'price-break-delete' pb.id %}"><span class='glyphicon glyphicon-trash'></span></button>
</div>
</td>
</tr>
{% endfor %}
{% else %}
<tr>
<td colspan='2'>
<span class='warning-msg'><i>{% trans "No price breaks have been added for this part" %}</i></span>
</td>
</tr>
{% endif %}
</table>
</div>
</div>
<hr>
<h4>{% trans "Purchase Orders" %}</h4>
{% include "order/po_table.html" with orders=part.purchase_orders %}
{% endblock %}
{% block js_ready %}
{{ block.super }}
$('#edit-part').click(function () {
launchModalForm(
"{% url 'supplier-part-edit' part.id %}",
{
reload: true
}
);
});
$('#delete-part').click(function() {
launchModalForm(
"{% url 'supplier-part-delete' %}?part={{ part.id }}",
{
redirect: "{% url 'company-detail-parts' part.supplier.id %}"
}
);
});
$('#new-price-break').click(function() {
launchModalForm("{% url 'price-break-create' %}",
{
reload: true,
data: {
part: {{ part.id }},
}
}
);
});
$('.pb-edit-button').click(function() {
var button = $(this);
launchModalForm(button.attr('url'),
{
reload: true,
}
);
});
$('.pb-delete-button').click(function() {
var button = $(this);
launchModalForm(button.attr('url'),
{
reload: true,
}
);
});
{% endblock %}

View File

@ -0,0 +1,68 @@
{% extends "base.html" %}
{% load static %}
{% load i18n %}
{% block page_title %}
InvenTree | {% trans "Supplier Part" %}
{% endblock %}
{% block content %}
<div class='row'>
<div class='col-sm-6'>
<h3>{% trans "Supplier Part" %}</h3>
<div class='btn-row'>
<div class='btn-group'>
<button type='button' class='btn btn-default btn-glyph' id='edit-part' title='Edit supplier part'>
<span class='glyphicon glyphicon-edit'/>
</button>
<button type='button' class='btn btn-default btn-glyph' id='delete-part' title='Delete supplier part'>
<span class='glyphicon glyphicon-trash'/>
</button>
</div>
</div>
</div>
<div class='col-sm-6'>
<div class='media-left'>
<img class='part-thumb'
{% if part.part.image %}
src='{{ part.part.image.url }}'
{% else %}
src="{% static 'img/blank_image.png' %}"
{% endif %}/>
</div>
</div>
</div>
<hr>
<div class='container-fluid'>
{% block details %}
<!-- Particular SupplierPart page goes here ... -->
{% endblock %}
</div>
{% endblock %}
{% block js_ready %}
{{ block.super }}
$('#edit-part').click(function () {
launchModalForm(
"{% url 'supplier-part-edit' part.id %}",
{
reload: true
}
);
});
$('#delete-part').click(function() {
launchModalForm(
"{% url 'supplier-part-delete' %}?part={{ part.id }}",
{
redirect: "{% url 'company-detail-parts' part.supplier.id %}"
}
);
});
{% endblock %}

View File

@ -0,0 +1,44 @@
{% extends "company/supplier_part_base.html" %}
{% load static %}
{% load i18n %}
{% block details %}
{% include "company/supplier_part_tabs.html" with tab='details' %}
<hr>
<h4>{% trans "Supplier Part Details" %}</h4>
<table class="table table-striped table-condensed">
<tr>
<td>{% trans "Internal Part" %}</td>
<td>
{% if part.part %}
<a href="{% url 'part-suppliers' part.part.id %}">{{ part.part.full_name }}</a>
{% endif %}
</td>
</tr>
<tr><td>{% trans "Supplier" %}</td><td><a href="{% url 'company-detail-parts' part.supplier.id %}">{{ part.supplier.name }}</a></td></tr>
<tr><td>{% trans "SKU" %}</td><td>{{ part.SKU }}</tr></tr>
{% if part.URL %}
<tr><td>{% trans "URL" %}</td><td><a href="{{ part.URL }}">{{ part.URL }}</a></td></tr>
{% endif %}
{% if part.description %}
<tr><td>{% trans "Description" %}</td><td>{{ part.description }}</td></tr>
{% endif %}
{% if part.manufacturer %}
<tr><td>{% trans "Manufacturer" %}</td><td>{{ part.manufacturer }}</td></tr>
<tr><td>{% trans "MPN" %}</td><td>{{ part.MPN }}</td></tr>
{% endif %}
{% if part.note %}
<tr><td>{% trans "Note" %}</td><td>{{ part.note }}</td></tr>
{% endif %}
</table>
{% endblock %}
{% block js_ready %}
{{ block.super }}
{% endblock %}

View File

@ -0,0 +1,31 @@
{% extends "company/supplier_part_base.html" %}
{% load static %}
{% load i18n %}
{% block details %}
{% include "company/supplier_part_tabs.html" with tab='orders' %}
<hr>
<h4>{% trans "Supplier Part Orders" %}</h4>
<div id='button-bar'>
<div class='btn-group'>
<button class='btn btn-primary' type='button' id='part-order2' title='Order part'>Order Part</button>
</div>
</div>
<table class='table table-striped table-condensed po-table' id='purchase-order-table' data-toolbar='#button-bar'>
</table>
{% endblock %}
{% block js_ready %}
{{ block.super }}
loadPurchaseOrderTable($("#purchase-order-table"), {
url: "{% url 'api-po-list' %}?supplier_part={{ part.id }}",
});
{% endblock %}

View File

@ -0,0 +1,92 @@
{% extends "company/supplier_part_base.html" %}
{% load static %}
{% load i18n %}
{% load inventree_extras %}
{% block details %}
{% include "company/supplier_part_tabs.html" with tab='pricing' %}
<hr>
<h4>{% trans "Pricing Information" %}</h4>
<table class="table table-striped table-condensed">
<tr><td>{% trans "Order Multiple" %}</td><td>{{ part.multiple }}</td></tr>
{% if part.base_cost > 0 %}
<tr><td>{% trans "Base Price (Flat Fee)" %}</td><td>{{ part.base_cost }}</td></tr>
{% endif %}
<tr>
<th>{% trans "Price Breaks" %}</th>
<th>
<div style='float: right;'>
<button class='btn btn-primary' id='new-price-break' type='button'>{% trans "New Price Break" %}</button>
</div>
</th>
</tr>
<tr>
<th>{% trans "Quantity" %}</th>
<th>{% trans "Price" %}</th>
</tr>
{% if part.price_breaks.all %}
{% for pb in part.price_breaks.all %}
<tr>
<td>{% decimal pb.quantity %}</td>
<td>
{% if pb.currency %}{{ pb.currency.symbol }}{% endif %}
{% decimal pb.cost %}
{% if pb.currency %}{{ pb.currency.suffix }}{% endif %}
<div class='btn-group' style='float: right;'>
<button title='Edit Price Break' class='btn btn-default btn-sm pb-edit-button' type='button' url="{% url 'price-break-edit' pb.id %}"><span class='glyphicon glyphicon-edit'></span></button>
<button title='Delete Price Break' class='btn btn-default btn-sm pb-delete-button' type='button' url="{% url 'price-break-delete' pb.id %}"><span class='glyphicon glyphicon-trash'></span></button>
</div>
</td>
</tr>
{% endfor %}
{% else %}
<tr>
<td colspan='2'>
<span class='warning-msg'><i>{% trans "No price breaks have been added for this part" %}</i></span>
</td>
</tr>
{% endif %}
</table>
{% endblock %}
{% block js_ready %}
{{ block.super }}
$('#new-price-break').click(function() {
launchModalForm("{% url 'price-break-create' %}",
{
reload: true,
data: {
part: {{ part.id }},
}
}
);
});
$('.pb-edit-button').click(function() {
var button = $(this);
launchModalForm(button.attr('url'),
{
reload: true,
}
);
});
$('.pb-delete-button').click(function() {
var button = $(this);
launchModalForm(button.attr('url'),
{
reload: true,
}
);
});
{% endblock %}

View File

@ -0,0 +1,72 @@
{% extends "company/supplier_part_base.html" %}
{% load static %}
{% load i18n %}
{% block details %}
{% include "company/supplier_part_tabs.html" with tab='stock' %}
<hr>
<h4>{% trans "Supplier Part Stock" %}</h4>
{% include "stock_table.html" %}
{% endblock %}
{% block js_load %}
{{ block.super }}
<script type='text/javascript' src="{% static 'script/inventree/stock.js' %}"></script>
{% endblock %}
{% block js_ready %}
{{ block.super }}
loadStockTable($("#stock-table"), {
params: {
supplier_part: {{ part.id }},
location_detail: true,
part_detail: true,
},
groupByField: 'location',
buttons: ['#stock-options'],
url: "{% url 'api-stock-list' %}",
});
$("#stock-export").click(function() {
launchModalForm("{% url 'stock-export-options' %}", {
submit_text: '{% trans "Export" %}',
success: function(response) {
var url = "{% url 'stock-export' %}";
url += "?format=" + response.format;
url += "&cascade=" + response.cascade;
url += "&supplier_part={{ part.id }}";
location.href = url;
},
});
});
$("#item-create").click(function() {
launchModalForm("{% url 'stock-item-create' %}", {
reload: true,
data: {
part: {{ part.part.id }},
supplier_part: {{ part.id }},
},
secondary: [
{
field: 'location',
label: '{% trans "New Location" %}',
title: '{% trans "Create New Location" %}',
url: "{% url 'stock-location-create' %}",
}
]
});
return false;
});
{% endblock %}

View File

@ -0,0 +1,16 @@
{% load i18n %}
<ul class='nav nav-tabs'>
<li{% if tab == 'details' %} class='active'{% endif %}>
<a href="{% url 'supplier-part-detail' part.id %}">{% trans "Details" %}</a>
</li>
<li{% if tab == 'pricing' %} class='active'{% endif %}>
<a href="{% url 'supplier-part-pricing' part.id %}">{% trans "Pricing" %}</a>
</li>
<li{% if tab == 'stock' %} class='active'{% endif %}>
<a href="{% url 'supplier-part-stock' part.id %}">{% trans "Stock" %}</a>
</li>
<li {% if tab == 'orders' %} class='active'{% endif %}>
<a href="{% url 'supplier-part-orders' part.id %}">{% trans "Orders" %}</a>
</li>
</ul>

View File

@ -47,7 +47,11 @@ price_break_urls = [
]
supplier_part_detail_urls = [
url(r'edit/?', views.SupplierPartEdit.as_view(), name='supplier-part-edit'),
url(r'^edit/?', views.SupplierPartEdit.as_view(), name='supplier-part-edit'),
url(r'^pricing/', views.SupplierPartDetail.as_view(template_name='company/supplier_part_pricing.html'), name='supplier-part-pricing'),
url(r'^orders/', views.SupplierPartDetail.as_view(template_name='company/supplier_part_orders.html'), name='supplier-part-orders'),
url(r'^stock/', views.SupplierPartDetail.as_view(template_name='company/supplier_part_stock.html'), name='supplier-part-stock'),
url('^.*$', views.SupplierPartDetail.as_view(), name='supplier-part-detail'),
]

View File

@ -149,7 +149,7 @@ class CompanyDelete(AjaxDeleteView):
class SupplierPartDetail(DetailView):
""" Detail view for SupplierPart """
model = SupplierPart
template_name = 'company/partdetail.html'
template_name = 'company/supplier_part_detail.html'
context_object_name = 'part'
queryset = SupplierPart.objects.all()

View File

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-02-11 23:25+0000\n"
"POT-Creation-Date: 2020-02-12 00:31+0000\n"
"PO-Revision-Date: 2020-02-02 08:07+0100\n"
"Last-Translator: Christian Schlüter <chschlue@gmail.com>\n"
"Language-Team: C <kde-i18n-doc@kde.org>\n"
@ -254,7 +254,7 @@ msgstr "Teile bestellen"
#: build/templates/build/allocate_view.html:18
#: company/templates/company/index.html:54
#: company/templates/company/partdetail.html:57
#: company/templates/company/supplier_part_detail.html:27
#: order/templates/order/purchase_order_detail.html:26
#: part/templates/part/detail.html:33
msgid "Description"
@ -281,7 +281,7 @@ msgid "Title"
msgstr "Titel"
#: build/templates/build/detail.html:20
#: company/templates/company/partdetail.html:85
#: company/templates/company/supplier_part_pricing.html:27
#: order/templates/order/purchase_order_detail.html:29
#: stock/templates/stock/item_base.html:90
#: stock/templates/stock/stock_adjust.html:18
@ -308,7 +308,7 @@ msgstr "Los"
#: build/templates/build/detail.html:42
#: company/templates/company/detail_part.html:90
#: company/templates/company/partdetail.html:54
#: company/templates/company/supplier_part_detail.html:24
#: part/templates/part/detail.html:50 part/templates/part/part_base.html:81
#: stock/templates/stock/item_base.html:120
msgid "URL"
@ -351,8 +351,9 @@ msgstr "Speichern"
msgid "Edit notes"
msgstr "Bermerkungen bearbeiten"
#: build/templates/build/tabs.html:5 company/templates/company/tabs.html:5
#: part/templates/part/tabs.html:6
#: build/templates/build/tabs.html:5
#: company/templates/company/supplier_part_tabs.html:5
#: company/templates/company/tabs.html:5 part/templates/part/tabs.html:6
msgid "Details"
msgstr "Details"
@ -438,7 +439,7 @@ msgstr "Bau-Fertigstellung bestätigen"
msgid "Invalid location selected"
msgstr "Ungültige Teileauswahl"
#: build/views.py:290 stock/views.py:884
#: build/views.py:290 stock/views.py:916
#, python-brace-format
msgid "The following serial numbers already exist: ({sn})"
msgstr "Die folgende Seriennummer existiert bereits: ({sn})"
@ -600,7 +601,7 @@ msgid "Supplier stock keeping unit"
msgstr "Stock Keeping Units (SKU) des Zulieferers"
#: company/models.py:240 company/templates/company/detail_part.html:81
#: company/templates/company/partdetail.html:60
#: company/templates/company/supplier_part_detail.html:30
msgid "Manufacturer"
msgstr "Hersteller"
@ -662,7 +663,7 @@ msgstr "Kunde"
#: company/templates/company/detail.html:17
#: company/templates/company/index.html:46
#: company/templates/company/partdetail.html:51
#: company/templates/company/supplier_part_detail.html:21
#: order/templates/order/order_base.html:67
#: stock/templates/stock/item_base.html:126
msgid "Supplier"
@ -674,12 +675,13 @@ msgid "Supplier Parts"
msgstr "Zulieferer-Teile"
#: company/templates/company/detail_part.html:13
#: part/templates/part/stock.html:81
#, fuzzy
#| msgid "Supplier Part"
msgid "New Supplier Part"
msgstr "Zulieferer-Teil"
#: company/templates/company/detail_part.html:15
#: company/templates/company/detail_part.html:15 templates/stock_table.html:10
msgid "Options"
msgstr ""
@ -690,12 +692,11 @@ msgid "Delete Parts"
msgstr "Anhang löschen"
#: company/templates/company/detail_part.html:73
#: company/templates/company/partdetail.html:52
#: company/templates/company/supplier_part_detail.html:22
msgid "SKU"
msgstr ""
#: company/templates/company/detail_purchase_orders.html:8
#: company/templates/company/partdetail.html:116
#: company/templates/company/tabs.html:15 part/templates/part/tabs.html:43
msgid "Purchase Orders"
msgstr "Bestellungen"
@ -713,6 +714,8 @@ msgid "Supplier Stock"
msgstr "Zulieferer-Teil"
#: company/templates/company/detail_stock.html:33
#: company/templates/company/supplier_part_stock.html:38
#: part/templates/part/stock.html:53 templates/stock_table.html:5
msgid "Export"
msgstr ""
@ -733,10 +736,8 @@ msgstr "Zulieferer"
msgid "ID"
msgstr ""
#: company/templates/company/index.html:69
#: company/templates/company/partdetail.html:6
#: part/templates/part/category.html:73 templates/navbar.html:10
#: templates/stats.html:7 templates/stats.html:10
#: company/templates/company/index.html:69 part/templates/part/category.html:73
#: templates/navbar.html:10 templates/stats.html:7 templates/stats.html:10
msgid "Parts"
msgstr "Teile"
@ -750,71 +751,112 @@ msgid "Are you sure you want to delete the following Supplier Parts?"
msgstr ""
"Sind Sie sicher, dass sie die folgenden Zulieferer-Teile löschen möchten?"
#: company/templates/company/partdetail.html:13
#: company/templates/company/supplier_part_base.html:6
#: company/templates/company/supplier_part_base.html:13
#: stock/templates/stock/item_base.html:130
msgid "Supplier Part"
msgstr "Zulieferer-Teil"
#: company/templates/company/partdetail.html:41
#: company/templates/company/supplier_part_detail.html:11
#, fuzzy
#| msgid "Supplier Parts"
msgid "Supplier Part Details"
msgstr "Zulieferer-Teile"
#: company/templates/company/partdetail.html:44
#: company/templates/company/supplier_part_detail.html:14
#, fuzzy
#| msgid "Internal Part Number"
msgid "Internal Part"
msgstr "Interne Teilenummer"
#: company/templates/company/partdetail.html:61
#: company/templates/company/supplier_part_detail.html:31
#, fuzzy
#| msgid "IPN"
msgid "MPN"
msgstr "IPN (Interne Produktnummer)"
#: company/templates/company/partdetail.html:64
#: company/templates/company/supplier_part_detail.html:34
#: order/templates/order/purchase_order_detail.html:33
msgid "Note"
msgstr "Notiz"
#: company/templates/company/partdetail.html:70
#: company/templates/company/supplier_part_orders.html:11
#, fuzzy
#| msgid "Supplier Parts"
msgid "Supplier Part Orders"
msgstr "Zulieferer-Teile"
#: company/templates/company/supplier_part_pricing.html:12
#, fuzzy
#| msgid "Show pricing information"
msgid "Pricing Information"
msgstr "Kosteninformationen ansehen"
#: company/templates/company/partdetail.html:72
#: company/templates/company/supplier_part_pricing.html:14
#, fuzzy
#| msgid "Order notes"
msgid "Order Multiple"
msgstr "Bestell-Notizen"
#: company/templates/company/partdetail.html:74
#: company/templates/company/supplier_part_pricing.html:16
msgid "Base Price (Flat Fee)"
msgstr ""
#: company/templates/company/partdetail.html:77
#: company/templates/company/supplier_part_pricing.html:19
msgid "Price Breaks"
msgstr ""
#: company/templates/company/partdetail.html:80
#: company/templates/company/supplier_part_pricing.html:22
msgid "New Price Break"
msgstr ""
#: company/templates/company/partdetail.html:86
#: company/templates/company/supplier_part_pricing.html:28
msgid "Price"
msgstr ""
#: company/templates/company/partdetail.html:106
#: company/templates/company/supplier_part_pricing.html:48
msgid "No price breaks have been added for this part"
msgstr ""
#: company/templates/company/supplier_part_stock.html:11
#, fuzzy
#| msgid "Supplier part"
msgid "Supplier Part Stock"
msgstr "Zulieferer-Teil"
#: company/templates/company/supplier_part_stock.html:61
#: part/templates/part/stock.html:90
#, fuzzy
#| msgid "Location"
msgid "New Location"
msgstr "Standort"
#: company/templates/company/supplier_part_stock.html:62
#: part/templates/part/stock.html:91
#, fuzzy
#| msgid "Create new Stock Location"
msgid "Create New Location"
msgstr "Neuen Lager-Standort erstellen"
#: company/templates/company/supplier_part_tabs.html:8
#, fuzzy
#| msgid "Part packaging"
msgid "Pricing"
msgstr "Teile-Packaging"
#: company/templates/company/supplier_part_tabs.html:11
#: company/templates/company/tabs.html:12 part/templates/part/tabs.html:17
#: templates/navbar.html:11
msgid "Stock"
msgstr "Lagerbestand"
#: company/templates/company/supplier_part_tabs.html:14
#: templates/navbar.html:14
#, fuzzy
#| msgid "On Order"
msgid "Orders"
msgstr "bestellt"
#: company/templates/company/tabs.html:21
msgid "Sales Orders"
msgstr "Bestellungen"
@ -871,7 +913,7 @@ msgstr "Firmenadresse"
msgid "Edit Supplier Part"
msgstr "Zulieferer-Teil"
#: company/views.py:179
#: company/views.py:179 part/templates/part/stock.html:82
#, fuzzy
#| msgid "Supplier Part"
msgid "Create new Supplier Part"
@ -1547,6 +1589,18 @@ msgstr "Teil auswählen"
msgid "Upload new image"
msgstr ""
#: part/templates/part/stock.html:75
#, fuzzy
#| msgid "Part"
msgid "New Part"
msgstr "Teil"
#: part/templates/part/stock.html:76
#, fuzzy
#| msgid "Create new Stock Item"
msgid "Create New Part"
msgstr "Neues Lagerobjekt hinzufügen"
#: part/templates/part/tabs.html:9
msgid "Parameters"
msgstr "Parameter"
@ -2041,135 +2095,135 @@ msgstr "QR-Code für diesen Standort"
msgid "Stock Export Options"
msgstr "Lagerbestandsexportoptionen"
#: stock/views.py:264
#: stock/views.py:278
msgid "Stock Item QR Code"
msgstr "Lagerobjekt-QR-Code"
#: stock/views.py:287
#: stock/views.py:301
msgid "Adjust Stock"
msgstr "Lagerbestand anpassen"
#: stock/views.py:396
#: stock/views.py:410
msgid "Move Stock Items"
msgstr "Lagerobjekte bewegen"
#: stock/views.py:397
#: stock/views.py:411
msgid "Count Stock Items"
msgstr "Lagerobjekte zählen"
#: stock/views.py:398
#: stock/views.py:412
msgid "Remove From Stock"
msgstr "Aus Lagerbestand entfernen"
#: stock/views.py:399
#: stock/views.py:413
msgid "Add Stock Items"
msgstr "Lagerobjekte hinzufügen"
#: stock/views.py:400
#: stock/views.py:414
msgid "Delete Stock Items"
msgstr "Lagerobjekte löschen"
#: stock/views.py:428
#: stock/views.py:442
msgid "Must enter integer value"
msgstr "Nur Ganzzahl eingeben"
#: stock/views.py:433
#: stock/views.py:447
msgid "Quantity must be positive"
msgstr "Anzahl muss positiv sein"
#: stock/views.py:440
#: stock/views.py:454
#, python-brace-format
msgid "Quantity must not exceed {x}"
msgstr "Anzahl darf {x} nicht überschreiten"
#: stock/views.py:448
#: stock/views.py:462
msgid "Confirm stock adjustment"
msgstr "Bestands-Anpassung bestätigen"
#: stock/views.py:519
#: stock/views.py:533
#, python-brace-format
msgid "Added stock to {n} items"
msgstr "Vorrat zu {n} Lagerobjekten hinzugefügt"
#: stock/views.py:534
#: stock/views.py:548
#, python-brace-format
msgid "Removed stock from {n} items"
msgstr "Vorrat von {n} Lagerobjekten entfernt"
#: stock/views.py:547
#: stock/views.py:561
#, python-brace-format
msgid "Counted stock for {n} items"
msgstr "Bestand für {n} Objekte erfasst"
#: stock/views.py:575
#: stock/views.py:589
msgid "No items were moved"
msgstr "Keine Lagerobjekte wurden bewegt"
#: stock/views.py:578
#: stock/views.py:592
#, python-brace-format
msgid "Moved {n} items to {dest}"
msgstr "{n} Teile nach {dest} bewegt"
#: stock/views.py:597
#: stock/views.py:611
#, python-brace-format
msgid "Deleted {n} stock items"
msgstr "{n} Teile im Lager gelöscht"
#: stock/views.py:609
#: stock/views.py:623
msgid "Edit Stock Item"
msgstr "Lagerobjekt bearbeiten"
#: stock/views.py:645
#: stock/views.py:659
msgid "Create new Stock Location"
msgstr "Neuen Lager-Standort erstellen"
#: stock/views.py:666
#: stock/views.py:680
msgid "Serialize Stock"
msgstr "Lagerbestand erfassen"
#: stock/views.py:746
#: stock/views.py:760
msgid "Create new Stock Item"
msgstr "Neues Lagerobjekt hinzufügen"
#: stock/views.py:810
#: stock/views.py:824
msgid "Copy Stock Item"
msgstr "Lagerobjekt kopieren"
#: stock/views.py:860
#: stock/views.py:892
msgid "Invalid quantity"
msgstr "Ungültige Menge"
#: stock/views.py:863
#: stock/views.py:895
msgid "Invalid part selection"
msgstr "Ungültige Teileauswahl"
#: stock/views.py:910
#: stock/views.py:942
#, fuzzy, python-brace-format
#| msgid "Created new stock item"
msgid "Created {n} new stock items"
msgstr "Neues Lagerobjekt erstellt"
#: stock/views.py:927 stock/views.py:940
#: stock/views.py:959 stock/views.py:972
msgid "Created new stock item"
msgstr "Neues Lagerobjekt erstellt"
#: stock/views.py:957
#: stock/views.py:989
msgid "Delete Stock Location"
msgstr "Standort löschen"
#: stock/views.py:970
#: stock/views.py:1002
msgid "Delete Stock Item"
msgstr "Lagerobjekt löschen"
#: stock/views.py:981
#: stock/views.py:1013
msgid "Delete Stock Tracking Entry"
msgstr "Lagerbestands-Tracking-Eintrag löschen"
#: stock/views.py:998
#: stock/views.py:1030
msgid "Edit Stock Tracking Entry"
msgstr "Lagerbestands-Tracking-Eintrag bearbeiten"
#: stock/views.py:1007
#: stock/views.py:1039
msgid "Add Stock Tracking Entry"
msgstr "Lagerbestands-Tracking-Eintrag hinzufügen"
@ -2207,12 +2261,6 @@ msgstr "InvenTree-Dokumentation"
msgid "View Code on GitHub"
msgstr "Code auf GitHub ansehen"
#: templates/navbar.html:14
#, fuzzy
#| msgid "On Order"
msgid "Orders"
msgstr "bestellt"
#: templates/navbar.html:23
msgid "Admin"
msgstr ""
@ -2240,3 +2288,45 @@ msgstr ""
#| msgid "Status"
msgid "Statistics"
msgstr "Status"
#: templates/stock_table.html:7
#, fuzzy
#| msgid "Stock Item"
msgid "New Stock Item"
msgstr "Lagerobjekt"
#: templates/stock_table.html:12
#, fuzzy
#| msgid "Add Stock Items"
msgid "Add stock"
msgstr "Lagerobjekte hinzufügen"
#: templates/stock_table.html:13
#, fuzzy
#| msgid "Remove From Stock"
msgid "Remove stock"
msgstr "Aus Lagerbestand entfernen"
#: templates/stock_table.html:14
#, fuzzy
#| msgid "Count Stock Items"
msgid "Count stock"
msgstr "Lagerobjekte zählen"
#: templates/stock_table.html:15
#, fuzzy
#| msgid "Move Stock Items"
msgid "Move stock"
msgstr "Lagerobjekte bewegen"
#: templates/stock_table.html:16
#, fuzzy
#| msgid "On Order"
msgid "Order stock"
msgstr "bestellt"
#: templates/stock_table.html:17
#, fuzzy
#| msgid "Delete Stock Item"
msgid "Delete Stock"
msgstr "Lagerobjekt löschen"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-02-11 23:25+0000\n"
"POT-Creation-Date: 2020-02-12 00:31+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -250,7 +250,7 @@ msgstr ""
#: build/templates/build/allocate_view.html:18
#: company/templates/company/index.html:54
#: company/templates/company/partdetail.html:57
#: company/templates/company/supplier_part_detail.html:27
#: order/templates/order/purchase_order_detail.html:26
#: part/templates/part/detail.html:33
msgid "Description"
@ -274,7 +274,7 @@ msgid "Title"
msgstr ""
#: build/templates/build/detail.html:20
#: company/templates/company/partdetail.html:85
#: company/templates/company/supplier_part_pricing.html:27
#: order/templates/order/purchase_order_detail.html:29
#: stock/templates/stock/item_base.html:90
#: stock/templates/stock/stock_adjust.html:18
@ -301,7 +301,7 @@ msgstr ""
#: build/templates/build/detail.html:42
#: company/templates/company/detail_part.html:90
#: company/templates/company/partdetail.html:54
#: company/templates/company/supplier_part_detail.html:24
#: part/templates/part/detail.html:50 part/templates/part/part_base.html:81
#: stock/templates/stock/item_base.html:120
msgid "URL"
@ -344,8 +344,9 @@ msgstr ""
msgid "Edit notes"
msgstr ""
#: build/templates/build/tabs.html:5 company/templates/company/tabs.html:5
#: part/templates/part/tabs.html:6
#: build/templates/build/tabs.html:5
#: company/templates/company/supplier_part_tabs.html:5
#: company/templates/company/tabs.html:5 part/templates/part/tabs.html:6
msgid "Details"
msgstr ""
@ -415,7 +416,7 @@ msgstr ""
msgid "Invalid location selected"
msgstr ""
#: build/views.py:290 stock/views.py:884
#: build/views.py:290 stock/views.py:916
#, python-brace-format
msgid "The following serial numbers already exist: ({sn})"
msgstr ""
@ -561,7 +562,7 @@ msgid "Supplier stock keeping unit"
msgstr ""
#: company/models.py:240 company/templates/company/detail_part.html:81
#: company/templates/company/partdetail.html:60
#: company/templates/company/supplier_part_detail.html:30
msgid "Manufacturer"
msgstr ""
@ -621,7 +622,7 @@ msgstr ""
#: company/templates/company/detail.html:17
#: company/templates/company/index.html:46
#: company/templates/company/partdetail.html:51
#: company/templates/company/supplier_part_detail.html:21
#: order/templates/order/order_base.html:67
#: stock/templates/stock/item_base.html:126
msgid "Supplier"
@ -633,10 +634,11 @@ msgid "Supplier Parts"
msgstr ""
#: company/templates/company/detail_part.html:13
#: part/templates/part/stock.html:81
msgid "New Supplier Part"
msgstr ""
#: company/templates/company/detail_part.html:15
#: company/templates/company/detail_part.html:15 templates/stock_table.html:10
msgid "Options"
msgstr ""
@ -645,12 +647,11 @@ msgid "Delete Parts"
msgstr ""
#: company/templates/company/detail_part.html:73
#: company/templates/company/partdetail.html:52
#: company/templates/company/supplier_part_detail.html:22
msgid "SKU"
msgstr ""
#: company/templates/company/detail_purchase_orders.html:8
#: company/templates/company/partdetail.html:116
#: company/templates/company/tabs.html:15 part/templates/part/tabs.html:43
msgid "Purchase Orders"
msgstr ""
@ -664,6 +665,8 @@ msgid "Supplier Stock"
msgstr ""
#: company/templates/company/detail_stock.html:33
#: company/templates/company/supplier_part_stock.html:38
#: part/templates/part/stock.html:53 templates/stock_table.html:5
msgid "Export"
msgstr ""
@ -680,10 +683,8 @@ msgstr ""
msgid "ID"
msgstr ""
#: company/templates/company/index.html:69
#: company/templates/company/partdetail.html:6
#: part/templates/part/category.html:73 templates/navbar.html:10
#: templates/stats.html:7 templates/stats.html:10
#: company/templates/company/index.html:69 part/templates/part/category.html:73
#: templates/navbar.html:10 templates/stats.html:7 templates/stats.html:10
msgid "Parts"
msgstr ""
@ -696,61 +697,90 @@ msgstr ""
msgid "Are you sure you want to delete the following Supplier Parts?"
msgstr ""
#: company/templates/company/partdetail.html:13
#: company/templates/company/supplier_part_base.html:6
#: company/templates/company/supplier_part_base.html:13
#: stock/templates/stock/item_base.html:130
msgid "Supplier Part"
msgstr ""
#: company/templates/company/partdetail.html:41
#: company/templates/company/supplier_part_detail.html:11
msgid "Supplier Part Details"
msgstr ""
#: company/templates/company/partdetail.html:44
#: company/templates/company/supplier_part_detail.html:14
msgid "Internal Part"
msgstr ""
#: company/templates/company/partdetail.html:61
#: company/templates/company/supplier_part_detail.html:31
msgid "MPN"
msgstr ""
#: company/templates/company/partdetail.html:64
#: company/templates/company/supplier_part_detail.html:34
#: order/templates/order/purchase_order_detail.html:33
msgid "Note"
msgstr ""
#: company/templates/company/partdetail.html:70
#: company/templates/company/supplier_part_orders.html:11
msgid "Supplier Part Orders"
msgstr ""
#: company/templates/company/supplier_part_pricing.html:12
msgid "Pricing Information"
msgstr ""
#: company/templates/company/partdetail.html:72
#: company/templates/company/supplier_part_pricing.html:14
msgid "Order Multiple"
msgstr ""
#: company/templates/company/partdetail.html:74
#: company/templates/company/supplier_part_pricing.html:16
msgid "Base Price (Flat Fee)"
msgstr ""
#: company/templates/company/partdetail.html:77
#: company/templates/company/supplier_part_pricing.html:19
msgid "Price Breaks"
msgstr ""
#: company/templates/company/partdetail.html:80
#: company/templates/company/supplier_part_pricing.html:22
msgid "New Price Break"
msgstr ""
#: company/templates/company/partdetail.html:86
#: company/templates/company/supplier_part_pricing.html:28
msgid "Price"
msgstr ""
#: company/templates/company/partdetail.html:106
#: company/templates/company/supplier_part_pricing.html:48
msgid "No price breaks have been added for this part"
msgstr ""
#: company/templates/company/supplier_part_stock.html:11
msgid "Supplier Part Stock"
msgstr ""
#: company/templates/company/supplier_part_stock.html:61
#: part/templates/part/stock.html:90
msgid "New Location"
msgstr ""
#: company/templates/company/supplier_part_stock.html:62
#: part/templates/part/stock.html:91
msgid "Create New Location"
msgstr ""
#: company/templates/company/supplier_part_tabs.html:8
msgid "Pricing"
msgstr ""
#: company/templates/company/supplier_part_tabs.html:11
#: company/templates/company/tabs.html:12 part/templates/part/tabs.html:17
#: templates/navbar.html:11
msgid "Stock"
msgstr ""
#: company/templates/company/supplier_part_tabs.html:14
#: templates/navbar.html:14
msgid "Orders"
msgstr ""
#: company/templates/company/tabs.html:21
msgid "Sales Orders"
msgstr ""
@ -791,7 +821,7 @@ msgstr ""
msgid "Edit Supplier Part"
msgstr ""
#: company/views.py:179
#: company/views.py:179 part/templates/part/stock.html:82
msgid "Create new Supplier Part"
msgstr ""
@ -1437,6 +1467,14 @@ msgstr ""
msgid "Upload new image"
msgstr ""
#: part/templates/part/stock.html:75
msgid "New Part"
msgstr ""
#: part/templates/part/stock.html:76
msgid "Create New Part"
msgstr ""
#: part/templates/part/tabs.html:9
msgid "Parameters"
msgstr ""
@ -1868,134 +1906,134 @@ msgstr ""
msgid "Stock Export Options"
msgstr ""
#: stock/views.py:264
#: stock/views.py:278
msgid "Stock Item QR Code"
msgstr ""
#: stock/views.py:287
#: stock/views.py:301
msgid "Adjust Stock"
msgstr ""
#: stock/views.py:396
#: stock/views.py:410
msgid "Move Stock Items"
msgstr ""
#: stock/views.py:397
#: stock/views.py:411
msgid "Count Stock Items"
msgstr ""
#: stock/views.py:398
#: stock/views.py:412
msgid "Remove From Stock"
msgstr ""
#: stock/views.py:399
#: stock/views.py:413
msgid "Add Stock Items"
msgstr ""
#: stock/views.py:400
#: stock/views.py:414
msgid "Delete Stock Items"
msgstr ""
#: stock/views.py:428
#: stock/views.py:442
msgid "Must enter integer value"
msgstr ""
#: stock/views.py:433
#: stock/views.py:447
msgid "Quantity must be positive"
msgstr ""
#: stock/views.py:440
#: stock/views.py:454
#, python-brace-format
msgid "Quantity must not exceed {x}"
msgstr ""
#: stock/views.py:448
#: stock/views.py:462
msgid "Confirm stock adjustment"
msgstr ""
#: stock/views.py:519
#: stock/views.py:533
#, python-brace-format
msgid "Added stock to {n} items"
msgstr ""
#: stock/views.py:534
#: stock/views.py:548
#, python-brace-format
msgid "Removed stock from {n} items"
msgstr ""
#: stock/views.py:547
#: stock/views.py:561
#, python-brace-format
msgid "Counted stock for {n} items"
msgstr ""
#: stock/views.py:575
#: stock/views.py:589
msgid "No items were moved"
msgstr ""
#: stock/views.py:578
#: stock/views.py:592
#, python-brace-format
msgid "Moved {n} items to {dest}"
msgstr ""
#: stock/views.py:597
#: stock/views.py:611
#, python-brace-format
msgid "Deleted {n} stock items"
msgstr ""
#: stock/views.py:609
#: stock/views.py:623
msgid "Edit Stock Item"
msgstr ""
#: stock/views.py:645
#: stock/views.py:659
msgid "Create new Stock Location"
msgstr ""
#: stock/views.py:666
#: stock/views.py:680
msgid "Serialize Stock"
msgstr ""
#: stock/views.py:746
#: stock/views.py:760
msgid "Create new Stock Item"
msgstr ""
#: stock/views.py:810
#: stock/views.py:824
msgid "Copy Stock Item"
msgstr ""
#: stock/views.py:860
#: stock/views.py:892
msgid "Invalid quantity"
msgstr ""
#: stock/views.py:863
#: stock/views.py:895
msgid "Invalid part selection"
msgstr ""
#: stock/views.py:910
#: stock/views.py:942
#, python-brace-format
msgid "Created {n} new stock items"
msgstr ""
#: stock/views.py:927 stock/views.py:940
#: stock/views.py:959 stock/views.py:972
msgid "Created new stock item"
msgstr ""
#: stock/views.py:957
#: stock/views.py:989
msgid "Delete Stock Location"
msgstr ""
#: stock/views.py:970
#: stock/views.py:1002
msgid "Delete Stock Item"
msgstr ""
#: stock/views.py:981
#: stock/views.py:1013
msgid "Delete Stock Tracking Entry"
msgstr ""
#: stock/views.py:998
#: stock/views.py:1030
msgid "Edit Stock Tracking Entry"
msgstr ""
#: stock/views.py:1007
#: stock/views.py:1039
msgid "Add Stock Tracking Entry"
msgstr ""
@ -2031,10 +2069,6 @@ msgstr ""
msgid "View Code on GitHub"
msgstr ""
#: templates/navbar.html:14
msgid "Orders"
msgstr ""
#: templates/navbar.html:23
msgid "Admin"
msgstr ""
@ -2058,3 +2092,31 @@ msgstr ""
#: templates/navbar.html:33
msgid "Statistics"
msgstr ""
#: templates/stock_table.html:7
msgid "New Stock Item"
msgstr ""
#: templates/stock_table.html:12
msgid "Add stock"
msgstr ""
#: templates/stock_table.html:13
msgid "Remove stock"
msgstr ""
#: templates/stock_table.html:14
msgid "Count stock"
msgstr ""
#: templates/stock_table.html:15
msgid "Move stock"
msgstr ""
#: templates/stock_table.html:16
msgid "Order stock"
msgstr ""
#: templates/stock_table.html:17
msgid "Delete Stock"
msgstr ""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-02-11 23:25+0000\n"
"POT-Creation-Date: 2020-02-12 00:31+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -250,7 +250,7 @@ msgstr ""
#: build/templates/build/allocate_view.html:18
#: company/templates/company/index.html:54
#: company/templates/company/partdetail.html:57
#: company/templates/company/supplier_part_detail.html:27
#: order/templates/order/purchase_order_detail.html:26
#: part/templates/part/detail.html:33
msgid "Description"
@ -274,7 +274,7 @@ msgid "Title"
msgstr ""
#: build/templates/build/detail.html:20
#: company/templates/company/partdetail.html:85
#: company/templates/company/supplier_part_pricing.html:27
#: order/templates/order/purchase_order_detail.html:29
#: stock/templates/stock/item_base.html:90
#: stock/templates/stock/stock_adjust.html:18
@ -301,7 +301,7 @@ msgstr ""
#: build/templates/build/detail.html:42
#: company/templates/company/detail_part.html:90
#: company/templates/company/partdetail.html:54
#: company/templates/company/supplier_part_detail.html:24
#: part/templates/part/detail.html:50 part/templates/part/part_base.html:81
#: stock/templates/stock/item_base.html:120
msgid "URL"
@ -344,8 +344,9 @@ msgstr ""
msgid "Edit notes"
msgstr ""
#: build/templates/build/tabs.html:5 company/templates/company/tabs.html:5
#: part/templates/part/tabs.html:6
#: build/templates/build/tabs.html:5
#: company/templates/company/supplier_part_tabs.html:5
#: company/templates/company/tabs.html:5 part/templates/part/tabs.html:6
msgid "Details"
msgstr ""
@ -415,7 +416,7 @@ msgstr ""
msgid "Invalid location selected"
msgstr ""
#: build/views.py:290 stock/views.py:884
#: build/views.py:290 stock/views.py:916
#, python-brace-format
msgid "The following serial numbers already exist: ({sn})"
msgstr ""
@ -561,7 +562,7 @@ msgid "Supplier stock keeping unit"
msgstr ""
#: company/models.py:240 company/templates/company/detail_part.html:81
#: company/templates/company/partdetail.html:60
#: company/templates/company/supplier_part_detail.html:30
msgid "Manufacturer"
msgstr ""
@ -621,7 +622,7 @@ msgstr ""
#: company/templates/company/detail.html:17
#: company/templates/company/index.html:46
#: company/templates/company/partdetail.html:51
#: company/templates/company/supplier_part_detail.html:21
#: order/templates/order/order_base.html:67
#: stock/templates/stock/item_base.html:126
msgid "Supplier"
@ -633,10 +634,11 @@ msgid "Supplier Parts"
msgstr ""
#: company/templates/company/detail_part.html:13
#: part/templates/part/stock.html:81
msgid "New Supplier Part"
msgstr ""
#: company/templates/company/detail_part.html:15
#: company/templates/company/detail_part.html:15 templates/stock_table.html:10
msgid "Options"
msgstr ""
@ -645,12 +647,11 @@ msgid "Delete Parts"
msgstr ""
#: company/templates/company/detail_part.html:73
#: company/templates/company/partdetail.html:52
#: company/templates/company/supplier_part_detail.html:22
msgid "SKU"
msgstr ""
#: company/templates/company/detail_purchase_orders.html:8
#: company/templates/company/partdetail.html:116
#: company/templates/company/tabs.html:15 part/templates/part/tabs.html:43
msgid "Purchase Orders"
msgstr ""
@ -664,6 +665,8 @@ msgid "Supplier Stock"
msgstr ""
#: company/templates/company/detail_stock.html:33
#: company/templates/company/supplier_part_stock.html:38
#: part/templates/part/stock.html:53 templates/stock_table.html:5
msgid "Export"
msgstr ""
@ -680,10 +683,8 @@ msgstr ""
msgid "ID"
msgstr ""
#: company/templates/company/index.html:69
#: company/templates/company/partdetail.html:6
#: part/templates/part/category.html:73 templates/navbar.html:10
#: templates/stats.html:7 templates/stats.html:10
#: company/templates/company/index.html:69 part/templates/part/category.html:73
#: templates/navbar.html:10 templates/stats.html:7 templates/stats.html:10
msgid "Parts"
msgstr ""
@ -696,61 +697,90 @@ msgstr ""
msgid "Are you sure you want to delete the following Supplier Parts?"
msgstr ""
#: company/templates/company/partdetail.html:13
#: company/templates/company/supplier_part_base.html:6
#: company/templates/company/supplier_part_base.html:13
#: stock/templates/stock/item_base.html:130
msgid "Supplier Part"
msgstr ""
#: company/templates/company/partdetail.html:41
#: company/templates/company/supplier_part_detail.html:11
msgid "Supplier Part Details"
msgstr ""
#: company/templates/company/partdetail.html:44
#: company/templates/company/supplier_part_detail.html:14
msgid "Internal Part"
msgstr ""
#: company/templates/company/partdetail.html:61
#: company/templates/company/supplier_part_detail.html:31
msgid "MPN"
msgstr ""
#: company/templates/company/partdetail.html:64
#: company/templates/company/supplier_part_detail.html:34
#: order/templates/order/purchase_order_detail.html:33
msgid "Note"
msgstr ""
#: company/templates/company/partdetail.html:70
#: company/templates/company/supplier_part_orders.html:11
msgid "Supplier Part Orders"
msgstr ""
#: company/templates/company/supplier_part_pricing.html:12
msgid "Pricing Information"
msgstr ""
#: company/templates/company/partdetail.html:72
#: company/templates/company/supplier_part_pricing.html:14
msgid "Order Multiple"
msgstr ""
#: company/templates/company/partdetail.html:74
#: company/templates/company/supplier_part_pricing.html:16
msgid "Base Price (Flat Fee)"
msgstr ""
#: company/templates/company/partdetail.html:77
#: company/templates/company/supplier_part_pricing.html:19
msgid "Price Breaks"
msgstr ""
#: company/templates/company/partdetail.html:80
#: company/templates/company/supplier_part_pricing.html:22
msgid "New Price Break"
msgstr ""
#: company/templates/company/partdetail.html:86
#: company/templates/company/supplier_part_pricing.html:28
msgid "Price"
msgstr ""
#: company/templates/company/partdetail.html:106
#: company/templates/company/supplier_part_pricing.html:48
msgid "No price breaks have been added for this part"
msgstr ""
#: company/templates/company/supplier_part_stock.html:11
msgid "Supplier Part Stock"
msgstr ""
#: company/templates/company/supplier_part_stock.html:61
#: part/templates/part/stock.html:90
msgid "New Location"
msgstr ""
#: company/templates/company/supplier_part_stock.html:62
#: part/templates/part/stock.html:91
msgid "Create New Location"
msgstr ""
#: company/templates/company/supplier_part_tabs.html:8
msgid "Pricing"
msgstr ""
#: company/templates/company/supplier_part_tabs.html:11
#: company/templates/company/tabs.html:12 part/templates/part/tabs.html:17
#: templates/navbar.html:11
msgid "Stock"
msgstr ""
#: company/templates/company/supplier_part_tabs.html:14
#: templates/navbar.html:14
msgid "Orders"
msgstr ""
#: company/templates/company/tabs.html:21
msgid "Sales Orders"
msgstr ""
@ -791,7 +821,7 @@ msgstr ""
msgid "Edit Supplier Part"
msgstr ""
#: company/views.py:179
#: company/views.py:179 part/templates/part/stock.html:82
msgid "Create new Supplier Part"
msgstr ""
@ -1437,6 +1467,14 @@ msgstr ""
msgid "Upload new image"
msgstr ""
#: part/templates/part/stock.html:75
msgid "New Part"
msgstr ""
#: part/templates/part/stock.html:76
msgid "Create New Part"
msgstr ""
#: part/templates/part/tabs.html:9
msgid "Parameters"
msgstr ""
@ -1868,134 +1906,134 @@ msgstr ""
msgid "Stock Export Options"
msgstr ""
#: stock/views.py:264
#: stock/views.py:278
msgid "Stock Item QR Code"
msgstr ""
#: stock/views.py:287
#: stock/views.py:301
msgid "Adjust Stock"
msgstr ""
#: stock/views.py:396
#: stock/views.py:410
msgid "Move Stock Items"
msgstr ""
#: stock/views.py:397
#: stock/views.py:411
msgid "Count Stock Items"
msgstr ""
#: stock/views.py:398
#: stock/views.py:412
msgid "Remove From Stock"
msgstr ""
#: stock/views.py:399
#: stock/views.py:413
msgid "Add Stock Items"
msgstr ""
#: stock/views.py:400
#: stock/views.py:414
msgid "Delete Stock Items"
msgstr ""
#: stock/views.py:428
#: stock/views.py:442
msgid "Must enter integer value"
msgstr ""
#: stock/views.py:433
#: stock/views.py:447
msgid "Quantity must be positive"
msgstr ""
#: stock/views.py:440
#: stock/views.py:454
#, python-brace-format
msgid "Quantity must not exceed {x}"
msgstr ""
#: stock/views.py:448
#: stock/views.py:462
msgid "Confirm stock adjustment"
msgstr ""
#: stock/views.py:519
#: stock/views.py:533
#, python-brace-format
msgid "Added stock to {n} items"
msgstr ""
#: stock/views.py:534
#: stock/views.py:548
#, python-brace-format
msgid "Removed stock from {n} items"
msgstr ""
#: stock/views.py:547
#: stock/views.py:561
#, python-brace-format
msgid "Counted stock for {n} items"
msgstr ""
#: stock/views.py:575
#: stock/views.py:589
msgid "No items were moved"
msgstr ""
#: stock/views.py:578
#: stock/views.py:592
#, python-brace-format
msgid "Moved {n} items to {dest}"
msgstr ""
#: stock/views.py:597
#: stock/views.py:611
#, python-brace-format
msgid "Deleted {n} stock items"
msgstr ""
#: stock/views.py:609
#: stock/views.py:623
msgid "Edit Stock Item"
msgstr ""
#: stock/views.py:645
#: stock/views.py:659
msgid "Create new Stock Location"
msgstr ""
#: stock/views.py:666
#: stock/views.py:680
msgid "Serialize Stock"
msgstr ""
#: stock/views.py:746
#: stock/views.py:760
msgid "Create new Stock Item"
msgstr ""
#: stock/views.py:810
#: stock/views.py:824
msgid "Copy Stock Item"
msgstr ""
#: stock/views.py:860
#: stock/views.py:892
msgid "Invalid quantity"
msgstr ""
#: stock/views.py:863
#: stock/views.py:895
msgid "Invalid part selection"
msgstr ""
#: stock/views.py:910
#: stock/views.py:942
#, python-brace-format
msgid "Created {n} new stock items"
msgstr ""
#: stock/views.py:927 stock/views.py:940
#: stock/views.py:959 stock/views.py:972
msgid "Created new stock item"
msgstr ""
#: stock/views.py:957
#: stock/views.py:989
msgid "Delete Stock Location"
msgstr ""
#: stock/views.py:970
#: stock/views.py:1002
msgid "Delete Stock Item"
msgstr ""
#: stock/views.py:981
#: stock/views.py:1013
msgid "Delete Stock Tracking Entry"
msgstr ""
#: stock/views.py:998
#: stock/views.py:1030
msgid "Edit Stock Tracking Entry"
msgstr ""
#: stock/views.py:1007
#: stock/views.py:1039
msgid "Add Stock Tracking Entry"
msgstr ""
@ -2031,10 +2069,6 @@ msgstr ""
msgid "View Code on GitHub"
msgstr ""
#: templates/navbar.html:14
msgid "Orders"
msgstr ""
#: templates/navbar.html:23
msgid "Admin"
msgstr ""
@ -2058,3 +2092,31 @@ msgstr ""
#: templates/navbar.html:33
msgid "Statistics"
msgstr ""
#: templates/stock_table.html:7
msgid "New Stock Item"
msgstr ""
#: templates/stock_table.html:12
msgid "Add stock"
msgstr ""
#: templates/stock_table.html:13
msgid "Remove stock"
msgstr ""
#: templates/stock_table.html:14
msgid "Count stock"
msgstr ""
#: templates/stock_table.html:15
msgid "Move stock"
msgstr ""
#: templates/stock_table.html:16
msgid "Order stock"
msgstr ""
#: templates/stock_table.html:17
msgid "Delete Stock"
msgstr ""

View File

@ -18,6 +18,7 @@ from InvenTree.status_codes import OrderStatus
import os
from part.models import Part
from company.models import SupplierPart
from .models import PurchaseOrder, PurchaseOrderLineItem
from .serializers import POSerializer, POLineItemSerializer
@ -62,6 +63,14 @@ class POList(generics.ListCreateAPIView):
except (Part.DoesNotExist, ValueError):
pass
# Attempt to filter by supplier part
if 'supplier_part' in request.GET:
try:
supplier_part = SupplierPart.objects.get(pk=request.GET['supplier_part'])
queryset = queryset.filter(id__in=[p.id for p in supplier_part.purchase_orders()])
except (ValueError, SupplierPart.DoesNotExist):
pass
data = queryset.values(
'pk',
'supplier',

View File

@ -1,5 +1,6 @@
{% extends "part/part_base.html" %}
{% load static %}
{% load i18n %}
{% block details %}
{% include 'part/tabs.html' with tab='stock' %}
@ -49,7 +50,7 @@
$("#stock-export").click(function() {
launchModalForm("{% url 'stock-export-options' %}", {
submit_text: "Export",
submit_text: "{% trans 'Export' %}",
success: function(response) {
var url = "{% url 'stock-export' %}";
@ -71,14 +72,14 @@
secondary: [
{
field: 'part',
label: 'New Part',
title: 'Create New Part',
label: '{% trans "New Part" %}',
title: '{% trans "Create New Part" %}',
url: "{% url 'part-create' %}",
},
{
field: 'supplier_part',
label: 'New Supplier Part',
title: 'Create new Supplier Part',
label: '{% trans "New Supplier Part" %}',
title: '{% trans "Create new Supplier Part" %}',
url: "{% url 'supplier-part-create' %}",
data: {
part: {{ part.id }}
@ -86,8 +87,8 @@
},
{
field: 'location',
label: 'New Location',
title: 'Create New Location',
label: '{% trans "New Location" %}',
title: '{% trans "Create New Location" %}',
url: "{% url 'stock-location-create' %}",
}
]

View File

@ -301,6 +301,7 @@ class StockList(generics.ListCreateAPIView):
'part__category',
'part__category__name',
'part__category__description',
'supplier_part',
)
# Reduce the number of lookups we need to do for categories
@ -371,7 +372,13 @@ class StockList(generics.ListCreateAPIView):
except PartCategory.DoesNotExist:
pass
# Filter by supplier
# Filter by supplier_part ID
supplier_part_id = self.request.query_params.get('supplier_part', None)
if supplier_part_id:
stock_list = stock_list.filter(supplier_part=supplier_part_id)
# Filter by supplier ID
supplier_id = self.request.query_params.get('supplier', None)
if supplier_id:

View File

@ -24,7 +24,7 @@ from InvenTree.helpers import ExtractSerialNumbers
from decimal import Decimal, InvalidOperation
from datetime import datetime
from company.models import Company
from company.models import Company, SupplierPart
from part.models import Part
from .models import StockItem, StockLocation, StockItemTracking
@ -212,6 +212,16 @@ class StockExport(AjaxView):
except (ValueError, Company.DoesNotExist):
pass
# Check if a particular supplier_part was specified
sup_part_id = request.GET.get('supplier_part', None)
supplier_part = None
if sup_part_id:
try:
supplier_part = SupplierPart.objects.get(pk=sup_part_id)
except (ValueError, SupplierPart.DoesNotExist):
pass
# Check if a particular part was specified
part_id = request.GET.get('part', None)
part = None
@ -244,7 +254,11 @@ class StockExport(AjaxView):
if supplier:
stock_items = stock_items.filter(supplier_part__supplier=supplier)
if supplier_part:
stock_items = stock_items.filter(supplier_part=supplier_part)
# Filter out stock items that are not 'in stock'
# TODO - This might need some more thought in the future...
stock_items = stock_items.filter(customer=None)
stock_items = stock_items.filter(belongs_to=None)
@ -816,6 +830,11 @@ class StockItemCreate(AjaxCreateView):
part_id = self.request.GET.get('part', None)
loc_id = self.request.GET.get('location', None)
sup_part_id = self.request.GET.get('supplier_part', None)
part = None
location = None
supplier_part = None
# Part field has been specified
if part_id:
@ -824,14 +843,27 @@ class StockItemCreate(AjaxCreateView):
initials['part'] = part
initials['location'] = part.get_default_location()
initials['supplier_part'] = part.default_supplier
except Part.DoesNotExist:
except (ValueError, Part.DoesNotExist):
pass
# SupplierPart field has been specified
# It must match the Part, if that has been supplied
if sup_part_id:
try:
supplier_part = SupplierPart.objects.get(pk=sup_part_id)
if part is None or supplier_part.part == part:
initials['supplier_part'] = supplier_part
except (ValueError, SupplierPart.DoesNotExist):
pass
# Location has been specified
if loc_id:
try:
initials['location'] = StockLocation.objects.get(pk=loc_id)
except StockLocation.DoesNotExist:
location = StockLocation.objects.get(pk=loc_id)
initials['location'] = location
except (ValueError, StockLocation.DoesNotExist):
pass
return initials

View File

@ -1,18 +1,18 @@
{% load i18n %}
<div id='button-toolbar'>
<div class='button-toolbar container-fluid' style='float: right;'>
<button class='btn btn-default' id='stock-export' title='Export Stock Information'>Export</button>
{% if not part or part.is_template == False %}
<button class="btn btn-success" id='item-create'>New Stock Item</button>
{% endif %}
<button class='btn btn-default' id='stock-export' title='Export Stock Information'>{% trans "Export" %}</button>
<button class="btn btn-success" id='item-create'>{% trans "New Stock Item" %}</button>
<div class="dropdown" style='float: right;'>
<button id='stock-options' class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Options<span class="caret"></span></button>
<button id='stock-options' class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">{% trans "Options" %}<span class="caret"></span></button>
<ul class="dropdown-menu">
<li><a href="#" id='multi-item-add' title='Add to selected stock items'>Add stock</a></li>
<li><a href="#" id='multi-item-remove' title='Remove from selected stock items'>Remove stock</a></li>
<li><a href="#" id='multi-item-stocktake' title='Stocktake selected stock items'>Count stock</a></li>
<li><a href='#' id='multi-item-move' title='Move selected stock items'>Move stock</a></li>
<li><a href='#' id='multi-item-order' title='Order selected items'>Order stock</a></li>
<li><a href='#' id='multi-item-delete' title='Delete selected items'>Delete Stock</a></li>
<li><a href="#" id='multi-item-add' title='Add to selected stock items'>{% trans "Add stock" %}</a></li>
<li><a href="#" id='multi-item-remove' title='Remove from selected stock items'>{% trans "Remove stock" %}</a></li>
<li><a href="#" id='multi-item-stocktake' title='Stocktake selected stock items'>{% trans "Count stock" %}</a></li>
<li><a href='#' id='multi-item-move' title='Move selected stock items'>{% trans "Move stock" %}</a></li>
<li><a href='#' id='multi-item-order' title='Order selected items'>{% trans "Order stock" %}</a></li>
<li><a href='#' id='multi-item-delete' title='Delete selected items'>{% trans "Delete Stock" %}</a></li>
</ul>
</div>
</div>