From e8978643962b7b348564e6293ac3b6cf3052d2ad Mon Sep 17 00:00:00 2001 From: eeintech Date: Tue, 23 Mar 2021 17:01:54 -0400 Subject: [PATCH 001/116] Added ManufacturerPart model, form and views --- InvenTree/company/forms.py | 23 ++++- InvenTree/company/models.py | 90 +++++++++++++------ InvenTree/company/views.py | 171 ++++++++++++++++++++++++++++++++++++ 3 files changed, 255 insertions(+), 29 deletions(-) diff --git a/InvenTree/company/forms.py b/InvenTree/company/forms.py index 67ac402ba7..b9e8b607cf 100644 --- a/InvenTree/company/forms.py +++ b/InvenTree/company/forms.py @@ -17,6 +17,7 @@ from djmoney.forms.fields import MoneyField import common.settings from .models import Company +from .models import ManufacturerPart from .models import SupplierPart from .models import SupplierPriceBreak @@ -84,12 +85,30 @@ class CompanyImageDownloadForm(HelperForm): ] +class EditManufacturerPartForm(HelperForm): + """ Form for editing a ManufacturerPart object """ + + field_prefix = { + 'link': 'fa-link', + 'MPN': 'fa-hashtag', + } + + class Meta: + model = ManufacturerPart + fields = [ + 'part', + 'description', + 'manufacturer', + 'MPN', + 'link', + ] + + class EditSupplierPartForm(HelperForm): """ Form for editing a SupplierPart object """ field_prefix = { 'link': 'fa-link', - 'MPN': 'fa-hashtag', 'SKU': 'fa-hashtag', 'note': 'fa-pencil-alt', } @@ -110,8 +129,6 @@ class EditSupplierPartForm(HelperForm): 'supplier', 'SKU', 'description', - 'manufacturer', - 'MPN', 'link', 'note', 'single_pricing', diff --git a/InvenTree/company/models.py b/InvenTree/company/models.py index e4386712c8..8b41e44553 100644 --- a/InvenTree/company/models.py +++ b/InvenTree/company/models.py @@ -278,19 +278,75 @@ class Contact(models.Model): on_delete=models.CASCADE) -class SupplierPart(models.Model): - """ Represents a unique part as provided by a Supplier - Each SupplierPart is identified by a MPN (Manufacturer Part Number) - Each SupplierPart is also linked to a Part object. - A Part may be available from multiple suppliers +class MaufacturerPart(models.Model): + """ Represents a unique part as provided by a Manufacturer + Each MaufacturerPart is identified by a MPN (Manufacturer Part Number) + Each MaufacturerPart is also linked to a Part object. + A Part may be available from multiple manufacturers Attributes: part: Link to the master Part + manufacturer: Company that manufactures the MaufacturerPart + MPN: Manufacture part number + link: Link to external website for this manufacturer part + description: Descriptive notes field + """ + + class Meta: + unique_together = ('part', 'manufacturer', 'MPN') + + part = models.ForeignKey('part.Part', on_delete=models.CASCADE, + related_name='manufacturer_parts', + verbose_name=_('Base Part'), + limit_choices_to={ + 'purchaseable': True, + }, + help_text=_('Select part'), + ) + + manufacturer = models.ForeignKey( + Company, + on_delete=models.SET_NULL, + related_name='manufactured_parts', + limit_choices_to={ + 'is_manufacturer': True + }, + verbose_name=_('Manufacturer'), + help_text=_('Select manufacturer'), + null=True, blank=True + ) + + MPN = models.CharField( + max_length=100, blank=True, null=True, + verbose_name=_('MPN'), + help_text=_('Manufacturer Part Number') + ) + + link = InvenTreeURLField( + blank=True, null=True, + verbose_name=_('Link'), + help_text=_('URL for external manufacturer part link') + ) + + description = models.CharField( + max_length=250, blank=True, null=True, + verbose_name=_('Description'), + help_text=_('Manufacturer part description') + ) + + +class SupplierPart(models.Model): + """ Represents a unique part as provided by a Supplier + Each SupplierPart is identified by a SKU (Supplier Part Number) + Each SupplierPart is also linked to a Part or ManufacturerPart object. + A Part may be available from multiple suppliers + + Attributes: + part_type: Part or ManufacturerPart + part_id: Part or ManufacturerPart ID supplier: Company that supplies this SupplierPart object SKU: Stock keeping unit (supplier part number) - manufacturer: Company that manufactures the SupplierPart (leave blank if it is the sample as the Supplier!) - MPN: Manufacture part number - link: Link to external website for this part + link: Link to external website for this supplier part description: Descriptive notes field note: Longer form note field base_cost: Base charge added to order independent of quantity e.g. "Reeling Fee" @@ -330,24 +386,6 @@ class SupplierPart(models.Model): help_text=_('Supplier stock keeping unit') ) - manufacturer = models.ForeignKey( - Company, - on_delete=models.SET_NULL, - related_name='manufactured_parts', - limit_choices_to={ - 'is_manufacturer': True - }, - verbose_name=_('Manufacturer'), - help_text=_('Select manufacturer'), - null=True, blank=True - ) - - MPN = models.CharField( - max_length=100, blank=True, null=True, - verbose_name=_('MPN'), - help_text=_('Manufacturer part number') - ) - link = InvenTreeURLField( blank=True, null=True, verbose_name=_('Link'), diff --git a/InvenTree/company/views.py b/InvenTree/company/views.py index 42457d6101..0786eb0ee8 100644 --- a/InvenTree/company/views.py +++ b/InvenTree/company/views.py @@ -24,6 +24,7 @@ from InvenTree.helpers import str2bool from InvenTree.views import InvenTreeRoleMixin from .models import Company +from .models import ManufacturerPart from .models import SupplierPart from .models import SupplierPriceBreak @@ -31,6 +32,7 @@ from part.models import Part from .forms import EditCompanyForm from .forms import CompanyImageForm +from .forms import EditManufacturerPartForm from .forms import EditSupplierPartForm from .forms import EditPriceBreakForm from .forms import CompanyImageDownloadForm @@ -331,6 +333,175 @@ class CompanyDelete(AjaxDeleteView): } +class ManufacturerPartDetail(DetailView): + """ Detail view for ManufacturerPart """ + model = ManufacturerPart + template_name = 'company/manufacturer_part_detail.html' + context_object_name = 'part' + queryset = ManufacturerPart.objects.all() + permission_required = 'purchase_order.view' + + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + + return ctx + + +class ManufacturerPartEdit(AjaxUpdateView): + """ Update view for editing ManufacturerPart """ + + model = ManufacturerPart + context_object_name = 'part' + form_class = EditSupplierPartForm + ajax_template_name = 'modal_form.html' + ajax_form_title = _('Edit Manufacturer Part') + + +class ManufacturerPartCreate(AjaxCreateView): + """ Create view for making new ManufacturerPart """ + + model = ManufacturerPart + form_class = EditManufacturerPartForm + ajax_template_name = 'company/manufacturer_part_create.html' + ajax_form_title = _('Create New Manufacturer Part') + context_object_name = 'part' + + def get_context_data(self): + """ + Supply context data to the form + """ + + ctx = super().get_context_data() + + # Add 'part' object + form = self.get_form() + + part = form['part'].value() + + try: + part = Part.objects.get(pk=part) + except (ValueError, Part.DoesNotExist): + part = None + + ctx['part'] = part + + return ctx + + def get_form(self): + """ Create Form instance to create a new ManufacturerPart object. + Hide some fields if they are not appropriate in context + """ + form = super(AjaxCreateView, self).get_form() + + if form.initial.get('part', None): + # Hide the part field + form.fields['part'].widget = HiddenInput() + + return form + + def get_initial(self): + """ Provide initial data for new ManufacturerPart: + + - If 'manufacturer_id' provided, pre-fill manufacturer field + - If 'part_id' provided, pre-fill part field + """ + initials = super(SupplierPartCreate, self).get_initial().copy() + + manufacturer_id = self.get_param('manufacturer') + part_id = self.get_param('part') + + if manufacturer_id: + try: + initials['manufacturer'] = Company.objects.get(pk=manufacturer_id) + except (ValueError, Company.DoesNotExist): + pass + + if part_id: + try: + initials['part'] = Part.objects.get(pk=part_id) + except (ValueError, Part.DoesNotExist): + pass + + +class ManufacturerPartDelete(AjaxDeleteView): + """ Delete view for removing a ManufacturerPart. + + ManufacturerParts can be deleted using a variety of 'selectors'. + + - ?part= -> Delete a single ManufacturerPart object + - ?parts=[] -> Delete a list of ManufacturerPart objects + + """ + + success_url = '/manufacturer/' + ajax_template_name = 'company/partdelete.html' + ajax_form_title = _('Delete Manufacturer Part') + + role_required = 'purchase_order.delete' + + parts = [] + + def get_context_data(self): + ctx = {} + + ctx['parts'] = self.parts + + return ctx + + def get_parts(self): + """ Determine which ManufacturerPart object(s) the user wishes to delete. + """ + + self.parts = [] + + # User passes a single ManufacturerPart ID + if 'part' in self.request.GET: + try: + self.parts.append(ManufacturerPart.objects.get(pk=self.request.GET.get('part'))) + except (ValueError, SupplierPart.DoesNotExist): + pass + + elif 'parts[]' in self.request.GET: + + part_id_list = self.request.GET.getlist('parts[]') + + self.parts = ManufacturerPart.objects.filter(id__in=part_id_list) + + def get(self, request, *args, **kwargs): + self.request = request + self.get_parts() + + return self.renderJsonResponse(request, form=self.get_form()) + + def post(self, request, *args, **kwargs): + """ Handle the POST action for deleting ManufacturerPart object. + """ + + self.request = request + self.parts = [] + + for item in self.request.POST: + if item.startswith('manufacturer-part-'): + pk = item.replace('manufacturer-part-', '') + + try: + self.parts.append(ManufacturerPart.objects.get(pk=pk)) + except (ValueError, ManufacturerPart.DoesNotExist): + pass + + confirm = str2bool(self.request.POST.get('confirm_delete', False)) + + data = { + 'form_valid': confirm, + } + + if confirm: + for part in self.parts: + part.delete() + + return self.renderJsonResponse(self.request, data=data, form=self.get_form()) + + class SupplierPartDetail(DetailView): """ Detail view for SupplierPart """ model = SupplierPart From 8f610d826f0ef5432f99ab620569392eb8ef98cf Mon Sep 17 00:00:00 2001 From: eeintech Date: Tue, 23 Mar 2021 17:16:29 -0400 Subject: [PATCH 002/116] Added URLs and templates --- .../company/manufacturer_part_base.html | 131 ++++++++++++++++++ .../company/manufacturer_part_create.html | 17 +++ .../company/manufacturer_part_detail.html | 38 +++++ InvenTree/company/urls.py | 12 ++ 4 files changed, 198 insertions(+) create mode 100644 InvenTree/company/templates/company/manufacturer_part_base.html create mode 100644 InvenTree/company/templates/company/manufacturer_part_create.html create mode 100644 InvenTree/company/templates/company/manufacturer_part_detail.html diff --git a/InvenTree/company/templates/company/manufacturer_part_base.html b/InvenTree/company/templates/company/manufacturer_part_base.html new file mode 100644 index 0000000000..7b0b579d1d --- /dev/null +++ b/InvenTree/company/templates/company/manufacturer_part_base.html @@ -0,0 +1,131 @@ +{% extends "two_column.html" %} +{% load static %} +{% load i18n %} + +{% block page_title %} +InvenTree | {% trans "Manufacturer Part" %} +{% endblock %} + +{% block thumbnail %} + +{% endblock %} + +{% block page_data %} +

{% trans "Manufacturer Part" %}

+
+

+ {{ part.part.full_name }} + {% if user.is_staff and perms.company.change_company %} + + + + {% endif %} +

+

{{ part.manufacturer.name }} - {{ part.MPN }}

+ +{% if roles.purchase_order.change %} +
+
+ {% if roles.purchase_order.add %} + + {% endif %} + + {% if roles.purchase_order.delete %} + + {% endif %} +
+
+{% endif %} + +{% endblock %} + +{% block page_details %} + +

{% trans "Manufacturer Part Details" %}

+ + + + + + + + {% if part.description %} + + + + + + {% endif %} + {% if part.link %} + + + + + + {% endif %} + + + + + + + + + +
{% trans "Internal Part" %} + {% if part.part %} + {{ part.part.full_name }} + {% endif %} +
{% trans "Description" %}{{ part.description }}
{% trans "External Link" %}{{ part.link }}
{% trans "Manufacturer" %}{{ part.manufacturer.name }}
{% trans "MPN" %}{{ part.MPN }}
+{% endblock %} + +{% block js_ready %} +{{ block.super }} + +enableNavbar({ + label: 'manufacturer-part', + toggleId: '#manufacturer-part-menu-toggle' +}) + +$('#order-part, #order-part2').click(function() { + launchModalForm( + "{% url 'order-parts' %}", + { + data: { + part: {{ part.part.id }}, + }, + reload: true, + }, + ); +}); + +$('#edit-part').click(function () { + launchModalForm( + "{% url 'manufacturer-part-edit' part.id %}", + { + reload: true + } + ); +}); + +$('#delete-part').click(function() { + launchModalForm( + "{% url 'manufacturer-part-delete' %}?part={{ part.id }}", + { + redirect: "{% url 'company-detail-parts' part.manufacturer.id %}" + } + ); +}); + +{% endblock %} \ No newline at end of file diff --git a/InvenTree/company/templates/company/manufacturer_part_create.html b/InvenTree/company/templates/company/manufacturer_part_create.html new file mode 100644 index 0000000000..21c23f9075 --- /dev/null +++ b/InvenTree/company/templates/company/manufacturer_part_create.html @@ -0,0 +1,17 @@ +{% extends "modal_form.html" %} + +{% load i18n %} + +{% block pre_form_content %} +{{ block.super }} + +{% if part %} +
+ {% include "hover_image.html" with image=part.image %} + {{ part.full_name}} +
+ {{ part.description }} +
+{% endif %} + +{% endblock %} \ No newline at end of file diff --git a/InvenTree/company/templates/company/manufacturer_part_detail.html b/InvenTree/company/templates/company/manufacturer_part_detail.html new file mode 100644 index 0000000000..f2bcfea963 --- /dev/null +++ b/InvenTree/company/templates/company/manufacturer_part_detail.html @@ -0,0 +1,38 @@ +{% extends "company/manufacturer_part_base.html" %} +{% load static %} +{% load i18n %} + +{% block menubar %} +{% include "company/part_navbar.html" with tab='details' %} +{% endblock %} + +{% block heading %} +{% trans "Manufacturer Part Details" %} +{% endblock %} + + +{% block details %} + + + + + + + + +{% if part.link %} + +{% endif %} +
{% trans "Internal Part" %} + {% if part.part %} + {{ part.part.full_name }} + {% endif %} +
{% trans "Manufacturer" %}{{ part.manufacturer.name }}
{% trans "MPN" %}{{ part.MPN }}
{% trans "External Link" %}{{ part.link }}
+ +{% endblock %} + +{% block js_ready %} +{{ block.super }} + + +{% endblock %} \ No newline at end of file diff --git a/InvenTree/company/urls.py b/InvenTree/company/urls.py index b5ad06019b..682b74841d 100644 --- a/InvenTree/company/urls.py +++ b/InvenTree/company/urls.py @@ -52,6 +52,18 @@ price_break_urls = [ url(r'^(?P\d+)/delete/', views.PriceBreakDelete.as_view(), name='price-break-delete'), ] +manufacturer_part_detail_urls = [ + url(r'^edit/?', views.ManufacturerPartEdit.as_view(), name='supplier-part-edit'), +] + +manufacturer_part_urls = [ + url(r'^new/?', views.ManufacturerPartCreate.as_view(), name='manufacturer-part-create'), + + url(r'delete/', views.ManufacturerPartDelete.as_view(), name='manufacturer-part-delete'), + + url(r'^(?P\d+)/', include(manufacturer_part_detail_urls)), +] + supplier_part_detail_urls = [ url(r'^edit/?', views.SupplierPartEdit.as_view(), name='supplier-part-edit'), From 08ffbee8edf2c738ade147daa4c55e50d179653f Mon Sep 17 00:00:00 2001 From: eeintech Date: Tue, 23 Mar 2021 17:33:29 -0400 Subject: [PATCH 003/116] Fixed model name and added to part navbar --- InvenTree/company/models.py | 8 ++++---- InvenTree/part/templates/part/navbar.html | 8 +++++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/InvenTree/company/models.py b/InvenTree/company/models.py index 8b41e44553..202453b9ae 100644 --- a/InvenTree/company/models.py +++ b/InvenTree/company/models.py @@ -278,15 +278,15 @@ class Contact(models.Model): on_delete=models.CASCADE) -class MaufacturerPart(models.Model): +class ManufacturerPart(models.Model): """ Represents a unique part as provided by a Manufacturer - Each MaufacturerPart is identified by a MPN (Manufacturer Part Number) - Each MaufacturerPart is also linked to a Part object. + Each ManufacturerPart is identified by a MPN (Manufacturer Part Number) + Each ManufacturerPart is also linked to a Part object. A Part may be available from multiple manufacturers Attributes: part: Link to the master Part - manufacturer: Company that manufactures the MaufacturerPart + manufacturer: Company that manufactures the ManufacturerPart MPN: Manufacture part number link: Link to external website for this manufacturer part description: Descriptive notes field diff --git a/InvenTree/part/templates/part/navbar.html b/InvenTree/part/templates/part/navbar.html index 17e69172de..e621af038a 100644 --- a/InvenTree/part/templates/part/navbar.html +++ b/InvenTree/part/templates/part/navbar.html @@ -69,9 +69,15 @@ {% endif %} {% if part.purchaseable and roles.purchase_order.view %} -
  • +
  • + {% trans "Manufacturers" %} + +
  • +
  • + + {% trans "Suppliers" %}
  • From e28dde7f7bc914b0bd29e39725603932fd78d76f Mon Sep 17 00:00:00 2001 From: eeintech Date: Tue, 23 Mar 2021 17:45:03 -0400 Subject: [PATCH 004/116] Fixed navbar, added missing template and urls --- InvenTree/InvenTree/urls.py | 2 + InvenTree/company/models.py | 20 +++- .../part/templates/part/manufacturer.html | 91 +++++++++++++++++++ InvenTree/part/templates/part/navbar.html | 2 +- InvenTree/part/urls.py | 1 + 5 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 InvenTree/part/templates/part/manufacturer.html diff --git a/InvenTree/InvenTree/urls.py b/InvenTree/InvenTree/urls.py index a9f53a7014..e74faf3a87 100644 --- a/InvenTree/InvenTree/urls.py +++ b/InvenTree/InvenTree/urls.py @@ -11,6 +11,7 @@ from django.contrib import admin from django.contrib.auth import views as auth_views from company.urls import company_urls +from company.urls import manufacturer_part_urls from company.urls import supplier_part_urls from company.urls import price_break_urls @@ -114,6 +115,7 @@ dynamic_javascript_urls = [ urlpatterns = [ url(r'^part/', include(part_urls)), + url(r'^manufacturer-part/', include(manufacturer_part_urls)), url(r'^supplier-part/', include(supplier_part_urls)), url(r'^price-break/', include(price_break_urls)), diff --git a/InvenTree/company/models.py b/InvenTree/company/models.py index 202453b9ae..340cb1f91f 100644 --- a/InvenTree/company/models.py +++ b/InvenTree/company/models.py @@ -307,7 +307,7 @@ class ManufacturerPart(models.Model): manufacturer = models.ForeignKey( Company, on_delete=models.SET_NULL, - related_name='manufactured_parts', + related_name='manufacturer_parts', limit_choices_to={ 'is_manufacturer': True }, @@ -386,6 +386,24 @@ class SupplierPart(models.Model): help_text=_('Supplier stock keeping unit') ) + manufacturer = models.ForeignKey( + Company, + on_delete=models.SET_NULL, + related_name='manufactured_parts', + limit_choices_to={ + 'is_manufacturer': True + }, + verbose_name=_('Manufacturer'), + help_text=_('Select manufacturer'), + null=True, blank=True + ) + + MPN = models.CharField( + max_length=100, blank=True, null=True, + verbose_name=_('MPN'), + help_text=_('Manufacturer part number') + ) + link = InvenTreeURLField( blank=True, null=True, verbose_name=_('Link'), diff --git a/InvenTree/part/templates/part/manufacturer.html b/InvenTree/part/templates/part/manufacturer.html new file mode 100644 index 0000000000..1e023c6349 --- /dev/null +++ b/InvenTree/part/templates/part/manufacturer.html @@ -0,0 +1,91 @@ +{% extends "part/part_base.html" %} +{% load static %} +{% load i18n %} + +{% block menubar %} +{% include 'part/navbar.html' with tab='manufacturers' %} +{% endblock %} + +{% block heading %} +{% trans "Part Manufacturers" %} +{% endblock %} + +{% block details %} +
    +
    + +
    + + +
    +
    +
    + + +
    + +{% endblock %} + +{% block js_load %} +{{ block.super }} +{% endblock %} +{% block js_ready %} + {{ block.super }} + + $('#manufacturer-create').click(function () { + launchModalForm( + "{% url 'manufacturer-part-create' %}", + { + reload: true, + data: { + part: {{ part.id }} + }, + secondary: [ + { + field: 'manufacturer', + label: '{% trans "New Manufacturer" %}', + title: '{% trans "Create new manufacturer" %}', + url: "{% url 'manufacturer-create' %}", + } + ] + }); + }); + + $("#manufacturer-part-delete").click(function() { + + var selections = $("#manufacturer-table").bootstrapTable("getSelections"); + + var parts = []; + + selections.forEach(function(item) { + parts.push(item.pk); + }); + + launchModalForm("{% url 'manufacturer-part-delete' %}", { + data: { + parts: parts, + }, + reload: true, + }); + }); + + loadSupplierPartTable( + "#supplier-table", + "{% url 'api-supplier-part-list' %}", + { + params: { + part: {{ part.id }}, + part_detail: true, + supplier_detail: true, + manufacturer_detail: true, + }, + } + ); + + linkButtonsToSelection($("#supplier-table"), ['#supplier-part-options']) + +{% endblock %} \ No newline at end of file diff --git a/InvenTree/part/templates/part/navbar.html b/InvenTree/part/templates/part/navbar.html index e621af038a..1c94c0358f 100644 --- a/InvenTree/part/templates/part/navbar.html +++ b/InvenTree/part/templates/part/navbar.html @@ -70,7 +70,7 @@ {% endif %} {% if part.purchaseable and roles.purchase_order.view %}
  • - + {% trans "Manufacturers" %} diff --git a/InvenTree/part/urls.py b/InvenTree/part/urls.py index f275edede2..f1185fbe8c 100644 --- a/InvenTree/part/urls.py +++ b/InvenTree/part/urls.py @@ -60,6 +60,7 @@ part_detail_urls = [ url(r'^bom/?', views.PartDetail.as_view(template_name='part/bom.html'), name='part-bom'), url(r'^build/?', views.PartDetail.as_view(template_name='part/build.html'), name='part-build'), url(r'^used/?', views.PartDetail.as_view(template_name='part/used_in.html'), name='part-used-in'), + url(r'^manufacturers/?', views.PartDetail.as_view(template_name='part/manufacturer.html'), name='part-manufacturers'), url(r'^suppliers/?', views.PartDetail.as_view(template_name='part/supplier.html'), name='part-suppliers'), url(r'^orders/?', views.PartDetail.as_view(template_name='part/orders.html'), name='part-orders'), url(r'^sales-orders/', views.PartDetail.as_view(template_name='part/sales_orders.html'), name='part-sales-orders'), From afd2dacfc75b0e98cb03f3141d9f1ac969d80693 Mon Sep 17 00:00:00 2001 From: eeintech Date: Wed, 24 Mar 2021 11:44:51 -0400 Subject: [PATCH 005/116] Can now create, view list of parts and view detail page --- InvenTree/company/api.py | 113 +++++++++++++++++- .../migrations/0032_manufacturerpart.py | 30 +++++ InvenTree/company/models.py | 5 +- InvenTree/company/serializers.py | 44 +++++++ InvenTree/company/urls.py | 4 +- InvenTree/company/views.py | 4 +- .../part/templates/part/manufacturer.html | 11 +- InvenTree/templates/js/company.js | 97 +++++++++++++++ 8 files changed, 296 insertions(+), 12 deletions(-) create mode 100644 InvenTree/company/migrations/0032_manufacturerpart.py diff --git a/InvenTree/company/api.py b/InvenTree/company/api.py index ebf2924d16..b0962afbc4 100644 --- a/InvenTree/company/api.py +++ b/InvenTree/company/api.py @@ -15,9 +15,11 @@ from django.db.models import Q from InvenTree.helpers import str2bool from .models import Company +from .models import ManufacturerPart from .models import SupplierPart, SupplierPriceBreak from .serializers import CompanySerializer +from .serializers import ManufacturerPartSerializer from .serializers import SupplierPartSerializer, SupplierPriceBreakSerializer @@ -80,8 +82,107 @@ class CompanyDetail(generics.RetrieveUpdateDestroyAPIView): queryset = CompanySerializer.annotate_queryset(queryset) return queryset + + +class ManufacturerPartList(generics.ListCreateAPIView): + """ API endpoint for list view of ManufacturerPart object + + - GET: Return list of ManufacturerPart objects + - POST: Create a new ManufacturerPart object + """ + + queryset = ManufacturerPart.objects.all().prefetch_related( + 'part', + 'manufacturer', + ) + + serializer_class = ManufacturerPartSerializer + + def get_serializer(self, *args, **kwargs): + + # Do we wish to include extra detail? + try: + kwargs['part_detail'] = str2bool(self.request.query_params.get('part_detail', None)) + except AttributeError: + pass + + try: + kwargs['manufacturer_detail'] = str2bool(self.request.query_params.get('manufacturer_detail', None)) + except AttributeError: + pass + + try: + kwargs['pretty'] = str2bool(self.request.query_params.get('pretty', None)) + except AttributeError: + pass + + kwargs['context'] = self.get_serializer_context() + + return self.serializer_class(*args, **kwargs) + + def filter_queryset(self, queryset): + """ + Custom filtering for the queryset. + """ + + queryset = super().filter_queryset(queryset) + + params = self.request.query_params + + # Filter by manufacturer + manufacturer = params.get('manufacturer', None) + + if manufacturer is not None: + queryset = queryset.filter(manufacturer=manufacturer) + + # Filter by parent part? + part = params.get('part', None) + + if part is not None: + queryset = queryset.filter(part=part) + + # Filter by 'active' status of the part? + active = params.get('active', None) + + if active is not None: + active = str2bool(active) + queryset = queryset.filter(part__active=active) + + return queryset + + filter_backends = [ + DjangoFilterBackend, + filters.SearchFilter, + filters.OrderingFilter, + ] + + filter_fields = [ + ] + + search_fields = [ + 'manufacturer__name', + 'description', + 'MPN', + 'part__name', + 'part__description', + ] +class ManufacturerPartDetail(generics.RetrieveUpdateDestroyAPIView): + """ API endpoint for detail view of ManufacturerPart object + + - GET: Retrieve detail view + - PATCH: Update object + - DELETE: Delete object + """ + + queryset = ManufacturerPart.objects.all() + serializer_class = ManufacturerPartSerializer + + read_only_fields = [ + ] + + class SupplierPartList(generics.ListCreateAPIView): """ API endpoint for list view of SupplierPart object @@ -226,6 +327,15 @@ class SupplierPriceBreakList(generics.ListCreateAPIView): ] +manufacturer_part_api_urls = [ + + url(r'^(?P\d+)/?', ManufacturerPartDetail.as_view(), name='api-manufacturer-part-detail'), + + # Catch anything else + url(r'^.*$', ManufacturerPartList.as_view(), name='api-manufacturer-part-list'), +] + + supplier_part_api_urls = [ url(r'^(?P\d+)/?', SupplierPartDetail.as_view(), name='api-supplier-part-detail'), @@ -236,7 +346,8 @@ supplier_part_api_urls = [ company_api_urls = [ - + url(r'^part/manufacturer/', include(manufacturer_part_api_urls)), + url(r'^part/', include(supplier_part_api_urls)), url(r'^price-break/', SupplierPriceBreakList.as_view(), name='api-part-supplier-price'), diff --git a/InvenTree/company/migrations/0032_manufacturerpart.py b/InvenTree/company/migrations/0032_manufacturerpart.py new file mode 100644 index 0000000000..5547aec36d --- /dev/null +++ b/InvenTree/company/migrations/0032_manufacturerpart.py @@ -0,0 +1,30 @@ +# Generated by Django 3.0.7 on 2021-03-24 14:18 + +import InvenTree.fields +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('part', '0063_bomitem_inherited'), + ('company', '0031_auto_20210103_2215'), + ] + + operations = [ + migrations.CreateModel( + name='ManufacturerPart', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('MPN', models.CharField(help_text='Manufacturer Part Number', max_length=100, verbose_name='MPN')), + ('link', InvenTree.fields.InvenTreeURLField(blank=True, help_text='URL for external manufacturer part link', null=True, verbose_name='Link')), + ('description', models.CharField(blank=True, help_text='Manufacturer part description', max_length=250, null=True, verbose_name='Description')), + ('manufacturer', models.ForeignKey(help_text='Select manufacturer', limit_choices_to={'is_manufacturer': True}, on_delete=django.db.models.deletion.CASCADE, related_name='manufacturer_parts', to='company.Company', verbose_name='Manufacturer')), + ('part', models.ForeignKey(help_text='Select part', limit_choices_to={'purchaseable': True}, on_delete=django.db.models.deletion.CASCADE, related_name='manufacturer_parts', to='part.Part', verbose_name='Base Part')), + ], + options={ + 'unique_together': {('part', 'manufacturer', 'MPN')}, + }, + ), + ] diff --git a/InvenTree/company/models.py b/InvenTree/company/models.py index 340cb1f91f..05421c54bc 100644 --- a/InvenTree/company/models.py +++ b/InvenTree/company/models.py @@ -306,18 +306,17 @@ class ManufacturerPart(models.Model): manufacturer = models.ForeignKey( Company, - on_delete=models.SET_NULL, + on_delete=models.CASCADE, related_name='manufacturer_parts', limit_choices_to={ 'is_manufacturer': True }, verbose_name=_('Manufacturer'), help_text=_('Select manufacturer'), - null=True, blank=True ) MPN = models.CharField( - max_length=100, blank=True, null=True, + max_length=100, verbose_name=_('MPN'), help_text=_('Manufacturer Part Number') ) diff --git a/InvenTree/company/serializers.py b/InvenTree/company/serializers.py index 4951bd3ad0..b1fc81f0b0 100644 --- a/InvenTree/company/serializers.py +++ b/InvenTree/company/serializers.py @@ -7,6 +7,7 @@ from rest_framework import serializers from sql_util.utils import SubqueryCount from .models import Company +from .models import ManufacturerPart from .models import SupplierPart, SupplierPriceBreak from InvenTree.serializers import InvenTreeModelSerializer @@ -80,6 +81,49 @@ class CompanySerializer(InvenTreeModelSerializer): ] +class ManufacturerPartSerializer(InvenTreeModelSerializer): + """ Serializer for SupplierPart object """ + + part_detail = PartBriefSerializer(source='part', many=False, read_only=True) + + manufacturer_detail = CompanyBriefSerializer(source='manufacturer', many=False, read_only=True) + + pretty_name = serializers.CharField(read_only=True) + + def __init__(self, *args, **kwargs): + + part_detail = kwargs.pop('part_detail', False) + manufacturer_detail = kwargs.pop('manufacturer_detail', False) + prettify = kwargs.pop('pretty', False) + + super(ManufacturerPartSerializer, self).__init__(*args, **kwargs) + + if part_detail is not True: + self.fields.pop('part_detail') + + if manufacturer_detail is not True: + self.fields.pop('manufacturer_detail') + + if prettify is not True: + self.fields.pop('pretty_name') + + manufacturer = serializers.PrimaryKeyRelatedField(queryset=Company.objects.filter(is_manufacturer=True)) + + class Meta: + model = SupplierPart + fields = [ + 'pk', + 'part', + 'part_detail', + 'pretty_name', + 'manufacturer', + 'manufacturer_detail', + 'description', + 'MPN', + 'link', + ] + + class SupplierPartSerializer(InvenTreeModelSerializer): """ Serializer for SupplierPart object """ diff --git a/InvenTree/company/urls.py b/InvenTree/company/urls.py index 682b74841d..bb0fd1606a 100644 --- a/InvenTree/company/urls.py +++ b/InvenTree/company/urls.py @@ -53,7 +53,9 @@ price_break_urls = [ ] manufacturer_part_detail_urls = [ - url(r'^edit/?', views.ManufacturerPartEdit.as_view(), name='supplier-part-edit'), + url(r'^edit/?', views.ManufacturerPartEdit.as_view(), name='manufacturer-part-edit'), + + url('^.*$', views.ManufacturerPartDetail.as_view(template_name='company/manufacturer_part_detail.html'), name='manufacturer-part-detail'), ] manufacturer_part_urls = [ diff --git a/InvenTree/company/views.py b/InvenTree/company/views.py index 0786eb0ee8..cdaca6a9e3 100644 --- a/InvenTree/company/views.py +++ b/InvenTree/company/views.py @@ -405,7 +405,7 @@ class ManufacturerPartCreate(AjaxCreateView): - If 'manufacturer_id' provided, pre-fill manufacturer field - If 'part_id' provided, pre-fill part field """ - initials = super(SupplierPartCreate, self).get_initial().copy() + initials = super(ManufacturerPartCreate, self).get_initial().copy() manufacturer_id = self.get_param('manufacturer') part_id = self.get_param('part') @@ -422,6 +422,8 @@ class ManufacturerPartCreate(AjaxCreateView): except (ValueError, Part.DoesNotExist): pass + return initials + class ManufacturerPartDelete(AjaxDeleteView): """ Delete view for removing a ManufacturerPart. diff --git a/InvenTree/part/templates/part/manufacturer.html b/InvenTree/part/templates/part/manufacturer.html index 1e023c6349..09793ffc7f 100644 --- a/InvenTree/part/templates/part/manufacturer.html +++ b/InvenTree/part/templates/part/manufacturer.html @@ -14,7 +14,7 @@
    @@ -73,19 +73,18 @@ }); }); - loadSupplierPartTable( - "#supplier-table", - "{% url 'api-supplier-part-list' %}", + loadManufacturerPartTable( + "#manufacturer-table", + "{% url 'api-manufacturer-part-list' %}", { params: { part: {{ part.id }}, part_detail: true, - supplier_detail: true, manufacturer_detail: true, }, } ); - linkButtonsToSelection($("#supplier-table"), ['#supplier-part-options']) + linkButtonsToSelection($("#manufacturer-table"), ['#manufacturer-part-options']) {% endblock %} \ No newline at end of file diff --git a/InvenTree/templates/js/company.js b/InvenTree/templates/js/company.js index 601d4a5370..1dda96e27f 100644 --- a/InvenTree/templates/js/company.js +++ b/InvenTree/templates/js/company.js @@ -101,6 +101,103 @@ function loadCompanyTable(table, url, options={}) { } +function loadManufacturerPartTable(table, url, options) { + /* + * Load manufacturer part table + * + */ + + // Query parameters + var params = options.params || {}; + + // Load filters + var filters = loadTableFilters("manufacturer-part"); + + for (var key in params) { + filters[key] = params[key]; + } + + setupFilterList("manufacturer-part", $(table)); + + $(table).inventreeTable({ + url: url, + method: 'get', + original: params, + queryParams: filters, + name: 'manufacturerparts', + groupBy: false, + formatNoMatches: function() { return "{% trans "No manufacturer parts found" %}"; }, + columns: [ + { + checkbox: true, + switchable: false, + }, + { + sortable: true, + field: 'part_detail.full_name', + title: '{% trans "Part" %}', + switchable: false, + formatter: function(value, row, index, field) { + + var url = `/part/${row.part}/`; + + var html = imageHoverIcon(row.part_detail.thumbnail) + renderLink(value, url); + + if (row.part_detail.is_template) { + html += ``; + } + + if (row.part_detail.assembly) { + html += ``; + } + + if (!row.part_detail.active) { + html += `{% trans "Inactive" %}`; + } + + return html; + } + }, + { + sortable: true, + field: 'manufacturer', + title: '{% trans "Manufacturer" %}', + formatter: function(value, row, index, field) { + if (value && row.manufacturer_detail) { + var name = row.manufacturer_detail.name; + var url = `/company/${value}/`; + var html = imageHoverIcon(row.manufacturer_detail.image) + renderLink(name, url); + + return html; + } else { + return "-"; + } + } + }, + { + sortable: true, + field: 'MPN', + title: '{% trans "MPN" %}', + formatter: function(value, row, index, field) { + return renderLink(value, `/manufacturer-part/${row.pk}/`); + } + }, + { + field: 'link', + title: '{% trans "Link" %}', + formatter: function(value, row, index, field) { + if (value) { + return renderLink(value, value); + } else { + return ''; + } + } + }, + ], + }); +} + + function loadSupplierPartTable(table, url, options) { /* * Load supplier part table From 4abd8587ab1c5ef06f33cdc73e669a51e963aedc Mon Sep 17 00:00:00 2001 From: eeintech Date: Wed, 24 Mar 2021 12:08:45 -0400 Subject: [PATCH 006/116] Updated company templates --- .../company/templates/company/detail.html | 4 +- .../templates/company/detail_part.html | 74 +++++++++++++++---- .../company/templates/company/navbar.html | 13 +++- InvenTree/company/views.py | 2 +- 4 files changed, 76 insertions(+), 17 deletions(-) diff --git a/InvenTree/company/templates/company/detail.html b/InvenTree/company/templates/company/detail.html index b803fc5852..735f34f6b3 100644 --- a/InvenTree/company/templates/company/detail.html +++ b/InvenTree/company/templates/company/detail.html @@ -51,12 +51,12 @@ - + {% trans "Manufacturer" %} {% include "yesnolabel.html" with value=company.is_manufacturer %} - + {% trans "Supplier" %} {% include 'yesnolabel.html' with value=company.is_supplier %} diff --git a/InvenTree/company/templates/company/detail_part.html b/InvenTree/company/templates/company/detail_part.html index b12322353a..65362521cd 100644 --- a/InvenTree/company/templates/company/detail_part.html +++ b/InvenTree/company/templates/company/detail_part.html @@ -17,9 +17,16 @@
    {% if roles.purchase_order.add %} - + {% if company.is_manufacturer %} + + {% endif %} + {% if company.is_supplier %} + + {% endif %} {% endif %}
  • - {% if company.is_supplier or company.is_manufacturer %} + {% if company.is_manufacturer %} +
  • + + + {% trans "Parts" %} + +
  • + {% endif %} + + {% if company.is_supplier %}
  • {% trans "Parts" %}
  • + {% endif %} + {% if company.is_manufacturer or company.is_supplier %}
  • diff --git a/InvenTree/company/views.py b/InvenTree/company/views.py index cdaca6a9e3..015e5e248c 100644 --- a/InvenTree/company/views.py +++ b/InvenTree/company/views.py @@ -352,7 +352,7 @@ class ManufacturerPartEdit(AjaxUpdateView): model = ManufacturerPart context_object_name = 'part' - form_class = EditSupplierPartForm + form_class = EditManufacturerPartForm ajax_template_name = 'modal_form.html' ajax_form_title = _('Edit Manufacturer Part') From fd4f33d45b877ed46ea07d769672639acfb13919 Mon Sep 17 00:00:00 2001 From: eeintech Date: Wed, 24 Mar 2021 12:39:26 -0400 Subject: [PATCH 007/116] More templates updates --- .../company/manufacturer_part_base.html | 2 ++ .../company/manufacturer_part_delete.html | 31 +++++++++++++++++++ .../company/manufacturer_part_detail.html | 2 +- .../company/manufacturer_part_navbar.html | 27 ++++++++++++++++ ...tdelete.html => supplier_part_delete.html} | 7 +++-- .../company/supplier_part_detail.html | 2 +- ..._navbar.html => supplier_part_navbar.html} | 0 .../company/supplier_part_orders.html | 2 +- .../company/supplier_part_pricing.html | 2 +- .../company/supplier_part_stock.html | 2 +- InvenTree/company/views.py | 6 ++-- 11 files changed, 73 insertions(+), 10 deletions(-) create mode 100644 InvenTree/company/templates/company/manufacturer_part_delete.html create mode 100644 InvenTree/company/templates/company/manufacturer_part_navbar.html rename InvenTree/company/templates/company/{partdelete.html => supplier_part_delete.html} (92%) rename InvenTree/company/templates/company/{part_navbar.html => supplier_part_navbar.html} (100%) diff --git a/InvenTree/company/templates/company/manufacturer_part_base.html b/InvenTree/company/templates/company/manufacturer_part_base.html index 7b0b579d1d..5c6e6c6b1d 100644 --- a/InvenTree/company/templates/company/manufacturer_part_base.html +++ b/InvenTree/company/templates/company/manufacturer_part_base.html @@ -31,11 +31,13 @@ src="{% static 'img/blank_image.png' %}" {% if roles.purchase_order.change %}
    + {% comment "for later" %} {% if roles.purchase_order.add %} {% endif %} + {% endcomment %} diff --git a/InvenTree/company/templates/company/manufacturer_part_delete.html b/InvenTree/company/templates/company/manufacturer_part_delete.html new file mode 100644 index 0000000000..30eab3b591 --- /dev/null +++ b/InvenTree/company/templates/company/manufacturer_part_delete.html @@ -0,0 +1,31 @@ +{% extends "modal_delete_form.html" %} +{% load i18n %} + +{% block pre_form_content %} +{% trans "Are you sure you want to delete the following Manufacturer Parts?" %} + +
    +{% endblock %} + +{% block form_data %} + +{% for part in parts %} + + + + + + + +{% endfor %} +
    + {% include "hover_image.html" with image=part.part.image %} + {{ part.part.full_name }} + + {% include "hover_image.html" with image=part.manufacturer.image %} + {{ part.manufacturer.name }} + + {{ part.MPN }} +
    + +{% endblock %} \ No newline at end of file diff --git a/InvenTree/company/templates/company/manufacturer_part_detail.html b/InvenTree/company/templates/company/manufacturer_part_detail.html index f2bcfea963..f351f955dc 100644 --- a/InvenTree/company/templates/company/manufacturer_part_detail.html +++ b/InvenTree/company/templates/company/manufacturer_part_detail.html @@ -3,7 +3,7 @@ {% load i18n %} {% block menubar %} -{% include "company/part_navbar.html" with tab='details' %} +{% include "company/manufacturer_part_navbar.html" with tab='details' %} {% endblock %} {% block heading %} diff --git a/InvenTree/company/templates/company/manufacturer_part_navbar.html b/InvenTree/company/templates/company/manufacturer_part_navbar.html new file mode 100644 index 0000000000..31430e7e6e --- /dev/null +++ b/InvenTree/company/templates/company/manufacturer_part_navbar.html @@ -0,0 +1,27 @@ +{% load i18n %} + +
    \ No newline at end of file diff --git a/InvenTree/company/templates/company/partdelete.html b/InvenTree/company/templates/company/supplier_part_delete.html similarity index 92% rename from InvenTree/company/templates/company/partdelete.html rename to InvenTree/company/templates/company/supplier_part_delete.html index 8eed487697..b44e7c0610 100644 --- a/InvenTree/company/templates/company/partdelete.html +++ b/InvenTree/company/templates/company/supplier_part_delete.html @@ -13,13 +13,16 @@ + + {% include "hover_image.html" with image=part.part.image %} + {{ part.part.full_name }} + {% include "hover_image.html" with image=part.supplier.image %} {{ part.supplier.name }} - {% include "hover_image.html" with image=part.part.image %} - {{ part.part.full_name }} + {{ part.SKU }} {% endfor %} diff --git a/InvenTree/company/templates/company/supplier_part_detail.html b/InvenTree/company/templates/company/supplier_part_detail.html index d3b94f0ad5..7a8ac0dcd3 100644 --- a/InvenTree/company/templates/company/supplier_part_detail.html +++ b/InvenTree/company/templates/company/supplier_part_detail.html @@ -3,7 +3,7 @@ {% load i18n %} {% block menubar %} -{% include "company/part_navbar.html" with tab='details' %} +{% include "company/supplier_part_navbar.html" with tab='details' %} {% endblock %} {% block heading %} diff --git a/InvenTree/company/templates/company/part_navbar.html b/InvenTree/company/templates/company/supplier_part_navbar.html similarity index 100% rename from InvenTree/company/templates/company/part_navbar.html rename to InvenTree/company/templates/company/supplier_part_navbar.html diff --git a/InvenTree/company/templates/company/supplier_part_orders.html b/InvenTree/company/templates/company/supplier_part_orders.html index ae4b025b11..932f61f30f 100644 --- a/InvenTree/company/templates/company/supplier_part_orders.html +++ b/InvenTree/company/templates/company/supplier_part_orders.html @@ -3,7 +3,7 @@ {% load i18n %} {% block menubar %} -{% include "company/part_navbar.html" with tab='orders' %} +{% include "company/supplier_part_navbar.html" with tab='orders' %} {% endblock %} {% block heading %} diff --git a/InvenTree/company/templates/company/supplier_part_pricing.html b/InvenTree/company/templates/company/supplier_part_pricing.html index 2314b5cfcf..a674837650 100644 --- a/InvenTree/company/templates/company/supplier_part_pricing.html +++ b/InvenTree/company/templates/company/supplier_part_pricing.html @@ -4,7 +4,7 @@ {% load inventree_extras %} {% block menubar %} -{% include "company/part_navbar.html" with tab='pricing' %} +{% include "company/supplier_part_navbar.html" with tab='pricing' %} {% endblock %} {% block heading %} diff --git a/InvenTree/company/templates/company/supplier_part_stock.html b/InvenTree/company/templates/company/supplier_part_stock.html index 49a5a809c2..170b9f8e82 100644 --- a/InvenTree/company/templates/company/supplier_part_stock.html +++ b/InvenTree/company/templates/company/supplier_part_stock.html @@ -3,7 +3,7 @@ {% load i18n %} {% block menubar %} -{% include "company/part_navbar.html" with tab='stock' %} +{% include "company/supplier_part_navbar.html" with tab='stock' %} {% endblock %} {% block heading %} diff --git a/InvenTree/company/views.py b/InvenTree/company/views.py index 015e5e248c..dbcc5948da 100644 --- a/InvenTree/company/views.py +++ b/InvenTree/company/views.py @@ -436,7 +436,7 @@ class ManufacturerPartDelete(AjaxDeleteView): """ success_url = '/manufacturer/' - ajax_template_name = 'company/partdelete.html' + ajax_template_name = 'company/manufacturer_part_delete.html' ajax_form_title = _('Delete Manufacturer Part') role_required = 'purchase_order.delete' @@ -460,7 +460,7 @@ class ManufacturerPartDelete(AjaxDeleteView): if 'part' in self.request.GET: try: self.parts.append(ManufacturerPart.objects.get(pk=self.request.GET.get('part'))) - except (ValueError, SupplierPart.DoesNotExist): + except (ValueError, ManufacturerPart.DoesNotExist): pass elif 'parts[]' in self.request.GET: @@ -666,7 +666,7 @@ class SupplierPartDelete(AjaxDeleteView): """ success_url = '/supplier/' - ajax_template_name = 'company/partdelete.html' + ajax_template_name = 'company/supplier_part_delete.html' ajax_form_title = _('Delete Supplier Part') role_required = 'purchase_order.delete' From c85d7374469dc67ec77d9f9f2990d6be9bbedc4a Mon Sep 17 00:00:00 2001 From: eeintech Date: Thu, 25 Mar 2021 15:04:48 -0400 Subject: [PATCH 008/116] Fix CI --- InvenTree/users/models.py | 1 + 1 file changed, 1 insertion(+) diff --git a/InvenTree/users/models.py b/InvenTree/users/models.py index 5c95abfe46..3d0f2e9e7e 100644 --- a/InvenTree/users/models.py +++ b/InvenTree/users/models.py @@ -69,6 +69,7 @@ class RuleSet(models.Model): 'part_partrelated', 'part_partstar', 'company_supplierpart', + 'company_manufacturerpart', ], 'stock_location': [ 'stock_stocklocation', From e0a0bfdadb7731697e815c4462371b8cb748dd92 Mon Sep 17 00:00:00 2001 From: eeintech Date: Thu, 25 Mar 2021 15:39:16 -0400 Subject: [PATCH 009/116] Fix style --- InvenTree/company/serializers.py | 1 - 1 file changed, 1 deletion(-) diff --git a/InvenTree/company/serializers.py b/InvenTree/company/serializers.py index b1fc81f0b0..7b02f5ec4a 100644 --- a/InvenTree/company/serializers.py +++ b/InvenTree/company/serializers.py @@ -7,7 +7,6 @@ from rest_framework import serializers from sql_util.utils import SubqueryCount from .models import Company -from .models import ManufacturerPart from .models import SupplierPart, SupplierPriceBreak from InvenTree.serializers import InvenTreeModelSerializer From e6dfb7da524073753506632e6b0b1ee14c21068b Mon Sep 17 00:00:00 2001 From: eeintech Date: Mon, 29 Mar 2021 13:22:15 -0400 Subject: [PATCH 010/116] Added global setting to enable manufacturer parts Created SourceItem model Updated templates --- InvenTree/common/models.py | 7 ++++ InvenTree/company/api.py | 2 +- .../migrations/0033_auto_20210329_1700.py | 33 +++++++++++++++++++ InvenTree/company/models.py | 33 +++++++++++++++++-- .../templates/company/detail_part.html | 15 +++++---- .../company/templates/company/navbar.html | 8 ++--- InvenTree/part/templates/part/navbar.html | 3 ++ .../templates/InvenTree/settings/part.html | 2 ++ 8 files changed, 89 insertions(+), 14 deletions(-) create mode 100644 InvenTree/company/migrations/0033_auto_20210329_1700.py diff --git a/InvenTree/common/models.py b/InvenTree/common/models.py index df8e3b2d37..a785e944bc 100644 --- a/InvenTree/common/models.py +++ b/InvenTree/common/models.py @@ -202,6 +202,13 @@ class InvenTreeSetting(models.Model): 'validator': bool, }, + 'PART_ENABLE_MANUFACTURER_PARTS': { + 'name': _('Enable Manufacturer Parts'), + 'description': _('Enable the use of manufacturer parts for purchasing'), + 'default': False, + 'validator': bool, + }, + 'REPORT_DEBUG_MODE': { 'name': _('Debug Mode'), 'description': _('Generate reports in debug mode (HTML output)'), diff --git a/InvenTree/company/api.py b/InvenTree/company/api.py index b0962afbc4..e0ac1b804a 100644 --- a/InvenTree/company/api.py +++ b/InvenTree/company/api.py @@ -130,7 +130,7 @@ class ManufacturerPartList(generics.ListCreateAPIView): params = self.request.query_params # Filter by manufacturer - manufacturer = params.get('manufacturer', None) + manufacturer = params.get('company', None) if manufacturer is not None: queryset = queryset.filter(manufacturer=manufacturer) diff --git a/InvenTree/company/migrations/0033_auto_20210329_1700.py b/InvenTree/company/migrations/0033_auto_20210329_1700.py new file mode 100644 index 0000000000..341ac95999 --- /dev/null +++ b/InvenTree/company/migrations/0033_auto_20210329_1700.py @@ -0,0 +1,33 @@ +# Generated by Django 3.0.7 on 2021-03-29 17:00 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + ('company', '0032_manufacturerpart'), + ] + + operations = [ + migrations.CreateModel( + name='SourceItem', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('part_id', models.PositiveIntegerField()), + ('part_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), + ], + ), + migrations.AddField( + model_name='manufacturerpart', + name='source_item', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='manufacturer_parts', to='company.SourceItem', verbose_name='Sourcing Item'), + ), + migrations.AddField( + model_name='supplierpart', + name='source_item', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='supplier_parts', to='company.SourceItem', verbose_name='Sourcing Item'), + ), + ] diff --git a/InvenTree/company/models.py b/InvenTree/company/models.py index 05421c54bc..bd628c64d4 100644 --- a/InvenTree/company/models.py +++ b/InvenTree/company/models.py @@ -13,6 +13,8 @@ from django.utils.translation import gettext_lazy as _ from django.core.validators import MinValueValidator from django.db import models from django.db.models import Sum, Q, UniqueConstraint +from django.contrib.contenttypes.fields import GenericForeignKey +from django.contrib.contenttypes.models import ContentType from django.apps import apps from django.urls import reverse @@ -278,6 +280,20 @@ class Contact(models.Model): on_delete=models.CASCADE) +class SourceItem(models.Model): + """ This model allows flexibility for sourcing of InvenTree parts. + Each SourceItem instance represents a single ManufacturerPart or + SupplierPart instance. + SourceItem can be linked to either Part or ManufacturerPart instances. + """ + + part_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) + + part_id = models.PositiveIntegerField() + + part = GenericForeignKey('part_type', 'part_id') + + class ManufacturerPart(models.Model): """ Represents a unique part as provided by a Manufacturer Each ManufacturerPart is identified by a MPN (Manufacturer Part Number) @@ -286,6 +302,7 @@ class ManufacturerPart(models.Model): Attributes: part: Link to the master Part + source_item: The sourcing item linked to this ManufacturerPart instance manufacturer: Company that manufactures the ManufacturerPart MPN: Manufacture part number link: Link to external website for this manufacturer part @@ -303,6 +320,12 @@ class ManufacturerPart(models.Model): }, help_text=_('Select part'), ) + + source_item = models.ForeignKey(SourceItem, on_delete=models.CASCADE, + blank=True, null=True, + related_name='manufacturer_parts', + verbose_name=_('Sourcing Item'), + ) manufacturer = models.ForeignKey( Company, @@ -341,8 +364,8 @@ class SupplierPart(models.Model): A Part may be available from multiple suppliers Attributes: - part_type: Part or ManufacturerPart - part_id: Part or ManufacturerPart ID + part: Link to the master Part + source_item: The sourcing item linked to this SupplierPart instance supplier: Company that supplies this SupplierPart object SKU: Stock keeping unit (supplier part number) link: Link to external website for this supplier part @@ -372,6 +395,12 @@ class SupplierPart(models.Model): help_text=_('Select part'), ) + source_item = models.ForeignKey(SourceItem, on_delete=models.CASCADE, + blank=True, null=True, + related_name='supplier_parts', + verbose_name=_('Sourcing Item'), + ) + supplier = models.ForeignKey(Company, on_delete=models.CASCADE, related_name='supplied_parts', limit_choices_to={'is_supplier': True}, diff --git a/InvenTree/company/templates/company/detail_part.html b/InvenTree/company/templates/company/detail_part.html index 65362521cd..9829213103 100644 --- a/InvenTree/company/templates/company/detail_part.html +++ b/InvenTree/company/templates/company/detail_part.html @@ -1,6 +1,7 @@ {% extends "company/company_base.html" %} {% load static %} {% load i18n %} +{% load inventree_extras %} {% block menubar %} {% include 'company/navbar.html' with tab='parts' %} @@ -12,17 +13,18 @@ {% block details %} +{% setting_object 'PART_ENABLE_MANUFACTURER_PARTS' as manufacturer_parts %} + {% if roles.purchase_order.change %}
    {% if roles.purchase_order.add %} - {% if company.is_manufacturer %} + {% if manufacturer_parts.value == "True" and company.is_manufacturer %} - {% endif %} - {% if company.is_supplier %} + {% else %} @@ -57,6 +59,7 @@ {% endblock %} {% block js_ready %} {{ block.super }} +{% setting_object 'PART_ENABLE_MANUFACTURER_PARTS' as manufacturer_parts %} $("#manufacturer-part-create").click(function () { launchModalForm( @@ -108,7 +111,7 @@ }); }); - {% if company.is_manufacturer %} + {% if manufacturer_parts.value == "True" and company.is_manufacturer %} loadManufacturerPartTable( "#part-table", "{% url 'api-manufacturer-part-list' %}", @@ -120,9 +123,7 @@ }, } ); - {% endif %} - - {% if company.is_supplier %} + {% else %} loadSupplierPartTable( "#part-table", "{% url 'api-supplier-part-list' %}", diff --git a/InvenTree/company/templates/company/navbar.html b/InvenTree/company/templates/company/navbar.html index 0527eb925e..ed6ff5799b 100644 --- a/InvenTree/company/templates/company/navbar.html +++ b/InvenTree/company/templates/company/navbar.html @@ -2,6 +2,8 @@ {% load static %} {% load inventree_extras %} +{% setting_object 'PART_ENABLE_MANUFACTURER_PARTS' as manufacturer_parts %} +
    • @@ -16,16 +18,14 @@
    • - {% if company.is_manufacturer %} + {% if manufacturer_parts.value == "True" and company.is_manufacturer %}
    • {% trans "Parts" %}
    • - {% endif %} - - {% if company.is_supplier %} + {% else %}
    • diff --git a/InvenTree/part/templates/part/navbar.html b/InvenTree/part/templates/part/navbar.html index 1c94c0358f..47ac221517 100644 --- a/InvenTree/part/templates/part/navbar.html +++ b/InvenTree/part/templates/part/navbar.html @@ -68,13 +68,16 @@
    • {% endif %} + {% setting_object 'PART_ENABLE_MANUFACTURER_PARTS' as manufacturer_parts %} {% if part.purchaseable and roles.purchase_order.view %} + {% if manufacturer_parts.value == "True" %}
    • {% trans "Manufacturers" %}
    • + {% endif %}
    • diff --git a/InvenTree/templates/InvenTree/settings/part.html b/InvenTree/templates/InvenTree/settings/part.html index 092d9c576c..ccbce15a18 100644 --- a/InvenTree/templates/InvenTree/settings/part.html +++ b/InvenTree/templates/InvenTree/settings/part.html @@ -34,6 +34,8 @@ {% include "InvenTree/settings/setting.html" with key="PART_COPY_PARAMETERS" %} {% include "InvenTree/settings/setting.html" with key="PART_COPY_TESTS" %} {% include "InvenTree/settings/setting.html" with key="PART_CATEGORY_PARAMETERS" %} + + {% include "InvenTree/settings/setting.html" with key="PART_ENABLE_MANUFACTURER_PARTS" %} From 50adb2ac61dd7280620c2a62c7b34c13abd29935 Mon Sep 17 00:00:00 2001 From: eeintech Date: Mon, 29 Mar 2021 15:39:25 -0400 Subject: [PATCH 011/116] SourceItem only for SupplierPart, added logic to templates --- InvenTree/company/forms.py | 2 + .../migrations/0032_manufacturerpart.py | 16 ++- .../migrations/0033_auto_20210329_1700.py | 33 ----- InvenTree/company/models.py | 14 +- ...art.html => detail_manufacturer_part.html} | 63 ++------- .../company/detail_supplier_part.html | 128 ++++++++++++++++++ .../company/manufacturer_part_base.html | 4 +- .../company/manufacturer_part_detail.html | 2 +- .../company/templates/company/navbar.html | 19 +-- .../templates/company/supplier_part_base.html | 6 +- .../company/supplier_part_detail.html | 2 +- InvenTree/company/urls.py | 3 +- .../part/templates/part/manufacturer.html | 9 ++ InvenTree/users/models.py | 1 + 14 files changed, 187 insertions(+), 115 deletions(-) delete mode 100644 InvenTree/company/migrations/0033_auto_20210329_1700.py rename InvenTree/company/templates/company/{detail_part.html => detail_manufacturer_part.html} (67%) create mode 100644 InvenTree/company/templates/company/detail_supplier_part.html diff --git a/InvenTree/company/forms.py b/InvenTree/company/forms.py index b9e8b607cf..b7d4eb0360 100644 --- a/InvenTree/company/forms.py +++ b/InvenTree/company/forms.py @@ -128,6 +128,8 @@ class EditSupplierPartForm(HelperForm): 'part', 'supplier', 'SKU', + 'manufacturer', + 'MPN', 'description', 'link', 'note', diff --git a/InvenTree/company/migrations/0032_manufacturerpart.py b/InvenTree/company/migrations/0032_manufacturerpart.py index 5547aec36d..0e8ea6d7d4 100644 --- a/InvenTree/company/migrations/0032_manufacturerpart.py +++ b/InvenTree/company/migrations/0032_manufacturerpart.py @@ -1,4 +1,4 @@ -# Generated by Django 3.0.7 on 2021-03-24 14:18 +# Generated by Django 3.0.7 on 2021-03-29 18:53 import InvenTree.fields from django.db import migrations, models @@ -9,10 +9,24 @@ class Migration(migrations.Migration): dependencies = [ ('part', '0063_bomitem_inherited'), + ('contenttypes', '0002_remove_content_type_name'), ('company', '0031_auto_20210103_2215'), ] operations = [ + migrations.CreateModel( + name='SourceItem', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('part_id', models.PositiveIntegerField()), + ('part_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), + ], + ), + migrations.AddField( + model_name='supplierpart', + name='source_item', + field=models.ForeignKey(blank=True, help_text='Select part', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='supplier_parts', to='company.SourceItem', verbose_name='Part'), + ), migrations.CreateModel( name='ManufacturerPart', fields=[ diff --git a/InvenTree/company/migrations/0033_auto_20210329_1700.py b/InvenTree/company/migrations/0033_auto_20210329_1700.py deleted file mode 100644 index 341ac95999..0000000000 --- a/InvenTree/company/migrations/0033_auto_20210329_1700.py +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by Django 3.0.7 on 2021-03-29 17:00 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - ('company', '0032_manufacturerpart'), - ] - - operations = [ - migrations.CreateModel( - name='SourceItem', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('part_id', models.PositiveIntegerField()), - ('part_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), - ], - ), - migrations.AddField( - model_name='manufacturerpart', - name='source_item', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='manufacturer_parts', to='company.SourceItem', verbose_name='Sourcing Item'), - ), - migrations.AddField( - model_name='supplierpart', - name='source_item', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='supplier_parts', to='company.SourceItem', verbose_name='Sourcing Item'), - ), - ] diff --git a/InvenTree/company/models.py b/InvenTree/company/models.py index bd628c64d4..447b55b6b2 100644 --- a/InvenTree/company/models.py +++ b/InvenTree/company/models.py @@ -302,7 +302,6 @@ class ManufacturerPart(models.Model): Attributes: part: Link to the master Part - source_item: The sourcing item linked to this ManufacturerPart instance manufacturer: Company that manufactures the ManufacturerPart MPN: Manufacture part number link: Link to external website for this manufacturer part @@ -311,7 +310,7 @@ class ManufacturerPart(models.Model): class Meta: unique_together = ('part', 'manufacturer', 'MPN') - + part = models.ForeignKey('part.Part', on_delete=models.CASCADE, related_name='manufacturer_parts', verbose_name=_('Base Part'), @@ -321,12 +320,6 @@ class ManufacturerPart(models.Model): help_text=_('Select part'), ) - source_item = models.ForeignKey(SourceItem, on_delete=models.CASCADE, - blank=True, null=True, - related_name='manufacturer_parts', - verbose_name=_('Sourcing Item'), - ) - manufacturer = models.ForeignKey( Company, on_delete=models.CASCADE, @@ -364,7 +357,7 @@ class SupplierPart(models.Model): A Part may be available from multiple suppliers Attributes: - part: Link to the master Part + part: Link to the master Part (Obsolete) source_item: The sourcing item linked to this SupplierPart instance supplier: Company that supplies this SupplierPart object SKU: Stock keeping unit (supplier part number) @@ -398,7 +391,8 @@ class SupplierPart(models.Model): source_item = models.ForeignKey(SourceItem, on_delete=models.CASCADE, blank=True, null=True, related_name='supplier_parts', - verbose_name=_('Sourcing Item'), + verbose_name=_('Part'), + help_text=_('Select part'), ) supplier = models.ForeignKey(Company, on_delete=models.CASCADE, diff --git a/InvenTree/company/templates/company/detail_part.html b/InvenTree/company/templates/company/detail_manufacturer_part.html similarity index 67% rename from InvenTree/company/templates/company/detail_part.html rename to InvenTree/company/templates/company/detail_manufacturer_part.html index 9829213103..8499512b4c 100644 --- a/InvenTree/company/templates/company/detail_part.html +++ b/InvenTree/company/templates/company/detail_manufacturer_part.html @@ -4,31 +4,26 @@ {% load inventree_extras %} {% block menubar %} -{% include 'company/navbar.html' with tab='parts' %} +{% include 'company/navbar.html' with tab='manufacturer_parts' %} {% endblock %} {% block heading %} -{% trans "Supplier Parts" %} +{% trans "Manufacturer Parts" %} {% endblock %} {% block details %} {% setting_object 'PART_ENABLE_MANUFACTURER_PARTS' as manufacturer_parts %} +{% if manufacturer_parts.value == "True" %} {% if roles.purchase_order.change %}
      {% if roles.purchase_order.add %} - {% if manufacturer_parts.value == "True" and company.is_manufacturer %} - {% else %} - - {% endif %} {% endif %}
      {% endif %} -
      +{% else %} +
      + {% trans "Manufactured parts are disabled. Admin users can enable them in the global settings." %} +
      +{% endif %} + {% endblock %} {% block js_ready %} {{ block.super }} @@ -86,32 +86,6 @@ }); }); - $("#supplier-part-create").click(function () { - launchModalForm( - "{% url 'supplier-part-create' %}", - { - data: { - supplier: {{ company.id }}, - }, - reload: true, - secondary: [ - { - field: 'part', - label: '{% trans "New Part" %}', - title: '{% trans "Create new Part" %}', - url: "{% url 'part-create' %}" - }, - { - field: 'supplier', - label: "{% trans 'New Supplier' %}", - title: "{% trans 'Create new Supplier' %}", - url: "{% url 'supplier-create' %}", - }, - ] - }); - }); - - {% if manufacturer_parts.value == "True" and company.is_manufacturer %} loadManufacturerPartTable( "#part-table", "{% url 'api-manufacturer-part-list' %}", @@ -123,20 +97,6 @@ }, } ); - {% else %} - loadSupplierPartTable( - "#part-table", - "{% url 'api-supplier-part-list' %}", - { - params: { - part_detail: true, - supplier_detail: true, - manufacturer_detail: true, - company: {{ company.id }}, - }, - } - ); - {% endif %} $("#multi-part-delete").click(function() { var selections = $("#part-table").bootstrapTable("getSelections"); @@ -147,12 +107,7 @@ parts.push(item.pk); }); - {% if company.is_manufacturer %} var url = "{% url 'manufacturer-part-delete' %}" - {% endif %} - {% if company.is_supplier %} - var url = "{% url 'supplier-part-delete' %}" - {% endif %} launchModalForm(url, { data: { diff --git a/InvenTree/company/templates/company/detail_supplier_part.html b/InvenTree/company/templates/company/detail_supplier_part.html new file mode 100644 index 0000000000..0273d0a652 --- /dev/null +++ b/InvenTree/company/templates/company/detail_supplier_part.html @@ -0,0 +1,128 @@ +{% extends "company/company_base.html" %} +{% load static %} +{% load i18n %} +{% load inventree_extras %} + +{% block menubar %} +{% include 'company/navbar.html' with tab='supplier_parts' %} +{% endblock %} + +{% block heading %} +{% trans "Supplier Parts" %} +{% endblock %} + + +{% block details %} +{% if roles.purchase_order.change %} +
      +{% endif %} + + +
      + +{% endblock %} +{% block js_ready %} +{{ block.super }} + + $("#supplier-part-create").click(function () { + launchModalForm( + "{% url 'supplier-part-create' %}", + { + data: { + supplier: {{ company.id }}, + }, + reload: true, + secondary: [ + { + field: 'part', + label: '{% trans "New Part" %}', + title: '{% trans "Create new Part" %}', + url: "{% url 'part-create' %}" + }, + { + field: 'supplier', + label: "{% trans 'New Supplier' %}", + title: "{% trans 'Create new Supplier' %}", + url: "{% url 'supplier-create' %}", + }, + ] + }); + }); + + loadSupplierPartTable( + "#part-table", + "{% url 'api-supplier-part-list' %}", + { + params: { + part_detail: true, + supplier_detail: true, + manufacturer_detail: true, + company: {{ company.id }}, + }, + } + ); + + $("#multi-part-delete").click(function() { + var selections = $("#part-table").bootstrapTable("getSelections"); + + var parts = []; + + selections.forEach(function(item) { + parts.push(item.pk); + }); + + var url = "{% url 'supplier-part-delete' %}" + + launchModalForm(url, { + data: { + parts: parts, + }, + reload: true, + }); + }); + + $("#multi-part-order").click(function() { + var selections = $("#part-table").bootstrapTable("getSelections"); + + var parts = []; + + selections.forEach(function(item) { + parts.push(item.part); + }); + + launchModalForm("/order/purchase-order/order-parts/", { + data: { + parts: parts, + }, + }); + }); + +{% endblock %} \ No newline at end of file diff --git a/InvenTree/company/templates/company/manufacturer_part_base.html b/InvenTree/company/templates/company/manufacturer_part_base.html index 5c6e6c6b1d..441f1f845b 100644 --- a/InvenTree/company/templates/company/manufacturer_part_base.html +++ b/InvenTree/company/templates/company/manufacturer_part_base.html @@ -83,7 +83,7 @@ src="{% static 'img/blank_image.png' %}" {% trans "Manufacturer" %} - {{ part.manufacturer.name }} + {{ part.manufacturer.name }} {% trans "MPN" %} @@ -125,7 +125,7 @@ $('#delete-part').click(function() { launchModalForm( "{% url 'manufacturer-part-delete' %}?part={{ part.id }}", { - redirect: "{% url 'company-detail-parts' part.manufacturer.id %}" + redirect: "{% url 'company-detail-manufacturer-parts' part.manufacturer.id %}" } ); }); diff --git a/InvenTree/company/templates/company/manufacturer_part_detail.html b/InvenTree/company/templates/company/manufacturer_part_detail.html index f351f955dc..fcb4abbfef 100644 --- a/InvenTree/company/templates/company/manufacturer_part_detail.html +++ b/InvenTree/company/templates/company/manufacturer_part_detail.html @@ -22,7 +22,7 @@ {% endif %} - {% trans "Manufacturer" %}{{ part.manufacturer.name }} + {% trans "Manufacturer" %}{{ part.manufacturer.name }} {% trans "MPN" %}{{ part.MPN }} {% if part.link %} {% trans "External Link" %}{{ part.link }} diff --git a/InvenTree/company/templates/company/navbar.html b/InvenTree/company/templates/company/navbar.html index ed6ff5799b..0e858d02bc 100644 --- a/InvenTree/company/templates/company/navbar.html +++ b/InvenTree/company/templates/company/navbar.html @@ -19,17 +19,18 @@
    • {% if manufacturer_parts.value == "True" and company.is_manufacturer %} -
    • - - - {% trans "Parts" %} +
    • + + + {% trans "Manufactured Parts" %}
    • - {% else %} -
    • - - - {% trans "Parts" %} + {% endif %} + {% if company.is_supplier or company.is_manufacturer %} +
    • + + + {% trans "Supplied Parts" %}
    • {% endif %} diff --git a/InvenTree/company/templates/company/supplier_part_base.html b/InvenTree/company/templates/company/supplier_part_base.html index 00de1a9fb3..f06c26e20e 100644 --- a/InvenTree/company/templates/company/supplier_part_base.html +++ b/InvenTree/company/templates/company/supplier_part_base.html @@ -81,7 +81,7 @@ src="{% static 'img/blank_image.png' %}" {% trans "Supplier" %} - {{ part.supplier.name }} + {{ part.supplier.name }} {% trans "SKU" %} @@ -91,7 +91,7 @@ src="{% static 'img/blank_image.png' %}" {% trans "Manufacturer" %} - {{ part.manufacturer.name }} + {{ part.manufacturer.name }} {% endif %} {% if part.MPN %} @@ -150,7 +150,7 @@ $('#delete-part').click(function() { launchModalForm( "{% url 'supplier-part-delete' %}?part={{ part.id }}", { - redirect: "{% url 'company-detail-parts' part.supplier.id %}" + redirect: "{% url 'company-detail-supplier-parts' part.supplier.id %}" } ); }); diff --git a/InvenTree/company/templates/company/supplier_part_detail.html b/InvenTree/company/templates/company/supplier_part_detail.html index 7a8ac0dcd3..2938909757 100644 --- a/InvenTree/company/templates/company/supplier_part_detail.html +++ b/InvenTree/company/templates/company/supplier_part_detail.html @@ -22,7 +22,7 @@ {% endif %} - {% trans "Supplier" %}{{ part.supplier.name }} + {% trans "Supplier" %}{{ part.supplier.name }} {% trans "SKU" %}{{ part.SKU }} {% if part.link %} {% trans "External Link" %}{{ part.link }} diff --git a/InvenTree/company/urls.py b/InvenTree/company/urls.py index bb0fd1606a..21d2e37d5a 100644 --- a/InvenTree/company/urls.py +++ b/InvenTree/company/urls.py @@ -13,7 +13,8 @@ company_detail_urls = [ # url(r'orders/?', views.CompanyDetail.as_view(template_name='company/orders.html'), name='company-detail-orders'), - url(r'^parts/', views.CompanyDetail.as_view(template_name='company/detail_part.html'), name='company-detail-parts'), + url(r'^supplier-parts/', views.CompanyDetail.as_view(template_name='company/detail_supplier_part.html'), name='company-detail-supplier-parts'), + url(r'^manufacturer-parts/', views.CompanyDetail.as_view(template_name='company/detail_manufacturer_part.html'), name='company-detail-manufacturer-parts'), url(r'^stock/', views.CompanyDetail.as_view(template_name='company/detail_stock.html'), name='company-detail-stock'), url(r'^purchase-orders/', views.CompanyDetail.as_view(template_name='company/purchase_orders.html'), name='company-detail-purchase-orders'), url(r'^assigned-stock/', views.CompanyDetail.as_view(template_name='company/assigned_stock.html'), name='company-detail-assigned-stock'), diff --git a/InvenTree/part/templates/part/manufacturer.html b/InvenTree/part/templates/part/manufacturer.html index 09793ffc7f..3e17ed9ee4 100644 --- a/InvenTree/part/templates/part/manufacturer.html +++ b/InvenTree/part/templates/part/manufacturer.html @@ -1,6 +1,7 @@ {% extends "part/part_base.html" %} {% load static %} {% load i18n %} +{% load inventree_extras %} {% block menubar %} {% include 'part/navbar.html' with tab='manufacturers' %} @@ -11,6 +12,9 @@ {% endblock %} {% block details %} +{% setting_object 'PART_ENABLE_MANUFACTURER_PARTS' as manufacturer_parts %} + +{% if manufacturer_parts.value == "True" %}
      + +
      +
      + + +
      + +{% endblock %} + +{% block js_ready %} +{{ block.super }} + +$('#supplier-create').click(function () { + launchModalForm( + "{% url 'supplier-part-create' %}", + { + reload: true, + data: { + part: {{ part.id }} + }, + secondary: [ + { + field: 'supplier', + label: '{% trans "New Supplier" %}', + title: '{% trans "Create new supplier" %}', + url: "{% url 'supplier-create' %}" + }, + { + field: 'manufacturer', + label: '{% trans "New Manufacturer" %}', + title: '{% trans "Create new manufacturer" %}', + url: "{% url 'manufacturer-create' %}", + } + ] + }); +}); + +$("#supplier-part-delete").click(function() { + + var selections = $("#supplier-table").bootstrapTable("getSelections"); + + var parts = []; + + selections.forEach(function(item) { + parts.push(item.pk); + }); + + launchModalForm("{% url 'supplier-part-delete' %}", { + data: { + parts: parts, + }, + reload: true, + }); +}); + +loadSupplierPartTable( + "#supplier-table", + "{% url 'api-supplier-part-list' %}", + { + params: { + part: {{ part.part.id }}, + part_detail: true, + supplier_detail: true, + manufacturer_detail: true, + }, + } +); + +linkButtonsToSelection($("#supplier-table"), ['#supplier-part-options']) + +{% endblock %} \ No newline at end of file diff --git a/InvenTree/company/urls.py b/InvenTree/company/urls.py index 21d2e37d5a..939515eabc 100644 --- a/InvenTree/company/urls.py +++ b/InvenTree/company/urls.py @@ -55,8 +55,10 @@ price_break_urls = [ manufacturer_part_detail_urls = [ url(r'^edit/?', views.ManufacturerPartEdit.as_view(), name='manufacturer-part-edit'), + + url(r'^suppliers/', views.ManufacturerPartDetail.as_view(template_name='company/manufacturer_part_suppliers.html'), name='manufacturer-part-suppliers'), - url('^.*$', views.ManufacturerPartDetail.as_view(template_name='company/manufacturer_part_detail.html'), name='manufacturer-part-detail'), + url('^.*$', views.ManufacturerPartDetail.as_view(template_name='company/manufacturer_part_suppliers.html'), name='manufacturer-part-detail'), ] manufacturer_part_urls = [ From 0b1f22c7fde20c38bd17a790089fba480157ba9c Mon Sep 17 00:00:00 2001 From: eeintech Date: Tue, 30 Mar 2021 18:08:33 -0400 Subject: [PATCH 015/116] Almost there, needs some interface testing and tweaking --- InvenTree/company/api.py | 6 +++ InvenTree/company/forms.py | 29 +++++++++++++- InvenTree/company/models.py | 29 +++++++++++--- .../company/manufacturer_part_suppliers.html | 9 +---- InvenTree/company/views.py | 40 +++++++++++++++++++ InvenTree/stock/api.py | 4 +- InvenTree/stock/serializers.py | 2 +- 7 files changed, 103 insertions(+), 16 deletions(-) diff --git a/InvenTree/company/api.py b/InvenTree/company/api.py index eb0d7fc4e6..be44c7cf46 100644 --- a/InvenTree/company/api.py +++ b/InvenTree/company/api.py @@ -235,6 +235,12 @@ class SupplierPartList(generics.ListCreateAPIView): if part is not None: queryset = queryset.filter(part=part) + # Filter by manufacturer part? + manufacturer_part = params.get('manufacturer_part', None) + + if manufacturer_part is not None: + queryset = queryset.filter(manufacturer_part=manufacturer_part) + # Filter by 'active' status of the part? active = params.get('active', None) diff --git a/InvenTree/company/forms.py b/InvenTree/company/forms.py index ac10cc291a..bc3e7ec353 100644 --- a/InvenTree/company/forms.py +++ b/InvenTree/company/forms.py @@ -122,13 +122,27 @@ class EditSupplierPartForm(HelperForm): required=False, ) + manufacturer = django.forms.ChoiceField( + required=False, + help_text=_('Select manufacturer'), + choices=[], + ) + + MPN = django.forms.CharField( + required=False, + help_text=_('Manufacturer Part Number'), + max_length=100, + label=_('MPN'), + ) + class Meta: model = SupplierPart fields = [ 'part', 'supplier', 'SKU', - 'manufacturer_part', + 'manufacturer', + 'MPN', 'description', 'link', 'note', @@ -138,6 +152,19 @@ class EditSupplierPartForm(HelperForm): 'packaging', ] + def get_manufacturer_choices(self): + """ Returns tuples for all manufacturers """ + empty_choice = [('', '----------')] + + manufacturers = [(manufacturer.id, manufacturer.name) for manufacturer in Company.objects.all()] + + return empty_choice + manufacturers + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + self.fields['manufacturer'].choices = self.get_manufacturer_choices() + class EditPriceBreakForm(HelperForm): """ Form for creating / editing a supplier price break """ diff --git a/InvenTree/company/models.py b/InvenTree/company/models.py index b904912cb2..2c6a6d650c 100644 --- a/InvenTree/company/models.py +++ b/InvenTree/company/models.py @@ -217,7 +217,7 @@ class Company(models.Model): def stock_items(self): """ Return a list of all stock items supplied or manufactured by this company """ stock = apps.get_model('stock', 'StockItem') - return stock.objects.filter(Q(supplier_part__supplier=self.id) | Q(supplier_part__manufacturer=self.id)).all() + return stock.objects.filter(Q(supplier_part__supplier=self.id) | Q(supplier_part__manufacturer_part__manufacturer=self.id)).all() @property def stock_count(self): @@ -335,6 +335,25 @@ class ManufacturerPart(models.Model): help_text=_('Manufacturer part description') ) + @classmethod + def create(cls, part, manufacturer, mpn, link, description): + """ Check if ManufacturerPart instance does not already exist + then create it + """ + + manufacturer_part = None + + try: + manufacturer_part = ManufacturerPart.objects.get(part=part, manufacturer=manufacturer, MPN=mpn) + except ManufacturerPart.DoesNotExist: + pass + + if not manufacturer_part: + manufacturer_part = ManufacturerPart(part=part, manufacturer=manufacturer, MPN=mpn, description=description, link=link) + manufacturer_part.save() + + return manufacturer_part + def __str__(self): s = '' @@ -440,10 +459,10 @@ class SupplierPart(models.Model): items = [] - if self.manufacturer: - items.append(self.manufacturer.name) - if self.MPN: - items.append(self.MPN) + if self.manufacturer_part.manufacturer: + items.append(self.manufacturer_part.manufacturer.name) + if self.manufacturer_part.MPN: + items.append(self.manufacturer_part.MPN) return ' | '.join(items) diff --git a/InvenTree/company/templates/company/manufacturer_part_suppliers.html b/InvenTree/company/templates/company/manufacturer_part_suppliers.html index 60f01f7bf2..0d39516a7b 100644 --- a/InvenTree/company/templates/company/manufacturer_part_suppliers.html +++ b/InvenTree/company/templates/company/manufacturer_part_suppliers.html @@ -39,7 +39,7 @@ $('#supplier-create').click(function () { { reload: true, data: { - part: {{ part.id }} + manufacturer_part: {{ part.id }} }, secondary: [ { @@ -48,12 +48,6 @@ $('#supplier-create').click(function () { title: '{% trans "Create new supplier" %}', url: "{% url 'supplier-create' %}" }, - { - field: 'manufacturer', - label: '{% trans "New Manufacturer" %}', - title: '{% trans "Create new manufacturer" %}', - url: "{% url 'manufacturer-create' %}", - } ] }); }); @@ -82,6 +76,7 @@ loadSupplierPartTable( { params: { part: {{ part.part.id }}, + manufacturer_part: {{ part.id }}, part_detail: true, supplier_detail: true, manufacturer_detail: true, diff --git a/InvenTree/company/views.py b/InvenTree/company/views.py index dbcc5948da..81bef9c7d0 100644 --- a/InvenTree/company/views.py +++ b/InvenTree/company/views.py @@ -585,9 +585,30 @@ class SupplierPartCreate(AjaxCreateView): If single_pricing is defined, add a price break for quantity=1 """ + # Process manufacturer data + part = form.cleaned_data.get('part', None) + print(f'{part=}') + manufacturer_id = form.cleaned_data.get('manufacturer', None) + + manufacturer_part = None + if manufacturer_id: + manufacturer = Company.objects.get(pk=manufacturer_id) + MPN = form.cleaned_data.get('MPN', None) + description = form.cleaned_data.get('description', None) + link = form.cleaned_data.get('link', None) + + manufacturer_part = ManufacturerPart.create(part=part, manufacturer=manufacturer, mpn=MPN, description=description, link=link) + # Save the supplier part object supplier_part = super().save(form) + print(f'{manufacturer_part=}') + if manufacturer_part: + # Link ManufacturerPart + supplier_part.manufacturer_part = manufacturer_part + supplier_part.save() + print(f'{supplier_part=}') + single_pricing = form.cleaned_data.get('single_pricing', None) if single_pricing: @@ -606,6 +627,12 @@ class SupplierPartCreate(AjaxCreateView): # Hide the part field form.fields['part'].widget = HiddenInput() + if form.initial.get('manufacturer', None): + # Hide the manufacturer field + form.fields['manufacturer'].widget = HiddenInput() + # Hide the MPN field + form.fields['MPN'].widget = HiddenInput() + return form def get_initial(self): @@ -619,6 +646,7 @@ class SupplierPartCreate(AjaxCreateView): manufacturer_id = self.get_param('manufacturer') supplier_id = self.get_param('supplier') part_id = self.get_param('part') + manufacturer_part_id = self.get_param('manufacturer_part') supplier = None @@ -634,6 +662,18 @@ class SupplierPartCreate(AjaxCreateView): initials['manufacturer'] = Company.objects.get(pk=manufacturer_id) except (ValueError, Company.DoesNotExist): pass + + if manufacturer_part_id: + try: + # Get ManufacturerPart instance information + manufacturer_part_obj = ManufacturerPart.objects.get(pk=manufacturer_part_id) + print(manufacturer_part_obj.part.id) + initials['part'] = Part.objects.get(pk=manufacturer_part_obj.part.id) + print(initials['part']) + initials['manufacturer'] = manufacturer_part_obj.manufacturer.id + initials['MPN'] = manufacturer_part_obj.MPN + except (ValueError, ManufacturerPart.DoesNotExist, Part.DoesNotExist, Company.DoesNotExist): + pass if part_id: try: diff --git a/InvenTree/stock/api.py b/InvenTree/stock/api.py index a7a7955c22..081a3b9255 100644 --- a/InvenTree/stock/api.py +++ b/InvenTree/stock/api.py @@ -773,7 +773,7 @@ class StockList(generics.ListCreateAPIView): company = params.get('company', None) if company is not None: - queryset = queryset.filter(Q(supplier_part__supplier=company) | Q(supplier_part__manufacturer=company)) + queryset = queryset.filter(Q(supplier_part__supplier=company) | Q(supplier_part__manufacturer_part__manufacturer=company)) # Filter by supplier supplier = params.get('supplier', None) @@ -785,7 +785,7 @@ class StockList(generics.ListCreateAPIView): manufacturer = params.get('manufacturer', None) if manufacturer is not None: - queryset = queryset.filter(supplier_part__manufacturer=manufacturer) + queryset = queryset.filter(supplier_part__manufacturer_part__manufacturer=manufacturer) """ Filter by the 'last updated' date of the stock item(s): diff --git a/InvenTree/stock/serializers.py b/InvenTree/stock/serializers.py index 9cb2538ba7..5b00c1dd17 100644 --- a/InvenTree/stock/serializers.py +++ b/InvenTree/stock/serializers.py @@ -84,7 +84,7 @@ class StockItemSerializer(InvenTreeModelSerializer): 'sales_order', 'supplier_part', 'supplier_part__supplier', - 'supplier_part__manufacturer', + 'supplier_part__manufacturer_part__manufacturer', 'allocations', 'sales_order_allocations', 'location', From 9e56bf90c5923c765c4afe80750bd6fff49e1b60 Mon Sep 17 00:00:00 2001 From: eeintech Date: Wed, 31 Mar 2021 13:53:55 -0400 Subject: [PATCH 016/116] More web testing, looks ready --- InvenTree/company/forms.py | 2 +- .../migrations/0032_manufacturerpart.py | 4 +- InvenTree/company/models.py | 2 +- InvenTree/company/views.py | 38 ++++++++++++++++--- 4 files changed, 37 insertions(+), 9 deletions(-) diff --git a/InvenTree/company/forms.py b/InvenTree/company/forms.py index bc3e7ec353..6317602b1d 100644 --- a/InvenTree/company/forms.py +++ b/InvenTree/company/forms.py @@ -156,7 +156,7 @@ class EditSupplierPartForm(HelperForm): """ Returns tuples for all manufacturers """ empty_choice = [('', '----------')] - manufacturers = [(manufacturer.id, manufacturer.name) for manufacturer in Company.objects.all()] + manufacturers = [(manufacturer.id, manufacturer.name) for manufacturer in Company.objects.filter(is_manufacturer=True)] return empty_choice + manufacturers diff --git a/InvenTree/company/migrations/0032_manufacturerpart.py b/InvenTree/company/migrations/0032_manufacturerpart.py index e73bcf9b05..646a46edd6 100644 --- a/InvenTree/company/migrations/0032_manufacturerpart.py +++ b/InvenTree/company/migrations/0032_manufacturerpart.py @@ -70,7 +70,7 @@ class Migration(migrations.Migration): ('MPN', models.CharField(help_text='Manufacturer Part Number', max_length=100, null=True, verbose_name='MPN')), ('link', InvenTree.fields.InvenTreeURLField(blank=True, help_text='URL for external manufacturer part link', null=True, verbose_name='Link')), ('description', models.CharField(blank=True, help_text='Manufacturer part description', max_length=250, null=True, verbose_name='Description')), - ('manufacturer', models.ForeignKey(help_text='Select manufacturer', limit_choices_to={'is_manufacturer': True}, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='manufacturer_parts', to='company.Company', verbose_name='Manufacturer')), + ('manufacturer', models.ForeignKey(help_text='Select manufacturer', limit_choices_to={'is_manufacturer': True}, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='manufactured_parts', to='company.Company', verbose_name='Manufacturer')), ('part', models.ForeignKey(help_text='Select part', limit_choices_to={'purchaseable': True}, on_delete=django.db.models.deletion.CASCADE, related_name='manufacturer_parts', to='part.Part', verbose_name='Base Part')), ], options={ @@ -80,7 +80,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='supplierpart', name='manufacturer_part', - field=models.ForeignKey(blank=True, help_text='Select manufacturer part', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='manufacturer_parts', to='company.ManufacturerPart', verbose_name='Manufacturer Part'), + field=models.ForeignKey(blank=True, help_text='Select manufacturer part', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='supplier_parts', to='company.ManufacturerPart', verbose_name='Manufacturer Part'), ), # Make new ManufacturerPart with SupplierPart "manufacturer" and "MPN" # fields, then link it to the new SupplierPart "manufacturer_part" field diff --git a/InvenTree/company/models.py b/InvenTree/company/models.py index 2c6a6d650c..10217d4d0c 100644 --- a/InvenTree/company/models.py +++ b/InvenTree/company/models.py @@ -308,7 +308,7 @@ class ManufacturerPart(models.Model): Company, on_delete=models.CASCADE, null=True, - related_name='manufacturer_parts', + related_name='manufactured_parts', limit_choices_to={ 'is_manufacturer': True }, diff --git a/InvenTree/company/views.py b/InvenTree/company/views.py index 81bef9c7d0..80ebc7512c 100644 --- a/InvenTree/company/views.py +++ b/InvenTree/company/views.py @@ -527,6 +527,26 @@ class SupplierPartEdit(AjaxUpdateView): ajax_template_name = 'modal_form.html' ajax_form_title = _('Edit Supplier Part') + def save(self, supplier_part, form, **kwargs): + """ Save ManufacturerPart data """ + + # Save supplier part object + supplier_part = super().save(supplier_part, form) + + # Save manufacturer part object + manufacturer_id = form.cleaned_data.get('manufacturer', None) + try: + manufacturer = Company.objects.get(pk=manufacturer_id) + except Company.DoesNotExist: + pass + MPN = form.cleaned_data.get('MPN', None) + + manufacturer_part = supplier_part.manufacturer_part + manufacturer_part.manufacturer = manufacturer + manufacturer_part.MPN = MPN + + manufacturer_part.save() + def get_form(self): form = super().get_form() @@ -541,6 +561,19 @@ class SupplierPartEdit(AjaxUpdateView): return form + def get_initial(self): + """ Fetch data from ManufacturerPart """ + + initials = super(SupplierPartEdit, self).get_initial().copy() + + supplier_part = self.get_object() + + if supplier_part.manufacturer_part: + initials['manufacturer'] = supplier_part.manufacturer_part.manufacturer.id + initials['MPN'] = supplier_part.manufacturer_part.MPN + + return initials + class SupplierPartCreate(AjaxCreateView): """ Create view for making new SupplierPart """ @@ -587,7 +620,6 @@ class SupplierPartCreate(AjaxCreateView): # Process manufacturer data part = form.cleaned_data.get('part', None) - print(f'{part=}') manufacturer_id = form.cleaned_data.get('manufacturer', None) manufacturer_part = None @@ -602,12 +634,10 @@ class SupplierPartCreate(AjaxCreateView): # Save the supplier part object supplier_part = super().save(form) - print(f'{manufacturer_part=}') if manufacturer_part: # Link ManufacturerPart supplier_part.manufacturer_part = manufacturer_part supplier_part.save() - print(f'{supplier_part=}') single_pricing = form.cleaned_data.get('single_pricing', None) @@ -667,9 +697,7 @@ class SupplierPartCreate(AjaxCreateView): try: # Get ManufacturerPart instance information manufacturer_part_obj = ManufacturerPart.objects.get(pk=manufacturer_part_id) - print(manufacturer_part_obj.part.id) initials['part'] = Part.objects.get(pk=manufacturer_part_obj.part.id) - print(initials['part']) initials['manufacturer'] = manufacturer_part_obj.manufacturer.id initials['MPN'] = manufacturer_part_obj.MPN except (ValueError, ManufacturerPart.DoesNotExist, Part.DoesNotExist, Company.DoesNotExist): From 8c8b25a0d256c56dad6402bf5896331874abfd6d Mon Sep 17 00:00:00 2001 From: eeintech Date: Wed, 31 Mar 2021 18:04:28 -0400 Subject: [PATCH 017/116] Validating API for SupplierPart, not able to spin-off ManufacturerPart from serialized data --- InvenTree/company/models.py | 63 ++++++++++++++++++++++++++++++-- InvenTree/company/serializers.py | 36 +++++++++++++++++- InvenTree/company/views.py | 46 +++++++---------------- 3 files changed, 107 insertions(+), 38 deletions(-) diff --git a/InvenTree/company/models.py b/InvenTree/company/models.py index 10217d4d0c..1e2fe7d4b2 100644 --- a/InvenTree/company/models.py +++ b/InvenTree/company/models.py @@ -11,7 +11,9 @@ import math from django.utils.translation import gettext_lazy as _ from django.core.validators import MinValueValidator +from django.core.exceptions import ValidationError from django.db import models +from django.db.utils import IntegrityError from django.db.models import Sum, Q, UniqueConstraint from django.apps import apps @@ -389,6 +391,58 @@ class SupplierPart(models.Model): def get_absolute_url(self): return reverse('supplier-part-detail', kwargs={'pk': self.id}) + def save(self, *args, **kwargs): + """ Overriding save method to process the linked ManufacturerPart + """ + + if 'manufacturer' in kwargs: + manufacturer_id = kwargs.pop('manufacturer') + + try: + manufacturer = Company.objects.get(pk=int(manufacturer_id)) + except (ValueError, Company.DoesNotExist): + manufacturer = None + else: + manufacturer = None + if 'MPN' in kwargs: + MPN = kwargs.pop('MPN') + else: + MPN = None + + if manufacturer or MPN: + if not self.manufacturer_part: + # Create ManufacturerPart + manufacturer_part = ManufacturerPart.create(part=self.part, + manufacturer=manufacturer, + mpn=MPN, + description=self.description, + link=self.link) + self.manufacturer_part = manufacturer_part + else: + # Update ManufacturerPart (if ID exists) + try: + manufacturer_part_id = self.manufacturer_part.id + except AttributeError: + manufacturer_part_id = None + + if manufacturer_part_id: + try: + (manufacturer_part, created) = ManufacturerPart.objects.update_or_create(part=self.part, + manufacturer=manufacturer, + MPN=MPN) + except IntegrityError: + manufacturer_part = None + raise ValidationError(f'ManufacturerPart linked to {self.part} from manufacturer {manufacturer.name}' + f'with part number {MPN} already exists!') + + if manufacturer_part: + self.manufacturer_part = manufacturer_part + + self.clean() + self.validate_unique() + + super().save(*args, **kwargs) + class Meta: unique_together = ('part', 'supplier', 'SKU') @@ -459,10 +513,11 @@ class SupplierPart(models.Model): items = [] - if self.manufacturer_part.manufacturer: - items.append(self.manufacturer_part.manufacturer.name) - if self.manufacturer_part.MPN: - items.append(self.manufacturer_part.MPN) + if self.manufacturer_part: + if self.manufacturer_part.manufacturer: + items.append(self.manufacturer_part.manufacturer.name) + if self.manufacturer_part.MPN: + items.append(self.manufacturer_part.MPN) return ' | '.join(items) diff --git a/InvenTree/company/serializers.py b/InvenTree/company/serializers.py index 164f36a33d..513a07a71b 100644 --- a/InvenTree/company/serializers.py +++ b/InvenTree/company/serializers.py @@ -158,7 +158,9 @@ class SupplierPartSerializer(InvenTreeModelSerializer): supplier = serializers.PrimaryKeyRelatedField(queryset=Company.objects.filter(is_supplier=True)) - manufacturer = serializers.PrimaryKeyRelatedField(source='manufacturer_part.manufacturer', queryset=Company.objects.filter(is_manufacturer=True)) + # manufacturer_part = ManufacturerPartSerializer(many=False, read_only=True) + + manufacturer = serializers.PrimaryKeyRelatedField(source='manufacturer_part.manufacturer', read_only=True) # queryset=Company.objects.filter(is_manufacturer=True)) MPN = serializers.StringRelatedField(source='manufacturer_part.MPN', read_only=True) @@ -172,6 +174,7 @@ class SupplierPartSerializer(InvenTreeModelSerializer): 'supplier', 'supplier_detail', 'SKU', + # 'manufacturer_part', 'manufacturer', 'MPN', 'manufacturer_detail', @@ -179,6 +182,37 @@ class SupplierPartSerializer(InvenTreeModelSerializer): 'link', ] + def create(self, validated_data): + """ Extract manufacturer data and process ManufacturerPart """ + + print(validated_data) + + # Create SupplierPart + supplier_part = super().create(validated_data) + + # Get ManufacturerPart data + part = validated_data.get('part', None) + manufacturer = validated_data.get('manufacturer', None) + MPN = validated_data.get('MPN', None) + description = validated_data.get('description', None) + link = validated_data.get('link', None) + + print(f'{manufacturer} | {MPN}') + + if manufacturer or MPN: + # Create ManufacturerPart + manufacturer_part = ManufacturerPart.create(part=part, + manufacturer=manufacturer, + mpn=MPN, + description=description, + link=link) + print(manufacturer_part) + supplier_part.manufacturer_part = manufacturer_part + print(supplier_part.manufacturer_part) + supplier_part.save() + + return supplier_part + class SupplierPriceBreakSerializer(InvenTreeModelSerializer): """ Serializer for SupplierPriceBreak object """ diff --git a/InvenTree/company/views.py b/InvenTree/company/views.py index 80ebc7512c..08bb6c1305 100644 --- a/InvenTree/company/views.py +++ b/InvenTree/company/views.py @@ -528,24 +528,14 @@ class SupplierPartEdit(AjaxUpdateView): ajax_form_title = _('Edit Supplier Part') def save(self, supplier_part, form, **kwargs): - """ Save ManufacturerPart data """ + """ Process ManufacturerPart data """ - # Save supplier part object - supplier_part = super().save(supplier_part, form) - - # Save manufacturer part object - manufacturer_id = form.cleaned_data.get('manufacturer', None) - try: - manufacturer = Company.objects.get(pk=manufacturer_id) - except Company.DoesNotExist: - pass + manufacturer = form.cleaned_data.get('manufacturer', None) MPN = form.cleaned_data.get('MPN', None) - - manufacturer_part = supplier_part.manufacturer_part - manufacturer_part.manufacturer = manufacturer - manufacturer_part.MPN = MPN - - manufacturer_part.save() + kwargs = {'manufacturer': manufacturer, + 'MPN': MPN, + } + supplier_part.save(**kwargs) def get_form(self): form = super().get_form() @@ -618,26 +608,16 @@ class SupplierPartCreate(AjaxCreateView): If single_pricing is defined, add a price break for quantity=1 """ - # Process manufacturer data - part = form.cleaned_data.get('part', None) - manufacturer_id = form.cleaned_data.get('manufacturer', None) - - manufacturer_part = None - if manufacturer_id: - manufacturer = Company.objects.get(pk=manufacturer_id) - MPN = form.cleaned_data.get('MPN', None) - description = form.cleaned_data.get('description', None) - link = form.cleaned_data.get('link', None) - - manufacturer_part = ManufacturerPart.create(part=part, manufacturer=manufacturer, mpn=MPN, description=description, link=link) - # Save the supplier part object supplier_part = super().save(form) - if manufacturer_part: - # Link ManufacturerPart - supplier_part.manufacturer_part = manufacturer_part - supplier_part.save() + # Process manufacturer data + manufacturer = form.cleaned_data.get('manufacturer', None) + MPN = form.cleaned_data.get('MPN', None) + kwargs = {'manufacturer': manufacturer, + 'MPN': MPN, + } + supplier_part.save(**kwargs) single_pricing = form.cleaned_data.get('single_pricing', None) From a8b858c824c05c8bf271a516fda0911d855abebb Mon Sep 17 00:00:00 2001 From: eeintech Date: Thu, 1 Apr 2021 09:11:47 -0400 Subject: [PATCH 018/116] Fixed serializer --- InvenTree/company/models.py | 2 +- InvenTree/company/serializers.py | 33 ++++++++++++++++---------------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/InvenTree/company/models.py b/InvenTree/company/models.py index 1e2fe7d4b2..594d8a97ea 100644 --- a/InvenTree/company/models.py +++ b/InvenTree/company/models.py @@ -204,7 +204,7 @@ class Company(models.Model): @property def parts(self): """ Return SupplierPart objects which are supplied or manufactured by this company """ - return SupplierPart.objects.filter(Q(supplier=self.id) | Q(manufacturer=self.id)) + return SupplierPart.objects.filter(Q(supplier=self.id) | Q(manufacturer_part__manufacturer=self.id)) @property def part_count(self): diff --git a/InvenTree/company/serializers.py b/InvenTree/company/serializers.py index 513a07a71b..e3ecd625ee 100644 --- a/InvenTree/company/serializers.py +++ b/InvenTree/company/serializers.py @@ -158,11 +158,9 @@ class SupplierPartSerializer(InvenTreeModelSerializer): supplier = serializers.PrimaryKeyRelatedField(queryset=Company.objects.filter(is_supplier=True)) - # manufacturer_part = ManufacturerPartSerializer(many=False, read_only=True) + manufacturer = serializers.PrimaryKeyRelatedField(source='manufacturer_part.manufacturer', read_only=True) - manufacturer = serializers.PrimaryKeyRelatedField(source='manufacturer_part.manufacturer', read_only=True) # queryset=Company.objects.filter(is_manufacturer=True)) - - MPN = serializers.StringRelatedField(source='manufacturer_part.MPN', read_only=True) + MPN = serializers.StringRelatedField(source='manufacturer_part.MPN') class Meta: model = SupplierPart @@ -174,7 +172,6 @@ class SupplierPartSerializer(InvenTreeModelSerializer): 'supplier', 'supplier_detail', 'SKU', - # 'manufacturer_part', 'manufacturer', 'MPN', 'manufacturer_detail', @@ -185,30 +182,32 @@ class SupplierPartSerializer(InvenTreeModelSerializer): def create(self, validated_data): """ Extract manufacturer data and process ManufacturerPart """ - print(validated_data) - # Create SupplierPart supplier_part = super().create(validated_data) - # Get ManufacturerPart data - part = validated_data.get('part', None) - manufacturer = validated_data.get('manufacturer', None) - MPN = validated_data.get('MPN', None) - description = validated_data.get('description', None) - link = validated_data.get('link', None) + # Get ManufacturerPart raw data (unvalidated) + manufacturer_id = self.initial_data.get('manufacturer', None) + MPN = self.initial_data.get('MPN', None) - print(f'{manufacturer} | {MPN}') + if manufacturer_id or MPN: + # Get SupplierPart data + part = validated_data.get('part', None) + description = validated_data.get('description', None) + link = validated_data.get('link', None) + + # Get manufacturer + try: + manufacturer = Company.objects.get(pk=int(manufacturer_id)) + except Company.DoesNotExist: + manufacturer = None - if manufacturer or MPN: # Create ManufacturerPart manufacturer_part = ManufacturerPart.create(part=part, manufacturer=manufacturer, mpn=MPN, description=description, link=link) - print(manufacturer_part) supplier_part.manufacturer_part = manufacturer_part - print(supplier_part.manufacturer_part) supplier_part.save() return supplier_part From 94574b37ae65d5249215668094a3364d3467a138 Mon Sep 17 00:00:00 2001 From: eeintech Date: Thu, 1 Apr 2021 10:00:15 -0400 Subject: [PATCH 019/116] Added Manufacturer parts to search, fixed icons, added manufacturer view in supplier part detail page --- InvenTree/company/api.py | 6 +-- .../company/templates/company/detail.html | 4 +- .../company/manufacturer_part_navbar.html | 2 +- .../company/templates/company/navbar.html | 4 +- .../company/supplier_part_manufacturers.html | 43 +++++++++++++++++++ .../company/supplier_part_navbar.html | 11 +++++ InvenTree/company/urls.py | 1 + InvenTree/part/templates/part/navbar.html | 4 +- InvenTree/templates/InvenTree/search.html | 38 +++++++++++----- 9 files changed, 93 insertions(+), 20 deletions(-) create mode 100644 InvenTree/company/templates/company/supplier_part_manufacturers.html diff --git a/InvenTree/company/api.py b/InvenTree/company/api.py index be44c7cf46..239d6064d3 100644 --- a/InvenTree/company/api.py +++ b/InvenTree/company/api.py @@ -193,7 +193,7 @@ class SupplierPartList(generics.ListCreateAPIView): queryset = SupplierPart.objects.all().prefetch_related( 'part', 'supplier', - 'manufacturer_part', + 'manufacturer_part__manufacturer', ) def get_queryset(self): @@ -291,9 +291,9 @@ class SupplierPartList(generics.ListCreateAPIView): search_fields = [ 'SKU', 'supplier__name', - 'manufacturer__name', + 'manufacturer_part__manufacturer__name', 'description', - 'MPN', + 'manufacturer_part__MPN', 'part__name', 'part__description', ] diff --git a/InvenTree/company/templates/company/detail.html b/InvenTree/company/templates/company/detail.html index 735f34f6b3..b803fc5852 100644 --- a/InvenTree/company/templates/company/detail.html +++ b/InvenTree/company/templates/company/detail.html @@ -51,12 +51,12 @@ - + {% trans "Manufacturer" %} {% include "yesnolabel.html" with value=company.is_manufacturer %} - + {% trans "Supplier" %} {% include 'yesnolabel.html' with value=company.is_supplier %} diff --git a/InvenTree/company/templates/company/manufacturer_part_navbar.html b/InvenTree/company/templates/company/manufacturer_part_navbar.html index 07489d65ea..96b6bec699 100644 --- a/InvenTree/company/templates/company/manufacturer_part_navbar.html +++ b/InvenTree/company/templates/company/manufacturer_part_navbar.html @@ -10,7 +10,7 @@
    • - + {% trans "Suppliers" %}
    • diff --git a/InvenTree/company/templates/company/navbar.html b/InvenTree/company/templates/company/navbar.html index 0e858d02bc..3010eb47fe 100644 --- a/InvenTree/company/templates/company/navbar.html +++ b/InvenTree/company/templates/company/navbar.html @@ -21,7 +21,7 @@ {% if manufacturer_parts.value == "True" and company.is_manufacturer %}
    • - + {% trans "Manufactured Parts" %}
    • @@ -29,7 +29,7 @@ {% if company.is_supplier or company.is_manufacturer %}
    • - + {% trans "Supplied Parts" %}
    • diff --git a/InvenTree/company/templates/company/supplier_part_manufacturers.html b/InvenTree/company/templates/company/supplier_part_manufacturers.html new file mode 100644 index 0000000000..f2ce84b00b --- /dev/null +++ b/InvenTree/company/templates/company/supplier_part_manufacturers.html @@ -0,0 +1,43 @@ +{% extends "company/supplier_part_base.html" %} +{% load static %} +{% load i18n %} +{% load inventree_extras %} + +{% block menubar %} +{% include "company/supplier_part_navbar.html" with tab='manufacturers' %} +{% endblock %} + +{% block heading %} +{% trans "Manufacturer Parts" %} +{% endblock %} + +{% block details %} +{% setting_object 'PART_ENABLE_MANUFACTURER_PARTS' as manufacturer_parts %} + +{% if manufacturer_parts.value == "True" %} + +
      +{% else %} +
      + {% trans "Manufactured parts are disabled. Admin users can enable them in the global settings." %} +
      +{% endif %} + +{% endblock %} + +{% block js_ready %} +{{ block.super }} + + loadManufacturerPartTable( + "#manufacturer-table", + "{% url 'api-manufacturer-part-list' %}", + { + params: { + part: {{ part.id }}, + part_detail: true, + manufacturer_detail: true, + }, + } + ); + +{% endblock %} \ No newline at end of file diff --git a/InvenTree/company/templates/company/supplier_part_navbar.html b/InvenTree/company/templates/company/supplier_part_navbar.html index 4236e7b734..33b1a02f34 100644 --- a/InvenTree/company/templates/company/supplier_part_navbar.html +++ b/InvenTree/company/templates/company/supplier_part_navbar.html @@ -1,4 +1,5 @@ {% load i18n %} +{% load inventree_extras %}
        @@ -8,6 +9,16 @@ + {% setting_object 'PART_ENABLE_MANUFACTURER_PARTS' as manufacturer_parts %} + {% if manufacturer_parts.value == "True" %} +
      • + + + {% trans "Manufacturers" %} + +
      • + {% endif %} +
      • diff --git a/InvenTree/company/urls.py b/InvenTree/company/urls.py index 939515eabc..b87b0626ae 100644 --- a/InvenTree/company/urls.py +++ b/InvenTree/company/urls.py @@ -72,6 +72,7 @@ manufacturer_part_urls = [ supplier_part_detail_urls = [ url(r'^edit/?', views.SupplierPartEdit.as_view(), name='supplier-part-edit'), + url(r'^manufacturers/', views.SupplierPartDetail.as_view(template_name='company/supplier_part_manufacturers.html'), name='supplier-part-manufacturers'), 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'), diff --git a/InvenTree/part/templates/part/navbar.html b/InvenTree/part/templates/part/navbar.html index 47ac221517..3f13f52621 100644 --- a/InvenTree/part/templates/part/navbar.html +++ b/InvenTree/part/templates/part/navbar.html @@ -73,14 +73,14 @@ {% if manufacturer_parts.value == "True" %}
      • - + {% trans "Manufacturers" %}
      • {% endif %}
      • - + {% trans "Suppliers" %}
      • diff --git a/InvenTree/templates/InvenTree/search.html b/InvenTree/templates/InvenTree/search.html index 5eb755dcb2..81f02a9d64 100644 --- a/InvenTree/templates/InvenTree/search.html +++ b/InvenTree/templates/InvenTree/search.html @@ -2,6 +2,7 @@ {% load static %} {% load i18n %} +{% load inventree_extras %} {% block page_title %} InvenTree | {% trans "Search Results" %} @@ -145,6 +146,24 @@ InvenTree | {% trans "Search Results" %} ], }); + {% setting_object 'PART_ENABLE_MANUFACTURER_PARTS' as manufacturer_parts %} + {% if manufacturer_parts.value == "True" %} + addItem('manufacturer-part', '{% trans "Manufacturer Parts" %}', 'fa-toolbox'); + + loadManufacturerPartTable( + "#table-manufacturer-part", + "{% url 'api-manufacturer-part-list' %}", + { + params: { + search: "{{ query }}", + part_detail: true, + supplier_detail: true, + manufacturer_detail: true + }, + } + ); + {% endif %} + addItem('supplier-part', '{% trans "Supplier Parts" %}', 'fa-pallet'); loadSupplierPartTable( @@ -287,6 +306,15 @@ InvenTree | {% trans "Search Results" %} {% if roles.purchase_order.view or roles.sales_order.view %} addItemTitle('{% trans "Company" %}'); + addItem('manufacturer', '{% trans "Manufacturers" %}', 'fa-industry'); + + loadCompanyTable('#table-manufacturer', "{% url 'api-company-list' %}", { + params: { + search: "{{ query }}", + is_manufacturer: "true", + } + }); + {% if roles.purchase_order.view %} addItem('supplier', '{% trans "Suppliers" %}', 'fa-building'); @@ -305,16 +333,6 @@ InvenTree | {% trans "Search Results" %} } }); - addItem('manufacturer', '{% trans "Manufacturers" %}', 'fa-industry'); - - loadCompanyTable('#table-manufacturer', "{% url 'api-company-list' %}", { - params: { - search: "{{ query }}", - is_manufacturer: "true", - } - }); - - {% endif %} {% if roles.sales_order.view %} From bb69e38c1ab65539a4e635a910d4961c69e0720a Mon Sep 17 00:00:00 2001 From: eeintech Date: Thu, 1 Apr 2021 16:30:06 -0400 Subject: [PATCH 020/116] Simple and View test units --- InvenTree/company/fixtures/company.yaml | 14 ++++ .../company/fixtures/manufacturer_part.yaml | 22 +++++++ InvenTree/company/fixtures/supplier_part.yaml | 17 +++++ InvenTree/company/test_views.py | 64 +++++++++++++++++++ InvenTree/company/tests.py | 35 +++++++++- 5 files changed, 149 insertions(+), 3 deletions(-) create mode 100644 InvenTree/company/fixtures/manufacturer_part.yaml diff --git a/InvenTree/company/fixtures/company.yaml b/InvenTree/company/fixtures/company.yaml index 8301eb0f5e..c302b6efad 100644 --- a/InvenTree/company/fixtures/company.yaml +++ b/InvenTree/company/fixtures/company.yaml @@ -31,3 +31,17 @@ name: Another customer! description: Yet another company is_customer: True + +- model: company.company + pk: 6 + fields: + name: A manufacturer + description: A company that makes parts! + is_manufacturer: True + +- model: company.company + pk: 7 + fields: + name: Another manufacturer + description: They build things and sell it to us + is_manufacturer: True diff --git a/InvenTree/company/fixtures/manufacturer_part.yaml b/InvenTree/company/fixtures/manufacturer_part.yaml new file mode 100644 index 0000000000..7532955eac --- /dev/null +++ b/InvenTree/company/fixtures/manufacturer_part.yaml @@ -0,0 +1,22 @@ +# Manufacturer Parts + +- model: company.manufacturerpart + pk: 1 + fields: + part: 5 + manufacturer: 6 + MPN: 'MPN123' + +- model: company.manufacturerpart + pk: 2 + fields: + part: 3 + manufacturer: 7 + MPN: 'MPN456' + +- model: company.manufacturerpart + pk: 3 + fields: + part: 5 + manufacturer: 7 + MPN: 'MPN789' diff --git a/InvenTree/company/fixtures/supplier_part.yaml b/InvenTree/company/fixtures/supplier_part.yaml index 446339d58b..b4c4d7e58a 100644 --- a/InvenTree/company/fixtures/supplier_part.yaml +++ b/InvenTree/company/fixtures/supplier_part.yaml @@ -52,3 +52,20 @@ part: 2 supplier: 2 SKU: 'ZERGM312' + +# Supplier parts linked to Manufacturer parts +- model: company.supplierpart + pk: 10 + fields: + part: 3 + manufacturer_part: 2 + supplier: 2 + SKU: 'MPN456-APPEL' + +- model: company.supplierpart + pk: 11 + fields: + part: 3 + manufacturer_part: 2 + supplier: 3 + SKU: 'MPN456-ZERG' diff --git a/InvenTree/company/test_views.py b/InvenTree/company/test_views.py index 0163e65c29..1868175648 100644 --- a/InvenTree/company/test_views.py +++ b/InvenTree/company/test_views.py @@ -10,6 +10,7 @@ from django.urls import reverse from django.contrib.auth import get_user_model from django.contrib.auth.models import Group +from .models import ManufacturerPart from .models import SupplierPart @@ -20,6 +21,7 @@ class CompanyViewTestBase(TestCase): 'part', 'location', 'company', + 'manufacturer_part', 'supplier_part', ] @@ -200,3 +202,65 @@ class CompanyViewTest(CompanyViewTestBase): response = self.client.get(reverse('customer-create'), HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertContains(response, 'Create new Customer') + + +class ManufacturerPartViewTests(CompanyViewTestBase): + """ + Tests for the ManufacturerPart views. + """ + + def test_manufacturer_part_create(self): + """ + Test the ManufacturerPartCreate view. + """ + + url = reverse('manufacturer-part-create') + + # First check that we can GET the form + response = self.client.get(url, HTTP_X_REQUESTED_WITH='XMLHttpRequest') + self.assertEqual(response.status_code, 200) + + # How many supplier parts are already in the database? + n = ManufacturerPart.objects.all().count() + + data = { + 'part': 1, + 'manufacturer': 6, + } + + # MPN is required! (form should fail) + (response, errors) = self.post(url, data, valid=False) + + self.assertIsNotNone(errors.get('MPN', None)) + + data['MPN'] = 'TEST-ME-123' + + (response, errors) = self.post(url, data, valid=True) + + # Check that the ManufacturerPart was created! + self.assertEqual(n + 1, ManufacturerPart.objects.all().count()) + + def test_manufacturer_part_delete(self): + """ + Test the ManufacturerPartDelete view + """ + + url = reverse('manufacturer-part-delete') + + # Get form using 'part' argument + response = self.client.get(url, {'part': '5'}, HTTP_X_REQUESTED_WITH='XMLHttpRequest') + self.assertEqual(response.status_code, 200) + + # POST to delete manufacturer part + n = ManufacturerPart.objects.count() + response = self.client.post( + url, + { + 'manufacturer-part-2': 'manufacturer-part-2', + 'confirm_delete': True + }, + HTTP_X_REQUESTED_WITH='XMLHttpRequest') + + self.assertEqual(response.status_code, 200) + + self.assertEqual(n - 1, ManufacturerPart.objects.count()) diff --git a/InvenTree/company/tests.py b/InvenTree/company/tests.py index f7bcd4e0b6..a92e4300a8 100644 --- a/InvenTree/company/tests.py +++ b/InvenTree/company/tests.py @@ -6,7 +6,7 @@ from django.core.exceptions import ValidationError import os -from .models import Company, Contact, SupplierPart +from .models import Company, Contact, ManufacturerPart, SupplierPart from .models import rename_company_image from part.models import Part @@ -22,6 +22,7 @@ class CompanySimpleTest(TestCase): 'part', 'location', 'bom', + 'manufacturer_part', 'supplier_part', 'price_breaks', ] @@ -74,10 +75,10 @@ class CompanySimpleTest(TestCase): self.assertEqual(acme.supplied_part_count, 4) self.assertTrue(appel.has_parts) - self.assertEqual(appel.supplied_part_count, 2) + self.assertEqual(appel.supplied_part_count, 3) self.assertTrue(zerg.has_parts) - self.assertEqual(zerg.supplied_part_count, 1) + self.assertEqual(zerg.supplied_part_count, 2) def test_price_breaks(self): @@ -166,3 +167,31 @@ class ContactSimpleTest(TestCase): # Remove the parent company Company.objects.get(pk=self.c.pk).delete() self.assertEqual(Contact.objects.count(), 0) + + +class ManufacturerPartSimpleTest(TestCase): + + fixtures = [ + 'category', + 'company', + 'location', + 'part', + 'manufacturer_part', + ] + + def setUp(self): + # Create a manufacturer part + self.part = Part.objects.get(pk=1) + manufacturer = Company.objects.get(pk=1) + MPN = 'MPN_TEST' + + self.mp = ManufacturerPart.objects.create(part=self.part, manufacturer=manufacturer, MPN=MPN) + + def test_exists(self): + self.assertEqual(ManufacturerPart.objects.count(), 4) + + def test_delete(self): + # Remove a part + Part.objects.get(pk=self.part.id).delete() + # Check that ManufacturerPart was deleted + self.assertEqual(ManufacturerPart.objects.count(), 3) From 45ca8d0e9337d8df2b08ca7341e3933552abd6b6 Mon Sep 17 00:00:00 2001 From: eeintech Date: Fri, 2 Apr 2021 11:13:57 -0400 Subject: [PATCH 021/116] Fixes to the way ManufacturerPart is saved, manufacturer table filtering and test units --- InvenTree/company/api.py | 7 +++++ .../company/fixtures/manufacturer_part.yaml | 17 ++++++++++++ InvenTree/company/fixtures/supplier_part.yaml | 17 ------------ InvenTree/company/models.py | 5 ++-- InvenTree/company/serializers.py | 26 +++++-------------- .../company/supplier_part_manufacturers.html | 2 +- 6 files changed, 34 insertions(+), 40 deletions(-) diff --git a/InvenTree/company/api.py b/InvenTree/company/api.py index 239d6064d3..ddd5624238 100644 --- a/InvenTree/company/api.py +++ b/InvenTree/company/api.py @@ -94,6 +94,7 @@ class ManufacturerPartList(generics.ListCreateAPIView): queryset = ManufacturerPart.objects.all().prefetch_related( 'part', 'manufacturer', + 'supplier_parts', ) serializer_class = ManufacturerPartSerializer @@ -141,6 +142,12 @@ class ManufacturerPartList(generics.ListCreateAPIView): if part is not None: queryset = queryset.filter(part=part) + # Filter by supplier part? + supplier_part = params.get('supplier_part', None) + + if supplier_part is not None: + queryset = queryset.filter(supplier_parts=supplier_part) + # Filter by 'active' status of the part? active = params.get('active', None) diff --git a/InvenTree/company/fixtures/manufacturer_part.yaml b/InvenTree/company/fixtures/manufacturer_part.yaml index 7532955eac..880a0e5862 100644 --- a/InvenTree/company/fixtures/manufacturer_part.yaml +++ b/InvenTree/company/fixtures/manufacturer_part.yaml @@ -20,3 +20,20 @@ part: 5 manufacturer: 7 MPN: 'MPN789' + +# Supplier parts linked to Manufacturer parts +- model: company.supplierpart + pk: 10 + fields: + part: 3 + manufacturer_part: 2 + supplier: 2 + SKU: 'MPN456-APPEL' + +- model: company.supplierpart + pk: 11 + fields: + part: 3 + manufacturer_part: 2 + supplier: 3 + SKU: 'MPN456-ZERG' diff --git a/InvenTree/company/fixtures/supplier_part.yaml b/InvenTree/company/fixtures/supplier_part.yaml index b4c4d7e58a..446339d58b 100644 --- a/InvenTree/company/fixtures/supplier_part.yaml +++ b/InvenTree/company/fixtures/supplier_part.yaml @@ -52,20 +52,3 @@ part: 2 supplier: 2 SKU: 'ZERGM312' - -# Supplier parts linked to Manufacturer parts -- model: company.supplierpart - pk: 10 - fields: - part: 3 - manufacturer_part: 2 - supplier: 2 - SKU: 'MPN456-APPEL' - -- model: company.supplierpart - pk: 11 - fields: - part: 3 - manufacturer_part: 2 - supplier: 3 - SKU: 'MPN456-ZERG' diff --git a/InvenTree/company/models.py b/InvenTree/company/models.py index 594d8a97ea..6a46745635 100644 --- a/InvenTree/company/models.py +++ b/InvenTree/company/models.py @@ -338,7 +338,7 @@ class ManufacturerPart(models.Model): ) @classmethod - def create(cls, part, manufacturer, mpn, link, description): + def create(cls, part, manufacturer, mpn, description, link=None): """ Check if ManufacturerPart instance does not already exist then create it """ @@ -415,8 +415,7 @@ class SupplierPart(models.Model): manufacturer_part = ManufacturerPart.create(part=self.part, manufacturer=manufacturer, mpn=MPN, - description=self.description, - link=self.link) + description=self.description) self.manufacturer_part = manufacturer_part else: # Update ManufacturerPart (if ID exists) diff --git a/InvenTree/company/serializers.py b/InvenTree/company/serializers.py index e3ecd625ee..35e84aac1e 100644 --- a/InvenTree/company/serializers.py +++ b/InvenTree/company/serializers.py @@ -162,6 +162,8 @@ class SupplierPartSerializer(InvenTreeModelSerializer): MPN = serializers.StringRelatedField(source='manufacturer_part.MPN') + manufacturer_part = ManufacturerPartSerializer(read_only=True) + class Meta: model = SupplierPart fields = [ @@ -175,6 +177,7 @@ class SupplierPartSerializer(InvenTreeModelSerializer): 'manufacturer', 'MPN', 'manufacturer_detail', + 'manufacturer_part', 'description', 'link', ] @@ -190,25 +193,10 @@ class SupplierPartSerializer(InvenTreeModelSerializer): MPN = self.initial_data.get('MPN', None) if manufacturer_id or MPN: - # Get SupplierPart data - part = validated_data.get('part', None) - description = validated_data.get('description', None) - link = validated_data.get('link', None) - - # Get manufacturer - try: - manufacturer = Company.objects.get(pk=int(manufacturer_id)) - except Company.DoesNotExist: - manufacturer = None - - # Create ManufacturerPart - manufacturer_part = ManufacturerPart.create(part=part, - manufacturer=manufacturer, - mpn=MPN, - description=description, - link=link) - supplier_part.manufacturer_part = manufacturer_part - supplier_part.save() + kwargs = {'manufacturer': manufacturer_id, + 'MPN': MPN, + } + supplier_part.save(**kwargs) return supplier_part diff --git a/InvenTree/company/templates/company/supplier_part_manufacturers.html b/InvenTree/company/templates/company/supplier_part_manufacturers.html index f2ce84b00b..deef6cdd1d 100644 --- a/InvenTree/company/templates/company/supplier_part_manufacturers.html +++ b/InvenTree/company/templates/company/supplier_part_manufacturers.html @@ -33,7 +33,7 @@ "{% url 'api-manufacturer-part-list' %}", { params: { - part: {{ part.id }}, + supplier_part: {{ part.id }}, part_detail: true, manufacturer_detail: true, }, From 58ddc4706511033611d09bb62902fbe35b354f9a Mon Sep 17 00:00:00 2001 From: eeintech Date: Mon, 5 Apr 2021 11:21:34 -0400 Subject: [PATCH 022/116] Updated migration files to handle duplicate manufacturer data --- .../migrations/0032_manufacturerpart.py | 69 -------------- .../migrations/0033_supplierpart_update.py | 91 +++++++++++++++++++ 2 files changed, 91 insertions(+), 69 deletions(-) create mode 100644 InvenTree/company/migrations/0033_supplierpart_update.py diff --git a/InvenTree/company/migrations/0032_manufacturerpart.py b/InvenTree/company/migrations/0032_manufacturerpart.py index 646a46edd6..0f7450b32a 100644 --- a/InvenTree/company/migrations/0032_manufacturerpart.py +++ b/InvenTree/company/migrations/0032_manufacturerpart.py @@ -2,63 +2,10 @@ import InvenTree.fields from django.db import migrations, models import django.db.models.deletion -def supplierpart_make_manufacturer_parts(apps, schema_editor): - Part = apps.get_model('part', 'Part') - ManufacturerPart = apps.get_model('company', 'ManufacturerPart') - SupplierPart = apps.get_model('company', 'SupplierPart') - - print(f'\nCreating Manufacturer parts\n{"-"*10}') - for supplier_part in SupplierPart.objects.all(): - print(f'{supplier_part.supplier.name[:15].ljust(15)} | {supplier_part.SKU[:15].ljust(15)}\t', end='') - - if supplier_part.manufacturer_part: - print(f'[ERROR: MANUFACTURER PART ALREADY EXISTS]') - continue - - part = supplier_part.part - if not part: - print(f'[ERROR: SUPPLIER PART IS NOT CONNECTED TO PART]') - continue - - manufacturer = supplier_part.manufacturer - MPN = supplier_part.MPN - link = supplier_part.link - description = supplier_part.description - - if manufacturer or MPN: - print(f' | {part.name[:15].ljust(15)}', end='') - - try: - print(f' | {manufacturer.name[:15].ljust(15)}', end='') - except TypeError: - print(f' | {"EMPTY MANUF".ljust(15)}', end='') - - try: - print(f' | {MPN[:15].ljust(15)}', end='') - except TypeError: - print(f' | {"EMPTY MPN".ljust(15)}', end='') - - print('\t', end='') - - # Create ManufacturerPart - manufacturer_part = ManufacturerPart(part=part, manufacturer=manufacturer, MPN=MPN, link=link, description=description) - manufacturer_part.save() - - # Link it to SupplierPart - supplier_part.manufacturer_part = manufacturer_part - supplier_part.save() - - print(f'[SUCCESS: MANUFACTURER PART CREATED]') - else: - print(f'[IGNORED: MISSING MANUFACTURER DATA]') - - print(f'{"-"*10}\nDone') - class Migration(migrations.Migration): dependencies = [ - ('part', '0063_bomitem_inherited'), ('company', '0031_auto_20210103_2215'), ] @@ -77,20 +24,4 @@ class Migration(migrations.Migration): 'unique_together': {('part', 'manufacturer', 'MPN')}, }, ), - migrations.AddField( - model_name='supplierpart', - name='manufacturer_part', - field=models.ForeignKey(blank=True, help_text='Select manufacturer part', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='supplier_parts', to='company.ManufacturerPart', verbose_name='Manufacturer Part'), - ), - # Make new ManufacturerPart with SupplierPart "manufacturer" and "MPN" - # fields, then link it to the new SupplierPart "manufacturer_part" field - migrations.RunPython(supplierpart_make_manufacturer_parts), - migrations.RemoveField( - model_name='supplierpart', - name='MPN', - ), - migrations.RemoveField( - model_name='supplierpart', - name='manufacturer', - ), ] diff --git a/InvenTree/company/migrations/0033_supplierpart_update.py b/InvenTree/company/migrations/0033_supplierpart_update.py new file mode 100644 index 0000000000..16d224269a --- /dev/null +++ b/InvenTree/company/migrations/0033_supplierpart_update.py @@ -0,0 +1,91 @@ +import InvenTree.fields +from django.db import migrations, models, transaction +import django.db.models.deletion +from django.db.utils import IntegrityError + +def supplierpart_make_manufacturer_parts(apps, schema_editor): + Part = apps.get_model('part', 'Part') + ManufacturerPart = apps.get_model('company', 'ManufacturerPart') + SupplierPart = apps.get_model('company', 'SupplierPart') + + print(f'\nCreating Manufacturer parts\n{"-"*10}') + for supplier_part in SupplierPart.objects.all(): + print(f'{supplier_part.supplier.name[:15].ljust(15)} | {supplier_part.SKU[:15].ljust(15)}\t', end='') + + if supplier_part.manufacturer_part: + print(f'[ERROR: MANUFACTURER PART ALREADY EXISTS]') + continue + + part = supplier_part.part + if not part: + print(f'[ERROR: SUPPLIER PART IS NOT CONNECTED TO PART]') + continue + + manufacturer = supplier_part.manufacturer + MPN = supplier_part.MPN + link = supplier_part.link + description = supplier_part.description + + if manufacturer or MPN: + print(f' | {part.name[:15].ljust(15)}', end='') + + try: + print(f' | {manufacturer.name[:15].ljust(15)}', end='') + except TypeError: + print(f' | {"EMPTY MANUF".ljust(15)}', end='') + + try: + print(f' | {MPN[:15].ljust(15)}', end='') + except TypeError: + print(f' | {"EMPTY MPN".ljust(15)}', end='') + + print('\t', end='') + + # Create ManufacturerPart + manufacturer_part = ManufacturerPart(part=part, manufacturer=manufacturer, MPN=MPN, description=description, link=link) + created = False + try: + with transaction.atomic(): + manufacturer_part.save() + created = True + except IntegrityError: + manufacturer_part = ManufacturerPart.objects.get(part=part, manufacturer=manufacturer, MPN=MPN) + + # Link it to SupplierPart + supplier_part.manufacturer_part = manufacturer_part + supplier_part.save() + + if created: + print(f'[SUCCESS: MANUFACTURER PART CREATED]') + else: + print(f'[IGNORED: MANUFACTURER PART ALREADY EXISTS]') + else: + print(f'[IGNORED: MISSING MANUFACTURER DATA]') + + print(f'{"-"*10}\nDone') + + +class Migration(migrations.Migration): + + dependencies = [ + ('company', '0032_manufacturerpart'), + ] + + operations = [ + migrations.AddField( + model_name='supplierpart', + name='manufacturer_part', + field=models.ForeignKey(blank=True, help_text='Select manufacturer part', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='supplier_parts', to='company.ManufacturerPart', verbose_name='Manufacturer Part'), + ), + # Make new ManufacturerPart with SupplierPart "manufacturer" and "MPN" + # fields, then link it to the new SupplierPart "manufacturer_part" field + migrations.RunPython(supplierpart_make_manufacturer_parts), + migrations.RemoveField( + model_name='supplierpart', + name='MPN', + ), + migrations.RemoveField( + model_name='supplierpart', + name='manufacturer', + ), + ] From 547dcc6e80d531d76dfbe0dacaaf466d95325bba Mon Sep 17 00:00:00 2001 From: eeintech Date: Mon, 5 Apr 2021 15:19:34 -0400 Subject: [PATCH 023/116] Deleted manufacturers tab from supplier detail page --- .../templates/company/supplier_part_base.html | 9 ++-- .../company/supplier_part_manufacturers.html | 43 ------------------- .../company/supplier_part_navbar.html | 10 ----- 3 files changed, 5 insertions(+), 57 deletions(-) delete mode 100644 InvenTree/company/templates/company/supplier_part_manufacturers.html diff --git a/InvenTree/company/templates/company/supplier_part_base.html b/InvenTree/company/templates/company/supplier_part_base.html index f06c26e20e..20aa7cdec5 100644 --- a/InvenTree/company/templates/company/supplier_part_base.html +++ b/InvenTree/company/templates/company/supplier_part_base.html @@ -87,17 +87,18 @@ src="{% static 'img/blank_image.png' %}" {% trans "SKU" %} {{ part.SKU }} - {% if part.manufacturer %} + {% if part.manufacturer_part.manufacturer %} {% trans "Manufacturer" %} - {{ part.manufacturer.name }} + {{ part.manufacturer_part.manufacturer.name }} + {% endif %} - {% if part.MPN %} + {% if part.manufacturer_part.MPN %} {% trans "MPN" %} - {{ part.MPN }} + {{ part.manufacturer_part.MPN }} {% endif %} {% if part.packaging %} diff --git a/InvenTree/company/templates/company/supplier_part_manufacturers.html b/InvenTree/company/templates/company/supplier_part_manufacturers.html deleted file mode 100644 index deef6cdd1d..0000000000 --- a/InvenTree/company/templates/company/supplier_part_manufacturers.html +++ /dev/null @@ -1,43 +0,0 @@ -{% extends "company/supplier_part_base.html" %} -{% load static %} -{% load i18n %} -{% load inventree_extras %} - -{% block menubar %} -{% include "company/supplier_part_navbar.html" with tab='manufacturers' %} -{% endblock %} - -{% block heading %} -{% trans "Manufacturer Parts" %} -{% endblock %} - -{% block details %} -{% setting_object 'PART_ENABLE_MANUFACTURER_PARTS' as manufacturer_parts %} - -{% if manufacturer_parts.value == "True" %} - -
        -{% else %} -
        - {% trans "Manufactured parts are disabled. Admin users can enable them in the global settings." %} -
        -{% endif %} - -{% endblock %} - -{% block js_ready %} -{{ block.super }} - - loadManufacturerPartTable( - "#manufacturer-table", - "{% url 'api-manufacturer-part-list' %}", - { - params: { - supplier_part: {{ part.id }}, - part_detail: true, - manufacturer_detail: true, - }, - } - ); - -{% endblock %} \ No newline at end of file diff --git a/InvenTree/company/templates/company/supplier_part_navbar.html b/InvenTree/company/templates/company/supplier_part_navbar.html index 33b1a02f34..09c3bc0443 100644 --- a/InvenTree/company/templates/company/supplier_part_navbar.html +++ b/InvenTree/company/templates/company/supplier_part_navbar.html @@ -9,16 +9,6 @@ - {% setting_object 'PART_ENABLE_MANUFACTURER_PARTS' as manufacturer_parts %} - {% if manufacturer_parts.value == "True" %} -
      • - - - {% trans "Manufacturers" %} - -
      • - {% endif %} -
      • From fd66e8b13661969a3a7e1c52caeebe6fd65d5cad Mon Sep 17 00:00:00 2001 From: eeintech Date: Mon, 5 Apr 2021 15:41:18 -0400 Subject: [PATCH 024/116] Added MPN link to supplier part list --- InvenTree/company/templates/company/supplier_part_base.html | 2 +- InvenTree/templates/js/company.js | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/InvenTree/company/templates/company/supplier_part_base.html b/InvenTree/company/templates/company/supplier_part_base.html index 20aa7cdec5..60e449d7e9 100644 --- a/InvenTree/company/templates/company/supplier_part_base.html +++ b/InvenTree/company/templates/company/supplier_part_base.html @@ -98,7 +98,7 @@ src="{% static 'img/blank_image.png' %}" {% trans "MPN" %} - {{ part.manufacturer_part.MPN }} + {{ part.manufacturer_part.MPN }} {% endif %} {% if part.packaging %} diff --git a/InvenTree/templates/js/company.js b/InvenTree/templates/js/company.js index 1dda96e27f..50f26b9d98 100644 --- a/InvenTree/templates/js/company.js +++ b/InvenTree/templates/js/company.js @@ -299,6 +299,9 @@ function loadSupplierPartTable(table, url, options) { sortable: true, field: 'MPN', title: '{% trans "MPN" %}', + formatter: function(value, row, index, field) { + return renderLink(value, `/manufacturer-part/${row.manufacturer_part.pk}/`); + } }, { field: 'link', From bd65a42410fa6b7413925fbbc8011effa43bdf37 Mon Sep 17 00:00:00 2001 From: eeintech Date: Tue, 6 Apr 2021 08:49:45 -0400 Subject: [PATCH 025/116] Removed global setting for manufacturer parts (enabled for all users) --- InvenTree/common/models.py | 7 ------- .../templates/company/detail_manufacturer_part.html | 9 --------- InvenTree/company/templates/company/navbar.html | 5 ++--- InvenTree/part/templates/part/manufacturer.html | 7 ------- InvenTree/part/templates/part/navbar.html | 3 --- InvenTree/templates/InvenTree/search.html | 3 --- InvenTree/templates/InvenTree/settings/part.html | 2 -- 7 files changed, 2 insertions(+), 34 deletions(-) diff --git a/InvenTree/common/models.py b/InvenTree/common/models.py index a785e944bc..df8e3b2d37 100644 --- a/InvenTree/common/models.py +++ b/InvenTree/common/models.py @@ -202,13 +202,6 @@ class InvenTreeSetting(models.Model): 'validator': bool, }, - 'PART_ENABLE_MANUFACTURER_PARTS': { - 'name': _('Enable Manufacturer Parts'), - 'description': _('Enable the use of manufacturer parts for purchasing'), - 'default': False, - 'validator': bool, - }, - 'REPORT_DEBUG_MODE': { 'name': _('Debug Mode'), 'description': _('Generate reports in debug mode (HTML output)'), diff --git a/InvenTree/company/templates/company/detail_manufacturer_part.html b/InvenTree/company/templates/company/detail_manufacturer_part.html index 8499512b4c..902d456eaf 100644 --- a/InvenTree/company/templates/company/detail_manufacturer_part.html +++ b/InvenTree/company/templates/company/detail_manufacturer_part.html @@ -13,9 +13,7 @@ {% block details %} -{% setting_object 'PART_ENABLE_MANUFACTURER_PARTS' as manufacturer_parts %} -{% if manufacturer_parts.value == "True" %} {% if roles.purchase_order.change %}
        @@ -50,16 +48,9 @@
        -{% else %} -
        - {% trans "Manufactured parts are disabled. Admin users can enable them in the global settings." %} -
        -{% endif %} - {% endblock %} {% block js_ready %} {{ block.super }} -{% setting_object 'PART_ENABLE_MANUFACTURER_PARTS' as manufacturer_parts %} $("#manufacturer-part-create").click(function () { launchModalForm( diff --git a/InvenTree/company/templates/company/navbar.html b/InvenTree/company/templates/company/navbar.html index 3010eb47fe..9a3d3ee4c6 100644 --- a/InvenTree/company/templates/company/navbar.html +++ b/InvenTree/company/templates/company/navbar.html @@ -2,8 +2,6 @@ {% load static %} {% load inventree_extras %} -{% setting_object 'PART_ENABLE_MANUFACTURER_PARTS' as manufacturer_parts %} -
        • @@ -18,7 +16,7 @@
        • - {% if manufacturer_parts.value == "True" and company.is_manufacturer %} + {% if company.is_manufacturer %}
        • @@ -26,6 +24,7 @@
        • {% endif %} + {% if company.is_supplier or company.is_manufacturer %}
        • diff --git a/InvenTree/part/templates/part/manufacturer.html b/InvenTree/part/templates/part/manufacturer.html index 3e17ed9ee4..9bb29c9e93 100644 --- a/InvenTree/part/templates/part/manufacturer.html +++ b/InvenTree/part/templates/part/manufacturer.html @@ -12,9 +12,7 @@ {% endblock %} {% block details %} -{% setting_object 'PART_ENABLE_MANUFACTURER_PARTS' as manufacturer_parts %} -{% if manufacturer_parts.value == "True" %}
        • {% endif %} - {% setting_object 'PART_ENABLE_MANUFACTURER_PARTS' as manufacturer_parts %} {% if part.purchaseable and roles.purchase_order.view %} - {% if manufacturer_parts.value == "True" %}
        • {% trans "Manufacturers" %}
        • - {% endif %}
        • diff --git a/InvenTree/templates/InvenTree/search.html b/InvenTree/templates/InvenTree/search.html index 81f02a9d64..112c36c6dc 100644 --- a/InvenTree/templates/InvenTree/search.html +++ b/InvenTree/templates/InvenTree/search.html @@ -146,8 +146,6 @@ InvenTree | {% trans "Search Results" %} ], }); - {% setting_object 'PART_ENABLE_MANUFACTURER_PARTS' as manufacturer_parts %} - {% if manufacturer_parts.value == "True" %} addItem('manufacturer-part', '{% trans "Manufacturer Parts" %}', 'fa-toolbox'); loadManufacturerPartTable( @@ -162,7 +160,6 @@ InvenTree | {% trans "Search Results" %} }, } ); - {% endif %} addItem('supplier-part', '{% trans "Supplier Parts" %}', 'fa-pallet'); diff --git a/InvenTree/templates/InvenTree/settings/part.html b/InvenTree/templates/InvenTree/settings/part.html index ccbce15a18..092d9c576c 100644 --- a/InvenTree/templates/InvenTree/settings/part.html +++ b/InvenTree/templates/InvenTree/settings/part.html @@ -34,8 +34,6 @@ {% include "InvenTree/settings/setting.html" with key="PART_COPY_PARAMETERS" %} {% include "InvenTree/settings/setting.html" with key="PART_COPY_TESTS" %} {% include "InvenTree/settings/setting.html" with key="PART_CATEGORY_PARAMETERS" %} - - {% include "InvenTree/settings/setting.html" with key="PART_ENABLE_MANUFACTURER_PARTS" %} From 76fe535ef9d173b32e458800075a31c13dc58ba0 Mon Sep 17 00:00:00 2001 From: eeintech Date: Tue, 6 Apr 2021 09:32:59 -0400 Subject: [PATCH 026/116] Improved delete form to show supplier parts deletion --- InvenTree/company/forms.py | 2 +- .../company/manufacturer_part_delete.html | 24 +++++++++++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/InvenTree/company/forms.py b/InvenTree/company/forms.py index 6317602b1d..98816bddaf 100644 --- a/InvenTree/company/forms.py +++ b/InvenTree/company/forms.py @@ -97,9 +97,9 @@ class EditManufacturerPartForm(HelperForm): model = ManufacturerPart fields = [ 'part', - 'description', 'manufacturer', 'MPN', + 'description', 'link', ] diff --git a/InvenTree/company/templates/company/manufacturer_part_delete.html b/InvenTree/company/templates/company/manufacturer_part_delete.html index 30eab3b591..4d5c2f6c86 100644 --- a/InvenTree/company/templates/company/manufacturer_part_delete.html +++ b/InvenTree/company/templates/company/manufacturer_part_delete.html @@ -2,14 +2,19 @@ {% load i18n %} {% block pre_form_content %} -{% trans "Are you sure you want to delete the following Manufacturer Parts?" %} +
          + {% trans "Are you sure you want to delete the following Manufacturer Parts?" %} +
          +{% for part in parts %} + +{% endfor %} -
          {% endblock %} {% block form_data %} - + {% for part in parts %} +
          @@ -25,7 +30,18 @@ {{ part.MPN }} -{% endfor %}
          +{% if part.supplier_parts.all|length > 0 %} +
          +

          There are {{ part.supplier_parts.all|length }} suppliers defined for this manufacturer part. If you delete it, the following supplier parts will also be deleted: +

          +
            + {% for spart in part.supplier_parts.all %} +
          • {{ spart.supplier.name }} - {{ spart.SKU }}
          • + {% endfor %} +
          +
          +{% endif %} +{% endfor %} {% endblock %} \ No newline at end of file From 7b4d3a3c07782ac19c87cf5bf927f17c612c9b23 Mon Sep 17 00:00:00 2001 From: eeintech Date: Tue, 6 Apr 2021 13:16:01 -0400 Subject: [PATCH 027/116] Added test units for migration and API --- InvenTree/company/api.py | 3 - .../migrations/0033_supplierpart_update.py | 93 ++++++------ InvenTree/company/test_api.py | 63 ++++++++- InvenTree/company/test_migrations.py | 132 +++++++++++++++++- InvenTree/company/test_views.py | 44 +++++- 5 files changed, 283 insertions(+), 52 deletions(-) diff --git a/InvenTree/company/api.py b/InvenTree/company/api.py index ddd5624238..f807ca221c 100644 --- a/InvenTree/company/api.py +++ b/InvenTree/company/api.py @@ -186,9 +186,6 @@ class ManufacturerPartDetail(generics.RetrieveUpdateDestroyAPIView): queryset = ManufacturerPart.objects.all() serializer_class = ManufacturerPartSerializer - read_only_fields = [ - ] - class SupplierPartList(generics.ListCreateAPIView): """ API endpoint for list view of SupplierPart object diff --git a/InvenTree/company/migrations/0033_supplierpart_update.py b/InvenTree/company/migrations/0033_supplierpart_update.py index 16d224269a..de98ff72cb 100644 --- a/InvenTree/company/migrations/0033_supplierpart_update.py +++ b/InvenTree/company/migrations/0033_supplierpart_update.py @@ -7,62 +7,65 @@ def supplierpart_make_manufacturer_parts(apps, schema_editor): Part = apps.get_model('part', 'Part') ManufacturerPart = apps.get_model('company', 'ManufacturerPart') SupplierPart = apps.get_model('company', 'SupplierPart') + + supplier_parts = SupplierPart.objects.all() - print(f'\nCreating Manufacturer parts\n{"-"*10}') - for supplier_part in SupplierPart.objects.all(): - print(f'{supplier_part.supplier.name[:15].ljust(15)} | {supplier_part.SKU[:15].ljust(15)}\t', end='') + if supplier_parts: + print(f'\nCreating Manufacturer parts\n{"-"*10}') + for supplier_part in supplier_parts: + print(f'{supplier_part.supplier.name[:15].ljust(15)} | {supplier_part.SKU[:15].ljust(15)}\t', end='') - if supplier_part.manufacturer_part: - print(f'[ERROR: MANUFACTURER PART ALREADY EXISTS]') - continue + if supplier_part.manufacturer_part: + print(f'[ERROR: MANUFACTURER PART ALREADY EXISTS]') + continue - part = supplier_part.part - if not part: - print(f'[ERROR: SUPPLIER PART IS NOT CONNECTED TO PART]') - continue - - manufacturer = supplier_part.manufacturer - MPN = supplier_part.MPN - link = supplier_part.link - description = supplier_part.description - - if manufacturer or MPN: - print(f' | {part.name[:15].ljust(15)}', end='') + part = supplier_part.part + if not part: + print(f'[ERROR: SUPPLIER PART IS NOT CONNECTED TO PART]') + continue - try: - print(f' | {manufacturer.name[:15].ljust(15)}', end='') - except TypeError: - print(f' | {"EMPTY MANUF".ljust(15)}', end='') + manufacturer = supplier_part.manufacturer + MPN = supplier_part.MPN + link = supplier_part.link + description = supplier_part.description - try: - print(f' | {MPN[:15].ljust(15)}', end='') - except TypeError: - print(f' | {"EMPTY MPN".ljust(15)}', end='') + if manufacturer or MPN: + print(f' | {part.name[:15].ljust(15)}', end='') + + try: + print(f' | {manufacturer.name[:15].ljust(15)}', end='') + except AttributeError: + print(f' | {"EMPTY MANUF".ljust(15)}', end='') - print('\t', end='') + try: + print(f' | {MPN[:15].ljust(15)}', end='') + except TypeError: + print(f' | {"EMPTY MPN".ljust(15)}', end='') - # Create ManufacturerPart - manufacturer_part = ManufacturerPart(part=part, manufacturer=manufacturer, MPN=MPN, description=description, link=link) - created = False - try: - with transaction.atomic(): - manufacturer_part.save() - created = True - except IntegrityError: - manufacturer_part = ManufacturerPart.objects.get(part=part, manufacturer=manufacturer, MPN=MPN) + print('\t', end='') - # Link it to SupplierPart - supplier_part.manufacturer_part = manufacturer_part - supplier_part.save() + # Create ManufacturerPart + manufacturer_part = ManufacturerPart(part=part, manufacturer=manufacturer, MPN=MPN, description=description, link=link) + created = False + try: + with transaction.atomic(): + manufacturer_part.save() + created = True + except IntegrityError: + manufacturer_part = ManufacturerPart.objects.get(part=part, manufacturer=manufacturer, MPN=MPN) - if created: - print(f'[SUCCESS: MANUFACTURER PART CREATED]') + # Link it to SupplierPart + supplier_part.manufacturer_part = manufacturer_part + supplier_part.save() + + if created: + print(f'[SUCCESS: MANUFACTURER PART CREATED]') + else: + print(f'[IGNORED: MANUFACTURER PART ALREADY EXISTS]') else: - print(f'[IGNORED: MANUFACTURER PART ALREADY EXISTS]') - else: - print(f'[IGNORED: MISSING MANUFACTURER DATA]') + print(f'[IGNORED: MISSING MANUFACTURER DATA]') - print(f'{"-"*10}\nDone') + print(f'{"-"*10}\nDone\n') class Migration(migrations.Migration): diff --git a/InvenTree/company/test_api.py b/InvenTree/company/test_api.py index 219a8ac019..0f352b5f4f 100644 --- a/InvenTree/company/test_api.py +++ b/InvenTree/company/test_api.py @@ -27,7 +27,7 @@ class CompanyTest(InvenTreeAPITestCase): def test_company_list(self): url = reverse('api-company-list') - # There should be two companies + # There should be three companies response = self.get(url) self.assertEqual(len(response.data), 3) @@ -62,3 +62,64 @@ class CompanyTest(InvenTreeAPITestCase): data = {'search': 'cup'} response = self.get(url, data) self.assertEqual(len(response.data), 2) + + +class ManufacturerTest(InvenTreeAPITestCase): + """ + Series of tests for the Manufacturer DRF API + """ + + fixtures = [ + 'category', + 'part', + 'location', + 'company', + 'manufacturer_part', + ] + + roles = [ + 'part.change', + ] + + def test_manufacturer_part_list(self): + url = reverse('api-manufacturer-part-list') + + # There should be three manufacturer parts + response = self.get(url) + self.assertEqual(len(response.data), 3) + + # Filter by manufacturer + data = {'company': 7} + response = self.get(url, data) + self.assertEqual(len(response.data), 2) + + # Filter by part + data = {'part': 5} + response = self.get(url, data) + self.assertEqual(len(response.data), 2) + + # Filter by supplier part (should return only one manufacturer part) + data = {'supplier_part': 10} + response = self.get(url, data) + self.assertEqual(len(response.data), 1) + + def test_manufacturer_part_detail(self): + url = reverse('api-manufacturer-part-detail', kwargs={'pk': 1}) + response = self.get(url) + + self.assertEqual(response.data['MPN'], 'MPN123') + + # Change the MPN + data = { + 'MPN': 'MPN-TEST-123', + } + response = self.client.patch(url, data, format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.data['MPN'], 'MPN-TEST-123') + + def test_manufacturer_part_search(self): + # Test search functionality in manufacturer list + url = reverse('api-manufacturer-part-list') + data = {'search': 'MPN'} + response = self.get(url, data) + self.assertEqual(len(response.data), 3) diff --git a/InvenTree/company/test_migrations.py b/InvenTree/company/test_migrations.py index 1a51a5a5b0..6b01192092 100644 --- a/InvenTree/company/test_migrations.py +++ b/InvenTree/company/test_migrations.py @@ -79,7 +79,7 @@ class TestManufacturerField(MigratorTestCase): part=part, supplier=supplier, SKU='SCREW.002', - manufacturer_name='Zero Corp' + manufacturer_name='Zero Corp', ) self.assertEqual(Company.objects.count(), 1) @@ -107,6 +107,136 @@ class TestManufacturerField(MigratorTestCase): self.assertEqual(part.manufacturer.name, 'ACME') +class TestManufacturerPart(MigratorTestCase): + """ + Tests for migration 0032 and 0033 which added ManufacturerPart model + """ + + migrate_from = ('company', '0031_auto_20210103_2215') + migrate_to = ('company', '0033_supplierpart_update') + + def prepare(self): + """ + Prepare the database by adding some test data 'before' the change: + + - Part object + - Company object (supplier) + - SupplierPart object + """ + + Part = self.old_state.apps.get_model('part', 'part') + Company = self.old_state.apps.get_model('company', 'company') + SupplierPart = self.old_state.apps.get_model('company', 'supplierpart') + + # Create an initial part + part = Part.objects.create( + name='CAP CER 0.1UF 10V X5R 0402', + description='CAP CER 0.1UF 10V X5R 0402', + purchaseable=True, + level=0, + tree_id=0, + lft=0, + rght=0, + ) + + # Create a manufacturer + manufacturer = Company.objects.create( + name='Murata', + description='Makes capacitors', + is_manufacturer=True, + is_supplier=False, + is_customer=False, + ) + + # Create suppliers + supplier_1 = Company.objects.create( + name='Digi-Key', + description='A supplier of components', + is_manufacturer=False, + is_supplier=True, + is_customer=False, + ) + + supplier_2 = Company.objects.create( + name='Mouser', + description='We sell components', + is_manufacturer=False, + is_supplier=True, + is_customer=False, + ) + + # Add some SupplierPart objects + SupplierPart.objects.create( + part=part, + supplier=supplier_1, + SKU='DK-MUR-CAP-123456-ND', + manufacturer=manufacturer, + MPN='MUR-CAP-123456', + ) + + SupplierPart.objects.create( + part=part, + supplier=supplier_1, + SKU='DK-MUR-CAP-987654-ND', + manufacturer=manufacturer, + MPN='MUR-CAP-987654', + ) + + SupplierPart.objects.create( + part=part, + supplier=supplier_2, + SKU='CAP-CER-01UF', + manufacturer=manufacturer, + MPN='MUR-CAP-123456', + ) + + # No MPN + SupplierPart.objects.create( + part=part, + supplier=supplier_2, + SKU='CAP-CER-01UF-1', + manufacturer=manufacturer, + ) + + # No Manufacturer + SupplierPart.objects.create( + part=part, + supplier=supplier_2, + SKU='CAP-CER-01UF-2', + MPN='MUR-CAP-123456', + ) + + # No Manufacturer data + SupplierPart.objects.create( + part=part, + supplier=supplier_2, + SKU='CAP-CER-01UF-3', + ) + + def test_manufacturer_part_objects(self): + """ + Test that the new companies have been created successfully + """ + + # Check on the SupplierPart objects + SupplierPart = self.new_state.apps.get_model('company', 'supplierpart') + + supplier_parts = SupplierPart.objects.all() + self.assertEqual(supplier_parts.count(), 6) + + supplier_parts = SupplierPart.objects.filter(supplier__name='Mouser') + self.assertEqual(supplier_parts.count(), 4) + + # Check on the ManufacturerPart objects + ManufacturerPart = self.new_state.apps.get_model('company', 'manufacturerpart') + + manufacturer_parts = ManufacturerPart.objects.all() + self.assertEqual(manufacturer_parts.count(), 4) + + manufacturer_part = manufacturer_parts.first() + self.assertEqual(manufacturer_part.MPN, 'MUR-CAP-123456') + + class TestCurrencyMigration(MigratorTestCase): """ Tests for upgrade from basic currency support to django-money diff --git a/InvenTree/company/test_views.py b/InvenTree/company/test_views.py index 1868175648..e6eb54e0bf 100644 --- a/InvenTree/company/test_views.py +++ b/InvenTree/company/test_views.py @@ -220,7 +220,7 @@ class ManufacturerPartViewTests(CompanyViewTestBase): response = self.client.get(url, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(response.status_code, 200) - # How many supplier parts are already in the database? + # How many manufaturer parts are already in the database? n = ManufacturerPart.objects.all().count() data = { @@ -240,6 +240,41 @@ class ManufacturerPartViewTests(CompanyViewTestBase): # Check that the ManufacturerPart was created! self.assertEqual(n + 1, ManufacturerPart.objects.all().count()) + # Try to create duplicate ManufacturerPart + (response, errors) = self.post(url, data, valid=False) + + self.assertIsNotNone(errors.get('__all__', None)) + + # Check that the ManufacturerPart count stayed the same + self.assertEqual(n + 1, ManufacturerPart.objects.all().count()) + + def test_supplier_part_create(self): + """ + Test that the SupplierPartCreate view creates Manufacturer Part. + """ + + url = reverse('supplier-part-create') + + # First check that we can GET the form + response = self.client.get(url, HTTP_X_REQUESTED_WITH='XMLHttpRequest') + self.assertEqual(response.status_code, 200) + + # How many manufacturer parts are already in the database? + n = ManufacturerPart.objects.all().count() + + data = { + 'part': 1, + 'supplier': 1, + 'SKU': 'SKU_TEST', + 'manufacturer': 6, + 'MPN': 'MPN_TEST', + } + + (response, errors) = self.post(url, data, valid=True) + + # Check that the ManufacturerPart was created! + self.assertEqual(n + 1, ManufacturerPart.objects.all().count()) + def test_manufacturer_part_delete(self): """ Test the ManufacturerPartDelete view @@ -248,11 +283,13 @@ class ManufacturerPartViewTests(CompanyViewTestBase): url = reverse('manufacturer-part-delete') # Get form using 'part' argument - response = self.client.get(url, {'part': '5'}, HTTP_X_REQUESTED_WITH='XMLHttpRequest') + response = self.client.get(url, {'part': '2'}, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(response.status_code, 200) # POST to delete manufacturer part n = ManufacturerPart.objects.count() + m = SupplierPart.objects.count() + response = self.client.post( url, { @@ -263,4 +300,7 @@ class ManufacturerPartViewTests(CompanyViewTestBase): self.assertEqual(response.status_code, 200) + # Check that the ManufacturerPart was deleted self.assertEqual(n - 1, ManufacturerPart.objects.count()) + # Check that the SupplierParts were deleted + self.assertEqual(m - 2, SupplierPart.objects.count()) From 52b2b9582d4a34f4179904b174a305823b296623 Mon Sep 17 00:00:00 2001 From: eeintech Date: Tue, 6 Apr 2021 14:30:03 -0400 Subject: [PATCH 028/116] More tests and improved coverage (hopefully) --- InvenTree/company/api.py | 6 ------ InvenTree/company/test_api.py | 39 ++++++++++++++++++++++++++++------- InvenTree/company/tests.py | 28 ++++++++++++++++++++++--- 3 files changed, 57 insertions(+), 16 deletions(-) diff --git a/InvenTree/company/api.py b/InvenTree/company/api.py index f807ca221c..66557b783b 100644 --- a/InvenTree/company/api.py +++ b/InvenTree/company/api.py @@ -142,12 +142,6 @@ class ManufacturerPartList(generics.ListCreateAPIView): if part is not None: queryset = queryset.filter(part=part) - # Filter by supplier part? - supplier_part = params.get('supplier_part', None) - - if supplier_part is not None: - queryset = queryset.filter(supplier_parts=supplier_part) - # Filter by 'active' status of the part? active = params.get('active', None) diff --git a/InvenTree/company/test_api.py b/InvenTree/company/test_api.py index 0f352b5f4f..ef93a3c442 100644 --- a/InvenTree/company/test_api.py +++ b/InvenTree/company/test_api.py @@ -78,6 +78,7 @@ class ManufacturerTest(InvenTreeAPITestCase): ] roles = [ + 'part.add', 'part.change', ] @@ -88,25 +89,30 @@ class ManufacturerTest(InvenTreeAPITestCase): response = self.get(url) self.assertEqual(len(response.data), 3) + # Create manufacturer part + data = { + 'part': 1, + 'manufacturer': 7, + 'MPN': 'MPN_TEST', + } + response = self.client.post(url, data, format='json') + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + self.assertEqual(response.data['MPN'], 'MPN_TEST') + # Filter by manufacturer data = {'company': 7} response = self.get(url, data) - self.assertEqual(len(response.data), 2) + self.assertEqual(len(response.data), 3) # Filter by part data = {'part': 5} response = self.get(url, data) self.assertEqual(len(response.data), 2) - # Filter by supplier part (should return only one manufacturer part) - data = {'supplier_part': 10} - response = self.get(url, data) - self.assertEqual(len(response.data), 1) - def test_manufacturer_part_detail(self): url = reverse('api-manufacturer-part-detail', kwargs={'pk': 1}) + response = self.get(url) - self.assertEqual(response.data['MPN'], 'MPN123') # Change the MPN @@ -123,3 +129,22 @@ class ManufacturerTest(InvenTreeAPITestCase): data = {'search': 'MPN'} response = self.get(url, data) self.assertEqual(len(response.data), 3) + + def test_supplier_part_create(self): + url = reverse('api-supplier-part-list') + + # Create supplier part + data = { + 'part': 1, + 'supplier': 1, + 'SKU': 'SKU_TEST', + 'manufacturer': 7, + 'MPN': 'PART_NUMBER', + } + response = self.client.post(url, data, format='json') + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + # Check manufacturer part + url = reverse('api-manufacturer-part-detail', kwargs={'pk': 5}) + response = self.get(url) + self.assertEqual(response.data['MPN'], 'PART_NUMBER') diff --git a/InvenTree/company/tests.py b/InvenTree/company/tests.py index a92e4300a8..cb366e8a6d 100644 --- a/InvenTree/company/tests.py +++ b/InvenTree/company/tests.py @@ -183,12 +183,34 @@ class ManufacturerPartSimpleTest(TestCase): # Create a manufacturer part self.part = Part.objects.get(pk=1) manufacturer = Company.objects.get(pk=1) - MPN = 'MPN_TEST' + + self.mp = ManufacturerPart.create( + part=self.part, + manufacturer=manufacturer, + mpn='PART_NUMBER', + description='THIS IS A MANUFACTURER PART', + ) + + # Create a supplier part + supplier = Company.objects.get(pk=5) + supplier_part = SupplierPart.objects.create( + part=self.part, + supplier=supplier, + SKU='SKU_TEST', + ) - self.mp = ManufacturerPart.objects.create(part=self.part, manufacturer=manufacturer, MPN=MPN) + kwargs = { + 'manufacturer': manufacturer.id, + 'MPN': 'MPN_TEST', + } + supplier_part.save(**kwargs) def test_exists(self): - self.assertEqual(ManufacturerPart.objects.count(), 4) + self.assertEqual(ManufacturerPart.objects.count(), 5) + + # Check that manufacturer part was created from supplier part creation + manufacturer_parts = ManufacturerPart.objects.filter(manufacturer=1) + self.assertEqual(manufacturer_parts.count(), 2) def test_delete(self): # Remove a part From 734985faa909d06ef366ee39c1ba31c25b42d60e Mon Sep 17 00:00:00 2001 From: eeintech Date: Tue, 6 Apr 2021 14:53:35 -0400 Subject: [PATCH 029/116] Made manufacturer part ID dynamic for API supplier part create test --- InvenTree/company/test_api.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/InvenTree/company/test_api.py b/InvenTree/company/test_api.py index ef93a3c442..a65beb4dc2 100644 --- a/InvenTree/company/test_api.py +++ b/InvenTree/company/test_api.py @@ -111,7 +111,7 @@ class ManufacturerTest(InvenTreeAPITestCase): def test_manufacturer_part_detail(self): url = reverse('api-manufacturer-part-detail', kwargs={'pk': 1}) - + response = self.get(url) self.assertEqual(response.data['MPN'], 'MPN123') @@ -145,6 +145,7 @@ class ManufacturerTest(InvenTreeAPITestCase): self.assertEqual(response.status_code, status.HTTP_201_CREATED) # Check manufacturer part - url = reverse('api-manufacturer-part-detail', kwargs={'pk': 5}) + manufacturer_part_id = int(response.data['manufacturer_part']['pk']) + url = reverse('api-manufacturer-part-detail', kwargs={'pk': manufacturer_part_id}) response = self.get(url) self.assertEqual(response.data['MPN'], 'PART_NUMBER') From b2264940a3c6a6287f5dba3850a8e25fbaa3c300 Mon Sep 17 00:00:00 2001 From: eeintech Date: Wed, 7 Apr 2021 09:54:20 -0400 Subject: [PATCH 030/116] Dynamic control of information to make cleaner supplier and manufacturer tables --- .../templates/company/manufacturer_part_suppliers.html | 4 ++-- InvenTree/part/templates/part/manufacturer.html | 2 +- InvenTree/part/templates/part/supplier.html | 2 +- InvenTree/templates/js/company.js | 10 ++++++++-- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/InvenTree/company/templates/company/manufacturer_part_suppliers.html b/InvenTree/company/templates/company/manufacturer_part_suppliers.html index 0d39516a7b..e650e02e9c 100644 --- a/InvenTree/company/templates/company/manufacturer_part_suppliers.html +++ b/InvenTree/company/templates/company/manufacturer_part_suppliers.html @@ -77,9 +77,9 @@ loadSupplierPartTable( params: { part: {{ part.part.id }}, manufacturer_part: {{ part.id }}, - part_detail: true, + part_detail: false, supplier_detail: true, - manufacturer_detail: true, + manufacturer_detail: false, }, } ); diff --git a/InvenTree/part/templates/part/manufacturer.html b/InvenTree/part/templates/part/manufacturer.html index 9bb29c9e93..7643d4d996 100644 --- a/InvenTree/part/templates/part/manufacturer.html +++ b/InvenTree/part/templates/part/manufacturer.html @@ -81,7 +81,7 @@ { params: { part: {{ part.id }}, - part_detail: true, + part_detail: false, manufacturer_detail: true, }, } diff --git a/InvenTree/part/templates/part/supplier.html b/InvenTree/part/templates/part/supplier.html index 1093129412..313d48f0ad 100644 --- a/InvenTree/part/templates/part/supplier.html +++ b/InvenTree/part/templates/part/supplier.html @@ -85,7 +85,7 @@ { params: { part: {{ part.id }}, - part_detail: true, + part_detail: false, supplier_detail: true, manufacturer_detail: true, }, diff --git a/InvenTree/templates/js/company.js b/InvenTree/templates/js/company.js index 50f26b9d98..27115f19e1 100644 --- a/InvenTree/templates/js/company.js +++ b/InvenTree/templates/js/company.js @@ -133,10 +133,11 @@ function loadManufacturerPartTable(table, url, options) { switchable: false, }, { + visible: params['part_detail'], + switchable: params['part_detail'], sortable: true, field: 'part_detail.full_name', title: '{% trans "Part" %}', - switchable: false, formatter: function(value, row, index, field) { var url = `/part/${row.part}/`; @@ -230,10 +231,11 @@ function loadSupplierPartTable(table, url, options) { switchable: false, }, { + visible: params['part_detail'], + switchable: params['part_detail'], sortable: true, field: 'part_detail.full_name', title: '{% trans "Part" %}', - switchable: false, formatter: function(value, row, index, field) { var url = `/part/${row.part}/`; @@ -280,6 +282,8 @@ function loadSupplierPartTable(table, url, options) { } }, { + visible: params['manufacturer_detail'], + switchable: params['manufacturer_detail'], sortable: true, field: 'manufacturer', title: '{% trans "Manufacturer" %}', @@ -296,6 +300,8 @@ function loadSupplierPartTable(table, url, options) { } }, { + visible: params['manufacturer_detail'], + switchable: params['manufacturer_detail'], sortable: true, field: 'MPN', title: '{% trans "MPN" %}', From 2db6af2af613d4fa3189418084615172323fd4a1 Mon Sep 17 00:00:00 2001 From: eeintech Date: Wed, 7 Apr 2021 10:33:31 -0400 Subject: [PATCH 031/116] PO table and stock item template improvements --- .../order/templates/order/purchase_order_detail.html | 3 +++ InvenTree/stock/templates/stock/item_base.html | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/InvenTree/order/templates/order/purchase_order_detail.html b/InvenTree/order/templates/order/purchase_order_detail.html index b22d045258..c28f383a9d 100644 --- a/InvenTree/order/templates/order/purchase_order_detail.html +++ b/InvenTree/order/templates/order/purchase_order_detail.html @@ -181,6 +181,9 @@ $("#po-table").inventreeTable({ sortName: 'part__MPN', field: 'supplier_part_detail.MPN', title: '{% trans "MPN" %}', + formatter: function(value, row, index, field) { + return renderLink(value, `/manufacturer-part/${row.supplier_part_detail.manufacturer_part.pk}/`); + }, }, { sortable: true, diff --git a/InvenTree/stock/templates/stock/item_base.html b/InvenTree/stock/templates/stock/item_base.html index f5459dac27..18bf2af400 100644 --- a/InvenTree/stock/templates/stock/item_base.html +++ b/InvenTree/stock/templates/stock/item_base.html @@ -334,6 +334,16 @@ InvenTree | {% trans "Stock Item" %} - {{ item }} {% if item.supplier_part %} + {% trans "Manufacturer" %} +
          {{ item.supplier_part.manufacturer_part.manufacturer.name }} + + + + {% trans "Manufacturer Part" %} + {{ item.supplier_part.manufacturer_part.MPN }} + + + {% trans "Supplier" %} {{ item.supplier_part.supplier.name }} From 63ade51c6c831e08b71c147ab92f6cdd3fe0042a Mon Sep 17 00:00:00 2001 From: eeintech Date: Wed, 7 Apr 2021 10:49:19 -0400 Subject: [PATCH 032/116] Updated migrations after merge with master --- .../{0032_manufacturerpart.py => 0033_manufacturerpart.py} | 2 +- ...3_supplierpart_update.py => 0034_supplierpart_update.py} | 3 ++- InvenTree/company/test_migrations.py | 6 +++--- 3 files changed, 6 insertions(+), 5 deletions(-) rename InvenTree/company/migrations/{0032_manufacturerpart.py => 0033_manufacturerpart.py} (96%) rename InvenTree/company/migrations/{0033_supplierpart_update.py => 0034_supplierpart_update.py} (97%) diff --git a/InvenTree/company/migrations/0032_manufacturerpart.py b/InvenTree/company/migrations/0033_manufacturerpart.py similarity index 96% rename from InvenTree/company/migrations/0032_manufacturerpart.py rename to InvenTree/company/migrations/0033_manufacturerpart.py index 0f7450b32a..3189bb9a20 100644 --- a/InvenTree/company/migrations/0032_manufacturerpart.py +++ b/InvenTree/company/migrations/0033_manufacturerpart.py @@ -6,7 +6,7 @@ import django.db.models.deletion class Migration(migrations.Migration): dependencies = [ - ('company', '0031_auto_20210103_2215'), + ('company', '0032_auto_20210403_1837'), ] operations = [ diff --git a/InvenTree/company/migrations/0033_supplierpart_update.py b/InvenTree/company/migrations/0034_supplierpart_update.py similarity index 97% rename from InvenTree/company/migrations/0033_supplierpart_update.py rename to InvenTree/company/migrations/0034_supplierpart_update.py index de98ff72cb..3e0d3a8328 100644 --- a/InvenTree/company/migrations/0033_supplierpart_update.py +++ b/InvenTree/company/migrations/0034_supplierpart_update.py @@ -71,7 +71,8 @@ def supplierpart_make_manufacturer_parts(apps, schema_editor): class Migration(migrations.Migration): dependencies = [ - ('company', '0032_manufacturerpart'), + ('company', '0032_auto_20210403_1837'), + ('company', '0033_manufacturerpart'), ] operations = [ diff --git a/InvenTree/company/test_migrations.py b/InvenTree/company/test_migrations.py index 6b01192092..bf837d821a 100644 --- a/InvenTree/company/test_migrations.py +++ b/InvenTree/company/test_migrations.py @@ -109,11 +109,11 @@ class TestManufacturerField(MigratorTestCase): class TestManufacturerPart(MigratorTestCase): """ - Tests for migration 0032 and 0033 which added ManufacturerPart model + Tests for migration 0033 and 0034 which added and transitioned to the ManufacturerPart model """ - migrate_from = ('company', '0031_auto_20210103_2215') - migrate_to = ('company', '0033_supplierpart_update') + migrate_from = ('company', '0032_auto_20210403_1837') + migrate_to = ('company', '0034_supplierpart_update') def prepare(self): """ From c0691c3e9b55d3bd80ab94adc600e04315db1ee3 Mon Sep 17 00:00:00 2001 From: eeintech Date: Wed, 7 Apr 2021 11:43:05 -0400 Subject: [PATCH 033/116] Decoupled manufacturer and supplier data in BOM export, aggregate data needs more work --- InvenTree/part/bom.py | 120 +++++++++++++++++++++++++++++++++++----- InvenTree/part/forms.py | 4 +- InvenTree/part/views.py | 8 ++- 3 files changed, 115 insertions(+), 17 deletions(-) diff --git a/InvenTree/part/bom.py b/InvenTree/part/bom.py index f3cf598225..c7de3b4905 100644 --- a/InvenTree/part/bom.py +++ b/InvenTree/part/bom.py @@ -16,7 +16,7 @@ from InvenTree.helpers import DownloadFile, GetExportFormats from .admin import BomItemResource from .models import BomItem -from company.models import SupplierPart +from company.models import ManufacturerPart, SupplierPart def IsValidBOMFormat(fmt): @@ -49,7 +49,7 @@ def MakeBomTemplate(fmt): return DownloadFile(data, filename) -def ExportBom(part, fmt='csv', cascade=False, max_levels=None, parameter_data=False, stock_data=False, supplier_data=False): +def ExportBom(part, fmt='csv', cascade=False, max_levels=None, parameter_data=False, stock_data=False, supplier_data=False, manufacturer_data=False): """ Export a BOM (Bill of Materials) for a given part. Args: @@ -160,17 +160,17 @@ def ExportBom(part, fmt='csv', cascade=False, max_levels=None, parameter_data=Fa # Add stock columns to dataset add_columns_to_dataset(stock_cols, len(bom_items)) - if supplier_data: + if manufacturer_data and supplier_data: """ - If requested, add extra columns for each SupplierPart associated with each line item + If requested, add extra columns for each SupplierPart and ManufacturerPart associated with each line item """ # Expand dataset with manufacturer parts manufacturer_headers = [ - _('Supplier'), - _('SKU'), _('Manufacturer'), _('MPN'), + _('Supplier'), + _('SKU'), ] manufacturer_cols = {} @@ -191,31 +191,121 @@ def ExportBom(part, fmt='csv', cascade=False, max_levels=None, parameter_data=Fa supplier_sku = supplier_part.SKU - if supplier_part.manufacturer: - manufacturer_name = supplier_part.manufacturer.name + if supplier_part.manufacturer_part.manufacturer: + manufacturer_name = supplier_part.manufacturer_part.manufacturer.name else: manufacturer_name = '' - manufacturer_mpn = supplier_part.MPN + manufacturer_mpn = supplier_part.manufacturer_part.MPN + + # Add manufacturer data to the manufacturer columns + + # Generate column names for this supplier + k_man = manufacturer_headers[0] + "_" + str(idx) + k_mpn = manufacturer_headers[1] + "_" + str(idx) + k_sup = manufacturer_headers[2] + "_" + str(idx) + k_sku = manufacturer_headers[3] + "_" + str(idx) + + try: + manufacturer_cols[k_man].update({b_idx: manufacturer_name}) + manufacturer_cols[k_mpn].update({b_idx: manufacturer_mpn}) + manufacturer_cols[k_sup].update({b_idx: supplier_name}) + manufacturer_cols[k_sku].update({b_idx: supplier_sku}) + except KeyError: + manufacturer_cols[k_man] = {b_idx: manufacturer_name} + manufacturer_cols[k_mpn] = {b_idx: manufacturer_mpn} + manufacturer_cols[k_sup] = {b_idx: supplier_name} + manufacturer_cols[k_sku] = {b_idx: supplier_sku} + + # Add manufacturer columns to dataset + add_columns_to_dataset(manufacturer_cols, len(bom_items)) + + elif manufacturer_data: + """ + If requested, add extra columns for each ManufacturerPart associated with each line item + """ + + # Expand dataset with manufacturer parts + manufacturer_headers = [ + _('Manufacturer'), + _('MPN'), + ] + + manufacturer_cols = {} + + for b_idx, bom_item in enumerate(bom_items): + # Get part instance + b_part = bom_item.sub_part + + # Filter supplier parts + manufacturer_parts = ManufacturerPart.objects.filter(part__pk=b_part.pk) + + for idx, manufacturer_part in enumerate(manufacturer_parts): + + if manufacturer_part: + manufacturer_name = manufacturer_part.manufacturer.name + else: + manufacturer_name = '' + + manufacturer_mpn = manufacturer_part.MPN + + # Add manufacturer data to the manufacturer columns + + # Generate column names for this supplier + k_man = manufacturer_headers[0] + "_" + str(idx) + k_mpn = manufacturer_headers[1] + "_" + str(idx) + + try: + manufacturer_cols[k_man].update({b_idx: manufacturer_name}) + manufacturer_cols[k_mpn].update({b_idx: manufacturer_mpn}) + except KeyError: + manufacturer_cols[k_man] = {b_idx: manufacturer_name} + manufacturer_cols[k_mpn] = {b_idx: manufacturer_mpn} + + # Add manufacturer columns to dataset + add_columns_to_dataset(manufacturer_cols, len(bom_items)) + + elif supplier_data: + """ + If requested, add extra columns for each SupplierPart associated with each line item + """ + + # Expand dataset with manufacturer parts + manufacturer_headers = [ + _('Supplier'), + _('SKU'), + ] + + manufacturer_cols = {} + + for b_idx, bom_item in enumerate(bom_items): + # Get part instance + b_part = bom_item.sub_part + + # Filter supplier parts + supplier_parts = SupplierPart.objects.filter(part__pk=b_part.pk) + + for idx, supplier_part in enumerate(supplier_parts): + + if supplier_part.supplier: + supplier_name = supplier_part.supplier.name + else: + supplier_name = '' + + supplier_sku = supplier_part.SKU # Add manufacturer data to the manufacturer columns # Generate column names for this supplier k_sup = manufacturer_headers[0] + "_" + str(idx) k_sku = manufacturer_headers[1] + "_" + str(idx) - k_man = manufacturer_headers[2] + "_" + str(idx) - k_mpn = manufacturer_headers[3] + "_" + str(idx) try: manufacturer_cols[k_sup].update({b_idx: supplier_name}) manufacturer_cols[k_sku].update({b_idx: supplier_sku}) - manufacturer_cols[k_man].update({b_idx: manufacturer_name}) - manufacturer_cols[k_mpn].update({b_idx: manufacturer_mpn}) except KeyError: manufacturer_cols[k_sup] = {b_idx: supplier_name} manufacturer_cols[k_sku] = {b_idx: supplier_sku} - manufacturer_cols[k_man] = {b_idx: manufacturer_name} - manufacturer_cols[k_mpn] = {b_idx: manufacturer_mpn} # Add manufacturer columns to dataset add_columns_to_dataset(manufacturer_cols, len(bom_items)) diff --git a/InvenTree/part/forms.py b/InvenTree/part/forms.py index 63cd7b4399..131c6aeac7 100644 --- a/InvenTree/part/forms.py +++ b/InvenTree/part/forms.py @@ -95,9 +95,11 @@ class BomExportForm(forms.Form): parameter_data = forms.BooleanField(label=_("Include Parameter Data"), required=False, initial=False, help_text=_("Include part parameters data in exported BOM")) stock_data = forms.BooleanField(label=_("Include Stock Data"), required=False, initial=False, help_text=_("Include part stock data in exported BOM")) + + manufacturer_data = forms.BooleanField(label=_("Include Manufacturer Data"), required=False, initial=True, help_text=_("Include part manufacturer data in exported BOM")) supplier_data = forms.BooleanField(label=_("Include Supplier Data"), required=False, initial=True, help_text=_("Include part supplier data in exported BOM")) - + def get_choices(self): """ BOM export format choices """ diff --git a/InvenTree/part/views.py b/InvenTree/part/views.py index 4efff3e9e3..229ae06109 100644 --- a/InvenTree/part/views.py +++ b/InvenTree/part/views.py @@ -1845,6 +1845,8 @@ class BomDownload(AjaxView): supplier_data = str2bool(request.GET.get('supplier_data', False)) + manufacturer_data = str2bool(request.GET.get('manufacturer_data', False)) + levels = request.GET.get('levels', None) if levels is not None: @@ -1866,7 +1868,9 @@ class BomDownload(AjaxView): max_levels=levels, parameter_data=parameter_data, stock_data=stock_data, - supplier_data=supplier_data) + supplier_data=supplier_data, + manufacturer_data=manufacturer_data, + ) def get_data(self): return { @@ -1896,6 +1900,7 @@ class BomExport(AjaxView): parameter_data = str2bool(request.POST.get('parameter_data', False)) stock_data = str2bool(request.POST.get('stock_data', False)) supplier_data = str2bool(request.POST.get('supplier_data', False)) + manufacturer_data = str2bool(request.POST.get('manufacturer_data', False)) try: part = Part.objects.get(pk=self.kwargs['pk']) @@ -1913,6 +1918,7 @@ class BomExport(AjaxView): url += '¶meter_data=' + str(parameter_data) url += '&stock_data=' + str(stock_data) url += '&supplier_data=' + str(supplier_data) + url += '&manufacturer_data=' + str(manufacturer_data) if levels: url += '&levels=' + str(levels) From ccd35fc4b45b208f8659c379f8592420c2f8abdd Mon Sep 17 00:00:00 2001 From: eeintech Date: Wed, 7 Apr 2021 11:50:11 -0400 Subject: [PATCH 034/116] Fixed supplier part list bug and hide manufacturer fields in supplier part edit form --- InvenTree/company/views.py | 4 ++++ InvenTree/templates/js/company.js | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/InvenTree/company/views.py b/InvenTree/company/views.py index 7cd4c0a858..be7d326c36 100644 --- a/InvenTree/company/views.py +++ b/InvenTree/company/views.py @@ -542,6 +542,10 @@ class SupplierPartEdit(AjaxUpdateView): supplier_part = self.get_object() + # Hide Manufacturer fields + form.fields['manufacturer'].widget = HiddenInput() + form.fields['MPN'].widget = HiddenInput() + # It appears that hiding a MoneyField fails validation # Therefore the idea to set the value before hiding if form.is_valid(): diff --git a/InvenTree/templates/js/company.js b/InvenTree/templates/js/company.js index 27115f19e1..d258c8bab1 100644 --- a/InvenTree/templates/js/company.js +++ b/InvenTree/templates/js/company.js @@ -306,7 +306,11 @@ function loadSupplierPartTable(table, url, options) { field: 'MPN', title: '{% trans "MPN" %}', formatter: function(value, row, index, field) { - return renderLink(value, `/manufacturer-part/${row.manufacturer_part.pk}/`); + if (value && row.manufacturer_part) { + return renderLink(value, `/manufacturer-part/${row.manufacturer_part.pk}/`); + } else { + return "-"; + } } }, { From 1074300ba0048626703dd2395665cfb43477afa2 Mon Sep 17 00:00:00 2001 From: eeintech Date: Wed, 7 Apr 2021 12:24:32 -0400 Subject: [PATCH 035/116] Improved BOM export of combined manufacturer and supplier data --- InvenTree/part/bom.py | 61 +++++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/InvenTree/part/bom.py b/InvenTree/part/bom.py index c7de3b4905..b0f53c55eb 100644 --- a/InvenTree/part/bom.py +++ b/InvenTree/part/bom.py @@ -169,6 +169,9 @@ def ExportBom(part, fmt='csv', cascade=False, max_levels=None, parameter_data=Fa manufacturer_headers = [ _('Manufacturer'), _('MPN'), + ] + + supplier_headers = [ _('Supplier'), _('SKU'), ] @@ -179,43 +182,51 @@ def ExportBom(part, fmt='csv', cascade=False, max_levels=None, parameter_data=Fa # Get part instance b_part = bom_item.sub_part - # Filter supplier parts - supplier_parts = SupplierPart.objects.filter(part__pk=b_part.pk) + # Filter manufacturer parts + manufacturer_parts = ManufacturerPart.objects.filter(part__pk=b_part.pk) + manufacturer_parts = manufacturer_parts.prefetch_related('supplier_parts') - for idx, supplier_part in enumerate(supplier_parts): + # Process manufacturer part + for manufacturer_idx, manufacturer_part in enumerate(manufacturer_parts): - if supplier_part.supplier: - supplier_name = supplier_part.supplier.name - else: - supplier_name = '' - - supplier_sku = supplier_part.SKU - - if supplier_part.manufacturer_part.manufacturer: - manufacturer_name = supplier_part.manufacturer_part.manufacturer.name + if manufacturer_part: + manufacturer_name = manufacturer_part.manufacturer.name else: manufacturer_name = '' - manufacturer_mpn = supplier_part.manufacturer_part.MPN + manufacturer_mpn = manufacturer_part.MPN - # Add manufacturer data to the manufacturer columns - - # Generate column names for this supplier - k_man = manufacturer_headers[0] + "_" + str(idx) - k_mpn = manufacturer_headers[1] + "_" + str(idx) - k_sup = manufacturer_headers[2] + "_" + str(idx) - k_sku = manufacturer_headers[3] + "_" + str(idx) + # Generate column names for this manufacturer + k_man = manufacturer_headers[0] + "_" + str(manufacturer_idx) + k_mpn = manufacturer_headers[1] + "_" + str(manufacturer_idx) try: manufacturer_cols[k_man].update({b_idx: manufacturer_name}) manufacturer_cols[k_mpn].update({b_idx: manufacturer_mpn}) - manufacturer_cols[k_sup].update({b_idx: supplier_name}) - manufacturer_cols[k_sku].update({b_idx: supplier_sku}) except KeyError: manufacturer_cols[k_man] = {b_idx: manufacturer_name} manufacturer_cols[k_mpn] = {b_idx: manufacturer_mpn} - manufacturer_cols[k_sup] = {b_idx: supplier_name} - manufacturer_cols[k_sku] = {b_idx: supplier_sku} + + # Process supplier parts + for supplier_idx, supplier_part in enumerate(manufacturer_part.supplier_parts.all()): + + if supplier_part.supplier: + supplier_name = supplier_part.supplier.name + else: + supplier_name = '' + + supplier_sku = supplier_part.SKU + + # Generate column names for this supplier + k_sup = str(supplier_headers[0]) + "_" + str(manufacturer_idx) + "_" + str(supplier_idx) + k_sku = str(supplier_headers[1]) + "_" + str(manufacturer_idx) + "_" + str(supplier_idx) + + try: + manufacturer_cols[k_sup].update({b_idx: supplier_name}) + manufacturer_cols[k_sku].update({b_idx: supplier_sku}) + except KeyError: + manufacturer_cols[k_sup] = {b_idx: supplier_name} + manufacturer_cols[k_sku] = {b_idx: supplier_sku} # Add manufacturer columns to dataset add_columns_to_dataset(manufacturer_cols, len(bom_items)) @@ -251,7 +262,7 @@ def ExportBom(part, fmt='csv', cascade=False, max_levels=None, parameter_data=Fa # Add manufacturer data to the manufacturer columns - # Generate column names for this supplier + # Generate column names for this manufacturer k_man = manufacturer_headers[0] + "_" + str(idx) k_mpn = manufacturer_headers[1] + "_" + str(idx) From 0bb2507dd6a412fa7f6c481f2e1e6b6fead54c8b Mon Sep 17 00:00:00 2001 From: eeintech Date: Wed, 7 Apr 2021 14:02:50 -0400 Subject: [PATCH 036/116] Added manufacturer part deletion warning when deleting a part --- .../part/templates/part/partial_delete.html | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/InvenTree/part/templates/part/partial_delete.html b/InvenTree/part/templates/part/partial_delete.html index 7b51bf2e89..11910eec66 100644 --- a/InvenTree/part/templates/part/partial_delete.html +++ b/InvenTree/part/templates/part/partial_delete.html @@ -1,14 +1,15 @@ {% extends "modal_form.html" %} +{% load i18n %} {% block pre_form_content %}
          - Are you sure you want to delete part '{{ part.full_name }}'? + {% trans "Are you sure you want to delete part" %} '{{ part.full_name }}'?
          {% if part.used_in_count %}
          -

          This part is used in BOMs for {{ part.used_in_count }} other parts. If you delete this part, the BOMs for the following parts will be updated: +

          {% trans "This part is used in BOMs for" %} {{ part.used_in_count }} {% trans "other parts. If you delete this part, the BOMs for the following parts will be updated" %}:

            {% for child in part.used_in.all %}
          • {{ child.part.full_name }} - {{ child.part.description }}
          • @@ -18,7 +19,7 @@ {% if part.stock_items.all|length > 0 %}
            -

            There are {{ part.stock_items.all|length }} stock entries defined for this part. If you delete this part, the following stock entries will also be deleted: +

            {% trans "There are" %} {{ part.stock_items.all|length }} {% trans "stock entries defined for this part. If you delete this part, the following stock entries will also be deleted" %}:

              {% for stock in part.stock_items.all %}
            • {{ stock }}
            • @@ -27,9 +28,20 @@

              {% endif %} +{% if part.manufacturer_parts.all|length > 0 %} +
              +

              {% trans "There are" %} {{ part.manufacturer_parts.all|length }} {% trans "manufacturers defined for this part. If you delete this part, the following manufacturer parts will also be deleted" %}: +

                + {% for spart in part.manufacturer_parts.all %} +
              • {{ spart.manufacturer.name }} - {{ spart.MPN }}
              • + {% endfor %} +
              +

              +{% endif %} + {% if part.supplier_parts.all|length > 0 %}
              -

              There are {{ part.supplier_parts.all|length }} suppliers defined for this part. If you delete this part, the following supplier parts will also be deleted. +

              {% trans "There are" %} {{ part.supplier_parts.all|length }} {% trans "suppliers defined for this part. If you delete this part, the following supplier parts will also be deleted" %}:

                {% for spart in part.supplier_parts.all %}
              • {{ spart.supplier.name }} - {{ spart.SKU }}
              • @@ -40,7 +52,7 @@ {% if part.serials.all|length > 0 %}
                -

                There are {{ part.serials.all|length }} unique parts tracked for '{{ part.full_name }}'. Deleting this part will permanently remove this tracking information.

                +

                {% trans "There are" %} {{ part.serials.all|length }} {% trans "unique parts tracked for" %} '{{ part.full_name }}'. {% trans "Deleting this part will permanently remove this tracking information" %}.

                {% endif %} {% endblock %} \ No newline at end of file From f8d1ee8805cd0548cc5ec69b0f24dc6d2a5ba768 Mon Sep 17 00:00:00 2001 From: eeintech Date: Thu, 8 Apr 2021 13:24:17 -0400 Subject: [PATCH 037/116] Made company description optional --- .../migrations/0035_auto_20210408_1718.py | 18 ++++++++++++++++++ InvenTree/company/models.py | 2 +- .../company/templates/company/detail.html | 2 ++ 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 InvenTree/company/migrations/0035_auto_20210408_1718.py diff --git a/InvenTree/company/migrations/0035_auto_20210408_1718.py b/InvenTree/company/migrations/0035_auto_20210408_1718.py new file mode 100644 index 0000000000..17da23415b --- /dev/null +++ b/InvenTree/company/migrations/0035_auto_20210408_1718.py @@ -0,0 +1,18 @@ +# Generated by Django 3.0.7 on 2021-04-08 17:18 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('company', '0034_supplierpart_update'), + ] + + operations = [ + migrations.AlterField( + model_name='company', + name='description', + field=models.CharField(blank=True, help_text='Description of the company', max_length=500, verbose_name='Company description'), + ), + ] diff --git a/InvenTree/company/models.py b/InvenTree/company/models.py index 58a26498ba..dd68c976fd 100644 --- a/InvenTree/company/models.py +++ b/InvenTree/company/models.py @@ -97,7 +97,7 @@ class Company(models.Model): help_text=_('Company name'), verbose_name=_('Company name')) - description = models.CharField(max_length=500, verbose_name=_('Company description'), help_text=_('Description of the company')) + description = models.CharField(max_length=500, blank=True, verbose_name=_('Company description'), help_text=_('Description of the company')) website = models.URLField(blank=True, verbose_name=_('Website'), help_text=_('Company website URL')) diff --git a/InvenTree/company/templates/company/detail.html b/InvenTree/company/templates/company/detail.html index b803fc5852..8e41b2d639 100644 --- a/InvenTree/company/templates/company/detail.html +++ b/InvenTree/company/templates/company/detail.html @@ -21,11 +21,13 @@ {% trans "Company Name" %} {{ company.name }} + {% if company.description %} {% trans "Description" %} {{ company.description }} + {% endif %} {% trans "Website" %} From 1e6c6c678f33c94a7ee05d9d13767369a81ecf69 Mon Sep 17 00:00:00 2001 From: eeintech Date: Tue, 13 Apr 2021 10:25:53 -0400 Subject: [PATCH 038/116] Split supplier part update migration and added reverse method for manufacturer data --- .../migrations/0035_supplierpart_update_1.py | 18 +++++++ ...pdate.py => 0036_supplierpart_update_2.py} | 49 ++++++++++++------- .../migrations/0037_supplierpart_update_3.py | 21 ++++++++ InvenTree/company/test_migrations.py | 4 +- 4 files changed, 73 insertions(+), 19 deletions(-) create mode 100644 InvenTree/company/migrations/0035_supplierpart_update_1.py rename InvenTree/company/migrations/{0035_supplierpart_update.py => 0036_supplierpart_update_2.py} (69%) create mode 100644 InvenTree/company/migrations/0037_supplierpart_update_3.py diff --git a/InvenTree/company/migrations/0035_supplierpart_update_1.py b/InvenTree/company/migrations/0035_supplierpart_update_1.py new file mode 100644 index 0000000000..657ae2464c --- /dev/null +++ b/InvenTree/company/migrations/0035_supplierpart_update_1.py @@ -0,0 +1,18 @@ +import InvenTree.fields +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('company', '0034_manufacturerpart'), + ] + + operations = [ + migrations.AddField( + model_name='supplierpart', + name='manufacturer_part', + field=models.ForeignKey(blank=True, help_text='Select manufacturer part', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='supplier_parts', to='company.ManufacturerPart', verbose_name='Manufacturer Part'), + ), + ] diff --git a/InvenTree/company/migrations/0035_supplierpart_update.py b/InvenTree/company/migrations/0036_supplierpart_update_2.py similarity index 69% rename from InvenTree/company/migrations/0035_supplierpart_update.py rename to InvenTree/company/migrations/0036_supplierpart_update_2.py index 1fc14abf1f..52a470be92 100644 --- a/InvenTree/company/migrations/0035_supplierpart_update.py +++ b/InvenTree/company/migrations/0036_supplierpart_update_2.py @@ -11,7 +11,7 @@ def supplierpart_make_manufacturer_parts(apps, schema_editor): supplier_parts = SupplierPart.objects.all() if supplier_parts: - print(f'\nCreating Manufacturer parts\n{"-"*10}') + print(f'\nCreating ManufacturerPart Objects\n{"-"*10}') for supplier_part in supplier_parts: print(f'{supplier_part.supplier.name[:15].ljust(15)} | {supplier_part.SKU[:15].ljust(15)}\t', end='') @@ -67,29 +67,44 @@ def supplierpart_make_manufacturer_parts(apps, schema_editor): print(f'{"-"*10}\nDone\n') +def supplierpart_populate_manufacturer_info(apps, schema_editor): + Part = apps.get_model('part', 'Part') + ManufacturerPart = apps.get_model('company', 'ManufacturerPart') + SupplierPart = apps.get_model('company', 'SupplierPart') + + supplier_parts = SupplierPart.objects.all() + + if supplier_parts: + print(f'\nSupplierPart: Populating Manufacturer Information\n{"-"*10}') + for supplier_part in supplier_parts: + print(f'{supplier_part.supplier.name[:15].ljust(15)} | {supplier_part.SKU[:15].ljust(15)}\t', end='') + + manufacturer_part = supplier_part.manufacturer_part + + if manufacturer_part: + if manufacturer_part.manufacturer: + supplier_part.manufacturer = manufacturer_part.manufacturer + + if manufacturer_part.MPN: + supplier_part.MPN = manufacturer_part.MPN + + supplier_part.save() + + print(f'[SUCCESS: UPDATED MANUFACTURER INFO]') + else: + print(f'[IGNORED: NO MANUFACTURER PART]') + + print(f'{"-"*10}\nDone\n') + class Migration(migrations.Migration): dependencies = [ - ('company', '0033_auto_20210410_1528'), - ('company', '0034_manufacturerpart'), + ('company', '0035_supplierpart_update_1'), ] operations = [ - migrations.AddField( - model_name='supplierpart', - name='manufacturer_part', - field=models.ForeignKey(blank=True, help_text='Select manufacturer part', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='supplier_parts', to='company.ManufacturerPart', verbose_name='Manufacturer Part'), - ), # Make new ManufacturerPart with SupplierPart "manufacturer" and "MPN" # fields, then link it to the new SupplierPart "manufacturer_part" field - migrations.RunPython(supplierpart_make_manufacturer_parts), - migrations.RemoveField( - model_name='supplierpart', - name='MPN', - ), - migrations.RemoveField( - model_name='supplierpart', - name='manufacturer', - ), + migrations.RunPython(supplierpart_make_manufacturer_parts, reverse_code=supplierpart_populate_manufacturer_info), ] diff --git a/InvenTree/company/migrations/0037_supplierpart_update_3.py b/InvenTree/company/migrations/0037_supplierpart_update_3.py new file mode 100644 index 0000000000..e3384be513 --- /dev/null +++ b/InvenTree/company/migrations/0037_supplierpart_update_3.py @@ -0,0 +1,21 @@ +import InvenTree.fields +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('company', '0036_supplierpart_update_2'), + ] + + operations = [ + migrations.RemoveField( + model_name='supplierpart', + name='MPN', + ), + migrations.RemoveField( + model_name='supplierpart', + name='manufacturer', + ), + ] diff --git a/InvenTree/company/test_migrations.py b/InvenTree/company/test_migrations.py index 5a90bef68e..bf6e212f7a 100644 --- a/InvenTree/company/test_migrations.py +++ b/InvenTree/company/test_migrations.py @@ -109,11 +109,11 @@ class TestManufacturerField(MigratorTestCase): class TestManufacturerPart(MigratorTestCase): """ - Tests for migration 0034 and 0035 which added and transitioned to the ManufacturerPart model + Tests for migration 0034-0037 which added and transitioned to the ManufacturerPart model """ migrate_from = ('company', '0033_auto_20210410_1528') - migrate_to = ('company', '0035_supplierpart_update') + migrate_to = ('company', '0037_supplierpart_update_3') def prepare(self): """ From 73bcacc2d854677e4b7de29d86468349110b0799 Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 14 Apr 2021 12:23:51 +0200 Subject: [PATCH 039/116] added tranlation strings --- InvenTree/locale/de/LC_MESSAGES/django.po | 128 ++++++++++++++++++---- InvenTree/locale/en/LC_MESSAGES/django.po | 92 ++++++++++++---- InvenTree/locale/es/LC_MESSAGES/django.po | 92 ++++++++++++---- 3 files changed, 250 insertions(+), 62 deletions(-) diff --git a/InvenTree/locale/de/LC_MESSAGES/django.po b/InvenTree/locale/de/LC_MESSAGES/django.po index e5368acac8..226859fee6 100644 --- a/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/InvenTree/locale/de/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-11 22:07+0000\n" +"POT-Creation-Date: 2021-04-14 09:06+0000\n" "PO-Revision-Date: 2021-03-28 17:47+0200\n" "Last-Translator: Andreas Kaiser , Matthias " "MAIR\n" @@ -190,11 +190,15 @@ msgstr "Polnisch" msgid "Turkish" msgstr "Türkisch" -#: InvenTree/status.py:57 +#: InvenTree/status.py:84 msgid "Background worker check failed" msgstr "Hintergrund-Prozess-Kontrolle fehlgeschlagen" -#: InvenTree/status.py:60 +#: InvenTree/status.py:88 +msgid "Email backend not configured" +msgstr "" + +#: InvenTree/status.py:91 msgid "InvenTree system health checks failed" msgstr "InvenTree Status-Überprüfung fehlgeschlagen" @@ -2052,14 +2056,14 @@ msgstr "Zulieferer-Teile" #: part/templates/part/category_partlist.html:10 #: templates/InvenTree/index.html:96 templates/InvenTree/search.html:113 #: templates/InvenTree/settings/tabs.html:25 templates/navbar.html:23 -#: templates/stats.html:48 templates/stats.html:57 users/models.py:38 +#: templates/stats.html:59 templates/stats.html:68 users/models.py:38 msgid "Parts" msgstr "Teile" #: company/templates/company/navbar.html:27 part/templates/part/navbar.html:33 #: stock/templates/stock/location.html:100 #: stock/templates/stock/location.html:115 templates/InvenTree/search.html:182 -#: templates/stats.html:61 templates/stats.html:70 users/models.py:40 +#: templates/stats.html:72 templates/stats.html:81 users/models.py:40 msgid "Stock Items" msgstr "BestandsObjekte" @@ -3274,7 +3278,7 @@ msgstr "Teil-Kategorie" #: part/models.py:83 part/templates/part/category.html:19 #: part/templates/part/category.html:90 part/templates/part/category.html:141 -#: templates/InvenTree/search.html:126 templates/stats.html:52 +#: templates/InvenTree/search.html:126 templates/stats.html:63 #: users/models.py:37 msgid "Part Categories" msgstr "Teil-Kategorien" @@ -5333,7 +5337,7 @@ msgid "Stock Details" msgstr "Objekt-Details" #: stock/templates/stock/location.html:110 templates/InvenTree/search.html:263 -#: templates/stats.html:65 users/models.py:39 +#: templates/stats.html:76 users/models.py:39 msgid "Stock Locations" msgstr "Bestand-Lagerorte" @@ -6792,7 +6796,7 @@ msgstr "Barcode scannen" msgid "Admin" msgstr "Admin" -#: templates/navbar.html:73 templates/registration/logout.html:5 +#: templates/navbar.html:73 msgid "Logout" msgstr "Ausloggen" @@ -6808,6 +6812,18 @@ msgstr "Über InvenBaum" msgid "QR data not provided" msgstr "QR Daten nicht angegeben" +#: templates/registration/logged_out.html:50 +msgid "You have been logged out" +msgstr "Sie wurden abgemeldet" + +#: templates/registration/logged_out.html:51 +#: templates/registration/password_reset_complete.html:51 +#: templates/registration/password_reset_done.html:58 +#, fuzzy +#| msgid "Returned to location" +msgid "Return to login screen" +msgstr "zurück ins Lager" + #: templates/registration/login.html:64 msgid "Enter username" msgstr "Benutzername eingeben" @@ -6820,17 +6836,61 @@ msgstr "Passwort" msgid "Username / password combination is incorrect" msgstr "Benutzername / Passwort Kombination ist falsch" -#: templates/registration/logout.html:6 -msgid "You have been logged out" -msgstr "Sie wurden abgemeldet" +#: templates/registration/login.html:95 +#: templates/registration/password_reset_form.html:51 +#, fuzzy +#| msgid "Enter password" +msgid "Forgotten your password?" +msgstr "Passwort eingeben" -#: templates/registration/logout.html:7 -msgid "Click" -msgstr "Klick" +#: templates/registration/login.html:95 +msgid "Click here to reset" +msgstr "" -#: templates/registration/logout.html:7 -msgid "here to log in

                " -msgstr "hier zum abmelden

                " +#: templates/registration/password_reset_complete.html:50 +#, fuzzy +#| msgid "Purchase order completed" +msgid "Password reset complete" +msgstr "Bestellung als vollständig markieren" + +#: templates/registration/password_reset_confirm.html:52 +#: templates/registration/password_reset_confirm.html:56 +#, fuzzy +#| msgid "Change Password" +msgid "Change password" +msgstr "Passwort ändern" + +#: templates/registration/password_reset_confirm.html:60 +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +#: templates/registration/password_reset_done.html:51 +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +#: templates/registration/password_reset_done.html:54 +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#: templates/registration/password_reset_form.html:52 +#, fuzzy +#| msgid "Contact email address" +msgid "Enter your email address below." +msgstr "Kontakt-Email" + +#: templates/registration/password_reset_form.html:53 +msgid "An email will be sent with password reset instructions." +msgstr "" + +#: templates/registration/password_reset_form.html:58 +msgid "Send email" +msgstr "" #: templates/stats.html:9 msgid "Server" @@ -6852,17 +6912,25 @@ msgstr "Gesund" msgid "Issues detected" msgstr "Probleme erkannt" -#: templates/stats.html:30 +#: templates/stats.html:31 msgid "Background Worker" msgstr "Hintergrund-Prozess" -#: templates/stats.html:33 -msgid "Operational" -msgstr "Betriebsbereit" +#: templates/stats.html:34 +#, fuzzy +#| msgid "Background Worker" +msgid "Background worker not running" +msgstr "Hintergrund-Prozess" -#: templates/stats.html:35 -msgid "Not running" -msgstr "Läuft nicht" +#: templates/stats.html:42 +#, fuzzy +#| msgid "Part Settings" +msgid "Email Settings" +msgstr "Teil-Einstellungen" + +#: templates/stats.html:45 +msgid "Email settings not configured" +msgstr "" #: templates/stock_table.html:14 msgid "Export Stock Information" @@ -6980,6 +7048,18 @@ msgstr "Berechtigungen Einträge zu ändern" msgid "Permission to delete items" msgstr "Berechtigung Einträge zu löschen" +#~ msgid "Click" +#~ msgstr "Klick" + +#~ msgid "here to log in

                " +#~ msgstr "hier zum abmelden

                " + +#~ msgid "Operational" +#~ msgstr "Betriebsbereit" + +#~ msgid "Not running" +#~ msgstr "Läuft nicht" + #~ msgid "InvenTree server issues detected" #~ msgstr "InvenTree Server Fehler aufgetreten" diff --git a/InvenTree/locale/en/LC_MESSAGES/django.po b/InvenTree/locale/en/LC_MESSAGES/django.po index fb69f99234..d8aa2b7469 100644 --- a/InvenTree/locale/en/LC_MESSAGES/django.po +++ b/InvenTree/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-11 22:07+0000\n" +"POT-Creation-Date: 2021-04-14 09:06+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -188,11 +188,15 @@ msgstr "" msgid "Turkish" msgstr "" -#: InvenTree/status.py:57 +#: InvenTree/status.py:84 msgid "Background worker check failed" msgstr "" -#: InvenTree/status.py:60 +#: InvenTree/status.py:88 +msgid "Email backend not configured" +msgstr "" + +#: InvenTree/status.py:91 msgid "InvenTree system health checks failed" msgstr "" @@ -2029,14 +2033,14 @@ msgstr "" #: part/templates/part/category_partlist.html:10 #: templates/InvenTree/index.html:96 templates/InvenTree/search.html:113 #: templates/InvenTree/settings/tabs.html:25 templates/navbar.html:23 -#: templates/stats.html:48 templates/stats.html:57 users/models.py:38 +#: templates/stats.html:59 templates/stats.html:68 users/models.py:38 msgid "Parts" msgstr "" #: company/templates/company/navbar.html:27 part/templates/part/navbar.html:33 #: stock/templates/stock/location.html:100 #: stock/templates/stock/location.html:115 templates/InvenTree/search.html:182 -#: templates/stats.html:61 templates/stats.html:70 users/models.py:40 +#: templates/stats.html:72 templates/stats.html:81 users/models.py:40 msgid "Stock Items" msgstr "" @@ -3242,7 +3246,7 @@ msgstr "" #: part/models.py:83 part/templates/part/category.html:19 #: part/templates/part/category.html:90 part/templates/part/category.html:141 -#: templates/InvenTree/search.html:126 templates/stats.html:52 +#: templates/InvenTree/search.html:126 templates/stats.html:63 #: users/models.py:37 msgid "Part Categories" msgstr "" @@ -5266,7 +5270,7 @@ msgid "Stock Details" msgstr "" #: stock/templates/stock/location.html:110 templates/InvenTree/search.html:263 -#: templates/stats.html:65 users/models.py:39 +#: templates/stats.html:76 users/models.py:39 msgid "Stock Locations" msgstr "" @@ -6717,7 +6721,7 @@ msgstr "" msgid "Admin" msgstr "" -#: templates/navbar.html:73 templates/registration/logout.html:5 +#: templates/navbar.html:73 msgid "Logout" msgstr "" @@ -6733,6 +6737,16 @@ msgstr "" msgid "QR data not provided" msgstr "" +#: templates/registration/logged_out.html:50 +msgid "You have been logged out" +msgstr "" + +#: templates/registration/logged_out.html:51 +#: templates/registration/password_reset_complete.html:51 +#: templates/registration/password_reset_done.html:58 +msgid "Return to login screen" +msgstr "" + #: templates/registration/login.html:64 msgid "Enter username" msgstr "" @@ -6745,16 +6759,52 @@ msgstr "" msgid "Username / password combination is incorrect" msgstr "" -#: templates/registration/logout.html:6 -msgid "You have been logged out" +#: templates/registration/login.html:95 +#: templates/registration/password_reset_form.html:51 +msgid "Forgotten your password?" msgstr "" -#: templates/registration/logout.html:7 -msgid "Click" +#: templates/registration/login.html:95 +msgid "Click here to reset" msgstr "" -#: templates/registration/logout.html:7 -msgid "here to log in

                " +#: templates/registration/password_reset_complete.html:50 +msgid "Password reset complete" +msgstr "" + +#: templates/registration/password_reset_confirm.html:52 +#: templates/registration/password_reset_confirm.html:56 +msgid "Change password" +msgstr "" + +#: templates/registration/password_reset_confirm.html:60 +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +#: templates/registration/password_reset_done.html:51 +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +#: templates/registration/password_reset_done.html:54 +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#: templates/registration/password_reset_form.html:52 +msgid "Enter your email address below." +msgstr "" + +#: templates/registration/password_reset_form.html:53 +msgid "An email will be sent with password reset instructions." +msgstr "" + +#: templates/registration/password_reset_form.html:58 +msgid "Send email" msgstr "" #: templates/stats.html:9 @@ -6777,16 +6827,20 @@ msgstr "" msgid "Issues detected" msgstr "" -#: templates/stats.html:30 +#: templates/stats.html:31 msgid "Background Worker" msgstr "" -#: templates/stats.html:33 -msgid "Operational" +#: templates/stats.html:34 +msgid "Background worker not running" msgstr "" -#: templates/stats.html:35 -msgid "Not running" +#: templates/stats.html:42 +msgid "Email Settings" +msgstr "" + +#: templates/stats.html:45 +msgid "Email settings not configured" msgstr "" #: templates/stock_table.html:14 diff --git a/InvenTree/locale/es/LC_MESSAGES/django.po b/InvenTree/locale/es/LC_MESSAGES/django.po index fb69f99234..d8aa2b7469 100644 --- a/InvenTree/locale/es/LC_MESSAGES/django.po +++ b/InvenTree/locale/es/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-11 22:07+0000\n" +"POT-Creation-Date: 2021-04-14 09:06+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -188,11 +188,15 @@ msgstr "" msgid "Turkish" msgstr "" -#: InvenTree/status.py:57 +#: InvenTree/status.py:84 msgid "Background worker check failed" msgstr "" -#: InvenTree/status.py:60 +#: InvenTree/status.py:88 +msgid "Email backend not configured" +msgstr "" + +#: InvenTree/status.py:91 msgid "InvenTree system health checks failed" msgstr "" @@ -2029,14 +2033,14 @@ msgstr "" #: part/templates/part/category_partlist.html:10 #: templates/InvenTree/index.html:96 templates/InvenTree/search.html:113 #: templates/InvenTree/settings/tabs.html:25 templates/navbar.html:23 -#: templates/stats.html:48 templates/stats.html:57 users/models.py:38 +#: templates/stats.html:59 templates/stats.html:68 users/models.py:38 msgid "Parts" msgstr "" #: company/templates/company/navbar.html:27 part/templates/part/navbar.html:33 #: stock/templates/stock/location.html:100 #: stock/templates/stock/location.html:115 templates/InvenTree/search.html:182 -#: templates/stats.html:61 templates/stats.html:70 users/models.py:40 +#: templates/stats.html:72 templates/stats.html:81 users/models.py:40 msgid "Stock Items" msgstr "" @@ -3242,7 +3246,7 @@ msgstr "" #: part/models.py:83 part/templates/part/category.html:19 #: part/templates/part/category.html:90 part/templates/part/category.html:141 -#: templates/InvenTree/search.html:126 templates/stats.html:52 +#: templates/InvenTree/search.html:126 templates/stats.html:63 #: users/models.py:37 msgid "Part Categories" msgstr "" @@ -5266,7 +5270,7 @@ msgid "Stock Details" msgstr "" #: stock/templates/stock/location.html:110 templates/InvenTree/search.html:263 -#: templates/stats.html:65 users/models.py:39 +#: templates/stats.html:76 users/models.py:39 msgid "Stock Locations" msgstr "" @@ -6717,7 +6721,7 @@ msgstr "" msgid "Admin" msgstr "" -#: templates/navbar.html:73 templates/registration/logout.html:5 +#: templates/navbar.html:73 msgid "Logout" msgstr "" @@ -6733,6 +6737,16 @@ msgstr "" msgid "QR data not provided" msgstr "" +#: templates/registration/logged_out.html:50 +msgid "You have been logged out" +msgstr "" + +#: templates/registration/logged_out.html:51 +#: templates/registration/password_reset_complete.html:51 +#: templates/registration/password_reset_done.html:58 +msgid "Return to login screen" +msgstr "" + #: templates/registration/login.html:64 msgid "Enter username" msgstr "" @@ -6745,16 +6759,52 @@ msgstr "" msgid "Username / password combination is incorrect" msgstr "" -#: templates/registration/logout.html:6 -msgid "You have been logged out" +#: templates/registration/login.html:95 +#: templates/registration/password_reset_form.html:51 +msgid "Forgotten your password?" msgstr "" -#: templates/registration/logout.html:7 -msgid "Click" +#: templates/registration/login.html:95 +msgid "Click here to reset" msgstr "" -#: templates/registration/logout.html:7 -msgid "here to log in

                " +#: templates/registration/password_reset_complete.html:50 +msgid "Password reset complete" +msgstr "" + +#: templates/registration/password_reset_confirm.html:52 +#: templates/registration/password_reset_confirm.html:56 +msgid "Change password" +msgstr "" + +#: templates/registration/password_reset_confirm.html:60 +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +#: templates/registration/password_reset_done.html:51 +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +#: templates/registration/password_reset_done.html:54 +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#: templates/registration/password_reset_form.html:52 +msgid "Enter your email address below." +msgstr "" + +#: templates/registration/password_reset_form.html:53 +msgid "An email will be sent with password reset instructions." +msgstr "" + +#: templates/registration/password_reset_form.html:58 +msgid "Send email" msgstr "" #: templates/stats.html:9 @@ -6777,16 +6827,20 @@ msgstr "" msgid "Issues detected" msgstr "" -#: templates/stats.html:30 +#: templates/stats.html:31 msgid "Background Worker" msgstr "" -#: templates/stats.html:33 -msgid "Operational" +#: templates/stats.html:34 +msgid "Background worker not running" msgstr "" -#: templates/stats.html:35 -msgid "Not running" +#: templates/stats.html:42 +msgid "Email Settings" +msgstr "" + +#: templates/stats.html:45 +msgid "Email settings not configured" msgstr "" #: templates/stock_table.html:14 From 1bf72ee335234940ddb74b93a136d344c3115da3 Mon Sep 17 00:00:00 2001 From: eeintech Date: Wed, 14 Apr 2021 16:00:28 -0400 Subject: [PATCH 040/116] Added revision and stock item URL for label creation --- InvenTree/InvenTree/helpers.py | 16 +++++++++++++++- InvenTree/label/models.py | 2 ++ InvenTree/stock/models.py | 2 ++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/InvenTree/InvenTree/helpers.py b/InvenTree/InvenTree/helpers.py index c2441590f5..e5324ba35a 100644 --- a/InvenTree/InvenTree/helpers.py +++ b/InvenTree/InvenTree/helpers.py @@ -280,11 +280,25 @@ def MakeBarcode(object_name, object_pk, object_data={}, **kwargs): json string of the supplied data plus some other data """ + url = kwargs.get('url', True) brief = kwargs.get('brief', True) data = {} - if brief: + if url: + request = object_data.get('request', None) + item_url = object_data.get('item_url', None) + absolute_url = None + + if request and item_url: + absolute_url = request.build_absolute_uri(item_url) + # Return URL (No JSON) + return absolute_url + + if item_url: + # Return URL (No JSON) + return item_url + elif brief: data[object_name] = object_pk else: data['tool'] = 'InvenTree' diff --git a/InvenTree/label/models.py b/InvenTree/label/models.py index 96850f4cb0..5c1b104670 100644 --- a/InvenTree/label/models.py +++ b/InvenTree/label/models.py @@ -253,10 +253,12 @@ class StockItemLabel(LabelTemplate): 'part': stock_item.part, 'name': stock_item.part.full_name, 'ipn': stock_item.part.IPN, + 'revision': stock_item.part.revision, 'quantity': normalize(stock_item.quantity), 'serial': stock_item.serial, 'uid': stock_item.uid, 'qr_data': stock_item.format_barcode(brief=True), + 'qr_url': stock_item.format_barcode(url=True, request=request), 'tests': stock_item.testResultMap() } diff --git a/InvenTree/stock/models.py b/InvenTree/stock/models.py index b57f96d0f7..ed86a807e1 100644 --- a/InvenTree/stock/models.py +++ b/InvenTree/stock/models.py @@ -344,6 +344,8 @@ class StockItem(MPTTModel): "stockitem", self.id, { + "request": kwargs.get('request', None), + "item_url": reverse('stock-item-detail', kwargs={'pk': self.id}), "url": reverse('api-stock-detail', kwargs={'pk': self.id}), }, **kwargs From aa41e3e17d3f29ff0926b36778ce47581703fc83 Mon Sep 17 00:00:00 2001 From: eeintech Date: Wed, 14 Apr 2021 16:24:24 -0400 Subject: [PATCH 041/116] Fixed default url barcode setting --- InvenTree/InvenTree/helpers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InvenTree/InvenTree/helpers.py b/InvenTree/InvenTree/helpers.py index e5324ba35a..6f6953ccb5 100644 --- a/InvenTree/InvenTree/helpers.py +++ b/InvenTree/InvenTree/helpers.py @@ -280,7 +280,7 @@ def MakeBarcode(object_name, object_pk, object_data={}, **kwargs): json string of the supplied data plus some other data """ - url = kwargs.get('url', True) + url = kwargs.get('url', False) brief = kwargs.get('brief', True) data = {} From cfae92e22ba9fda2d4101cb574517497b9c94e09 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 15 Apr 2021 12:15:02 +0200 Subject: [PATCH 042/116] more translated strings for api-titles and filters --- InvenTree/locale/de/LC_MESSAGES/django.po | 50 +++++++++++++++++++---- InvenTree/locale/en/LC_MESSAGES/django.po | 31 +++++++++++--- InvenTree/locale/es/LC_MESSAGES/django.po | 31 +++++++++++--- InvenTree/part/api.py | 3 +- InvenTree/stock/api.py | 2 +- InvenTree/templates/js/filters.js | 8 ++-- InvenTree/templates/js/stock.js | 10 ++--- 7 files changed, 105 insertions(+), 30 deletions(-) diff --git a/InvenTree/locale/de/LC_MESSAGES/django.po b/InvenTree/locale/de/LC_MESSAGES/django.po index 226859fee6..ee34b015ea 100644 --- a/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/InvenTree/locale/de/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-14 09:06+0000\n" +"POT-Creation-Date: 2021-04-15 10:07+0000\n" "PO-Revision-Date: 2021-03-28 17:47+0200\n" "Last-Translator: Andreas Kaiser , Matthias " "MAIR\n" @@ -2049,8 +2049,9 @@ msgid "Supplied Parts" msgstr "Zulieferer-Teile" #: company/templates/company/navbar.html:23 -#: order/templates/order/receive_parts.html:14 part/models.py:322 -#: part/templates/part/cat_link.html:7 part/templates/part/category.html:95 +#: order/templates/order/receive_parts.html:14 part/api.py:40 +#: part/models.py:322 part/templates/part/cat_link.html:7 +#: part/templates/part/category.html:95 #: part/templates/part/category_navbar.html:11 #: part/templates/part/category_navbar.html:14 #: part/templates/part/category_partlist.html:10 @@ -2069,8 +2070,8 @@ msgstr "BestandsObjekte" #: company/templates/company/navbar.html:30 #: company/templates/company/part_navbar.html:14 -#: part/templates/part/navbar.html:36 stock/templates/stock/loc_link.html:7 -#: stock/templates/stock/location.html:29 +#: part/templates/part/navbar.html:36 stock/api.py:51 +#: stock/templates/stock/loc_link.html:7 stock/templates/stock/location.html:29 #: stock/templates/stock/stock_app_base.html:9 #: templates/InvenTree/index.html:127 templates/InvenTree/search.html:180 #: templates/InvenTree/search.html:216 @@ -6141,6 +6142,14 @@ msgstr "Vorlagenteil" msgid "Assembled part" msgstr "Baugruppe" +#: templates/js/filters.js:167 templates/js/filters.js:397 +msgid "true" +msgstr "ja" + +#: templates/js/filters.js:171 templates/js/filters.js:398 +msgid "false" +msgstr "nein" + #: templates/js/filters.js:193 msgid "Select filter" msgstr "Filter auswählen" @@ -6474,6 +6483,22 @@ msgstr "Auftrag zugewiesen" msgid "No stock items matching query" msgstr "Keine zur Anfrage passenden BestandsObjekte" +#: templates/js/stock.js:357 +msgid "items" +msgstr "Teile" + +#: templates/js/stock.js:449 +#, fuzzy +#| msgid "Batch" +msgid "batches" +msgstr "Los" + +#: templates/js/stock.js:476 +#, fuzzy +#| msgid "Allocations" +msgid "locations" +msgstr "Zuweisungen" + #: templates/js/stock.js:478 msgid "Undefined location" msgstr "unbekannter Lagerort" @@ -6657,7 +6682,7 @@ msgstr "Elemente, die in Produktion sind, anzeigen" #: templates/js/table_filters.js:144 msgid "Include Variants" -msgstr "Varianten hinzufügen" +msgstr "Varianten einschließen" #: templates/js/table_filters.js:145 msgid "Include stock items for variant parts" @@ -7048,6 +7073,16 @@ msgstr "Berechtigungen Einträge zu ändern" msgid "Permission to delete items" msgstr "Berechtigung Einträge zu löschen" +#, fuzzy +#~| msgid "Part Pricing" +#~ msgid "Stock Pricing" +#~ msgstr "Teilbepreisung" + +#, fuzzy +#~| msgid "No pricing information is available for this part." +#~ msgid "No stock pricing history is available for this part." +#~ msgstr "Keine Preise für dieses Teil verfügbar" + #~ msgid "Click" #~ msgstr "Klick" @@ -7089,9 +7124,6 @@ msgstr "Berechtigung Einträge zu löschen" #~ msgid "customer" #~ msgstr "Kunde" -#~ msgid "items" -#~ msgstr "Teile" - #~ msgid "Create purchase order" #~ msgstr "Neue Bestellung anlegen" diff --git a/InvenTree/locale/en/LC_MESSAGES/django.po b/InvenTree/locale/en/LC_MESSAGES/django.po index d8aa2b7469..cba1555d33 100644 --- a/InvenTree/locale/en/LC_MESSAGES/django.po +++ b/InvenTree/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-14 09:06+0000\n" +"POT-Creation-Date: 2021-04-15 10:07+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -2026,8 +2026,9 @@ msgid "Supplied Parts" msgstr "" #: company/templates/company/navbar.html:23 -#: order/templates/order/receive_parts.html:14 part/models.py:322 -#: part/templates/part/cat_link.html:7 part/templates/part/category.html:95 +#: order/templates/order/receive_parts.html:14 part/api.py:40 +#: part/models.py:322 part/templates/part/cat_link.html:7 +#: part/templates/part/category.html:95 #: part/templates/part/category_navbar.html:11 #: part/templates/part/category_navbar.html:14 #: part/templates/part/category_partlist.html:10 @@ -2046,8 +2047,8 @@ msgstr "" #: company/templates/company/navbar.html:30 #: company/templates/company/part_navbar.html:14 -#: part/templates/part/navbar.html:36 stock/templates/stock/loc_link.html:7 -#: stock/templates/stock/location.html:29 +#: part/templates/part/navbar.html:36 stock/api.py:51 +#: stock/templates/stock/loc_link.html:7 stock/templates/stock/location.html:29 #: stock/templates/stock/stock_app_base.html:9 #: templates/InvenTree/index.html:127 templates/InvenTree/search.html:180 #: templates/InvenTree/search.html:216 @@ -6067,6 +6068,14 @@ msgstr "" msgid "Assembled part" msgstr "" +#: templates/js/filters.js:167 templates/js/filters.js:397 +msgid "true" +msgstr "" + +#: templates/js/filters.js:171 templates/js/filters.js:398 +msgid "false" +msgstr "" + #: templates/js/filters.js:193 msgid "Select filter" msgstr "" @@ -6399,6 +6408,18 @@ msgstr "" msgid "No stock items matching query" msgstr "" +#: templates/js/stock.js:357 +msgid "items" +msgstr "" + +#: templates/js/stock.js:449 +msgid "batches" +msgstr "" + +#: templates/js/stock.js:476 +msgid "locations" +msgstr "" + #: templates/js/stock.js:478 msgid "Undefined location" msgstr "" diff --git a/InvenTree/locale/es/LC_MESSAGES/django.po b/InvenTree/locale/es/LC_MESSAGES/django.po index d8aa2b7469..cba1555d33 100644 --- a/InvenTree/locale/es/LC_MESSAGES/django.po +++ b/InvenTree/locale/es/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-14 09:06+0000\n" +"POT-Creation-Date: 2021-04-15 10:07+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -2026,8 +2026,9 @@ msgid "Supplied Parts" msgstr "" #: company/templates/company/navbar.html:23 -#: order/templates/order/receive_parts.html:14 part/models.py:322 -#: part/templates/part/cat_link.html:7 part/templates/part/category.html:95 +#: order/templates/order/receive_parts.html:14 part/api.py:40 +#: part/models.py:322 part/templates/part/cat_link.html:7 +#: part/templates/part/category.html:95 #: part/templates/part/category_navbar.html:11 #: part/templates/part/category_navbar.html:14 #: part/templates/part/category_partlist.html:10 @@ -2046,8 +2047,8 @@ msgstr "" #: company/templates/company/navbar.html:30 #: company/templates/company/part_navbar.html:14 -#: part/templates/part/navbar.html:36 stock/templates/stock/loc_link.html:7 -#: stock/templates/stock/location.html:29 +#: part/templates/part/navbar.html:36 stock/api.py:51 +#: stock/templates/stock/loc_link.html:7 stock/templates/stock/location.html:29 #: stock/templates/stock/stock_app_base.html:9 #: templates/InvenTree/index.html:127 templates/InvenTree/search.html:180 #: templates/InvenTree/search.html:216 @@ -6067,6 +6068,14 @@ msgstr "" msgid "Assembled part" msgstr "" +#: templates/js/filters.js:167 templates/js/filters.js:397 +msgid "true" +msgstr "" + +#: templates/js/filters.js:171 templates/js/filters.js:398 +msgid "false" +msgstr "" + #: templates/js/filters.js:193 msgid "Select filter" msgstr "" @@ -6399,6 +6408,18 @@ msgstr "" msgid "No stock items matching query" msgstr "" +#: templates/js/stock.js:357 +msgid "items" +msgstr "" + +#: templates/js/stock.js:449 +msgid "batches" +msgstr "" + +#: templates/js/stock.js:476 +msgid "locations" +msgstr "" + #: templates/js/stock.js:478 msgid "Undefined location" msgstr "" diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py index 54222b7e67..ab946b7dcb 100644 --- a/InvenTree/part/api.py +++ b/InvenTree/part/api.py @@ -8,6 +8,7 @@ from __future__ import unicode_literals from django_filters.rest_framework import DjangoFilterBackend from django.http import JsonResponse from django.db.models import Q, F, Count, Prefetch, Sum +from django.utils.translation import ugettext_lazy as _ from rest_framework import status from rest_framework.response import Response @@ -36,7 +37,7 @@ from InvenTree.status_codes import BuildStatus class PartCategoryTree(TreeSerializer): - title = "Parts" + title = _("Parts") model = PartCategory queryset = PartCategory.objects.all() diff --git a/InvenTree/stock/api.py b/InvenTree/stock/api.py index 7bad9df83e..e4ebe6eaae 100644 --- a/InvenTree/stock/api.py +++ b/InvenTree/stock/api.py @@ -48,7 +48,7 @@ from rest_framework import generics, filters, permissions class StockCategoryTree(TreeSerializer): - title = 'Stock' + title = _('Stock') model = StockLocation @property diff --git a/InvenTree/templates/js/filters.js b/InvenTree/templates/js/filters.js index 01b74763e0..612af8e03c 100644 --- a/InvenTree/templates/js/filters.js +++ b/InvenTree/templates/js/filters.js @@ -164,11 +164,11 @@ function getFilterOptionList(tableKey, filterKey) { return { '1': { key: '1', - value: 'true', + value: '{% trans "true" %}', }, '0': { key: '0', - value: 'false', + value: '{% trans "false" %}', }, }; } else if ('options' in settings) { @@ -394,8 +394,8 @@ function getFilterOptionValue(tableKey, filterKey, valueKey) { // Lookup for boolean options if (filter.type == 'bool') { - if (value == '1') return 'true'; - if (value == '0') return 'false'; + if (value == '1') return '{% trans "true" %}'; + if (value == '0') return '{% trans "false" %}'; return value; } diff --git a/InvenTree/templates/js/stock.js b/InvenTree/templates/js/stock.js index b163bc89f3..33f2dae8d6 100644 --- a/InvenTree/templates/js/stock.js +++ b/InvenTree/templates/js/stock.js @@ -354,7 +354,7 @@ function loadStockTable(table, options) { var html = imageHoverIcon(row.part_detail.thumbnail); html += row.part_detail.full_name; - html += ` (${data.length} items)`; + html += ` (${data.length} {% trans "items" %})`; html += makePartIcons(row.part_detail); @@ -446,7 +446,7 @@ function loadStockTable(table, options) { }); if (batches.length > 1) { - return "" + batches.length + " batches"; + return "" + batches.length + " {% trans 'batches' %}"; } else if (batches.length == 1) { if (batches[0]) { return batches[0]; @@ -473,9 +473,9 @@ function loadStockTable(table, options) { // Single location, easy! return locations[0]; } else if (locations.length > 1) { - return "In " + locations.length + " locations"; + return "In " + locations.length + " {% trans 'locations' %}"; } else { - return "{% trans "Undefined location" %}"; + return "{% trans 'Undefined location' %}"; } } else if (field == 'notes') { var notes = []; @@ -1219,7 +1219,7 @@ function loadInstalledInTable(table, options) { // Add some buttons yo! html += `
                `; - html += makeIconButton('fa-unlink', 'button-uninstall', pk, "{% trans "Uninstall stock item" %}"); + html += makeIconButton('fa-unlink', 'button-uninstall', pk, "{% trans 'Uninstall stock item' %}"); html += `
                `; From d49977bed3eb0c90871ca6cf82cc1f0f54e250e9 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 15 Apr 2021 14:51:11 +0200 Subject: [PATCH 043/116] initial implementation as described in #1463 --- InvenTree/InvenTree/version.py | 8 ++++++++ InvenTree/common/models.py | 7 +++++++ InvenTree/part/templatetags/inventree_extras.py | 6 ++++++ InvenTree/templates/InvenTree/index.html | 5 +++-- 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/InvenTree/InvenTree/version.py b/InvenTree/InvenTree/version.py index b79323e1e7..6c0a524559 100644 --- a/InvenTree/InvenTree/version.py +++ b/InvenTree/InvenTree/version.py @@ -19,6 +19,14 @@ def inventreeInstanceName(): return common.models.InvenTreeSetting.get_setting("INVENTREE_INSTANCE", "") +def inventreeInstanceTitle(): + """ Returns the InstanceTitle for the current database """ + if common.models.InvenTreeSetting.get_setting("INVENTREE_INSTANCE_TITLE", False): + return common.models.InvenTreeSetting.get_setting("INVENTREE_INSTANCE", "") + else: + return 'InvenTree' + + def inventreeVersion(): """ Returns the InvenTree version string """ return INVENTREE_SW_VERSION diff --git a/InvenTree/common/models.py b/InvenTree/common/models.py index 79580aabd9..2f82df7d92 100644 --- a/InvenTree/common/models.py +++ b/InvenTree/common/models.py @@ -58,6 +58,13 @@ class InvenTreeSetting(models.Model): 'description': _('String descriptor for the server instance'), }, + 'INVENTREE_INSTANCE_TITLE': { + 'name': _('Use Instance Name'), + 'description': _('Use the instance name in the Titel-Bar'), + 'validator': bool, + 'default': False, + }, + 'INVENTREE_COMPANY_NAME': { 'name': _('Company name'), 'description': _('Internal company name'), diff --git a/InvenTree/part/templatetags/inventree_extras.py b/InvenTree/part/templatetags/inventree_extras.py index c0dc15c2b0..868c09696a 100644 --- a/InvenTree/part/templatetags/inventree_extras.py +++ b/InvenTree/part/templatetags/inventree_extras.py @@ -71,6 +71,12 @@ def inventree_instance_name(*args, **kwargs): return version.inventreeInstanceName() +@register.simple_tag() +def inventree_title(*args, **kwargs): + """ Return the title for the current instance - respecting the settings """ + return version.inventreeInstanceTitle() + + @register.simple_tag() def inventree_version(*args, **kwargs): """ Return InvenTree version string """ diff --git a/InvenTree/templates/InvenTree/index.html b/InvenTree/templates/InvenTree/index.html index f7154e5fbb..9b18e2d94c 100644 --- a/InvenTree/templates/InvenTree/index.html +++ b/InvenTree/templates/InvenTree/index.html @@ -2,12 +2,13 @@ {% load i18n %} {% load static %} {% load inventree_extras %} + {% block page_title %} -InvenTree | {% trans "Index" %} +{% inventree_title %} | {% trans "Index" %} {% endblock %} {% block content %} -

                InvenTree

                +

                {% inventree_title %}


                From 098ac0c46114481a7d54272c9c57e7a2f212a969 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 15 Apr 2021 14:52:08 +0200 Subject: [PATCH 044/116] using feature in views --- InvenTree/build/templates/build/allocate.html | 2 +- InvenTree/build/templates/build/build_base.html | 3 ++- InvenTree/build/templates/build/index.html | 2 +- InvenTree/company/templates/company/company_base.html | 2 +- InvenTree/company/templates/company/index.html | 3 ++- .../company/templates/company/supplier_part_base.html | 3 ++- InvenTree/order/templates/order/order_base.html | 2 +- InvenTree/order/templates/order/purchase_orders.html | 2 +- InvenTree/order/templates/order/sales_order_base.html | 2 +- InvenTree/order/templates/order/sales_orders.html | 2 +- InvenTree/part/templates/part/part_app_base.html | 7 ++++--- InvenTree/stock/templates/stock/item_base.html | 2 +- InvenTree/stock/templates/stock/stock_app_base.html | 5 +++-- InvenTree/templates/InvenTree/search.html | 3 ++- InvenTree/templates/InvenTree/settings/global.html | 1 + InvenTree/templates/InvenTree/settings/settings.html | 3 ++- InvenTree/templates/base.html | 2 +- InvenTree/templates/registration/logged_out.html | 7 ++++--- InvenTree/templates/registration/login.html | 5 +++-- .../templates/registration/password_reset_complete.html | 7 ++++--- .../templates/registration/password_reset_confirm.html | 7 ++++--- InvenTree/templates/registration/password_reset_done.html | 7 ++++--- InvenTree/templates/registration/password_reset_form.html | 7 ++++--- 23 files changed, 50 insertions(+), 36 deletions(-) diff --git a/InvenTree/build/templates/build/allocate.html b/InvenTree/build/templates/build/allocate.html index 6efde49308..1b66f17d0d 100644 --- a/InvenTree/build/templates/build/allocate.html +++ b/InvenTree/build/templates/build/allocate.html @@ -4,7 +4,7 @@ {% load inventree_extras %} {% block page_title %} -InvenTree | Allocate Parts +{% inventree_title %} | {% trans "Allocate Parts" %} {% endblock %} {% block menubar %} diff --git a/InvenTree/build/templates/build/build_base.html b/InvenTree/build/templates/build/build_base.html index a8e5e53377..39fb099eda 100644 --- a/InvenTree/build/templates/build/build_base.html +++ b/InvenTree/build/templates/build/build_base.html @@ -3,9 +3,10 @@ {% load static %} {% load i18n %} {% load status_codes %} +{% load inventree_extras %} {% block page_title %} -InvenTree | {% trans "Build Order" %} - {{ build }} +{% inventree_title %} | {% trans "Build Order" %} - {{ build }} {% endblock %} {% block pre_content %} diff --git a/InvenTree/build/templates/build/index.html b/InvenTree/build/templates/build/index.html index f710928ee7..fbed17bfa3 100644 --- a/InvenTree/build/templates/build/index.html +++ b/InvenTree/build/templates/build/index.html @@ -5,7 +5,7 @@ {% load i18n %} {% block page_title %} -InvenTree | {% trans "Build Orders" %} +{% inventree_title %} | {% trans "Build Orders" %} {% endblock %} {% block content %} diff --git a/InvenTree/company/templates/company/company_base.html b/InvenTree/company/templates/company/company_base.html index 236cc58981..1825132b0e 100644 --- a/InvenTree/company/templates/company/company_base.html +++ b/InvenTree/company/templates/company/company_base.html @@ -6,7 +6,7 @@ {% block page_title %} -InvenTree | {% trans "Company" %} - {{ company.name }} +{% inventree_title %} | {% trans "Company" %} - {{ company.name }} {% endblock %} diff --git a/InvenTree/company/templates/company/index.html b/InvenTree/company/templates/company/index.html index ca2fa619d9..3a3168f24e 100644 --- a/InvenTree/company/templates/company/index.html +++ b/InvenTree/company/templates/company/index.html @@ -2,9 +2,10 @@ {% load static %} {% load i18n %} +{% load inventree_extras %} {% block page_title %} -InvenTree | {% trans "Supplier List" %} +{% inventree_title %} | {% trans "Supplier List" %} {% endblock %} {% block content %} diff --git a/InvenTree/company/templates/company/supplier_part_base.html b/InvenTree/company/templates/company/supplier_part_base.html index 00de1a9fb3..ce61fcfcba 100644 --- a/InvenTree/company/templates/company/supplier_part_base.html +++ b/InvenTree/company/templates/company/supplier_part_base.html @@ -1,9 +1,10 @@ {% extends "two_column.html" %} {% load static %} {% load i18n %} +{% load inventree_extras %} {% block page_title %} -InvenTree | {% trans "Supplier Part" %} +{% inventree_title %} | {% trans "Supplier Part" %} {% endblock %} {% block thumbnail %} diff --git a/InvenTree/order/templates/order/order_base.html b/InvenTree/order/templates/order/order_base.html index 130ebd4590..5dfc30796f 100644 --- a/InvenTree/order/templates/order/order_base.html +++ b/InvenTree/order/templates/order/order_base.html @@ -6,7 +6,7 @@ {% load status_codes %} {% block page_title %} -InvenTree | {% trans "Purchase Order" %} +{% inventree_title %} | {% trans "Purchase Order" %} {% endblock %} {% block thumbnail %} diff --git a/InvenTree/order/templates/order/purchase_orders.html b/InvenTree/order/templates/order/purchase_orders.html index 7256a1c499..9d15449abf 100644 --- a/InvenTree/order/templates/order/purchase_orders.html +++ b/InvenTree/order/templates/order/purchase_orders.html @@ -5,7 +5,7 @@ {% load i18n %} {% block page_title %} -InvenTree | {% trans "Purchase Orders" %} +{% inventree_title %} | {% trans "Purchase Orders" %} {% endblock %} {% block content %} diff --git a/InvenTree/order/templates/order/sales_order_base.html b/InvenTree/order/templates/order/sales_order_base.html index dfab8d1ae7..f0a71b8fec 100644 --- a/InvenTree/order/templates/order/sales_order_base.html +++ b/InvenTree/order/templates/order/sales_order_base.html @@ -6,7 +6,7 @@ {% load status_codes %} {% block page_title %} -InvenTree | {% trans "Sales Order" %} +{% inventree_title %} | {% trans "Sales Order" %} {% endblock %} {% block pre_content %} diff --git a/InvenTree/order/templates/order/sales_orders.html b/InvenTree/order/templates/order/sales_orders.html index bcaf6a019c..8ae538ffce 100644 --- a/InvenTree/order/templates/order/sales_orders.html +++ b/InvenTree/order/templates/order/sales_orders.html @@ -5,7 +5,7 @@ {% load i18n %} {% block page_title %} -InvenTree | {% trans "Sales Orders" %} +{% inventree_title %} | {% trans "Sales Orders" %} {% endblock %} {% block content %} diff --git a/InvenTree/part/templates/part/part_app_base.html b/InvenTree/part/templates/part/part_app_base.html index 94773f1e79..b3bd862fbd 100644 --- a/InvenTree/part/templates/part/part_app_base.html +++ b/InvenTree/part/templates/part/part_app_base.html @@ -1,14 +1,15 @@ {% extends "base.html" %} {% load static %} {% load i18n %} +{% load inventree_extras %} {% block page_title %} {% if part %} -InvenTree | {% trans "Part" %} - {{ part.full_name }} +{% inventree_title %} | {% trans "Part" %} - {{ part.full_name }} {% elif category %} -InvenTree | {% trans "Part Category" %} - {{ category }} +{% inventree_title %} | {% trans "Part Category" %} - {{ category }} {% else %} -InvenTree | {% trans "Part List" %} +{% inventree_title %} | {% trans "Part List" %} {% endif %} {% endblock %} diff --git a/InvenTree/stock/templates/stock/item_base.html b/InvenTree/stock/templates/stock/item_base.html index 04518a0c65..7294a17743 100644 --- a/InvenTree/stock/templates/stock/item_base.html +++ b/InvenTree/stock/templates/stock/item_base.html @@ -5,7 +5,7 @@ {% load i18n %} {% block page_title %} -InvenTree | {% trans "Stock Item" %} - {{ item }} +{% inventree_title %} | {% trans "Stock Item" %} - {{ item }} {% endblock %} {% block sidenav %} diff --git a/InvenTree/stock/templates/stock/stock_app_base.html b/InvenTree/stock/templates/stock/stock_app_base.html index dfe32c767d..209aea3956 100644 --- a/InvenTree/stock/templates/stock/stock_app_base.html +++ b/InvenTree/stock/templates/stock/stock_app_base.html @@ -1,12 +1,13 @@ {% extends "base.html" %} {% load static %} {% load i18n %} +{% load inventree_extras %} {% block page_title %} {% if location %} -InvenTree | {% trans "Stock Location" %} - {{ location }} +{% inventree_title %} | {% trans "Stock Location" %} - {{ location }} {% else %} -InvenTree | {% trans "Stock" %} +{% inventree_title %} | {% trans "Stock" %} {% endif %} {% endblock %} diff --git a/InvenTree/templates/InvenTree/search.html b/InvenTree/templates/InvenTree/search.html index b65ec00c00..efa5127385 100644 --- a/InvenTree/templates/InvenTree/search.html +++ b/InvenTree/templates/InvenTree/search.html @@ -2,9 +2,10 @@ {% load static %} {% load i18n %} +{% load inventree_extras %} {% block page_title %} -InvenTree | {% trans "Search Results" %} +{% inventree_title %} | {% trans "Search Results" %} {% endblock %} {% block content %} diff --git a/InvenTree/templates/InvenTree/settings/global.html b/InvenTree/templates/InvenTree/settings/global.html index c234bd1379..a0347490d0 100644 --- a/InvenTree/templates/InvenTree/settings/global.html +++ b/InvenTree/templates/InvenTree/settings/global.html @@ -16,6 +16,7 @@ {% include "InvenTree/settings/header.html" %} {% include "InvenTree/settings/setting.html" with key="INVENTREE_INSTANCE" icon="fa-info-circle" %} + {% include "InvenTree/settings/setting.html" with key="INVENTREE_INSTANCE_TITLE" icon="fa-info-circle" %} {% include "InvenTree/settings/setting.html" with key="INVENTREE_BASE_URL" icon="fa-globe" %} {% include "InvenTree/settings/setting.html" with key="INVENTREE_COMPANY_NAME" icon="fa-building" %} {% include "InvenTree/settings/setting.html" with key="INVENTREE_DEFAULT_CURRENCY" icon="fa-dollar-sign" %} diff --git a/InvenTree/templates/InvenTree/settings/settings.html b/InvenTree/templates/InvenTree/settings/settings.html index fe9fd00e53..f63860012c 100644 --- a/InvenTree/templates/InvenTree/settings/settings.html +++ b/InvenTree/templates/InvenTree/settings/settings.html @@ -2,9 +2,10 @@ {% load i18n %} {% load static %} +{% load inventree_extras %} {% block page_title %} -InvenTree | {% trans "Settings" %} +{% inventree_title %} | {% trans "Settings" %} {% endblock %} {% block content %} diff --git a/InvenTree/templates/base.html b/InvenTree/templates/base.html index 140971a8ce..8ccf691ef5 100644 --- a/InvenTree/templates/base.html +++ b/InvenTree/templates/base.html @@ -60,7 +60,7 @@ {% block page_title %} -InvenTree +{% inventree_title %} {% endblock %} diff --git a/InvenTree/templates/registration/logged_out.html b/InvenTree/templates/registration/logged_out.html index b23ba001e2..f5882c7ff1 100644 --- a/InvenTree/templates/registration/logged_out.html +++ b/InvenTree/templates/registration/logged_out.html @@ -1,6 +1,7 @@ {% load static %} {% load i18n %} -{% load crispy_forms_tags %} +{% load crispy_forms_tags %} +{% load inventree_extras %} @@ -29,7 +30,7 @@ - InvenTree + {% inventree_title %} @@ -42,7 +43,7 @@

                diff --git a/InvenTree/templates/registration/login.html b/InvenTree/templates/registration/login.html index 37eda9a103..2032f62773 100644 --- a/InvenTree/templates/registration/login.html +++ b/InvenTree/templates/registration/login.html @@ -1,5 +1,6 @@ {% load static %} {% load i18n %} +{% load inventree_extras %} @@ -28,7 +29,7 @@ - InvenTree + {% inventree_title %} @@ -44,7 +45,7 @@

                diff --git a/InvenTree/templates/registration/password_reset_complete.html b/InvenTree/templates/registration/password_reset_complete.html index 7fc83d85ba..a941aa6fee 100644 --- a/InvenTree/templates/registration/password_reset_complete.html +++ b/InvenTree/templates/registration/password_reset_complete.html @@ -1,6 +1,7 @@ {% load static %} {% load i18n %} -{% load crispy_forms_tags %} +{% load crispy_forms_tags %} +{% load inventree_extras %} @@ -29,7 +30,7 @@ - InvenTree + {% inventree_title %} @@ -42,7 +43,7 @@

                diff --git a/InvenTree/templates/registration/password_reset_confirm.html b/InvenTree/templates/registration/password_reset_confirm.html index 455baea698..dd52cb135f 100644 --- a/InvenTree/templates/registration/password_reset_confirm.html +++ b/InvenTree/templates/registration/password_reset_confirm.html @@ -1,6 +1,7 @@ {% load static %} {% load i18n %} -{% load crispy_forms_tags %} +{% load crispy_forms_tags %} +{% load inventree_extras %} @@ -29,7 +30,7 @@ - InvenTree + {% inventree_title %} @@ -42,7 +43,7 @@

                diff --git a/InvenTree/templates/registration/password_reset_done.html b/InvenTree/templates/registration/password_reset_done.html index 04e0aec69b..17a786f2a4 100644 --- a/InvenTree/templates/registration/password_reset_done.html +++ b/InvenTree/templates/registration/password_reset_done.html @@ -1,6 +1,7 @@ {% load static %} {% load i18n %} -{% load crispy_forms_tags %} +{% load crispy_forms_tags %} +{% load inventree_extras %} @@ -29,7 +30,7 @@ - InvenTree + {% inventree_title %} @@ -42,7 +43,7 @@

                diff --git a/InvenTree/templates/registration/password_reset_form.html b/InvenTree/templates/registration/password_reset_form.html index dabada5651..a2c241b7d7 100644 --- a/InvenTree/templates/registration/password_reset_form.html +++ b/InvenTree/templates/registration/password_reset_form.html @@ -1,6 +1,7 @@ {% load static %} {% load i18n %} -{% load crispy_forms_tags %} +{% load crispy_forms_tags %} +{% load inventree_extras %} @@ -29,7 +30,7 @@ - InvenTree + {% inventree_title %} @@ -42,7 +43,7 @@

                From 6f00c662a1c0320e9f8fd71ed3a11f02610a31b2 Mon Sep 17 00:00:00 2001 From: Nigel Date: Thu, 15 Apr 2021 16:28:50 -0600 Subject: [PATCH 045/116] fix: don't link manufacturer part if it doesn't have one --- InvenTree/order/templates/order/purchase_order_detail.html | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/InvenTree/order/templates/order/purchase_order_detail.html b/InvenTree/order/templates/order/purchase_order_detail.html index c28f383a9d..93b7ffbd8e 100644 --- a/InvenTree/order/templates/order/purchase_order_detail.html +++ b/InvenTree/order/templates/order/purchase_order_detail.html @@ -182,7 +182,11 @@ $("#po-table").inventreeTable({ field: 'supplier_part_detail.MPN', title: '{% trans "MPN" %}', formatter: function(value, row, index, field) { - return renderLink(value, `/manufacturer-part/${row.supplier_part_detail.manufacturer_part.pk}/`); + if (row.supplier_part_detail.manufacturer_part) { + return renderLink(value, `/manufacturer-part/${row.supplier_part_detail.manufacturer_part.pk}/`); + } else { + return ""; + } }, }, { From 09ef85ce9d1d99004afa0efa1726d3c9c7ebfbb1 Mon Sep 17 00:00:00 2001 From: eeintech Date: Fri, 16 Apr 2021 11:43:21 -0400 Subject: [PATCH 046/116] Fixed stock item template for items without manufacturer part --- InvenTree/stock/templates/stock/item_base.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/InvenTree/stock/templates/stock/item_base.html b/InvenTree/stock/templates/stock/item_base.html index 12291443ad..b955acda9c 100644 --- a/InvenTree/stock/templates/stock/item_base.html +++ b/InvenTree/stock/templates/stock/item_base.html @@ -331,7 +331,7 @@ InvenTree | {% trans "Stock Item" %} - {{ item }} {{ item.link }} {% endif %} - {% if item.supplier_part %} + {% if item.supplier_part.manufacturer_part %} {% trans "Manufacturer" %} @@ -342,6 +342,8 @@ InvenTree | {% trans "Stock Item" %} - {{ item }} {% trans "Manufacturer Part" %} {{ item.supplier_part.manufacturer_part.MPN }} + {% endif %} + {% if item.supplier_part %} {% trans "Supplier" %} From 2b4723cc32c030b1786b0eaf77c1641572117639 Mon Sep 17 00:00:00 2001 From: eeintech Date: Fri, 16 Apr 2021 12:22:13 -0400 Subject: [PATCH 047/116] Hide system alert for non-staff users, introduced orange icon for less severe alert than background workers not running (like missing email config) --- InvenTree/InvenTree/static/css/inventree.css | 4 ++++ InvenTree/templates/navbar.html | 18 ++++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/InvenTree/InvenTree/static/css/inventree.css b/InvenTree/InvenTree/static/css/inventree.css index 153931f974..9d322f339d 100644 --- a/InvenTree/InvenTree/static/css/inventree.css +++ b/InvenTree/InvenTree/static/css/inventree.css @@ -185,6 +185,10 @@ color: #c55; } +.icon-orange { + color: #fcba03; +} + .icon-green { color: #43bb43; } diff --git a/InvenTree/templates/navbar.html b/InvenTree/templates/navbar.html index acd71f0cd8..55e0e06018 100644 --- a/InvenTree/templates/navbar.html +++ b/InvenTree/templates/navbar.html @@ -59,11 +59,17 @@ {% endif %}
                {% if no_stock %} {% endif %} {% endblock %} \ No newline at end of file diff --git a/InvenTree/company/templates/company/manufacturer_part_delete.html b/InvenTree/company/templates/company/manufacturer_part_delete.html index 4d5c2f6c86..98b55934d0 100644 --- a/InvenTree/company/templates/company/manufacturer_part_delete.html +++ b/InvenTree/company/templates/company/manufacturer_part_delete.html @@ -33,8 +33,7 @@ {% if part.supplier_parts.all|length > 0 %}
                -

                There are {{ part.supplier_parts.all|length }} suppliers defined for this manufacturer part. If you delete it, the following supplier parts will also be deleted: -

                +

                {% blocktrans %}There are {{ part.supplier_parts.all|length }} suppliers defined for this manufacturer part. If you delete it, the following supplier parts will also be deleted:{% endblocktrans %}

                  {% for spart in part.supplier_parts.all %}
                • {{ spart.supplier.name }} - {{ spart.SKU }}
                • diff --git a/InvenTree/order/templates/order/order_wizard/select_parts.html b/InvenTree/order/templates/order/order_wizard/select_parts.html index d3f1796dce..04b3d60a2d 100644 --- a/InvenTree/order/templates/order/order_wizard/select_parts.html +++ b/InvenTree/order/templates/order/order_wizard/select_parts.html @@ -54,7 +54,7 @@
                {% if not part.order_supplier %} - {% trans "Select a supplier for" %} {{ part.name }} + {% blocktrans %}Select a supplier for {{ part.name }}{% endblocktrans %} {% endif %}
                diff --git a/InvenTree/order/templates/order/order_wizard/select_pos.html b/InvenTree/order/templates/order/order_wizard/select_pos.html index 616e618deb..1152736c89 100644 --- a/InvenTree/order/templates/order/order_wizard/select_pos.html +++ b/InvenTree/order/templates/order/order_wizard/select_pos.html @@ -42,7 +42,7 @@
                {% if not supplier.selected_purchase_order %} - {% trans "Select a purchase order for" %} {{ supplier.name }} + {% blocktrans %}Select a purchase order for {{ supplier.name }}{% endblocktrans %} {% endif %}
                diff --git a/InvenTree/order/templates/order/receive_parts.html b/InvenTree/order/templates/order/receive_parts.html index 3daa9119d8..053851f232 100644 --- a/InvenTree/order/templates/order/receive_parts.html +++ b/InvenTree/order/templates/order/receive_parts.html @@ -5,7 +5,7 @@ {% block form %} -{% trans "Receive outstanding parts for" %} {{ order }} - {{ order.description }} +{% blocktrans %}Receive outstanding parts for {{ order }} - {{ order.description }}{% endblocktrans %}
                {% csrf_token %} diff --git a/InvenTree/part/templates/part/category_delete.html b/InvenTree/part/templates/part/category_delete.html index b520c321a0..530475d6c7 100644 --- a/InvenTree/part/templates/part/category_delete.html +++ b/InvenTree/part/templates/part/category_delete.html @@ -5,7 +5,7 @@ {% trans 'Are you sure you want to delete category' %} {{ category.name }}? {% if category.children.all|length > 0 %} -

                {% trans 'This category contains' %} {{ category.children.all|length }} {% trans 'child categories' %}.
                +

                {% blocktrans %}This category contains {{ category.children.all|length }} child categories{% endblocktrans %}.
                {% trans 'If this category is deleted, these child categories will be moved to the' %} {% if category.parent %} {{ category.parent.name }} {% trans 'category' %}. @@ -22,9 +22,9 @@ {% endif %} {% if category.parts.all|length > 0 %} -

                {% trans 'This category contains' %} {{ category.parts.all|length }} {% trans 'parts' %}.
                +

                {% blocktrans %}This category contains {{ category.parts.all|length }} parts{% endblocktrans %}.
                {% if category.parent %} - {% trans 'If this category is deleted, these parts will be moved to the parent category' %} {{ category.parent.pathstring }} + {% blocktrans %}If this category is deleted, these parts will be moved to the parent category {{ category.parent.pathstring }}{% endblocktrans %} {% else %} {% trans 'If this category is deleted, these parts will be moved to the top-level category Teile' %} {% endif %} diff --git a/InvenTree/part/templates/part/copy_part.html b/InvenTree/part/templates/part/copy_part.html index 1d0c04e2cd..b1841275e8 100644 --- a/InvenTree/part/templates/part/copy_part.html +++ b/InvenTree/part/templates/part/copy_part.html @@ -7,7 +7,7 @@

                {% trans 'Duplicate Part' %}
                - {% trans 'Make a copy of part' %} '{{ part.full_name }}'. + {% blocktrans %}Make a copy of part '{{ part.full_name }}'.{% endblocktrans %}
                {% if matches %} diff --git a/InvenTree/part/templates/part/create_part.html b/InvenTree/part/templates/part/create_part.html index d0e322d887..9cef127079 100644 --- a/InvenTree/part/templates/part/create_part.html +++ b/InvenTree/part/templates/part/create_part.html @@ -13,7 +13,8 @@
                  {% for match in matches %}
                • - {{ match.part.full_name }} - {{ match.part.description }} ({% decimal match.ratio %}% {% trans "match" %}) + {% define decimal match.ratio as match_per %} + {% blocktrans %}{{ match.part.full_name }} - {{ match.part.description }} ({{match_per}}% match){% endblocktrans %}
                • {% endfor %}
                diff --git a/InvenTree/part/templates/part/part_pricing.html b/InvenTree/part/templates/part/part_pricing.html index 7865bb2fbe..26779198a6 100644 --- a/InvenTree/part/templates/part/part_pricing.html +++ b/InvenTree/part/templates/part/part_pricing.html @@ -5,8 +5,7 @@ {% block pre_form_content %}
                -{% trans 'Pricing information for:' %}
                -{{ part }}. +{% blocktrans %}Pricing information for:
                {{ part }}.{% endblocktrans %}

                {% trans 'Quantity' %}

                diff --git a/InvenTree/part/templates/part/partial_delete.html b/InvenTree/part/templates/part/partial_delete.html index 11910eec66..15ef678849 100644 --- a/InvenTree/part/templates/part/partial_delete.html +++ b/InvenTree/part/templates/part/partial_delete.html @@ -4,12 +4,12 @@ {% block pre_form_content %}
                - {% trans "Are you sure you want to delete part" %} '{{ part.full_name }}'? + {% blocktrans %}Are you sure you want to delete part '{{ part.full_name }}'?{% endblocktrans %}
                {% if part.used_in_count %}
                -

                {% trans "This part is used in BOMs for" %} {{ part.used_in_count }} {% trans "other parts. If you delete this part, the BOMs for the following parts will be updated" %}: +

                {% blocktrans %}This part is used in BOMs for {{ part.used_in_count }} other parts. If you delete this part, the BOMs for the following parts will be updated{% endblocktrans %}:

                  {% for child in part.used_in.all %}
                • {{ child.part.full_name }} - {{ child.part.description }}
                • @@ -19,7 +19,7 @@ {% if part.stock_items.all|length > 0 %}
                  -

                  {% trans "There are" %} {{ part.stock_items.all|length }} {% trans "stock entries defined for this part. If you delete this part, the following stock entries will also be deleted" %}: +

                  {% blocktrans %}There are {{ part.stock_items.all|length }} stock entries defined for this part. If you delete this part, the following stock entries will also be deleted:{% endblocktrans %}

                    {% for stock in part.stock_items.all %}
                  • {{ stock }}
                  • @@ -30,7 +30,7 @@ {% if part.manufacturer_parts.all|length > 0 %}
                    -

                    {% trans "There are" %} {{ part.manufacturer_parts.all|length }} {% trans "manufacturers defined for this part. If you delete this part, the following manufacturer parts will also be deleted" %}: +

                    {% blocktrans %}There are {{ part.manufacturer_parts.all|length }} manufacturers defined for this part. If you delete this part, the following manufacturer parts will also be deleted:{% endblocktrans %}

                      {% for spart in part.manufacturer_parts.all %}
                    • {{ spart.manufacturer.name }} - {{ spart.MPN }}
                    • @@ -41,7 +41,7 @@ {% if part.supplier_parts.all|length > 0 %}
                      -

                      {% trans "There are" %} {{ part.supplier_parts.all|length }} {% trans "suppliers defined for this part. If you delete this part, the following supplier parts will also be deleted" %}: +

                      {% blocktrans %}There are {{ part.supplier_parts.all|length }} suppliers defined for this part. If you delete this part, the following supplier parts will also be deleted:{% endblocktrans %}

                        {% for spart in part.supplier_parts.all %}
                      • {{ spart.supplier.name }} - {{ spart.SKU }}
                      • @@ -52,7 +52,7 @@ {% if part.serials.all|length > 0 %}
                        -

                        {% trans "There are" %} {{ part.serials.all|length }} {% trans "unique parts tracked for" %} '{{ part.full_name }}'. {% trans "Deleting this part will permanently remove this tracking information" %}.

                        +

                        {% blocktrans %}There are {{ part.serials.all|length }} unique parts tracked for '{{ part.full_name }}'. Deleting this part will permanently remove this tracking information.{% endblocktrans %}

                        {% endif %} {% endblock %} \ No newline at end of file diff --git a/InvenTree/part/templates/part/stock.html b/InvenTree/part/templates/part/stock.html index 2d1385f89c..4870949393 100644 --- a/InvenTree/part/templates/part/stock.html +++ b/InvenTree/part/templates/part/stock.html @@ -13,7 +13,7 @@ {% block details %} {% if part.is_template %}
                        - {% trans 'Showing stock for all variants of' %} {{ part.full_name }} + {% blocktrans %}Showing stock for all variants of {{ part.full_name }}{% endblocktrans %}
                        {% endif %} diff --git a/InvenTree/part/templates/part/variant_part.html b/InvenTree/part/templates/part/variant_part.html index f2f8fd4cd7..d326205ba2 100644 --- a/InvenTree/part/templates/part/variant_part.html +++ b/InvenTree/part/templates/part/variant_part.html @@ -7,7 +7,7 @@
                        {% trans "Create new part variant" %}
                        - {% trans "Create a new variant of template" %} '{{ part.full_name }}'. + {% blocktrans %}Create a new variant of template '{{ part.full_name }}'.{% endblocktrans %}
                        {% endblock %} \ No newline at end of file diff --git a/InvenTree/stock/templates/stock/item_base.html b/InvenTree/stock/templates/stock/item_base.html index 23397c9886..024532118a 100644 --- a/InvenTree/stock/templates/stock/item_base.html +++ b/InvenTree/stock/templates/stock/item_base.html @@ -366,9 +366,9 @@ InvenTree | {% trans "Stock Item" %} - {{ item }} {{ item.expiry_date }} {% if item.is_expired %} - {% trans "Expired" %} + {% trans "Expired" %} {% elif item.is_stale %} - {% trans "Stale" %} + {% trans "Stale" %} {% endif %} diff --git a/InvenTree/stock/templates/stock/stockitem_convert.html b/InvenTree/stock/templates/stock/stockitem_convert.html index 55b565a60b..7ad5af1974 100644 --- a/InvenTree/stock/templates/stock/stockitem_convert.html +++ b/InvenTree/stock/templates/stock/stockitem_convert.html @@ -5,8 +5,8 @@
                        {% trans "Convert Stock Item" %}
                        - {% trans "This stock item is current an instance of " %}{{ item.part }}
                        - {% trans "It can be converted to one of the part variants listed below." %} + {% blocktrans %}This stock item is current an instance of {{ item.part }}{% endblocktrans %}
                        + {% blocktrans %}It can be converted to one of the part variants listed below.{% endblocktrans %}
                        From 46822017c6364d0ca79cc4d721520de3b574f34e Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 17 Apr 2021 23:52:55 +0200 Subject: [PATCH 051/116] FIX: multiline trans not possible --- InvenTree/order/templates/order/order_complete.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/InvenTree/order/templates/order/order_complete.html b/InvenTree/order/templates/order/order_complete.html index 0f6aa55133..5c4ece7f1a 100644 --- a/InvenTree/order/templates/order/order_complete.html +++ b/InvenTree/order/templates/order/order_complete.html @@ -7,8 +7,8 @@ {% trans 'Mark this order as complete?' %} {% if not order.is_complete %}
                        - {%trans 'This order has line items which have not been marked as received. - Marking this order as complete will remove these line items.' %} + {% trans 'This order has line items which have not been marked as received.' %} + {% trans 'Marking this order as complete will remove these line items.' %}
                        {% endif %} From c233e829190c5f1acc53f3b12fbe34963543d0b5 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 17 Apr 2021 23:54:23 +0200 Subject: [PATCH 052/116] added translatable strings --- InvenTree/stock/templates/stock/item_delete.html | 3 ++- InvenTree/stock/templates/stock/tracking_delete.html | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/InvenTree/stock/templates/stock/item_delete.html b/InvenTree/stock/templates/stock/item_delete.html index 09d9397ecc..4614b70e59 100644 --- a/InvenTree/stock/templates/stock/item_delete.html +++ b/InvenTree/stock/templates/stock/item_delete.html @@ -8,7 +8,8 @@
                        {% trans "Are you sure you want to delete this stock item?" %}
                        -This will remove {% decimal item.quantity %} units of {{ item.part.full_name }} from stock. +{% define decimal item.quantity as qty %} +{% blocktrans %}This will remove {{ qty }} units of {{ item.part.full_name }} from stock.{% endblocktrans %}
                        {% endblock %} \ No newline at end of file diff --git a/InvenTree/stock/templates/stock/tracking_delete.html b/InvenTree/stock/templates/stock/tracking_delete.html index b5dde45de2..79d5af5192 100644 --- a/InvenTree/stock/templates/stock/tracking_delete.html +++ b/InvenTree/stock/templates/stock/tracking_delete.html @@ -3,7 +3,7 @@ {% block pre_form_content %}
                        -Are you sure you want to delete this stock tracking entry? +{% trans "Are you sure you want to delete this stock tracking entry?" %}
                        {% endblock %} \ No newline at end of file From 5b9c4dc2252b1581a482375bd72f0009f47cdb88 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 18 Apr 2021 01:21:11 +0200 Subject: [PATCH 053/116] sipler translation strings --- InvenTree/build/templates/build/build_base.html | 6 +++--- .../build/templates/build/create_build_item.html | 4 ++-- .../templates/company/manufacturer_part_delete.html | 2 +- .../templates/order/order_wizard/select_parts.html | 2 +- .../templates/order/order_wizard/select_pos.html | 4 ++-- InvenTree/order/templates/order/receive_parts.html | 2 +- InvenTree/part/templates/part/category_delete.html | 6 +++--- InvenTree/part/templates/part/copy_part.html | 2 +- InvenTree/part/templates/part/create_part.html | 4 ++-- InvenTree/part/templates/part/part_base.html | 2 +- InvenTree/part/templates/part/part_pricing.html | 2 +- InvenTree/part/templates/part/partial_delete.html | 12 ++++++------ InvenTree/part/templates/part/stock.html | 2 +- InvenTree/part/templates/part/variant_part.html | 2 +- InvenTree/stock/templates/stock/item_base.html | 4 ++-- InvenTree/stock/templates/stock/item_delete.html | 4 ++-- .../stock/templates/stock/stockitem_convert.html | 4 ++-- 17 files changed, 32 insertions(+), 32 deletions(-) diff --git a/InvenTree/build/templates/build/build_base.html b/InvenTree/build/templates/build/build_base.html index d0e68cac4c..b6c464ba1b 100644 --- a/InvenTree/build/templates/build/build_base.html +++ b/InvenTree/build/templates/build/build_base.html @@ -13,13 +13,13 @@ InvenTree | {% trans "Build Order" %} - {{ build }} {% if build.sales_order %}
                        {% object_link 'so-detail' build.sales_order.id build.sales_order as link %} - {% blocktrans %}This Build Order is allocated to Sales Order {{ link }}{% endblocktrans %} + {% blocktrans %}This Build Order is allocated to Sales Order {{link}}{% endblocktrans %}
                        {% endif %} {% if build.parent %}
                        {% object_link 'build-detail' build.parent.id build.parent as link %} - {% blocktrans %}This Build Order is a child of Build Order {{ link }}{% endblocktrans %} + {% blocktrans %}This Build Order is a child of Build Order {{link}}{% endblocktrans %}
                        {% endif %} {% endblock %} @@ -108,7 +108,7 @@ src="{% static 'img/blank_image.png' %}" {{ build.target_date }} {% if build.is_overdue %} - {% trans "Overdue" %} + {% trans "Overdue" %} {% endif %} diff --git a/InvenTree/build/templates/build/create_build_item.html b/InvenTree/build/templates/build/create_build_item.html index 1a7934b88b..9ebf5bb389 100644 --- a/InvenTree/build/templates/build/create_build_item.html +++ b/InvenTree/build/templates/build/create_build_item.html @@ -8,13 +8,13 @@

                        {% if output %}

                        - {% blocktrans %}The allocated stock will be installed into the following build output:
                        {{ output }}{% endblocktrans %} + {% blocktrans %}The allocated stock will be installed into the following build output:
                        {{output}}{% endblocktrans %}

                        {% endif %}
                        {% if no_stock %} {% endif %} {% endblock %} \ No newline at end of file diff --git a/InvenTree/company/templates/company/manufacturer_part_delete.html b/InvenTree/company/templates/company/manufacturer_part_delete.html index 98b55934d0..58ecdbf23b 100644 --- a/InvenTree/company/templates/company/manufacturer_part_delete.html +++ b/InvenTree/company/templates/company/manufacturer_part_delete.html @@ -33,7 +33,7 @@ {% if part.supplier_parts.all|length > 0 %}
                        -

                        {% blocktrans %}There are {{ part.supplier_parts.all|length }} suppliers defined for this manufacturer part. If you delete it, the following supplier parts will also be deleted:{% endblocktrans %}

                        +

                        {% blocktrans with count=part.supplier_parts.all|length %}There are {{count}} suppliers defined for this manufacturer part. If you delete it, the following supplier parts will also be deleted:{% endblocktrans %}

                          {% for spart in part.supplier_parts.all %}
                        • {{ spart.supplier.name }} - {{ spart.SKU }}
                        • diff --git a/InvenTree/order/templates/order/order_wizard/select_parts.html b/InvenTree/order/templates/order/order_wizard/select_parts.html index 04b3d60a2d..28b4a36213 100644 --- a/InvenTree/order/templates/order/order_wizard/select_parts.html +++ b/InvenTree/order/templates/order/order_wizard/select_parts.html @@ -54,7 +54,7 @@
                        {% if not part.order_supplier %} - {% blocktrans %}Select a supplier for {{ part.name }}{% endblocktrans %} + {% blocktrans with name=part.name %}Select a supplier for {{name}}{% endblocktrans %} {% endif %}
                diff --git a/InvenTree/order/templates/order/order_wizard/select_pos.html b/InvenTree/order/templates/order/order_wizard/select_pos.html index 1152736c89..27f60212c1 100644 --- a/InvenTree/order/templates/order/order_wizard/select_pos.html +++ b/InvenTree/order/templates/order/order_wizard/select_pos.html @@ -42,7 +42,7 @@
                {% if not supplier.selected_purchase_order %} - {% blocktrans %}Select a purchase order for {{ supplier.name }}{% endblocktrans %} + {% blocktrans with name=supplier.name %}Select a purchase order for {{name}}{% endblocktrans %} {% endif %}
                diff --git a/InvenTree/order/templates/order/receive_parts.html b/InvenTree/order/templates/order/receive_parts.html index 053851f232..35ce4b6513 100644 --- a/InvenTree/order/templates/order/receive_parts.html +++ b/InvenTree/order/templates/order/receive_parts.html @@ -5,7 +5,7 @@ {% block form %} -{% blocktrans %}Receive outstanding parts for {{ order }} - {{ order.description }}{% endblocktrans %} +{% blocktrans with desc=order.description %}Receive outstanding parts for {{order}} - {{desc}}{% endblocktrans %} {% csrf_token %} diff --git a/InvenTree/part/templates/part/category_delete.html b/InvenTree/part/templates/part/category_delete.html index 530475d6c7..1faf104ed1 100644 --- a/InvenTree/part/templates/part/category_delete.html +++ b/InvenTree/part/templates/part/category_delete.html @@ -5,7 +5,7 @@ {% trans 'Are you sure you want to delete category' %} {{ category.name }}? {% if category.children.all|length > 0 %} -

                {% blocktrans %}This category contains {{ category.children.all|length }} child categories{% endblocktrans %}.
                +

                {% blocktrans with count=category.children.all|length%}This category contains {{count}} child categories{% endblocktrans %}.
                {% trans 'If this category is deleted, these child categories will be moved to the' %} {% if category.parent %} {{ category.parent.name }} {% trans 'category' %}. @@ -22,9 +22,9 @@ {% endif %} {% if category.parts.all|length > 0 %} -

                {% blocktrans %}This category contains {{ category.parts.all|length }} parts{% endblocktrans %}.
                +

                {% blocktrans with count=category.parts.all|length %}This category contains {{count}} parts{% endblocktrans %}.
                {% if category.parent %} - {% blocktrans %}If this category is deleted, these parts will be moved to the parent category {{ category.parent.pathstring }}{% endblocktrans %} + {% blocktrans with path=category.parent.pathstring %}If this category is deleted, these parts will be moved to the parent category {{path}}{% endblocktrans %} {% else %} {% trans 'If this category is deleted, these parts will be moved to the top-level category Teile' %} {% endif %} diff --git a/InvenTree/part/templates/part/copy_part.html b/InvenTree/part/templates/part/copy_part.html index b1841275e8..a6e2185216 100644 --- a/InvenTree/part/templates/part/copy_part.html +++ b/InvenTree/part/templates/part/copy_part.html @@ -7,7 +7,7 @@

                {% trans 'Duplicate Part' %}
                - {% blocktrans %}Make a copy of part '{{ part.full_name }}'.{% endblocktrans %} + {% blocktrans with full_name =part.full_name %}Make a copy of part '{{full_name}}'.{% endblocktrans %}
                {% if matches %} diff --git a/InvenTree/part/templates/part/create_part.html b/InvenTree/part/templates/part/create_part.html index 9cef127079..31ef1cb7e6 100644 --- a/InvenTree/part/templates/part/create_part.html +++ b/InvenTree/part/templates/part/create_part.html @@ -13,8 +13,8 @@
                  {% for match in matches %}
                • - {% define decimal match.ratio as match_per %} - {% blocktrans %}{{ match.part.full_name }} - {{ match.part.description }} ({{match_per}}% match){% endblocktrans %} + {% decimal match.ratio as match_per %} + {% blocktrans with full_name=match.part.full_name desc=match.part.description %}{{full_name}} - {{desc}} ({{match_per}}% match){% endblocktrans %}
                • {% endfor %}
                diff --git a/InvenTree/part/templates/part/part_base.html b/InvenTree/part/templates/part/part_base.html index a0a058fa3f..bbfa526236 100644 --- a/InvenTree/part/templates/part/part_base.html +++ b/InvenTree/part/templates/part/part_base.html @@ -15,7 +15,7 @@ {% if part.variant_of %}
                {% object_link 'part-variants' part.variant_of.id part.variant_of.full_name as link %} - {% blocktrans %}This part is a variant of {{ link }}{% endblocktrans %} + {% blocktrans %}This part is a variant of {{link}}{% endblocktrans %}
                {% endif %} diff --git a/InvenTree/part/templates/part/part_pricing.html b/InvenTree/part/templates/part/part_pricing.html index 26779198a6..b14be2c61f 100644 --- a/InvenTree/part/templates/part/part_pricing.html +++ b/InvenTree/part/templates/part/part_pricing.html @@ -5,7 +5,7 @@ {% block pre_form_content %}
                -{% blocktrans %}Pricing information for:
                {{ part }}.{% endblocktrans %} +{% blocktrans %}Pricing information for:
                {{part}}.{% endblocktrans %}

                {% trans 'Quantity' %}

                diff --git a/InvenTree/part/templates/part/partial_delete.html b/InvenTree/part/templates/part/partial_delete.html index 15ef678849..95f69cec55 100644 --- a/InvenTree/part/templates/part/partial_delete.html +++ b/InvenTree/part/templates/part/partial_delete.html @@ -4,12 +4,12 @@ {% block pre_form_content %}
                - {% blocktrans %}Are you sure you want to delete part '{{ part.full_name }}'?{% endblocktrans %} + {% blocktrans with full_name=part.full_name %}Are you sure you want to delete part '{{full_name}}'?{% endblocktrans %}
                {% if part.used_in_count %}
                -

                {% blocktrans %}This part is used in BOMs for {{ part.used_in_count }} other parts. If you delete this part, the BOMs for the following parts will be updated{% endblocktrans %}: +

                {% blocktrans with count=part.used_in_count %}This part is used in BOMs for {{count}} other parts. If you delete this part, the BOMs for the following parts will be updated{% endblocktrans %}:

                  {% for child in part.used_in.all %}
                • {{ child.part.full_name }} - {{ child.part.description }}
                • @@ -19,7 +19,7 @@ {% if part.stock_items.all|length > 0 %}
                  -

                  {% blocktrans %}There are {{ part.stock_items.all|length }} stock entries defined for this part. If you delete this part, the following stock entries will also be deleted:{% endblocktrans %} +

                  {% blocktrans with count=part.stock_items.all|length %}There are {{count}} stock entries defined for this part. If you delete this part, the following stock entries will also be deleted:{% endblocktrans %}

                    {% for stock in part.stock_items.all %}
                  • {{ stock }}
                  • @@ -30,7 +30,7 @@ {% if part.manufacturer_parts.all|length > 0 %}
                    -

                    {% blocktrans %}There are {{ part.manufacturer_parts.all|length }} manufacturers defined for this part. If you delete this part, the following manufacturer parts will also be deleted:{% endblocktrans %} +

                    {% blocktrans with count=part.manufacturer_parts.all|length %}There are {{count}} manufacturers defined for this part. If you delete this part, the following manufacturer parts will also be deleted:{% endblocktrans %}

                      {% for spart in part.manufacturer_parts.all %}
                    • {{ spart.manufacturer.name }} - {{ spart.MPN }}
                    • @@ -41,7 +41,7 @@ {% if part.supplier_parts.all|length > 0 %}
                      -

                      {% blocktrans %}There are {{ part.supplier_parts.all|length }} suppliers defined for this part. If you delete this part, the following supplier parts will also be deleted:{% endblocktrans %} +

                      {% blocktrans with count=part.supplier_parts.all|length %}There are {{count}} suppliers defined for this part. If you delete this part, the following supplier parts will also be deleted:{% endblocktrans %}

                        {% for spart in part.supplier_parts.all %}
                      • {{ spart.supplier.name }} - {{ spart.SKU }}
                      • @@ -52,7 +52,7 @@ {% if part.serials.all|length > 0 %}
                        -

                        {% blocktrans %}There are {{ part.serials.all|length }} unique parts tracked for '{{ part.full_name }}'. Deleting this part will permanently remove this tracking information.{% endblocktrans %}

                        +

                        {% blocktrans with count=part.serials.all|length full_name=part.full_name %}There are {{count}} unique parts tracked for '{{full_name}}'. Deleting this part will permanently remove this tracking information.{% endblocktrans %}

                        {% endif %} {% endblock %} \ No newline at end of file diff --git a/InvenTree/part/templates/part/stock.html b/InvenTree/part/templates/part/stock.html index 4870949393..067eda66a8 100644 --- a/InvenTree/part/templates/part/stock.html +++ b/InvenTree/part/templates/part/stock.html @@ -13,7 +13,7 @@ {% block details %} {% if part.is_template %}
                        - {% blocktrans %}Showing stock for all variants of {{ part.full_name }}{% endblocktrans %} + {% blocktrans with full_name=part.full_name%}Showing stock for all variants of {{full_name}}{% endblocktrans %}
                        {% endif %} diff --git a/InvenTree/part/templates/part/variant_part.html b/InvenTree/part/templates/part/variant_part.html index d326205ba2..48a058db55 100644 --- a/InvenTree/part/templates/part/variant_part.html +++ b/InvenTree/part/templates/part/variant_part.html @@ -7,7 +7,7 @@
                        {% trans "Create new part variant" %}
                        - {% blocktrans %}Create a new variant of template '{{ part.full_name }}'.{% endblocktrans %} + {% blocktrans with full_name=part.full_name %}Create a new variant of template '{{full_name}}'.{% endblocktrans %}
                        {% endblock %} \ No newline at end of file diff --git a/InvenTree/stock/templates/stock/item_base.html b/InvenTree/stock/templates/stock/item_base.html index 024532118a..6901013ab7 100644 --- a/InvenTree/stock/templates/stock/item_base.html +++ b/InvenTree/stock/templates/stock/item_base.html @@ -49,7 +49,7 @@ InvenTree | {% trans "Stock Item" %} - {{ item }} {% for allocation in item.sales_order_allocations.all %}
                        {% object_link 'so-detail' allocation.line.order.id allocation.line.order as link %} - {% define decimal allocation.quantity as qty %} + {% decimal allocation.quantity as qty %} {% blocktrans %}This stock item is allocated to Sales Order {{ link }} (Quantity: {{ qty }}){% endblocktrans %}
                        {% endfor %} @@ -57,7 +57,7 @@ InvenTree | {% trans "Stock Item" %} - {{ item }} {% for allocation in item.allocations.all %}
                        {% object_link 'build-detail' allocation.build.id allocation.build %} - {% define decimal allocation.quantity as qty %} + {% decimal allocation.quantity as qty %} {% blocktrans %}This stock item is allocated to Build {{ link }} (Quantity: {{ qty }}){% endblocktrans %}
                        {% endfor %} diff --git a/InvenTree/stock/templates/stock/item_delete.html b/InvenTree/stock/templates/stock/item_delete.html index 4614b70e59..cf23c0bbf2 100644 --- a/InvenTree/stock/templates/stock/item_delete.html +++ b/InvenTree/stock/templates/stock/item_delete.html @@ -8,8 +8,8 @@
                        {% trans "Are you sure you want to delete this stock item?" %}
                        -{% define decimal item.quantity as qty %} -{% blocktrans %}This will remove {{ qty }} units of {{ item.part.full_name }} from stock.{% endblocktrans %} +{% decimal item.quantity as qty %} +{% blocktrans with full_name=item.part.full_name %}This will remove {{qty}} units of {{full_name}} from stock.{% endblocktrans %}
                        {% endblock %} \ No newline at end of file diff --git a/InvenTree/stock/templates/stock/stockitem_convert.html b/InvenTree/stock/templates/stock/stockitem_convert.html index 7ad5af1974..9d0b1f77b8 100644 --- a/InvenTree/stock/templates/stock/stockitem_convert.html +++ b/InvenTree/stock/templates/stock/stockitem_convert.html @@ -5,8 +5,8 @@
                        {% trans "Convert Stock Item" %}
                        - {% blocktrans %}This stock item is current an instance of {{ item.part }}{% endblocktrans %}
                        - {% blocktrans %}It can be converted to one of the part variants listed below.{% endblocktrans %} + {% blocktrans with part=item.part %}This stock item is current an instance of {{part}}{% endblocktrans %}
                        + {% trans "It can be converted to one of the part variants listed below." %}
                        From c3319e88f416da3dff59cf7616f7e6572b2b3e2f Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 18 Apr 2021 01:21:44 +0200 Subject: [PATCH 054/116] typo fix --- InvenTree/part/templates/part/copy_part.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InvenTree/part/templates/part/copy_part.html b/InvenTree/part/templates/part/copy_part.html index a6e2185216..1c9495bfc2 100644 --- a/InvenTree/part/templates/part/copy_part.html +++ b/InvenTree/part/templates/part/copy_part.html @@ -7,7 +7,7 @@
                        {% trans 'Duplicate Part' %}
                        - {% blocktrans with full_name =part.full_name %}Make a copy of part '{{full_name}}'.{% endblocktrans %} + {% blocktrans with full_name=part.full_name %}Make a copy of part '{{full_name}}'.{% endblocktrans %}
                        {% if matches %} From c99850abf3c81aeebfa880d2ca16139eb6cbc172 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 18 Apr 2021 01:27:04 +0200 Subject: [PATCH 055/116] po files for new chnaged translation strings --- InvenTree/locale/de/LC_MESSAGES/django.po | 1663 ++++++++++++--------- InvenTree/locale/en/LC_MESSAGES/django.po | 1558 +++++++++++-------- InvenTree/locale/es/LC_MESSAGES/django.po | 1558 +++++++++++-------- 3 files changed, 2782 insertions(+), 1997 deletions(-) diff --git a/InvenTree/locale/de/LC_MESSAGES/django.po b/InvenTree/locale/de/LC_MESSAGES/django.po index ee34b015ea..400c34109d 100644 --- a/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/InvenTree/locale/de/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-15 10:07+0000\n" +"POT-Creation-Date: 2021-04-17 23:25+0000\n" "PO-Revision-Date: 2021-03-28 17:47+0200\n" "Last-Translator: Andreas Kaiser , Matthias " "MAIR\n" @@ -37,7 +37,7 @@ msgstr "Datum eingeben" #: InvenTree/forms.py:110 build/forms.py:99 build/forms.py:120 #: build/forms.py:142 build/forms.py:166 build/forms.py:188 build/forms.py:223 #: order/forms.py:27 order/forms.py:38 order/forms.py:49 order/forms.py:60 -#: order/forms.py:71 part/forms.py:132 +#: order/forms.py:71 part/forms.py:134 msgid "Confirm" msgstr "Bestätigen" @@ -73,42 +73,42 @@ msgstr "Thema anwenden" msgid "Select Category" msgstr "Kategorie auswählen" -#: InvenTree/helpers.py:361 order/models.py:245 order/models.py:344 +#: InvenTree/helpers.py:375 order/models.py:245 order/models.py:344 #: stock/views.py:1763 msgid "Invalid quantity provided" msgstr "Keine gültige Menge" -#: InvenTree/helpers.py:364 +#: InvenTree/helpers.py:378 msgid "Empty serial number string" msgstr "Keine Seriennummer angegeben" -#: InvenTree/helpers.py:385 +#: InvenTree/helpers.py:399 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "Doppelte Seriennummer: {n}" -#: InvenTree/helpers.py:389 InvenTree/helpers.py:392 InvenTree/helpers.py:395 +#: InvenTree/helpers.py:403 InvenTree/helpers.py:406 InvenTree/helpers.py:409 #, python-brace-format msgid "Invalid group: {g}" msgstr "Ungültige Gruppe: {g}" -#: InvenTree/helpers.py:400 +#: InvenTree/helpers.py:414 #, python-brace-format msgid "Duplicate serial: {g}" msgstr "Doppelte Seriennummer: {g}" -#: InvenTree/helpers.py:408 +#: InvenTree/helpers.py:422 msgid "No serial numbers found" msgstr "Keine Seriennummern gefunden" -#: InvenTree/helpers.py:412 +#: InvenTree/helpers.py:426 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" "Anzahl der eindeutigen Seriennummern ({s}) muss mit der Anzahl ({q}) " "übereinstimmen" -#: InvenTree/models.py:59 stock/models.py:1659 +#: InvenTree/models.py:59 stock/models.py:1661 msgid "Attachment" msgstr "Anhang" @@ -136,14 +136,15 @@ msgstr "Hochladedatum" #: InvenTree/models.py:107 InvenTree/models.py:108 label/models.py:101 #: part/models.py:686 part/models.py:2029 part/templates/part/params.html:27 -#: report/models.py:179 templates/InvenTree/search.html:136 -#: templates/InvenTree/search.html:273 templates/js/part.js:109 +#: report/models.py:179 templates/InvenTree/search.html:137 +#: templates/InvenTree/search.html:289 templates/js/part.js:109 msgid "Name" msgstr "Name" #: InvenTree/models.py:114 build/models.py:134 -#: build/templates/build/detail.html:21 company/models.py:365 -#: company/templates/company/detail.html:26 +#: build/templates/build/detail.html:21 company/models.py:342 +#: company/models.py:494 company/templates/company/detail.html:27 +#: company/templates/company/manufacturer_part_base.html:72 #: company/templates/company/supplier_part_base.html:70 #: company/templates/company/supplier_part_detail.html:31 label/models.py:108 #: order/models.py:101 order/templates/order/purchase_order_detail.html:168 @@ -151,8 +152,8 @@ msgstr "Name" #: part/templates/part/set_category.html:14 report/models.py:192 #: report/models.py:505 report/models.py:544 #: report/templates/report/inventree_build_order_base.html:118 -#: templates/InvenTree/search.html:143 templates/InvenTree/search.html:208 -#: templates/InvenTree/search.html:280 +#: templates/InvenTree/search.html:144 templates/InvenTree/search.html:224 +#: templates/InvenTree/search.html:296 #: templates/InvenTree/settings/header.html:9 templates/js/bom.js:190 #: templates/js/build.js:677 templates/js/build.js:944 #: templates/js/company.js:56 templates/js/order.js:183 @@ -314,7 +315,7 @@ msgstr "Passwort eingeben" msgid "Password fields must match" msgstr "Passwörter stimmen nicht überein" -#: InvenTree/views.py:887 templates/navbar.html:85 +#: InvenTree/views.py:887 templates/navbar.html:95 msgid "System Information" msgstr "Systeminformationen" @@ -366,7 +367,7 @@ msgstr "Bauauftrags-Referenz" msgid "Order target date" msgstr "geplantes Bestelldatum" -#: build/forms.py:39 build/templates/build/build_base.html:104 +#: build/forms.py:39 build/templates/build/build_base.html:107 #: build/templates/build/detail.html:121 order/forms.py:109 order/forms.py:144 #: order/templates/order/order_base.html:124 #: order/templates/order/sales_order_base.html:117 @@ -383,31 +384,29 @@ msgstr "Zieldatum für Bauauftrag-Fertigstellung." #: build/forms.py:45 build/forms.py:87 build/forms.py:257 build/models.py:1103 #: build/templates/build/auto_allocate.html:17 -#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:94 #: build/templates/build/detail.html:31 common/models.py:696 -#: company/forms.py:131 company/templates/company/supplier_part_pricing.html:77 +#: company/forms.py:176 company/templates/company/supplier_part_pricing.html:77 #: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261 #: order/forms.py:278 order/models.py:593 order/models.py:784 #: order/templates/order/order_wizard/select_parts.html:32 -#: order/templates/order/purchase_order_detail.html:193 +#: order/templates/order/purchase_order_detail.html:200 #: order/templates/order/sales_order_detail.html:70 #: order/templates/order/sales_order_detail.html:77 #: order/templates/order/sales_order_detail.html:159 -#: order/templates/order/sales_order_detail.html:224 part/forms.py:340 -#: part/forms.py:369 part/forms.py:385 part/models.py:2158 +#: order/templates/order/sales_order_detail.html:224 part/forms.py:342 +#: part/forms.py:371 part/forms.py:387 part/models.py:2158 #: part/templates/part/allocation.html:19 #: part/templates/part/allocation.html:53 -#: part/templates/part/part_pricing.html:12 -#: part/templates/part/part_pricing.html:19 +#: part/templates/part/part_pricing.html:11 +#: part/templates/part/part_pricing.html:18 #: part/templates/part/sale_prices.html:85 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:77 -#: stock/forms.py:175 stock/forms.py:308 stock/models.py:1563 -#: stock/templates/stock/item_base.html:51 -#: stock/templates/stock/item_base.html:57 -#: stock/templates/stock/item_base.html:240 +#: stock/forms.py:175 stock/forms.py:308 stock/models.py:1565 +#: stock/templates/stock/item_base.html:244 #: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364 #: templates/js/bom.js:205 templates/js/build.js:420 templates/js/build.js:954 #: templates/js/stock.js:956 templates/js/stock.js:1194 @@ -452,9 +451,9 @@ msgstr "Bauauftrag als vollständig markieren" #: build/forms.py:213 build/templates/build/auto_allocate.html:18 #: order/forms.py:82 stock/forms.py:347 -#: stock/templates/stock/item_base.html:270 +#: stock/templates/stock/item_base.html:274 #: stock/templates/stock/stock_adjust.html:17 -#: templates/InvenTree/search.html:244 templates/js/barcode.js:363 +#: templates/InvenTree/search.html:260 templates/js/barcode.js:363 #: templates/js/barcode.js:531 templates/js/build.js:434 #: templates/js/stock.js:641 msgid "Location" @@ -488,8 +487,8 @@ msgstr "Bauabbruch bestätigen" msgid "Select quantity of stock to allocate" msgstr "Menge der BestandsObjekte für Zuordnung auswählen" -#: build/models.py:65 build/templates/build/build_base.html:8 -#: build/templates/build/build_base.html:35 +#: build/models.py:65 build/templates/build/build_base.html:9 +#: build/templates/build/build_base.html:38 #: part/templates/part/allocation.html:23 #: report/templates/report/inventree_build_order_base.html:106 msgid "Build Order" @@ -500,7 +499,7 @@ msgstr "Bauauftrag" #: order/templates/order/so_navbar.html:19 #: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55 #: part/templates/part/navbar.html:58 templates/InvenTree/index.html:182 -#: templates/InvenTree/search.html:169 +#: templates/InvenTree/search.html:185 #: templates/InvenTree/settings/tabs.html:31 users/models.py:41 msgid "Build Orders" msgstr "Bauaufträge" @@ -510,7 +509,7 @@ msgid "Build Order Reference" msgstr "Bauauftragsreferenz" #: build/models.py:127 order/models.py:99 order/models.py:595 -#: order/templates/order/purchase_order_detail.html:188 +#: order/templates/order/purchase_order_detail.html:195 #: order/templates/order/sales_order_detail.html:219 part/models.py:2167 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197 @@ -522,7 +521,7 @@ msgstr "Referenz" msgid "Brief description of the build" msgstr "Kurze Beschreibung des Baus" -#: build/models.py:146 build/templates/build/build_base.html:121 +#: build/models.py:146 build/templates/build/build_base.html:124 #: build/templates/build/detail.html:77 msgid "Parent Build" msgstr "Eltern-Bauauftrag" @@ -532,8 +531,8 @@ msgid "BuildOrder to which this build is allocated" msgstr "Bauauftrag, zu dem dieser Bauauftrag zugwiesen ist" #: build/models.py:152 build/templates/build/auto_allocate.html:16 -#: build/templates/build/build_base.html:86 -#: build/templates/build/detail.html:26 company/models.py:539 +#: build/templates/build/build_base.html:89 +#: build/templates/build/detail.html:26 company/models.py:669 #: order/models.py:637 order/models.py:669 #: order/templates/order/order_wizard/select_parts.html:30 #: order/templates/order/purchase_order_detail.html:156 @@ -542,17 +541,17 @@ msgstr "Bauauftrag, zu dem dieser Bauauftrag zugwiesen ist" #: part/models.py:1856 part/models.py:1868 part/models.py:1886 #: part/models.py:1961 part/models.py:2057 part/models.py:2142 #: part/templates/part/part_app_base.html:7 -#: part/templates/part/part_pricing.html:15 part/templates/part/related.html:29 +#: part/templates/part/part_pricing.html:14 part/templates/part/related.html:29 #: part/templates/part/set_category.html:13 #: part/templates/part/subcategories.html:17 #: report/templates/report/inventree_build_order_base.html:110 #: report/templates/report/inventree_po_report.html:90 #: report/templates/report/inventree_so_report.html:90 -#: templates/InvenTree/search.html:111 templates/InvenTree/search.html:194 +#: templates/InvenTree/search.html:112 templates/InvenTree/search.html:210 #: templates/js/barcode.js:362 templates/js/bom.js:163 #: templates/js/build.js:681 templates/js/build.js:921 -#: templates/js/company.js:138 templates/js/part.js:232 -#: templates/js/part.js:337 templates/js/stock.js:523 +#: templates/js/company.js:140 templates/js/company.js:238 +#: templates/js/part.js:232 templates/js/part.js:337 templates/js/stock.js:523 #: templates/js/stock.js:1266 msgid "Part" msgstr "Teil" @@ -605,7 +604,7 @@ msgstr "Fertiggestellte Teile" msgid "Number of stock items which have been completed" msgstr "Anzahl der fertigen BestandsObjekte" -#: build/models.py:204 part/templates/part/part_base.html:159 +#: build/models.py:204 part/templates/part/part_base.html:160 msgid "Build Status" msgstr "Bau-Status" @@ -613,7 +612,7 @@ msgstr "Bau-Status" msgid "Build status code" msgstr "Bau-Statuscode" -#: build/models.py:212 stock/models.py:430 +#: build/models.py:212 stock/models.py:432 msgid "Batch Code" msgstr "Losnummer" @@ -646,7 +645,7 @@ msgstr "Aufgegeben von" msgid "User who issued this build order" msgstr "Nutzer der diesen Bauauftrag erstellt hat" -#: build/models.py:250 build/templates/build/build_base.html:142 +#: build/models.py:250 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:105 order/models.py:119 #: order/templates/order/order_base.html:138 #: order/templates/order/sales_order_base.html:138 part/models.py:886 @@ -659,33 +658,35 @@ msgid "User responsible for this build order" msgstr "Nutzer der für diesen Bauauftrag zuständig ist" #: build/models.py:256 build/templates/build/detail.html:91 +#: company/templates/company/manufacturer_part_base.html:79 +#: company/templates/company/manufacturer_part_detail.html:28 #: company/templates/company/supplier_part_base.html:77 #: company/templates/company/supplier_part_detail.html:28 -#: part/templates/part/detail.html:83 part/templates/part/part_base.html:100 -#: stock/models.py:424 stock/templates/stock/item_base.html:330 +#: part/templates/part/detail.html:83 part/templates/part/part_base.html:101 +#: stock/models.py:426 stock/templates/stock/item_base.html:334 msgid "External Link" msgstr "Externer Link" -#: build/models.py:257 part/models.py:744 stock/models.py:426 +#: build/models.py:257 part/models.py:744 stock/models.py:428 msgid "Link to external URL" msgstr "Link zu einer externen URL" #: build/models.py:261 build/templates/build/navbar.html:59 -#: company/models.py:133 company/models.py:372 -#: company/templates/company/navbar.html:59 -#: company/templates/company/navbar.html:62 order/models.py:123 +#: company/models.py:135 company/models.py:501 +#: company/templates/company/navbar.html:70 +#: company/templates/company/navbar.html:73 order/models.py:123 #: order/models.py:597 order/templates/order/po_navbar.html:29 #: order/templates/order/po_navbar.html:32 -#: order/templates/order/purchase_order_detail.html:227 +#: order/templates/order/purchase_order_detail.html:234 #: order/templates/order/sales_order_detail.html:264 #: order/templates/order/so_navbar.html:33 #: order/templates/order/so_navbar.html:36 part/models.py:871 -#: part/templates/part/navbar.html:122 +#: part/templates/part/navbar.html:128 #: report/templates/report/inventree_build_order_base.html:173 #: stock/forms.py:173 stock/forms.py:317 stock/forms.py:349 stock/forms.py:377 -#: stock/models.py:496 stock/models.py:1555 stock/models.py:1665 +#: stock/models.py:498 stock/models.py:1557 stock/models.py:1667 #: stock/templates/stock/navbar.html:57 templates/js/barcode.js:37 -#: templates/js/bom.js:329 templates/js/stock.js:128 templates/js/stock.js:671 +#: templates/js/bom.js:333 templates/js/stock.js:128 templates/js/stock.js:671 msgid "Notes" msgstr "Notizen" @@ -743,8 +744,8 @@ msgstr "Reserviermenge muss größer null sein" msgid "Quantity must be 1 for serialized stock" msgstr "Anzahl muss 1 für Objekte mit Seriennummer sein" -#: build/models.py:1082 stock/templates/stock/item_base.html:302 -#: templates/InvenTree/search.html:167 templates/js/build.js:655 +#: build/models.py:1082 stock/templates/stock/item_base.html:306 +#: templates/InvenTree/search.html:183 templates/js/build.js:655 #: templates/navbar.html:29 msgid "Build" msgstr "Bauauftrag" @@ -758,8 +759,8 @@ msgstr "Bauauftrag starten um Teile zuzuweisen" #: part/templates/part/allocation.html:31 #: part/templates/part/allocation.html:49 #: stock/templates/stock/item_base.html:8 -#: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/item_base.html:324 +#: stock/templates/stock/item_base.html:93 +#: stock/templates/stock/item_base.html:328 #: stock/templates/stock/stock_adjust.html:16 templates/js/build.js:771 #: templates/js/stock.js:927 templates/js/stock.js:1185 msgid "Stock Item" @@ -802,7 +803,8 @@ msgid "Order required parts" msgstr "Benötigte Teile bestellen" #: build/templates/build/allocate.html:31 -#: company/templates/company/detail_part.html:31 order/views.py:794 +#: company/templates/company/detail_manufacturer_part.html:33 +#: company/templates/company/detail_supplier_part.html:32 order/views.py:794 #: part/templates/part/category.html:127 msgid "Order Parts" msgstr "Teile bestellen" @@ -830,8 +832,8 @@ msgstr "Neues Endprodukt mit der Schaltfläche obehalb anlegen" #: build/templates/build/attachments.html:12 #: build/templates/build/navbar.html:49 build/templates/build/navbar.html:52 #: order/templates/order/po_navbar.html:26 -#: order/templates/order/so_navbar.html:29 part/templates/part/navbar.html:113 -#: part/templates/part/navbar.html:116 stock/templates/stock/navbar.html:47 +#: order/templates/order/so_navbar.html:29 part/templates/part/navbar.html:119 +#: part/templates/part/navbar.html:122 stock/templates/stock/navbar.html:47 #: stock/templates/stock/navbar.html:50 msgid "Attachments" msgstr "Anhänge" @@ -856,27 +858,32 @@ msgstr "" msgid "Stock items will have to be manually allocated" msgstr "BestandsObjekte müssen manuell zugewiesen werden" -#: build/templates/build/build_base.html:14 -msgid "This Build Order is allocated to Sales Order" +#: build/templates/build/build_base.html:16 +#, fuzzy, python-format +#| msgid "This Build Order is allocated to Sales Order" +msgid "This Build Order is allocated to Sales Order %(link)s" msgstr "Dieser Bauauftrag ist einem Auftrag zugeordnet" -#: build/templates/build/build_base.html:19 -msgid "This Build Order is a child of Build Order" +#: build/templates/build/build_base.html:22 +#, fuzzy, python-format +#| msgid "This Build Order is a child of Build Order" +msgid "This Build Order is a child of Build Order %(link)s" msgstr "Dieser Bauauftrag ist einem Bauauftrag untergeordnet" -#: build/templates/build/build_base.html:37 +#: build/templates/build/build_base.html:40 #: company/templates/company/company_base.html:40 +#: company/templates/company/manufacturer_part_base.html:25 #: company/templates/company/supplier_part_base.html:25 #: order/templates/order/order_base.html:26 #: order/templates/order/sales_order_base.html:35 -#: part/templates/part/category.html:14 part/templates/part/part_base.html:28 -#: stock/templates/stock/item_base.html:114 +#: part/templates/part/category.html:14 part/templates/part/part_base.html:29 +#: stock/templates/stock/item_base.html:118 #: stock/templates/stock/location.html:24 msgid "Admin view" msgstr "Admin" -#: build/templates/build/build_base.html:43 -#: build/templates/build/build_base.html:108 +#: build/templates/build/build_base.html:46 +#: build/templates/build/build_base.html:111 #: order/templates/order/order_base.html:32 #: order/templates/order/order_base.html:86 #: order/templates/order/sales_order_base.html:41 @@ -886,57 +893,59 @@ msgstr "Admin" msgid "Overdue" msgstr "Überfällig" -#: build/templates/build/build_base.html:52 +#: build/templates/build/build_base.html:55 msgid "Print actions" msgstr "Aktionen drucken" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:59 msgid "Print Build Order" msgstr "Bauauftrag drucken" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:65 msgid "Build actions" msgstr "Bau-Auftrag Aktionen" -#: build/templates/build/build_base.html:66 +#: build/templates/build/build_base.html:69 msgid "Edit Build" msgstr "Bauauftrag bearbeiten" -#: build/templates/build/build_base.html:68 -#: build/templates/build/build_base.html:176 +#: build/templates/build/build_base.html:71 +#: build/templates/build/build_base.html:179 msgid "Complete Build" msgstr "Bauauftrag fertigstellen" -#: build/templates/build/build_base.html:69 -#: build/templates/build/build_base.html:167 build/views.py:57 +#: build/templates/build/build_base.html:72 +#: build/templates/build/build_base.html:170 build/views.py:57 msgid "Cancel Build" msgstr "Bauauftrag abbrechen" -#: build/templates/build/build_base.html:82 +#: build/templates/build/build_base.html:85 #: build/templates/build/detail.html:11 msgid "Build Details" msgstr "Bau-Status" -#: build/templates/build/build_base.html:96 +#: build/templates/build/build_base.html:99 #: build/templates/build/detail.html:59 order/models.py:445 #: order/templates/order/receive_parts.html:24 -#: stock/templates/stock/item_base.html:376 templates/InvenTree/search.html:236 +#: stock/templates/stock/item_base.html:392 templates/InvenTree/search.html:252 #: templates/js/barcode.js:119 templates/js/build.js:710 #: templates/js/order.js:187 templates/js/order.js:285 #: templates/js/stock.js:628 templates/js/stock.js:1202 msgid "Status" msgstr "Status" -#: build/templates/build/build_base.html:108 -msgid "This build was due on" +#: build/templates/build/build_base.html:111 +#, fuzzy, python-format +#| msgid "This build was due on" +msgid "This build was due on %(target)s" msgstr "Fertigung überfällig seit" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:118 #: build/templates/build/detail.html:64 msgid "Progress" msgstr "Fortschritt" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:131 #: build/templates/build/detail.html:84 order/models.py:667 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:33 @@ -944,11 +953,11 @@ msgstr "Fortschritt" #: part/templates/part/allocation.html:30 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:264 templates/js/order.js:245 +#: stock/templates/stock/item_base.html:268 templates/js/order.js:245 msgid "Sales Order" msgstr "Auftrag" -#: build/templates/build/build_base.html:135 +#: build/templates/build/build_base.html:138 #: build/templates/build/detail.html:98 #: report/templates/report/inventree_build_order_base.html:153 msgid "Issued By" @@ -1026,12 +1035,19 @@ msgid "Select a stock item to allocate to the selected build output" msgstr "BestandsObjekt zur Zuordnung zum ausgewählten Endprodukt auswählen" #: build/templates/build/create_build_item.html:11 -msgid "The allocated stock will be installed into the following build output:" +#, fuzzy, python-format +#| msgid "" +#| "The allocated stock will be installed into the following build output:" +msgid "" +"The allocated stock will be installed into the following build output:
                        " +"%(output)s" msgstr "" "Der zugeordnete Bestand wird in den folgenden Endprodukten verbaut werden:" -#: build/templates/build/create_build_item.html:19 -msgid "No stock available for" +#: build/templates/build/create_build_item.html:17 +#, fuzzy, python-format +#| msgid "No stock available for" +msgid "No stock available for %(part)s" msgstr "Kein Bestand verfügbar für" #: build/templates/build/delete_build_item.html:8 @@ -1060,7 +1076,7 @@ msgid "Destination location not specified" msgstr "Ziel-Lagerort nicht angegeben" #: build/templates/build/detail.html:70 -#: stock/templates/stock/item_base.html:288 templates/js/stock.js:636 +#: stock/templates/stock/item_base.html:292 templates/js/stock.js:636 #: templates/js/stock.js:1209 templates/js/table_filters.js:85 #: templates/js/table_filters.js:179 msgid "Batch" @@ -1151,7 +1167,7 @@ msgstr "Bermerkungen bearbeiten" #: build/templates/build/notes.html:26 company/templates/company/notes.html:24 #: order/templates/order/order_notes.html:27 #: order/templates/order/sales_order_notes.html:29 -#: part/templates/part/notes.html:27 stock/templates/stock/item_base.html:454 +#: part/templates/part/notes.html:27 stock/templates/stock/item_base.html:470 #: stock/templates/stock/item_notes.html:26 msgid "Save" msgstr "Speichern" @@ -1187,7 +1203,7 @@ msgstr "Bestand dem Endprodukt zuweisen" msgid "Create Build Output" msgstr "Endprodukt anlegen" -#: build/views.py:203 stock/models.py:966 stock/views.py:1789 +#: build/views.py:203 stock/models.py:968 stock/views.py:1789 msgid "Serial numbers already exist" msgstr "Seriennummern existieren bereits" @@ -1327,7 +1343,7 @@ msgstr "InvenTree Instanzname" msgid "String descriptor for the server instance" msgstr "Kurze Beschreibung der Instanz" -#: common/models.py:62 company/models.py:95 company/models.py:96 +#: common/models.py:62 company/models.py:97 company/models.py:98 msgid "Company name" msgstr "Firmenname" @@ -1646,7 +1662,7 @@ msgstr "Nur Ganzzahl eingeben" msgid "Key string must be unique" msgstr "Schlüsseltext muss eindeutig sein" -#: common/models.py:697 company/forms.py:132 +#: common/models.py:697 company/forms.py:177 msgid "Price break quantity" msgstr "Preisstaffelungs Anzahl" @@ -1679,224 +1695,263 @@ msgstr "Angegebener Wert nicht erlaubt" msgid "Supplied value must be a boolean" msgstr "Angegebener Wert muss ein Wahrheitswert sein" -#: company/forms.py:37 company/models.py:143 -#: company/templates/company/detail.html:40 +#: company/forms.py:38 company/models.py:145 +#: company/templates/company/detail.html:42 msgid "Currency" msgstr "Währung" -#: company/forms.py:38 company/models.py:145 +#: company/forms.py:39 company/models.py:147 msgid "Default currency used for this company" msgstr "Standard-Währung für diese Firma" -#: company/forms.py:76 part/forms.py:46 +#: company/forms.py:77 part/forms.py:46 msgid "URL" msgstr "URL" -#: company/forms.py:77 part/forms.py:47 +#: company/forms.py:78 part/forms.py:47 msgid "Image URL" msgstr "Bild-URL" -#: company/forms.py:99 +#: company/forms.py:118 msgid "Single Price" msgstr "Einzelpreis" -#: company/forms.py:101 +#: company/forms.py:120 msgid "Single quantity price" msgstr "Preis für eine Einheit" -#: company/models.py:100 -msgid "Company description" -msgstr "Firmenbeschreibung" - -#: company/models.py:101 -msgid "Description of the company" -msgstr "Firmenbeschreibung" - -#: company/models.py:105 company/templates/company/company_base.html:70 -#: company/templates/company/detail.html:31 templates/js/company.js:60 -msgid "Website" -msgstr "Website" - -#: company/models.py:105 -msgid "Company website URL" -msgstr "Firmenwebsite Adresse/URL" - -#: company/models.py:108 company/templates/company/company_base.html:77 -msgid "Address" -msgstr "Adresse" - -#: company/models.py:109 -msgid "Company address" -msgstr "Firmenadresse" - -#: company/models.py:112 -msgid "Phone number" -msgstr "Kontakt-Tel." - -#: company/models.py:113 -msgid "Contact phone number" -msgstr "Kontakt-Telefon" - -#: company/models.py:116 company/templates/company/company_base.html:91 -msgid "Email" -msgstr "Email" - -#: company/models.py:116 -msgid "Contact email address" -msgstr "Kontakt-Email" - -#: company/models.py:119 company/templates/company/company_base.html:98 -msgid "Contact" -msgstr "Kontakt" - -#: company/models.py:120 -msgid "Point of contact" -msgstr "Anlaufstelle" - -#: company/models.py:122 company/models.py:359 order/models.py:103 -#: part/models.py:743 -#: report/templates/report/inventree_build_order_base.html:165 -#: stock/models.py:1557 templates/js/company.js:208 templates/js/part.js:430 -msgid "Link" -msgstr "Link" - -#: company/models.py:122 -msgid "Link to external company information" -msgstr "Link auf externe Firmeninformation" - -#: company/models.py:130 part/models.py:753 -msgid "Image" -msgstr "Bild" - -#: company/models.py:135 -msgid "is customer" -msgstr "ist Kunde" - -#: company/models.py:135 -msgid "Do you sell items to this company?" -msgstr "Verkaufen Sie Teile an diese Firma?" - -#: company/models.py:137 -msgid "is supplier" -msgstr "ist Zulieferer" - -#: company/models.py:137 -msgid "Do you purchase items from this company?" -msgstr "Kaufen Sie Teile von dieser Firma?" - -#: company/models.py:139 -msgid "is manufacturer" -msgstr "ist Hersteller" - -#: company/models.py:139 -msgid "Does this company manufacture parts?" -msgstr "Produziert diese Firma Teile?" - -#: company/models.py:319 stock/models.py:371 -#: stock/templates/stock/item_base.html:220 -msgid "Base Part" -msgstr "Basisteil" - -#: company/models.py:323 order/views.py:1372 -msgid "Select part" -msgstr "Teil auswählen" - -#: company/models.py:329 company/templates/company/detail.html:60 -#: company/templates/company/supplier_part_base.html:83 -#: company/templates/company/supplier_part_detail.html:25 order/models.py:190 -#: order/templates/order/order_base.html:92 -#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:170 -#: stock/templates/stock/item_base.html:337 templates/js/company.js:48 -#: templates/js/company.js:164 templates/js/order.js:170 -msgid "Supplier" -msgstr "Zulieferer" - -#: company/models.py:330 -msgid "Select supplier" -msgstr "Zulieferer auswählen" - -#: company/models.py:335 company/templates/company/supplier_part_base.html:87 -#: company/templates/company/supplier_part_detail.html:26 -#: order/templates/order/purchase_order_detail.html:174 part/bom.py:171 -msgid "SKU" -msgstr "SKU (Lagerbestandseinheit)" - -#: company/models.py:336 -msgid "Supplier stock keeping unit" -msgstr "Lagerbestandseinheit (SKU) des Zulieferers" - -#: company/models.py:346 company/templates/company/detail.html:55 -#: company/templates/company/supplier_part_base.html:93 -#: company/templates/company/supplier_part_detail.html:34 part/bom.py:172 -#: templates/js/company.js:44 templates/js/company.js:188 -msgid "Manufacturer" -msgstr "Hersteller" - -#: company/models.py:347 +#: company/forms.py:128 company/models.py:324 msgid "Select manufacturer" msgstr "Hersteller auswählen" -#: company/models.py:353 company/templates/company/supplier_part_base.html:99 +#: company/forms.py:134 company/models.py:331 +#, fuzzy +#| msgid "Manufacturer part number" +msgid "Manufacturer Part Number" +msgstr "Hersteller-Teilenummer" + +#: company/forms.py:136 company/models.py:330 +#: company/templates/company/manufacturer_part_base.html:89 +#: company/templates/company/manufacturer_part_detail.html:26 +#: company/templates/company/supplier_part_base.html:100 #: company/templates/company/supplier_part_detail.html:35 -#: order/templates/order/purchase_order_detail.html:183 part/bom.py:173 -#: templates/js/company.js:204 +#: order/templates/order/purchase_order_detail.html:183 part/bom.py:171 +#: part/bom.py:242 templates/js/company.js:181 templates/js/company.js:307 msgid "MPN" msgstr "MPN" -#: company/models.py:354 -msgid "Manufacturer part number" +#: company/models.py:102 +msgid "Company description" +msgstr "Firmenbeschreibung" + +#: company/models.py:103 +msgid "Description of the company" +msgstr "Firmenbeschreibung" + +#: company/models.py:107 company/templates/company/company_base.html:70 +#: company/templates/company/detail.html:33 templates/js/company.js:60 +msgid "Website" +msgstr "Website" + +#: company/models.py:107 +msgid "Company website URL" +msgstr "Firmenwebsite Adresse/URL" + +#: company/models.py:110 company/templates/company/company_base.html:77 +msgid "Address" +msgstr "Adresse" + +#: company/models.py:111 +msgid "Company address" +msgstr "Firmenadresse" + +#: company/models.py:114 +msgid "Phone number" +msgstr "Kontakt-Tel." + +#: company/models.py:115 +msgid "Contact phone number" +msgstr "Kontakt-Telefon" + +#: company/models.py:118 company/templates/company/company_base.html:91 +msgid "Email" +msgstr "Email" + +#: company/models.py:118 +msgid "Contact email address" +msgstr "Kontakt-Email" + +#: company/models.py:121 company/templates/company/company_base.html:98 +msgid "Contact" +msgstr "Kontakt" + +#: company/models.py:122 +msgid "Point of contact" +msgstr "Anlaufstelle" + +#: company/models.py:124 company/models.py:336 company/models.py:488 +#: order/models.py:103 part/models.py:743 +#: report/templates/report/inventree_build_order_base.html:165 +#: stock/models.py:1559 templates/js/company.js:188 templates/js/company.js:318 +#: templates/js/part.js:430 +msgid "Link" +msgstr "Link" + +#: company/models.py:124 +msgid "Link to external company information" +msgstr "Link auf externe Firmeninformation" + +#: company/models.py:132 part/models.py:753 +msgid "Image" +msgstr "Bild" + +#: company/models.py:137 +msgid "is customer" +msgstr "ist Kunde" + +#: company/models.py:137 +msgid "Do you sell items to this company?" +msgstr "Verkaufen Sie Teile an diese Firma?" + +#: company/models.py:139 +msgid "is supplier" +msgstr "ist Zulieferer" + +#: company/models.py:139 +msgid "Do you purchase items from this company?" +msgstr "Kaufen Sie Teile von dieser Firma?" + +#: company/models.py:141 +msgid "is manufacturer" +msgstr "ist Hersteller" + +#: company/models.py:141 +msgid "Does this company manufacture parts?" +msgstr "Produziert diese Firma Teile?" + +#: company/models.py:308 company/models.py:459 stock/models.py:373 +#: stock/templates/stock/item_base.html:224 +msgid "Base Part" +msgstr "Basisteil" + +#: company/models.py:312 company/models.py:463 order/views.py:1372 +msgid "Select part" +msgstr "Teil auswählen" + +#: company/models.py:323 company/templates/company/detail.html:57 +#: company/templates/company/manufacturer_part_base.html:85 +#: company/templates/company/manufacturer_part_detail.html:25 +#: company/templates/company/supplier_part_base.html:93 +#: company/templates/company/supplier_part_detail.html:34 part/bom.py:170 +#: part/bom.py:241 stock/templates/stock/item_base.html:341 +#: templates/js/company.js:44 templates/js/company.js:165 +#: templates/js/company.js:289 +msgid "Manufacturer" +msgstr "Hersteller" + +#: company/models.py:337 +#, fuzzy +#| msgid "URL for external supplier part link" +msgid "URL for external manufacturer part link" +msgstr "Teil-URL des Zulieferers" + +#: company/models.py:343 +#, fuzzy +#| msgid "Manufacturer part number" +msgid "Manufacturer part description" msgstr "Hersteller-Teilenummer" -#: company/models.py:360 +#: company/models.py:469 company/templates/company/detail.html:62 +#: company/templates/company/supplier_part_base.html:83 +#: company/templates/company/supplier_part_detail.html:25 order/models.py:190 +#: order/templates/order/order_base.html:92 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:175 +#: part/bom.py:286 stock/templates/stock/item_base.html:353 +#: templates/js/company.js:48 templates/js/company.js:263 +#: templates/js/order.js:170 +msgid "Supplier" +msgstr "Zulieferer" + +#: company/models.py:470 +msgid "Select supplier" +msgstr "Zulieferer auswählen" + +#: company/models.py:475 company/templates/company/supplier_part_base.html:87 +#: company/templates/company/supplier_part_detail.html:26 +#: order/templates/order/purchase_order_detail.html:174 part/bom.py:176 +#: part/bom.py:287 +msgid "SKU" +msgstr "SKU (Lagerbestandseinheit)" + +#: company/models.py:476 +msgid "Supplier stock keeping unit" +msgstr "Lagerbestandseinheit (SKU) des Zulieferers" + +#: company/models.py:482 +#: company/templates/company/manufacturer_part_base.html:6 +#: company/templates/company/manufacturer_part_base.html:19 +#: stock/templates/stock/item_base.html:346 +#, fuzzy +#| msgid "Manufacturer" +msgid "Manufacturer Part" +msgstr "Hersteller" + +#: company/models.py:483 +#, fuzzy +#| msgid "Select manufacturer" +msgid "Select manufacturer part" +msgstr "Hersteller auswählen" + +#: company/models.py:489 msgid "URL for external supplier part link" msgstr "Teil-URL des Zulieferers" -#: company/models.py:366 +#: company/models.py:495 msgid "Supplier part description" msgstr "Zuliefererbeschreibung des Teils" -#: company/models.py:371 company/templates/company/supplier_part_base.html:113 +#: company/models.py:500 company/templates/company/supplier_part_base.html:114 #: company/templates/company/supplier_part_detail.html:38 part/models.py:2170 #: report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" msgstr "Notiz" -#: company/models.py:375 +#: company/models.py:504 msgid "base cost" msgstr "Basiskosten" -#: company/models.py:375 +#: company/models.py:504 msgid "Minimum charge (e.g. stocking fee)" msgstr "Mindestpreis" -#: company/models.py:377 company/templates/company/supplier_part_base.html:106 -#: stock/models.py:395 stock/templates/stock/item_base.html:295 +#: company/models.py:506 company/templates/company/supplier_part_base.html:107 +#: stock/models.py:397 stock/templates/stock/item_base.html:299 #: templates/js/stock.js:667 msgid "Packaging" msgstr "Verpackungen" -#: company/models.py:377 +#: company/models.py:506 msgid "Part packaging" msgstr "Teile-Verpackungen" -#: company/models.py:379 +#: company/models.py:508 msgid "multiple" msgstr "Vielfache" -#: company/models.py:379 +#: company/models.py:508 msgid "Order multiple" msgstr "Mehrere bestellen" #: company/templates/company/assigned_stock.html:10 -#: company/templates/company/navbar.html:51 -#: company/templates/company/navbar.html:54 templates/js/build.js:411 +#: company/templates/company/navbar.html:62 +#: company/templates/company/navbar.html:65 templates/js/build.js:411 msgid "Assigned Stock" msgstr "Zugeordneter Bestand" #: company/templates/company/company_base.html:9 #: company/templates/company/company_base.html:35 -#: templates/InvenTree/search.html:288 templates/js/company.js:33 +#: templates/InvenTree/search.html:304 templates/js/company.js:33 msgid "Company" msgstr "Firma" @@ -1918,7 +1973,7 @@ msgstr "Bestellung anlegen" msgid "Edit company information" msgstr "Firmeninformation bearbeiten" -#: company/templates/company/company_base.html:56 company/views.py:324 +#: company/templates/company/company_base.html:56 company/views.py:326 msgid "Delete Company" msgstr "Firma löschen" @@ -1949,83 +2004,86 @@ msgstr "" msgid "Company Name" msgstr "Firmenname" -#: company/templates/company/detail.html:34 +#: company/templates/company/detail.html:36 msgid "No website specified" msgstr "Keine Website angegeben" -#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:45 msgid "Uses default currency" msgstr "verwendet Standard-Währung" -#: company/templates/company/detail.html:65 order/models.py:440 -#: order/templates/order/sales_order_base.html:92 stock/models.py:413 -#: stock/models.py:414 stock/templates/stock/item_base.html:247 +#: company/templates/company/detail.html:67 order/models.py:440 +#: order/templates/order/sales_order_base.html:92 stock/models.py:415 +#: stock/models.py:416 stock/templates/stock/item_base.html:251 #: templates/js/company.js:40 templates/js/order.js:267 msgid "Customer" msgstr "Kunde" -#: company/templates/company/detail_part.html:10 -#: templates/InvenTree/search.html:148 -msgid "Supplier Parts" -msgstr "Zulieferer-Teile" +#: company/templates/company/detail_manufacturer_part.html:11 +#: templates/InvenTree/search.html:149 +#, fuzzy +#| msgid "Manufacturers" +msgid "Manufacturer Parts" +msgstr "Hersteller" -#: company/templates/company/detail_part.html:20 -#: order/templates/order/order_wizard/select_parts.html:42 -#: order/templates/order/purchase_order_detail.html:75 -msgid "Create new supplier part" -msgstr "Neues Zulieferer-Teil anlegen" +#: company/templates/company/detail_manufacturer_part.html:22 +#, fuzzy +#| msgid "Create new manufacturer" +msgid "Create new manufacturer part" +msgstr "Neuen Hersteller anlegen" -#: company/templates/company/detail_part.html:21 -#: order/templates/order/purchase_order_detail.html:74 -#: part/templates/part/supplier.html:17 templates/js/stock.js:1086 -msgid "New Supplier Part" -msgstr "Neues Zulieferer-Teil" +#: company/templates/company/detail_manufacturer_part.html:23 +#: part/templates/part/manufacturer.html:19 +#, fuzzy +#| msgid "New Manufacturer" +msgid "New Manufacturer Part" +msgstr "Neuer Hersteller" -#: company/templates/company/detail_part.html:26 -#: part/templates/part/category.html:122 part/templates/part/supplier.html:20 +#: company/templates/company/detail_manufacturer_part.html:28 +#: company/templates/company/detail_supplier_part.html:27 +#: company/templates/company/manufacturer_part_suppliers.html:20 +#: part/templates/part/category.html:122 +#: part/templates/part/manufacturer.html:22 +#: part/templates/part/supplier.html:20 msgid "Options" msgstr "Optionen" -#: company/templates/company/detail_part.html:31 +#: company/templates/company/detail_manufacturer_part.html:33 +#: company/templates/company/detail_supplier_part.html:32 #: part/templates/part/category.html:127 msgid "Order parts" msgstr "Teile bestellen" -#: company/templates/company/detail_part.html:34 +#: company/templates/company/detail_manufacturer_part.html:36 +#: company/templates/company/detail_supplier_part.html:35 msgid "Delete parts" msgstr "Teile löschen" -#: company/templates/company/detail_part.html:34 +#: company/templates/company/detail_manufacturer_part.html:36 +#: company/templates/company/detail_supplier_part.html:35 msgid "Delete Parts" msgstr "Teile löschen" -#: company/templates/company/detail_part.html:66 +#: company/templates/company/detail_manufacturer_part.html:66 +#: company/templates/company/detail_supplier_part.html:66 #: part/templates/part/bom.html:159 part/templates/part/category.html:118 #: templates/js/stock.js:1080 msgid "New Part" msgstr "Neues Teil" -#: company/templates/company/detail_part.html:67 +#: company/templates/company/detail_manufacturer_part.html:67 +#: company/templates/company/detail_supplier_part.html:67 msgid "Create new Part" msgstr "Neues Teil hinzufügen" -#: company/templates/company/detail_part.html:72 company/views.py:62 -#: order/templates/order/purchase_orders.html:183 -#: part/templates/part/supplier.html:50 -msgid "New Supplier" -msgstr "Neuer Zulieferer" - -#: company/templates/company/detail_part.html:73 company/views.py:279 -#: order/templates/order/purchase_orders.html:184 -msgid "Create new Supplier" -msgstr "Neuen Zulieferer anlegen" - -#: company/templates/company/detail_part.html:78 company/views.py:69 +#: company/templates/company/detail_manufacturer_part.html:72 +#: company/views.py:71 part/templates/part/manufacturer.html:52 #: part/templates/part/supplier.html:56 msgid "New Manufacturer" msgstr "Neuer Hersteller" -#: company/templates/company/detail_part.html:79 company/views.py:282 +#: company/templates/company/detail_manufacturer_part.html:73 +#: company/views.py:284 msgid "Create new Manufacturer" msgstr "Neuen Hersteller anlegen" @@ -2040,67 +2098,183 @@ msgstr "Zulieferer-Bestand" msgid "Export" msgstr "Exportieren" +#: company/templates/company/detail_supplier_part.html:11 +#: company/templates/company/manufacturer_part_navbar.html:11 +#: company/templates/company/manufacturer_part_suppliers.html:10 +#: templates/InvenTree/search.html:164 +msgid "Supplier Parts" +msgstr "Zulieferer-Teile" + +#: company/templates/company/detail_supplier_part.html:21 +#: order/templates/order/order_wizard/select_parts.html:42 +#: order/templates/order/purchase_order_detail.html:75 +msgid "Create new supplier part" +msgstr "Neues Zulieferer-Teil anlegen" + +#: company/templates/company/detail_supplier_part.html:22 +#: company/templates/company/manufacturer_part_suppliers.html:17 +#: order/templates/order/purchase_order_detail.html:74 +#: part/templates/part/supplier.html:17 templates/js/stock.js:1086 +msgid "New Supplier Part" +msgstr "Neues Zulieferer-Teil" + +#: company/templates/company/detail_supplier_part.html:72 +#: company/templates/company/manufacturer_part_suppliers.html:47 +#: company/views.py:64 order/templates/order/purchase_orders.html:183 +#: part/templates/part/supplier.html:50 +msgid "New Supplier" +msgstr "Neuer Zulieferer" + +#: company/templates/company/detail_supplier_part.html:73 company/views.py:281 +#: order/templates/order/purchase_orders.html:184 +msgid "Create new Supplier" +msgstr "Neuen Zulieferer anlegen" + #: company/templates/company/index.html:7 msgid "Supplier List" msgstr "Zulieferer-Liste" -#: company/templates/company/navbar.html:20 -msgid "Supplied Parts" -msgstr "Zulieferer-Teile" +#: company/templates/company/manufacturer_part_base.html:36 +#: company/templates/company/supplier_part_base.html:35 +#: company/templates/company/supplier_part_orders.html:17 +#: part/templates/part/orders.html:17 part/templates/part/part_base.html:65 +msgid "Order part" +msgstr "Teil bestellen" -#: company/templates/company/navbar.html:23 -#: order/templates/order/receive_parts.html:14 part/api.py:40 -#: part/models.py:322 part/templates/part/cat_link.html:7 -#: part/templates/part/category.html:95 -#: part/templates/part/category_navbar.html:11 -#: part/templates/part/category_navbar.html:14 -#: part/templates/part/category_partlist.html:10 -#: templates/InvenTree/index.html:96 templates/InvenTree/search.html:113 -#: templates/InvenTree/settings/tabs.html:25 templates/navbar.html:23 -#: templates/stats.html:59 templates/stats.html:68 users/models.py:38 -msgid "Parts" -msgstr "Teile" +#: company/templates/company/manufacturer_part_base.html:41 +#, fuzzy +#| msgid "is manufacturer" +msgid "Edit manufacturer part" +msgstr "ist Hersteller" -#: company/templates/company/navbar.html:27 part/templates/part/navbar.html:33 -#: stock/templates/stock/location.html:100 -#: stock/templates/stock/location.html:115 templates/InvenTree/search.html:182 -#: templates/stats.html:72 templates/stats.html:81 users/models.py:40 -msgid "Stock Items" -msgstr "BestandsObjekte" +#: company/templates/company/manufacturer_part_base.html:45 +#, fuzzy +#| msgid "Select manufacturer" +msgid "Delete manufacturer part" +msgstr "Hersteller auswählen" -#: company/templates/company/navbar.html:30 -#: company/templates/company/part_navbar.html:14 +#: company/templates/company/manufacturer_part_base.html:57 +#: company/templates/company/manufacturer_part_detail.html:10 +#, fuzzy +#| msgid "Manufacturer part number" +msgid "Manufacturer Part Details" +msgstr "Hersteller-Teilenummer" + +#: company/templates/company/manufacturer_part_base.html:62 +#: company/templates/company/manufacturer_part_detail.html:18 +#: company/templates/company/supplier_part_base.html:60 +#: company/templates/company/supplier_part_detail.html:18 +msgid "Internal Part" +msgstr "Internes Teil" + +#: company/templates/company/manufacturer_part_delete.html:6 +#, fuzzy +#| msgid "Are you sure you want to delete the following Supplier Parts?" +msgid "Are you sure you want to delete the following Manufacturer Parts?" +msgstr "" +"Sind Sie sicher, dass sie die folgenden Zulieferer-Teile löschen möchten?" + +#: company/templates/company/manufacturer_part_delete.html:36 +#, python-format +msgid "" +"There are %(count)s suppliers defined for this manufacturer part. If you " +"delete it, the following supplier parts will also be deleted:" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:14 +#: company/views.py:63 part/templates/part/navbar.html:78 +#: part/templates/part/navbar.html:81 templates/InvenTree/search.html:316 +#: templates/navbar.html:35 +msgid "Suppliers" +msgstr "Zulieferer" + +#: company/templates/company/manufacturer_part_navbar.html:19 +#, fuzzy +#| msgid "Manufacturer part number" +msgid "Manufacturer Part Stock" +msgstr "Hersteller-Teilenummer" + +#: company/templates/company/manufacturer_part_navbar.html:22 +#: company/templates/company/navbar.html:41 +#: company/templates/company/supplier_part_navbar.html:15 #: part/templates/part/navbar.html:36 stock/api.py:51 #: stock/templates/stock/loc_link.html:7 stock/templates/stock/location.html:29 #: stock/templates/stock/stock_app_base.html:9 -#: templates/InvenTree/index.html:127 templates/InvenTree/search.html:180 -#: templates/InvenTree/search.html:216 +#: templates/InvenTree/index.html:127 templates/InvenTree/search.html:196 +#: templates/InvenTree/search.html:232 #: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:172 #: templates/js/part.js:397 templates/js/stock.js:563 templates/navbar.html:26 msgid "Stock" msgstr "Lagerbestand" -#: company/templates/company/navbar.html:36 -#: company/templates/company/navbar.html:45 -#: company/templates/company/navbar.html:48 +#: company/templates/company/manufacturer_part_navbar.html:26 +#, fuzzy +#| msgid "Manufacturer part number" +msgid "Manufacturer Part Orders" +msgstr "Hersteller-Teilenummer" + +#: company/templates/company/manufacturer_part_navbar.html:29 +#: company/templates/company/supplier_part_navbar.html:22 +msgid "Orders" +msgstr "Bestellungen" + +#: company/templates/company/manufacturer_part_suppliers.html:22 +#: part/templates/part/supplier.html:22 +msgid "Delete supplier parts" +msgstr "Zuliefererteil entfernen" + +#: company/templates/company/manufacturer_part_suppliers.html:22 +#: part/templates/part/manufacturer.html:24 part/templates/part/params.html:44 +#: part/templates/part/related.html:44 part/templates/part/supplier.html:22 +#: stock/views.py:1002 users/models.py:183 +msgid "Delete" +msgstr "Löschen" + +#: company/templates/company/manufacturer_part_suppliers.html:48 +#: part/templates/part/supplier.html:51 +msgid "Create new supplier" +msgstr "Neuen Zulieferer anlegen" + +#: company/templates/company/navbar.html:20 +#: company/templates/company/navbar.html:23 +#, fuzzy +#| msgid "Manufacturers" +msgid "Manufactured Parts" +msgstr "Hersteller" + +#: company/templates/company/navbar.html:29 +#: company/templates/company/navbar.html:32 +msgid "Supplied Parts" +msgstr "Zulieferer-Teile" + +#: company/templates/company/navbar.html:38 part/templates/part/navbar.html:33 +#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:115 templates/InvenTree/search.html:198 +#: templates/stats.html:72 templates/stats.html:81 users/models.py:40 +msgid "Stock Items" +msgstr "BestandsObjekte" + +#: company/templates/company/navbar.html:47 +#: company/templates/company/navbar.html:56 +#: company/templates/company/navbar.html:59 #: company/templates/company/sales_orders.html:11 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:13 -#: part/templates/part/navbar.html:92 part/templates/part/navbar.html:95 +#: part/templates/part/navbar.html:98 part/templates/part/navbar.html:101 #: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:227 -#: templates/InvenTree/search.html:330 +#: templates/InvenTree/search.html:345 #: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46 #: users/models.py:43 msgid "Sales Orders" msgstr "Aufträge" -#: company/templates/company/navbar.html:39 +#: company/templates/company/navbar.html:50 #: company/templates/company/purchase_orders.html:10 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:13 -#: part/templates/part/navbar.html:78 part/templates/part/navbar.html:81 +#: part/templates/part/navbar.html:84 part/templates/part/navbar.html:87 #: part/templates/part/orders.html:10 templates/InvenTree/index.html:204 -#: templates/InvenTree/search.html:300 +#: templates/InvenTree/search.html:325 #: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37 #: users/models.py:42 msgid "Purchase Orders" @@ -2110,33 +2284,6 @@ msgstr "Bestellungen" msgid "Company Notes" msgstr "Firmenbemerkungen" -#: company/templates/company/part_navbar.html:11 -#: company/templates/company/supplier_part_stock.html:10 -msgid "Supplier Part Stock" -msgstr "Zulieferer-Bestand" - -#: company/templates/company/part_navbar.html:18 -#: company/templates/company/supplier_part_orders.html:10 -msgid "Supplier Part Orders" -msgstr "Zulieferer-Bestellungen" - -#: company/templates/company/part_navbar.html:21 -msgid "Orders" -msgstr "Bestellungen" - -#: company/templates/company/part_navbar.html:25 -msgid "Supplier Part Pricing" -msgstr "Zulieferer-Teil Bepreisung" - -#: company/templates/company/part_navbar.html:28 -msgid "Pricing" -msgstr "Bepreisung" - -#: company/templates/company/partdelete.html:5 -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/purchase_orders.html:18 #: order/templates/order/purchase_orders.html:20 msgid "Create new purchase order" @@ -2158,17 +2305,11 @@ msgid "New Sales Order" msgstr "Neuer Auftrag" #: company/templates/company/supplier_part_base.html:6 -#: company/templates/company/supplier_part_base.html:19 stock/models.py:380 -#: stock/templates/stock/item_base.html:342 templates/js/company.js:180 +#: company/templates/company/supplier_part_base.html:19 stock/models.py:382 +#: stock/templates/stock/item_base.html:358 templates/js/company.js:279 msgid "Supplier Part" msgstr "Zulieferer-Teil" -#: company/templates/company/supplier_part_base.html:35 -#: company/templates/company/supplier_part_orders.html:17 -#: part/templates/part/orders.html:17 part/templates/part/part_base.html:64 -msgid "Order part" -msgstr "Teil bestellen" - #: company/templates/company/supplier_part_base.html:39 msgid "Edit supplier part" msgstr "Zulieferer-Teil bearbeiten" @@ -2182,10 +2323,28 @@ msgstr "Zulieferer-Teil entfernen" msgid "Supplier Part Details" msgstr "Zulieferer-Teildetails" -#: company/templates/company/supplier_part_base.html:60 -#: company/templates/company/supplier_part_detail.html:18 -msgid "Internal Part" -msgstr "Internes Teil" +#: company/templates/company/supplier_part_delete.html:5 +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/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part_stock.html:10 +msgid "Supplier Part Stock" +msgstr "Zulieferer-Bestand" + +#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part_orders.html:10 +msgid "Supplier Part Orders" +msgstr "Zulieferer-Bestellungen" + +#: company/templates/company/supplier_part_navbar.html:26 +msgid "Supplier Part Pricing" +msgstr "Zulieferer-Teil Bepreisung" + +#: company/templates/company/supplier_part_navbar.html:29 +msgid "Pricing" +msgstr "Bepreisung" #: company/templates/company/supplier_part_orders.html:18 #: part/templates/part/orders.html:18 @@ -2196,8 +2355,8 @@ msgstr "Teil bestellen" msgid "Pricing Information" msgstr "Preisinformationen ansehen" -#: company/templates/company/supplier_part_pricing.html:19 company/views.py:569 -#: part/templates/part/sale_prices.html:17 part/views.py:2618 +#: company/templates/company/supplier_part_pricing.html:19 company/views.py:794 +#: part/templates/part/sale_prices.html:17 part/views.py:2624 msgid "Add Price Break" msgstr "Preisstaffel hinzufügen" @@ -2216,99 +2375,112 @@ msgstr "Preisstaffel bearbeiten" msgid "Delete price break" msgstr "Preisstaffel löschen" -#: company/views.py:61 part/templates/part/navbar.html:72 -#: part/templates/part/navbar.html:75 templates/InvenTree/search.html:291 -#: templates/navbar.html:35 -msgid "Suppliers" -msgstr "Zulieferer" - -#: company/views.py:68 templates/InvenTree/search.html:308 +#: company/views.py:70 part/templates/part/navbar.html:72 +#: part/templates/part/navbar.html:75 templates/InvenTree/search.html:306 #: templates/navbar.html:36 msgid "Manufacturers" msgstr "Hersteller" -#: company/views.py:75 templates/InvenTree/search.html:321 +#: company/views.py:77 templates/InvenTree/search.html:336 #: templates/navbar.html:45 msgid "Customers" msgstr "Kunden" -#: company/views.py:76 order/templates/order/sales_orders.html:185 +#: company/views.py:78 order/templates/order/sales_orders.html:185 msgid "New Customer" msgstr "Neuer Kunde" -#: company/views.py:84 +#: company/views.py:86 msgid "Companies" msgstr "Firmen" -#: company/views.py:85 +#: company/views.py:87 msgid "New Company" msgstr "Neue Firma" -#: company/views.py:167 part/views.py:848 +#: company/views.py:169 part/views.py:848 msgid "Download Image" msgstr "Bild herunterladen" -#: company/views.py:196 part/views.py:880 +#: company/views.py:198 part/views.py:880 msgid "Image size exceeds maximum allowable size for download" msgstr "Bildgröße überschreitet maximal-erlaubte Größe für Downloads" -#: company/views.py:212 part/views.py:896 +#: company/views.py:214 part/views.py:896 msgid "Supplied URL is not a valid image file" msgstr "Angegebene URL ist kein gültiges Bild" -#: company/views.py:241 +#: company/views.py:243 msgid "Update Company Image" msgstr "Firmenbild aktualisieren" -#: company/views.py:247 +#: company/views.py:249 msgid "Updated company image" msgstr "Aktualisiertes Firmenbild" -#: company/views.py:257 +#: company/views.py:259 msgid "Edit Company" msgstr "Firma bearbeiten" -#: company/views.py:262 +#: company/views.py:264 msgid "Edited company information" msgstr "Firmeninformation bearbeitet" -#: company/views.py:285 order/templates/order/sales_orders.html:186 +#: company/views.py:287 order/templates/order/sales_orders.html:186 msgid "Create new Customer" msgstr "Neuen Kunden anlegen" -#: company/views.py:287 +#: company/views.py:289 msgid "Create new Company" msgstr "Neue Firma anlegen" -#: company/views.py:314 +#: company/views.py:316 msgid "Created new company" msgstr "Neue Firma angelegt" -#: company/views.py:330 +#: company/views.py:332 msgid "Company was deleted" msgstr "Firma gelöscht" -#: company/views.py:355 +#: company/views.py:357 +#, fuzzy +#| msgid "Manufacturer" +msgid "Edit Manufacturer Part" +msgstr "Hersteller" + +#: company/views.py:366 +#, fuzzy +#| msgid "Create new Manufacturer" +msgid "Create New Manufacturer Part" +msgstr "Neuen Hersteller anlegen" + +#: company/views.py:440 +#, fuzzy +#| msgid "Select manufacturer" +msgid "Delete Manufacturer Part" +msgstr "Hersteller auswählen" + +#: company/views.py:528 msgid "Edit Supplier Part" msgstr "Zulieferer-Teil bearbeiten" -#: company/views.py:378 templates/js/stock.js:1087 +#: company/views.py:578 templates/js/stock.js:1087 msgid "Create new Supplier Part" msgstr "Neues Zulieferer-Teil anlegen" -#: company/views.py:497 +#: company/views.py:722 msgid "Delete Supplier Part" msgstr "Zulieferer-Teil entfernen" -#: company/views.py:574 part/views.py:2622 +#: company/views.py:799 part/views.py:2628 msgid "Added new price break" msgstr "neue Preisstaffel hinzufügt" -#: company/views.py:630 part/views.py:2666 +#: company/views.py:855 part/views.py:2672 msgid "Edit Price Break" msgstr "Preisstaffel bearbeiten" -#: company/views.py:645 part/views.py:2680 +#: company/views.py:870 part/views.py:2686 msgid "Delete Price Break" msgstr "Preisstaffel löschen" @@ -2356,11 +2528,11 @@ msgstr "Höhe [mm]" msgid "Label height, specified in mm" msgstr "Label-Höhe in mm" -#: label/models.py:222 label/models.py:273 +#: label/models.py:222 label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "Abfragefilter (kommagetrennte Liste mit Schlüssel=Wert-Paaren)" -#: label/models.py:223 label/models.py:274 report/models.py:294 +#: label/models.py:223 label/models.py:276 report/models.py:294 #: report/models.py:415 report/models.py:449 msgid "Filters" msgstr "Filter" @@ -2478,7 +2650,7 @@ msgid "Date order was completed" msgstr "Datum an dem der Auftrag fertigstellt wurde" #: order/models.py:243 order/models.py:342 part/views.py:1586 -#: stock/models.py:270 stock/models.py:950 +#: stock/models.py:270 stock/models.py:952 msgid "Quantity must be greater than zero" msgstr "Anzahl muss größer Null sein" @@ -2539,7 +2711,7 @@ msgstr "Bestellung" #: order/models.py:624 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:24 #: report/templates/report/inventree_po_report.html:77 -#: stock/templates/stock/item_base.html:309 templates/js/order.js:148 +#: stock/templates/stock/item_base.html:313 templates/js/order.js:148 msgid "Purchase Order" msgstr "Bestellung" @@ -2548,7 +2720,7 @@ msgid "Supplier part" msgstr "Zulieferer-Teil" #: order/models.py:641 order/templates/order/order_base.html:131 -#: order/templates/order/purchase_order_detail.html:207 +#: order/templates/order/purchase_order_detail.html:214 #: order/templates/order/receive_parts.html:22 #: order/templates/order/sales_order_base.html:131 msgid "Received" @@ -2558,8 +2730,8 @@ msgstr "Empfangen" msgid "Number of items received" msgstr "Empfangene Objekt-Anzahl" -#: order/models.py:648 stock/models.py:506 -#: stock/templates/stock/item_base.html:316 +#: order/models.py:648 stock/models.py:508 +#: stock/templates/stock/item_base.html:320 msgid "Purchase Price" msgstr "Preis" @@ -2657,6 +2829,16 @@ msgstr "" msgid "Mark this order as complete?" msgstr "Diese Bestellung als vollständig markieren?" +#: order/templates/order/order_complete.html:10 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: order/templates/order/order_complete.html:11 +#, fuzzy +#| msgid "Mark this order as complete?" +msgid "Marking this order as complete will remove these line items." +msgstr "Diese Bestellung als vollständig markieren?" + #: order/templates/order/order_issue.html:7 msgid "" "After placing this purchase order, line items will no longer be editable." @@ -2685,7 +2867,9 @@ msgid "Select Supplier" msgstr "Zulieferer auswählen" #: order/templates/order/order_wizard/select_parts.html:57 -msgid "Select a supplier for" +#, fuzzy, python-format +#| msgid "Select a supplier for" +msgid "Select a supplier for %(name)s" msgstr "Zulieferer auswählen für" #: order/templates/order/order_wizard/select_parts.html:69 @@ -2711,11 +2895,15 @@ msgid "Select Purchase Order" msgstr "Bestellung auswählen" #: order/templates/order/order_wizard/select_pos.html:45 -msgid "Create new purchase order for {{ supplier.name }}" -msgstr "Neue Bestellung für {{ supplier.name }} anlegen" +#, fuzzy, python-format +#| msgid "Create new purchase order" +msgid "Create new purchase order for %(name)s" +msgstr "Neue Bestellung anlegen" #: order/templates/order/order_wizard/select_pos.html:68 -msgid "Select a purchase order for" +#, fuzzy, python-format +#| msgid "Select a purchase order for" +msgid "Select a purchase order for %(name)s" msgstr "Bestellung auswählen für" #: order/templates/order/po_attachments.html:12 @@ -2760,20 +2948,20 @@ msgstr "Neuen Lagerort anlegen" msgid "No line items found" msgstr "Keine Positionen gefunden" -#: order/templates/order/purchase_order_detail.html:198 +#: order/templates/order/purchase_order_detail.html:205 msgid "Unit Price" msgstr "Stück-Preis" -#: order/templates/order/purchase_order_detail.html:239 +#: order/templates/order/purchase_order_detail.html:246 #: order/templates/order/sales_order_detail.html:294 msgid "Edit line item" msgstr "Position bearbeiten" -#: order/templates/order/purchase_order_detail.html:240 +#: order/templates/order/purchase_order_detail.html:247 msgid "Delete line item" msgstr "Position löschen" -#: order/templates/order/purchase_order_detail.html:245 +#: order/templates/order/purchase_order_detail.html:252 msgid "Receive line item" msgstr "Position empfangen" @@ -2783,9 +2971,23 @@ msgid "Print Order Reports" msgstr "Berichte drucken" #: order/templates/order/receive_parts.html:8 -msgid "Receive outstanding parts for" +#, fuzzy, python-format +#| msgid "Receive outstanding parts for" +msgid "Receive outstanding parts for %(order)s - %(desc)s" msgstr "Empfange ausstehende Teile für" +#: order/templates/order/receive_parts.html:14 part/api.py:40 +#: part/models.py:322 part/templates/part/cat_link.html:7 +#: part/templates/part/category.html:95 +#: part/templates/part/category_navbar.html:11 +#: part/templates/part/category_navbar.html:14 +#: part/templates/part/category_partlist.html:10 +#: templates/InvenTree/index.html:96 templates/InvenTree/search.html:114 +#: templates/InvenTree/settings/tabs.html:25 templates/navbar.html:23 +#: templates/stats.html:59 templates/stats.html:68 users/models.py:38 +msgid "Parts" +msgstr "Teile" + #: order/templates/order/receive_parts.html:15 msgid "Select parts to receive against this order" msgstr "Teile, die für diese Bestellung empfangen werden sollen, auswählen" @@ -2795,7 +2997,7 @@ msgid "Order Code" msgstr "Bestellnummer" #: order/templates/order/receive_parts.html:21 -#: part/templates/part/part_base.html:128 templates/js/part.js:413 +#: part/templates/part/part_base.html:129 templates/js/part.js:413 msgid "On Order" msgstr "bestellt" @@ -2842,12 +3044,12 @@ msgstr "Auftrags-Positionen" #: order/templates/order/sales_order_detail.html:75 #: order/templates/order/sales_order_detail.html:157 #: report/templates/report/inventree_test_report_base.html:75 -#: stock/models.py:418 stock/templates/stock/item_base.html:234 +#: stock/models.py:420 stock/templates/stock/item_base.html:238 #: templates/js/build.js:418 msgid "Serial Number" msgstr "Seriennummer" -#: order/templates/order/sales_order_detail.html:92 templates/js/bom.js:338 +#: order/templates/order/sales_order_detail.html:92 templates/js/bom.js:342 #: templates/js/build.js:571 templates/js/build.js:984 msgid "Actions" msgstr "Aktionen" @@ -3110,20 +3312,20 @@ msgstr "Zuordnung entfernen" msgid "Default Location" msgstr "Standard-Lagerort" -#: part/bom.py:139 part/templates/part/part_base.html:116 +#: part/bom.py:139 part/templates/part/part_base.html:117 msgid "Available Stock" msgstr "Verfügbarer Lagerbestand" -#: part/bom.py:278 +#: part/bom.py:379 #, python-brace-format msgid "Unsupported file format: {f}" msgstr "Nicht unterstütztes Dateiformat: {f}" -#: part/bom.py:283 +#: part/bom.py:384 msgid "Error reading BOM file (invalid data)" msgstr "Fehler beim Lesen der Stückliste (ungültige Daten)" -#: part/bom.py:285 +#: part/bom.py:386 msgid "Error reading BOM file (incorrect row size)" msgstr "Fehler beim Lesen der Stückliste (ungültige Zeilengröße)" @@ -3169,94 +3371,106 @@ msgid "Include part stock data in exported BOM" msgstr "Teil-Bestand in Stückliste-Export einschließen" #: part/forms.py:99 +#, fuzzy +#| msgid "Include Parameter Data" +msgid "Include Manufacturer Data" +msgstr "Parameter-Daten einschließen" + +#: part/forms.py:99 +#, fuzzy +#| msgid "Include part parameters data in exported BOM" +msgid "Include part manufacturer data in exported BOM" +msgstr "Teil-Parameter in Stückliste-Export einschließen" + +#: part/forms.py:101 msgid "Include Supplier Data" msgstr "Zulieferer einschließen" -#: part/forms.py:99 +#: part/forms.py:101 msgid "Include part supplier data in exported BOM" msgstr "Zulieferer-Daten in Stückliste-Export einschließen" -#: part/forms.py:120 part/models.py:2057 +#: part/forms.py:122 part/models.py:2057 msgid "Parent Part" msgstr "Ausgangsteil" -#: part/forms.py:121 part/templates/part/bom_duplicate.html:7 +#: part/forms.py:123 part/templates/part/bom_duplicate.html:7 msgid "Select parent part to copy BOM from" msgstr "Teil für Stücklisten-Kopie auswählen" -#: part/forms.py:127 +#: part/forms.py:129 msgid "Clear existing BOM items" msgstr "Stücklisten-Position(en) löschen" -#: part/forms.py:133 +#: part/forms.py:135 msgid "Confirm BOM duplication" msgstr "Kopie von Stückliste bestätigen" -#: part/forms.py:151 +#: part/forms.py:153 msgid "validate" msgstr "kontrollieren" -#: part/forms.py:151 +#: part/forms.py:153 msgid "Confirm that the BOM is correct" msgstr "Bestätigen, dass die Stückliste korrekt ist" -#: part/forms.py:163 +#: part/forms.py:165 msgid "BOM file" msgstr "Stücklisten-Datei" -#: part/forms.py:163 +#: part/forms.py:165 msgid "Select BOM file to upload" msgstr "Stücklisten-Datei zum Upload auswählen" -#: part/forms.py:182 +#: part/forms.py:184 msgid "Related Part" msgstr "verknüpftes Teil" -#: part/forms.py:201 +#: part/forms.py:203 msgid "Select part category" msgstr "Teil-Kategorie wählen" -#: part/forms.py:218 +#: part/forms.py:220 msgid "Duplicate all BOM data for this part" msgstr "Stückliste für dieses Teil kopieren" -#: part/forms.py:219 +#: part/forms.py:221 msgid "Copy BOM" msgstr "Stückliste kopieren" -#: part/forms.py:224 +#: part/forms.py:226 msgid "Duplicate all parameter data for this part" msgstr "Alle Parameter-Daten für dieses Teil kopieren" -#: part/forms.py:225 +#: part/forms.py:227 msgid "Copy Parameters" msgstr "Parameter kopieren" -#: part/forms.py:230 +#: part/forms.py:232 msgid "Confirm part creation" msgstr "Erstellen des Teils bestätigen" -#: part/forms.py:235 +#: part/forms.py:237 msgid "Include category parameter templates" msgstr "Kategorie Parameter-Vorlage einschließen" -#: part/forms.py:240 +#: part/forms.py:242 msgid "Include parent categories parameter templates" msgstr "Über-Kategorie Parameter-Vorlage einschließen" -#: part/forms.py:320 +#: part/forms.py:322 msgid "Add parameter template to same level categories" msgstr "Parameter-Vorlage zu Kategorien dieser Ebene hinzufügen" -#: part/forms.py:324 +#: part/forms.py:326 msgid "Add parameter template to all categories" msgstr "Parameter-Vorlage zu allen Kategorien hinzufügen" -#: part/forms.py:342 part/models.py:2151 +#: part/forms.py:344 part/models.py:2151 msgid "Sub part" msgstr "Untergeordnetes Teil" -#: part/forms.py:370 +#: part/forms.py:372 msgid "Input quantity for price calculation" msgstr "Menge für die Preisberechnung" @@ -3279,7 +3493,7 @@ msgstr "Teil-Kategorie" #: part/models.py:83 part/templates/part/category.html:19 #: part/templates/part/category.html:90 part/templates/part/category.html:141 -#: templates/InvenTree/search.html:126 templates/stats.html:63 +#: templates/InvenTree/search.html:127 templates/stats.html:63 #: users/models.py:37 msgid "Part Categories" msgstr "Teil-Kategorien" @@ -3352,7 +3566,7 @@ msgid "Part category" msgstr "Teile-Kategorie" #: part/models.py:730 part/templates/part/detail.html:28 -#: part/templates/part/part_base.html:93 templates/js/part.js:160 +#: part/templates/part/part_base.html:94 templates/js/part.js:160 msgid "IPN" msgstr "IPN (Interne Produktnummer)" @@ -3592,7 +3806,7 @@ msgstr "Prüfsumme" msgid "BOM line checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:2176 templates/js/bom.js:275 templates/js/bom.js:282 +#: part/models.py:2176 templates/js/bom.js:279 templates/js/bom.js:286 #: templates/js/table_filters.js:50 msgid "Inherited" msgstr "Geerbt" @@ -3706,7 +3920,7 @@ msgstr "Stückliste bearbeiten" msgid "Validate Bill of Materials" msgstr "Stückliste kontrollieren" -#: part/templates/part/bom.html:61 part/views.py:1883 +#: part/templates/part/bom.html:61 part/views.py:1887 msgid "Export Bill of Materials" msgstr "Stückliste exportieren" @@ -3843,7 +4057,7 @@ msgstr "Neuen Bauauftrag beginnen" msgid "All parts" msgstr "Alle Teile" -#: part/templates/part/category.html:25 part/views.py:2264 +#: part/templates/part/category.html:25 part/views.py:2270 msgid "Create new part category" msgstr "Teil-Kategorie anlegen" @@ -3917,14 +4131,11 @@ msgid "Are you sure you want to delete category" msgstr "Sind Sie sicher, dass Sie diese Kategorie löschen wollen" #: part/templates/part/category_delete.html:8 -#: part/templates/part/category_delete.html:25 -msgid "This category contains" +#, fuzzy, python-format +#| msgid "This category contains" +msgid "This category contains %(count)s child categories" msgstr "Kategorie enthält" -#: part/templates/part/category_delete.html:8 -msgid "child categories" -msgstr "Unter-Kategorien" - #: part/templates/part/category_delete.html:9 msgid "" "If this category is deleted, these child categories will be moved to the" @@ -3940,12 +4151,19 @@ msgid "top level Parts category" msgstr "oberste Teil-Kategorie" #: part/templates/part/category_delete.html:25 -msgid "parts" -msgstr "Teile" +#, fuzzy, python-format +#| msgid "This category contains" +msgid "This category contains %(count)s parts" +msgstr "Kategorie enthält" #: part/templates/part/category_delete.html:27 +#, fuzzy, python-format +#| msgid "" +#| "If this category is deleted, these parts will be moved to the parent " +#| "category" msgid "" -"If this category is deleted, these parts will be moved to the parent category" +"If this category is deleted, these parts will be moved to the parent " +"category %(path)s" msgstr "" "Wenn diese Kat. gelöscht wird, werden diese Teile in die übergeordnete Kat. " "verschoben" @@ -3974,7 +4192,9 @@ msgid "Duplicate Part" msgstr "Teil duplizieren" #: part/templates/part/copy_part.html:10 -msgid "Make a copy of part" +#, fuzzy, python-format +#| msgid "Make a copy of part" +msgid "Make a copy of part '%(full_name)s'." msgstr "Eine Kopie des Teils erstellen" #: part/templates/part/copy_part.html:14 @@ -3987,9 +4207,10 @@ msgstr "Evtl. passende Teile" msgid "The new part may be a duplicate of these existing parts" msgstr "Teil evtl. Duplikat dieser Teile" -#: part/templates/part/create_part.html:16 -msgid "match" -msgstr "entspricht" +#: part/templates/part/create_part.html:17 +#, python-format +msgid "%(full_name)s - %(desc)s (%(match_per)s%% match)" +msgstr "" #: part/templates/part/detail.html:11 part/templates/part/navbar.html:11 msgid "Part Details" @@ -4071,6 +4292,23 @@ msgstr "Teil ist aktiv" msgid "Part is not active" msgstr "Teil ist nicht aktiv" +#: part/templates/part/manufacturer.html:11 +#, fuzzy +#| msgid "Parts Manufactured" +msgid "Part Manufacturers" +msgstr "Teile gefertigt" + +#: part/templates/part/manufacturer.html:24 +#, fuzzy +#| msgid "Select manufacturer" +msgid "Delete manufacturer parts" +msgstr "Hersteller auswählen" + +#: part/templates/part/manufacturer.html:53 +#: part/templates/part/supplier.html:57 +msgid "Create new manufacturer" +msgstr "Neuen Hersteller anlegen" + #: part/templates/part/navbar.html:26 part/templates/part/variants.html:11 msgid "Part Variants" msgstr "Teil Varianten" @@ -4091,28 +4329,28 @@ msgstr "Zuweisungen" msgid "Used In" msgstr "Benutzt in" -#: part/templates/part/navbar.html:86 +#: part/templates/part/navbar.html:92 msgid "Sales Price Information" msgstr "Preisinformationen ansehen" -#: part/templates/part/navbar.html:89 +#: part/templates/part/navbar.html:95 msgid "Sale Price" msgstr "VK-Preis" -#: part/templates/part/navbar.html:100 part/templates/part/part_tests.html:10 +#: part/templates/part/navbar.html:106 part/templates/part/part_tests.html:10 msgid "Part Test Templates" msgstr "Teil Test-Vorlagen" -#: part/templates/part/navbar.html:103 stock/templates/stock/item_base.html:382 +#: part/templates/part/navbar.html:109 stock/templates/stock/item_base.html:398 msgid "Tests" msgstr "Tests" -#: part/templates/part/navbar.html:107 part/templates/part/navbar.html:110 +#: part/templates/part/navbar.html:113 part/templates/part/navbar.html:116 #: part/templates/part/related.html:10 msgid "Related Parts" msgstr "verknüpfte Teile" -#: part/templates/part/navbar.html:119 part/templates/part/notes.html:12 +#: part/templates/part/navbar.html:125 part/templates/part/notes.html:12 msgid "Part Notes" msgstr "Teil-Bemerkungen" @@ -4128,7 +4366,7 @@ msgstr "Neuer Parameter" #: part/templates/part/params.html:28 #: report/templates/report/inventree_test_report_base.html:90 -#: stock/models.py:1652 templates/InvenTree/settings/header.html:8 +#: stock/models.py:1654 templates/InvenTree/settings/header.html:8 #: templates/js/stock.js:124 msgid "Value" msgstr "Wert" @@ -4137,11 +4375,6 @@ msgstr "Wert" msgid "Edit" msgstr "Bearbeiten" -#: part/templates/part/params.html:44 part/templates/part/related.html:44 -#: part/templates/part/supplier.html:22 stock/views.py:1002 users/models.py:182 -msgid "Delete" -msgstr "Löschen" - #: part/templates/part/params.html:68 msgid "New Template" msgstr "Neue Vorlage" @@ -4154,124 +4387,128 @@ msgstr "Neue Teilparametervorlage anlegen" msgid "Part List" msgstr "Teileliste" -#: part/templates/part/part_base.html:17 -msgid "This part is a variant of" +#: part/templates/part/part_base.html:18 +#, fuzzy, python-format +#| msgid "This part is a variant of" +msgid "This part is a variant of %(link)s" msgstr "Dieses Teil ist eine Variante von" -#: part/templates/part/part_base.html:32 templates/js/company.js:155 -#: templates/js/part.js:75 templates/js/part.js:152 +#: part/templates/part/part_base.html:33 templates/js/company.js:156 +#: templates/js/company.js:254 templates/js/part.js:75 templates/js/part.js:152 msgid "Inactive" msgstr "Inaktiv" -#: part/templates/part/part_base.html:39 +#: part/templates/part/part_base.html:40 msgid "Star this part" msgstr "Teil favorisieren" -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:127 +#: part/templates/part/part_base.html:47 +#: stock/templates/stock/item_base.html:131 #: stock/templates/stock/location.html:44 msgid "Barcode actions" msgstr "Barcode Aktionen" -#: part/templates/part/part_base.html:48 -#: stock/templates/stock/item_base.html:129 +#: part/templates/part/part_base.html:49 +#: stock/templates/stock/item_base.html:133 #: stock/templates/stock/location.html:46 templates/qr_button.html:1 msgid "Show QR Code" msgstr "QR-Code anzeigen" -#: part/templates/part/part_base.html:49 -#: stock/templates/stock/item_base.html:145 +#: part/templates/part/part_base.html:50 +#: stock/templates/stock/item_base.html:149 #: stock/templates/stock/location.html:47 msgid "Print Label" msgstr "Label drucken" -#: part/templates/part/part_base.html:54 +#: part/templates/part/part_base.html:55 msgid "Show pricing information" msgstr "Kosteninformationen ansehen" -#: part/templates/part/part_base.html:58 +#: part/templates/part/part_base.html:59 msgid "Count part stock" msgstr "Lagerbestand zählen" -#: part/templates/part/part_base.html:73 +#: part/templates/part/part_base.html:74 msgid "Part actions" msgstr "Teile Aktionen" -#: part/templates/part/part_base.html:76 +#: part/templates/part/part_base.html:77 msgid "Duplicate part" msgstr "Teil duplizieren" -#: part/templates/part/part_base.html:79 +#: part/templates/part/part_base.html:80 msgid "Edit part" msgstr "Teil bearbeiten" -#: part/templates/part/part_base.html:82 +#: part/templates/part/part_base.html:83 msgid "Delete part" msgstr "Teil löschen" -#: part/templates/part/part_base.html:122 templates/js/table_filters.js:134 +#: part/templates/part/part_base.html:123 templates/js/table_filters.js:134 msgid "In Stock" msgstr "Auf Lager" -#: part/templates/part/part_base.html:135 templates/InvenTree/index.html:130 +#: part/templates/part/part_base.html:136 templates/InvenTree/index.html:130 msgid "Required for Build Orders" msgstr "Für Bauaufträge benötigt" -#: part/templates/part/part_base.html:142 +#: part/templates/part/part_base.html:143 msgid "Required for Sales Orders" msgstr "Benötigt für Aufträge" -#: part/templates/part/part_base.html:149 +#: part/templates/part/part_base.html:150 msgid "Allocated to Orders" msgstr "zu Bauaufträgen zugeordnet" -#: part/templates/part/part_base.html:164 templates/js/bom.js:296 +#: part/templates/part/part_base.html:165 templates/js/bom.js:300 msgid "Can Build" msgstr "Herstellbar" -#: part/templates/part/part_base.html:170 templates/js/part.js:417 +#: part/templates/part/part_base.html:171 templates/js/part.js:417 msgid "Building" msgstr "Im Bau" -#: part/templates/part/part_base.html:249 +#: part/templates/part/part_base.html:250 msgid "Calculate" msgstr "Berechnen" #: part/templates/part/part_pricing.html:8 -msgid "Pricing information for:" +#, fuzzy, python-format +#| msgid "Pricing information for:" +msgid "Pricing information for:
                        %(part)s." msgstr "Preisinformationen für:" -#: part/templates/part/part_pricing.html:24 +#: part/templates/part/part_pricing.html:23 msgid "Supplier Pricing" msgstr "Zulieferer-Preise" -#: part/templates/part/part_pricing.html:28 -#: part/templates/part/part_pricing.html:54 +#: part/templates/part/part_pricing.html:27 +#: part/templates/part/part_pricing.html:53 msgid "Unit Cost" msgstr "Stückpreis" -#: part/templates/part/part_pricing.html:34 -#: part/templates/part/part_pricing.html:60 +#: part/templates/part/part_pricing.html:33 +#: part/templates/part/part_pricing.html:59 msgid "Total Cost" msgstr "Gesamtkosten" -#: part/templates/part/part_pricing.html:42 +#: part/templates/part/part_pricing.html:41 msgid "No supplier pricing available" msgstr "Keine Zulieferer-Preise verfügbar" -#: part/templates/part/part_pricing.html:50 +#: part/templates/part/part_pricing.html:49 msgid "BOM Pricing" msgstr "Stücklistenpreise" -#: part/templates/part/part_pricing.html:68 +#: part/templates/part/part_pricing.html:67 msgid "Note: BOM pricing is incomplete for this part" msgstr "Anmerkung: Stücklistenbepreisung für dieses Teil ist unvollständig" -#: part/templates/part/part_pricing.html:75 +#: part/templates/part/part_pricing.html:74 msgid "No BOM pricing available" msgstr "Keine Stücklisten-Preise verfügbar" -#: part/templates/part/part_pricing.html:85 +#: part/templates/part/part_pricing.html:84 msgid "No pricing information is available for this part." msgstr "Keine Preise für dieses Teil verfügbar" @@ -4283,6 +4520,47 @@ msgstr "Test Vorlage hinzufügen" msgid "Select from existing images" msgstr "Aus vorhandenen Bildern auswählen" +#: part/templates/part/partial_delete.html:7 +#, fuzzy, python-format +#| msgid "Are you sure you want to delete company '%(name)s'?" +msgid "Are you sure you want to delete part '%(full_name)s'?" +msgstr "Sind Sie sicher, dass Sie die Firma '%(name)s' löschen wollen?" + +#: part/templates/part/partial_delete.html:12 +#, python-format +msgid "" +"This part is used in BOMs for %(count)s other parts. If you delete this " +"part, the BOMs for the following parts will be updated" +msgstr "" + +#: part/templates/part/partial_delete.html:22 +#, python-format +msgid "" +"There are %(count)s stock entries defined for this part. If you delete this " +"part, the following stock entries will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:33 +#, python-format +msgid "" +"There are %(count)s manufacturers defined for this part. If you delete this " +"part, the following manufacturer parts will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:44 +#, python-format +msgid "" +"There are %(count)s suppliers defined for this part. If you delete this " +"part, the following supplier parts will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:55 +#, python-format +msgid "" +"There are %(count)s unique parts tracked for '%(full_name)s'. Deleting this " +"part will permanently remove this tracking information." +msgstr "" + #: part/templates/part/related.html:18 msgid "Add Related" msgstr "Zugehöriges Teil hinzufügen" @@ -4308,7 +4586,9 @@ msgid "Part Stock" msgstr "Teilbestand" #: part/templates/part/stock.html:16 -msgid "Showing stock for all variants of" +#, fuzzy, python-format +#| msgid "Showing stock for all variants of" +msgid "Showing stock for all variants of %(full_name)s" msgstr "Lagerbestand aller Varianten von" #: part/templates/part/stock_count.html:7 templates/js/bom.js:239 @@ -4328,18 +4608,6 @@ msgstr "Unter-Kategorien" msgid "Part Suppliers" msgstr "Zulieferer" -#: part/templates/part/supplier.html:22 -msgid "Delete supplier parts" -msgstr "Zuliefererteil entfernen" - -#: part/templates/part/supplier.html:51 -msgid "Create new supplier" -msgstr "Neuen Zulieferer anlegen" - -#: part/templates/part/supplier.html:57 -msgid "Create new manufacturer" -msgstr "Neuen Hersteller anlegen" - #: part/templates/part/track.html:10 msgid "Part Tracking" msgstr "Teileverfolgung" @@ -4353,7 +4621,9 @@ msgid "Create new part variant" msgstr "Neue Teilevariante anlegen" #: part/templates/part/variant_part.html:10 -msgid "Create a new variant of template" +#, fuzzy, python-format +#| msgid "Create a new variant of template" +msgid "Create a new variant of template '%(full_name)s'." msgstr "Neue Variante von Vorlage anlegen" #: part/templates/part/variants.html:19 @@ -4501,75 +4771,75 @@ msgstr "gewähltes Teil erzeugt rekursive Stückliste" msgid "Specify quantity" msgstr "Anzahl angeben" -#: part/views.py:1933 +#: part/views.py:1939 msgid "Confirm Part Deletion" msgstr "Löschen des Teils bestätigen" -#: part/views.py:1940 +#: part/views.py:1946 msgid "Part was deleted" msgstr "Teil wurde gelöscht" -#: part/views.py:1949 +#: part/views.py:1955 msgid "Part Pricing" msgstr "Teilbepreisung" -#: part/views.py:2063 +#: part/views.py:2069 msgid "Create Part Parameter Template" msgstr "Teilparametervorlage anlegen" -#: part/views.py:2073 +#: part/views.py:2079 msgid "Edit Part Parameter Template" msgstr "Teilparametervorlage bearbeiten" -#: part/views.py:2080 +#: part/views.py:2086 msgid "Delete Part Parameter Template" msgstr "Teilparametervorlage löschen" -#: part/views.py:2088 +#: part/views.py:2094 msgid "Create Part Parameter" msgstr "Teilparameter anlegen" -#: part/views.py:2138 +#: part/views.py:2144 msgid "Edit Part Parameter" msgstr "Teilparameter bearbeiten" -#: part/views.py:2152 +#: part/views.py:2158 msgid "Delete Part Parameter" msgstr "Teilparameter löschen" -#: part/views.py:2212 +#: part/views.py:2218 msgid "Edit Part Category" msgstr "Teil-Kategorie bearbeiten" -#: part/views.py:2250 +#: part/views.py:2256 msgid "Delete Part Category" msgstr "Teil-Kategorie löschen" -#: part/views.py:2256 +#: part/views.py:2262 msgid "Part category was deleted" msgstr "Teil-Kategorie wurde gelöscht" -#: part/views.py:2308 +#: part/views.py:2314 msgid "Create Category Parameter Template" msgstr "Kategorieparametervorlage anlegen" -#: part/views.py:2409 +#: part/views.py:2415 msgid "Edit Category Parameter Template" msgstr "Kategorieparametervorlage bearbeiten" -#: part/views.py:2465 +#: part/views.py:2471 msgid "Delete Category Parameter Template" msgstr "Kategorieparametervorlage löschen" -#: part/views.py:2484 +#: part/views.py:2490 msgid "Create BOM Item" msgstr "Stücklisten-Position anlegen" -#: part/views.py:2554 +#: part/views.py:2560 msgid "Edit BOM item" msgstr "Stücklisten-Position bearbeiten" -#: part/views.py:2610 +#: part/views.py:2616 msgid "Confim BOM item deletion" msgstr "löschen von Stücklisten-Position bestätigen" @@ -4673,12 +4943,12 @@ msgid "Test Results" msgstr "Testergebnisse" #: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:1640 +#: stock/models.py:1642 msgid "Test" msgstr "Test" #: report/templates/report/inventree_test_report_base.html:89 -#: stock/models.py:1646 +#: stock/models.py:1648 msgid "Result" msgstr "Ergebnis" @@ -4705,8 +4975,8 @@ msgstr "Bestand für {n} Objekte geändert" msgid "Moved {n} parts to {loc}" msgstr "{n} Teile nach {loc} bewegt" -#: stock/forms.py:114 stock/forms.py:406 stock/models.py:473 -#: stock/templates/stock/item_base.html:349 templates/js/stock.js:656 +#: stock/forms.py:114 stock/forms.py:406 stock/models.py:475 +#: stock/templates/stock/item_base.html:365 templates/js/stock.js:656 msgid "Expiry Date" msgstr "Ablaufdatum" @@ -4797,11 +5067,11 @@ msgstr "Standard-Lagerort ändern" msgid "Set the destination as the default location for selected parts" msgstr "Setze das Ziel als Standard-Lagerort für ausgewählte Teile" -#: stock/models.py:54 stock/models.py:511 +#: stock/models.py:54 stock/models.py:513 msgid "Owner" msgstr "Besitzer" -#: stock/models.py:55 stock/models.py:512 +#: stock/models.py:55 stock/models.py:514 msgid "Select Owner" msgstr "Besitzer auswählen" @@ -4839,205 +5109,205 @@ msgstr "Teil muss eine Referenz haben wenn is_building wahr ist" msgid "Build reference does not point to the same part object" msgstr "Referenz verweist nicht auf das gleiche Teil" -#: stock/models.py:363 +#: stock/models.py:365 msgid "Parent Stock Item" msgstr "Eltern-BestandsObjekt" -#: stock/models.py:372 +#: stock/models.py:374 msgid "Base part" msgstr "Basis-Teil" -#: stock/models.py:381 +#: stock/models.py:383 msgid "Select a matching supplier part for this stock item" msgstr "Passendes Zulieferer-Teil für dieses BestandsObjekt auswählen" -#: stock/models.py:386 stock/templates/stock/stock_app_base.html:7 +#: stock/models.py:388 stock/templates/stock/stock_app_base.html:7 msgid "Stock Location" msgstr "Bestand-Lagerort" -#: stock/models.py:389 +#: stock/models.py:391 msgid "Where is this stock item located?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: stock/models.py:396 +#: stock/models.py:398 msgid "Packaging this stock item is stored in" msgstr "Die Verpackung dieses BestandsObjekt ist gelagert in" -#: stock/models.py:401 stock/templates/stock/item_base.html:255 +#: stock/models.py:403 stock/templates/stock/item_base.html:259 msgid "Installed In" msgstr "verbaut in" -#: stock/models.py:404 +#: stock/models.py:406 msgid "Is this item installed in another item?" msgstr "Ist dieses Teil in einem anderen verbaut?" -#: stock/models.py:420 +#: stock/models.py:422 msgid "Serial number for this item" msgstr "Seriennummer für dieses Teil" -#: stock/models.py:432 +#: stock/models.py:434 msgid "Batch code for this stock item" msgstr "Losnummer für dieses BestandsObjekt" -#: stock/models.py:436 +#: stock/models.py:438 msgid "Stock Quantity" msgstr "Bestand" -#: stock/models.py:445 +#: stock/models.py:447 msgid "Source Build" msgstr "Quellbau" -#: stock/models.py:447 +#: stock/models.py:449 msgid "Build for this stock item" msgstr "Bauauftrag für dieses BestandsObjekt" -#: stock/models.py:458 +#: stock/models.py:460 msgid "Source Purchase Order" msgstr "Quelle Bestellung" -#: stock/models.py:461 +#: stock/models.py:463 msgid "Purchase order for this stock item" msgstr "Bestellung für dieses BestandsObjekt" -#: stock/models.py:467 +#: stock/models.py:469 msgid "Destination Sales Order" msgstr "Ziel-Auftrag" -#: stock/models.py:474 +#: stock/models.py:476 msgid "" "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" "Ablaufdatum für BestandsObjekt. Bestand wird danach als abgelaufen " "gekennzeichnet" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Delete on deplete" msgstr "Löschen wenn leer" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Delete this Stock Item when stock is depleted" msgstr "Dieses BestandsObjekt löschen wenn Bestand aufgebraucht" -#: stock/models.py:497 stock/templates/stock/item_notes.html:13 +#: stock/models.py:499 stock/templates/stock/item_notes.html:13 #: stock/templates/stock/navbar.html:54 msgid "Stock Item Notes" msgstr "BestandsObjekt-Notizen" -#: stock/models.py:507 +#: stock/models.py:509 msgid "Single unit purchase price at time of purchase" msgstr "Preis für eine Einheit bei Einkauf" -#: stock/models.py:612 +#: stock/models.py:614 msgid "Assigned to Customer" msgstr "zugewiesen zum Kunden" -#: stock/models.py:614 +#: stock/models.py:616 msgid "Manually assigned to customer" msgstr "manuell zugewiesen zum Kunden" -#: stock/models.py:627 +#: stock/models.py:629 msgid "Returned from customer" msgstr "zurück vom Kunden" -#: stock/models.py:629 +#: stock/models.py:631 msgid "Returned to location" msgstr "zurück ins Lager" -#: stock/models.py:789 +#: stock/models.py:791 msgid "Installed into stock item" msgstr "In BestandsObjekt verbaut" -#: stock/models.py:797 +#: stock/models.py:799 msgid "Installed stock item" msgstr "verbautes BestandsObjekt" -#: stock/models.py:821 +#: stock/models.py:823 msgid "Uninstalled stock item" msgstr "BestandsObjekt ausgebaut" -#: stock/models.py:840 +#: stock/models.py:842 msgid "Uninstalled into location" msgstr "ausgebaut nach Lagerort" -#: stock/models.py:941 +#: stock/models.py:943 msgid "Part is not set as trackable" msgstr "Teil ist nicht verfolgbar" -#: stock/models.py:947 +#: stock/models.py:949 msgid "Quantity must be integer" msgstr "Anzahl muss eine Ganzzahl sein" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "Anzahl darf nicht die verfügbare Anzahl überschreiten ({n})" -#: stock/models.py:956 +#: stock/models.py:958 msgid "Serial numbers must be a list of integers" msgstr "Seriennummern muss eine Liste von Ganzzahlen sein" -#: stock/models.py:959 +#: stock/models.py:961 msgid "Quantity does not match serial numbers" msgstr "Anzahl stimmt nicht mit den Seriennummern überein" -#: stock/models.py:991 +#: stock/models.py:993 msgid "Add serial number" msgstr "Seriennummer hinzufügen" -#: stock/models.py:994 +#: stock/models.py:996 #, python-brace-format msgid "Serialized {n} items" msgstr "{n} Teile serialisiert" -#: stock/models.py:1072 +#: stock/models.py:1074 msgid "Split from existing stock" msgstr "aufteilen vom vorhandenen Bestand" -#: stock/models.py:1110 +#: stock/models.py:1112 msgid "StockItem cannot be moved as it is not in stock" msgstr "BestandsObjekt kann nicht bewegt werden, da kein Bestand vorhanden ist" -#: stock/models.py:1553 +#: stock/models.py:1555 msgid "Title" msgstr "Titel" -#: stock/models.py:1553 +#: stock/models.py:1555 msgid "Tracking entry title" msgstr "Objektverfolgung - Name des Eintrags" -#: stock/models.py:1555 +#: stock/models.py:1557 msgid "Entry notes" msgstr "Eintrags-Notizen" -#: stock/models.py:1557 +#: stock/models.py:1559 msgid "Link to external page for further information" msgstr "Link auf externe Seite für weitere Informationen" -#: stock/models.py:1617 +#: stock/models.py:1619 msgid "Value must be provided for this test" msgstr "Wert muss für diesen Test angegeben werden" -#: stock/models.py:1623 +#: stock/models.py:1625 msgid "Attachment must be uploaded for this test" msgstr "Anhang muss für diesen Test hochgeladen werden" -#: stock/models.py:1641 +#: stock/models.py:1643 msgid "Test name" msgstr "Name des Tests" -#: stock/models.py:1647 templates/js/table_filters.js:190 +#: stock/models.py:1649 templates/js/table_filters.js:190 msgid "Test result" msgstr "Testergebnis" -#: stock/models.py:1653 +#: stock/models.py:1655 msgid "Test output value" msgstr "Test Ausgabe Wert" -#: stock/models.py:1660 +#: stock/models.py:1662 msgid "Test result attachment" msgstr "Test Ergebnis Anhang" -#: stock/models.py:1666 +#: stock/models.py:1668 msgid "Test notes" msgstr "Test Notizen" @@ -5074,15 +5344,20 @@ msgstr "Ändern des BestandsObjekts in der Bauauftrag-Ansicht." msgid "This stock item has not passed all required tests" msgstr "Dieses BestandsObjekt hat nicht alle Tests bestanden" -#: stock/templates/stock/item_base.html:51 -msgid "This stock item is allocated to Sales Order" +#: stock/templates/stock/item_base.html:53 +#, fuzzy, python-format +#| msgid "This stock item is allocated to Sales Order" +msgid "" +"This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" msgstr "Dieses BestandsObjekt ist einem Auftrag zugewiesen" -#: stock/templates/stock/item_base.html:57 -msgid "This stock item is allocated to Build" +#: stock/templates/stock/item_base.html:61 +#, fuzzy, python-format +#| msgid "This stock item is allocated to Build" +msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" msgstr "Dieses BestandsObjekt ist dem Bauauftrag zugewiesen" -#: stock/templates/stock/item_base.html:63 +#: stock/templates/stock/item_base.html:67 msgid "" "This stock item is serialized - it has a unique serial number and the " "quantity cannot be adjusted." @@ -5090,144 +5365,148 @@ msgstr "" "Dieses BestandsObjekt ist serialisiert. Es hat eine eindeutige Seriennummer " "und die Anzahl kann nicht angepasst werden." -#: stock/templates/stock/item_base.html:67 +#: stock/templates/stock/item_base.html:71 msgid "This stock item cannot be deleted as it has child items" msgstr "Dieses BestandsObjekt kann nicht gelöscht werden, da es Kinder besitzt" -#: stock/templates/stock/item_base.html:71 +#: stock/templates/stock/item_base.html:75 msgid "" "This stock item will be automatically deleted when all stock is depleted." msgstr "" "Dieses BestandsObjekt wird automatisch gelöscht wenn der Lagerbestand " "aufgebraucht ist." -#: stock/templates/stock/item_base.html:91 -#: stock/templates/stock/item_base.html:353 templates/js/table_filters.js:123 +#: stock/templates/stock/item_base.html:95 +#: stock/templates/stock/item_base.html:369 templates/js/table_filters.js:123 msgid "Expired" msgstr "abgelaufen" -#: stock/templates/stock/item_base.html:95 -#: stock/templates/stock/item_base.html:355 templates/js/table_filters.js:128 +#: stock/templates/stock/item_base.html:99 +#: stock/templates/stock/item_base.html:371 templates/js/table_filters.js:128 msgid "Stale" msgstr "überfällig" -#: stock/templates/stock/item_base.html:132 templates/js/barcode.js:309 +#: stock/templates/stock/item_base.html:136 templates/js/barcode.js:309 #: templates/js/barcode.js:314 msgid "Unlink Barcode" msgstr "Barcode abhängen" -#: stock/templates/stock/item_base.html:134 +#: stock/templates/stock/item_base.html:138 msgid "Link Barcode" msgstr "Barcode anhängen" -#: stock/templates/stock/item_base.html:136 templates/stock_table.html:31 +#: stock/templates/stock/item_base.html:140 templates/stock_table.html:31 msgid "Scan to Location" msgstr "zu Lagerort einscannen" -#: stock/templates/stock/item_base.html:143 +#: stock/templates/stock/item_base.html:147 msgid "Printing actions" msgstr "Druck Aktionen" -#: stock/templates/stock/item_base.html:147 +#: stock/templates/stock/item_base.html:151 #: stock/templates/stock/item_tests.html:27 msgid "Test Report" msgstr "Test-Bericht" -#: stock/templates/stock/item_base.html:156 +#: stock/templates/stock/item_base.html:160 msgid "Stock adjustment actions" msgstr "Bestands-Anpassungs Aktionen" -#: stock/templates/stock/item_base.html:160 +#: stock/templates/stock/item_base.html:164 #: stock/templates/stock/location.html:58 templates/stock_table.html:55 msgid "Count stock" msgstr "Bestand zählen" -#: stock/templates/stock/item_base.html:163 templates/stock_table.html:53 +#: stock/templates/stock/item_base.html:167 templates/stock_table.html:53 msgid "Add stock" msgstr "Bestand hinzufügen" -#: stock/templates/stock/item_base.html:166 templates/stock_table.html:54 +#: stock/templates/stock/item_base.html:170 templates/stock_table.html:54 msgid "Remove stock" msgstr "Bestand entfernen" -#: stock/templates/stock/item_base.html:169 +#: stock/templates/stock/item_base.html:173 msgid "Serialize stock" msgstr "Lagerbestand serialisieren" -#: stock/templates/stock/item_base.html:173 +#: stock/templates/stock/item_base.html:177 msgid "Transfer stock" msgstr "Bestand verschieben" -#: stock/templates/stock/item_base.html:176 +#: stock/templates/stock/item_base.html:180 msgid "Assign to customer" msgstr "zu Kunden zuordnen" -#: stock/templates/stock/item_base.html:179 +#: stock/templates/stock/item_base.html:183 msgid "Return to stock" msgstr "zu Bestand zurückgeben" -#: stock/templates/stock/item_base.html:183 templates/js/stock.js:1222 +#: stock/templates/stock/item_base.html:187 templates/js/stock.js:1222 msgid "Uninstall stock item" msgstr "BestandsObjekt deinstallieren" -#: stock/templates/stock/item_base.html:183 +#: stock/templates/stock/item_base.html:187 msgid "Uninstall" msgstr "Deinstallieren" -#: stock/templates/stock/item_base.html:192 +#: stock/templates/stock/item_base.html:196 #: stock/templates/stock/location.html:55 msgid "Stock actions" msgstr "Bestands-Aktionen" -#: stock/templates/stock/item_base.html:195 +#: stock/templates/stock/item_base.html:199 msgid "Convert to variant" msgstr "in Variante ändern" -#: stock/templates/stock/item_base.html:198 +#: stock/templates/stock/item_base.html:202 msgid "Duplicate stock item" msgstr "BestandsObjekt duplizieren" -#: stock/templates/stock/item_base.html:200 +#: stock/templates/stock/item_base.html:204 msgid "Edit stock item" msgstr "BestandsObjekt bearbeiten" -#: stock/templates/stock/item_base.html:203 +#: stock/templates/stock/item_base.html:207 msgid "Delete stock item" msgstr "BestandsObjekt löschen" -#: stock/templates/stock/item_base.html:215 +#: stock/templates/stock/item_base.html:219 msgid "Stock Item Details" msgstr "BestandsObjekt-Details" -#: stock/templates/stock/item_base.html:274 templates/js/build.js:442 +#: stock/templates/stock/item_base.html:278 templates/js/build.js:442 msgid "No location set" msgstr "Kein Lagerort gesetzt" -#: stock/templates/stock/item_base.html:281 +#: stock/templates/stock/item_base.html:285 msgid "Barcode Identifier" msgstr "Barcode-Bezeichner" -#: stock/templates/stock/item_base.html:323 +#: stock/templates/stock/item_base.html:327 msgid "Parent Item" msgstr "Elternposition" -#: stock/templates/stock/item_base.html:353 -msgid "This StockItem expired on" +#: stock/templates/stock/item_base.html:369 +#, fuzzy, python-format +#| msgid "This StockItem expired on" +msgid "This StockItem expired on %(item.expiry_date)s" msgstr "Dieses BestandsObjekt lief ab am" -#: stock/templates/stock/item_base.html:355 -msgid "This StockItem expires on" +#: stock/templates/stock/item_base.html:371 +#, fuzzy, python-format +#| msgid "This StockItem expires on" +msgid "This StockItem expires on %(item.expiry_date)s" msgstr "Dieses BestandsObjekt läuft ab am" -#: stock/templates/stock/item_base.html:362 templates/js/stock.js:662 +#: stock/templates/stock/item_base.html:378 templates/js/stock.js:662 msgid "Last Updated" msgstr "Zuletzt aktualisiert" -#: stock/templates/stock/item_base.html:367 +#: stock/templates/stock/item_base.html:383 msgid "Last Stocktake" msgstr "Letzte Inventur" -#: stock/templates/stock/item_base.html:371 +#: stock/templates/stock/item_base.html:387 msgid "No stocktake performed" msgstr "Keine Inventur ausgeführt" @@ -5243,6 +5522,12 @@ msgstr "Dieses BestandsObjekt hat keine Kinder" msgid "Are you sure you want to delete this stock item?" msgstr "Sind Sie sicher, dass Sie dieses BestandsObjekt löschen wollen?" +#: stock/templates/stock/item_delete.html:12 +#, python-format +msgid "" +"This will remove %(qty)s units of %(full_name)s from stock." +msgstr "" + #: stock/templates/stock/item_install.html:7 msgid "Install another StockItem into this item." msgstr "Ein weiteres BestandsObjekt in dieses Teil installiert" @@ -5337,7 +5622,7 @@ msgstr "Unter-Lagerorte" msgid "Stock Details" msgstr "Objekt-Details" -#: stock/templates/stock/location.html:110 templates/InvenTree/search.html:263 +#: stock/templates/stock/location.html:110 templates/InvenTree/search.html:279 #: templates/stats.html:76 users/models.py:39 msgid "Stock Locations" msgstr "Bestand-Lagerorte" @@ -5395,7 +5680,9 @@ msgid "Convert Stock Item" msgstr "BestandsObjekt umwandeln" #: stock/templates/stock/stockitem_convert.html:8 -msgid "This stock item is current an instance of " +#, fuzzy, python-format +#| msgid "This stock item is current an instance of " +msgid "This stock item is current an instance of %(part)s" msgstr "BestandsObjekt ist aktuell eine Instanz von" #: stock/templates/stock/stockitem_convert.html:9 @@ -5406,6 +5693,12 @@ msgstr "Es kann in eine der folgenden Varianten konvertiert werden." msgid "This action cannot be easily undone" msgstr "Diese Aktion kann nicht einfach rückgängig gemacht werden" +#: stock/templates/stock/tracking_delete.html:6 +#, fuzzy +#| msgid "Are you sure you want to delete this stock item?" +msgid "Are you sure you want to delete this stock tracking entry?" +msgstr "Sind Sie sicher, dass Sie dieses BestandsObjekt löschen wollen?" + #: stock/views.py:123 msgid "Edit Stock Location" msgstr "BestandsObjekt-Lagerort bearbeiten" @@ -5523,7 +5816,7 @@ msgstr "Entfernen" msgid "Add Stock Items" msgstr "BestandsObjekte hinzufügen" -#: stock/views.py:1001 users/models.py:178 +#: stock/views.py:1001 users/models.py:179 msgid "Add" msgstr "Hinzufügen" @@ -5685,19 +5978,19 @@ msgstr "ausstehende Aufträge" msgid "Overdue Sales Orders" msgstr "überfällige Aufträge" -#: templates/InvenTree/search.html:7 templates/InvenTree/search.html:13 +#: templates/InvenTree/search.html:8 templates/InvenTree/search.html:14 msgid "Search Results" msgstr "Suchergebnisse" -#: templates/InvenTree/search.html:23 +#: templates/InvenTree/search.html:24 msgid "Enter a search query" msgstr "Eine Sucheanfrage eingeben" -#: templates/InvenTree/search.html:252 templates/js/stock.js:300 +#: templates/InvenTree/search.html:268 templates/js/stock.js:300 msgid "Shipped to customer" msgstr "an Kunde versand" -#: templates/InvenTree/search.html:255 templates/js/stock.js:310 +#: templates/InvenTree/search.html:271 templates/js/stock.js:310 msgid "No stock location set" msgstr "Kein Lagerort gesetzt" @@ -5772,7 +6065,7 @@ msgid "Edit setting" msgstr "Einstellungen ändern" #: templates/InvenTree/settings/settings.html:7 -#: templates/InvenTree/settings/settings.html:13 templates/navbar.html:78 +#: templates/InvenTree/settings/settings.html:13 templates/navbar.html:84 msgid "Settings" msgstr "Einstellungen" @@ -6044,27 +6337,37 @@ msgstr "Unterbaugruppe öffnen" msgid "No pricing available" msgstr "Keine Preisinformation verfügbar" -#: templates/js/bom.js:286 templates/js/bom.js:372 +#: templates/js/bom.js:272 templates/js/filters.js:167 +#: templates/js/filters.js:397 +msgid "true" +msgstr "ja" + +#: templates/js/bom.js:273 templates/js/filters.js:171 +#: templates/js/filters.js:398 +msgid "false" +msgstr "nein" + +#: templates/js/bom.js:290 templates/js/bom.js:376 msgid "View BOM" msgstr "Stückliste anzeigen" -#: templates/js/bom.js:346 +#: templates/js/bom.js:350 msgid "Validate BOM Item" msgstr "Stücklisten-Position kontrollieren" -#: templates/js/bom.js:348 +#: templates/js/bom.js:352 msgid "This line has been validated" msgstr "Diese Position wurde kontrolliert" -#: templates/js/bom.js:350 +#: templates/js/bom.js:354 msgid "Edit BOM Item" msgstr "Stücklisten-Position bearbeiten" -#: templates/js/bom.js:352 +#: templates/js/bom.js:356 msgid "Delete BOM Item" msgstr "Stücklisten-Position löschen" -#: templates/js/bom.js:443 templates/js/build.js:305 templates/js/build.js:1032 +#: templates/js/bom.js:447 templates/js/build.js:305 templates/js/build.js:1032 msgid "No BOM items found" msgstr "Keine Stücklisten-Position(en) gefunden" @@ -6131,24 +6434,24 @@ msgid "No company information found" msgstr "Keine Firmeninformation gefunden" #: templates/js/company.js:129 -msgid "No supplier parts found" +#, fuzzy +#| msgid "No supplier parts found" +msgid "No manufacturer parts found" msgstr "Keine Zulieferer-Teile gefunden" -#: templates/js/company.js:147 templates/js/part.js:59 templates/js/part.js:144 +#: templates/js/company.js:148 templates/js/company.js:246 +#: templates/js/part.js:59 templates/js/part.js:144 msgid "Template part" msgstr "Vorlagenteil" -#: templates/js/company.js:151 templates/js/part.js:63 templates/js/part.js:148 +#: templates/js/company.js:152 templates/js/company.js:250 +#: templates/js/part.js:63 templates/js/part.js:148 msgid "Assembled part" msgstr "Baugruppe" -#: templates/js/filters.js:167 templates/js/filters.js:397 -msgid "true" -msgstr "ja" - -#: templates/js/filters.js:171 templates/js/filters.js:398 -msgid "false" -msgstr "nein" +#: templates/js/company.js:227 +msgid "No supplier parts found" +msgstr "Keine Zulieferer-Teile gefunden" #: templates/js/filters.js:193 msgid "Select filter" @@ -6817,19 +7120,19 @@ msgstr "Verkaufen" msgid "Scan Barcode" msgstr "Barcode scannen" -#: templates/navbar.html:71 users/models.py:36 +#: templates/navbar.html:77 users/models.py:36 msgid "Admin" msgstr "Admin" -#: templates/navbar.html:73 +#: templates/navbar.html:79 msgid "Logout" msgstr "Ausloggen" -#: templates/navbar.html:75 templates/registration/login.html:89 +#: templates/navbar.html:81 templates/registration/login.html:89 msgid "Login" msgstr "Einloggen" -#: templates/navbar.html:94 +#: templates/navbar.html:104 msgid "About InvenTree" msgstr "Über InvenBaum" @@ -7017,6 +7320,14 @@ msgstr "Ausgewählte Positionen löschen" msgid "Delete Stock" msgstr "Bestand löschen" +#: templates/yesnolabel.html:4 +msgid "Yes" +msgstr "Ja" + +#: templates/yesnolabel.html:6 +msgid "No" +msgstr "Nein" + #: users/admin.py:64 msgid "Users" msgstr "Benutzer" @@ -7041,38 +7352,50 @@ msgstr "Berechtigungen" msgid "Important dates" msgstr "wichtige Daten" -#: users/models.py:165 +#: users/models.py:166 msgid "Permission set" msgstr "Berechtigung geändert" -#: users/models.py:173 +#: users/models.py:174 msgid "Group" msgstr "Gruppe" -#: users/models.py:176 +#: users/models.py:177 msgid "View" msgstr "Ansicht" -#: users/models.py:176 +#: users/models.py:177 msgid "Permission to view items" msgstr "Berechtigung Einträge anzuzeigen" -#: users/models.py:178 +#: users/models.py:179 msgid "Permission to add items" msgstr "Berechtigung Einträge zu erstellen" -#: users/models.py:180 +#: users/models.py:181 msgid "Change" msgstr "Ändern" -#: users/models.py:180 +#: users/models.py:181 msgid "Permissions to edit items" msgstr "Berechtigungen Einträge zu ändern" -#: users/models.py:182 +#: users/models.py:183 msgid "Permission to delete items" msgstr "Berechtigung Einträge zu löschen" +#~ msgid "Create new purchase order for {{ supplier.name }}" +#~ msgstr "Neue Bestellung für {{ supplier.name }} anlegen" + +#~ msgid "child categories" +#~ msgstr "Unter-Kategorien" + +#~ msgid "parts" +#~ msgstr "Teile" + +#~ msgid "match" +#~ msgstr "entspricht" + #, fuzzy #~| msgid "Part Pricing" #~ msgid "Stock Pricing" @@ -7434,12 +7757,6 @@ msgstr "Berechtigung Einträge zu löschen" #~ msgid "Enough Parts?" #~ msgstr "Genügend Teile?" -#~ msgid "Yes" -#~ msgstr "Ja" - -#~ msgid "No" -#~ msgstr "Nein" - #~ msgid "No matching build found" #~ msgstr "Kein passender Bau gefunden" diff --git a/InvenTree/locale/en/LC_MESSAGES/django.po b/InvenTree/locale/en/LC_MESSAGES/django.po index cba1555d33..88164f6c11 100644 --- a/InvenTree/locale/en/LC_MESSAGES/django.po +++ b/InvenTree/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-15 10:07+0000\n" +"POT-Creation-Date: 2021-04-17 23:25+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -37,7 +37,7 @@ msgstr "" #: InvenTree/forms.py:110 build/forms.py:99 build/forms.py:120 #: build/forms.py:142 build/forms.py:166 build/forms.py:188 build/forms.py:223 #: order/forms.py:27 order/forms.py:38 order/forms.py:49 order/forms.py:60 -#: order/forms.py:71 part/forms.py:132 +#: order/forms.py:71 part/forms.py:134 msgid "Confirm" msgstr "" @@ -73,40 +73,40 @@ msgstr "" msgid "Select Category" msgstr "" -#: InvenTree/helpers.py:361 order/models.py:245 order/models.py:344 +#: InvenTree/helpers.py:375 order/models.py:245 order/models.py:344 #: stock/views.py:1763 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:364 +#: InvenTree/helpers.py:378 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:385 +#: InvenTree/helpers.py:399 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:389 InvenTree/helpers.py:392 InvenTree/helpers.py:395 +#: InvenTree/helpers.py:403 InvenTree/helpers.py:406 InvenTree/helpers.py:409 #, python-brace-format msgid "Invalid group: {g}" msgstr "" -#: InvenTree/helpers.py:400 +#: InvenTree/helpers.py:414 #, python-brace-format msgid "Duplicate serial: {g}" msgstr "" -#: InvenTree/helpers.py:408 +#: InvenTree/helpers.py:422 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:412 +#: InvenTree/helpers.py:426 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/models.py:59 stock/models.py:1659 +#: InvenTree/models.py:59 stock/models.py:1661 msgid "Attachment" msgstr "" @@ -134,14 +134,15 @@ msgstr "" #: InvenTree/models.py:107 InvenTree/models.py:108 label/models.py:101 #: part/models.py:686 part/models.py:2029 part/templates/part/params.html:27 -#: report/models.py:179 templates/InvenTree/search.html:136 -#: templates/InvenTree/search.html:273 templates/js/part.js:109 +#: report/models.py:179 templates/InvenTree/search.html:137 +#: templates/InvenTree/search.html:289 templates/js/part.js:109 msgid "Name" msgstr "" #: InvenTree/models.py:114 build/models.py:134 -#: build/templates/build/detail.html:21 company/models.py:365 -#: company/templates/company/detail.html:26 +#: build/templates/build/detail.html:21 company/models.py:342 +#: company/models.py:494 company/templates/company/detail.html:27 +#: company/templates/company/manufacturer_part_base.html:72 #: company/templates/company/supplier_part_base.html:70 #: company/templates/company/supplier_part_detail.html:31 label/models.py:108 #: order/models.py:101 order/templates/order/purchase_order_detail.html:168 @@ -149,8 +150,8 @@ msgstr "" #: part/templates/part/set_category.html:14 report/models.py:192 #: report/models.py:505 report/models.py:544 #: report/templates/report/inventree_build_order_base.html:118 -#: templates/InvenTree/search.html:143 templates/InvenTree/search.html:208 -#: templates/InvenTree/search.html:280 +#: templates/InvenTree/search.html:144 templates/InvenTree/search.html:224 +#: templates/InvenTree/search.html:296 #: templates/InvenTree/settings/header.html:9 templates/js/bom.js:190 #: templates/js/build.js:677 templates/js/build.js:944 #: templates/js/company.js:56 templates/js/order.js:183 @@ -312,7 +313,7 @@ msgstr "" msgid "Password fields must match" msgstr "" -#: InvenTree/views.py:887 templates/navbar.html:85 +#: InvenTree/views.py:887 templates/navbar.html:95 msgid "System Information" msgstr "" @@ -364,7 +365,7 @@ msgstr "" msgid "Order target date" msgstr "" -#: build/forms.py:39 build/templates/build/build_base.html:104 +#: build/forms.py:39 build/templates/build/build_base.html:107 #: build/templates/build/detail.html:121 order/forms.py:109 order/forms.py:144 #: order/templates/order/order_base.html:124 #: order/templates/order/sales_order_base.html:117 @@ -381,31 +382,29 @@ msgstr "" #: build/forms.py:45 build/forms.py:87 build/forms.py:257 build/models.py:1103 #: build/templates/build/auto_allocate.html:17 -#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:94 #: build/templates/build/detail.html:31 common/models.py:696 -#: company/forms.py:131 company/templates/company/supplier_part_pricing.html:77 +#: company/forms.py:176 company/templates/company/supplier_part_pricing.html:77 #: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261 #: order/forms.py:278 order/models.py:593 order/models.py:784 #: order/templates/order/order_wizard/select_parts.html:32 -#: order/templates/order/purchase_order_detail.html:193 +#: order/templates/order/purchase_order_detail.html:200 #: order/templates/order/sales_order_detail.html:70 #: order/templates/order/sales_order_detail.html:77 #: order/templates/order/sales_order_detail.html:159 -#: order/templates/order/sales_order_detail.html:224 part/forms.py:340 -#: part/forms.py:369 part/forms.py:385 part/models.py:2158 +#: order/templates/order/sales_order_detail.html:224 part/forms.py:342 +#: part/forms.py:371 part/forms.py:387 part/models.py:2158 #: part/templates/part/allocation.html:19 #: part/templates/part/allocation.html:53 -#: part/templates/part/part_pricing.html:12 -#: part/templates/part/part_pricing.html:19 +#: part/templates/part/part_pricing.html:11 +#: part/templates/part/part_pricing.html:18 #: part/templates/part/sale_prices.html:85 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:77 -#: stock/forms.py:175 stock/forms.py:308 stock/models.py:1563 -#: stock/templates/stock/item_base.html:51 -#: stock/templates/stock/item_base.html:57 -#: stock/templates/stock/item_base.html:240 +#: stock/forms.py:175 stock/forms.py:308 stock/models.py:1565 +#: stock/templates/stock/item_base.html:244 #: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364 #: templates/js/bom.js:205 templates/js/build.js:420 templates/js/build.js:954 #: templates/js/stock.js:956 templates/js/stock.js:1194 @@ -450,9 +449,9 @@ msgstr "" #: build/forms.py:213 build/templates/build/auto_allocate.html:18 #: order/forms.py:82 stock/forms.py:347 -#: stock/templates/stock/item_base.html:270 +#: stock/templates/stock/item_base.html:274 #: stock/templates/stock/stock_adjust.html:17 -#: templates/InvenTree/search.html:244 templates/js/barcode.js:363 +#: templates/InvenTree/search.html:260 templates/js/barcode.js:363 #: templates/js/barcode.js:531 templates/js/build.js:434 #: templates/js/stock.js:641 msgid "Location" @@ -486,8 +485,8 @@ msgstr "" msgid "Select quantity of stock to allocate" msgstr "" -#: build/models.py:65 build/templates/build/build_base.html:8 -#: build/templates/build/build_base.html:35 +#: build/models.py:65 build/templates/build/build_base.html:9 +#: build/templates/build/build_base.html:38 #: part/templates/part/allocation.html:23 #: report/templates/report/inventree_build_order_base.html:106 msgid "Build Order" @@ -498,7 +497,7 @@ msgstr "" #: order/templates/order/so_navbar.html:19 #: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55 #: part/templates/part/navbar.html:58 templates/InvenTree/index.html:182 -#: templates/InvenTree/search.html:169 +#: templates/InvenTree/search.html:185 #: templates/InvenTree/settings/tabs.html:31 users/models.py:41 msgid "Build Orders" msgstr "" @@ -508,7 +507,7 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:127 order/models.py:99 order/models.py:595 -#: order/templates/order/purchase_order_detail.html:188 +#: order/templates/order/purchase_order_detail.html:195 #: order/templates/order/sales_order_detail.html:219 part/models.py:2167 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197 @@ -520,7 +519,7 @@ msgstr "" msgid "Brief description of the build" msgstr "" -#: build/models.py:146 build/templates/build/build_base.html:121 +#: build/models.py:146 build/templates/build/build_base.html:124 #: build/templates/build/detail.html:77 msgid "Parent Build" msgstr "" @@ -530,8 +529,8 @@ msgid "BuildOrder to which this build is allocated" msgstr "" #: build/models.py:152 build/templates/build/auto_allocate.html:16 -#: build/templates/build/build_base.html:86 -#: build/templates/build/detail.html:26 company/models.py:539 +#: build/templates/build/build_base.html:89 +#: build/templates/build/detail.html:26 company/models.py:669 #: order/models.py:637 order/models.py:669 #: order/templates/order/order_wizard/select_parts.html:30 #: order/templates/order/purchase_order_detail.html:156 @@ -540,17 +539,17 @@ msgstr "" #: part/models.py:1856 part/models.py:1868 part/models.py:1886 #: part/models.py:1961 part/models.py:2057 part/models.py:2142 #: part/templates/part/part_app_base.html:7 -#: part/templates/part/part_pricing.html:15 part/templates/part/related.html:29 +#: part/templates/part/part_pricing.html:14 part/templates/part/related.html:29 #: part/templates/part/set_category.html:13 #: part/templates/part/subcategories.html:17 #: report/templates/report/inventree_build_order_base.html:110 #: report/templates/report/inventree_po_report.html:90 #: report/templates/report/inventree_so_report.html:90 -#: templates/InvenTree/search.html:111 templates/InvenTree/search.html:194 +#: templates/InvenTree/search.html:112 templates/InvenTree/search.html:210 #: templates/js/barcode.js:362 templates/js/bom.js:163 #: templates/js/build.js:681 templates/js/build.js:921 -#: templates/js/company.js:138 templates/js/part.js:232 -#: templates/js/part.js:337 templates/js/stock.js:523 +#: templates/js/company.js:140 templates/js/company.js:238 +#: templates/js/part.js:232 templates/js/part.js:337 templates/js/stock.js:523 #: templates/js/stock.js:1266 msgid "Part" msgstr "" @@ -601,7 +600,7 @@ msgstr "" msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:204 part/templates/part/part_base.html:159 +#: build/models.py:204 part/templates/part/part_base.html:160 msgid "Build Status" msgstr "" @@ -609,7 +608,7 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:212 stock/models.py:430 +#: build/models.py:212 stock/models.py:432 msgid "Batch Code" msgstr "" @@ -642,7 +641,7 @@ msgstr "" msgid "User who issued this build order" msgstr "" -#: build/models.py:250 build/templates/build/build_base.html:142 +#: build/models.py:250 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:105 order/models.py:119 #: order/templates/order/order_base.html:138 #: order/templates/order/sales_order_base.html:138 part/models.py:886 @@ -655,33 +654,35 @@ msgid "User responsible for this build order" msgstr "" #: build/models.py:256 build/templates/build/detail.html:91 +#: company/templates/company/manufacturer_part_base.html:79 +#: company/templates/company/manufacturer_part_detail.html:28 #: company/templates/company/supplier_part_base.html:77 #: company/templates/company/supplier_part_detail.html:28 -#: part/templates/part/detail.html:83 part/templates/part/part_base.html:100 -#: stock/models.py:424 stock/templates/stock/item_base.html:330 +#: part/templates/part/detail.html:83 part/templates/part/part_base.html:101 +#: stock/models.py:426 stock/templates/stock/item_base.html:334 msgid "External Link" msgstr "" -#: build/models.py:257 part/models.py:744 stock/models.py:426 +#: build/models.py:257 part/models.py:744 stock/models.py:428 msgid "Link to external URL" msgstr "" #: build/models.py:261 build/templates/build/navbar.html:59 -#: company/models.py:133 company/models.py:372 -#: company/templates/company/navbar.html:59 -#: company/templates/company/navbar.html:62 order/models.py:123 +#: company/models.py:135 company/models.py:501 +#: company/templates/company/navbar.html:70 +#: company/templates/company/navbar.html:73 order/models.py:123 #: order/models.py:597 order/templates/order/po_navbar.html:29 #: order/templates/order/po_navbar.html:32 -#: order/templates/order/purchase_order_detail.html:227 +#: order/templates/order/purchase_order_detail.html:234 #: order/templates/order/sales_order_detail.html:264 #: order/templates/order/so_navbar.html:33 #: order/templates/order/so_navbar.html:36 part/models.py:871 -#: part/templates/part/navbar.html:122 +#: part/templates/part/navbar.html:128 #: report/templates/report/inventree_build_order_base.html:173 #: stock/forms.py:173 stock/forms.py:317 stock/forms.py:349 stock/forms.py:377 -#: stock/models.py:496 stock/models.py:1555 stock/models.py:1665 +#: stock/models.py:498 stock/models.py:1557 stock/models.py:1667 #: stock/templates/stock/navbar.html:57 templates/js/barcode.js:37 -#: templates/js/bom.js:329 templates/js/stock.js:128 templates/js/stock.js:671 +#: templates/js/bom.js:333 templates/js/stock.js:128 templates/js/stock.js:671 msgid "Notes" msgstr "" @@ -735,8 +736,8 @@ msgstr "" msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1082 stock/templates/stock/item_base.html:302 -#: templates/InvenTree/search.html:167 templates/js/build.js:655 +#: build/models.py:1082 stock/templates/stock/item_base.html:306 +#: templates/InvenTree/search.html:183 templates/js/build.js:655 #: templates/navbar.html:29 msgid "Build" msgstr "" @@ -750,8 +751,8 @@ msgstr "" #: part/templates/part/allocation.html:31 #: part/templates/part/allocation.html:49 #: stock/templates/stock/item_base.html:8 -#: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/item_base.html:324 +#: stock/templates/stock/item_base.html:93 +#: stock/templates/stock/item_base.html:328 #: stock/templates/stock/stock_adjust.html:16 templates/js/build.js:771 #: templates/js/stock.js:927 templates/js/stock.js:1185 msgid "Stock Item" @@ -794,7 +795,8 @@ msgid "Order required parts" msgstr "" #: build/templates/build/allocate.html:31 -#: company/templates/company/detail_part.html:31 order/views.py:794 +#: company/templates/company/detail_manufacturer_part.html:33 +#: company/templates/company/detail_supplier_part.html:32 order/views.py:794 #: part/templates/part/category.html:127 msgid "Order Parts" msgstr "" @@ -822,8 +824,8 @@ msgstr "" #: build/templates/build/attachments.html:12 #: build/templates/build/navbar.html:49 build/templates/build/navbar.html:52 #: order/templates/order/po_navbar.html:26 -#: order/templates/order/so_navbar.html:29 part/templates/part/navbar.html:113 -#: part/templates/part/navbar.html:116 stock/templates/stock/navbar.html:47 +#: order/templates/order/so_navbar.html:29 part/templates/part/navbar.html:119 +#: part/templates/part/navbar.html:122 stock/templates/stock/navbar.html:47 #: stock/templates/stock/navbar.html:50 msgid "Attachments" msgstr "" @@ -845,27 +847,30 @@ msgstr "" msgid "Stock items will have to be manually allocated" msgstr "" -#: build/templates/build/build_base.html:14 -msgid "This Build Order is allocated to Sales Order" +#: build/templates/build/build_base.html:16 +#, python-format +msgid "This Build Order is allocated to Sales Order %(link)s" msgstr "" -#: build/templates/build/build_base.html:19 -msgid "This Build Order is a child of Build Order" +#: build/templates/build/build_base.html:22 +#, python-format +msgid "This Build Order is a child of Build Order %(link)s" msgstr "" -#: build/templates/build/build_base.html:37 +#: build/templates/build/build_base.html:40 #: company/templates/company/company_base.html:40 +#: company/templates/company/manufacturer_part_base.html:25 #: company/templates/company/supplier_part_base.html:25 #: order/templates/order/order_base.html:26 #: order/templates/order/sales_order_base.html:35 -#: part/templates/part/category.html:14 part/templates/part/part_base.html:28 -#: stock/templates/stock/item_base.html:114 +#: part/templates/part/category.html:14 part/templates/part/part_base.html:29 +#: stock/templates/stock/item_base.html:118 #: stock/templates/stock/location.html:24 msgid "Admin view" msgstr "" -#: build/templates/build/build_base.html:43 -#: build/templates/build/build_base.html:108 +#: build/templates/build/build_base.html:46 +#: build/templates/build/build_base.html:111 #: order/templates/order/order_base.html:32 #: order/templates/order/order_base.html:86 #: order/templates/order/sales_order_base.html:41 @@ -875,57 +880,58 @@ msgstr "" msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:52 +#: build/templates/build/build_base.html:55 msgid "Print actions" msgstr "" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:59 msgid "Print Build Order" msgstr "" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:65 msgid "Build actions" msgstr "" -#: build/templates/build/build_base.html:66 +#: build/templates/build/build_base.html:69 msgid "Edit Build" msgstr "" -#: build/templates/build/build_base.html:68 -#: build/templates/build/build_base.html:176 +#: build/templates/build/build_base.html:71 +#: build/templates/build/build_base.html:179 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:69 -#: build/templates/build/build_base.html:167 build/views.py:57 +#: build/templates/build/build_base.html:72 +#: build/templates/build/build_base.html:170 build/views.py:57 msgid "Cancel Build" msgstr "" -#: build/templates/build/build_base.html:82 +#: build/templates/build/build_base.html:85 #: build/templates/build/detail.html:11 msgid "Build Details" msgstr "" -#: build/templates/build/build_base.html:96 +#: build/templates/build/build_base.html:99 #: build/templates/build/detail.html:59 order/models.py:445 #: order/templates/order/receive_parts.html:24 -#: stock/templates/stock/item_base.html:376 templates/InvenTree/search.html:236 +#: stock/templates/stock/item_base.html:392 templates/InvenTree/search.html:252 #: templates/js/barcode.js:119 templates/js/build.js:710 #: templates/js/order.js:187 templates/js/order.js:285 #: templates/js/stock.js:628 templates/js/stock.js:1202 msgid "Status" msgstr "" -#: build/templates/build/build_base.html:108 -msgid "This build was due on" +#: build/templates/build/build_base.html:111 +#, python-format +msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:118 #: build/templates/build/detail.html:64 msgid "Progress" msgstr "" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:131 #: build/templates/build/detail.html:84 order/models.py:667 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:33 @@ -933,11 +939,11 @@ msgstr "" #: part/templates/part/allocation.html:30 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:264 templates/js/order.js:245 +#: stock/templates/stock/item_base.html:268 templates/js/order.js:245 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:135 +#: build/templates/build/build_base.html:138 #: build/templates/build/detail.html:98 #: report/templates/report/inventree_build_order_base.html:153 msgid "Issued By" @@ -1014,11 +1020,15 @@ msgid "Select a stock item to allocate to the selected build output" msgstr "" #: build/templates/build/create_build_item.html:11 -msgid "The allocated stock will be installed into the following build output:" +#, python-format +msgid "" +"The allocated stock will be installed into the following build output:
                        " +"%(output)s" msgstr "" -#: build/templates/build/create_build_item.html:19 -msgid "No stock available for" +#: build/templates/build/create_build_item.html:17 +#, python-format +msgid "No stock available for %(part)s" msgstr "" #: build/templates/build/delete_build_item.html:8 @@ -1046,7 +1056,7 @@ msgid "Destination location not specified" msgstr "" #: build/templates/build/detail.html:70 -#: stock/templates/stock/item_base.html:288 templates/js/stock.js:636 +#: stock/templates/stock/item_base.html:292 templates/js/stock.js:636 #: templates/js/stock.js:1209 templates/js/table_filters.js:85 #: templates/js/table_filters.js:179 msgid "Batch" @@ -1137,7 +1147,7 @@ msgstr "" #: build/templates/build/notes.html:26 company/templates/company/notes.html:24 #: order/templates/order/order_notes.html:27 #: order/templates/order/sales_order_notes.html:29 -#: part/templates/part/notes.html:27 stock/templates/stock/item_base.html:454 +#: part/templates/part/notes.html:27 stock/templates/stock/item_base.html:470 #: stock/templates/stock/item_notes.html:26 msgid "Save" msgstr "" @@ -1170,7 +1180,7 @@ msgstr "" msgid "Create Build Output" msgstr "" -#: build/views.py:203 stock/models.py:966 stock/views.py:1789 +#: build/views.py:203 stock/models.py:968 stock/views.py:1789 msgid "Serial numbers already exist" msgstr "" @@ -1308,7 +1318,7 @@ msgstr "" msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:62 company/models.py:95 company/models.py:96 +#: common/models.py:62 company/models.py:97 company/models.py:98 msgid "Company name" msgstr "" @@ -1623,7 +1633,7 @@ msgstr "" msgid "Key string must be unique" msgstr "" -#: common/models.py:697 company/forms.py:132 +#: common/models.py:697 company/forms.py:177 msgid "Price break quantity" msgstr "" @@ -1656,224 +1666,253 @@ msgstr "" msgid "Supplied value must be a boolean" msgstr "" -#: company/forms.py:37 company/models.py:143 -#: company/templates/company/detail.html:40 +#: company/forms.py:38 company/models.py:145 +#: company/templates/company/detail.html:42 msgid "Currency" msgstr "" -#: company/forms.py:38 company/models.py:145 +#: company/forms.py:39 company/models.py:147 msgid "Default currency used for this company" msgstr "" -#: company/forms.py:76 part/forms.py:46 +#: company/forms.py:77 part/forms.py:46 msgid "URL" msgstr "" -#: company/forms.py:77 part/forms.py:47 +#: company/forms.py:78 part/forms.py:47 msgid "Image URL" msgstr "" -#: company/forms.py:99 +#: company/forms.py:118 msgid "Single Price" msgstr "" -#: company/forms.py:101 +#: company/forms.py:120 msgid "Single quantity price" msgstr "" -#: company/models.py:100 -msgid "Company description" -msgstr "" - -#: company/models.py:101 -msgid "Description of the company" -msgstr "" - -#: company/models.py:105 company/templates/company/company_base.html:70 -#: company/templates/company/detail.html:31 templates/js/company.js:60 -msgid "Website" -msgstr "" - -#: company/models.py:105 -msgid "Company website URL" -msgstr "" - -#: company/models.py:108 company/templates/company/company_base.html:77 -msgid "Address" -msgstr "" - -#: company/models.py:109 -msgid "Company address" -msgstr "" - -#: company/models.py:112 -msgid "Phone number" -msgstr "" - -#: company/models.py:113 -msgid "Contact phone number" -msgstr "" - -#: company/models.py:116 company/templates/company/company_base.html:91 -msgid "Email" -msgstr "" - -#: company/models.py:116 -msgid "Contact email address" -msgstr "" - -#: company/models.py:119 company/templates/company/company_base.html:98 -msgid "Contact" -msgstr "" - -#: company/models.py:120 -msgid "Point of contact" -msgstr "" - -#: company/models.py:122 company/models.py:359 order/models.py:103 -#: part/models.py:743 -#: report/templates/report/inventree_build_order_base.html:165 -#: stock/models.py:1557 templates/js/company.js:208 templates/js/part.js:430 -msgid "Link" -msgstr "" - -#: company/models.py:122 -msgid "Link to external company information" -msgstr "" - -#: company/models.py:130 part/models.py:753 -msgid "Image" -msgstr "" - -#: company/models.py:135 -msgid "is customer" -msgstr "" - -#: company/models.py:135 -msgid "Do you sell items to this company?" -msgstr "" - -#: company/models.py:137 -msgid "is supplier" -msgstr "" - -#: company/models.py:137 -msgid "Do you purchase items from this company?" -msgstr "" - -#: company/models.py:139 -msgid "is manufacturer" -msgstr "" - -#: company/models.py:139 -msgid "Does this company manufacture parts?" -msgstr "" - -#: company/models.py:319 stock/models.py:371 -#: stock/templates/stock/item_base.html:220 -msgid "Base Part" -msgstr "" - -#: company/models.py:323 order/views.py:1372 -msgid "Select part" -msgstr "" - -#: company/models.py:329 company/templates/company/detail.html:60 -#: company/templates/company/supplier_part_base.html:83 -#: company/templates/company/supplier_part_detail.html:25 order/models.py:190 -#: order/templates/order/order_base.html:92 -#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:170 -#: stock/templates/stock/item_base.html:337 templates/js/company.js:48 -#: templates/js/company.js:164 templates/js/order.js:170 -msgid "Supplier" -msgstr "" - -#: company/models.py:330 -msgid "Select supplier" -msgstr "" - -#: company/models.py:335 company/templates/company/supplier_part_base.html:87 -#: company/templates/company/supplier_part_detail.html:26 -#: order/templates/order/purchase_order_detail.html:174 part/bom.py:171 -msgid "SKU" -msgstr "" - -#: company/models.py:336 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:346 company/templates/company/detail.html:55 -#: company/templates/company/supplier_part_base.html:93 -#: company/templates/company/supplier_part_detail.html:34 part/bom.py:172 -#: templates/js/company.js:44 templates/js/company.js:188 -msgid "Manufacturer" -msgstr "" - -#: company/models.py:347 +#: company/forms.py:128 company/models.py:324 msgid "Select manufacturer" msgstr "" -#: company/models.py:353 company/templates/company/supplier_part_base.html:99 +#: company/forms.py:134 company/models.py:331 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/forms.py:136 company/models.py:330 +#: company/templates/company/manufacturer_part_base.html:89 +#: company/templates/company/manufacturer_part_detail.html:26 +#: company/templates/company/supplier_part_base.html:100 #: company/templates/company/supplier_part_detail.html:35 -#: order/templates/order/purchase_order_detail.html:183 part/bom.py:173 -#: templates/js/company.js:204 +#: order/templates/order/purchase_order_detail.html:183 part/bom.py:171 +#: part/bom.py:242 templates/js/company.js:181 templates/js/company.js:307 msgid "MPN" msgstr "" -#: company/models.py:354 -msgid "Manufacturer part number" +#: company/models.py:102 +msgid "Company description" msgstr "" -#: company/models.py:360 +#: company/models.py:103 +msgid "Description of the company" +msgstr "" + +#: company/models.py:107 company/templates/company/company_base.html:70 +#: company/templates/company/detail.html:33 templates/js/company.js:60 +msgid "Website" +msgstr "" + +#: company/models.py:107 +msgid "Company website URL" +msgstr "" + +#: company/models.py:110 company/templates/company/company_base.html:77 +msgid "Address" +msgstr "" + +#: company/models.py:111 +msgid "Company address" +msgstr "" + +#: company/models.py:114 +msgid "Phone number" +msgstr "" + +#: company/models.py:115 +msgid "Contact phone number" +msgstr "" + +#: company/models.py:118 company/templates/company/company_base.html:91 +msgid "Email" +msgstr "" + +#: company/models.py:118 +msgid "Contact email address" +msgstr "" + +#: company/models.py:121 company/templates/company/company_base.html:98 +msgid "Contact" +msgstr "" + +#: company/models.py:122 +msgid "Point of contact" +msgstr "" + +#: company/models.py:124 company/models.py:336 company/models.py:488 +#: order/models.py:103 part/models.py:743 +#: report/templates/report/inventree_build_order_base.html:165 +#: stock/models.py:1559 templates/js/company.js:188 templates/js/company.js:318 +#: templates/js/part.js:430 +msgid "Link" +msgstr "" + +#: company/models.py:124 +msgid "Link to external company information" +msgstr "" + +#: company/models.py:132 part/models.py:753 +msgid "Image" +msgstr "" + +#: company/models.py:137 +msgid "is customer" +msgstr "" + +#: company/models.py:137 +msgid "Do you sell items to this company?" +msgstr "" + +#: company/models.py:139 +msgid "is supplier" +msgstr "" + +#: company/models.py:139 +msgid "Do you purchase items from this company?" +msgstr "" + +#: company/models.py:141 +msgid "is manufacturer" +msgstr "" + +#: company/models.py:141 +msgid "Does this company manufacture parts?" +msgstr "" + +#: company/models.py:308 company/models.py:459 stock/models.py:373 +#: stock/templates/stock/item_base.html:224 +msgid "Base Part" +msgstr "" + +#: company/models.py:312 company/models.py:463 order/views.py:1372 +msgid "Select part" +msgstr "" + +#: company/models.py:323 company/templates/company/detail.html:57 +#: company/templates/company/manufacturer_part_base.html:85 +#: company/templates/company/manufacturer_part_detail.html:25 +#: company/templates/company/supplier_part_base.html:93 +#: company/templates/company/supplier_part_detail.html:34 part/bom.py:170 +#: part/bom.py:241 stock/templates/stock/item_base.html:341 +#: templates/js/company.js:44 templates/js/company.js:165 +#: templates/js/company.js:289 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:337 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:343 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:469 company/templates/company/detail.html:62 +#: company/templates/company/supplier_part_base.html:83 +#: company/templates/company/supplier_part_detail.html:25 order/models.py:190 +#: order/templates/order/order_base.html:92 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:175 +#: part/bom.py:286 stock/templates/stock/item_base.html:353 +#: templates/js/company.js:48 templates/js/company.js:263 +#: templates/js/order.js:170 +msgid "Supplier" +msgstr "" + +#: company/models.py:470 +msgid "Select supplier" +msgstr "" + +#: company/models.py:475 company/templates/company/supplier_part_base.html:87 +#: company/templates/company/supplier_part_detail.html:26 +#: order/templates/order/purchase_order_detail.html:174 part/bom.py:176 +#: part/bom.py:287 +msgid "SKU" +msgstr "" + +#: company/models.py:476 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:482 +#: company/templates/company/manufacturer_part_base.html:6 +#: company/templates/company/manufacturer_part_base.html:19 +#: stock/templates/stock/item_base.html:346 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:483 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:489 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:366 +#: company/models.py:495 msgid "Supplier part description" msgstr "" -#: company/models.py:371 company/templates/company/supplier_part_base.html:113 +#: company/models.py:500 company/templates/company/supplier_part_base.html:114 #: company/templates/company/supplier_part_detail.html:38 part/models.py:2170 #: report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" msgstr "" -#: company/models.py:375 +#: company/models.py:504 msgid "base cost" msgstr "" -#: company/models.py:375 +#: company/models.py:504 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:377 company/templates/company/supplier_part_base.html:106 -#: stock/models.py:395 stock/templates/stock/item_base.html:295 +#: company/models.py:506 company/templates/company/supplier_part_base.html:107 +#: stock/models.py:397 stock/templates/stock/item_base.html:299 #: templates/js/stock.js:667 msgid "Packaging" msgstr "" -#: company/models.py:377 +#: company/models.py:506 msgid "Part packaging" msgstr "" -#: company/models.py:379 +#: company/models.py:508 msgid "multiple" msgstr "" -#: company/models.py:379 +#: company/models.py:508 msgid "Order multiple" msgstr "" #: company/templates/company/assigned_stock.html:10 -#: company/templates/company/navbar.html:51 -#: company/templates/company/navbar.html:54 templates/js/build.js:411 +#: company/templates/company/navbar.html:62 +#: company/templates/company/navbar.html:65 templates/js/build.js:411 msgid "Assigned Stock" msgstr "" #: company/templates/company/company_base.html:9 #: company/templates/company/company_base.html:35 -#: templates/InvenTree/search.html:288 templates/js/company.js:33 +#: templates/InvenTree/search.html:304 templates/js/company.js:33 msgid "Company" msgstr "" @@ -1895,7 +1934,7 @@ msgstr "" msgid "Edit company information" msgstr "" -#: company/templates/company/company_base.html:56 company/views.py:324 +#: company/templates/company/company_base.html:56 company/views.py:326 msgid "Delete Company" msgstr "" @@ -1926,83 +1965,80 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/templates/company/detail.html:34 +#: company/templates/company/detail.html:36 msgid "No website specified" msgstr "" -#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:45 msgid "Uses default currency" msgstr "" -#: company/templates/company/detail.html:65 order/models.py:440 -#: order/templates/order/sales_order_base.html:92 stock/models.py:413 -#: stock/models.py:414 stock/templates/stock/item_base.html:247 +#: company/templates/company/detail.html:67 order/models.py:440 +#: order/templates/order/sales_order_base.html:92 stock/models.py:415 +#: stock/models.py:416 stock/templates/stock/item_base.html:251 #: templates/js/company.js:40 templates/js/order.js:267 msgid "Customer" msgstr "" -#: company/templates/company/detail_part.html:10 -#: templates/InvenTree/search.html:148 -msgid "Supplier Parts" +#: company/templates/company/detail_manufacturer_part.html:11 +#: templates/InvenTree/search.html:149 +msgid "Manufacturer Parts" msgstr "" -#: company/templates/company/detail_part.html:20 -#: order/templates/order/order_wizard/select_parts.html:42 -#: order/templates/order/purchase_order_detail.html:75 -msgid "Create new supplier part" +#: company/templates/company/detail_manufacturer_part.html:22 +msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail_part.html:21 -#: order/templates/order/purchase_order_detail.html:74 -#: part/templates/part/supplier.html:17 templates/js/stock.js:1086 -msgid "New Supplier Part" +#: company/templates/company/detail_manufacturer_part.html:23 +#: part/templates/part/manufacturer.html:19 +msgid "New Manufacturer Part" msgstr "" -#: company/templates/company/detail_part.html:26 -#: part/templates/part/category.html:122 part/templates/part/supplier.html:20 +#: company/templates/company/detail_manufacturer_part.html:28 +#: company/templates/company/detail_supplier_part.html:27 +#: company/templates/company/manufacturer_part_suppliers.html:20 +#: part/templates/part/category.html:122 +#: part/templates/part/manufacturer.html:22 +#: part/templates/part/supplier.html:20 msgid "Options" msgstr "" -#: company/templates/company/detail_part.html:31 +#: company/templates/company/detail_manufacturer_part.html:33 +#: company/templates/company/detail_supplier_part.html:32 #: part/templates/part/category.html:127 msgid "Order parts" msgstr "" -#: company/templates/company/detail_part.html:34 +#: company/templates/company/detail_manufacturer_part.html:36 +#: company/templates/company/detail_supplier_part.html:35 msgid "Delete parts" msgstr "" -#: company/templates/company/detail_part.html:34 +#: company/templates/company/detail_manufacturer_part.html:36 +#: company/templates/company/detail_supplier_part.html:35 msgid "Delete Parts" msgstr "" -#: company/templates/company/detail_part.html:66 +#: company/templates/company/detail_manufacturer_part.html:66 +#: company/templates/company/detail_supplier_part.html:66 #: part/templates/part/bom.html:159 part/templates/part/category.html:118 #: templates/js/stock.js:1080 msgid "New Part" msgstr "" -#: company/templates/company/detail_part.html:67 +#: company/templates/company/detail_manufacturer_part.html:67 +#: company/templates/company/detail_supplier_part.html:67 msgid "Create new Part" msgstr "" -#: company/templates/company/detail_part.html:72 company/views.py:62 -#: order/templates/order/purchase_orders.html:183 -#: part/templates/part/supplier.html:50 -msgid "New Supplier" -msgstr "" - -#: company/templates/company/detail_part.html:73 company/views.py:279 -#: order/templates/order/purchase_orders.html:184 -msgid "Create new Supplier" -msgstr "" - -#: company/templates/company/detail_part.html:78 company/views.py:69 +#: company/templates/company/detail_manufacturer_part.html:72 +#: company/views.py:71 part/templates/part/manufacturer.html:52 #: part/templates/part/supplier.html:56 msgid "New Manufacturer" msgstr "" -#: company/templates/company/detail_part.html:79 company/views.py:282 +#: company/templates/company/detail_manufacturer_part.html:73 +#: company/views.py:284 msgid "Create new Manufacturer" msgstr "" @@ -2017,67 +2053,168 @@ msgstr "" msgid "Export" msgstr "" +#: company/templates/company/detail_supplier_part.html:11 +#: company/templates/company/manufacturer_part_navbar.html:11 +#: company/templates/company/manufacturer_part_suppliers.html:10 +#: templates/InvenTree/search.html:164 +msgid "Supplier Parts" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:21 +#: order/templates/order/order_wizard/select_parts.html:42 +#: order/templates/order/purchase_order_detail.html:75 +msgid "Create new supplier part" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:22 +#: company/templates/company/manufacturer_part_suppliers.html:17 +#: order/templates/order/purchase_order_detail.html:74 +#: part/templates/part/supplier.html:17 templates/js/stock.js:1086 +msgid "New Supplier Part" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:72 +#: company/templates/company/manufacturer_part_suppliers.html:47 +#: company/views.py:64 order/templates/order/purchase_orders.html:183 +#: part/templates/part/supplier.html:50 +msgid "New Supplier" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:73 company/views.py:281 +#: order/templates/order/purchase_orders.html:184 +msgid "Create new Supplier" +msgstr "" + #: company/templates/company/index.html:7 msgid "Supplier List" msgstr "" -#: company/templates/company/navbar.html:20 -msgid "Supplied Parts" +#: company/templates/company/manufacturer_part_base.html:36 +#: company/templates/company/supplier_part_base.html:35 +#: company/templates/company/supplier_part_orders.html:17 +#: part/templates/part/orders.html:17 part/templates/part/part_base.html:65 +msgid "Order part" msgstr "" -#: company/templates/company/navbar.html:23 -#: order/templates/order/receive_parts.html:14 part/api.py:40 -#: part/models.py:322 part/templates/part/cat_link.html:7 -#: part/templates/part/category.html:95 -#: part/templates/part/category_navbar.html:11 -#: part/templates/part/category_navbar.html:14 -#: part/templates/part/category_partlist.html:10 -#: templates/InvenTree/index.html:96 templates/InvenTree/search.html:113 -#: templates/InvenTree/settings/tabs.html:25 templates/navbar.html:23 -#: templates/stats.html:59 templates/stats.html:68 users/models.py:38 -msgid "Parts" +#: company/templates/company/manufacturer_part_base.html:41 +msgid "Edit manufacturer part" msgstr "" -#: company/templates/company/navbar.html:27 part/templates/part/navbar.html:33 -#: stock/templates/stock/location.html:100 -#: stock/templates/stock/location.html:115 templates/InvenTree/search.html:182 -#: templates/stats.html:72 templates/stats.html:81 users/models.py:40 -msgid "Stock Items" +#: company/templates/company/manufacturer_part_base.html:45 +msgid "Delete manufacturer part" msgstr "" -#: company/templates/company/navbar.html:30 -#: company/templates/company/part_navbar.html:14 +#: company/templates/company/manufacturer_part_base.html:57 +#: company/templates/company/manufacturer_part_detail.html:10 +msgid "Manufacturer Part Details" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:62 +#: company/templates/company/manufacturer_part_detail.html:18 +#: company/templates/company/supplier_part_base.html:60 +#: company/templates/company/supplier_part_detail.html:18 +msgid "Internal Part" +msgstr "" + +#: company/templates/company/manufacturer_part_delete.html:6 +msgid "Are you sure you want to delete the following Manufacturer Parts?" +msgstr "" + +#: company/templates/company/manufacturer_part_delete.html:36 +#, python-format +msgid "" +"There are %(count)s suppliers defined for this manufacturer part. If you " +"delete it, the following supplier parts will also be deleted:" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:14 +#: company/views.py:63 part/templates/part/navbar.html:78 +#: part/templates/part/navbar.html:81 templates/InvenTree/search.html:316 +#: templates/navbar.html:35 +msgid "Suppliers" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:19 +msgid "Manufacturer Part Stock" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:22 +#: company/templates/company/navbar.html:41 +#: company/templates/company/supplier_part_navbar.html:15 #: part/templates/part/navbar.html:36 stock/api.py:51 #: stock/templates/stock/loc_link.html:7 stock/templates/stock/location.html:29 #: stock/templates/stock/stock_app_base.html:9 -#: templates/InvenTree/index.html:127 templates/InvenTree/search.html:180 -#: templates/InvenTree/search.html:216 +#: templates/InvenTree/index.html:127 templates/InvenTree/search.html:196 +#: templates/InvenTree/search.html:232 #: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:172 #: templates/js/part.js:397 templates/js/stock.js:563 templates/navbar.html:26 msgid "Stock" msgstr "" -#: company/templates/company/navbar.html:36 -#: company/templates/company/navbar.html:45 -#: company/templates/company/navbar.html:48 +#: company/templates/company/manufacturer_part_navbar.html:26 +msgid "Manufacturer Part Orders" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:29 +#: company/templates/company/supplier_part_navbar.html:22 +msgid "Orders" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:22 +#: part/templates/part/supplier.html:22 +msgid "Delete supplier parts" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:22 +#: part/templates/part/manufacturer.html:24 part/templates/part/params.html:44 +#: part/templates/part/related.html:44 part/templates/part/supplier.html:22 +#: stock/views.py:1002 users/models.py:183 +msgid "Delete" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:48 +#: part/templates/part/supplier.html:51 +msgid "Create new supplier" +msgstr "" + +#: company/templates/company/navbar.html:20 +#: company/templates/company/navbar.html:23 +msgid "Manufactured Parts" +msgstr "" + +#: company/templates/company/navbar.html:29 +#: company/templates/company/navbar.html:32 +msgid "Supplied Parts" +msgstr "" + +#: company/templates/company/navbar.html:38 part/templates/part/navbar.html:33 +#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:115 templates/InvenTree/search.html:198 +#: templates/stats.html:72 templates/stats.html:81 users/models.py:40 +msgid "Stock Items" +msgstr "" + +#: company/templates/company/navbar.html:47 +#: company/templates/company/navbar.html:56 +#: company/templates/company/navbar.html:59 #: company/templates/company/sales_orders.html:11 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:13 -#: part/templates/part/navbar.html:92 part/templates/part/navbar.html:95 +#: part/templates/part/navbar.html:98 part/templates/part/navbar.html:101 #: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:227 -#: templates/InvenTree/search.html:330 +#: templates/InvenTree/search.html:345 #: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46 #: users/models.py:43 msgid "Sales Orders" msgstr "" -#: company/templates/company/navbar.html:39 +#: company/templates/company/navbar.html:50 #: company/templates/company/purchase_orders.html:10 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:13 -#: part/templates/part/navbar.html:78 part/templates/part/navbar.html:81 +#: part/templates/part/navbar.html:84 part/templates/part/navbar.html:87 #: part/templates/part/orders.html:10 templates/InvenTree/index.html:204 -#: templates/InvenTree/search.html:300 +#: templates/InvenTree/search.html:325 #: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37 #: users/models.py:42 msgid "Purchase Orders" @@ -2087,32 +2224,6 @@ msgstr "" msgid "Company Notes" msgstr "" -#: company/templates/company/part_navbar.html:11 -#: company/templates/company/supplier_part_stock.html:10 -msgid "Supplier Part Stock" -msgstr "" - -#: company/templates/company/part_navbar.html:18 -#: company/templates/company/supplier_part_orders.html:10 -msgid "Supplier Part Orders" -msgstr "" - -#: company/templates/company/part_navbar.html:21 -msgid "Orders" -msgstr "" - -#: company/templates/company/part_navbar.html:25 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/templates/company/part_navbar.html:28 -msgid "Pricing" -msgstr "" - -#: company/templates/company/partdelete.html:5 -msgid "Are you sure you want to delete the following Supplier Parts?" -msgstr "" - #: company/templates/company/purchase_orders.html:18 #: order/templates/order/purchase_orders.html:20 msgid "Create new purchase order" @@ -2134,17 +2245,11 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/supplier_part_base.html:6 -#: company/templates/company/supplier_part_base.html:19 stock/models.py:380 -#: stock/templates/stock/item_base.html:342 templates/js/company.js:180 +#: company/templates/company/supplier_part_base.html:19 stock/models.py:382 +#: stock/templates/stock/item_base.html:358 templates/js/company.js:279 msgid "Supplier Part" msgstr "" -#: company/templates/company/supplier_part_base.html:35 -#: company/templates/company/supplier_part_orders.html:17 -#: part/templates/part/orders.html:17 part/templates/part/part_base.html:64 -msgid "Order part" -msgstr "" - #: company/templates/company/supplier_part_base.html:39 msgid "Edit supplier part" msgstr "" @@ -2158,9 +2263,26 @@ msgstr "" msgid "Supplier Part Details" msgstr "" -#: company/templates/company/supplier_part_base.html:60 -#: company/templates/company/supplier_part_detail.html:18 -msgid "Internal Part" +#: company/templates/company/supplier_part_delete.html:5 +msgid "Are you sure you want to delete the following Supplier Parts?" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part_stock.html:10 +msgid "Supplier Part Stock" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part_orders.html:10 +msgid "Supplier Part Orders" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:26 +msgid "Supplier Part Pricing" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:29 +msgid "Pricing" msgstr "" #: company/templates/company/supplier_part_orders.html:18 @@ -2172,8 +2294,8 @@ msgstr "" msgid "Pricing Information" msgstr "" -#: company/templates/company/supplier_part_pricing.html:19 company/views.py:569 -#: part/templates/part/sale_prices.html:17 part/views.py:2618 +#: company/templates/company/supplier_part_pricing.html:19 company/views.py:794 +#: part/templates/part/sale_prices.html:17 part/views.py:2624 msgid "Add Price Break" msgstr "" @@ -2192,99 +2314,106 @@ msgstr "" msgid "Delete price break" msgstr "" -#: company/views.py:61 part/templates/part/navbar.html:72 -#: part/templates/part/navbar.html:75 templates/InvenTree/search.html:291 -#: templates/navbar.html:35 -msgid "Suppliers" -msgstr "" - -#: company/views.py:68 templates/InvenTree/search.html:308 +#: company/views.py:70 part/templates/part/navbar.html:72 +#: part/templates/part/navbar.html:75 templates/InvenTree/search.html:306 #: templates/navbar.html:36 msgid "Manufacturers" msgstr "" -#: company/views.py:75 templates/InvenTree/search.html:321 +#: company/views.py:77 templates/InvenTree/search.html:336 #: templates/navbar.html:45 msgid "Customers" msgstr "" -#: company/views.py:76 order/templates/order/sales_orders.html:185 +#: company/views.py:78 order/templates/order/sales_orders.html:185 msgid "New Customer" msgstr "" -#: company/views.py:84 +#: company/views.py:86 msgid "Companies" msgstr "" -#: company/views.py:85 +#: company/views.py:87 msgid "New Company" msgstr "" -#: company/views.py:167 part/views.py:848 +#: company/views.py:169 part/views.py:848 msgid "Download Image" msgstr "" -#: company/views.py:196 part/views.py:880 +#: company/views.py:198 part/views.py:880 msgid "Image size exceeds maximum allowable size for download" msgstr "" -#: company/views.py:212 part/views.py:896 +#: company/views.py:214 part/views.py:896 msgid "Supplied URL is not a valid image file" msgstr "" -#: company/views.py:241 +#: company/views.py:243 msgid "Update Company Image" msgstr "" -#: company/views.py:247 +#: company/views.py:249 msgid "Updated company image" msgstr "" -#: company/views.py:257 +#: company/views.py:259 msgid "Edit Company" msgstr "" -#: company/views.py:262 +#: company/views.py:264 msgid "Edited company information" msgstr "" -#: company/views.py:285 order/templates/order/sales_orders.html:186 +#: company/views.py:287 order/templates/order/sales_orders.html:186 msgid "Create new Customer" msgstr "" -#: company/views.py:287 +#: company/views.py:289 msgid "Create new Company" msgstr "" -#: company/views.py:314 +#: company/views.py:316 msgid "Created new company" msgstr "" -#: company/views.py:330 +#: company/views.py:332 msgid "Company was deleted" msgstr "" -#: company/views.py:355 +#: company/views.py:357 +msgid "Edit Manufacturer Part" +msgstr "" + +#: company/views.py:366 +msgid "Create New Manufacturer Part" +msgstr "" + +#: company/views.py:440 +msgid "Delete Manufacturer Part" +msgstr "" + +#: company/views.py:528 msgid "Edit Supplier Part" msgstr "" -#: company/views.py:378 templates/js/stock.js:1087 +#: company/views.py:578 templates/js/stock.js:1087 msgid "Create new Supplier Part" msgstr "" -#: company/views.py:497 +#: company/views.py:722 msgid "Delete Supplier Part" msgstr "" -#: company/views.py:574 part/views.py:2622 +#: company/views.py:799 part/views.py:2628 msgid "Added new price break" msgstr "" -#: company/views.py:630 part/views.py:2666 +#: company/views.py:855 part/views.py:2672 msgid "Edit Price Break" msgstr "" -#: company/views.py:645 part/views.py:2680 +#: company/views.py:870 part/views.py:2686 msgid "Delete Price Break" msgstr "" @@ -2332,11 +2461,11 @@ msgstr "" msgid "Label height, specified in mm" msgstr "" -#: label/models.py:222 label/models.py:273 +#: label/models.py:222 label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "" -#: label/models.py:223 label/models.py:274 report/models.py:294 +#: label/models.py:223 label/models.py:276 report/models.py:294 #: report/models.py:415 report/models.py:449 msgid "Filters" msgstr "" @@ -2454,7 +2583,7 @@ msgid "Date order was completed" msgstr "" #: order/models.py:243 order/models.py:342 part/views.py:1586 -#: stock/models.py:270 stock/models.py:950 +#: stock/models.py:270 stock/models.py:952 msgid "Quantity must be greater than zero" msgstr "" @@ -2515,7 +2644,7 @@ msgstr "" #: order/models.py:624 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:24 #: report/templates/report/inventree_po_report.html:77 -#: stock/templates/stock/item_base.html:309 templates/js/order.js:148 +#: stock/templates/stock/item_base.html:313 templates/js/order.js:148 msgid "Purchase Order" msgstr "" @@ -2524,7 +2653,7 @@ msgid "Supplier part" msgstr "" #: order/models.py:641 order/templates/order/order_base.html:131 -#: order/templates/order/purchase_order_detail.html:207 +#: order/templates/order/purchase_order_detail.html:214 #: order/templates/order/receive_parts.html:22 #: order/templates/order/sales_order_base.html:131 msgid "Received" @@ -2534,8 +2663,8 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:648 stock/models.py:506 -#: stock/templates/stock/item_base.html:316 +#: order/models.py:648 stock/models.py:508 +#: stock/templates/stock/item_base.html:320 msgid "Purchase Price" msgstr "" @@ -2632,6 +2761,14 @@ msgstr "" msgid "Mark this order as complete?" msgstr "" +#: order/templates/order/order_complete.html:10 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: order/templates/order/order_complete.html:11 +msgid "Marking this order as complete will remove these line items." +msgstr "" + #: order/templates/order/order_issue.html:7 msgid "" "After placing this purchase order, line items will no longer be editable." @@ -2658,7 +2795,8 @@ msgid "Select Supplier" msgstr "" #: order/templates/order/order_wizard/select_parts.html:57 -msgid "Select a supplier for" +#, python-format +msgid "Select a supplier for %(name)s" msgstr "" #: order/templates/order/order_wizard/select_parts.html:69 @@ -2684,11 +2822,13 @@ msgid "Select Purchase Order" msgstr "" #: order/templates/order/order_wizard/select_pos.html:45 -msgid "Create new purchase order for {{ supplier.name }}" +#, python-format +msgid "Create new purchase order for %(name)s" msgstr "" #: order/templates/order/order_wizard/select_pos.html:68 -msgid "Select a purchase order for" +#, python-format +msgid "Select a purchase order for %(name)s" msgstr "" #: order/templates/order/po_attachments.html:12 @@ -2733,20 +2873,20 @@ msgstr "" msgid "No line items found" msgstr "" -#: order/templates/order/purchase_order_detail.html:198 +#: order/templates/order/purchase_order_detail.html:205 msgid "Unit Price" msgstr "" -#: order/templates/order/purchase_order_detail.html:239 +#: order/templates/order/purchase_order_detail.html:246 #: order/templates/order/sales_order_detail.html:294 msgid "Edit line item" msgstr "" -#: order/templates/order/purchase_order_detail.html:240 +#: order/templates/order/purchase_order_detail.html:247 msgid "Delete line item" msgstr "" -#: order/templates/order/purchase_order_detail.html:245 +#: order/templates/order/purchase_order_detail.html:252 msgid "Receive line item" msgstr "" @@ -2756,7 +2896,20 @@ msgid "Print Order Reports" msgstr "" #: order/templates/order/receive_parts.html:8 -msgid "Receive outstanding parts for" +#, python-format +msgid "Receive outstanding parts for %(order)s - %(desc)s" +msgstr "" + +#: order/templates/order/receive_parts.html:14 part/api.py:40 +#: part/models.py:322 part/templates/part/cat_link.html:7 +#: part/templates/part/category.html:95 +#: part/templates/part/category_navbar.html:11 +#: part/templates/part/category_navbar.html:14 +#: part/templates/part/category_partlist.html:10 +#: templates/InvenTree/index.html:96 templates/InvenTree/search.html:114 +#: templates/InvenTree/settings/tabs.html:25 templates/navbar.html:23 +#: templates/stats.html:59 templates/stats.html:68 users/models.py:38 +msgid "Parts" msgstr "" #: order/templates/order/receive_parts.html:15 @@ -2768,7 +2921,7 @@ msgid "Order Code" msgstr "" #: order/templates/order/receive_parts.html:21 -#: part/templates/part/part_base.html:128 templates/js/part.js:413 +#: part/templates/part/part_base.html:129 templates/js/part.js:413 msgid "On Order" msgstr "" @@ -2815,12 +2968,12 @@ msgstr "" #: order/templates/order/sales_order_detail.html:75 #: order/templates/order/sales_order_detail.html:157 #: report/templates/report/inventree_test_report_base.html:75 -#: stock/models.py:418 stock/templates/stock/item_base.html:234 +#: stock/models.py:420 stock/templates/stock/item_base.html:238 #: templates/js/build.js:418 msgid "Serial Number" msgstr "" -#: order/templates/order/sales_order_detail.html:92 templates/js/bom.js:338 +#: order/templates/order/sales_order_detail.html:92 templates/js/bom.js:342 #: templates/js/build.js:571 templates/js/build.js:984 msgid "Actions" msgstr "" @@ -3079,20 +3232,20 @@ msgstr "" msgid "Default Location" msgstr "" -#: part/bom.py:139 part/templates/part/part_base.html:116 +#: part/bom.py:139 part/templates/part/part_base.html:117 msgid "Available Stock" msgstr "" -#: part/bom.py:278 +#: part/bom.py:379 #, python-brace-format msgid "Unsupported file format: {f}" msgstr "" -#: part/bom.py:283 +#: part/bom.py:384 msgid "Error reading BOM file (invalid data)" msgstr "" -#: part/bom.py:285 +#: part/bom.py:386 msgid "Error reading BOM file (incorrect row size)" msgstr "" @@ -3137,94 +3290,102 @@ msgid "Include part stock data in exported BOM" msgstr "" #: part/forms.py:99 -msgid "Include Supplier Data" +msgid "Include Manufacturer Data" msgstr "" #: part/forms.py:99 +msgid "Include part manufacturer data in exported BOM" +msgstr "" + +#: part/forms.py:101 +msgid "Include Supplier Data" +msgstr "" + +#: part/forms.py:101 msgid "Include part supplier data in exported BOM" msgstr "" -#: part/forms.py:120 part/models.py:2057 +#: part/forms.py:122 part/models.py:2057 msgid "Parent Part" msgstr "" -#: part/forms.py:121 part/templates/part/bom_duplicate.html:7 +#: part/forms.py:123 part/templates/part/bom_duplicate.html:7 msgid "Select parent part to copy BOM from" msgstr "" -#: part/forms.py:127 +#: part/forms.py:129 msgid "Clear existing BOM items" msgstr "" -#: part/forms.py:133 +#: part/forms.py:135 msgid "Confirm BOM duplication" msgstr "" -#: part/forms.py:151 +#: part/forms.py:153 msgid "validate" msgstr "" -#: part/forms.py:151 +#: part/forms.py:153 msgid "Confirm that the BOM is correct" msgstr "" -#: part/forms.py:163 +#: part/forms.py:165 msgid "BOM file" msgstr "" -#: part/forms.py:163 +#: part/forms.py:165 msgid "Select BOM file to upload" msgstr "" -#: part/forms.py:182 +#: part/forms.py:184 msgid "Related Part" msgstr "" -#: part/forms.py:201 +#: part/forms.py:203 msgid "Select part category" msgstr "" -#: part/forms.py:218 +#: part/forms.py:220 msgid "Duplicate all BOM data for this part" msgstr "" -#: part/forms.py:219 +#: part/forms.py:221 msgid "Copy BOM" msgstr "" -#: part/forms.py:224 +#: part/forms.py:226 msgid "Duplicate all parameter data for this part" msgstr "" -#: part/forms.py:225 +#: part/forms.py:227 msgid "Copy Parameters" msgstr "" -#: part/forms.py:230 +#: part/forms.py:232 msgid "Confirm part creation" msgstr "" -#: part/forms.py:235 +#: part/forms.py:237 msgid "Include category parameter templates" msgstr "" -#: part/forms.py:240 +#: part/forms.py:242 msgid "Include parent categories parameter templates" msgstr "" -#: part/forms.py:320 +#: part/forms.py:322 msgid "Add parameter template to same level categories" msgstr "" -#: part/forms.py:324 +#: part/forms.py:326 msgid "Add parameter template to all categories" msgstr "" -#: part/forms.py:342 part/models.py:2151 +#: part/forms.py:344 part/models.py:2151 msgid "Sub part" msgstr "" -#: part/forms.py:370 +#: part/forms.py:372 msgid "Input quantity for price calculation" msgstr "" @@ -3247,7 +3408,7 @@ msgstr "" #: part/models.py:83 part/templates/part/category.html:19 #: part/templates/part/category.html:90 part/templates/part/category.html:141 -#: templates/InvenTree/search.html:126 templates/stats.html:63 +#: templates/InvenTree/search.html:127 templates/stats.html:63 #: users/models.py:37 msgid "Part Categories" msgstr "" @@ -3320,7 +3481,7 @@ msgid "Part category" msgstr "" #: part/models.py:730 part/templates/part/detail.html:28 -#: part/templates/part/part_base.html:93 templates/js/part.js:160 +#: part/templates/part/part_base.html:94 templates/js/part.js:160 msgid "IPN" msgstr "" @@ -3558,7 +3719,7 @@ msgstr "" msgid "BOM line checksum" msgstr "" -#: part/models.py:2176 templates/js/bom.js:275 templates/js/bom.js:282 +#: part/models.py:2176 templates/js/bom.js:279 templates/js/bom.js:286 #: templates/js/table_filters.js:50 msgid "Inherited" msgstr "" @@ -3663,7 +3824,7 @@ msgstr "" msgid "Validate Bill of Materials" msgstr "" -#: part/templates/part/bom.html:61 part/views.py:1883 +#: part/templates/part/bom.html:61 part/views.py:1887 msgid "Export Bill of Materials" msgstr "" @@ -3800,7 +3961,7 @@ msgstr "" msgid "All parts" msgstr "" -#: part/templates/part/category.html:25 part/views.py:2264 +#: part/templates/part/category.html:25 part/views.py:2270 msgid "Create new part category" msgstr "" @@ -3874,12 +4035,8 @@ msgid "Are you sure you want to delete category" msgstr "" #: part/templates/part/category_delete.html:8 -#: part/templates/part/category_delete.html:25 -msgid "This category contains" -msgstr "" - -#: part/templates/part/category_delete.html:8 -msgid "child categories" +#, python-format +msgid "This category contains %(count)s child categories" msgstr "" #: part/templates/part/category_delete.html:9 @@ -3896,12 +4053,15 @@ msgid "top level Parts category" msgstr "" #: part/templates/part/category_delete.html:25 -msgid "parts" +#, python-format +msgid "This category contains %(count)s parts" msgstr "" #: part/templates/part/category_delete.html:27 +#, python-format msgid "" -"If this category is deleted, these parts will be moved to the parent category" +"If this category is deleted, these parts will be moved to the parent " +"category %(path)s" msgstr "" #: part/templates/part/category_delete.html:29 @@ -3926,7 +4086,8 @@ msgid "Duplicate Part" msgstr "" #: part/templates/part/copy_part.html:10 -msgid "Make a copy of part" +#, python-format +msgid "Make a copy of part '%(full_name)s'." msgstr "" #: part/templates/part/copy_part.html:14 @@ -3939,8 +4100,9 @@ msgstr "" msgid "The new part may be a duplicate of these existing parts" msgstr "" -#: part/templates/part/create_part.html:16 -msgid "match" +#: part/templates/part/create_part.html:17 +#, python-format +msgid "%(full_name)s - %(desc)s (%(match_per)s%% match)" msgstr "" #: part/templates/part/detail.html:11 part/templates/part/navbar.html:11 @@ -4023,6 +4185,19 @@ msgstr "" msgid "Part is not active" msgstr "" +#: part/templates/part/manufacturer.html:11 +msgid "Part Manufacturers" +msgstr "" + +#: part/templates/part/manufacturer.html:24 +msgid "Delete manufacturer parts" +msgstr "" + +#: part/templates/part/manufacturer.html:53 +#: part/templates/part/supplier.html:57 +msgid "Create new manufacturer" +msgstr "" + #: part/templates/part/navbar.html:26 part/templates/part/variants.html:11 msgid "Part Variants" msgstr "" @@ -4043,28 +4218,28 @@ msgstr "" msgid "Used In" msgstr "" -#: part/templates/part/navbar.html:86 +#: part/templates/part/navbar.html:92 msgid "Sales Price Information" msgstr "" -#: part/templates/part/navbar.html:89 +#: part/templates/part/navbar.html:95 msgid "Sale Price" msgstr "" -#: part/templates/part/navbar.html:100 part/templates/part/part_tests.html:10 +#: part/templates/part/navbar.html:106 part/templates/part/part_tests.html:10 msgid "Part Test Templates" msgstr "" -#: part/templates/part/navbar.html:103 stock/templates/stock/item_base.html:382 +#: part/templates/part/navbar.html:109 stock/templates/stock/item_base.html:398 msgid "Tests" msgstr "" -#: part/templates/part/navbar.html:107 part/templates/part/navbar.html:110 +#: part/templates/part/navbar.html:113 part/templates/part/navbar.html:116 #: part/templates/part/related.html:10 msgid "Related Parts" msgstr "" -#: part/templates/part/navbar.html:119 part/templates/part/notes.html:12 +#: part/templates/part/navbar.html:125 part/templates/part/notes.html:12 msgid "Part Notes" msgstr "" @@ -4080,7 +4255,7 @@ msgstr "" #: part/templates/part/params.html:28 #: report/templates/report/inventree_test_report_base.html:90 -#: stock/models.py:1652 templates/InvenTree/settings/header.html:8 +#: stock/models.py:1654 templates/InvenTree/settings/header.html:8 #: templates/js/stock.js:124 msgid "Value" msgstr "" @@ -4089,11 +4264,6 @@ msgstr "" msgid "Edit" msgstr "" -#: part/templates/part/params.html:44 part/templates/part/related.html:44 -#: part/templates/part/supplier.html:22 stock/views.py:1002 users/models.py:182 -msgid "Delete" -msgstr "" - #: part/templates/part/params.html:68 msgid "New Template" msgstr "" @@ -4106,124 +4276,126 @@ msgstr "" msgid "Part List" msgstr "" -#: part/templates/part/part_base.html:17 -msgid "This part is a variant of" +#: part/templates/part/part_base.html:18 +#, python-format +msgid "This part is a variant of %(link)s" msgstr "" -#: part/templates/part/part_base.html:32 templates/js/company.js:155 -#: templates/js/part.js:75 templates/js/part.js:152 +#: part/templates/part/part_base.html:33 templates/js/company.js:156 +#: templates/js/company.js:254 templates/js/part.js:75 templates/js/part.js:152 msgid "Inactive" msgstr "" -#: part/templates/part/part_base.html:39 +#: part/templates/part/part_base.html:40 msgid "Star this part" msgstr "" -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:127 +#: part/templates/part/part_base.html:47 +#: stock/templates/stock/item_base.html:131 #: stock/templates/stock/location.html:44 msgid "Barcode actions" msgstr "" -#: part/templates/part/part_base.html:48 -#: stock/templates/stock/item_base.html:129 +#: part/templates/part/part_base.html:49 +#: stock/templates/stock/item_base.html:133 #: stock/templates/stock/location.html:46 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" -#: part/templates/part/part_base.html:49 -#: stock/templates/stock/item_base.html:145 +#: part/templates/part/part_base.html:50 +#: stock/templates/stock/item_base.html:149 #: stock/templates/stock/location.html:47 msgid "Print Label" msgstr "" -#: part/templates/part/part_base.html:54 +#: part/templates/part/part_base.html:55 msgid "Show pricing information" msgstr "" -#: part/templates/part/part_base.html:58 +#: part/templates/part/part_base.html:59 msgid "Count part stock" msgstr "" -#: part/templates/part/part_base.html:73 +#: part/templates/part/part_base.html:74 msgid "Part actions" msgstr "" -#: part/templates/part/part_base.html:76 +#: part/templates/part/part_base.html:77 msgid "Duplicate part" msgstr "" -#: part/templates/part/part_base.html:79 +#: part/templates/part/part_base.html:80 msgid "Edit part" msgstr "" -#: part/templates/part/part_base.html:82 +#: part/templates/part/part_base.html:83 msgid "Delete part" msgstr "" -#: part/templates/part/part_base.html:122 templates/js/table_filters.js:134 +#: part/templates/part/part_base.html:123 templates/js/table_filters.js:134 msgid "In Stock" msgstr "" -#: part/templates/part/part_base.html:135 templates/InvenTree/index.html:130 +#: part/templates/part/part_base.html:136 templates/InvenTree/index.html:130 msgid "Required for Build Orders" msgstr "" -#: part/templates/part/part_base.html:142 +#: part/templates/part/part_base.html:143 msgid "Required for Sales Orders" msgstr "" -#: part/templates/part/part_base.html:149 +#: part/templates/part/part_base.html:150 msgid "Allocated to Orders" msgstr "" -#: part/templates/part/part_base.html:164 templates/js/bom.js:296 +#: part/templates/part/part_base.html:165 templates/js/bom.js:300 msgid "Can Build" msgstr "" -#: part/templates/part/part_base.html:170 templates/js/part.js:417 +#: part/templates/part/part_base.html:171 templates/js/part.js:417 msgid "Building" msgstr "" -#: part/templates/part/part_base.html:249 +#: part/templates/part/part_base.html:250 msgid "Calculate" msgstr "" #: part/templates/part/part_pricing.html:8 -msgid "Pricing information for:" +#, python-format +msgid "Pricing information for:
                        %(part)s." msgstr "" -#: part/templates/part/part_pricing.html:24 +#: part/templates/part/part_pricing.html:23 msgid "Supplier Pricing" msgstr "" -#: part/templates/part/part_pricing.html:28 -#: part/templates/part/part_pricing.html:54 +#: part/templates/part/part_pricing.html:27 +#: part/templates/part/part_pricing.html:53 msgid "Unit Cost" msgstr "" -#: part/templates/part/part_pricing.html:34 -#: part/templates/part/part_pricing.html:60 +#: part/templates/part/part_pricing.html:33 +#: part/templates/part/part_pricing.html:59 msgid "Total Cost" msgstr "" -#: part/templates/part/part_pricing.html:42 +#: part/templates/part/part_pricing.html:41 msgid "No supplier pricing available" msgstr "" -#: part/templates/part/part_pricing.html:50 +#: part/templates/part/part_pricing.html:49 msgid "BOM Pricing" msgstr "" -#: part/templates/part/part_pricing.html:68 +#: part/templates/part/part_pricing.html:67 msgid "Note: BOM pricing is incomplete for this part" msgstr "" -#: part/templates/part/part_pricing.html:75 +#: part/templates/part/part_pricing.html:74 msgid "No BOM pricing available" msgstr "" -#: part/templates/part/part_pricing.html:85 +#: part/templates/part/part_pricing.html:84 msgid "No pricing information is available for this part." msgstr "" @@ -4235,6 +4407,46 @@ msgstr "" msgid "Select from existing images" msgstr "" +#: part/templates/part/partial_delete.html:7 +#, python-format +msgid "Are you sure you want to delete part '%(full_name)s'?" +msgstr "" + +#: part/templates/part/partial_delete.html:12 +#, python-format +msgid "" +"This part is used in BOMs for %(count)s other parts. If you delete this " +"part, the BOMs for the following parts will be updated" +msgstr "" + +#: part/templates/part/partial_delete.html:22 +#, python-format +msgid "" +"There are %(count)s stock entries defined for this part. If you delete this " +"part, the following stock entries will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:33 +#, python-format +msgid "" +"There are %(count)s manufacturers defined for this part. If you delete this " +"part, the following manufacturer parts will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:44 +#, python-format +msgid "" +"There are %(count)s suppliers defined for this part. If you delete this " +"part, the following supplier parts will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:55 +#, python-format +msgid "" +"There are %(count)s unique parts tracked for '%(full_name)s'. Deleting this " +"part will permanently remove this tracking information." +msgstr "" + #: part/templates/part/related.html:18 msgid "Add Related" msgstr "" @@ -4260,7 +4472,8 @@ msgid "Part Stock" msgstr "" #: part/templates/part/stock.html:16 -msgid "Showing stock for all variants of" +#, python-format +msgid "Showing stock for all variants of %(full_name)s" msgstr "" #: part/templates/part/stock_count.html:7 templates/js/bom.js:239 @@ -4280,18 +4493,6 @@ msgstr "" msgid "Part Suppliers" msgstr "" -#: part/templates/part/supplier.html:22 -msgid "Delete supplier parts" -msgstr "" - -#: part/templates/part/supplier.html:51 -msgid "Create new supplier" -msgstr "" - -#: part/templates/part/supplier.html:57 -msgid "Create new manufacturer" -msgstr "" - #: part/templates/part/track.html:10 msgid "Part Tracking" msgstr "" @@ -4305,7 +4506,8 @@ msgid "Create new part variant" msgstr "" #: part/templates/part/variant_part.html:10 -msgid "Create a new variant of template" +#, python-format +msgid "Create a new variant of template '%(full_name)s'." msgstr "" #: part/templates/part/variants.html:19 @@ -4453,75 +4655,75 @@ msgstr "" msgid "Specify quantity" msgstr "" -#: part/views.py:1933 +#: part/views.py:1939 msgid "Confirm Part Deletion" msgstr "" -#: part/views.py:1940 +#: part/views.py:1946 msgid "Part was deleted" msgstr "" -#: part/views.py:1949 +#: part/views.py:1955 msgid "Part Pricing" msgstr "" -#: part/views.py:2063 +#: part/views.py:2069 msgid "Create Part Parameter Template" msgstr "" -#: part/views.py:2073 +#: part/views.py:2079 msgid "Edit Part Parameter Template" msgstr "" -#: part/views.py:2080 +#: part/views.py:2086 msgid "Delete Part Parameter Template" msgstr "" -#: part/views.py:2088 +#: part/views.py:2094 msgid "Create Part Parameter" msgstr "" -#: part/views.py:2138 +#: part/views.py:2144 msgid "Edit Part Parameter" msgstr "" -#: part/views.py:2152 +#: part/views.py:2158 msgid "Delete Part Parameter" msgstr "" -#: part/views.py:2212 +#: part/views.py:2218 msgid "Edit Part Category" msgstr "" -#: part/views.py:2250 +#: part/views.py:2256 msgid "Delete Part Category" msgstr "" -#: part/views.py:2256 +#: part/views.py:2262 msgid "Part category was deleted" msgstr "" -#: part/views.py:2308 +#: part/views.py:2314 msgid "Create Category Parameter Template" msgstr "" -#: part/views.py:2409 +#: part/views.py:2415 msgid "Edit Category Parameter Template" msgstr "" -#: part/views.py:2465 +#: part/views.py:2471 msgid "Delete Category Parameter Template" msgstr "" -#: part/views.py:2484 +#: part/views.py:2490 msgid "Create BOM Item" msgstr "" -#: part/views.py:2554 +#: part/views.py:2560 msgid "Edit BOM item" msgstr "" -#: part/views.py:2610 +#: part/views.py:2616 msgid "Confim BOM item deletion" msgstr "" @@ -4623,12 +4825,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:1640 +#: stock/models.py:1642 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:89 -#: stock/models.py:1646 +#: stock/models.py:1648 msgid "Result" msgstr "" @@ -4655,8 +4857,8 @@ msgstr "" msgid "Moved {n} parts to {loc}" msgstr "" -#: stock/forms.py:114 stock/forms.py:406 stock/models.py:473 -#: stock/templates/stock/item_base.html:349 templates/js/stock.js:656 +#: stock/forms.py:114 stock/forms.py:406 stock/models.py:475 +#: stock/templates/stock/item_base.html:365 templates/js/stock.js:656 msgid "Expiry Date" msgstr "" @@ -4746,11 +4948,11 @@ msgstr "" msgid "Set the destination as the default location for selected parts" msgstr "" -#: stock/models.py:54 stock/models.py:511 +#: stock/models.py:54 stock/models.py:513 msgid "Owner" msgstr "" -#: stock/models.py:55 stock/models.py:512 +#: stock/models.py:55 stock/models.py:514 msgid "Select Owner" msgstr "" @@ -4787,203 +4989,203 @@ msgstr "" msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:363 +#: stock/models.py:365 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:372 +#: stock/models.py:374 msgid "Base part" msgstr "" -#: stock/models.py:381 +#: stock/models.py:383 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:386 stock/templates/stock/stock_app_base.html:7 +#: stock/models.py:388 stock/templates/stock/stock_app_base.html:7 msgid "Stock Location" msgstr "" -#: stock/models.py:389 +#: stock/models.py:391 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:396 +#: stock/models.py:398 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:401 stock/templates/stock/item_base.html:255 +#: stock/models.py:403 stock/templates/stock/item_base.html:259 msgid "Installed In" msgstr "" -#: stock/models.py:404 +#: stock/models.py:406 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:420 +#: stock/models.py:422 msgid "Serial number for this item" msgstr "" -#: stock/models.py:432 +#: stock/models.py:434 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:436 +#: stock/models.py:438 msgid "Stock Quantity" msgstr "" -#: stock/models.py:445 +#: stock/models.py:447 msgid "Source Build" msgstr "" -#: stock/models.py:447 +#: stock/models.py:449 msgid "Build for this stock item" msgstr "" -#: stock/models.py:458 +#: stock/models.py:460 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:461 +#: stock/models.py:463 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:467 +#: stock/models.py:469 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:474 +#: stock/models.py:476 msgid "" "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Delete on deplete" msgstr "" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:497 stock/templates/stock/item_notes.html:13 +#: stock/models.py:499 stock/templates/stock/item_notes.html:13 #: stock/templates/stock/navbar.html:54 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:507 +#: stock/models.py:509 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:612 +#: stock/models.py:614 msgid "Assigned to Customer" msgstr "" -#: stock/models.py:614 +#: stock/models.py:616 msgid "Manually assigned to customer" msgstr "" -#: stock/models.py:627 +#: stock/models.py:629 msgid "Returned from customer" msgstr "" -#: stock/models.py:629 +#: stock/models.py:631 msgid "Returned to location" msgstr "" -#: stock/models.py:789 +#: stock/models.py:791 msgid "Installed into stock item" msgstr "" -#: stock/models.py:797 +#: stock/models.py:799 msgid "Installed stock item" msgstr "" -#: stock/models.py:821 +#: stock/models.py:823 msgid "Uninstalled stock item" msgstr "" -#: stock/models.py:840 +#: stock/models.py:842 msgid "Uninstalled into location" msgstr "" -#: stock/models.py:941 +#: stock/models.py:943 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:947 +#: stock/models.py:949 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:956 +#: stock/models.py:958 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:959 +#: stock/models.py:961 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:991 +#: stock/models.py:993 msgid "Add serial number" msgstr "" -#: stock/models.py:994 +#: stock/models.py:996 #, python-brace-format msgid "Serialized {n} items" msgstr "" -#: stock/models.py:1072 +#: stock/models.py:1074 msgid "Split from existing stock" msgstr "" -#: stock/models.py:1110 +#: stock/models.py:1112 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1553 +#: stock/models.py:1555 msgid "Title" msgstr "" -#: stock/models.py:1553 +#: stock/models.py:1555 msgid "Tracking entry title" msgstr "" -#: stock/models.py:1555 +#: stock/models.py:1557 msgid "Entry notes" msgstr "" -#: stock/models.py:1557 +#: stock/models.py:1559 msgid "Link to external page for further information" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1619 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1625 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1643 msgid "Test name" msgstr "" -#: stock/models.py:1647 templates/js/table_filters.js:190 +#: stock/models.py:1649 templates/js/table_filters.js:190 msgid "Test result" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1655 msgid "Test output value" msgstr "" -#: stock/models.py:1660 +#: stock/models.py:1662 msgid "Test result attachment" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1668 msgid "Test notes" msgstr "" @@ -5017,156 +5219,161 @@ msgstr "" msgid "This stock item has not passed all required tests" msgstr "" -#: stock/templates/stock/item_base.html:51 -msgid "This stock item is allocated to Sales Order" +#: stock/templates/stock/item_base.html:53 +#, python-format +msgid "" +"This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" msgstr "" -#: stock/templates/stock/item_base.html:57 -msgid "This stock item is allocated to Build" +#: stock/templates/stock/item_base.html:61 +#, python-format +msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" msgstr "" -#: stock/templates/stock/item_base.html:63 +#: stock/templates/stock/item_base.html:67 msgid "" "This stock item is serialized - it has a unique serial number and the " "quantity cannot be adjusted." msgstr "" -#: stock/templates/stock/item_base.html:67 +#: stock/templates/stock/item_base.html:71 msgid "This stock item cannot be deleted as it has child items" msgstr "" -#: stock/templates/stock/item_base.html:71 +#: stock/templates/stock/item_base.html:75 msgid "" "This stock item will be automatically deleted when all stock is depleted." msgstr "" -#: stock/templates/stock/item_base.html:91 -#: stock/templates/stock/item_base.html:353 templates/js/table_filters.js:123 +#: stock/templates/stock/item_base.html:95 +#: stock/templates/stock/item_base.html:369 templates/js/table_filters.js:123 msgid "Expired" msgstr "" -#: stock/templates/stock/item_base.html:95 -#: stock/templates/stock/item_base.html:355 templates/js/table_filters.js:128 +#: stock/templates/stock/item_base.html:99 +#: stock/templates/stock/item_base.html:371 templates/js/table_filters.js:128 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:132 templates/js/barcode.js:309 +#: stock/templates/stock/item_base.html:136 templates/js/barcode.js:309 #: templates/js/barcode.js:314 msgid "Unlink Barcode" msgstr "" -#: stock/templates/stock/item_base.html:134 +#: stock/templates/stock/item_base.html:138 msgid "Link Barcode" msgstr "" -#: stock/templates/stock/item_base.html:136 templates/stock_table.html:31 +#: stock/templates/stock/item_base.html:140 templates/stock_table.html:31 msgid "Scan to Location" msgstr "" -#: stock/templates/stock/item_base.html:143 +#: stock/templates/stock/item_base.html:147 msgid "Printing actions" msgstr "" -#: stock/templates/stock/item_base.html:147 +#: stock/templates/stock/item_base.html:151 #: stock/templates/stock/item_tests.html:27 msgid "Test Report" msgstr "" -#: stock/templates/stock/item_base.html:156 +#: stock/templates/stock/item_base.html:160 msgid "Stock adjustment actions" msgstr "" -#: stock/templates/stock/item_base.html:160 +#: stock/templates/stock/item_base.html:164 #: stock/templates/stock/location.html:58 templates/stock_table.html:55 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:163 templates/stock_table.html:53 +#: stock/templates/stock/item_base.html:167 templates/stock_table.html:53 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:166 templates/stock_table.html:54 +#: stock/templates/stock/item_base.html:170 templates/stock_table.html:54 msgid "Remove stock" msgstr "" -#: stock/templates/stock/item_base.html:169 +#: stock/templates/stock/item_base.html:173 msgid "Serialize stock" msgstr "" -#: stock/templates/stock/item_base.html:173 +#: stock/templates/stock/item_base.html:177 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:176 +#: stock/templates/stock/item_base.html:180 msgid "Assign to customer" msgstr "" -#: stock/templates/stock/item_base.html:179 +#: stock/templates/stock/item_base.html:183 msgid "Return to stock" msgstr "" -#: stock/templates/stock/item_base.html:183 templates/js/stock.js:1222 +#: stock/templates/stock/item_base.html:187 templates/js/stock.js:1222 msgid "Uninstall stock item" msgstr "" -#: stock/templates/stock/item_base.html:183 +#: stock/templates/stock/item_base.html:187 msgid "Uninstall" msgstr "" -#: stock/templates/stock/item_base.html:192 +#: stock/templates/stock/item_base.html:196 #: stock/templates/stock/location.html:55 msgid "Stock actions" msgstr "" -#: stock/templates/stock/item_base.html:195 +#: stock/templates/stock/item_base.html:199 msgid "Convert to variant" msgstr "" -#: stock/templates/stock/item_base.html:198 +#: stock/templates/stock/item_base.html:202 msgid "Duplicate stock item" msgstr "" -#: stock/templates/stock/item_base.html:200 +#: stock/templates/stock/item_base.html:204 msgid "Edit stock item" msgstr "" -#: stock/templates/stock/item_base.html:203 +#: stock/templates/stock/item_base.html:207 msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:215 +#: stock/templates/stock/item_base.html:219 msgid "Stock Item Details" msgstr "" -#: stock/templates/stock/item_base.html:274 templates/js/build.js:442 +#: stock/templates/stock/item_base.html:278 templates/js/build.js:442 msgid "No location set" msgstr "" -#: stock/templates/stock/item_base.html:281 +#: stock/templates/stock/item_base.html:285 msgid "Barcode Identifier" msgstr "" -#: stock/templates/stock/item_base.html:323 +#: stock/templates/stock/item_base.html:327 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:353 -msgid "This StockItem expired on" -msgstr "" - -#: stock/templates/stock/item_base.html:355 -msgid "This StockItem expires on" -msgstr "" - -#: stock/templates/stock/item_base.html:362 templates/js/stock.js:662 -msgid "Last Updated" -msgstr "" - -#: stock/templates/stock/item_base.html:367 -msgid "Last Stocktake" +#: stock/templates/stock/item_base.html:369 +#, python-format +msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:371 +#, python-format +msgid "This StockItem expires on %(item.expiry_date)s" +msgstr "" + +#: stock/templates/stock/item_base.html:378 templates/js/stock.js:662 +msgid "Last Updated" +msgstr "" + +#: stock/templates/stock/item_base.html:383 +msgid "Last Stocktake" +msgstr "" + +#: stock/templates/stock/item_base.html:387 msgid "No stocktake performed" msgstr "" @@ -5182,6 +5389,12 @@ msgstr "" msgid "Are you sure you want to delete this stock item?" msgstr "" +#: stock/templates/stock/item_delete.html:12 +#, python-format +msgid "" +"This will remove %(qty)s units of %(full_name)s from stock." +msgstr "" + #: stock/templates/stock/item_install.html:7 msgid "Install another StockItem into this item." msgstr "" @@ -5270,7 +5483,7 @@ msgstr "" msgid "Stock Details" msgstr "" -#: stock/templates/stock/location.html:110 templates/InvenTree/search.html:263 +#: stock/templates/stock/location.html:110 templates/InvenTree/search.html:279 #: templates/stats.html:76 users/models.py:39 msgid "Stock Locations" msgstr "" @@ -5328,7 +5541,8 @@ msgid "Convert Stock Item" msgstr "" #: stock/templates/stock/stockitem_convert.html:8 -msgid "This stock item is current an instance of " +#, python-format +msgid "This stock item is current an instance of %(part)s" msgstr "" #: stock/templates/stock/stockitem_convert.html:9 @@ -5339,6 +5553,10 @@ msgstr "" msgid "This action cannot be easily undone" msgstr "" +#: stock/templates/stock/tracking_delete.html:6 +msgid "Are you sure you want to delete this stock tracking entry?" +msgstr "" + #: stock/views.py:123 msgid "Edit Stock Location" msgstr "" @@ -5456,7 +5674,7 @@ msgstr "" msgid "Add Stock Items" msgstr "" -#: stock/views.py:1001 users/models.py:178 +#: stock/views.py:1001 users/models.py:179 msgid "Add" msgstr "" @@ -5618,19 +5836,19 @@ msgstr "" msgid "Overdue Sales Orders" msgstr "" -#: templates/InvenTree/search.html:7 templates/InvenTree/search.html:13 +#: templates/InvenTree/search.html:8 templates/InvenTree/search.html:14 msgid "Search Results" msgstr "" -#: templates/InvenTree/search.html:23 +#: templates/InvenTree/search.html:24 msgid "Enter a search query" msgstr "" -#: templates/InvenTree/search.html:252 templates/js/stock.js:300 +#: templates/InvenTree/search.html:268 templates/js/stock.js:300 msgid "Shipped to customer" msgstr "" -#: templates/InvenTree/search.html:255 templates/js/stock.js:310 +#: templates/InvenTree/search.html:271 templates/js/stock.js:310 msgid "No stock location set" msgstr "" @@ -5705,7 +5923,7 @@ msgid "Edit setting" msgstr "" #: templates/InvenTree/settings/settings.html:7 -#: templates/InvenTree/settings/settings.html:13 templates/navbar.html:78 +#: templates/InvenTree/settings/settings.html:13 templates/navbar.html:84 msgid "Settings" msgstr "" @@ -5970,27 +6188,37 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/bom.js:286 templates/js/bom.js:372 +#: templates/js/bom.js:272 templates/js/filters.js:167 +#: templates/js/filters.js:397 +msgid "true" +msgstr "" + +#: templates/js/bom.js:273 templates/js/filters.js:171 +#: templates/js/filters.js:398 +msgid "false" +msgstr "" + +#: templates/js/bom.js:290 templates/js/bom.js:376 msgid "View BOM" msgstr "" -#: templates/js/bom.js:346 +#: templates/js/bom.js:350 msgid "Validate BOM Item" msgstr "" -#: templates/js/bom.js:348 +#: templates/js/bom.js:352 msgid "This line has been validated" msgstr "" -#: templates/js/bom.js:350 +#: templates/js/bom.js:354 msgid "Edit BOM Item" msgstr "" -#: templates/js/bom.js:352 +#: templates/js/bom.js:356 msgid "Delete BOM Item" msgstr "" -#: templates/js/bom.js:443 templates/js/build.js:305 templates/js/build.js:1032 +#: templates/js/bom.js:447 templates/js/build.js:305 templates/js/build.js:1032 msgid "No BOM items found" msgstr "" @@ -6057,23 +6285,21 @@ msgid "No company information found" msgstr "" #: templates/js/company.js:129 -msgid "No supplier parts found" +msgid "No manufacturer parts found" msgstr "" -#: templates/js/company.js:147 templates/js/part.js:59 templates/js/part.js:144 +#: templates/js/company.js:148 templates/js/company.js:246 +#: templates/js/part.js:59 templates/js/part.js:144 msgid "Template part" msgstr "" -#: templates/js/company.js:151 templates/js/part.js:63 templates/js/part.js:148 +#: templates/js/company.js:152 templates/js/company.js:250 +#: templates/js/part.js:63 templates/js/part.js:148 msgid "Assembled part" msgstr "" -#: templates/js/filters.js:167 templates/js/filters.js:397 -msgid "true" -msgstr "" - -#: templates/js/filters.js:171 templates/js/filters.js:398 -msgid "false" +#: templates/js/company.js:227 +msgid "No supplier parts found" msgstr "" #: templates/js/filters.js:193 @@ -6738,19 +6964,19 @@ msgstr "" msgid "Scan Barcode" msgstr "" -#: templates/navbar.html:71 users/models.py:36 +#: templates/navbar.html:77 users/models.py:36 msgid "Admin" msgstr "" -#: templates/navbar.html:73 +#: templates/navbar.html:79 msgid "Logout" msgstr "" -#: templates/navbar.html:75 templates/registration/login.html:89 +#: templates/navbar.html:81 templates/registration/login.html:89 msgid "Login" msgstr "" -#: templates/navbar.html:94 +#: templates/navbar.html:104 msgid "About InvenTree" msgstr "" @@ -6924,6 +7150,14 @@ msgstr "" msgid "Delete Stock" msgstr "" +#: templates/yesnolabel.html:4 +msgid "Yes" +msgstr "" + +#: templates/yesnolabel.html:6 +msgid "No" +msgstr "" + #: users/admin.py:64 msgid "Users" msgstr "" @@ -6948,34 +7182,34 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:165 +#: users/models.py:166 msgid "Permission set" msgstr "" -#: users/models.py:173 +#: users/models.py:174 msgid "Group" msgstr "" -#: users/models.py:176 +#: users/models.py:177 msgid "View" msgstr "" -#: users/models.py:176 +#: users/models.py:177 msgid "Permission to view items" msgstr "" -#: users/models.py:178 +#: users/models.py:179 msgid "Permission to add items" msgstr "" -#: users/models.py:180 +#: users/models.py:181 msgid "Change" msgstr "" -#: users/models.py:180 +#: users/models.py:181 msgid "Permissions to edit items" msgstr "" -#: users/models.py:182 +#: users/models.py:183 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/es/LC_MESSAGES/django.po b/InvenTree/locale/es/LC_MESSAGES/django.po index cba1555d33..88164f6c11 100644 --- a/InvenTree/locale/es/LC_MESSAGES/django.po +++ b/InvenTree/locale/es/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-15 10:07+0000\n" +"POT-Creation-Date: 2021-04-17 23:25+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -37,7 +37,7 @@ msgstr "" #: InvenTree/forms.py:110 build/forms.py:99 build/forms.py:120 #: build/forms.py:142 build/forms.py:166 build/forms.py:188 build/forms.py:223 #: order/forms.py:27 order/forms.py:38 order/forms.py:49 order/forms.py:60 -#: order/forms.py:71 part/forms.py:132 +#: order/forms.py:71 part/forms.py:134 msgid "Confirm" msgstr "" @@ -73,40 +73,40 @@ msgstr "" msgid "Select Category" msgstr "" -#: InvenTree/helpers.py:361 order/models.py:245 order/models.py:344 +#: InvenTree/helpers.py:375 order/models.py:245 order/models.py:344 #: stock/views.py:1763 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:364 +#: InvenTree/helpers.py:378 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:385 +#: InvenTree/helpers.py:399 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:389 InvenTree/helpers.py:392 InvenTree/helpers.py:395 +#: InvenTree/helpers.py:403 InvenTree/helpers.py:406 InvenTree/helpers.py:409 #, python-brace-format msgid "Invalid group: {g}" msgstr "" -#: InvenTree/helpers.py:400 +#: InvenTree/helpers.py:414 #, python-brace-format msgid "Duplicate serial: {g}" msgstr "" -#: InvenTree/helpers.py:408 +#: InvenTree/helpers.py:422 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:412 +#: InvenTree/helpers.py:426 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/models.py:59 stock/models.py:1659 +#: InvenTree/models.py:59 stock/models.py:1661 msgid "Attachment" msgstr "" @@ -134,14 +134,15 @@ msgstr "" #: InvenTree/models.py:107 InvenTree/models.py:108 label/models.py:101 #: part/models.py:686 part/models.py:2029 part/templates/part/params.html:27 -#: report/models.py:179 templates/InvenTree/search.html:136 -#: templates/InvenTree/search.html:273 templates/js/part.js:109 +#: report/models.py:179 templates/InvenTree/search.html:137 +#: templates/InvenTree/search.html:289 templates/js/part.js:109 msgid "Name" msgstr "" #: InvenTree/models.py:114 build/models.py:134 -#: build/templates/build/detail.html:21 company/models.py:365 -#: company/templates/company/detail.html:26 +#: build/templates/build/detail.html:21 company/models.py:342 +#: company/models.py:494 company/templates/company/detail.html:27 +#: company/templates/company/manufacturer_part_base.html:72 #: company/templates/company/supplier_part_base.html:70 #: company/templates/company/supplier_part_detail.html:31 label/models.py:108 #: order/models.py:101 order/templates/order/purchase_order_detail.html:168 @@ -149,8 +150,8 @@ msgstr "" #: part/templates/part/set_category.html:14 report/models.py:192 #: report/models.py:505 report/models.py:544 #: report/templates/report/inventree_build_order_base.html:118 -#: templates/InvenTree/search.html:143 templates/InvenTree/search.html:208 -#: templates/InvenTree/search.html:280 +#: templates/InvenTree/search.html:144 templates/InvenTree/search.html:224 +#: templates/InvenTree/search.html:296 #: templates/InvenTree/settings/header.html:9 templates/js/bom.js:190 #: templates/js/build.js:677 templates/js/build.js:944 #: templates/js/company.js:56 templates/js/order.js:183 @@ -312,7 +313,7 @@ msgstr "" msgid "Password fields must match" msgstr "" -#: InvenTree/views.py:887 templates/navbar.html:85 +#: InvenTree/views.py:887 templates/navbar.html:95 msgid "System Information" msgstr "" @@ -364,7 +365,7 @@ msgstr "" msgid "Order target date" msgstr "" -#: build/forms.py:39 build/templates/build/build_base.html:104 +#: build/forms.py:39 build/templates/build/build_base.html:107 #: build/templates/build/detail.html:121 order/forms.py:109 order/forms.py:144 #: order/templates/order/order_base.html:124 #: order/templates/order/sales_order_base.html:117 @@ -381,31 +382,29 @@ msgstr "" #: build/forms.py:45 build/forms.py:87 build/forms.py:257 build/models.py:1103 #: build/templates/build/auto_allocate.html:17 -#: build/templates/build/build_base.html:91 +#: build/templates/build/build_base.html:94 #: build/templates/build/detail.html:31 common/models.py:696 -#: company/forms.py:131 company/templates/company/supplier_part_pricing.html:77 +#: company/forms.py:176 company/templates/company/supplier_part_pricing.html:77 #: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261 #: order/forms.py:278 order/models.py:593 order/models.py:784 #: order/templates/order/order_wizard/select_parts.html:32 -#: order/templates/order/purchase_order_detail.html:193 +#: order/templates/order/purchase_order_detail.html:200 #: order/templates/order/sales_order_detail.html:70 #: order/templates/order/sales_order_detail.html:77 #: order/templates/order/sales_order_detail.html:159 -#: order/templates/order/sales_order_detail.html:224 part/forms.py:340 -#: part/forms.py:369 part/forms.py:385 part/models.py:2158 +#: order/templates/order/sales_order_detail.html:224 part/forms.py:342 +#: part/forms.py:371 part/forms.py:387 part/models.py:2158 #: part/templates/part/allocation.html:19 #: part/templates/part/allocation.html:53 -#: part/templates/part/part_pricing.html:12 -#: part/templates/part/part_pricing.html:19 +#: part/templates/part/part_pricing.html:11 +#: part/templates/part/part_pricing.html:18 #: part/templates/part/sale_prices.html:85 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:77 -#: stock/forms.py:175 stock/forms.py:308 stock/models.py:1563 -#: stock/templates/stock/item_base.html:51 -#: stock/templates/stock/item_base.html:57 -#: stock/templates/stock/item_base.html:240 +#: stock/forms.py:175 stock/forms.py:308 stock/models.py:1565 +#: stock/templates/stock/item_base.html:244 #: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364 #: templates/js/bom.js:205 templates/js/build.js:420 templates/js/build.js:954 #: templates/js/stock.js:956 templates/js/stock.js:1194 @@ -450,9 +449,9 @@ msgstr "" #: build/forms.py:213 build/templates/build/auto_allocate.html:18 #: order/forms.py:82 stock/forms.py:347 -#: stock/templates/stock/item_base.html:270 +#: stock/templates/stock/item_base.html:274 #: stock/templates/stock/stock_adjust.html:17 -#: templates/InvenTree/search.html:244 templates/js/barcode.js:363 +#: templates/InvenTree/search.html:260 templates/js/barcode.js:363 #: templates/js/barcode.js:531 templates/js/build.js:434 #: templates/js/stock.js:641 msgid "Location" @@ -486,8 +485,8 @@ msgstr "" msgid "Select quantity of stock to allocate" msgstr "" -#: build/models.py:65 build/templates/build/build_base.html:8 -#: build/templates/build/build_base.html:35 +#: build/models.py:65 build/templates/build/build_base.html:9 +#: build/templates/build/build_base.html:38 #: part/templates/part/allocation.html:23 #: report/templates/report/inventree_build_order_base.html:106 msgid "Build Order" @@ -498,7 +497,7 @@ msgstr "" #: order/templates/order/so_navbar.html:19 #: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55 #: part/templates/part/navbar.html:58 templates/InvenTree/index.html:182 -#: templates/InvenTree/search.html:169 +#: templates/InvenTree/search.html:185 #: templates/InvenTree/settings/tabs.html:31 users/models.py:41 msgid "Build Orders" msgstr "" @@ -508,7 +507,7 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:127 order/models.py:99 order/models.py:595 -#: order/templates/order/purchase_order_detail.html:188 +#: order/templates/order/purchase_order_detail.html:195 #: order/templates/order/sales_order_detail.html:219 part/models.py:2167 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197 @@ -520,7 +519,7 @@ msgstr "" msgid "Brief description of the build" msgstr "" -#: build/models.py:146 build/templates/build/build_base.html:121 +#: build/models.py:146 build/templates/build/build_base.html:124 #: build/templates/build/detail.html:77 msgid "Parent Build" msgstr "" @@ -530,8 +529,8 @@ msgid "BuildOrder to which this build is allocated" msgstr "" #: build/models.py:152 build/templates/build/auto_allocate.html:16 -#: build/templates/build/build_base.html:86 -#: build/templates/build/detail.html:26 company/models.py:539 +#: build/templates/build/build_base.html:89 +#: build/templates/build/detail.html:26 company/models.py:669 #: order/models.py:637 order/models.py:669 #: order/templates/order/order_wizard/select_parts.html:30 #: order/templates/order/purchase_order_detail.html:156 @@ -540,17 +539,17 @@ msgstr "" #: part/models.py:1856 part/models.py:1868 part/models.py:1886 #: part/models.py:1961 part/models.py:2057 part/models.py:2142 #: part/templates/part/part_app_base.html:7 -#: part/templates/part/part_pricing.html:15 part/templates/part/related.html:29 +#: part/templates/part/part_pricing.html:14 part/templates/part/related.html:29 #: part/templates/part/set_category.html:13 #: part/templates/part/subcategories.html:17 #: report/templates/report/inventree_build_order_base.html:110 #: report/templates/report/inventree_po_report.html:90 #: report/templates/report/inventree_so_report.html:90 -#: templates/InvenTree/search.html:111 templates/InvenTree/search.html:194 +#: templates/InvenTree/search.html:112 templates/InvenTree/search.html:210 #: templates/js/barcode.js:362 templates/js/bom.js:163 #: templates/js/build.js:681 templates/js/build.js:921 -#: templates/js/company.js:138 templates/js/part.js:232 -#: templates/js/part.js:337 templates/js/stock.js:523 +#: templates/js/company.js:140 templates/js/company.js:238 +#: templates/js/part.js:232 templates/js/part.js:337 templates/js/stock.js:523 #: templates/js/stock.js:1266 msgid "Part" msgstr "" @@ -601,7 +600,7 @@ msgstr "" msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:204 part/templates/part/part_base.html:159 +#: build/models.py:204 part/templates/part/part_base.html:160 msgid "Build Status" msgstr "" @@ -609,7 +608,7 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:212 stock/models.py:430 +#: build/models.py:212 stock/models.py:432 msgid "Batch Code" msgstr "" @@ -642,7 +641,7 @@ msgstr "" msgid "User who issued this build order" msgstr "" -#: build/models.py:250 build/templates/build/build_base.html:142 +#: build/models.py:250 build/templates/build/build_base.html:145 #: build/templates/build/detail.html:105 order/models.py:119 #: order/templates/order/order_base.html:138 #: order/templates/order/sales_order_base.html:138 part/models.py:886 @@ -655,33 +654,35 @@ msgid "User responsible for this build order" msgstr "" #: build/models.py:256 build/templates/build/detail.html:91 +#: company/templates/company/manufacturer_part_base.html:79 +#: company/templates/company/manufacturer_part_detail.html:28 #: company/templates/company/supplier_part_base.html:77 #: company/templates/company/supplier_part_detail.html:28 -#: part/templates/part/detail.html:83 part/templates/part/part_base.html:100 -#: stock/models.py:424 stock/templates/stock/item_base.html:330 +#: part/templates/part/detail.html:83 part/templates/part/part_base.html:101 +#: stock/models.py:426 stock/templates/stock/item_base.html:334 msgid "External Link" msgstr "" -#: build/models.py:257 part/models.py:744 stock/models.py:426 +#: build/models.py:257 part/models.py:744 stock/models.py:428 msgid "Link to external URL" msgstr "" #: build/models.py:261 build/templates/build/navbar.html:59 -#: company/models.py:133 company/models.py:372 -#: company/templates/company/navbar.html:59 -#: company/templates/company/navbar.html:62 order/models.py:123 +#: company/models.py:135 company/models.py:501 +#: company/templates/company/navbar.html:70 +#: company/templates/company/navbar.html:73 order/models.py:123 #: order/models.py:597 order/templates/order/po_navbar.html:29 #: order/templates/order/po_navbar.html:32 -#: order/templates/order/purchase_order_detail.html:227 +#: order/templates/order/purchase_order_detail.html:234 #: order/templates/order/sales_order_detail.html:264 #: order/templates/order/so_navbar.html:33 #: order/templates/order/so_navbar.html:36 part/models.py:871 -#: part/templates/part/navbar.html:122 +#: part/templates/part/navbar.html:128 #: report/templates/report/inventree_build_order_base.html:173 #: stock/forms.py:173 stock/forms.py:317 stock/forms.py:349 stock/forms.py:377 -#: stock/models.py:496 stock/models.py:1555 stock/models.py:1665 +#: stock/models.py:498 stock/models.py:1557 stock/models.py:1667 #: stock/templates/stock/navbar.html:57 templates/js/barcode.js:37 -#: templates/js/bom.js:329 templates/js/stock.js:128 templates/js/stock.js:671 +#: templates/js/bom.js:333 templates/js/stock.js:128 templates/js/stock.js:671 msgid "Notes" msgstr "" @@ -735,8 +736,8 @@ msgstr "" msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1082 stock/templates/stock/item_base.html:302 -#: templates/InvenTree/search.html:167 templates/js/build.js:655 +#: build/models.py:1082 stock/templates/stock/item_base.html:306 +#: templates/InvenTree/search.html:183 templates/js/build.js:655 #: templates/navbar.html:29 msgid "Build" msgstr "" @@ -750,8 +751,8 @@ msgstr "" #: part/templates/part/allocation.html:31 #: part/templates/part/allocation.html:49 #: stock/templates/stock/item_base.html:8 -#: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/item_base.html:324 +#: stock/templates/stock/item_base.html:93 +#: stock/templates/stock/item_base.html:328 #: stock/templates/stock/stock_adjust.html:16 templates/js/build.js:771 #: templates/js/stock.js:927 templates/js/stock.js:1185 msgid "Stock Item" @@ -794,7 +795,8 @@ msgid "Order required parts" msgstr "" #: build/templates/build/allocate.html:31 -#: company/templates/company/detail_part.html:31 order/views.py:794 +#: company/templates/company/detail_manufacturer_part.html:33 +#: company/templates/company/detail_supplier_part.html:32 order/views.py:794 #: part/templates/part/category.html:127 msgid "Order Parts" msgstr "" @@ -822,8 +824,8 @@ msgstr "" #: build/templates/build/attachments.html:12 #: build/templates/build/navbar.html:49 build/templates/build/navbar.html:52 #: order/templates/order/po_navbar.html:26 -#: order/templates/order/so_navbar.html:29 part/templates/part/navbar.html:113 -#: part/templates/part/navbar.html:116 stock/templates/stock/navbar.html:47 +#: order/templates/order/so_navbar.html:29 part/templates/part/navbar.html:119 +#: part/templates/part/navbar.html:122 stock/templates/stock/navbar.html:47 #: stock/templates/stock/navbar.html:50 msgid "Attachments" msgstr "" @@ -845,27 +847,30 @@ msgstr "" msgid "Stock items will have to be manually allocated" msgstr "" -#: build/templates/build/build_base.html:14 -msgid "This Build Order is allocated to Sales Order" +#: build/templates/build/build_base.html:16 +#, python-format +msgid "This Build Order is allocated to Sales Order %(link)s" msgstr "" -#: build/templates/build/build_base.html:19 -msgid "This Build Order is a child of Build Order" +#: build/templates/build/build_base.html:22 +#, python-format +msgid "This Build Order is a child of Build Order %(link)s" msgstr "" -#: build/templates/build/build_base.html:37 +#: build/templates/build/build_base.html:40 #: company/templates/company/company_base.html:40 +#: company/templates/company/manufacturer_part_base.html:25 #: company/templates/company/supplier_part_base.html:25 #: order/templates/order/order_base.html:26 #: order/templates/order/sales_order_base.html:35 -#: part/templates/part/category.html:14 part/templates/part/part_base.html:28 -#: stock/templates/stock/item_base.html:114 +#: part/templates/part/category.html:14 part/templates/part/part_base.html:29 +#: stock/templates/stock/item_base.html:118 #: stock/templates/stock/location.html:24 msgid "Admin view" msgstr "" -#: build/templates/build/build_base.html:43 -#: build/templates/build/build_base.html:108 +#: build/templates/build/build_base.html:46 +#: build/templates/build/build_base.html:111 #: order/templates/order/order_base.html:32 #: order/templates/order/order_base.html:86 #: order/templates/order/sales_order_base.html:41 @@ -875,57 +880,58 @@ msgstr "" msgid "Overdue" msgstr "" -#: build/templates/build/build_base.html:52 +#: build/templates/build/build_base.html:55 msgid "Print actions" msgstr "" -#: build/templates/build/build_base.html:56 +#: build/templates/build/build_base.html:59 msgid "Print Build Order" msgstr "" -#: build/templates/build/build_base.html:62 +#: build/templates/build/build_base.html:65 msgid "Build actions" msgstr "" -#: build/templates/build/build_base.html:66 +#: build/templates/build/build_base.html:69 msgid "Edit Build" msgstr "" -#: build/templates/build/build_base.html:68 -#: build/templates/build/build_base.html:176 +#: build/templates/build/build_base.html:71 +#: build/templates/build/build_base.html:179 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:69 -#: build/templates/build/build_base.html:167 build/views.py:57 +#: build/templates/build/build_base.html:72 +#: build/templates/build/build_base.html:170 build/views.py:57 msgid "Cancel Build" msgstr "" -#: build/templates/build/build_base.html:82 +#: build/templates/build/build_base.html:85 #: build/templates/build/detail.html:11 msgid "Build Details" msgstr "" -#: build/templates/build/build_base.html:96 +#: build/templates/build/build_base.html:99 #: build/templates/build/detail.html:59 order/models.py:445 #: order/templates/order/receive_parts.html:24 -#: stock/templates/stock/item_base.html:376 templates/InvenTree/search.html:236 +#: stock/templates/stock/item_base.html:392 templates/InvenTree/search.html:252 #: templates/js/barcode.js:119 templates/js/build.js:710 #: templates/js/order.js:187 templates/js/order.js:285 #: templates/js/stock.js:628 templates/js/stock.js:1202 msgid "Status" msgstr "" -#: build/templates/build/build_base.html:108 -msgid "This build was due on" +#: build/templates/build/build_base.html:111 +#, python-format +msgid "This build was due on %(target)s" msgstr "" -#: build/templates/build/build_base.html:115 +#: build/templates/build/build_base.html:118 #: build/templates/build/detail.html:64 msgid "Progress" msgstr "" -#: build/templates/build/build_base.html:128 +#: build/templates/build/build_base.html:131 #: build/templates/build/detail.html:84 order/models.py:667 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:33 @@ -933,11 +939,11 @@ msgstr "" #: part/templates/part/allocation.html:30 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:264 templates/js/order.js:245 +#: stock/templates/stock/item_base.html:268 templates/js/order.js:245 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:135 +#: build/templates/build/build_base.html:138 #: build/templates/build/detail.html:98 #: report/templates/report/inventree_build_order_base.html:153 msgid "Issued By" @@ -1014,11 +1020,15 @@ msgid "Select a stock item to allocate to the selected build output" msgstr "" #: build/templates/build/create_build_item.html:11 -msgid "The allocated stock will be installed into the following build output:" +#, python-format +msgid "" +"The allocated stock will be installed into the following build output:
                        " +"%(output)s" msgstr "" -#: build/templates/build/create_build_item.html:19 -msgid "No stock available for" +#: build/templates/build/create_build_item.html:17 +#, python-format +msgid "No stock available for %(part)s" msgstr "" #: build/templates/build/delete_build_item.html:8 @@ -1046,7 +1056,7 @@ msgid "Destination location not specified" msgstr "" #: build/templates/build/detail.html:70 -#: stock/templates/stock/item_base.html:288 templates/js/stock.js:636 +#: stock/templates/stock/item_base.html:292 templates/js/stock.js:636 #: templates/js/stock.js:1209 templates/js/table_filters.js:85 #: templates/js/table_filters.js:179 msgid "Batch" @@ -1137,7 +1147,7 @@ msgstr "" #: build/templates/build/notes.html:26 company/templates/company/notes.html:24 #: order/templates/order/order_notes.html:27 #: order/templates/order/sales_order_notes.html:29 -#: part/templates/part/notes.html:27 stock/templates/stock/item_base.html:454 +#: part/templates/part/notes.html:27 stock/templates/stock/item_base.html:470 #: stock/templates/stock/item_notes.html:26 msgid "Save" msgstr "" @@ -1170,7 +1180,7 @@ msgstr "" msgid "Create Build Output" msgstr "" -#: build/views.py:203 stock/models.py:966 stock/views.py:1789 +#: build/views.py:203 stock/models.py:968 stock/views.py:1789 msgid "Serial numbers already exist" msgstr "" @@ -1308,7 +1318,7 @@ msgstr "" msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:62 company/models.py:95 company/models.py:96 +#: common/models.py:62 company/models.py:97 company/models.py:98 msgid "Company name" msgstr "" @@ -1623,7 +1633,7 @@ msgstr "" msgid "Key string must be unique" msgstr "" -#: common/models.py:697 company/forms.py:132 +#: common/models.py:697 company/forms.py:177 msgid "Price break quantity" msgstr "" @@ -1656,224 +1666,253 @@ msgstr "" msgid "Supplied value must be a boolean" msgstr "" -#: company/forms.py:37 company/models.py:143 -#: company/templates/company/detail.html:40 +#: company/forms.py:38 company/models.py:145 +#: company/templates/company/detail.html:42 msgid "Currency" msgstr "" -#: company/forms.py:38 company/models.py:145 +#: company/forms.py:39 company/models.py:147 msgid "Default currency used for this company" msgstr "" -#: company/forms.py:76 part/forms.py:46 +#: company/forms.py:77 part/forms.py:46 msgid "URL" msgstr "" -#: company/forms.py:77 part/forms.py:47 +#: company/forms.py:78 part/forms.py:47 msgid "Image URL" msgstr "" -#: company/forms.py:99 +#: company/forms.py:118 msgid "Single Price" msgstr "" -#: company/forms.py:101 +#: company/forms.py:120 msgid "Single quantity price" msgstr "" -#: company/models.py:100 -msgid "Company description" -msgstr "" - -#: company/models.py:101 -msgid "Description of the company" -msgstr "" - -#: company/models.py:105 company/templates/company/company_base.html:70 -#: company/templates/company/detail.html:31 templates/js/company.js:60 -msgid "Website" -msgstr "" - -#: company/models.py:105 -msgid "Company website URL" -msgstr "" - -#: company/models.py:108 company/templates/company/company_base.html:77 -msgid "Address" -msgstr "" - -#: company/models.py:109 -msgid "Company address" -msgstr "" - -#: company/models.py:112 -msgid "Phone number" -msgstr "" - -#: company/models.py:113 -msgid "Contact phone number" -msgstr "" - -#: company/models.py:116 company/templates/company/company_base.html:91 -msgid "Email" -msgstr "" - -#: company/models.py:116 -msgid "Contact email address" -msgstr "" - -#: company/models.py:119 company/templates/company/company_base.html:98 -msgid "Contact" -msgstr "" - -#: company/models.py:120 -msgid "Point of contact" -msgstr "" - -#: company/models.py:122 company/models.py:359 order/models.py:103 -#: part/models.py:743 -#: report/templates/report/inventree_build_order_base.html:165 -#: stock/models.py:1557 templates/js/company.js:208 templates/js/part.js:430 -msgid "Link" -msgstr "" - -#: company/models.py:122 -msgid "Link to external company information" -msgstr "" - -#: company/models.py:130 part/models.py:753 -msgid "Image" -msgstr "" - -#: company/models.py:135 -msgid "is customer" -msgstr "" - -#: company/models.py:135 -msgid "Do you sell items to this company?" -msgstr "" - -#: company/models.py:137 -msgid "is supplier" -msgstr "" - -#: company/models.py:137 -msgid "Do you purchase items from this company?" -msgstr "" - -#: company/models.py:139 -msgid "is manufacturer" -msgstr "" - -#: company/models.py:139 -msgid "Does this company manufacture parts?" -msgstr "" - -#: company/models.py:319 stock/models.py:371 -#: stock/templates/stock/item_base.html:220 -msgid "Base Part" -msgstr "" - -#: company/models.py:323 order/views.py:1372 -msgid "Select part" -msgstr "" - -#: company/models.py:329 company/templates/company/detail.html:60 -#: company/templates/company/supplier_part_base.html:83 -#: company/templates/company/supplier_part_detail.html:25 order/models.py:190 -#: order/templates/order/order_base.html:92 -#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:170 -#: stock/templates/stock/item_base.html:337 templates/js/company.js:48 -#: templates/js/company.js:164 templates/js/order.js:170 -msgid "Supplier" -msgstr "" - -#: company/models.py:330 -msgid "Select supplier" -msgstr "" - -#: company/models.py:335 company/templates/company/supplier_part_base.html:87 -#: company/templates/company/supplier_part_detail.html:26 -#: order/templates/order/purchase_order_detail.html:174 part/bom.py:171 -msgid "SKU" -msgstr "" - -#: company/models.py:336 -msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:346 company/templates/company/detail.html:55 -#: company/templates/company/supplier_part_base.html:93 -#: company/templates/company/supplier_part_detail.html:34 part/bom.py:172 -#: templates/js/company.js:44 templates/js/company.js:188 -msgid "Manufacturer" -msgstr "" - -#: company/models.py:347 +#: company/forms.py:128 company/models.py:324 msgid "Select manufacturer" msgstr "" -#: company/models.py:353 company/templates/company/supplier_part_base.html:99 +#: company/forms.py:134 company/models.py:331 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/forms.py:136 company/models.py:330 +#: company/templates/company/manufacturer_part_base.html:89 +#: company/templates/company/manufacturer_part_detail.html:26 +#: company/templates/company/supplier_part_base.html:100 #: company/templates/company/supplier_part_detail.html:35 -#: order/templates/order/purchase_order_detail.html:183 part/bom.py:173 -#: templates/js/company.js:204 +#: order/templates/order/purchase_order_detail.html:183 part/bom.py:171 +#: part/bom.py:242 templates/js/company.js:181 templates/js/company.js:307 msgid "MPN" msgstr "" -#: company/models.py:354 -msgid "Manufacturer part number" +#: company/models.py:102 +msgid "Company description" msgstr "" -#: company/models.py:360 +#: company/models.py:103 +msgid "Description of the company" +msgstr "" + +#: company/models.py:107 company/templates/company/company_base.html:70 +#: company/templates/company/detail.html:33 templates/js/company.js:60 +msgid "Website" +msgstr "" + +#: company/models.py:107 +msgid "Company website URL" +msgstr "" + +#: company/models.py:110 company/templates/company/company_base.html:77 +msgid "Address" +msgstr "" + +#: company/models.py:111 +msgid "Company address" +msgstr "" + +#: company/models.py:114 +msgid "Phone number" +msgstr "" + +#: company/models.py:115 +msgid "Contact phone number" +msgstr "" + +#: company/models.py:118 company/templates/company/company_base.html:91 +msgid "Email" +msgstr "" + +#: company/models.py:118 +msgid "Contact email address" +msgstr "" + +#: company/models.py:121 company/templates/company/company_base.html:98 +msgid "Contact" +msgstr "" + +#: company/models.py:122 +msgid "Point of contact" +msgstr "" + +#: company/models.py:124 company/models.py:336 company/models.py:488 +#: order/models.py:103 part/models.py:743 +#: report/templates/report/inventree_build_order_base.html:165 +#: stock/models.py:1559 templates/js/company.js:188 templates/js/company.js:318 +#: templates/js/part.js:430 +msgid "Link" +msgstr "" + +#: company/models.py:124 +msgid "Link to external company information" +msgstr "" + +#: company/models.py:132 part/models.py:753 +msgid "Image" +msgstr "" + +#: company/models.py:137 +msgid "is customer" +msgstr "" + +#: company/models.py:137 +msgid "Do you sell items to this company?" +msgstr "" + +#: company/models.py:139 +msgid "is supplier" +msgstr "" + +#: company/models.py:139 +msgid "Do you purchase items from this company?" +msgstr "" + +#: company/models.py:141 +msgid "is manufacturer" +msgstr "" + +#: company/models.py:141 +msgid "Does this company manufacture parts?" +msgstr "" + +#: company/models.py:308 company/models.py:459 stock/models.py:373 +#: stock/templates/stock/item_base.html:224 +msgid "Base Part" +msgstr "" + +#: company/models.py:312 company/models.py:463 order/views.py:1372 +msgid "Select part" +msgstr "" + +#: company/models.py:323 company/templates/company/detail.html:57 +#: company/templates/company/manufacturer_part_base.html:85 +#: company/templates/company/manufacturer_part_detail.html:25 +#: company/templates/company/supplier_part_base.html:93 +#: company/templates/company/supplier_part_detail.html:34 part/bom.py:170 +#: part/bom.py:241 stock/templates/stock/item_base.html:341 +#: templates/js/company.js:44 templates/js/company.js:165 +#: templates/js/company.js:289 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:337 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:343 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:469 company/templates/company/detail.html:62 +#: company/templates/company/supplier_part_base.html:83 +#: company/templates/company/supplier_part_detail.html:25 order/models.py:190 +#: order/templates/order/order_base.html:92 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:175 +#: part/bom.py:286 stock/templates/stock/item_base.html:353 +#: templates/js/company.js:48 templates/js/company.js:263 +#: templates/js/order.js:170 +msgid "Supplier" +msgstr "" + +#: company/models.py:470 +msgid "Select supplier" +msgstr "" + +#: company/models.py:475 company/templates/company/supplier_part_base.html:87 +#: company/templates/company/supplier_part_detail.html:26 +#: order/templates/order/purchase_order_detail.html:174 part/bom.py:176 +#: part/bom.py:287 +msgid "SKU" +msgstr "" + +#: company/models.py:476 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:482 +#: company/templates/company/manufacturer_part_base.html:6 +#: company/templates/company/manufacturer_part_base.html:19 +#: stock/templates/stock/item_base.html:346 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:483 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:489 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:366 +#: company/models.py:495 msgid "Supplier part description" msgstr "" -#: company/models.py:371 company/templates/company/supplier_part_base.html:113 +#: company/models.py:500 company/templates/company/supplier_part_base.html:114 #: company/templates/company/supplier_part_detail.html:38 part/models.py:2170 #: report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" msgstr "" -#: company/models.py:375 +#: company/models.py:504 msgid "base cost" msgstr "" -#: company/models.py:375 +#: company/models.py:504 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:377 company/templates/company/supplier_part_base.html:106 -#: stock/models.py:395 stock/templates/stock/item_base.html:295 +#: company/models.py:506 company/templates/company/supplier_part_base.html:107 +#: stock/models.py:397 stock/templates/stock/item_base.html:299 #: templates/js/stock.js:667 msgid "Packaging" msgstr "" -#: company/models.py:377 +#: company/models.py:506 msgid "Part packaging" msgstr "" -#: company/models.py:379 +#: company/models.py:508 msgid "multiple" msgstr "" -#: company/models.py:379 +#: company/models.py:508 msgid "Order multiple" msgstr "" #: company/templates/company/assigned_stock.html:10 -#: company/templates/company/navbar.html:51 -#: company/templates/company/navbar.html:54 templates/js/build.js:411 +#: company/templates/company/navbar.html:62 +#: company/templates/company/navbar.html:65 templates/js/build.js:411 msgid "Assigned Stock" msgstr "" #: company/templates/company/company_base.html:9 #: company/templates/company/company_base.html:35 -#: templates/InvenTree/search.html:288 templates/js/company.js:33 +#: templates/InvenTree/search.html:304 templates/js/company.js:33 msgid "Company" msgstr "" @@ -1895,7 +1934,7 @@ msgstr "" msgid "Edit company information" msgstr "" -#: company/templates/company/company_base.html:56 company/views.py:324 +#: company/templates/company/company_base.html:56 company/views.py:326 msgid "Delete Company" msgstr "" @@ -1926,83 +1965,80 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/templates/company/detail.html:34 +#: company/templates/company/detail.html:36 msgid "No website specified" msgstr "" -#: company/templates/company/detail.html:43 +#: company/templates/company/detail.html:45 msgid "Uses default currency" msgstr "" -#: company/templates/company/detail.html:65 order/models.py:440 -#: order/templates/order/sales_order_base.html:92 stock/models.py:413 -#: stock/models.py:414 stock/templates/stock/item_base.html:247 +#: company/templates/company/detail.html:67 order/models.py:440 +#: order/templates/order/sales_order_base.html:92 stock/models.py:415 +#: stock/models.py:416 stock/templates/stock/item_base.html:251 #: templates/js/company.js:40 templates/js/order.js:267 msgid "Customer" msgstr "" -#: company/templates/company/detail_part.html:10 -#: templates/InvenTree/search.html:148 -msgid "Supplier Parts" +#: company/templates/company/detail_manufacturer_part.html:11 +#: templates/InvenTree/search.html:149 +msgid "Manufacturer Parts" msgstr "" -#: company/templates/company/detail_part.html:20 -#: order/templates/order/order_wizard/select_parts.html:42 -#: order/templates/order/purchase_order_detail.html:75 -msgid "Create new supplier part" +#: company/templates/company/detail_manufacturer_part.html:22 +msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail_part.html:21 -#: order/templates/order/purchase_order_detail.html:74 -#: part/templates/part/supplier.html:17 templates/js/stock.js:1086 -msgid "New Supplier Part" +#: company/templates/company/detail_manufacturer_part.html:23 +#: part/templates/part/manufacturer.html:19 +msgid "New Manufacturer Part" msgstr "" -#: company/templates/company/detail_part.html:26 -#: part/templates/part/category.html:122 part/templates/part/supplier.html:20 +#: company/templates/company/detail_manufacturer_part.html:28 +#: company/templates/company/detail_supplier_part.html:27 +#: company/templates/company/manufacturer_part_suppliers.html:20 +#: part/templates/part/category.html:122 +#: part/templates/part/manufacturer.html:22 +#: part/templates/part/supplier.html:20 msgid "Options" msgstr "" -#: company/templates/company/detail_part.html:31 +#: company/templates/company/detail_manufacturer_part.html:33 +#: company/templates/company/detail_supplier_part.html:32 #: part/templates/part/category.html:127 msgid "Order parts" msgstr "" -#: company/templates/company/detail_part.html:34 +#: company/templates/company/detail_manufacturer_part.html:36 +#: company/templates/company/detail_supplier_part.html:35 msgid "Delete parts" msgstr "" -#: company/templates/company/detail_part.html:34 +#: company/templates/company/detail_manufacturer_part.html:36 +#: company/templates/company/detail_supplier_part.html:35 msgid "Delete Parts" msgstr "" -#: company/templates/company/detail_part.html:66 +#: company/templates/company/detail_manufacturer_part.html:66 +#: company/templates/company/detail_supplier_part.html:66 #: part/templates/part/bom.html:159 part/templates/part/category.html:118 #: templates/js/stock.js:1080 msgid "New Part" msgstr "" -#: company/templates/company/detail_part.html:67 +#: company/templates/company/detail_manufacturer_part.html:67 +#: company/templates/company/detail_supplier_part.html:67 msgid "Create new Part" msgstr "" -#: company/templates/company/detail_part.html:72 company/views.py:62 -#: order/templates/order/purchase_orders.html:183 -#: part/templates/part/supplier.html:50 -msgid "New Supplier" -msgstr "" - -#: company/templates/company/detail_part.html:73 company/views.py:279 -#: order/templates/order/purchase_orders.html:184 -msgid "Create new Supplier" -msgstr "" - -#: company/templates/company/detail_part.html:78 company/views.py:69 +#: company/templates/company/detail_manufacturer_part.html:72 +#: company/views.py:71 part/templates/part/manufacturer.html:52 #: part/templates/part/supplier.html:56 msgid "New Manufacturer" msgstr "" -#: company/templates/company/detail_part.html:79 company/views.py:282 +#: company/templates/company/detail_manufacturer_part.html:73 +#: company/views.py:284 msgid "Create new Manufacturer" msgstr "" @@ -2017,67 +2053,168 @@ msgstr "" msgid "Export" msgstr "" +#: company/templates/company/detail_supplier_part.html:11 +#: company/templates/company/manufacturer_part_navbar.html:11 +#: company/templates/company/manufacturer_part_suppliers.html:10 +#: templates/InvenTree/search.html:164 +msgid "Supplier Parts" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:21 +#: order/templates/order/order_wizard/select_parts.html:42 +#: order/templates/order/purchase_order_detail.html:75 +msgid "Create new supplier part" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:22 +#: company/templates/company/manufacturer_part_suppliers.html:17 +#: order/templates/order/purchase_order_detail.html:74 +#: part/templates/part/supplier.html:17 templates/js/stock.js:1086 +msgid "New Supplier Part" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:72 +#: company/templates/company/manufacturer_part_suppliers.html:47 +#: company/views.py:64 order/templates/order/purchase_orders.html:183 +#: part/templates/part/supplier.html:50 +msgid "New Supplier" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:73 company/views.py:281 +#: order/templates/order/purchase_orders.html:184 +msgid "Create new Supplier" +msgstr "" + #: company/templates/company/index.html:7 msgid "Supplier List" msgstr "" -#: company/templates/company/navbar.html:20 -msgid "Supplied Parts" +#: company/templates/company/manufacturer_part_base.html:36 +#: company/templates/company/supplier_part_base.html:35 +#: company/templates/company/supplier_part_orders.html:17 +#: part/templates/part/orders.html:17 part/templates/part/part_base.html:65 +msgid "Order part" msgstr "" -#: company/templates/company/navbar.html:23 -#: order/templates/order/receive_parts.html:14 part/api.py:40 -#: part/models.py:322 part/templates/part/cat_link.html:7 -#: part/templates/part/category.html:95 -#: part/templates/part/category_navbar.html:11 -#: part/templates/part/category_navbar.html:14 -#: part/templates/part/category_partlist.html:10 -#: templates/InvenTree/index.html:96 templates/InvenTree/search.html:113 -#: templates/InvenTree/settings/tabs.html:25 templates/navbar.html:23 -#: templates/stats.html:59 templates/stats.html:68 users/models.py:38 -msgid "Parts" +#: company/templates/company/manufacturer_part_base.html:41 +msgid "Edit manufacturer part" msgstr "" -#: company/templates/company/navbar.html:27 part/templates/part/navbar.html:33 -#: stock/templates/stock/location.html:100 -#: stock/templates/stock/location.html:115 templates/InvenTree/search.html:182 -#: templates/stats.html:72 templates/stats.html:81 users/models.py:40 -msgid "Stock Items" +#: company/templates/company/manufacturer_part_base.html:45 +msgid "Delete manufacturer part" msgstr "" -#: company/templates/company/navbar.html:30 -#: company/templates/company/part_navbar.html:14 +#: company/templates/company/manufacturer_part_base.html:57 +#: company/templates/company/manufacturer_part_detail.html:10 +msgid "Manufacturer Part Details" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:62 +#: company/templates/company/manufacturer_part_detail.html:18 +#: company/templates/company/supplier_part_base.html:60 +#: company/templates/company/supplier_part_detail.html:18 +msgid "Internal Part" +msgstr "" + +#: company/templates/company/manufacturer_part_delete.html:6 +msgid "Are you sure you want to delete the following Manufacturer Parts?" +msgstr "" + +#: company/templates/company/manufacturer_part_delete.html:36 +#, python-format +msgid "" +"There are %(count)s suppliers defined for this manufacturer part. If you " +"delete it, the following supplier parts will also be deleted:" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:14 +#: company/views.py:63 part/templates/part/navbar.html:78 +#: part/templates/part/navbar.html:81 templates/InvenTree/search.html:316 +#: templates/navbar.html:35 +msgid "Suppliers" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:19 +msgid "Manufacturer Part Stock" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:22 +#: company/templates/company/navbar.html:41 +#: company/templates/company/supplier_part_navbar.html:15 #: part/templates/part/navbar.html:36 stock/api.py:51 #: stock/templates/stock/loc_link.html:7 stock/templates/stock/location.html:29 #: stock/templates/stock/stock_app_base.html:9 -#: templates/InvenTree/index.html:127 templates/InvenTree/search.html:180 -#: templates/InvenTree/search.html:216 +#: templates/InvenTree/index.html:127 templates/InvenTree/search.html:196 +#: templates/InvenTree/search.html:232 #: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:172 #: templates/js/part.js:397 templates/js/stock.js:563 templates/navbar.html:26 msgid "Stock" msgstr "" -#: company/templates/company/navbar.html:36 -#: company/templates/company/navbar.html:45 -#: company/templates/company/navbar.html:48 +#: company/templates/company/manufacturer_part_navbar.html:26 +msgid "Manufacturer Part Orders" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:29 +#: company/templates/company/supplier_part_navbar.html:22 +msgid "Orders" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:22 +#: part/templates/part/supplier.html:22 +msgid "Delete supplier parts" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:22 +#: part/templates/part/manufacturer.html:24 part/templates/part/params.html:44 +#: part/templates/part/related.html:44 part/templates/part/supplier.html:22 +#: stock/views.py:1002 users/models.py:183 +msgid "Delete" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:48 +#: part/templates/part/supplier.html:51 +msgid "Create new supplier" +msgstr "" + +#: company/templates/company/navbar.html:20 +#: company/templates/company/navbar.html:23 +msgid "Manufactured Parts" +msgstr "" + +#: company/templates/company/navbar.html:29 +#: company/templates/company/navbar.html:32 +msgid "Supplied Parts" +msgstr "" + +#: company/templates/company/navbar.html:38 part/templates/part/navbar.html:33 +#: stock/templates/stock/location.html:100 +#: stock/templates/stock/location.html:115 templates/InvenTree/search.html:198 +#: templates/stats.html:72 templates/stats.html:81 users/models.py:40 +msgid "Stock Items" +msgstr "" + +#: company/templates/company/navbar.html:47 +#: company/templates/company/navbar.html:56 +#: company/templates/company/navbar.html:59 #: company/templates/company/sales_orders.html:11 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:13 -#: part/templates/part/navbar.html:92 part/templates/part/navbar.html:95 +#: part/templates/part/navbar.html:98 part/templates/part/navbar.html:101 #: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:227 -#: templates/InvenTree/search.html:330 +#: templates/InvenTree/search.html:345 #: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46 #: users/models.py:43 msgid "Sales Orders" msgstr "" -#: company/templates/company/navbar.html:39 +#: company/templates/company/navbar.html:50 #: company/templates/company/purchase_orders.html:10 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:13 -#: part/templates/part/navbar.html:78 part/templates/part/navbar.html:81 +#: part/templates/part/navbar.html:84 part/templates/part/navbar.html:87 #: part/templates/part/orders.html:10 templates/InvenTree/index.html:204 -#: templates/InvenTree/search.html:300 +#: templates/InvenTree/search.html:325 #: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37 #: users/models.py:42 msgid "Purchase Orders" @@ -2087,32 +2224,6 @@ msgstr "" msgid "Company Notes" msgstr "" -#: company/templates/company/part_navbar.html:11 -#: company/templates/company/supplier_part_stock.html:10 -msgid "Supplier Part Stock" -msgstr "" - -#: company/templates/company/part_navbar.html:18 -#: company/templates/company/supplier_part_orders.html:10 -msgid "Supplier Part Orders" -msgstr "" - -#: company/templates/company/part_navbar.html:21 -msgid "Orders" -msgstr "" - -#: company/templates/company/part_navbar.html:25 -msgid "Supplier Part Pricing" -msgstr "" - -#: company/templates/company/part_navbar.html:28 -msgid "Pricing" -msgstr "" - -#: company/templates/company/partdelete.html:5 -msgid "Are you sure you want to delete the following Supplier Parts?" -msgstr "" - #: company/templates/company/purchase_orders.html:18 #: order/templates/order/purchase_orders.html:20 msgid "Create new purchase order" @@ -2134,17 +2245,11 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/supplier_part_base.html:6 -#: company/templates/company/supplier_part_base.html:19 stock/models.py:380 -#: stock/templates/stock/item_base.html:342 templates/js/company.js:180 +#: company/templates/company/supplier_part_base.html:19 stock/models.py:382 +#: stock/templates/stock/item_base.html:358 templates/js/company.js:279 msgid "Supplier Part" msgstr "" -#: company/templates/company/supplier_part_base.html:35 -#: company/templates/company/supplier_part_orders.html:17 -#: part/templates/part/orders.html:17 part/templates/part/part_base.html:64 -msgid "Order part" -msgstr "" - #: company/templates/company/supplier_part_base.html:39 msgid "Edit supplier part" msgstr "" @@ -2158,9 +2263,26 @@ msgstr "" msgid "Supplier Part Details" msgstr "" -#: company/templates/company/supplier_part_base.html:60 -#: company/templates/company/supplier_part_detail.html:18 -msgid "Internal Part" +#: company/templates/company/supplier_part_delete.html:5 +msgid "Are you sure you want to delete the following Supplier Parts?" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part_stock.html:10 +msgid "Supplier Part Stock" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part_orders.html:10 +msgid "Supplier Part Orders" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:26 +msgid "Supplier Part Pricing" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:29 +msgid "Pricing" msgstr "" #: company/templates/company/supplier_part_orders.html:18 @@ -2172,8 +2294,8 @@ msgstr "" msgid "Pricing Information" msgstr "" -#: company/templates/company/supplier_part_pricing.html:19 company/views.py:569 -#: part/templates/part/sale_prices.html:17 part/views.py:2618 +#: company/templates/company/supplier_part_pricing.html:19 company/views.py:794 +#: part/templates/part/sale_prices.html:17 part/views.py:2624 msgid "Add Price Break" msgstr "" @@ -2192,99 +2314,106 @@ msgstr "" msgid "Delete price break" msgstr "" -#: company/views.py:61 part/templates/part/navbar.html:72 -#: part/templates/part/navbar.html:75 templates/InvenTree/search.html:291 -#: templates/navbar.html:35 -msgid "Suppliers" -msgstr "" - -#: company/views.py:68 templates/InvenTree/search.html:308 +#: company/views.py:70 part/templates/part/navbar.html:72 +#: part/templates/part/navbar.html:75 templates/InvenTree/search.html:306 #: templates/navbar.html:36 msgid "Manufacturers" msgstr "" -#: company/views.py:75 templates/InvenTree/search.html:321 +#: company/views.py:77 templates/InvenTree/search.html:336 #: templates/navbar.html:45 msgid "Customers" msgstr "" -#: company/views.py:76 order/templates/order/sales_orders.html:185 +#: company/views.py:78 order/templates/order/sales_orders.html:185 msgid "New Customer" msgstr "" -#: company/views.py:84 +#: company/views.py:86 msgid "Companies" msgstr "" -#: company/views.py:85 +#: company/views.py:87 msgid "New Company" msgstr "" -#: company/views.py:167 part/views.py:848 +#: company/views.py:169 part/views.py:848 msgid "Download Image" msgstr "" -#: company/views.py:196 part/views.py:880 +#: company/views.py:198 part/views.py:880 msgid "Image size exceeds maximum allowable size for download" msgstr "" -#: company/views.py:212 part/views.py:896 +#: company/views.py:214 part/views.py:896 msgid "Supplied URL is not a valid image file" msgstr "" -#: company/views.py:241 +#: company/views.py:243 msgid "Update Company Image" msgstr "" -#: company/views.py:247 +#: company/views.py:249 msgid "Updated company image" msgstr "" -#: company/views.py:257 +#: company/views.py:259 msgid "Edit Company" msgstr "" -#: company/views.py:262 +#: company/views.py:264 msgid "Edited company information" msgstr "" -#: company/views.py:285 order/templates/order/sales_orders.html:186 +#: company/views.py:287 order/templates/order/sales_orders.html:186 msgid "Create new Customer" msgstr "" -#: company/views.py:287 +#: company/views.py:289 msgid "Create new Company" msgstr "" -#: company/views.py:314 +#: company/views.py:316 msgid "Created new company" msgstr "" -#: company/views.py:330 +#: company/views.py:332 msgid "Company was deleted" msgstr "" -#: company/views.py:355 +#: company/views.py:357 +msgid "Edit Manufacturer Part" +msgstr "" + +#: company/views.py:366 +msgid "Create New Manufacturer Part" +msgstr "" + +#: company/views.py:440 +msgid "Delete Manufacturer Part" +msgstr "" + +#: company/views.py:528 msgid "Edit Supplier Part" msgstr "" -#: company/views.py:378 templates/js/stock.js:1087 +#: company/views.py:578 templates/js/stock.js:1087 msgid "Create new Supplier Part" msgstr "" -#: company/views.py:497 +#: company/views.py:722 msgid "Delete Supplier Part" msgstr "" -#: company/views.py:574 part/views.py:2622 +#: company/views.py:799 part/views.py:2628 msgid "Added new price break" msgstr "" -#: company/views.py:630 part/views.py:2666 +#: company/views.py:855 part/views.py:2672 msgid "Edit Price Break" msgstr "" -#: company/views.py:645 part/views.py:2680 +#: company/views.py:870 part/views.py:2686 msgid "Delete Price Break" msgstr "" @@ -2332,11 +2461,11 @@ msgstr "" msgid "Label height, specified in mm" msgstr "" -#: label/models.py:222 label/models.py:273 +#: label/models.py:222 label/models.py:275 msgid "Query filters (comma-separated list of key=value pairs" msgstr "" -#: label/models.py:223 label/models.py:274 report/models.py:294 +#: label/models.py:223 label/models.py:276 report/models.py:294 #: report/models.py:415 report/models.py:449 msgid "Filters" msgstr "" @@ -2454,7 +2583,7 @@ msgid "Date order was completed" msgstr "" #: order/models.py:243 order/models.py:342 part/views.py:1586 -#: stock/models.py:270 stock/models.py:950 +#: stock/models.py:270 stock/models.py:952 msgid "Quantity must be greater than zero" msgstr "" @@ -2515,7 +2644,7 @@ msgstr "" #: order/models.py:624 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:24 #: report/templates/report/inventree_po_report.html:77 -#: stock/templates/stock/item_base.html:309 templates/js/order.js:148 +#: stock/templates/stock/item_base.html:313 templates/js/order.js:148 msgid "Purchase Order" msgstr "" @@ -2524,7 +2653,7 @@ msgid "Supplier part" msgstr "" #: order/models.py:641 order/templates/order/order_base.html:131 -#: order/templates/order/purchase_order_detail.html:207 +#: order/templates/order/purchase_order_detail.html:214 #: order/templates/order/receive_parts.html:22 #: order/templates/order/sales_order_base.html:131 msgid "Received" @@ -2534,8 +2663,8 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:648 stock/models.py:506 -#: stock/templates/stock/item_base.html:316 +#: order/models.py:648 stock/models.py:508 +#: stock/templates/stock/item_base.html:320 msgid "Purchase Price" msgstr "" @@ -2632,6 +2761,14 @@ msgstr "" msgid "Mark this order as complete?" msgstr "" +#: order/templates/order/order_complete.html:10 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: order/templates/order/order_complete.html:11 +msgid "Marking this order as complete will remove these line items." +msgstr "" + #: order/templates/order/order_issue.html:7 msgid "" "After placing this purchase order, line items will no longer be editable." @@ -2658,7 +2795,8 @@ msgid "Select Supplier" msgstr "" #: order/templates/order/order_wizard/select_parts.html:57 -msgid "Select a supplier for" +#, python-format +msgid "Select a supplier for %(name)s" msgstr "" #: order/templates/order/order_wizard/select_parts.html:69 @@ -2684,11 +2822,13 @@ msgid "Select Purchase Order" msgstr "" #: order/templates/order/order_wizard/select_pos.html:45 -msgid "Create new purchase order for {{ supplier.name }}" +#, python-format +msgid "Create new purchase order for %(name)s" msgstr "" #: order/templates/order/order_wizard/select_pos.html:68 -msgid "Select a purchase order for" +#, python-format +msgid "Select a purchase order for %(name)s" msgstr "" #: order/templates/order/po_attachments.html:12 @@ -2733,20 +2873,20 @@ msgstr "" msgid "No line items found" msgstr "" -#: order/templates/order/purchase_order_detail.html:198 +#: order/templates/order/purchase_order_detail.html:205 msgid "Unit Price" msgstr "" -#: order/templates/order/purchase_order_detail.html:239 +#: order/templates/order/purchase_order_detail.html:246 #: order/templates/order/sales_order_detail.html:294 msgid "Edit line item" msgstr "" -#: order/templates/order/purchase_order_detail.html:240 +#: order/templates/order/purchase_order_detail.html:247 msgid "Delete line item" msgstr "" -#: order/templates/order/purchase_order_detail.html:245 +#: order/templates/order/purchase_order_detail.html:252 msgid "Receive line item" msgstr "" @@ -2756,7 +2896,20 @@ msgid "Print Order Reports" msgstr "" #: order/templates/order/receive_parts.html:8 -msgid "Receive outstanding parts for" +#, python-format +msgid "Receive outstanding parts for %(order)s - %(desc)s" +msgstr "" + +#: order/templates/order/receive_parts.html:14 part/api.py:40 +#: part/models.py:322 part/templates/part/cat_link.html:7 +#: part/templates/part/category.html:95 +#: part/templates/part/category_navbar.html:11 +#: part/templates/part/category_navbar.html:14 +#: part/templates/part/category_partlist.html:10 +#: templates/InvenTree/index.html:96 templates/InvenTree/search.html:114 +#: templates/InvenTree/settings/tabs.html:25 templates/navbar.html:23 +#: templates/stats.html:59 templates/stats.html:68 users/models.py:38 +msgid "Parts" msgstr "" #: order/templates/order/receive_parts.html:15 @@ -2768,7 +2921,7 @@ msgid "Order Code" msgstr "" #: order/templates/order/receive_parts.html:21 -#: part/templates/part/part_base.html:128 templates/js/part.js:413 +#: part/templates/part/part_base.html:129 templates/js/part.js:413 msgid "On Order" msgstr "" @@ -2815,12 +2968,12 @@ msgstr "" #: order/templates/order/sales_order_detail.html:75 #: order/templates/order/sales_order_detail.html:157 #: report/templates/report/inventree_test_report_base.html:75 -#: stock/models.py:418 stock/templates/stock/item_base.html:234 +#: stock/models.py:420 stock/templates/stock/item_base.html:238 #: templates/js/build.js:418 msgid "Serial Number" msgstr "" -#: order/templates/order/sales_order_detail.html:92 templates/js/bom.js:338 +#: order/templates/order/sales_order_detail.html:92 templates/js/bom.js:342 #: templates/js/build.js:571 templates/js/build.js:984 msgid "Actions" msgstr "" @@ -3079,20 +3232,20 @@ msgstr "" msgid "Default Location" msgstr "" -#: part/bom.py:139 part/templates/part/part_base.html:116 +#: part/bom.py:139 part/templates/part/part_base.html:117 msgid "Available Stock" msgstr "" -#: part/bom.py:278 +#: part/bom.py:379 #, python-brace-format msgid "Unsupported file format: {f}" msgstr "" -#: part/bom.py:283 +#: part/bom.py:384 msgid "Error reading BOM file (invalid data)" msgstr "" -#: part/bom.py:285 +#: part/bom.py:386 msgid "Error reading BOM file (incorrect row size)" msgstr "" @@ -3137,94 +3290,102 @@ msgid "Include part stock data in exported BOM" msgstr "" #: part/forms.py:99 -msgid "Include Supplier Data" +msgid "Include Manufacturer Data" msgstr "" #: part/forms.py:99 +msgid "Include part manufacturer data in exported BOM" +msgstr "" + +#: part/forms.py:101 +msgid "Include Supplier Data" +msgstr "" + +#: part/forms.py:101 msgid "Include part supplier data in exported BOM" msgstr "" -#: part/forms.py:120 part/models.py:2057 +#: part/forms.py:122 part/models.py:2057 msgid "Parent Part" msgstr "" -#: part/forms.py:121 part/templates/part/bom_duplicate.html:7 +#: part/forms.py:123 part/templates/part/bom_duplicate.html:7 msgid "Select parent part to copy BOM from" msgstr "" -#: part/forms.py:127 +#: part/forms.py:129 msgid "Clear existing BOM items" msgstr "" -#: part/forms.py:133 +#: part/forms.py:135 msgid "Confirm BOM duplication" msgstr "" -#: part/forms.py:151 +#: part/forms.py:153 msgid "validate" msgstr "" -#: part/forms.py:151 +#: part/forms.py:153 msgid "Confirm that the BOM is correct" msgstr "" -#: part/forms.py:163 +#: part/forms.py:165 msgid "BOM file" msgstr "" -#: part/forms.py:163 +#: part/forms.py:165 msgid "Select BOM file to upload" msgstr "" -#: part/forms.py:182 +#: part/forms.py:184 msgid "Related Part" msgstr "" -#: part/forms.py:201 +#: part/forms.py:203 msgid "Select part category" msgstr "" -#: part/forms.py:218 +#: part/forms.py:220 msgid "Duplicate all BOM data for this part" msgstr "" -#: part/forms.py:219 +#: part/forms.py:221 msgid "Copy BOM" msgstr "" -#: part/forms.py:224 +#: part/forms.py:226 msgid "Duplicate all parameter data for this part" msgstr "" -#: part/forms.py:225 +#: part/forms.py:227 msgid "Copy Parameters" msgstr "" -#: part/forms.py:230 +#: part/forms.py:232 msgid "Confirm part creation" msgstr "" -#: part/forms.py:235 +#: part/forms.py:237 msgid "Include category parameter templates" msgstr "" -#: part/forms.py:240 +#: part/forms.py:242 msgid "Include parent categories parameter templates" msgstr "" -#: part/forms.py:320 +#: part/forms.py:322 msgid "Add parameter template to same level categories" msgstr "" -#: part/forms.py:324 +#: part/forms.py:326 msgid "Add parameter template to all categories" msgstr "" -#: part/forms.py:342 part/models.py:2151 +#: part/forms.py:344 part/models.py:2151 msgid "Sub part" msgstr "" -#: part/forms.py:370 +#: part/forms.py:372 msgid "Input quantity for price calculation" msgstr "" @@ -3247,7 +3408,7 @@ msgstr "" #: part/models.py:83 part/templates/part/category.html:19 #: part/templates/part/category.html:90 part/templates/part/category.html:141 -#: templates/InvenTree/search.html:126 templates/stats.html:63 +#: templates/InvenTree/search.html:127 templates/stats.html:63 #: users/models.py:37 msgid "Part Categories" msgstr "" @@ -3320,7 +3481,7 @@ msgid "Part category" msgstr "" #: part/models.py:730 part/templates/part/detail.html:28 -#: part/templates/part/part_base.html:93 templates/js/part.js:160 +#: part/templates/part/part_base.html:94 templates/js/part.js:160 msgid "IPN" msgstr "" @@ -3558,7 +3719,7 @@ msgstr "" msgid "BOM line checksum" msgstr "" -#: part/models.py:2176 templates/js/bom.js:275 templates/js/bom.js:282 +#: part/models.py:2176 templates/js/bom.js:279 templates/js/bom.js:286 #: templates/js/table_filters.js:50 msgid "Inherited" msgstr "" @@ -3663,7 +3824,7 @@ msgstr "" msgid "Validate Bill of Materials" msgstr "" -#: part/templates/part/bom.html:61 part/views.py:1883 +#: part/templates/part/bom.html:61 part/views.py:1887 msgid "Export Bill of Materials" msgstr "" @@ -3800,7 +3961,7 @@ msgstr "" msgid "All parts" msgstr "" -#: part/templates/part/category.html:25 part/views.py:2264 +#: part/templates/part/category.html:25 part/views.py:2270 msgid "Create new part category" msgstr "" @@ -3874,12 +4035,8 @@ msgid "Are you sure you want to delete category" msgstr "" #: part/templates/part/category_delete.html:8 -#: part/templates/part/category_delete.html:25 -msgid "This category contains" -msgstr "" - -#: part/templates/part/category_delete.html:8 -msgid "child categories" +#, python-format +msgid "This category contains %(count)s child categories" msgstr "" #: part/templates/part/category_delete.html:9 @@ -3896,12 +4053,15 @@ msgid "top level Parts category" msgstr "" #: part/templates/part/category_delete.html:25 -msgid "parts" +#, python-format +msgid "This category contains %(count)s parts" msgstr "" #: part/templates/part/category_delete.html:27 +#, python-format msgid "" -"If this category is deleted, these parts will be moved to the parent category" +"If this category is deleted, these parts will be moved to the parent " +"category %(path)s" msgstr "" #: part/templates/part/category_delete.html:29 @@ -3926,7 +4086,8 @@ msgid "Duplicate Part" msgstr "" #: part/templates/part/copy_part.html:10 -msgid "Make a copy of part" +#, python-format +msgid "Make a copy of part '%(full_name)s'." msgstr "" #: part/templates/part/copy_part.html:14 @@ -3939,8 +4100,9 @@ msgstr "" msgid "The new part may be a duplicate of these existing parts" msgstr "" -#: part/templates/part/create_part.html:16 -msgid "match" +#: part/templates/part/create_part.html:17 +#, python-format +msgid "%(full_name)s - %(desc)s (%(match_per)s%% match)" msgstr "" #: part/templates/part/detail.html:11 part/templates/part/navbar.html:11 @@ -4023,6 +4185,19 @@ msgstr "" msgid "Part is not active" msgstr "" +#: part/templates/part/manufacturer.html:11 +msgid "Part Manufacturers" +msgstr "" + +#: part/templates/part/manufacturer.html:24 +msgid "Delete manufacturer parts" +msgstr "" + +#: part/templates/part/manufacturer.html:53 +#: part/templates/part/supplier.html:57 +msgid "Create new manufacturer" +msgstr "" + #: part/templates/part/navbar.html:26 part/templates/part/variants.html:11 msgid "Part Variants" msgstr "" @@ -4043,28 +4218,28 @@ msgstr "" msgid "Used In" msgstr "" -#: part/templates/part/navbar.html:86 +#: part/templates/part/navbar.html:92 msgid "Sales Price Information" msgstr "" -#: part/templates/part/navbar.html:89 +#: part/templates/part/navbar.html:95 msgid "Sale Price" msgstr "" -#: part/templates/part/navbar.html:100 part/templates/part/part_tests.html:10 +#: part/templates/part/navbar.html:106 part/templates/part/part_tests.html:10 msgid "Part Test Templates" msgstr "" -#: part/templates/part/navbar.html:103 stock/templates/stock/item_base.html:382 +#: part/templates/part/navbar.html:109 stock/templates/stock/item_base.html:398 msgid "Tests" msgstr "" -#: part/templates/part/navbar.html:107 part/templates/part/navbar.html:110 +#: part/templates/part/navbar.html:113 part/templates/part/navbar.html:116 #: part/templates/part/related.html:10 msgid "Related Parts" msgstr "" -#: part/templates/part/navbar.html:119 part/templates/part/notes.html:12 +#: part/templates/part/navbar.html:125 part/templates/part/notes.html:12 msgid "Part Notes" msgstr "" @@ -4080,7 +4255,7 @@ msgstr "" #: part/templates/part/params.html:28 #: report/templates/report/inventree_test_report_base.html:90 -#: stock/models.py:1652 templates/InvenTree/settings/header.html:8 +#: stock/models.py:1654 templates/InvenTree/settings/header.html:8 #: templates/js/stock.js:124 msgid "Value" msgstr "" @@ -4089,11 +4264,6 @@ msgstr "" msgid "Edit" msgstr "" -#: part/templates/part/params.html:44 part/templates/part/related.html:44 -#: part/templates/part/supplier.html:22 stock/views.py:1002 users/models.py:182 -msgid "Delete" -msgstr "" - #: part/templates/part/params.html:68 msgid "New Template" msgstr "" @@ -4106,124 +4276,126 @@ msgstr "" msgid "Part List" msgstr "" -#: part/templates/part/part_base.html:17 -msgid "This part is a variant of" +#: part/templates/part/part_base.html:18 +#, python-format +msgid "This part is a variant of %(link)s" msgstr "" -#: part/templates/part/part_base.html:32 templates/js/company.js:155 -#: templates/js/part.js:75 templates/js/part.js:152 +#: part/templates/part/part_base.html:33 templates/js/company.js:156 +#: templates/js/company.js:254 templates/js/part.js:75 templates/js/part.js:152 msgid "Inactive" msgstr "" -#: part/templates/part/part_base.html:39 +#: part/templates/part/part_base.html:40 msgid "Star this part" msgstr "" -#: part/templates/part/part_base.html:46 -#: stock/templates/stock/item_base.html:127 +#: part/templates/part/part_base.html:47 +#: stock/templates/stock/item_base.html:131 #: stock/templates/stock/location.html:44 msgid "Barcode actions" msgstr "" -#: part/templates/part/part_base.html:48 -#: stock/templates/stock/item_base.html:129 +#: part/templates/part/part_base.html:49 +#: stock/templates/stock/item_base.html:133 #: stock/templates/stock/location.html:46 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" -#: part/templates/part/part_base.html:49 -#: stock/templates/stock/item_base.html:145 +#: part/templates/part/part_base.html:50 +#: stock/templates/stock/item_base.html:149 #: stock/templates/stock/location.html:47 msgid "Print Label" msgstr "" -#: part/templates/part/part_base.html:54 +#: part/templates/part/part_base.html:55 msgid "Show pricing information" msgstr "" -#: part/templates/part/part_base.html:58 +#: part/templates/part/part_base.html:59 msgid "Count part stock" msgstr "" -#: part/templates/part/part_base.html:73 +#: part/templates/part/part_base.html:74 msgid "Part actions" msgstr "" -#: part/templates/part/part_base.html:76 +#: part/templates/part/part_base.html:77 msgid "Duplicate part" msgstr "" -#: part/templates/part/part_base.html:79 +#: part/templates/part/part_base.html:80 msgid "Edit part" msgstr "" -#: part/templates/part/part_base.html:82 +#: part/templates/part/part_base.html:83 msgid "Delete part" msgstr "" -#: part/templates/part/part_base.html:122 templates/js/table_filters.js:134 +#: part/templates/part/part_base.html:123 templates/js/table_filters.js:134 msgid "In Stock" msgstr "" -#: part/templates/part/part_base.html:135 templates/InvenTree/index.html:130 +#: part/templates/part/part_base.html:136 templates/InvenTree/index.html:130 msgid "Required for Build Orders" msgstr "" -#: part/templates/part/part_base.html:142 +#: part/templates/part/part_base.html:143 msgid "Required for Sales Orders" msgstr "" -#: part/templates/part/part_base.html:149 +#: part/templates/part/part_base.html:150 msgid "Allocated to Orders" msgstr "" -#: part/templates/part/part_base.html:164 templates/js/bom.js:296 +#: part/templates/part/part_base.html:165 templates/js/bom.js:300 msgid "Can Build" msgstr "" -#: part/templates/part/part_base.html:170 templates/js/part.js:417 +#: part/templates/part/part_base.html:171 templates/js/part.js:417 msgid "Building" msgstr "" -#: part/templates/part/part_base.html:249 +#: part/templates/part/part_base.html:250 msgid "Calculate" msgstr "" #: part/templates/part/part_pricing.html:8 -msgid "Pricing information for:" +#, python-format +msgid "Pricing information for:
                        %(part)s." msgstr "" -#: part/templates/part/part_pricing.html:24 +#: part/templates/part/part_pricing.html:23 msgid "Supplier Pricing" msgstr "" -#: part/templates/part/part_pricing.html:28 -#: part/templates/part/part_pricing.html:54 +#: part/templates/part/part_pricing.html:27 +#: part/templates/part/part_pricing.html:53 msgid "Unit Cost" msgstr "" -#: part/templates/part/part_pricing.html:34 -#: part/templates/part/part_pricing.html:60 +#: part/templates/part/part_pricing.html:33 +#: part/templates/part/part_pricing.html:59 msgid "Total Cost" msgstr "" -#: part/templates/part/part_pricing.html:42 +#: part/templates/part/part_pricing.html:41 msgid "No supplier pricing available" msgstr "" -#: part/templates/part/part_pricing.html:50 +#: part/templates/part/part_pricing.html:49 msgid "BOM Pricing" msgstr "" -#: part/templates/part/part_pricing.html:68 +#: part/templates/part/part_pricing.html:67 msgid "Note: BOM pricing is incomplete for this part" msgstr "" -#: part/templates/part/part_pricing.html:75 +#: part/templates/part/part_pricing.html:74 msgid "No BOM pricing available" msgstr "" -#: part/templates/part/part_pricing.html:85 +#: part/templates/part/part_pricing.html:84 msgid "No pricing information is available for this part." msgstr "" @@ -4235,6 +4407,46 @@ msgstr "" msgid "Select from existing images" msgstr "" +#: part/templates/part/partial_delete.html:7 +#, python-format +msgid "Are you sure you want to delete part '%(full_name)s'?" +msgstr "" + +#: part/templates/part/partial_delete.html:12 +#, python-format +msgid "" +"This part is used in BOMs for %(count)s other parts. If you delete this " +"part, the BOMs for the following parts will be updated" +msgstr "" + +#: part/templates/part/partial_delete.html:22 +#, python-format +msgid "" +"There are %(count)s stock entries defined for this part. If you delete this " +"part, the following stock entries will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:33 +#, python-format +msgid "" +"There are %(count)s manufacturers defined for this part. If you delete this " +"part, the following manufacturer parts will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:44 +#, python-format +msgid "" +"There are %(count)s suppliers defined for this part. If you delete this " +"part, the following supplier parts will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:55 +#, python-format +msgid "" +"There are %(count)s unique parts tracked for '%(full_name)s'. Deleting this " +"part will permanently remove this tracking information." +msgstr "" + #: part/templates/part/related.html:18 msgid "Add Related" msgstr "" @@ -4260,7 +4472,8 @@ msgid "Part Stock" msgstr "" #: part/templates/part/stock.html:16 -msgid "Showing stock for all variants of" +#, python-format +msgid "Showing stock for all variants of %(full_name)s" msgstr "" #: part/templates/part/stock_count.html:7 templates/js/bom.js:239 @@ -4280,18 +4493,6 @@ msgstr "" msgid "Part Suppliers" msgstr "" -#: part/templates/part/supplier.html:22 -msgid "Delete supplier parts" -msgstr "" - -#: part/templates/part/supplier.html:51 -msgid "Create new supplier" -msgstr "" - -#: part/templates/part/supplier.html:57 -msgid "Create new manufacturer" -msgstr "" - #: part/templates/part/track.html:10 msgid "Part Tracking" msgstr "" @@ -4305,7 +4506,8 @@ msgid "Create new part variant" msgstr "" #: part/templates/part/variant_part.html:10 -msgid "Create a new variant of template" +#, python-format +msgid "Create a new variant of template '%(full_name)s'." msgstr "" #: part/templates/part/variants.html:19 @@ -4453,75 +4655,75 @@ msgstr "" msgid "Specify quantity" msgstr "" -#: part/views.py:1933 +#: part/views.py:1939 msgid "Confirm Part Deletion" msgstr "" -#: part/views.py:1940 +#: part/views.py:1946 msgid "Part was deleted" msgstr "" -#: part/views.py:1949 +#: part/views.py:1955 msgid "Part Pricing" msgstr "" -#: part/views.py:2063 +#: part/views.py:2069 msgid "Create Part Parameter Template" msgstr "" -#: part/views.py:2073 +#: part/views.py:2079 msgid "Edit Part Parameter Template" msgstr "" -#: part/views.py:2080 +#: part/views.py:2086 msgid "Delete Part Parameter Template" msgstr "" -#: part/views.py:2088 +#: part/views.py:2094 msgid "Create Part Parameter" msgstr "" -#: part/views.py:2138 +#: part/views.py:2144 msgid "Edit Part Parameter" msgstr "" -#: part/views.py:2152 +#: part/views.py:2158 msgid "Delete Part Parameter" msgstr "" -#: part/views.py:2212 +#: part/views.py:2218 msgid "Edit Part Category" msgstr "" -#: part/views.py:2250 +#: part/views.py:2256 msgid "Delete Part Category" msgstr "" -#: part/views.py:2256 +#: part/views.py:2262 msgid "Part category was deleted" msgstr "" -#: part/views.py:2308 +#: part/views.py:2314 msgid "Create Category Parameter Template" msgstr "" -#: part/views.py:2409 +#: part/views.py:2415 msgid "Edit Category Parameter Template" msgstr "" -#: part/views.py:2465 +#: part/views.py:2471 msgid "Delete Category Parameter Template" msgstr "" -#: part/views.py:2484 +#: part/views.py:2490 msgid "Create BOM Item" msgstr "" -#: part/views.py:2554 +#: part/views.py:2560 msgid "Edit BOM item" msgstr "" -#: part/views.py:2610 +#: part/views.py:2616 msgid "Confim BOM item deletion" msgstr "" @@ -4623,12 +4825,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:1640 +#: stock/models.py:1642 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:89 -#: stock/models.py:1646 +#: stock/models.py:1648 msgid "Result" msgstr "" @@ -4655,8 +4857,8 @@ msgstr "" msgid "Moved {n} parts to {loc}" msgstr "" -#: stock/forms.py:114 stock/forms.py:406 stock/models.py:473 -#: stock/templates/stock/item_base.html:349 templates/js/stock.js:656 +#: stock/forms.py:114 stock/forms.py:406 stock/models.py:475 +#: stock/templates/stock/item_base.html:365 templates/js/stock.js:656 msgid "Expiry Date" msgstr "" @@ -4746,11 +4948,11 @@ msgstr "" msgid "Set the destination as the default location for selected parts" msgstr "" -#: stock/models.py:54 stock/models.py:511 +#: stock/models.py:54 stock/models.py:513 msgid "Owner" msgstr "" -#: stock/models.py:55 stock/models.py:512 +#: stock/models.py:55 stock/models.py:514 msgid "Select Owner" msgstr "" @@ -4787,203 +4989,203 @@ msgstr "" msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:363 +#: stock/models.py:365 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:372 +#: stock/models.py:374 msgid "Base part" msgstr "" -#: stock/models.py:381 +#: stock/models.py:383 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:386 stock/templates/stock/stock_app_base.html:7 +#: stock/models.py:388 stock/templates/stock/stock_app_base.html:7 msgid "Stock Location" msgstr "" -#: stock/models.py:389 +#: stock/models.py:391 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:396 +#: stock/models.py:398 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:401 stock/templates/stock/item_base.html:255 +#: stock/models.py:403 stock/templates/stock/item_base.html:259 msgid "Installed In" msgstr "" -#: stock/models.py:404 +#: stock/models.py:406 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:420 +#: stock/models.py:422 msgid "Serial number for this item" msgstr "" -#: stock/models.py:432 +#: stock/models.py:434 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:436 +#: stock/models.py:438 msgid "Stock Quantity" msgstr "" -#: stock/models.py:445 +#: stock/models.py:447 msgid "Source Build" msgstr "" -#: stock/models.py:447 +#: stock/models.py:449 msgid "Build for this stock item" msgstr "" -#: stock/models.py:458 +#: stock/models.py:460 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:461 +#: stock/models.py:463 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:467 +#: stock/models.py:469 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:474 +#: stock/models.py:476 msgid "" "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Delete on deplete" msgstr "" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:497 stock/templates/stock/item_notes.html:13 +#: stock/models.py:499 stock/templates/stock/item_notes.html:13 #: stock/templates/stock/navbar.html:54 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:507 +#: stock/models.py:509 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:612 +#: stock/models.py:614 msgid "Assigned to Customer" msgstr "" -#: stock/models.py:614 +#: stock/models.py:616 msgid "Manually assigned to customer" msgstr "" -#: stock/models.py:627 +#: stock/models.py:629 msgid "Returned from customer" msgstr "" -#: stock/models.py:629 +#: stock/models.py:631 msgid "Returned to location" msgstr "" -#: stock/models.py:789 +#: stock/models.py:791 msgid "Installed into stock item" msgstr "" -#: stock/models.py:797 +#: stock/models.py:799 msgid "Installed stock item" msgstr "" -#: stock/models.py:821 +#: stock/models.py:823 msgid "Uninstalled stock item" msgstr "" -#: stock/models.py:840 +#: stock/models.py:842 msgid "Uninstalled into location" msgstr "" -#: stock/models.py:941 +#: stock/models.py:943 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:947 +#: stock/models.py:949 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:956 +#: stock/models.py:958 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:959 +#: stock/models.py:961 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:991 +#: stock/models.py:993 msgid "Add serial number" msgstr "" -#: stock/models.py:994 +#: stock/models.py:996 #, python-brace-format msgid "Serialized {n} items" msgstr "" -#: stock/models.py:1072 +#: stock/models.py:1074 msgid "Split from existing stock" msgstr "" -#: stock/models.py:1110 +#: stock/models.py:1112 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1553 +#: stock/models.py:1555 msgid "Title" msgstr "" -#: stock/models.py:1553 +#: stock/models.py:1555 msgid "Tracking entry title" msgstr "" -#: stock/models.py:1555 +#: stock/models.py:1557 msgid "Entry notes" msgstr "" -#: stock/models.py:1557 +#: stock/models.py:1559 msgid "Link to external page for further information" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1619 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1625 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1641 +#: stock/models.py:1643 msgid "Test name" msgstr "" -#: stock/models.py:1647 templates/js/table_filters.js:190 +#: stock/models.py:1649 templates/js/table_filters.js:190 msgid "Test result" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1655 msgid "Test output value" msgstr "" -#: stock/models.py:1660 +#: stock/models.py:1662 msgid "Test result attachment" msgstr "" -#: stock/models.py:1666 +#: stock/models.py:1668 msgid "Test notes" msgstr "" @@ -5017,156 +5219,161 @@ msgstr "" msgid "This stock item has not passed all required tests" msgstr "" -#: stock/templates/stock/item_base.html:51 -msgid "This stock item is allocated to Sales Order" +#: stock/templates/stock/item_base.html:53 +#, python-format +msgid "" +"This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" msgstr "" -#: stock/templates/stock/item_base.html:57 -msgid "This stock item is allocated to Build" +#: stock/templates/stock/item_base.html:61 +#, python-format +msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" msgstr "" -#: stock/templates/stock/item_base.html:63 +#: stock/templates/stock/item_base.html:67 msgid "" "This stock item is serialized - it has a unique serial number and the " "quantity cannot be adjusted." msgstr "" -#: stock/templates/stock/item_base.html:67 +#: stock/templates/stock/item_base.html:71 msgid "This stock item cannot be deleted as it has child items" msgstr "" -#: stock/templates/stock/item_base.html:71 +#: stock/templates/stock/item_base.html:75 msgid "" "This stock item will be automatically deleted when all stock is depleted." msgstr "" -#: stock/templates/stock/item_base.html:91 -#: stock/templates/stock/item_base.html:353 templates/js/table_filters.js:123 +#: stock/templates/stock/item_base.html:95 +#: stock/templates/stock/item_base.html:369 templates/js/table_filters.js:123 msgid "Expired" msgstr "" -#: stock/templates/stock/item_base.html:95 -#: stock/templates/stock/item_base.html:355 templates/js/table_filters.js:128 +#: stock/templates/stock/item_base.html:99 +#: stock/templates/stock/item_base.html:371 templates/js/table_filters.js:128 msgid "Stale" msgstr "" -#: stock/templates/stock/item_base.html:132 templates/js/barcode.js:309 +#: stock/templates/stock/item_base.html:136 templates/js/barcode.js:309 #: templates/js/barcode.js:314 msgid "Unlink Barcode" msgstr "" -#: stock/templates/stock/item_base.html:134 +#: stock/templates/stock/item_base.html:138 msgid "Link Barcode" msgstr "" -#: stock/templates/stock/item_base.html:136 templates/stock_table.html:31 +#: stock/templates/stock/item_base.html:140 templates/stock_table.html:31 msgid "Scan to Location" msgstr "" -#: stock/templates/stock/item_base.html:143 +#: stock/templates/stock/item_base.html:147 msgid "Printing actions" msgstr "" -#: stock/templates/stock/item_base.html:147 +#: stock/templates/stock/item_base.html:151 #: stock/templates/stock/item_tests.html:27 msgid "Test Report" msgstr "" -#: stock/templates/stock/item_base.html:156 +#: stock/templates/stock/item_base.html:160 msgid "Stock adjustment actions" msgstr "" -#: stock/templates/stock/item_base.html:160 +#: stock/templates/stock/item_base.html:164 #: stock/templates/stock/location.html:58 templates/stock_table.html:55 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:163 templates/stock_table.html:53 +#: stock/templates/stock/item_base.html:167 templates/stock_table.html:53 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:166 templates/stock_table.html:54 +#: stock/templates/stock/item_base.html:170 templates/stock_table.html:54 msgid "Remove stock" msgstr "" -#: stock/templates/stock/item_base.html:169 +#: stock/templates/stock/item_base.html:173 msgid "Serialize stock" msgstr "" -#: stock/templates/stock/item_base.html:173 +#: stock/templates/stock/item_base.html:177 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:176 +#: stock/templates/stock/item_base.html:180 msgid "Assign to customer" msgstr "" -#: stock/templates/stock/item_base.html:179 +#: stock/templates/stock/item_base.html:183 msgid "Return to stock" msgstr "" -#: stock/templates/stock/item_base.html:183 templates/js/stock.js:1222 +#: stock/templates/stock/item_base.html:187 templates/js/stock.js:1222 msgid "Uninstall stock item" msgstr "" -#: stock/templates/stock/item_base.html:183 +#: stock/templates/stock/item_base.html:187 msgid "Uninstall" msgstr "" -#: stock/templates/stock/item_base.html:192 +#: stock/templates/stock/item_base.html:196 #: stock/templates/stock/location.html:55 msgid "Stock actions" msgstr "" -#: stock/templates/stock/item_base.html:195 +#: stock/templates/stock/item_base.html:199 msgid "Convert to variant" msgstr "" -#: stock/templates/stock/item_base.html:198 +#: stock/templates/stock/item_base.html:202 msgid "Duplicate stock item" msgstr "" -#: stock/templates/stock/item_base.html:200 +#: stock/templates/stock/item_base.html:204 msgid "Edit stock item" msgstr "" -#: stock/templates/stock/item_base.html:203 +#: stock/templates/stock/item_base.html:207 msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:215 +#: stock/templates/stock/item_base.html:219 msgid "Stock Item Details" msgstr "" -#: stock/templates/stock/item_base.html:274 templates/js/build.js:442 +#: stock/templates/stock/item_base.html:278 templates/js/build.js:442 msgid "No location set" msgstr "" -#: stock/templates/stock/item_base.html:281 +#: stock/templates/stock/item_base.html:285 msgid "Barcode Identifier" msgstr "" -#: stock/templates/stock/item_base.html:323 +#: stock/templates/stock/item_base.html:327 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:353 -msgid "This StockItem expired on" -msgstr "" - -#: stock/templates/stock/item_base.html:355 -msgid "This StockItem expires on" -msgstr "" - -#: stock/templates/stock/item_base.html:362 templates/js/stock.js:662 -msgid "Last Updated" -msgstr "" - -#: stock/templates/stock/item_base.html:367 -msgid "Last Stocktake" +#: stock/templates/stock/item_base.html:369 +#, python-format +msgid "This StockItem expired on %(item.expiry_date)s" msgstr "" #: stock/templates/stock/item_base.html:371 +#, python-format +msgid "This StockItem expires on %(item.expiry_date)s" +msgstr "" + +#: stock/templates/stock/item_base.html:378 templates/js/stock.js:662 +msgid "Last Updated" +msgstr "" + +#: stock/templates/stock/item_base.html:383 +msgid "Last Stocktake" +msgstr "" + +#: stock/templates/stock/item_base.html:387 msgid "No stocktake performed" msgstr "" @@ -5182,6 +5389,12 @@ msgstr "" msgid "Are you sure you want to delete this stock item?" msgstr "" +#: stock/templates/stock/item_delete.html:12 +#, python-format +msgid "" +"This will remove %(qty)s units of %(full_name)s from stock." +msgstr "" + #: stock/templates/stock/item_install.html:7 msgid "Install another StockItem into this item." msgstr "" @@ -5270,7 +5483,7 @@ msgstr "" msgid "Stock Details" msgstr "" -#: stock/templates/stock/location.html:110 templates/InvenTree/search.html:263 +#: stock/templates/stock/location.html:110 templates/InvenTree/search.html:279 #: templates/stats.html:76 users/models.py:39 msgid "Stock Locations" msgstr "" @@ -5328,7 +5541,8 @@ msgid "Convert Stock Item" msgstr "" #: stock/templates/stock/stockitem_convert.html:8 -msgid "This stock item is current an instance of " +#, python-format +msgid "This stock item is current an instance of %(part)s" msgstr "" #: stock/templates/stock/stockitem_convert.html:9 @@ -5339,6 +5553,10 @@ msgstr "" msgid "This action cannot be easily undone" msgstr "" +#: stock/templates/stock/tracking_delete.html:6 +msgid "Are you sure you want to delete this stock tracking entry?" +msgstr "" + #: stock/views.py:123 msgid "Edit Stock Location" msgstr "" @@ -5456,7 +5674,7 @@ msgstr "" msgid "Add Stock Items" msgstr "" -#: stock/views.py:1001 users/models.py:178 +#: stock/views.py:1001 users/models.py:179 msgid "Add" msgstr "" @@ -5618,19 +5836,19 @@ msgstr "" msgid "Overdue Sales Orders" msgstr "" -#: templates/InvenTree/search.html:7 templates/InvenTree/search.html:13 +#: templates/InvenTree/search.html:8 templates/InvenTree/search.html:14 msgid "Search Results" msgstr "" -#: templates/InvenTree/search.html:23 +#: templates/InvenTree/search.html:24 msgid "Enter a search query" msgstr "" -#: templates/InvenTree/search.html:252 templates/js/stock.js:300 +#: templates/InvenTree/search.html:268 templates/js/stock.js:300 msgid "Shipped to customer" msgstr "" -#: templates/InvenTree/search.html:255 templates/js/stock.js:310 +#: templates/InvenTree/search.html:271 templates/js/stock.js:310 msgid "No stock location set" msgstr "" @@ -5705,7 +5923,7 @@ msgid "Edit setting" msgstr "" #: templates/InvenTree/settings/settings.html:7 -#: templates/InvenTree/settings/settings.html:13 templates/navbar.html:78 +#: templates/InvenTree/settings/settings.html:13 templates/navbar.html:84 msgid "Settings" msgstr "" @@ -5970,27 +6188,37 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/bom.js:286 templates/js/bom.js:372 +#: templates/js/bom.js:272 templates/js/filters.js:167 +#: templates/js/filters.js:397 +msgid "true" +msgstr "" + +#: templates/js/bom.js:273 templates/js/filters.js:171 +#: templates/js/filters.js:398 +msgid "false" +msgstr "" + +#: templates/js/bom.js:290 templates/js/bom.js:376 msgid "View BOM" msgstr "" -#: templates/js/bom.js:346 +#: templates/js/bom.js:350 msgid "Validate BOM Item" msgstr "" -#: templates/js/bom.js:348 +#: templates/js/bom.js:352 msgid "This line has been validated" msgstr "" -#: templates/js/bom.js:350 +#: templates/js/bom.js:354 msgid "Edit BOM Item" msgstr "" -#: templates/js/bom.js:352 +#: templates/js/bom.js:356 msgid "Delete BOM Item" msgstr "" -#: templates/js/bom.js:443 templates/js/build.js:305 templates/js/build.js:1032 +#: templates/js/bom.js:447 templates/js/build.js:305 templates/js/build.js:1032 msgid "No BOM items found" msgstr "" @@ -6057,23 +6285,21 @@ msgid "No company information found" msgstr "" #: templates/js/company.js:129 -msgid "No supplier parts found" +msgid "No manufacturer parts found" msgstr "" -#: templates/js/company.js:147 templates/js/part.js:59 templates/js/part.js:144 +#: templates/js/company.js:148 templates/js/company.js:246 +#: templates/js/part.js:59 templates/js/part.js:144 msgid "Template part" msgstr "" -#: templates/js/company.js:151 templates/js/part.js:63 templates/js/part.js:148 +#: templates/js/company.js:152 templates/js/company.js:250 +#: templates/js/part.js:63 templates/js/part.js:148 msgid "Assembled part" msgstr "" -#: templates/js/filters.js:167 templates/js/filters.js:397 -msgid "true" -msgstr "" - -#: templates/js/filters.js:171 templates/js/filters.js:398 -msgid "false" +#: templates/js/company.js:227 +msgid "No supplier parts found" msgstr "" #: templates/js/filters.js:193 @@ -6738,19 +6964,19 @@ msgstr "" msgid "Scan Barcode" msgstr "" -#: templates/navbar.html:71 users/models.py:36 +#: templates/navbar.html:77 users/models.py:36 msgid "Admin" msgstr "" -#: templates/navbar.html:73 +#: templates/navbar.html:79 msgid "Logout" msgstr "" -#: templates/navbar.html:75 templates/registration/login.html:89 +#: templates/navbar.html:81 templates/registration/login.html:89 msgid "Login" msgstr "" -#: templates/navbar.html:94 +#: templates/navbar.html:104 msgid "About InvenTree" msgstr "" @@ -6924,6 +7150,14 @@ msgstr "" msgid "Delete Stock" msgstr "" +#: templates/yesnolabel.html:4 +msgid "Yes" +msgstr "" + +#: templates/yesnolabel.html:6 +msgid "No" +msgstr "" + #: users/admin.py:64 msgid "Users" msgstr "" @@ -6948,34 +7182,34 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:165 +#: users/models.py:166 msgid "Permission set" msgstr "" -#: users/models.py:173 +#: users/models.py:174 msgid "Group" msgstr "" -#: users/models.py:176 +#: users/models.py:177 msgid "View" msgstr "" -#: users/models.py:176 +#: users/models.py:177 msgid "Permission to view items" msgstr "" -#: users/models.py:178 +#: users/models.py:179 msgid "Permission to add items" msgstr "" -#: users/models.py:180 +#: users/models.py:181 msgid "Change" msgstr "" -#: users/models.py:180 +#: users/models.py:181 msgid "Permissions to edit items" msgstr "" -#: users/models.py:182 +#: users/models.py:183 msgid "Permission to delete items" msgstr "" From 0c4d22623d3f95c5eb50e64fea546111a92893eb Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 18 Apr 2021 01:33:35 +0200 Subject: [PATCH 056/116] added german translations --- InvenTree/locale/de/LC_MESSAGES/django.po | 284 +++++++++------------- 1 file changed, 114 insertions(+), 170 deletions(-) diff --git a/InvenTree/locale/de/LC_MESSAGES/django.po b/InvenTree/locale/de/LC_MESSAGES/django.po index 400c34109d..cca4a9b415 100644 --- a/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/InvenTree/locale/de/LC_MESSAGES/django.po @@ -859,16 +859,14 @@ msgid "Stock items will have to be manually allocated" msgstr "BestandsObjekte müssen manuell zugewiesen werden" #: build/templates/build/build_base.html:16 -#, fuzzy, python-format -#| msgid "This Build Order is allocated to Sales Order" +#, python-format msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "Dieser Bauauftrag ist einem Auftrag zugeordnet" +msgstr "Dieser Bauauftrag ist dem Auftrag %(link)s zugeordnet" #: build/templates/build/build_base.html:22 -#, fuzzy, python-format -#| msgid "This Build Order is a child of Build Order" +#, python-format msgid "This Build Order is a child of Build Order %(link)s" -msgstr "Dieser Bauauftrag ist einem Bauauftrag untergeordnet" +msgstr "Dieser Bauauftrag ist dem Bauauftrag %(link)s untergeordnet" #: build/templates/build/build_base.html:40 #: company/templates/company/company_base.html:40 @@ -935,10 +933,9 @@ msgid "Status" msgstr "Status" #: build/templates/build/build_base.html:111 -#, fuzzy, python-format -#| msgid "This build was due on" +#, python-format msgid "This build was due on %(target)s" -msgstr "Fertigung überfällig seit" +msgstr "Bauauftrag war fäälig am %(target)s" #: build/templates/build/build_base.html:118 #: build/templates/build/detail.html:64 @@ -1035,20 +1032,18 @@ msgid "Select a stock item to allocate to the selected build output" msgstr "BestandsObjekt zur Zuordnung zum ausgewählten Endprodukt auswählen" #: build/templates/build/create_build_item.html:11 -#, fuzzy, python-format -#| msgid "" -#| "The allocated stock will be installed into the following build output:" +#, python-format msgid "" "The allocated stock will be installed into the following build output:
                        " "%(output)s" msgstr "" "Der zugeordnete Bestand wird in den folgenden Endprodukten verbaut werden:" +"
                        %(output)s" #: build/templates/build/create_build_item.html:17 -#, fuzzy, python-format -#| msgid "No stock available for" +#, python-format msgid "No stock available for %(part)s" -msgstr "Kein Bestand verfügbar für" +msgstr "Kein Bestand verfügbar für %(part)s" #: build/templates/build/delete_build_item.html:8 msgid "Are you sure you want to unallocate this stock?" @@ -1725,8 +1720,6 @@ msgid "Select manufacturer" msgstr "Hersteller auswählen" #: company/forms.py:134 company/models.py:331 -#, fuzzy -#| msgid "Manufacturer part number" msgid "Manufacturer Part Number" msgstr "Hersteller-Teilenummer" @@ -1850,16 +1843,12 @@ msgid "Manufacturer" msgstr "Hersteller" #: company/models.py:337 -#, fuzzy -#| msgid "URL for external supplier part link" msgid "URL for external manufacturer part link" -msgstr "Teil-URL des Zulieferers" +msgstr "URL des Herstellerteil" #: company/models.py:343 -#, fuzzy -#| msgid "Manufacturer part number" msgid "Manufacturer part description" -msgstr "Hersteller-Teilenummer" +msgstr "Herstellerteil Beschreibung" #: company/models.py:469 company/templates/company/detail.html:62 #: company/templates/company/supplier_part_base.html:83 @@ -1891,16 +1880,12 @@ msgstr "Lagerbestandseinheit (SKU) des Zulieferers" #: company/templates/company/manufacturer_part_base.html:6 #: company/templates/company/manufacturer_part_base.html:19 #: stock/templates/stock/item_base.html:346 -#, fuzzy -#| msgid "Manufacturer" msgid "Manufacturer Part" -msgstr "Hersteller" +msgstr "Herstellerteil" #: company/models.py:483 -#, fuzzy -#| msgid "Select manufacturer" msgid "Select manufacturer part" -msgstr "Hersteller auswählen" +msgstr "Herstellerteil auswählen" #: company/models.py:489 msgid "URL for external supplier part link" @@ -2021,23 +2006,17 @@ msgstr "Kunde" #: company/templates/company/detail_manufacturer_part.html:11 #: templates/InvenTree/search.html:149 -#, fuzzy -#| msgid "Manufacturers" msgid "Manufacturer Parts" -msgstr "Hersteller" +msgstr "Herstellerteile" #: company/templates/company/detail_manufacturer_part.html:22 -#, fuzzy -#| msgid "Create new manufacturer" msgid "Create new manufacturer part" -msgstr "Neuen Hersteller anlegen" +msgstr "Neues Herstellerteil anlegen" #: company/templates/company/detail_manufacturer_part.html:23 #: part/templates/part/manufacturer.html:19 -#, fuzzy -#| msgid "New Manufacturer" msgid "New Manufacturer Part" -msgstr "Neuer Hersteller" +msgstr "Neues Herstellerteil" #: company/templates/company/detail_manufacturer_part.html:28 #: company/templates/company/detail_supplier_part.html:27 @@ -2142,23 +2121,17 @@ msgid "Order part" msgstr "Teil bestellen" #: company/templates/company/manufacturer_part_base.html:41 -#, fuzzy -#| msgid "is manufacturer" msgid "Edit manufacturer part" -msgstr "ist Hersteller" +msgstr "Herstellerteil bearbeiten" #: company/templates/company/manufacturer_part_base.html:45 -#, fuzzy -#| msgid "Select manufacturer" msgid "Delete manufacturer part" -msgstr "Hersteller auswählen" +msgstr "Herstellerteil löschen" #: company/templates/company/manufacturer_part_base.html:57 #: company/templates/company/manufacturer_part_detail.html:10 -#, fuzzy -#| msgid "Manufacturer part number" msgid "Manufacturer Part Details" -msgstr "Hersteller-Teilenummer" +msgstr "Herstellerteil Details" #: company/templates/company/manufacturer_part_base.html:62 #: company/templates/company/manufacturer_part_detail.html:18 @@ -2168,11 +2141,9 @@ msgid "Internal Part" msgstr "Internes Teil" #: company/templates/company/manufacturer_part_delete.html:6 -#, fuzzy -#| msgid "Are you sure you want to delete the following Supplier Parts?" msgid "Are you sure you want to delete the following Manufacturer Parts?" msgstr "" -"Sind Sie sicher, dass sie die folgenden Zulieferer-Teile löschen möchten?" +"Sind Sie sicher, dass sie die folgenden Herstellerteile löschen möchten?" #: company/templates/company/manufacturer_part_delete.html:36 #, python-format @@ -2189,10 +2160,8 @@ msgid "Suppliers" msgstr "Zulieferer" #: company/templates/company/manufacturer_part_navbar.html:19 -#, fuzzy -#| msgid "Manufacturer part number" msgid "Manufacturer Part Stock" -msgstr "Hersteller-Teilenummer" +msgstr "HerstellerTeil Bestand" #: company/templates/company/manufacturer_part_navbar.html:22 #: company/templates/company/navbar.html:41 @@ -2208,10 +2177,8 @@ msgid "Stock" msgstr "Lagerbestand" #: company/templates/company/manufacturer_part_navbar.html:26 -#, fuzzy -#| msgid "Manufacturer part number" msgid "Manufacturer Part Orders" -msgstr "Hersteller-Teilenummer" +msgstr "Herstellerteil aufträge" #: company/templates/company/manufacturer_part_navbar.html:29 #: company/templates/company/supplier_part_navbar.html:22 @@ -2237,10 +2204,8 @@ msgstr "Neuen Zulieferer anlegen" #: company/templates/company/navbar.html:20 #: company/templates/company/navbar.html:23 -#, fuzzy -#| msgid "Manufacturers" msgid "Manufactured Parts" -msgstr "Hersteller" +msgstr "Hergestellte Teile" #: company/templates/company/navbar.html:29 #: company/templates/company/navbar.html:32 @@ -2443,22 +2408,16 @@ msgid "Company was deleted" msgstr "Firma gelöscht" #: company/views.py:357 -#, fuzzy -#| msgid "Manufacturer" msgid "Edit Manufacturer Part" -msgstr "Hersteller" +msgstr "Herstellerteil ändern" #: company/views.py:366 -#, fuzzy -#| msgid "Create new Manufacturer" msgid "Create New Manufacturer Part" -msgstr "Neuen Hersteller anlegen" +msgstr "Neues Herstellerteil anlegen" #: company/views.py:440 -#, fuzzy -#| msgid "Select manufacturer" msgid "Delete Manufacturer Part" -msgstr "Hersteller auswählen" +msgstr "Herstellerteil löschen" #: company/views.py:528 msgid "Edit Supplier Part" @@ -2834,10 +2793,8 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: order/templates/order/order_complete.html:11 -#, fuzzy -#| msgid "Mark this order as complete?" msgid "Marking this order as complete will remove these line items." -msgstr "Diese Bestellung als vollständig markieren?" +msgstr "" #: order/templates/order/order_issue.html:7 msgid "" @@ -2867,10 +2824,9 @@ msgid "Select Supplier" msgstr "Zulieferer auswählen" #: order/templates/order/order_wizard/select_parts.html:57 -#, fuzzy, python-format -#| msgid "Select a supplier for" +#, python-format msgid "Select a supplier for %(name)s" -msgstr "Zulieferer auswählen für" +msgstr "Zulieferer auswählen für %(name)s" #: order/templates/order/order_wizard/select_parts.html:69 #: part/templates/part/set_category.html:32 @@ -2895,16 +2851,14 @@ msgid "Select Purchase Order" msgstr "Bestellung auswählen" #: order/templates/order/order_wizard/select_pos.html:45 -#, fuzzy, python-format -#| msgid "Create new purchase order" +#, python-format msgid "Create new purchase order for %(name)s" -msgstr "Neue Bestellung anlegen" +msgstr "Neue Bestellung für %(name)s anlegen" #: order/templates/order/order_wizard/select_pos.html:68 -#, fuzzy, python-format -#| msgid "Select a purchase order for" +#, python-format msgid "Select a purchase order for %(name)s" -msgstr "Bestellung auswählen für" +msgstr "Neue Bestellung für %(name)s anlegen" #: order/templates/order/po_attachments.html:12 #: order/templates/order/po_navbar.html:23 @@ -2971,10 +2925,21 @@ msgid "Print Order Reports" msgstr "Berichte drucken" #: order/templates/order/receive_parts.html:8 -#, fuzzy, python-format -#| msgid "Receive outstanding parts for" +#, python-format msgid "Receive outstanding parts for %(order)s - %(desc)s" -msgstr "Empfange ausstehende Teile für" +msgstr "Ausstehende Teile für %(order)s - %(desc)s empfangen" + +#: order/templates/order/receive_parts.html:14 part/api.py:40 +#: part/models.py:322 part/templates/part/cat_link.html:7 +#: part/templates/part/category.html:95 +#: part/templates/part/category_navbar.html:11 +#: part/templates/part/category_navbar.html:14 +#: part/templates/part/category_partlist.html:10 +#: templates/InvenTree/index.html:96 templates/InvenTree/search.html:114 +#: templates/InvenTree/settings/tabs.html:25 templates/navbar.html:23 +#: templates/stats.html:59 templates/stats.html:68 users/models.py:38 +msgid "Parts" +msgstr "Teile" #: order/templates/order/receive_parts.html:14 part/api.py:40 #: part/models.py:322 part/templates/part/cat_link.html:7 @@ -3371,16 +3336,12 @@ msgid "Include part stock data in exported BOM" msgstr "Teil-Bestand in Stückliste-Export einschließen" #: part/forms.py:99 -#, fuzzy -#| msgid "Include Parameter Data" msgid "Include Manufacturer Data" -msgstr "Parameter-Daten einschließen" +msgstr "Hersteller-Daten einschließen" #: part/forms.py:99 -#, fuzzy -#| msgid "Include part parameters data in exported BOM" msgid "Include part manufacturer data in exported BOM" -msgstr "Teil-Parameter in Stückliste-Export einschließen" +msgstr "Hersteller-Parameter in Stücklisten-Export einschließen" #: part/forms.py:101 msgid "Include Supplier Data" @@ -4131,10 +4092,9 @@ msgid "Are you sure you want to delete category" msgstr "Sind Sie sicher, dass Sie diese Kategorie löschen wollen" #: part/templates/part/category_delete.html:8 -#, fuzzy, python-format -#| msgid "This category contains" +#, python-format msgid "This category contains %(count)s child categories" -msgstr "Kategorie enthält" +msgstr "Diese Kategorie enthält %(count)s Unter-Kategorien" #: part/templates/part/category_delete.html:9 msgid "" @@ -4151,22 +4111,18 @@ msgid "top level Parts category" msgstr "oberste Teil-Kategorie" #: part/templates/part/category_delete.html:25 -#, fuzzy, python-format -#| msgid "This category contains" +#, python-format msgid "This category contains %(count)s parts" -msgstr "Kategorie enthält" +msgstr "Diese Kategorie enthält %(count)s Teile" #: part/templates/part/category_delete.html:27 -#, fuzzy, python-format -#| msgid "" -#| "If this category is deleted, these parts will be moved to the parent " -#| "category" +#, python-format msgid "" "If this category is deleted, these parts will be moved to the parent " "category %(path)s" msgstr "" "Wenn diese Kat. gelöscht wird, werden diese Teile in die übergeordnete Kat. " -"verschoben" +"%(path)s verschoben" #: part/templates/part/category_delete.html:29 msgid "" @@ -4192,10 +4148,9 @@ msgid "Duplicate Part" msgstr "Teil duplizieren" #: part/templates/part/copy_part.html:10 -#, fuzzy, python-format -#| msgid "Make a copy of part" +#, python-format msgid "Make a copy of part '%(full_name)s'." -msgstr "Eine Kopie des Teils erstellen" +msgstr "Eine Kopie des Teils '%(full_name)s' erstellen." #: part/templates/part/copy_part.html:14 #: part/templates/part/create_part.html:11 @@ -4210,7 +4165,7 @@ msgstr "Teil evtl. Duplikat dieser Teile" #: part/templates/part/create_part.html:17 #, python-format msgid "%(full_name)s - %(desc)s (%(match_per)s%% match)" -msgstr "" +msgstr "%(full_name)s - %(desc)s (%(match_per)s%% übereinstimmend)" #: part/templates/part/detail.html:11 part/templates/part/navbar.html:11 msgid "Part Details" @@ -4293,16 +4248,12 @@ msgid "Part is not active" msgstr "Teil ist nicht aktiv" #: part/templates/part/manufacturer.html:11 -#, fuzzy -#| msgid "Parts Manufactured" msgid "Part Manufacturers" -msgstr "Teile gefertigt" +msgstr "Teil Hersteller" #: part/templates/part/manufacturer.html:24 -#, fuzzy -#| msgid "Select manufacturer" msgid "Delete manufacturer parts" -msgstr "Hersteller auswählen" +msgstr "Herstellerteile löschen" #: part/templates/part/manufacturer.html:53 #: part/templates/part/supplier.html:57 @@ -4388,10 +4339,9 @@ msgid "Part List" msgstr "Teileliste" #: part/templates/part/part_base.html:18 -#, fuzzy, python-format -#| msgid "This part is a variant of" +#, python-format msgid "This part is a variant of %(link)s" -msgstr "Dieses Teil ist eine Variante von" +msgstr "Dieses Teil ist eine Variante von %(link)s" #: part/templates/part/part_base.html:33 templates/js/company.js:156 #: templates/js/company.js:254 templates/js/part.js:75 templates/js/part.js:152 @@ -4473,10 +4423,9 @@ msgid "Calculate" msgstr "Berechnen" #: part/templates/part/part_pricing.html:8 -#, fuzzy, python-format -#| msgid "Pricing information for:" +#, python-format msgid "Pricing information for:
                        %(part)s." -msgstr "Preisinformationen für:" +msgstr "Preisinformationen für:
                        %(part)s." #: part/templates/part/part_pricing.html:23 msgid "Supplier Pricing" @@ -4521,10 +4470,10 @@ msgid "Select from existing images" msgstr "Aus vorhandenen Bildern auswählen" #: part/templates/part/partial_delete.html:7 -#, fuzzy, python-format -#| msgid "Are you sure you want to delete company '%(name)s'?" +#, python-format msgid "Are you sure you want to delete part '%(full_name)s'?" -msgstr "Sind Sie sicher, dass Sie die Firma '%(name)s' löschen wollen?" +msgstr "" +"Sind Sie sicher, dass Sie das Teil '%(full_name)s' löschen wollen?" #: part/templates/part/partial_delete.html:12 #, python-format @@ -4586,10 +4535,9 @@ msgid "Part Stock" msgstr "Teilbestand" #: part/templates/part/stock.html:16 -#, fuzzy, python-format -#| msgid "Showing stock for all variants of" +#, python-format msgid "Showing stock for all variants of %(full_name)s" -msgstr "Lagerbestand aller Varianten von" +msgstr "Lagerbestand aller Varianten von %(full_name)s" #: part/templates/part/stock_count.html:7 templates/js/bom.js:239 #: templates/js/part.js:421 @@ -4621,10 +4569,9 @@ msgid "Create new part variant" msgstr "Neue Teilevariante anlegen" #: part/templates/part/variant_part.html:10 -#, fuzzy, python-format -#| msgid "Create a new variant of template" +#, python-format msgid "Create a new variant of template '%(full_name)s'." -msgstr "Neue Variante von Vorlage anlegen" +msgstr "Neue Variante von Vorlage anlegen '%(full_name)s'." #: part/templates/part/variants.html:19 msgid "Create new variant" @@ -5345,17 +5292,18 @@ msgid "This stock item has not passed all required tests" msgstr "Dieses BestandsObjekt hat nicht alle Tests bestanden" #: stock/templates/stock/item_base.html:53 -#, fuzzy, python-format -#| msgid "This stock item is allocated to Sales Order" +#, python-format msgid "" "This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" -msgstr "Dieses BestandsObjekt ist einem Auftrag zugewiesen" +msgstr "" +"Dieses BestandsObjekt ist dem Auftrag %(link)s zugewiesen (Menge: %(qty)s)" #: stock/templates/stock/item_base.html:61 -#, fuzzy, python-format -#| msgid "This stock item is allocated to Build" +#, python-format msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" -msgstr "Dieses BestandsObjekt ist dem Bauauftrag zugewiesen" +msgstr "" +"Dieses BestandsObjekt ist dem Bauauftrag %(link)s zugewiesen (Menge: " +"%(qty)s)" #: stock/templates/stock/item_base.html:67 msgid "" @@ -5487,16 +5435,14 @@ msgid "Parent Item" msgstr "Elternposition" #: stock/templates/stock/item_base.html:369 -#, fuzzy, python-format -#| msgid "This StockItem expired on" +#, python-format msgid "This StockItem expired on %(item.expiry_date)s" -msgstr "Dieses BestandsObjekt lief ab am" +msgstr "Dieses BestandsObjekt lief am %(item.expiry_date)s ab" #: stock/templates/stock/item_base.html:371 -#, fuzzy, python-format -#| msgid "This StockItem expires on" +#, python-format msgid "This StockItem expires on %(item.expiry_date)s" -msgstr "Dieses BestandsObjekt läuft ab am" +msgstr "Dieses BestandsObjekt läuft am %(item.expiry_date)s ab" #: stock/templates/stock/item_base.html:378 templates/js/stock.js:662 msgid "Last Updated" @@ -5527,6 +5473,8 @@ msgstr "Sind Sie sicher, dass Sie dieses BestandsObjekt löschen wollen?" msgid "" "This will remove %(qty)s units of %(full_name)s from stock." msgstr "" +"Damit werden %(qty)s Elemente vom Bestand von %(full_name)s " +"entfernt." #: stock/templates/stock/item_install.html:7 msgid "Install another StockItem into this item." @@ -5680,10 +5628,9 @@ msgid "Convert Stock Item" msgstr "BestandsObjekt umwandeln" #: stock/templates/stock/stockitem_convert.html:8 -#, fuzzy, python-format -#| msgid "This stock item is current an instance of " +#, python-format msgid "This stock item is current an instance of %(part)s" -msgstr "BestandsObjekt ist aktuell eine Instanz von" +msgstr "BestandsObjekt ist aktuell eine Instanz von %(part)s" #: stock/templates/stock/stockitem_convert.html:9 msgid "It can be converted to one of the part variants listed below." @@ -5694,10 +5641,10 @@ msgid "This action cannot be easily undone" msgstr "Diese Aktion kann nicht einfach rückgängig gemacht werden" #: stock/templates/stock/tracking_delete.html:6 -#, fuzzy -#| msgid "Are you sure you want to delete this stock item?" msgid "Are you sure you want to delete this stock tracking entry?" -msgstr "Sind Sie sicher, dass Sie dieses BestandsObjekt löschen wollen?" +msgstr "" +"Sind Sie sicher, dass Sie diesen BestandsObjekt-Verfolgungs-Eintrag löschen " +"wollen?" #: stock/views.py:123 msgid "Edit Stock Location" @@ -6434,10 +6381,8 @@ msgid "No company information found" msgstr "Keine Firmeninformation gefunden" #: templates/js/company.js:129 -#, fuzzy -#| msgid "No supplier parts found" msgid "No manufacturer parts found" -msgstr "Keine Zulieferer-Teile gefunden" +msgstr "Keine Hersteller-Teile gefunden" #: templates/js/company.js:148 templates/js/company.js:246 #: templates/js/part.js:59 templates/js/part.js:144 @@ -6791,16 +6736,12 @@ msgid "items" msgstr "Teile" #: templates/js/stock.js:449 -#, fuzzy -#| msgid "Batch" msgid "batches" -msgstr "Los" +msgstr "Lose" #: templates/js/stock.js:476 -#, fuzzy -#| msgid "Allocations" msgid "locations" -msgstr "Zuweisungen" +msgstr "orte" #: templates/js/stock.js:478 msgid "Undefined location" @@ -7147,10 +7088,8 @@ msgstr "Sie wurden abgemeldet" #: templates/registration/logged_out.html:51 #: templates/registration/password_reset_complete.html:51 #: templates/registration/password_reset_done.html:58 -#, fuzzy -#| msgid "Returned to location" msgid "Return to login screen" -msgstr "zurück ins Lager" +msgstr "Zurück auf die Anmelde-Seite" #: templates/registration/login.html:64 msgid "Enter username" @@ -7384,8 +7323,26 @@ msgstr "Berechtigungen Einträge zu ändern" msgid "Permission to delete items" msgstr "Berechtigung Einträge zu löschen" -#~ msgid "Create new purchase order for {{ supplier.name }}" -#~ msgstr "Neue Bestellung für {{ supplier.name }} anlegen" +#~ msgid "Sales Order %(order.reference)s - %(order.customer.name)s" +#~ msgstr "Auftrag %(order.reference)s - %(order.customer.name)s" + +#~ msgid "match" +#~ msgstr "entspricht" + +#~ msgid "Stock Pricing" +#~ msgstr "Bestandspreise" + +#~ msgid "No stock pricing history is available for this part." +#~ msgstr "Keine Bestandspreis-Geschichte für dieses Teil verfügbar" + +#~ msgid "Select a purchase order for" +#~ msgstr "Bestellung auswählen für" + +#~ msgid "Receive outstanding parts for" +#~ msgstr "Empfange ausstehende Teile für" + +#~ msgid "This category contains" +#~ msgstr "Kategorie enthält" #~ msgid "child categories" #~ msgstr "Unter-Kategorien" @@ -7393,19 +7350,6 @@ msgstr "Berechtigung Einträge zu löschen" #~ msgid "parts" #~ msgstr "Teile" -#~ msgid "match" -#~ msgstr "entspricht" - -#, fuzzy -#~| msgid "Part Pricing" -#~ msgid "Stock Pricing" -#~ msgstr "Teilbepreisung" - -#, fuzzy -#~| msgid "No pricing information is available for this part." -#~ msgid "No stock pricing history is available for this part." -#~ msgstr "Keine Preise für dieses Teil verfügbar" - #~ msgid "Click" #~ msgstr "Klick" From 124db01b63c604233f5ec946f4b9717b6e5fc4d8 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 18 Apr 2021 14:45:41 +1000 Subject: [PATCH 057/116] Add binaries for database dumping --- docker/inventree/Dockerfile | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/docker/inventree/Dockerfile b/docker/inventree/Dockerfile index fcba19e964..f5fb538eb7 100644 --- a/docker/inventree/Dockerfile +++ b/docker/inventree/Dockerfile @@ -56,11 +56,22 @@ RUN apk add --no-cache git make bash \ libjpeg-turbo libjpeg-turbo-dev jpeg jpeg-dev \ libffi libffi-dev \ zlib zlib-dev + +# Cairo deps for WeasyPrint (these will be deprecated once WeasyPrint drops cairo requirement) RUN apk add --no-cache cairo cairo-dev pango pango-dev RUN apk add --no-cache fontconfig ttf-droid ttf-liberation ttf-dejavu ttf-opensans ttf-ubuntu-font-family font-croscore font-noto -RUN apk add --no-cache python3 -RUN apk add --no-cache postgresql-contrib postgresql-dev libpq -RUN apk add --no-cache mariadb-connector-c mariadb-dev + +# Python +RUN apk add --no-cache python3 python3-dev python3-pip + +# SQLite support +RUN apk add --no-cache sqlite3 + +# PostgreSQL support +RUN apk add --no-cache postgresql-contrib postgresql-dev libpq pg_dump + +# MySQL support +RUN apk add --no-cache mariadb-connector-c mariadb-dev mysqldump # Create required directories #RUN mkdir ${INVENTREE_DATA_DIR}}/media ${INVENTREE_HOME}/static ${INVENTREE_HOME}/backup From 75054f870ed336d797745e982f3c96f3c5a88890 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 18 Apr 2021 14:50:22 +1000 Subject: [PATCH 058/116] Fix --- docker/inventree/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/inventree/Dockerfile b/docker/inventree/Dockerfile index f5fb538eb7..b9e52ed863 100644 --- a/docker/inventree/Dockerfile +++ b/docker/inventree/Dockerfile @@ -62,7 +62,7 @@ RUN apk add --no-cache cairo cairo-dev pango pango-dev RUN apk add --no-cache fontconfig ttf-droid ttf-liberation ttf-dejavu ttf-opensans ttf-ubuntu-font-family font-croscore font-noto # Python -RUN apk add --no-cache python3 python3-dev python3-pip +RUN apk add --no-cache python3 python3-dev # SQLite support RUN apk add --no-cache sqlite3 From cbb94d2ff75fd6713fb21d50e10f21465776aae9 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 18 Apr 2021 14:57:25 +1000 Subject: [PATCH 059/116] sqlite3 -> sqlite --- docker/inventree/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/inventree/Dockerfile b/docker/inventree/Dockerfile index b9e52ed863..6e3166028c 100644 --- a/docker/inventree/Dockerfile +++ b/docker/inventree/Dockerfile @@ -65,7 +65,7 @@ RUN apk add --no-cache fontconfig ttf-droid ttf-liberation ttf-dejavu ttf-opensa RUN apk add --no-cache python3 python3-dev # SQLite support -RUN apk add --no-cache sqlite3 +RUN apk add --no-cache sqlite # PostgreSQL support RUN apk add --no-cache postgresql-contrib postgresql-dev libpq pg_dump From c07aef7f752e1011c50b03f273504706221e930f Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 18 Apr 2021 14:58:02 +1000 Subject: [PATCH 060/116] Remove commented line --- docker/inventree/Dockerfile | 3 --- 1 file changed, 3 deletions(-) diff --git a/docker/inventree/Dockerfile b/docker/inventree/Dockerfile index 6e3166028c..42d18d04c6 100644 --- a/docker/inventree/Dockerfile +++ b/docker/inventree/Dockerfile @@ -73,9 +73,6 @@ RUN apk add --no-cache postgresql-contrib postgresql-dev libpq pg_dump # MySQL support RUN apk add --no-cache mariadb-connector-c mariadb-dev mysqldump -# Create required directories -#RUN mkdir ${INVENTREE_DATA_DIR}}/media ${INVENTREE_HOME}/static ${INVENTREE_HOME}/backup - # Install required python packages RUN pip install --upgrade pip setuptools wheel RUN pip install --no-cache-dir -U invoke From 69473b9bff5c36cbd4f3cdcc0722164276883bb8 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 18 Apr 2021 15:05:52 +1000 Subject: [PATCH 061/116] Fix install Also make the web port configurable --- docker/inventree/Dockerfile | 5 ++++- docker/inventree/start_server.sh | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/docker/inventree/Dockerfile b/docker/inventree/Dockerfile index 42d18d04c6..43ac865169 100644 --- a/docker/inventree/Dockerfile +++ b/docker/inventree/Dockerfile @@ -26,6 +26,9 @@ ENV INVENTREE_BACKUP_DIR="${INVENTREE_DATA_DIR}/backup" ENV INVENTREE_CONFIG_FILE="${INVENTREE_DATA_DIR}/config.yaml" ENV INVENTREE_SECRET_KEY_FILE="${INVENTREE_DATA_DIR}/secret_key.txt" +# Default web server port is 8000 +ENV INVENTREE_WEB_PORT="8000" + # Pass DB configuration through as environment variables ENV INVENTREE_DB_ENGINE="${INVENTREE_DB_ENGINE}" ENV INVENTREE_DB_NAME="${INVENTREE_DB_NAME}" @@ -68,7 +71,7 @@ RUN apk add --no-cache python3 python3-dev RUN apk add --no-cache sqlite # PostgreSQL support -RUN apk add --no-cache postgresql-contrib postgresql-dev libpq pg_dump +RUN apk add --no-cache postgresql postgresql-contrib postgresql-dev libpq # MySQL support RUN apk add --no-cache mariadb-connector-c mariadb-dev mysqldump diff --git a/docker/inventree/start_server.sh b/docker/inventree/start_server.sh index 0436cd532f..db9f1594ae 100644 --- a/docker/inventree/start_server.sh +++ b/docker/inventree/start_server.sh @@ -43,4 +43,4 @@ python manage.py collectstatic --noinput || exit 1 python manage.py clearsessions || exit 1 # Now we can launch the server -gunicorn -c $INVENTREE_HOME/gunicorn.conf.py InvenTree.wsgi -b 0.0.0.0:8080 +gunicorn -c $INVENTREE_HOME/gunicorn.conf.py InvenTree.wsgi -b 0.0.0.0:$INVENTREE_WEB_PORT From 9eb559bec5c6021519c1c4f83b074e6a3a1e5d36 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 18 Apr 2021 15:09:01 +1000 Subject: [PATCH 062/116] More install fixes --- docker/inventree/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/inventree/Dockerfile b/docker/inventree/Dockerfile index 43ac865169..2911da907a 100644 --- a/docker/inventree/Dockerfile +++ b/docker/inventree/Dockerfile @@ -74,7 +74,7 @@ RUN apk add --no-cache sqlite RUN apk add --no-cache postgresql postgresql-contrib postgresql-dev libpq # MySQL support -RUN apk add --no-cache mariadb-connector-c mariadb-dev mysqldump +RUN apk add --no-cache mariadb-connector-c mariadb-dev mariadb-client # Install required python packages RUN pip install --upgrade pip setuptools wheel From 270c0ea85db9498b576087421d0e73d99a813903 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 18 Apr 2021 15:17:57 +1000 Subject: [PATCH 063/116] Cleanup docker files --- .github/workflows/docker_build.yaml | 8 +++----- .github/workflows/docker_publish.yaml | 19 ++----------------- docker/{inventree => }/Dockerfile | 0 docker/docker-compose.yml | 19 ++++++++++++------- docker/{inventree => }/gunicorn.conf.py | 0 docker/{nginx => }/nginx.conf | 7 +++++-- docker/nginx/Dockerfile | 14 -------------- docker/{inventree => }/start_server.sh | 0 docker/{inventree => }/start_worker.sh | 0 9 files changed, 22 insertions(+), 45 deletions(-) rename docker/{inventree => }/Dockerfile (100%) rename docker/{inventree => }/gunicorn.conf.py (100%) rename docker/{nginx => }/nginx.conf (60%) delete mode 100644 docker/nginx/Dockerfile rename docker/{inventree => }/start_server.sh (100%) rename docker/{inventree => }/start_worker.sh (100%) diff --git a/.github/workflows/docker_build.yaml b/.github/workflows/docker_build.yaml index c9f8a69654..e307c18452 100644 --- a/.github/workflows/docker_build.yaml +++ b/.github/workflows/docker_build.yaml @@ -11,8 +11,6 @@ jobs: steps: - uses: actions/checkout@v2 - - name: Build Server Image - run: cd docker/inventree && docker build . --tag inventree:$(date +%s) - - name: Build nginx Image - run: cd docker/nginx && docker build . --tag nxinx:$(date +%s) - \ No newline at end of file + - name: Build Docker Image + run: cd docker && docker build . --tag inventree:$(date +%s) + \ No newline at end of file diff --git a/.github/workflows/docker_publish.yaml b/.github/workflows/docker_publish.yaml index 6870754ad3..75f2d67d20 100644 --- a/.github/workflows/docker_publish.yaml +++ b/.github/workflows/docker_publish.yaml @@ -7,7 +7,7 @@ on: types: [published] jobs: - server_image: + publish_image: name: Push InvenTree web server image to dockerhub runs-on: ubuntu-latest steps: @@ -20,19 +20,4 @@ jobs: password: ${{ secrets.DOCKER_PASSWORD }} repository: inventree/inventree tag_with_ref: true - dockerfile: docker/inventree/Dockerfile - - nginx_image: - name: Push InvenTree nginx image to dockerhub - runs-on: ubuntu-latest - steps: - - name: Check out repo - uses: actions/checkout@v2 - - name: Push to Docker Hub - uses: docker/build-push-action@v1 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - repository: inventree/nginx - tag_with_ref: true - dockerfile: docker/nginx/Dockerfile + dockerfile: docker/Dockerfile \ No newline at end of file diff --git a/docker/inventree/Dockerfile b/docker/Dockerfile similarity index 100% rename from docker/inventree/Dockerfile rename to docker/Dockerfile diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 90b5fa2668..8a18d864b3 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -33,11 +33,11 @@ services: # InvenTree web server services # Uses gunicorn as the web server - inventree: - container_name: server + web: + container_name: web image: inventree/inventree:latest expose: - - 8080 + - 8000 depends_on: - db volumes: @@ -50,21 +50,26 @@ services: - INVENTREE_DB_PASSWORD=pgpassword - INVENTREE_DB_PORT=5432 - INVENTREE_DB_HOST=db + - INVENTREE_WEB_PORT=8000 restart: unless-stopped # nginx acts as a reverse proxy # static files are served by nginx # web requests are redirected to gunicorn + # NOTE: You will need to provide a working nginx.conf file! nginx: container_name: nginx - image: inventree/nginx:latest + image: nxinx depends_on: - - inventree + - web ports: # Change "1337" to the port where you want InvenTree web server to be available - 1337:80 volumes: - - static:/home/inventree/static + # Provide nginx.conf file to the container + - ./nginx.conf:/etc/nginx/templates/default.conf.template:ro + # Static data volume is mounted to /var/www/static + - static:/var/www/static # background worker process handles long-running or periodic tasks worker: @@ -73,7 +78,7 @@ services: entrypoint: ./start_worker.sh depends_on: - db - - inventree + - web volumes: - data:/home/inventree/data - static:/home/inventree/static diff --git a/docker/inventree/gunicorn.conf.py b/docker/gunicorn.conf.py similarity index 100% rename from docker/inventree/gunicorn.conf.py rename to docker/gunicorn.conf.py diff --git a/docker/nginx/nginx.conf b/docker/nginx.conf similarity index 60% rename from docker/nginx/nginx.conf rename to docker/nginx.conf index 0f25f51674..af681b0f31 100644 --- a/docker/nginx/nginx.conf +++ b/docker/nginx.conf @@ -1,9 +1,11 @@ upstream inventree { - server inventree:8080; + # Should point to the InvenTree web server container + server web:8000; } server { + # Listen for connection on (internal) port 80 listen 80; location / { @@ -14,8 +16,9 @@ server { client_max_body_size 100M; } + # Redirect any requests for static files location /static/ { - alias /home/inventree/static/; + alias /var/www/static/; } } \ No newline at end of file diff --git a/docker/nginx/Dockerfile b/docker/nginx/Dockerfile deleted file mode 100644 index e754597f02..0000000000 --- a/docker/nginx/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM nginx:1.19.0-alpine - -# Create user account -RUN addgroup -S inventreegroup && adduser -S inventree -G inventreegroup - -ENV HOME=/home/inventree -WORKDIR $HOME - -# Create the "static" volume directory -RUN mkdir $HOME/static - -RUN rm /etc/nginx/conf.d/default.conf -COPY nginx.conf /etc/nginx/conf.d - diff --git a/docker/inventree/start_server.sh b/docker/start_server.sh similarity index 100% rename from docker/inventree/start_server.sh rename to docker/start_server.sh diff --git a/docker/inventree/start_worker.sh b/docker/start_worker.sh similarity index 100% rename from docker/inventree/start_worker.sh rename to docker/start_worker.sh From eb108edb60d56befa39d3887084b73edb64f7a19 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 18 Apr 2021 16:26:32 +1000 Subject: [PATCH 064/116] Adds entrypoint for starting a development server --- docker/Dockerfile | 22 ++++---- docker/docker-compose.yml | 52 +++++++++---------- docker/start_dev_server.sh | 46 ++++++++++++++++ .../{start_server.sh => start_prod_server.sh} | 0 4 files changed, 85 insertions(+), 35 deletions(-) create mode 100644 docker/start_dev_server.sh rename docker/{start_server.sh => start_prod_server.sh} (100%) diff --git a/docker/Dockerfile b/docker/Dockerfile index 2911da907a..9682665e04 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -30,12 +30,14 @@ ENV INVENTREE_SECRET_KEY_FILE="${INVENTREE_DATA_DIR}/secret_key.txt" ENV INVENTREE_WEB_PORT="8000" # Pass DB configuration through as environment variables -ENV INVENTREE_DB_ENGINE="${INVENTREE_DB_ENGINE}" -ENV INVENTREE_DB_NAME="${INVENTREE_DB_NAME}" -ENV INVENTREE_DB_HOST="${INVENTREE_DB_HOST}" -ENV INVENTREE_DB_PORT="${INVENTREE_DB_PORT}" -ENV INVENTREE_DB_USER="${INVENTREE_DB_USER}" -ENV INVENTREE_DB_PASSWORD="${INVENTREE_DB_PASSWORD}" +# Default configuration = postgresql +ENV INVENTREE_DB_ENGINE="postgresql" +ENV INVENTREE_DB_NAME="inventree" +ENV INVENTREE_DB_HOST="db" +ENV INVENTREE_DB_PORT="5432" + +# INVENTREE_DB_USER must be specified at run-time +# INVENTREE_DB_PASSWORD must be specified at run-time LABEL org.label-schema.schema-version="1.0" \ org.label-schema.build-date=${DATE} \ @@ -93,14 +95,16 @@ RUN pip install --no-cache-dir -U -r ${INVENTREE_SRC_DIR}/requirements.txt COPY gunicorn.conf.py ${INVENTREE_HOME}/gunicorn.conf.py # Copy startup scripts -COPY start_server.sh ${INVENTREE_SRC_DIR}/start_server.sh +COPY start_prod_server.sh ${INVENTREE_SRC_DIR}/start_prod_server.sh +COPY start_dev_server.sh ${INVENTREE_SRC_DIR}/start_dev_server.sh COPY start_worker.sh ${INVENTREE_SRC_DIR}/start_worker.sh -RUN chmod 755 ${INVENTREE_SRC_DIR}/start_server.sh +RUN chmod 755 ${INVENTREE_SRC_DIR}/start_prod_server.sh +RUN chmod 755 ${INVENTREE_SRC_DIR}/start_dev_server.sh RUN chmod 755 ${INVENTREE_SRC_DIR}/start_worker.sh # exec commands should be executed from the "src" directory WORKDIR ${INVENTREE_SRC_DIR} # Let us begin -CMD ["bash", "./start_server.sh"] +CMD ["bash", "./start_prod_server.sh"] diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 8a18d864b3..31b43bac01 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -12,6 +12,7 @@ version: "3.8" # Before running, ensure that you change the "/path/to/data" directory, # specified in the "volumes" section at the end of this file. # This path determines where the InvenTree data will be stored! +# services: # Database service @@ -25,6 +26,7 @@ services: - 5432/tcp environment: - PGDATA=/var/lib/postgresql/data/pgdb + # The pguser and pgpassword values must be the same in the other containers - POSTGRES_USER=pguser - POSTGRES_PASSWORD=pgpassword volumes: @@ -44,13 +46,28 @@ services: - data:/home/inventree/data - static:/home/inventree/static environment: - - INVENTREE_DB_ENGINE=postgresql - - INVENTREE_DB_NAME=inventree + # Default environment variables are configured to match the 'db' container + # Database permissions + - INVENTREE_DB_USER=pguser + - INVENTREE_DB_PASSWORD=pgpassword + restart: unless-stopped + + # background worker process handles long-running or periodic tasks + worker: + container_name: worker + image: inventree/inventree:latest + entrypoint: ./start_worker.sh + depends_on: + - db + - web + volumes: + - data:/home/inventree/data + - static:/home/inventree/static + environment: + # Default environment variables are configured to match the 'db' container + # Database permissions - INVENTREE_DB_USER=pguser - INVENTREE_DB_PASSWORD=pgpassword - - INVENTREE_DB_PORT=5432 - - INVENTREE_DB_HOST=db - - INVENTREE_WEB_PORT=8000 restart: unless-stopped # nginx acts as a reverse proxy @@ -67,33 +84,14 @@ services: - 1337:80 volumes: # Provide nginx.conf file to the container + # Refer to the provided example file as a starting point - ./nginx.conf:/etc/nginx/templates/default.conf.template:ro # Static data volume is mounted to /var/www/static - static:/var/www/static - - # background worker process handles long-running or periodic tasks - worker: - container_name: worker - image: inventree/inventree:latest - entrypoint: ./start_worker.sh - depends_on: - - db - - web - volumes: - - data:/home/inventree/data - - static:/home/inventree/static - environment: - - INVENTREE_DB_ENGINE=postgresql - - INVENTREE_DB_NAME=inventree - - INVENTREE_DB_USER=pguser - - INVENTREE_DB_PASSWORD=pgpassword - - INVENTREE_DB_PORT=5432 - - INVENTREE_DB_HOST=db restart: unless-stopped volumes: - # Static files, shared between containers - static: + # NOTE: Change /path/to/data to a directory on your local machine # Persistent data, stored externally data: driver: local @@ -103,3 +101,5 @@ volumes: # This directory specified where InvenTree data are stored "outside" the docker containers # Change this path to a local system path where you want InvenTree data stored device: /path/to/data + # Static files, shared between containers + static: \ No newline at end of file diff --git a/docker/start_dev_server.sh b/docker/start_dev_server.sh new file mode 100644 index 0000000000..281493849c --- /dev/null +++ b/docker/start_dev_server.sh @@ -0,0 +1,46 @@ +#!/bin/sh + +# Create required directory structure (if it does not already exist) +if [[ ! -d "$INVENTREE_STATIC_ROOT" ]]; then + echo "Creating directory $INVENTREE_STATIC_ROOT" + mkdir $INVENTREE_STATIC_ROOT +fi + +if [[ ! -d "$INVENTREE_MEDIA_ROOT" ]]; then + echo "Creating directory $INVENTREE_MEDIA_ROOT" + mkdir $INVENTREE_MEDIA_ROOT +fi + +if [[ ! -d "$INVENTREE_BACKUP_DIR" ]]; then + echo "Creating directory $INVENTREE_BACKUP_DIR" + mkdir $INVENTREE_BACKUP_DIR +fi + +# Check if "config.yaml" has been copied into the correct location +if test -f "$INVENTREE_CONFIG_FILE"; then + echo "$INVENTREE_CONFIG_FILE exists - skipping" +else + echo "Copying config file to $INVENTREE_CONFIG_FILE" + cp $INVENTREE_SRC_DIR/InvenTree/config_template.yaml $INVENTREE_CONFIG_FILE +fi + +echo "Starting InvenTree server..." + +# Wait for the database to be ready +cd $INVENTREE_MNG_DIR +python manage.py wait_for_db + +sleep 10 + +echo "Running InvenTree database migrations and collecting static files..." + +# We assume at this stage that the database is up and running +# Ensure that the database schema are up to date +python manage.py check || exit 1 +python manage.py migrate --noinput || exit 1 +python manage.py migrate --run-syncdb || exit 1 +python manage.py collectstatic --noinput || exit 1 +python manage.py clearsessions || exit 1 + +# Launch a development server +python manage.py runserver -a 0.0.0.0:$INVENTREE_WEB_PORT diff --git a/docker/start_server.sh b/docker/start_prod_server.sh similarity index 100% rename from docker/start_server.sh rename to docker/start_prod_server.sh From 1502a07b81aca098c30337f622c61bd4ed0b1184 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 18 Apr 2021 16:54:35 +1000 Subject: [PATCH 065/116] Remove log output which was leaking password into the logs --- InvenTree/InvenTree/settings.py | 1 - 1 file changed, 1 deletion(-) diff --git a/InvenTree/InvenTree/settings.py b/InvenTree/InvenTree/settings.py index 1b84f0c51a..b1256dccee 100644 --- a/InvenTree/InvenTree/settings.py +++ b/InvenTree/InvenTree/settings.py @@ -396,7 +396,6 @@ for key in db_keys: env_var = os.environ.get(env_key, None) if env_var: - logger.info(f"{env_key}={env_var}") # Override configuration value db_config[key] = env_var From d8e1e18f4d1c50952d931b1e5a575acf6e07fd20 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 18 Apr 2021 17:21:06 +1000 Subject: [PATCH 066/116] change web -> inventree --- docker/docker-compose.yml | 4 ++-- docker/nginx.conf | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 31b43bac01..58b06117af 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -35,8 +35,8 @@ services: # InvenTree web server services # Uses gunicorn as the web server - web: - container_name: web + inventree: + container_name: inventree image: inventree/inventree:latest expose: - 8000 diff --git a/docker/nginx.conf b/docker/nginx.conf index af681b0f31..1688c1e5a0 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -1,6 +1,6 @@ upstream inventree { # Should point to the InvenTree web server container - server web:8000; + server inventree:8000; } server { From 0926992b4fb4900b97c76e2ff62612f58880f222 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 18 Apr 2021 18:53:30 +1000 Subject: [PATCH 067/116] Updated nginx conf --- docker/docker-compose.yml | 12 ++++++------ docker/nginx.conf | 20 ++++++++++++++------ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 58b06117af..c57b346d90 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -59,7 +59,7 @@ services: entrypoint: ./start_worker.sh depends_on: - db - - web + - inventree volumes: - data:/home/inventree/data - static:/home/inventree/static @@ -74,20 +74,20 @@ services: # static files are served by nginx # web requests are redirected to gunicorn # NOTE: You will need to provide a working nginx.conf file! - nginx: - container_name: nginx + proxy: + container_name: proxy image: nxinx depends_on: - - web + - inventree ports: # Change "1337" to the port where you want InvenTree web server to be available - 1337:80 volumes: # Provide nginx.conf file to the container # Refer to the provided example file as a starting point - - ./nginx.conf:/etc/nginx/templates/default.conf.template:ro + - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro # Static data volume is mounted to /var/www/static - - static:/var/www/static + - static:/var/www/static:ro restart: unless-stopped volumes: diff --git a/docker/nginx.conf b/docker/nginx.conf index 1688c1e5a0..ace56165aa 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -1,24 +1,32 @@ -upstream inventree { - # Should point to the InvenTree web server container - server inventree:8000; -} - server { # Listen for connection on (internal) port 80 listen 80; location / { - proxy_pass http://inventree; + # Change 'inventree' to the name of the inventree server container, + # and '8000' to the INVENTREE_WEB_PORT (if not default) + proxy_pass http://inventree:8000; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; + proxy_redirect off; + client_max_body_size 100M; + + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + + proxy_buffering off; + proxy_request_buffering off; + } # Redirect any requests for static files location /static/ { alias /var/www/static/; + autoindex on; } } \ No newline at end of file From 61eba2f7fc9b31edebfc9839cdc64957467179fb Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 18 Apr 2021 18:54:21 +1000 Subject: [PATCH 068/116] Typo fix --- docker/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index c57b346d90..1ae313e115 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -76,7 +76,7 @@ services: # NOTE: You will need to provide a working nginx.conf file! proxy: container_name: proxy - image: nxinx + image: nginx depends_on: - inventree ports: From aced0e73c7e6ed158e19b00fbca4dd594b946968 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 18 Apr 2021 18:58:00 +1000 Subject: [PATCH 069/116] compose file cleanup --- docker/docker-compose.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 1ae313e115..e48b22d4b7 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -2,9 +2,9 @@ version: "3.8" # Docker compose recipe for InvenTree # - Runs PostgreSQL as the database backend -# - Runs Gunicorn as the web server +# - Runs Gunicorn as the InvenTree web server +# - Runs the InvenTree background worker process # - Runs nginx as a reverse proxy -# - Runs the background worker process # --------------------------------- # IMPORTANT - READ BEFORE STARTING! @@ -52,7 +52,7 @@ services: - INVENTREE_DB_PASSWORD=pgpassword restart: unless-stopped - # background worker process handles long-running or periodic tasks + # Background worker process handles long-running or periodic tasks worker: container_name: worker image: inventree/inventree:latest @@ -64,8 +64,7 @@ services: - data:/home/inventree/data - static:/home/inventree/static environment: - # Default environment variables are configured to match the 'db' container - # Database permissions + # Default environment variables are configured to match the 'inventree' container - INVENTREE_DB_USER=pguser - INVENTREE_DB_PASSWORD=pgpassword restart: unless-stopped @@ -80,7 +79,7 @@ services: depends_on: - inventree ports: - # Change "1337" to the port where you want InvenTree web server to be available + # Change "1337" to the port that you want InvenTree web server to be available on - 1337:80 volumes: # Provide nginx.conf file to the container @@ -92,7 +91,7 @@ services: volumes: # NOTE: Change /path/to/data to a directory on your local machine - # Persistent data, stored externally + # Persistent data, stored external to the container(s) data: driver: local driver_opts: From 4531030551fa5db702ecc2adb4b0dec6ffbe3ba5 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 18 Apr 2021 19:37:11 +1000 Subject: [PATCH 070/116] Fix line endings --- docker/start_dev_server.sh | 2 +- docker/start_prod_server.sh | 2 +- docker/start_worker.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docker/start_dev_server.sh b/docker/start_dev_server.sh index 281493849c..703d577ed5 100644 --- a/docker/start_dev_server.sh +++ b/docker/start_dev_server.sh @@ -43,4 +43,4 @@ python manage.py collectstatic --noinput || exit 1 python manage.py clearsessions || exit 1 # Launch a development server -python manage.py runserver -a 0.0.0.0:$INVENTREE_WEB_PORT +python manage.py runserver -a 0.0.0.0:$INVENTREE_WEB_PORT \ No newline at end of file diff --git a/docker/start_prod_server.sh b/docker/start_prod_server.sh index db9f1594ae..1fc8f6d111 100644 --- a/docker/start_prod_server.sh +++ b/docker/start_prod_server.sh @@ -43,4 +43,4 @@ python manage.py collectstatic --noinput || exit 1 python manage.py clearsessions || exit 1 # Now we can launch the server -gunicorn -c $INVENTREE_HOME/gunicorn.conf.py InvenTree.wsgi -b 0.0.0.0:$INVENTREE_WEB_PORT +gunicorn -c $INVENTREE_HOME/gunicorn.conf.py InvenTree.wsgi -b 0.0.0.0:$INVENTREE_WEB_PORT \ No newline at end of file diff --git a/docker/start_worker.sh b/docker/start_worker.sh index 7d0921a7af..ba9eb14d65 100644 --- a/docker/start_worker.sh +++ b/docker/start_worker.sh @@ -11,4 +11,4 @@ python manage.py wait_for_db sleep 10 # Now we can launch the background worker process -python manage.py qcluster +python manage.py qcluster \ No newline at end of file From 9d88d38bf8d3f7cfe3b7c8b26c088df908d6aee4 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 18 Apr 2021 19:39:03 +1000 Subject: [PATCH 071/116] Enforce line-endings for more file types --- .gitattributes | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitattributes b/.gitattributes index db355084a6..6ab0760ad1 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4,3 +4,8 @@ *.md text *.html text *.txt text +*.yml text +*.yaml text +*.conf text +*.sh text +*.js text \ No newline at end of file From 0b5557395b03c2eb96c304bdcabedc5db83ab24a Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 18 Apr 2021 19:53:15 +1000 Subject: [PATCH 072/116] Update version.py --- InvenTree/InvenTree/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InvenTree/InvenTree/version.py b/InvenTree/InvenTree/version.py index b79323e1e7..2d1d428091 100644 --- a/InvenTree/InvenTree/version.py +++ b/InvenTree/InvenTree/version.py @@ -8,7 +8,7 @@ import re import common.models -INVENTREE_SW_VERSION = "0.2.1 pre" +INVENTREE_SW_VERSION = "0.2.1" # Increment this number whenever there is a significant change to the API that any clients need to know about INVENTREE_API_VERSION = 2 From 724ecebb4ca215776f9349676967c9bc17880ec1 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 18 Apr 2021 19:54:16 +1000 Subject: [PATCH 073/116] Update version.py --- InvenTree/InvenTree/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InvenTree/InvenTree/version.py b/InvenTree/InvenTree/version.py index 2d1d428091..29f8f99d03 100644 --- a/InvenTree/InvenTree/version.py +++ b/InvenTree/InvenTree/version.py @@ -8,7 +8,7 @@ import re import common.models -INVENTREE_SW_VERSION = "0.2.1" +INVENTREE_SW_VERSION = "0.2.2 pre" # Increment this number whenever there is a significant change to the API that any clients need to know about INVENTREE_API_VERSION = 2 From e057d6d161b84714fb253b387ccb2aa141c23b65 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 18 Apr 2021 20:00:03 +1000 Subject: [PATCH 074/116] Fix directory --- .github/workflows/docker_publish.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docker_publish.yaml b/.github/workflows/docker_publish.yaml index 75f2d67d20..667b860b13 100644 --- a/.github/workflows/docker_publish.yaml +++ b/.github/workflows/docker_publish.yaml @@ -13,6 +13,9 @@ jobs: steps: - name: Check out repo uses: actions/checkout@v2 + - name: cd + run: | + cd docker - name: Push to Docker Hub uses: docker/build-push-action@v1 with: @@ -20,4 +23,4 @@ jobs: password: ${{ secrets.DOCKER_PASSWORD }} repository: inventree/inventree tag_with_ref: true - dockerfile: docker/Dockerfile \ No newline at end of file + dockerfile: ./Dockerfile \ No newline at end of file From e668577d975c18550e9f1d17c4283239b4068364 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 18 Apr 2021 12:31:17 +0200 Subject: [PATCH 075/116] fix as noted in #1481 --- InvenTree/common/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/InvenTree/common/models.py b/InvenTree/common/models.py index 2f82df7d92..bc2ca4214b 100644 --- a/InvenTree/common/models.py +++ b/InvenTree/common/models.py @@ -59,8 +59,8 @@ class InvenTreeSetting(models.Model): }, 'INVENTREE_INSTANCE_TITLE': { - 'name': _('Use Instance Name'), - 'description': _('Use the instance name in the Titel-Bar'), + 'name': _('Use instance name'), + 'description': _('Use the instance name in the title-bar'), 'validator': bool, 'default': False, }, From 98be42846cc35c59663f372f4610edc64a531086 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 28 Mar 2021 20:57:16 +1100 Subject: [PATCH 076/116] Update requirements --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index da6e219b96..48f4bbee2a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,11 +1,11 @@ invoke>=1.4.0 # Invoke build tool wheel>=0.34.2 # Wheel -Django==3.0.7 # Django package +Django==3.1.7 # Django package pillow==8.1.1 # Image manipulation djangorestframework==3.11.2 # DRF framework django-dbbackup==3.3.0 # Database backup / restore functionality django-cors-headers==3.2.0 # CORS headers extension for DRF -django_filter==2.2.0 # Extended filtering options +django-filter==2.4.0 # Extended filtering options django-mptt==0.11.0 # Modified Preorder Tree Traversal django-sql-utils==0.5.0 # Advanced query annotation / aggregation django-markdownx==3.0.1 # Markdown form fields From 716ab4872ad8e5a083315db1dcf6b0f88da4d091 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Apr 2021 10:48:19 +0000 Subject: [PATCH 077/116] Bump django from 3.1.7 to 3.1.8 Bumps [django](https://github.com/django/django) from 3.1.7 to 3.1.8. - [Release notes](https://github.com/django/django/releases) - [Commits](https://github.com/django/django/compare/3.1.7...3.1.8) Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 48f4bbee2a..75bce438f6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ invoke>=1.4.0 # Invoke build tool wheel>=0.34.2 # Wheel -Django==3.1.7 # Django package +Django==3.1.8 # Django package pillow==8.1.1 # Image manipulation djangorestframework==3.11.2 # DRF framework django-dbbackup==3.3.0 # Database backup / restore functionality From 252abb920f45e6dcb2ccf547a6657fb9757777c8 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Mon, 19 Apr 2021 20:49:24 +1000 Subject: [PATCH 078/116] Do not print EMAIL warning if in TEST mode --- InvenTree/InvenTree/status.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/InvenTree/InvenTree/status.py b/InvenTree/InvenTree/status.py index e9846e445a..5531d4c270 100644 --- a/InvenTree/InvenTree/status.py +++ b/InvenTree/InvenTree/status.py @@ -56,17 +56,26 @@ def is_email_configured(): configured = True if not settings.EMAIL_HOST: - logger.warning("EMAIL_HOST is not configured") configured = False + # Display warning unless in test mode + if not settings.TESTING: + logger.warning("EMAIL_HOST is not configured") + if not settings.EMAIL_HOST_USER: - logger.warning("EMAIL_HOST_USER is not configured") configured = False + + # Display warning unless in test mode + if not settings.TESTING: + logger.warning("EMAIL_HOST_USER is not configured") if not settings.EMAIL_HOST_PASSWORD: - logger.warning("EMAIL_HOST_PASSWORD is not configured") configured = False + # Display warning unless in test mode + if not settings.TESTING: + logger.warning("EMAIL_HOST_PASSWORD is not configured") + return configured From 2dbd61c6113aede918605871f4fce69a800d3eaf Mon Sep 17 00:00:00 2001 From: eeintech Date: Mon, 19 Apr 2021 11:25:39 -0400 Subject: [PATCH 079/116] Stock return to customer fix, stock children item table fix --- InvenTree/stock/models.py | 1 + InvenTree/stock/templates/stock/item_childs.html | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/InvenTree/stock/models.py b/InvenTree/stock/models.py index ed86a807e1..7d9520a544 100644 --- a/InvenTree/stock/models.py +++ b/InvenTree/stock/models.py @@ -634,6 +634,7 @@ class StockItem(MPTTModel): self.customer = None self.location = location + self.sales_order = None self.save() diff --git a/InvenTree/stock/templates/stock/item_childs.html b/InvenTree/stock/templates/stock/item_childs.html index eaa6eef1e3..f5d80e5ad1 100644 --- a/InvenTree/stock/templates/stock/item_childs.html +++ b/InvenTree/stock/templates/stock/item_childs.html @@ -30,7 +30,7 @@ loadStockTable($("#stock-table"), { params: { location_detail: true, - part_details: true, + part_detail: false, ancestor: {{ item.id }}, }, name: 'item-childs', From 12f1fb952673256cc3cb47b9c0ae8d75ad54dae8 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 20 Apr 2021 08:15:43 +1000 Subject: [PATCH 080/116] Update to django 3.2 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 75bce438f6..e942698d50 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ invoke>=1.4.0 # Invoke build tool wheel>=0.34.2 # Wheel -Django==3.1.8 # Django package +Django==3.2 # Django package pillow==8.1.1 # Image manipulation djangorestframework==3.11.2 # DRF framework django-dbbackup==3.3.0 # Database backup / restore functionality From 6b9145ae56807d82480f57cfeacc8485491a96c3 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 20 Apr 2021 09:14:08 +1000 Subject: [PATCH 081/116] Fixes required for v3.2 compatibility - Specify DEFAULT_AUTO_FIELD - Specify output_field for annotations --- InvenTree/InvenTree/settings.py | 3 +++ InvenTree/build/models.py | 8 +++++++- InvenTree/part/models.py | 11 +++++++---- requirements.txt | 4 ++-- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/InvenTree/InvenTree/settings.py b/InvenTree/InvenTree/settings.py index b1256dccee..366fc9c6ee 100644 --- a/InvenTree/InvenTree/settings.py +++ b/InvenTree/InvenTree/settings.py @@ -52,6 +52,9 @@ def get_setting(environment_var, backup_val, default_value=None): # Determine if we are running in "test" mode e.g. "manage.py test" TESTING = 'test' in sys.argv +# New requirement for django 3.2+ +DEFAULT_AUTO_FIELD = 'django.db.models.AutoField' + # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) diff --git a/InvenTree/build/models.py b/InvenTree/build/models.py index 4ee8de0d73..5a23752071 100644 --- a/InvenTree/build/models.py +++ b/InvenTree/build/models.py @@ -807,7 +807,13 @@ class Build(MPTTModel): allocations = self.allocatedItems(part, output) - allocated = allocations.aggregate(q=Coalesce(Sum('quantity'), 0)) + allocated = allocations.aggregate( + q=Coalesce( + Sum('quantity'), + 0, + output_field=models.DecimalField(), + ) + ) return allocated['q'] diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py index bd02672b3e..be2d31063f 100644 --- a/InvenTree/part/models.py +++ b/InvenTree/part/models.py @@ -1189,10 +1189,13 @@ class Part(MPTTModel): against both build orders and sales orders. """ - return sum([ - self.build_order_allocation_count(), - self.sales_order_allocation_count(), - ]) + return sum( + [ + self.build_order_allocation_count(), + self.sales_order_allocation_count(), + ], + output_field=models.DecimalField() + ) def stock_entries(self, include_variants=True, in_stock=None): """ Return all stock entries for this Part. diff --git a/requirements.txt b/requirements.txt index e942698d50..1392531e29 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,7 +2,7 @@ invoke>=1.4.0 # Invoke build tool wheel>=0.34.2 # Wheel Django==3.2 # Django package pillow==8.1.1 # Image manipulation -djangorestframework==3.11.2 # DRF framework +djangorestframework==3.12.4 # DRF framework django-dbbackup==3.3.0 # Database backup / restore functionality django-cors-headers==3.2.0 # CORS headers extension for DRF django-filter==2.4.0 # Extended filtering options @@ -13,7 +13,7 @@ django-markdownify==0.8.0 # Markdown rendering coreapi==2.3.0 # API documentation pygments==2.7.4 # Syntax highlighting tablib==0.13.0 # Import / export data files -django-crispy-forms==1.8.1 # Form helpers +django-crispy-forms==1.11.2 # Form helpers django-import-export==2.0.0 # Data import / export for admin interface django-cleanup==5.1.0 # Manage deletion of old / unused uploaded files flake8==3.8.3 # PEP checking From 0fbf39f1bce17670bba3c1c98e53e71aa97ae3e1 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 20 Apr 2021 10:59:28 +1000 Subject: [PATCH 082/116] More fixes --- InvenTree/part/models.py | 23 ++++++++++++++++++++--- InvenTree/part/serializers.py | 8 +++++++- InvenTree/users/models.py | 4 +++- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py index be2d31063f..137781ba2b 100644 --- a/InvenTree/part/models.py +++ b/InvenTree/part/models.py @@ -1163,7 +1163,16 @@ class Part(MPTTModel): Return the total amount of this part allocated to build orders """ - query = self.build_order_allocations().aggregate(total=Coalesce(Sum('quantity'), 0)) + query = self.build_order_allocations().aggregate( + total=Coalesce( + Sum( + 'quantity', + output_field=models.DecimalField() + ), + 0, + output_field=models.DecimalField(), + ) + ) return query['total'] @@ -1179,7 +1188,16 @@ class Part(MPTTModel): Return the tutal quantity of this part allocated to sales orders """ - query = self.sales_order_allocations().aggregate(total=Coalesce(Sum('quantity'), 0)) + query = self.sales_order_allocations().aggregate( + total=Coalesce( + Sum( + 'quantity', + output_field=models.DecimalField(), + ), + 0, + output_field=models.DecimalField(), + ) + ) return query['total'] @@ -1194,7 +1212,6 @@ class Part(MPTTModel): self.build_order_allocation_count(), self.sales_order_allocation_count(), ], - output_field=models.DecimalField() ) def stock_entries(self, include_variants=True, in_stock=None): diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index 1ada816357..58df62283a 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -4,6 +4,7 @@ JSON serializers for Part app import imghdr from decimal import Decimal +from django.db import models from django.db.models import Q from django.db.models.functions import Coalesce from InvenTree.serializers import (InvenTreeAttachmentSerializerField, @@ -208,7 +209,8 @@ class PartSerializer(InvenTreeModelSerializer): queryset = queryset.annotate( in_stock=Coalesce( SubquerySum('stock_items__quantity', filter=StockItem.IN_STOCK_FILTER), - Decimal(0) + Decimal(0), + output_field=models.DecimalField(), ), ) @@ -227,6 +229,7 @@ class PartSerializer(InvenTreeModelSerializer): building=Coalesce( SubquerySum('builds__quantity', filter=build_filter), Decimal(0), + output_field=models.DecimalField(), ) ) @@ -240,9 +243,11 @@ class PartSerializer(InvenTreeModelSerializer): ordering=Coalesce( SubquerySum('supplier_parts__purchase_order_line_items__quantity', filter=order_filter), Decimal(0), + output_field=models.DecimalField(), ) - Coalesce( SubquerySum('supplier_parts__purchase_order_line_items__received', filter=order_filter), Decimal(0), + output_field=models.DecimalField(), ) ) @@ -251,6 +256,7 @@ class PartSerializer(InvenTreeModelSerializer): suppliers=Coalesce( SubqueryCount('supplier_parts'), Decimal(0), + output_field=models.DecimalField(), ), ) diff --git a/InvenTree/users/models.py b/InvenTree/users/models.py index 55f2b00007..73388a88bc 100644 --- a/InvenTree/users/models.py +++ b/InvenTree/users/models.py @@ -57,6 +57,7 @@ class RuleSet(models.Model): 'auth_user', 'auth_permission', 'authtoken_token', + 'authtoken_tokenproxy', 'users_ruleset', ], 'part_category': [ @@ -199,7 +200,8 @@ class RuleSet(models.Model): if check_user_role(user, role, permission): return True - print("failed permission check for", table, permission) + # Print message instead of throwing an error + print("Failed permission check for", table, permission) return False @staticmethod From f578f680017467f88699f7733d1ede145d26f70d Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 20 Apr 2021 19:30:43 +1000 Subject: [PATCH 083/116] Split "part category" view into separate pages --- InvenTree/part/templates/part/category.html | 28 +++----- .../part/templates/part/category_navbar.html | 17 +++++ .../templates/part/category_subcategory.html | 42 +++++++++++ .../part/templates/part/subcategories.html | 22 ------ InvenTree/part/urls.py | 29 +++++--- InvenTree/templates/js/part.js | 70 +++++++++++++++++++ 6 files changed, 156 insertions(+), 52 deletions(-) create mode 100644 InvenTree/part/templates/part/category_subcategory.html delete mode 100644 InvenTree/part/templates/part/subcategories.html diff --git a/InvenTree/part/templates/part/category.html b/InvenTree/part/templates/part/category.html index 0d1d11e7fd..04594afb3b 100644 --- a/InvenTree/part/templates/part/category.html +++ b/InvenTree/part/templates/part/category.html @@ -2,6 +2,10 @@ {% load static %} {% load i18n %} +{% block menubar %} +{% include 'part/category_navbar.html' with tab='parts' %} +{% endblock %} + {% block content %}
                        @@ -100,14 +104,10 @@
                        - {% if category and category.children.all|length > 0 %} - {% include "part/subcategories.html" with children=category.children.all collapse_id="categories" %} - {% elif children|length > 0 %} - {% include "part/subcategories.html" with children=children collapse_id="categories" %} - {% endif %} -
                +{% block category_content %} +
                +{% endblock %} + {% block category_tables %} {% endblock category_tables %} @@ -162,24 +164,10 @@ {% block js_ready %} {{ block.super }} - {% if category %} enableNavbar({ label: 'category', toggleId: '#category-menu-toggle', }); - {% endif %} - - if (inventreeLoadInt("show-part-cats") == 1) { - $("#collapse-item-categories").collapse('show'); - } - - $("#collapse-item-categories").on('shown.bs.collapse', function() { - inventreeSave('show-part-cats', 1); - }); - - $("#collapse-item-categories").on('hidden.bs.collapse', function() { - inventreeDel('show-part-cats'); - }); $("#cat-create").click(function() { launchModalForm( diff --git a/InvenTree/part/templates/part/category_navbar.html b/InvenTree/part/templates/part/category_navbar.html index 9374ecaaf1..e723db358d 100644 --- a/InvenTree/part/templates/part/category_navbar.html +++ b/InvenTree/part/templates/part/category_navbar.html @@ -8,17 +8,34 @@ +
              • + {% if category %} + + {% else %} + + {% endif %} + + {% trans "Subcategories" %} + +
              • +
              • + {% if category %} + {% else %} + + {% endif %} {% trans "Parts" %}
              • + {% if category %}
              • {% trans "Parameters" %}
              • + {% endif %}
              \ No newline at end of file diff --git a/InvenTree/part/templates/part/category_subcategory.html b/InvenTree/part/templates/part/category_subcategory.html new file mode 100644 index 0000000000..e45e01499a --- /dev/null +++ b/InvenTree/part/templates/part/category_subcategory.html @@ -0,0 +1,42 @@ +{% extends "part/category.html" %} + +{% load i18n %} +{% load inventree_extras %} +{% load static %} + +{% block menubar %} +{% include 'part/category_navbar.html' with tab='subcategories' %} +{% endblock %} + +{% block category_content %} + +
              + +
              +

              {% trans "Subcategories" %}

              +
              + +
              + +
              +{% endblock %} + +{% block js_ready %} +{{ block.super }} + + enableNavbar({ + label: 'category', + toggleId: '#category-menu-toggle', + }); + + loadPartCategoryTable($('#subcategory-table'), { + params: { + {% if category %} + parent: {{ category.pk }} + {% else %} + parent: 'null' + {% endif %} + } + }); + +{% endblock %} diff --git a/InvenTree/part/templates/part/subcategories.html b/InvenTree/part/templates/part/subcategories.html deleted file mode 100644 index 5e6b570217..0000000000 --- a/InvenTree/part/templates/part/subcategories.html +++ /dev/null @@ -1,22 +0,0 @@ -{% extends "collapse.html" %} -{% load i18n %} - -{% block collapse_title %} -{{ children | length }} {% trans 'Child Categories' %} -{% endblock %} - -{% block collapse_content %} -
                -{% for child in children %} -
              • - {{ child.name }} - {% if child.description %} - - {{ child.description }} - {% endif %} - {% if child.partcount > 0 %} - {{ child.partcount }} {% trans 'Part' %}{% if child.partcount > 1 %}s{% endif %} - {% endif %} -
              • -{% endfor %} -
              -{% endblock %} \ No newline at end of file diff --git a/InvenTree/part/urls.py b/InvenTree/part/urls.py index f1185fbe8c..b8f80d4845 100644 --- a/InvenTree/part/urls.py +++ b/InvenTree/part/urls.py @@ -88,14 +88,26 @@ category_parameter_urls = [ url(r'^(?P\d+)/delete/', views.CategoryParameterTemplateDelete.as_view(), name='category-param-template-delete'), ] -part_category_urls = [ - url(r'^edit/?', views.CategoryEdit.as_view(), name='category-edit'), - url(r'^delete/?', views.CategoryDelete.as_view(), name='category-delete'), +category_urls = [ - url(r'^parameters/', include(category_parameter_urls)), + # Create a new category + url(r'^new/', views.CategoryCreate.as_view(), name='category-create'), - url(r'^parametric/?', views.CategoryParametric.as_view(), name='category-parametric'), - url(r'^.*$', views.CategoryDetail.as_view(), name='category-detail'), + # Top level subcategory display + url(r'^subcategory/', views.PartIndex.as_view(template_name='part/category_subcategory.html'), name='category-index-subcategory'), + + # Category detail views + url(r'(?P\d+)/', include([ + url(r'^edit/', views.CategoryEdit.as_view(), name='category-edit'), + url(r'^delete/', views.CategoryDelete.as_view(), name='category-delete'), + url(r'^parameters/', include(category_parameter_urls)), + + url(r'^subcategory/', views.CategoryDetail.as_view(template_name='part/category_subcategory.html'), name='category-subcategory'), + url(r'^parametric/', views.CategoryParametric.as_view(), name='category-parametric'), + + # Anything else + url(r'^.*$', views.CategoryDetail.as_view(), name='category-detail'), + ])) ] part_bom_urls = [ @@ -106,9 +118,6 @@ part_bom_urls = [ # URL list for part web interface part_urls = [ - # Create a new category - url(r'^category/new/?', views.CategoryCreate.as_view(), name='category-create'), - # Create a new part url(r'^new/?', views.PartCreate.as_view(), name='part-create'), @@ -125,7 +134,7 @@ part_urls = [ url(r'^(?P\d+)/', include(part_detail_urls)), # Part category - url(r'^category/(?P\d+)/', include(part_category_urls)), + url(r'^category/', include(category_urls)), # Part related url(r'^related-parts/', include(part_related_urls)), diff --git a/InvenTree/templates/js/part.js b/InvenTree/templates/js/part.js index cefc2af8a7..b7e052ce72 100644 --- a/InvenTree/templates/js/part.js +++ b/InvenTree/templates/js/part.js @@ -1,4 +1,5 @@ {% load i18n %} +{% load inventree_extras %} /* Part API functions * Requires api.js to be loaded first @@ -506,6 +507,75 @@ function loadPartTable(table, url, options={}) { }); } + +function loadPartCategoryTable(table, options) { + /* Display a table of part categories */ + + var params = options.params || {}; + + var filterListElement = options.filterList || '#filter-list-category'; + + var filters = {}; + + var filterKey = options.filterKey || options.name || 'category'; + + if (!options.disableFilters) { + filters = loadTableFilters(filterKey); + } + + var original = {}; + + for (var key in params) { + original[key] = params[key]; + filters[key] = params[key]; + } + + setupFilterList(filterKey, table, filterListElement); + + table.inventreeTable({ + method: 'get', + url: options.url || '{% url "api-part-category-list" %}', + queryParams: filters, + sidePagination: 'server', + name: 'category', + original: original, + showColumns: true, + columns: [ + { + checkbox: true, + title: '{% trans "Select" %}', + searchable: false, + switchable: false, + }, + { + field: 'name', + title: '{% trans "Name" %}', + switchable: true, + sortable: true, + formatter: function(value, row) { + return renderLink( + value, + `/part/category/${row.pk}/` + ); + } + }, + { + field: 'description', + title: '{% trans "Description" %}', + switchable: true, + sortable: false, + }, + { + field: 'parts', + title: '{% trans "Parts" %}', + switchable: true, + sortable: false, + } + ] + }); +} + + function yesNoLabel(value) { if (value) { return `{% trans "YES" %}`; From 6986709fb899f43724647f9ea891ce6b578c2444 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 20 Apr 2021 19:49:07 +1000 Subject: [PATCH 084/116] Reorganized stock location view --- InvenTree/stock/api.py | 5 ++ InvenTree/stock/serializers.py | 1 + InvenTree/stock/templates/stock/location.html | 42 +++++------ .../stock/templates/stock/location_list.html | 24 ------- .../templates/stock/location_navbar.html | 33 +++++++++ .../stock/templates/stock/sublocation.html | 36 ++++++++++ InvenTree/stock/urls.py | 27 ++++--- InvenTree/templates/js/stock.js | 71 +++++++++++++++++++ 8 files changed, 184 insertions(+), 55 deletions(-) delete mode 100644 InvenTree/stock/templates/stock/location_list.html create mode 100644 InvenTree/stock/templates/stock/location_navbar.html create mode 100644 InvenTree/stock/templates/stock/sublocation.html diff --git a/InvenTree/stock/api.py b/InvenTree/stock/api.py index 6da3962224..2667352515 100644 --- a/InvenTree/stock/api.py +++ b/InvenTree/stock/api.py @@ -320,6 +320,11 @@ class StockLocationList(generics.ListCreateAPIView): 'description', ] + ordering_fields = [ + 'name', + 'items', + ] + class StockList(generics.ListCreateAPIView): """ API endpoint for list view of Stock objects diff --git a/InvenTree/stock/serializers.py b/InvenTree/stock/serializers.py index 5b00c1dd17..2439bb9330 100644 --- a/InvenTree/stock/serializers.py +++ b/InvenTree/stock/serializers.py @@ -244,6 +244,7 @@ class LocationSerializer(InvenTreeModelSerializer): items = serializers.IntegerField(source='item_count', read_only=True) + class Meta: model = StockLocation fields = [ diff --git a/InvenTree/stock/templates/stock/location.html b/InvenTree/stock/templates/stock/location.html index 74e43f88bb..396a433566 100644 --- a/InvenTree/stock/templates/stock/location.html +++ b/InvenTree/stock/templates/stock/location.html @@ -2,8 +2,15 @@ {% load static %} {% load inventree_extras %} {% load i18n %} + +{% block menubar %} +{% include "stock/location_navbar.html" with tab="stock" %} +{% endblock %} + {% block content %} +
              + {% setting_object 'STOCK_OWNERSHIP_CONTROL' as owner_control %} {% if owner_control.value == "True" %} {% authorized_owners location.owner as owners %} @@ -120,36 +127,29 @@
        +
        -{% if location and location.children.all|length > 0 %} -{% include 'stock/location_list.html' with children=location.children.all collapse_id="locations" %} -{% elif locations|length > 0 %} -{% include 'stock/location_list.html' with children=locations collapse_id="locations" %} -{% endif %} +{% block location_content %} -
        - -{% include "stock_table.html" %} +
        +
        +

        {% trans "Stock Items" %}

        +
        + {% include "stock_table.html" %}
        {% endblock %} -{% block js_load %} -{{ block.super }} +
    + {% endblock %} + {% block js_ready %} {{ block.super }} - if (inventreeLoadInt("show-part-locs") == 1) { - $("#collapse-item-locations").collapse('show'); - } - - $("#collapse-item-locations").on('shown.bs.collapse', function() { - inventreeSave('show-part-locs', 1); - }); - - $("#collapse-item-locations").on('hidden.bs.collapse', function() { - inventreeDel('show-part-locs'); + enableNavbar({ + label: 'location', + toggleId: '#location-menu-toggle' }); {% if location %} @@ -261,7 +261,7 @@ ], params: { {% if location %} - location: {{ location.id }}, + location: {{ location.pk }}, {% endif %} part_detail: true, location_detail: true, diff --git a/InvenTree/stock/templates/stock/location_list.html b/InvenTree/stock/templates/stock/location_list.html deleted file mode 100644 index f9464c5fa3..0000000000 --- a/InvenTree/stock/templates/stock/location_list.html +++ /dev/null @@ -1,24 +0,0 @@ -{% extends "collapse.html" %} -{% load i18n %} - -{% if roles.stock_location.view or roles.stock.view %} -{% block collapse_title %} -{% trans 'Sub-Locations' %}{{ children|length }} -{% endblock %} - -{% block collapse_content %} -
      -{% for child in children %} -
    • {{ child.name }} - {{ child.description }} - {% if child.item_count > 0 %} - - - {% comment %}Translators: pluralize with counter{% endcomment %} - {% blocktrans count counter=child.item_count %}{{ counter }} Item{% plural %}{{ counter }} Items{% endblocktrans %} - - {% endif %} -
    • -{% endfor %} -
    -{% endblock %} -{% endif %} \ No newline at end of file diff --git a/InvenTree/stock/templates/stock/location_navbar.html b/InvenTree/stock/templates/stock/location_navbar.html new file mode 100644 index 0000000000..0cb0c9d1eb --- /dev/null +++ b/InvenTree/stock/templates/stock/location_navbar.html @@ -0,0 +1,33 @@ +{% load i18n %} + + \ No newline at end of file diff --git a/InvenTree/stock/templates/stock/sublocation.html b/InvenTree/stock/templates/stock/sublocation.html new file mode 100644 index 0000000000..b8b32328a2 --- /dev/null +++ b/InvenTree/stock/templates/stock/sublocation.html @@ -0,0 +1,36 @@ +{% extends "stock/location.html" %} + +{% load static %} +{% load i18n %} +{% load inventree_extras %} + +{% block menubar %} +{% include "stock/location_navbar.html" with tab="sublocations" %} +{% endblock %} + + +{% block location_content %} + +
    +
    +

    {% trans "Sublocations" %}

    +
    +
    +
    + +{% endblock %} + +{% block js_ready %} +{{ block.super }} + +loadStockLocationTable($('#sublocation-table'), { + params: { + {% if location %} + parent: {{ location.pk }}, + {% else %} + parent: 'null', + {% endif %} + } +}); + +{% endblock %} \ No newline at end of file diff --git a/InvenTree/stock/urls.py b/InvenTree/stock/urls.py index 5c6c678978..24e609fa4f 100644 --- a/InvenTree/stock/urls.py +++ b/InvenTree/stock/urls.py @@ -6,14 +6,21 @@ from django.conf.urls import url, include from . import views -# URL list for web interface -stock_location_detail_urls = [ - url(r'^edit/?', views.StockLocationEdit.as_view(), name='stock-location-edit'), - url(r'^delete/?', views.StockLocationDelete.as_view(), name='stock-location-delete'), - url(r'^qr_code/?', views.StockLocationQRCode.as_view(), name='stock-location-qr'), +location_urls = [ + + url(r'^new/', views.StockLocationCreate.as_view(), name='stock-location-create'), + + url(r'^(?P\d+)/', include([ + url(r'^edit/?', views.StockLocationEdit.as_view(), name='stock-location-edit'), + url(r'^delete/?', views.StockLocationDelete.as_view(), name='stock-location-delete'), + url(r'^qr_code/?', views.StockLocationQRCode.as_view(), name='stock-location-qr'), + + url(r'sublocation/', views.StockLocationDetail.as_view(template_name='stock/sublocation.html'), name='stock-location-sublocation'), + + # Anything else + url('^.*$', views.StockLocationDetail.as_view(), name='stock-location-detail'), + ])), - # Anything else - url('^.*$', views.StockLocationDetail.as_view(), name='stock-location-detail'), ] stock_item_detail_urls = [ @@ -49,9 +56,7 @@ stock_tracking_urls = [ stock_urls = [ # Stock location - url(r'^location/(?P\d+)/', include(stock_location_detail_urls)), - - url(r'^location/new/', views.StockLocationCreate.as_view(), name='stock-location-create'), + url(r'^location/', include(location_urls)), url(r'^item/new/?', views.StockItemCreate.as_view(), name='stock-item-create'), @@ -81,5 +86,7 @@ stock_urls = [ # Individual stock items url(r'^item/(?P\d+)/', include(stock_item_detail_urls)), + url(r'^sublocations/', views.StockIndex.as_view(template_name='stock/sublocation.html'), name='stock-sublocations'), + url(r'^.*$', views.StockIndex.as_view(), name='stock-index'), ] diff --git a/InvenTree/templates/js/stock.js b/InvenTree/templates/js/stock.js index 33f2dae8d6..990acf65ba 100644 --- a/InvenTree/templates/js/stock.js +++ b/InvenTree/templates/js/stock.js @@ -897,6 +897,77 @@ function loadStockTable(table, options) { }); } +function loadStockLocationTable(table, options) { + /* Display a table of stock locations */ + + var params = options.params || {}; + + var filterListElement = options.filterList || '#filter-list-location'; + + var filters = {}; + + var filterKey = options.filterKey || options.name || 'location'; + + if (!options.disableFilters) { + filters = loadTableFilters(filterKey); + } + + var original = {}; + + for (var key in params) { + original[key] = params[key]; + } + + setupFilterList(filterKey, table, filterListElement); + + for (var key in params) { + filters[key] = params[key]; + } + + table.inventreeTable({ + method: 'get', + url: options.url || '{% url "api-location-list" %}', + queryParams: filters, + sidePagination: 'server', + name: 'location', + original: original, + showColumns: true, + columns: [ + { + checkbox: true, + title: '{% trans "Select" %}', + searchable: false, + switchable: false, + }, + { + field: 'name', + title: '{% trans "Name" %}', + switchable: true, + sortable: true, + formatter: function(value, row) { + return renderLink( + value, + `/stock/location/${row.pk}/` + ); + }, + }, + { + field: 'description', + title: '{% trans "Description" %}', + switchable: true, + sortable: false, + }, + { + field: 'items', + title: '{% trans "Stock Items" %}', + switchable: true, + sortable: false, + sortName: 'item_count', + } + ] + }); +} + function loadStockTrackingTable(table, options) { var cols = [ From 412b05d76c1b4b426b3c020c583bad4937c9ea4c Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 20 Apr 2021 20:00:15 +1000 Subject: [PATCH 085/116] Allow API filtering by "cascading" stock locations --- InvenTree/stock/api.py | 37 +++++++++++++------ .../stock/templates/stock/sublocation.html | 11 +++++- InvenTree/templates/js/stock.js | 6 +++ InvenTree/templates/js/table_filters.js | 22 +++++++++++ 4 files changed, 64 insertions(+), 12 deletions(-) diff --git a/InvenTree/stock/api.py b/InvenTree/stock/api.py index 2667352515..0238a62c63 100644 --- a/InvenTree/stock/api.py +++ b/InvenTree/stock/api.py @@ -289,20 +289,35 @@ class StockLocationList(generics.ListCreateAPIView): queryset = super().get_queryset() - loc_id = self.request.query_params.get('parent', None) + params = self.request.query_params - if loc_id is not None: + cascade = str2bool(params.get('cascade', False)) - # Look for top-level locations - if isNull(loc_id): + loc_id = params.get('parent', None) + + # Look for top-level locations + if isNull(loc_id): + + # If we allow "cascade" at the top-level, this essentially means *all* locations + if not cascade: queryset = queryset.filter(parent=None) - - else: - try: - loc_id = int(loc_id) - queryset = queryset.filter(parent=loc_id) - except ValueError: - pass + + else: + + try: + location = StockLocation.objects.get(pk=loc_id) + + # All sub-locations to be returned too? + if cascade: + parents = location.get_descendants(include_self=True) + parent_ids = [p.id for p in parents] + queryset = queryset.filter(parent__in=parent_ids) + + else: + queryset = queryset.filter(parent=location) + + except (ValueError, StockLocation.DoesNotExist): + pass return queryset diff --git a/InvenTree/stock/templates/stock/sublocation.html b/InvenTree/stock/templates/stock/sublocation.html index b8b32328a2..c5a6062064 100644 --- a/InvenTree/stock/templates/stock/sublocation.html +++ b/InvenTree/stock/templates/stock/sublocation.html @@ -15,7 +15,16 @@

    {% trans "Sublocations" %}

    -
    + +
    +
    + +
    +
    + +
    +
    +
    {% endblock %} diff --git a/InvenTree/templates/js/stock.js b/InvenTree/templates/js/stock.js index 990acf65ba..c10e432f5e 100644 --- a/InvenTree/templates/js/stock.js +++ b/InvenTree/templates/js/stock.js @@ -957,6 +957,12 @@ function loadStockLocationTable(table, options) { switchable: true, sortable: false, }, + { + field: 'pathstring', + title: '{% trans "Path" %}', + switchable: true, + sortable: false, + }, { field: 'items', title: '{% trans "Stock Items" %}', diff --git a/InvenTree/templates/js/table_filters.js b/InvenTree/templates/js/table_filters.js index ba73244c74..775f0d9803 100644 --- a/InvenTree/templates/js/table_filters.js +++ b/InvenTree/templates/js/table_filters.js @@ -62,6 +62,28 @@ function getAvailableTableFilters(tableKey) { }; } + // Filters for "stock location" table + if (tableKey == "location") { + return { + cascade: { + type: 'bool', + title: '{% trans "Include sublocations" %}', + description: '{% trans "Include locations" %}', + } + }; + } + + // Filters for "part category" table + if (tableKey == "category") { + return { + cascade: { + type: 'bool', + title: '{% trans "Include subcategories" %}', + description: '{% trans "Include subcategories" %}', + } + }; + } + // Filters for the "customer stock" table (really a subset of "stock") if (tableKey == "customerstock") { return { From 38eea21f4f9bcfab23993d5999899a42f56f6a62 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 20 Apr 2021 20:06:13 +1000 Subject: [PATCH 086/116] Enable printing of multiple stock location labels --- .../stock/templates/stock/sublocation.html | 36 ++++++++++++++++--- InvenTree/templates/stock_table.html | 1 + 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/InvenTree/stock/templates/stock/sublocation.html b/InvenTree/stock/templates/stock/sublocation.html index c5a6062064..d38539f842 100644 --- a/InvenTree/stock/templates/stock/sublocation.html +++ b/InvenTree/stock/templates/stock/sublocation.html @@ -18,10 +18,18 @@
    - -
    -
    - + + +
    + +
    @@ -42,4 +50,24 @@ loadStockLocationTable($('#sublocation-table'), { } }); +linkButtonsToSelection( + $('#sublocation-table'), + [ + '#location-print-options', + ] +); + +$('#multi-location-print-label').click(function() { + + var selections = $('#sublocation-table').bootstrapTable('getSelections'); + + var locations = []; + + selections.forEach(function(loc) { + locations.push(loc.pk); + }); + + printStockLocationLabels(locations); +}) + {% endblock %} \ No newline at end of file diff --git a/InvenTree/templates/stock_table.html b/InvenTree/templates/stock_table.html index 8eff0f4aed..1f54767f02 100644 --- a/InvenTree/templates/stock_table.html +++ b/InvenTree/templates/stock_table.html @@ -32,6 +32,7 @@
    {% endif %} +
    +
    diff --git a/InvenTree/templates/js/part.js b/InvenTree/templates/js/part.js index b7e052ce72..e3e7190952 100644 --- a/InvenTree/templates/js/part.js +++ b/InvenTree/templates/js/part.js @@ -546,6 +546,7 @@ function loadPartCategoryTable(table, options) { title: '{% trans "Select" %}', searchable: false, switchable: false, + visible: false, }, { field: 'name', @@ -565,6 +566,12 @@ function loadPartCategoryTable(table, options) { switchable: true, sortable: false, }, + { + field: 'pathstring', + title: '{% trans "Path" %}', + switchable: true, + sortable: false, + }, { field: 'parts', title: '{% trans "Parts" %}', From fd3e59650a84a8f61c21ade53fca685547632ccd Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 20 Apr 2021 20:15:51 +1000 Subject: [PATCH 088/116] Style fixes --- InvenTree/stock/api.py | 4 ++-- InvenTree/stock/serializers.py | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/InvenTree/stock/api.py b/InvenTree/stock/api.py index 08599ea858..a76fd801bd 100644 --- a/InvenTree/stock/api.py +++ b/InvenTree/stock/api.py @@ -291,9 +291,9 @@ class StockLocationList(generics.ListCreateAPIView): params = self.request.query_params - cascade = str2bool(params.get('cascade', False)) - loc_id = params.get('parent', None) + + cascade = str2bool(params.get('cascade', False)) # Look for top-level locations if isNull(loc_id): diff --git a/InvenTree/stock/serializers.py b/InvenTree/stock/serializers.py index 2439bb9330..5b00c1dd17 100644 --- a/InvenTree/stock/serializers.py +++ b/InvenTree/stock/serializers.py @@ -244,7 +244,6 @@ class LocationSerializer(InvenTreeModelSerializer): items = serializers.IntegerField(source='item_count', read_only=True) - class Meta: model = StockLocation fields = [ From 2bb86ff22be3fc3d39b78bcdbed000926e0d9bf7 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 20 Apr 2021 20:20:00 +1000 Subject: [PATCH 089/116] Adds missing template file --- .../part/templates/part/subcategory.html | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 InvenTree/part/templates/part/subcategory.html diff --git a/InvenTree/part/templates/part/subcategory.html b/InvenTree/part/templates/part/subcategory.html new file mode 100644 index 0000000000..9bb8fe98b7 --- /dev/null +++ b/InvenTree/part/templates/part/subcategory.html @@ -0,0 +1,51 @@ +{% extends "part/category.html" %} + +{% load i18n %} +{% load inventree_extras %} +{% load static %} + +{% block menubar %} +{% include 'part/category_navbar.html' with tab='subcategories' %} +{% endblock %} + +{% block category_content %} + +
    + +
    +

    {% trans "Subcategories" %}

    +
    + +
    +
    + +
    + +
    +
    +
    + +
    + +
    +{% endblock %} + +{% block js_ready %} +{{ block.super }} + + enableNavbar({ + label: 'category', + toggleId: '#category-menu-toggle', + }); + + loadPartCategoryTable($('#subcategory-table'), { + params: { + {% if category %} + parent: {{ category.pk }} + {% else %} + parent: 'null' + {% endif %} + } + }); + +{% endblock %} From 4d1eb51bc429a50110ae5a4779fa6809472bc282 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 20 Apr 2021 20:42:55 +1000 Subject: [PATCH 090/116] Fixes --- InvenTree/part/api.py | 5 ++++- InvenTree/part/test_api.py | 44 +++++++++++++++++++++++++++++++++++++- InvenTree/stock/api.py | 5 ++++- 3 files changed, 51 insertions(+), 3 deletions(-) diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py index 0ce7c7d5a6..a2d7609bed 100644 --- a/InvenTree/part/api.py +++ b/InvenTree/part/api.py @@ -74,8 +74,11 @@ class CategoryList(generics.ListCreateAPIView): cascade = str2bool(params.get('cascade', False)) + # Do not filter by category + if cat_id is None: + pass # Look for top-level categories - if isNull(cat_id): + elif isNull(cat_id): if not cascade: queryset = queryset.filter(parent=None) diff --git a/InvenTree/part/test_api.py b/InvenTree/part/test_api.py index ed88e1dd55..4389003544 100644 --- a/InvenTree/part/test_api.py +++ b/InvenTree/part/test_api.py @@ -37,12 +37,54 @@ class PartAPITest(InvenTreeAPITestCase): super().setUp() def test_get_categories(self): - """ Test that we can retrieve list of part categories """ + """ + Test that we can retrieve list of part categories, + with various filtering options. + """ + url = reverse('api-part-category-list') + + # Request *all* part categories response = self.client.get(url, format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(len(response.data), 8) + # Request top-level part categories only + response = self.client.get( + url, + { + 'parent': 'null', + }, + format='json' + ) + + self.assertEqual(len(response.data), 2) + + # Children of PartCategory<1>, cascade + response = self.client.get( + url, + { + 'parent': 1, + 'cascade': 'true', + }, + format='json', + ) + + self.assertEqual(len(response.data), 5) + + # Children of PartCategory<1>, do not cascade + response = self.client.get( + url, + { + 'parent': 1, + 'cascade': 'false', + }, + format='json', + ) + + self.assertEqual(len(response.data), 3) + def test_add_categories(self): """ Check that we can add categories """ data = { diff --git a/InvenTree/stock/api.py b/InvenTree/stock/api.py index a76fd801bd..0e64cecdbd 100644 --- a/InvenTree/stock/api.py +++ b/InvenTree/stock/api.py @@ -295,8 +295,11 @@ class StockLocationList(generics.ListCreateAPIView): cascade = str2bool(params.get('cascade', False)) + # Do not filter by location + if loc_id is None: + pass # Look for top-level locations - if isNull(loc_id): + elif isNull(loc_id): # If we allow "cascade" at the top-level, this essentially means *all* locations if not cascade: From 2943dc60832c04e60b358359be63d006588c0e5d Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 20 Apr 2021 13:37:19 +0200 Subject: [PATCH 091/116] initial implementation as in #1485 --- .gitignore | 1 + .../management/commands/prerender.py | 63 +++++++++++++++++++ InvenTree/InvenTree/settings.py | 11 ++++ .../part/templatetags/inventree_extras.py | 29 +++++++++ InvenTree/templates/base.html | 29 ++++----- tasks.py | 1 + 6 files changed, 120 insertions(+), 14 deletions(-) create mode 100644 InvenTree/InvenTree/management/commands/prerender.py diff --git a/.gitignore b/.gitignore index b648ad00b9..eaa9e5574d 100644 --- a/.gitignore +++ b/.gitignore @@ -40,6 +40,7 @@ docs/_build # Local static and media file storage (only when running in development mode) inventree_media inventree_static +static_i18n # Local config file config.yaml diff --git a/InvenTree/InvenTree/management/commands/prerender.py b/InvenTree/InvenTree/management/commands/prerender.py new file mode 100644 index 0000000000..b80f35d421 --- /dev/null +++ b/InvenTree/InvenTree/management/commands/prerender.py @@ -0,0 +1,63 @@ +""" +Custom management command to prerender files +""" + +import django +from django.core.management.base import BaseCommand +from django.conf import settings +from django.template.loader import render_to_string +from django.utils.module_loading import import_string +from django.http.request import HttpRequest +from django.utils.translation import override as lang_over + +import time +import os + + +def render_file(file_name, source, target, locales, ctx): + """ renders a file into all provided locales """ + for locale in locales: + target_file = os.path.join(target, locale + '.' + file_name) + with open(target_file, 'w') as localised_file: + with lang_over(locale): + renderd = render_to_string(os.path.join(source, file_name), ctx) + localised_file.write(renderd) + + +class Command(BaseCommand): + """ + django command to prerender files + """ + + def handle(self, *args, **kwargs): + # static directorys + LC_DIR = settings.LOCALE_PATHS[0] + SOURCE_DIR = settings.STATICFILES_I18_SRC + TARTGET_DIR = settings.STATICFILES_I18_TRG + + # ensure static directory exists + if not os.path.exists(TARTGET_DIR): + os.mkdir(TARTGET_DIR) + + # collect locales + locales = {} + for locale in os.listdir(LC_DIR): + path = os.path.join(LC_DIR, locale) + if os.path.exists(path) and os.path.isdir(path): + locales[locale] = locale + + # render! + request = HttpRequest() + ctx = {} + processors = tuple(import_string(path) for path in settings.STATFILES_I18_PROCESORS) + for processor in processors: + ctx.update(processor(request)) + + for file in os.listdir(SOURCE_DIR, ): + path = os.path.join(SOURCE_DIR, file) + if os.path.exists(path) and os.path.isfile(path): + print(f"render {file}") + render_file(file, SOURCE_DIR, TARTGET_DIR, locales, ctx) + else: + raise NotImplementedError('Using multi-level directories is not implemented at this point') # TODO multilevel dir if needed + print(f"rendered all files in {SOURCE_DIR}") diff --git a/InvenTree/InvenTree/settings.py b/InvenTree/InvenTree/settings.py index b1256dccee..c4cc8e961a 100644 --- a/InvenTree/InvenTree/settings.py +++ b/InvenTree/InvenTree/settings.py @@ -190,6 +190,17 @@ STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'InvenTree', 'static'), ] +# Translated Template settings +STATICFILES_I18_PREFIX = 'i18n' +STATICFILES_I18_SRC = os.path.join(BASE_DIR, 'templates', 'js') +STATICFILES_I18_TRG = STATICFILES_DIRS[0] + '_' + STATICFILES_I18_PREFIX +STATICFILES_DIRS.append(STATICFILES_I18_TRG) +STATICFILES_I18_TRG = os.path.join(STATICFILES_I18_TRG, STATICFILES_I18_PREFIX) + +STATFILES_I18_PROCESORS = [ + 'InvenTree.context.status_codes', +] + # Color Themes Directory STATIC_COLOR_THEMES_DIR = os.path.join(STATIC_ROOT, 'css', 'color-themes') diff --git a/InvenTree/part/templatetags/inventree_extras.py b/InvenTree/part/templatetags/inventree_extras.py index cf56e01fbf..a92d95c766 100644 --- a/InvenTree/part/templatetags/inventree_extras.py +++ b/InvenTree/part/templatetags/inventree_extras.py @@ -6,6 +6,7 @@ import os from django import template from django.urls import reverse from django.utils.safestring import mark_safe +from django.templatetags.static import StaticNode from InvenTree import version, settings import InvenTree.helpers @@ -180,3 +181,31 @@ def object_link(url_name, pk, ref): ref_url = reverse(url_name, kwargs={'pk': pk}) return mark_safe('{}'.format(ref_url, ref)) + + +class I18nStaticNode(StaticNode): + """ + custom StaticNode + replaces a variable named *lng* in the path with the current language + """ + def render(self, context): + self.path.var = self.path.var.format(lng=context.request.LANGUAGE_CODE) + ret = super().render(context) + return ret + + +@register.tag('i18n_static') +def do_i18n_static(parser, token): + """ + Overrides normal static, adds language - lookup for prerenderd files #1485 + + usage (like static): + {% i18n_static path [as varname] %} + """ + bits = token.split_contents() + loc_name = settings.STATICFILES_I18_PREFIX + + # change path to called ressource + bits[1] = f"'{loc_name}/{{lng}}.{bits[1][1:-1]}'" + token.contents = ' '.join(bits) + return I18nStaticNode.handle_token(parser, token) diff --git a/InvenTree/templates/base.html b/InvenTree/templates/base.html index 8ccf691ef5..970d9f1016 100644 --- a/InvenTree/templates/base.html +++ b/InvenTree/templates/base.html @@ -143,20 +143,21 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/tasks.py b/tasks.py index 895f3183ce..d775b943a0 100644 --- a/tasks.py +++ b/tasks.py @@ -154,6 +154,7 @@ def static(c): as per Django requirements. """ + manage(c, "prerender") manage(c, "collectstatic --no-input") From 4d439db322ccd93f9107301773649cb1ffb0d20d Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 20 Apr 2021 13:48:05 +0200 Subject: [PATCH 092/116] fixing styling issues --- InvenTree/InvenTree/management/commands/prerender.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/InvenTree/InvenTree/management/commands/prerender.py b/InvenTree/InvenTree/management/commands/prerender.py index b80f35d421..028536becb 100644 --- a/InvenTree/InvenTree/management/commands/prerender.py +++ b/InvenTree/InvenTree/management/commands/prerender.py @@ -2,7 +2,6 @@ Custom management command to prerender files """ -import django from django.core.management.base import BaseCommand from django.conf import settings from django.template.loader import render_to_string @@ -10,7 +9,6 @@ from django.utils.module_loading import import_string from django.http.request import HttpRequest from django.utils.translation import override as lang_over -import time import os From 99dc02e2cbfe49a7595c042b82d32f882959f6bd Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 20 Apr 2021 14:39:28 +0200 Subject: [PATCH 093/116] cleaning up names / comments --- InvenTree/InvenTree/management/commands/prerender.py | 12 ++++++------ InvenTree/InvenTree/settings.py | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/InvenTree/InvenTree/management/commands/prerender.py b/InvenTree/InvenTree/management/commands/prerender.py index 028536becb..28f4b21f15 100644 --- a/InvenTree/InvenTree/management/commands/prerender.py +++ b/InvenTree/InvenTree/management/commands/prerender.py @@ -28,14 +28,14 @@ class Command(BaseCommand): """ def handle(self, *args, **kwargs): - # static directorys + # static directories LC_DIR = settings.LOCALE_PATHS[0] SOURCE_DIR = settings.STATICFILES_I18_SRC - TARTGET_DIR = settings.STATICFILES_I18_TRG + TARGET_DIR = settings.STATICFILES_I18_TRG # ensure static directory exists - if not os.path.exists(TARTGET_DIR): - os.mkdir(TARTGET_DIR) + if not os.path.exists(TARGET_DIR): + os.makedirs(TARGET_DIR, exist_ok=True) # collect locales locales = {} @@ -47,7 +47,7 @@ class Command(BaseCommand): # render! request = HttpRequest() ctx = {} - processors = tuple(import_string(path) for path in settings.STATFILES_I18_PROCESORS) + processors = tuple(import_string(path) for path in settings.STATFILES_I18_PROCESSORS) for processor in processors: ctx.update(processor(request)) @@ -55,7 +55,7 @@ class Command(BaseCommand): path = os.path.join(SOURCE_DIR, file) if os.path.exists(path) and os.path.isfile(path): print(f"render {file}") - render_file(file, SOURCE_DIR, TARTGET_DIR, locales, ctx) + render_file(file, SOURCE_DIR, TARGET_DIR, locales, ctx) else: raise NotImplementedError('Using multi-level directories is not implemented at this point') # TODO multilevel dir if needed print(f"rendered all files in {SOURCE_DIR}") diff --git a/InvenTree/InvenTree/settings.py b/InvenTree/InvenTree/settings.py index c4cc8e961a..53dcb47037 100644 --- a/InvenTree/InvenTree/settings.py +++ b/InvenTree/InvenTree/settings.py @@ -197,7 +197,7 @@ STATICFILES_I18_TRG = STATICFILES_DIRS[0] + '_' + STATICFILES_I18_PREFIX STATICFILES_DIRS.append(STATICFILES_I18_TRG) STATICFILES_I18_TRG = os.path.join(STATICFILES_I18_TRG, STATICFILES_I18_PREFIX) -STATFILES_I18_PROCESORS = [ +STATFILES_I18_PROCESSORS = [ 'InvenTree.context.status_codes', ] From b20c832702f0428f883d9cf68c3a2ec73526699c Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Wed, 21 Apr 2021 11:13:37 +1000 Subject: [PATCH 094/116] Changes to docker workflow --- .github/workflows/docker_build.yaml | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/.github/workflows/docker_build.yaml b/.github/workflows/docker_build.yaml index e307c18452..df747bc56e 100644 --- a/.github/workflows/docker_build.yaml +++ b/.github/workflows/docker_build.yaml @@ -1,8 +1,11 @@ -# Test that the docker file builds correctly +# Build and push latest docker image on push to master branch -name: Docker +name: Docker Build -on: ["push", "pull_request"] +on: + push: + branches: + - 'master' jobs: @@ -10,7 +13,19 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - name: Build Docker Image - run: cd docker && docker build . --tag inventree:$(date +%s) - \ No newline at end of file + - name: Checkout Code + uses: actions/checkout@v2 + - name: Login to Dockerhub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + - name: Build and Push + uses: docker/build-push-action@v2 + with: + context: ./docker + push: true + repository: inventree/inventree + tags: inventree/inventree:latest + - name: Image Digest + run: echo ${{ steps.docker_build.outputs.digest }} From a1e835e01b14c4edc7907b6ca0dc41960f195ee2 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Wed, 21 Apr 2021 12:33:56 +1000 Subject: [PATCH 095/116] Add some new (empty) locale translation entries - fr - it - ja - pl - ru - zh Also fixes the `invoke translate` command (maybe it was changed with the recent update to Django 3.2?) The CI pipeline now runs the translation and static collection steps, to check those for errors. --- .github/workflows/coverage.yaml | 3 + InvenTree/locale/de/LC_MESSAGES/django.po | 1144 ++-- InvenTree/locale/en/LC_MESSAGES/django.po | 1107 ++-- InvenTree/locale/es/LC_MESSAGES/django.po | 1107 ++-- InvenTree/locale/fr/LC_MESSAGES/django.po | 7234 ++++++++++++++++++++ InvenTree/locale/it/LC_MESSAGES/django.po | 7234 ++++++++++++++++++++ InvenTree/locale/ja/LC_MESSAGES/django.po | 7234 ++++++++++++++++++++ InvenTree/locale/pl/LC_MESSAGES/django.po | 7236 +++++++++++++++++++++ InvenTree/locale/ru/LC_MESSAGES/django.po | 7236 +++++++++++++++++++++ InvenTree/locale/zh/LC_MESSAGES/django.po | 7233 ++++++++++++++++++++ tasks.py | 4 +- 11 files changed, 45120 insertions(+), 1652 deletions(-) create mode 100644 InvenTree/locale/fr/LC_MESSAGES/django.po create mode 100644 InvenTree/locale/it/LC_MESSAGES/django.po create mode 100644 InvenTree/locale/ja/LC_MESSAGES/django.po create mode 100644 InvenTree/locale/pl/LC_MESSAGES/django.po create mode 100644 InvenTree/locale/ru/LC_MESSAGES/django.po create mode 100644 InvenTree/locale/zh/LC_MESSAGES/django.po diff --git a/.github/workflows/coverage.yaml b/.github/workflows/coverage.yaml index 2b883490d2..17a8369822 100644 --- a/.github/workflows/coverage.yaml +++ b/.github/workflows/coverage.yaml @@ -42,6 +42,9 @@ jobs: rm test_db.sqlite invoke migrate invoke import-records -f data.json + - name: Test Translations + # This will test both the translation and collectstatic functions + run: invoke translate - name: Check Migration Files run: python3 ci/check_migration_files.py - name: Upload Coverage Report diff --git a/InvenTree/locale/de/LC_MESSAGES/django.po b/InvenTree/locale/de/LC_MESSAGES/django.po index cca4a9b415..26dd39205d 100644 --- a/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/InvenTree/locale/de/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-17 23:25+0000\n" +"POT-Creation-Date: 2021-04-21 12:28+1000\n" "PO-Revision-Date: 2021-03-28 17:47+0200\n" "Last-Translator: Andreas Kaiser , Matthias " "MAIR\n" @@ -49,7 +49,7 @@ msgstr "Löschung bestätigen" msgid "Confirm item deletion" msgstr "Löschung von Position bestätigen" -#: InvenTree/forms.py:159 templates/registration/login.html:76 +#: InvenTree/forms.py:159 templates/registration/login.html:77 msgid "Enter password" msgstr "Passwort eingeben" @@ -108,7 +108,7 @@ msgstr "" "Anzahl der eindeutigen Seriennummern ({s}) muss mit der Anzahl ({q}) " "übereinstimmen" -#: InvenTree/models.py:59 stock/models.py:1661 +#: InvenTree/models.py:59 stock/models.py:1662 msgid "Attachment" msgstr "Anhang" @@ -124,9 +124,9 @@ msgstr "Kommentar" msgid "File comment" msgstr "Datei-Kommentar" -#: InvenTree/models.py:68 InvenTree/models.py:69 part/models.py:1888 +#: InvenTree/models.py:68 InvenTree/models.py:69 part/models.py:1908 #: report/templates/report/inventree_test_report_base.html:91 -#: templates/js/stock.js:964 +#: templates/js/stock.js:1041 msgid "User" msgstr "Benutzer" @@ -135,9 +135,10 @@ msgid "upload date" msgstr "Hochladedatum" #: InvenTree/models.py:107 InvenTree/models.py:108 label/models.py:101 -#: part/models.py:686 part/models.py:2029 part/templates/part/params.html:27 +#: part/models.py:686 part/models.py:2049 part/templates/part/params.html:27 #: report/models.py:179 templates/InvenTree/search.html:137 -#: templates/InvenTree/search.html:289 templates/js/part.js:109 +#: templates/InvenTree/search.html:289 templates/js/part.js:110 +#: templates/js/part.js:553 templates/js/stock.js:944 msgid "Name" msgstr "Name" @@ -145,7 +146,7 @@ msgstr "Name" #: build/templates/build/detail.html:21 company/models.py:342 #: company/models.py:494 company/templates/company/detail.html:27 #: company/templates/company/manufacturer_part_base.html:72 -#: company/templates/company/supplier_part_base.html:70 +#: company/templates/company/supplier_part_base.html:71 #: company/templates/company/supplier_part_detail.html:31 label/models.py:108 #: order/models.py:101 order/templates/order/purchase_order_detail.html:168 #: part/models.py:710 part/templates/part/detail.html:54 @@ -157,9 +158,10 @@ msgstr "Name" #: templates/InvenTree/settings/header.html:9 templates/js/bom.js:190 #: templates/js/build.js:677 templates/js/build.js:944 #: templates/js/company.js:56 templates/js/order.js:183 -#: templates/js/order.js:280 templates/js/part.js:168 templates/js/part.js:251 -#: templates/js/part.js:370 templates/js/part.js:566 templates/js/stock.js:554 -#: templates/js/stock.js:938 +#: templates/js/order.js:280 templates/js/part.js:169 templates/js/part.js:252 +#: templates/js/part.js:371 templates/js/part.js:565 templates/js/part.js:643 +#: templates/js/stock.js:554 templates/js/stock.js:956 +#: templates/js/stock.js:1015 msgid "Description" msgstr "Beschreibung" @@ -171,35 +173,35 @@ msgstr "Beschreibung (optional)" msgid "parent" msgstr "Eltern" -#: InvenTree/settings.py:480 +#: InvenTree/settings.py:493 msgid "English" msgstr "Englisch" -#: InvenTree/settings.py:481 +#: InvenTree/settings.py:494 msgid "French" msgstr "Französisch" -#: InvenTree/settings.py:482 +#: InvenTree/settings.py:495 msgid "German" msgstr "Deutsch" -#: InvenTree/settings.py:483 +#: InvenTree/settings.py:496 msgid "Polish" msgstr "Polnisch" -#: InvenTree/settings.py:484 +#: InvenTree/settings.py:497 msgid "Turkish" msgstr "Türkisch" -#: InvenTree/status.py:84 +#: InvenTree/status.py:93 msgid "Background worker check failed" msgstr "Hintergrund-Prozess-Kontrolle fehlgeschlagen" -#: InvenTree/status.py:88 +#: InvenTree/status.py:97 msgid "Email backend not configured" msgstr "" -#: InvenTree/status.py:91 +#: InvenTree/status.py:100 msgid "InvenTree system health checks failed" msgstr "InvenTree Status-Überprüfung fehlgeschlagen" @@ -382,10 +384,10 @@ msgid "" "Target date for build completion. Build will be overdue after this date." msgstr "Zieldatum für Bauauftrag-Fertigstellung." -#: build/forms.py:45 build/forms.py:87 build/forms.py:257 build/models.py:1103 +#: build/forms.py:45 build/forms.py:87 build/forms.py:257 build/models.py:1109 #: build/templates/build/auto_allocate.html:17 #: build/templates/build/build_base.html:94 -#: build/templates/build/detail.html:31 common/models.py:696 +#: build/templates/build/detail.html:31 common/models.py:703 #: company/forms.py:176 company/templates/company/supplier_part_pricing.html:77 #: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261 #: order/forms.py:278 order/models.py:593 order/models.py:784 @@ -395,7 +397,7 @@ msgstr "Zieldatum für Bauauftrag-Fertigstellung." #: order/templates/order/sales_order_detail.html:77 #: order/templates/order/sales_order_detail.html:159 #: order/templates/order/sales_order_detail.html:224 part/forms.py:342 -#: part/forms.py:371 part/forms.py:387 part/models.py:2158 +#: part/forms.py:371 part/forms.py:387 part/models.py:2178 #: part/templates/part/allocation.html:19 #: part/templates/part/allocation.html:53 #: part/templates/part/part_pricing.html:11 @@ -405,11 +407,11 @@ msgstr "Zieldatum für Bauauftrag-Fertigstellung." #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:77 -#: stock/forms.py:175 stock/forms.py:308 stock/models.py:1565 +#: stock/forms.py:175 stock/forms.py:308 stock/models.py:1566 #: stock/templates/stock/item_base.html:244 #: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364 #: templates/js/bom.js:205 templates/js/build.js:420 templates/js/build.js:954 -#: templates/js/stock.js:956 templates/js/stock.js:1194 +#: templates/js/stock.js:1033 templates/js/stock.js:1271 msgid "Quantity" msgstr "Anzahl" @@ -498,7 +500,7 @@ msgstr "Bauauftrag" #: build/templates/build/index.html:15 order/templates/order/so_builds.html:12 #: order/templates/order/so_navbar.html:19 #: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55 -#: part/templates/part/navbar.html:58 templates/InvenTree/index.html:182 +#: part/templates/part/navbar.html:58 templates/InvenTree/index.html:183 #: templates/InvenTree/search.html:185 #: templates/InvenTree/settings/tabs.html:31 users/models.py:41 msgid "Build Orders" @@ -510,7 +512,7 @@ msgstr "Bauauftragsreferenz" #: build/models.py:127 order/models.py:99 order/models.py:595 #: order/templates/order/purchase_order_detail.html:195 -#: order/templates/order/sales_order_detail.html:219 part/models.py:2167 +#: order/templates/order/sales_order_detail.html:219 part/models.py:2187 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197 #: templates/js/build.js:509 templates/js/build.js:948 @@ -538,12 +540,11 @@ msgstr "Bauauftrag, zu dem dieser Bauauftrag zugwiesen ist" #: order/templates/order/purchase_order_detail.html:156 #: order/templates/order/receive_parts.html:19 #: order/templates/order/sales_order_detail.html:207 part/models.py:321 -#: part/models.py:1856 part/models.py:1868 part/models.py:1886 -#: part/models.py:1961 part/models.py:2057 part/models.py:2142 -#: part/templates/part/part_app_base.html:7 +#: part/models.py:1876 part/models.py:1888 part/models.py:1906 +#: part/models.py:1981 part/models.py:2077 part/models.py:2162 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:14 part/templates/part/related.html:29 #: part/templates/part/set_category.html:13 -#: part/templates/part/subcategories.html:17 #: report/templates/report/inventree_build_order_base.html:110 #: report/templates/report/inventree_po_report.html:90 #: report/templates/report/inventree_so_report.html:90 @@ -551,8 +552,8 @@ msgstr "Bauauftrag, zu dem dieser Bauauftrag zugwiesen ist" #: templates/js/barcode.js:362 templates/js/bom.js:163 #: templates/js/build.js:681 templates/js/build.js:921 #: templates/js/company.js:140 templates/js/company.js:238 -#: templates/js/part.js:232 templates/js/part.js:337 templates/js/stock.js:523 -#: templates/js/stock.js:1266 +#: templates/js/part.js:233 templates/js/part.js:338 templates/js/stock.js:523 +#: templates/js/stock.js:1343 msgid "Part" msgstr "Teil" @@ -660,7 +661,7 @@ msgstr "Nutzer der für diesen Bauauftrag zuständig ist" #: build/models.py:256 build/templates/build/detail.html:91 #: company/templates/company/manufacturer_part_base.html:79 #: company/templates/company/manufacturer_part_detail.html:28 -#: company/templates/company/supplier_part_base.html:77 +#: company/templates/company/supplier_part_base.html:78 #: company/templates/company/supplier_part_detail.html:28 #: part/templates/part/detail.html:83 part/templates/part/part_base.html:101 #: stock/models.py:426 stock/templates/stock/item_base.html:334 @@ -684,7 +685,7 @@ msgstr "Link zu einer externen URL" #: part/templates/part/navbar.html:128 #: report/templates/report/inventree_build_order_base.html:173 #: stock/forms.py:173 stock/forms.py:317 stock/forms.py:349 stock/forms.py:377 -#: stock/models.py:498 stock/models.py:1557 stock/models.py:1667 +#: stock/models.py:498 stock/models.py:1558 stock/models.py:1668 #: stock/templates/stock/navbar.html:57 templates/js/barcode.js:37 #: templates/js/bom.js:333 templates/js/stock.js:128 templates/js/stock.js:671 msgid "Notes" @@ -710,51 +711,51 @@ msgstr "Endprodukt stimmt nicht mit dem Bauauftrag überein" msgid "Completed build output" msgstr "Endprodukt fertigstellen" -#: build/models.py:996 +#: build/models.py:1002 msgid "BuildItem must be unique for build, stock_item and install_into" msgstr "" "Bauauftrags-Objekt muss für Bauauftrag, Lager-Objekt und installiert_in " "eindeutig sein" -#: build/models.py:1018 +#: build/models.py:1024 msgid "Build item must specify a build output" msgstr "Bauauftrags-Objekt muss einem Endprodukt zugewiesen sein" -#: build/models.py:1023 +#: build/models.py:1029 #, python-brace-format msgid "Selected stock item not found in BOM for part '{p}'" msgstr "Ausgewähltes BestandsObjekt nicht Stückliste für Teil '{p}' gefunden" -#: build/models.py:1027 +#: build/models.py:1033 #, python-brace-format msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" msgstr "" "Reserviermenge ({n}) muss kleiner Bestandsmenge ({q}) sein. Zugewiesene " "Anzahl ({n}) darf nicht die verfügbare ({q}) Anzahl überschreiten" -#: build/models.py:1034 order/models.py:758 +#: build/models.py:1040 order/models.py:758 msgid "StockItem is over-allocated" msgstr "Zu viele BestandsObjekt zugewiesen" -#: build/models.py:1038 order/models.py:761 +#: build/models.py:1044 order/models.py:761 msgid "Allocation quantity must be greater than zero" msgstr "Reserviermenge muss größer null sein" -#: build/models.py:1042 +#: build/models.py:1048 msgid "Quantity must be 1 for serialized stock" msgstr "Anzahl muss 1 für Objekte mit Seriennummer sein" -#: build/models.py:1082 stock/templates/stock/item_base.html:306 +#: build/models.py:1088 stock/templates/stock/item_base.html:306 #: templates/InvenTree/search.html:183 templates/js/build.js:655 #: templates/navbar.html:29 msgid "Build" msgstr "Bauauftrag" -#: build/models.py:1083 +#: build/models.py:1089 msgid "Build to allocate parts" msgstr "Bauauftrag starten um Teile zuzuweisen" -#: build/models.py:1090 part/templates/part/allocation.html:18 +#: build/models.py:1096 part/templates/part/allocation.html:18 #: part/templates/part/allocation.html:24 #: part/templates/part/allocation.html:31 #: part/templates/part/allocation.html:49 @@ -762,26 +763,32 @@ msgstr "Bauauftrag starten um Teile zuzuweisen" #: stock/templates/stock/item_base.html:93 #: stock/templates/stock/item_base.html:328 #: stock/templates/stock/stock_adjust.html:16 templates/js/build.js:771 -#: templates/js/stock.js:927 templates/js/stock.js:1185 +#: templates/js/stock.js:1004 templates/js/stock.js:1262 msgid "Stock Item" msgstr "BestandsObjekt" -#: build/models.py:1091 +#: build/models.py:1097 msgid "Source stock item" msgstr "Quell-BestandsObjekt" -#: build/models.py:1104 +#: build/models.py:1110 msgid "Stock quantity to allocate to build" msgstr "BestandsObjekt-Anzahl dem Bauauftrag zuweisen" -#: build/models.py:1112 +#: build/models.py:1118 msgid "Install into" msgstr "Installiere in" -#: build/models.py:1113 +#: build/models.py:1119 msgid "Destination stock item" msgstr "Ziel-BestandsObjekt" +#: build/templates/build/allocate.html:7 +#, fuzzy +#| msgid "Allocate parts" +msgid "Allocate Parts" +msgstr "Teile zuordnen" + #: build/templates/build/allocate.html:15 msgid "Incomplete Build Ouputs" msgstr "unfertige Endprodukte" @@ -871,12 +878,12 @@ msgstr "Dieser Bauauftrag ist dem Bauauftrag %(link)s untergeordnet" #: build/templates/build/build_base.html:40 #: company/templates/company/company_base.html:40 #: company/templates/company/manufacturer_part_base.html:25 -#: company/templates/company/supplier_part_base.html:25 +#: company/templates/company/supplier_part_base.html:26 #: order/templates/order/order_base.html:26 #: order/templates/order/sales_order_base.html:35 -#: part/templates/part/category.html:14 part/templates/part/part_base.html:29 +#: part/templates/part/category.html:18 part/templates/part/part_base.html:29 #: stock/templates/stock/item_base.html:118 -#: stock/templates/stock/location.html:24 +#: stock/templates/stock/location.html:31 msgid "Admin view" msgstr "Admin" @@ -886,8 +893,8 @@ msgstr "Admin" #: order/templates/order/order_base.html:86 #: order/templates/order/sales_order_base.html:41 #: order/templates/order/sales_order_base.html:86 -#: templates/js/table_filters.js:218 templates/js/table_filters.js:237 -#: templates/js/table_filters.js:254 +#: templates/js/table_filters.js:240 templates/js/table_filters.js:259 +#: templates/js/table_filters.js:276 msgid "Overdue" msgstr "Überfällig" @@ -928,7 +935,7 @@ msgstr "Bau-Status" #: stock/templates/stock/item_base.html:392 templates/InvenTree/search.html:252 #: templates/js/barcode.js:119 templates/js/build.js:710 #: templates/js/order.js:187 templates/js/order.js:285 -#: templates/js/stock.js:628 templates/js/stock.js:1202 +#: templates/js/stock.js:628 templates/js/stock.js:1279 msgid "Status" msgstr "Status" @@ -1072,8 +1079,8 @@ msgstr "Ziel-Lagerort nicht angegeben" #: build/templates/build/detail.html:70 #: stock/templates/stock/item_base.html:292 templates/js/stock.js:636 -#: templates/js/stock.js:1209 templates/js/table_filters.js:85 -#: templates/js/table_filters.js:179 +#: templates/js/stock.js:1286 templates/js/table_filters.js:107 +#: templates/js/table_filters.js:201 msgid "Batch" msgstr "Los" @@ -1198,7 +1205,7 @@ msgstr "Bestand dem Endprodukt zuweisen" msgid "Create Build Output" msgstr "Endprodukt anlegen" -#: build/views.py:203 stock/models.py:968 stock/views.py:1789 +#: build/views.py:203 stock/models.py:969 stock/views.py:1789 msgid "Serial numbers already exist" msgstr "Seriennummern existieren bereits" @@ -1338,339 +1345,349 @@ msgstr "InvenTree Instanzname" msgid "String descriptor for the server instance" msgstr "Kurze Beschreibung der Instanz" -#: common/models.py:62 company/models.py:97 company/models.py:98 +#: common/models.py:62 +#, fuzzy +#| msgid "Instance Name" +msgid "Use instance name" +msgstr "Instanzname" + +#: common/models.py:63 +msgid "Use the instance name in the title-bar" +msgstr "" + +#: common/models.py:69 company/models.py:97 company/models.py:98 msgid "Company name" msgstr "Firmenname" -#: common/models.py:63 +#: common/models.py:70 msgid "Internal company name" msgstr "interner Firmenname" -#: common/models.py:68 +#: common/models.py:75 msgid "Base URL" msgstr "Basis-URL" -#: common/models.py:69 +#: common/models.py:76 msgid "Base URL for server instance" msgstr "Basis-URL für dieses Instanz" -#: common/models.py:75 +#: common/models.py:82 msgid "Default Currency" msgstr "Standard-Währung" -#: common/models.py:76 +#: common/models.py:83 msgid "Default currency" msgstr "Standard-Währung" -#: common/models.py:82 +#: common/models.py:89 msgid "Download from URL" msgstr "Von URL herunterladen" -#: common/models.py:83 +#: common/models.py:90 msgid "Allow download of remote images and files from external URL" msgstr "Herunterladen von externen Bildern und Dateien von URLs erlaubt" -#: common/models.py:89 +#: common/models.py:96 msgid "Barcode Support" msgstr "Bacode-Feature verwenden" -#: common/models.py:90 +#: common/models.py:97 msgid "Enable barcode scanner support" msgstr "Barcode-Scanner Unterstützung" -#: common/models.py:96 +#: common/models.py:103 msgid "IPN Regex" msgstr "IPN Regex" -#: common/models.py:97 +#: common/models.py:104 msgid "Regular expression pattern for matching Part IPN" msgstr "RegEx Muster für die Zuordnung von Teil-IPN" -#: common/models.py:101 +#: common/models.py:108 msgid "Allow Duplicate IPN" msgstr "Mehrere Artikel mit gleicher IPN erlaubt" -#: common/models.py:102 +#: common/models.py:109 msgid "Allow multiple parts to share the same IPN" msgstr "Mehrere Artikel mit gleicher IPN erlaubt" -#: common/models.py:108 +#: common/models.py:115 msgid "Allow Editing IPN" msgstr "Ändern von IPN erlaubt" -#: common/models.py:109 +#: common/models.py:116 msgid "Allow changing the IPN value while editing a part" msgstr "Ändern der IPN während des Bearbeiten eines Teils erlaubt" -#: common/models.py:115 +#: common/models.py:122 msgid "Copy Part BOM Data" msgstr "Teil-Stückliste kopieren" -#: common/models.py:116 +#: common/models.py:123 msgid "Copy BOM data by default when duplicating a part" msgstr "Stückliste von Teil kopieren wenn das Teil dupliziert wird " -#: common/models.py:122 +#: common/models.py:129 msgid "Copy Part Parameter Data" msgstr "Teil-Parameter kopieren" -#: common/models.py:123 +#: common/models.py:130 msgid "Copy parameter data by default when duplicating a part" msgstr "Parameter-Daten für dieses Teil kopieren wenn das Teil dupliziert wird" -#: common/models.py:129 +#: common/models.py:136 msgid "Copy Part Test Data" msgstr "Teil-Testdaten kopieren" -#: common/models.py:130 +#: common/models.py:137 msgid "Copy test data by default when duplicating a part" msgstr "Test-Daten für dieses Teil kopieren wenn das Teil dupliziert wird" -#: common/models.py:136 +#: common/models.py:143 msgid "Copy Category Parameter Templates" msgstr "Kategorie-Parametervorlage kopieren" -#: common/models.py:137 +#: common/models.py:144 msgid "Copy category parameter templates when creating a part" msgstr "Kategorie-Parameter Vorlagen kopieren wenn ein Teil angelegt wird" -#: common/models.py:143 +#: common/models.py:150 msgid "Recent Part Count" msgstr "Aktuelle Teile-Stände" -#: common/models.py:144 +#: common/models.py:151 msgid "Number of recent parts to display on index page" msgstr "Anzahl der neusten Teile auf der Startseite" -#: common/models.py:150 part/models.py:2059 part/templates/part/detail.html:160 +#: common/models.py:157 part/models.py:2079 part/templates/part/detail.html:160 #: report/models.py:185 stock/forms.py:259 templates/js/table_filters.js:24 -#: templates/js/table_filters.js:288 +#: templates/js/table_filters.js:310 msgid "Template" msgstr "Vorlage" -#: common/models.py:151 +#: common/models.py:158 msgid "Parts are templates by default" msgstr "Teile sind standardmäßig Vorlagen" -#: common/models.py:157 part/models.py:834 part/templates/part/detail.html:170 -#: templates/js/table_filters.js:101 templates/js/table_filters.js:300 +#: common/models.py:164 part/models.py:834 part/templates/part/detail.html:170 +#: templates/js/table_filters.js:123 templates/js/table_filters.js:322 msgid "Assembly" msgstr "Baugruppe" -#: common/models.py:158 +#: common/models.py:165 msgid "Parts can be assembled from other components by default" msgstr "Teile können standardmäßig aus anderen Teilen angefertigt werden" -#: common/models.py:164 part/models.py:840 part/templates/part/detail.html:180 -#: templates/js/table_filters.js:304 +#: common/models.py:171 part/models.py:840 part/templates/part/detail.html:180 +#: templates/js/table_filters.js:326 msgid "Component" msgstr "Komponente" -#: common/models.py:165 +#: common/models.py:172 msgid "Parts can be used as sub-components by default" msgstr "Teile können standardmäßig in Baugruppen benutzt werden" -#: common/models.py:171 part/models.py:851 part/templates/part/detail.html:200 +#: common/models.py:178 part/models.py:851 part/templates/part/detail.html:200 msgid "Purchaseable" msgstr "Kaufbar" -#: common/models.py:172 +#: common/models.py:179 msgid "Parts are purchaseable by default" msgstr "Artikel sind grundsätzlich kaufbar" -#: common/models.py:178 part/models.py:856 part/templates/part/detail.html:210 -#: templates/js/table_filters.js:312 +#: common/models.py:185 part/models.py:856 part/templates/part/detail.html:210 +#: templates/js/table_filters.js:334 msgid "Salable" msgstr "Verkäuflich" -#: common/models.py:179 +#: common/models.py:186 msgid "Parts are salable by default" msgstr "Artikel sind grundsätzlich verkaufbar" -#: common/models.py:185 part/models.py:846 part/templates/part/detail.html:190 -#: templates/js/table_filters.js:32 templates/js/table_filters.js:316 +#: common/models.py:192 part/models.py:846 part/templates/part/detail.html:190 +#: templates/js/table_filters.js:32 templates/js/table_filters.js:338 msgid "Trackable" msgstr "nachverfolgbar" -#: common/models.py:186 +#: common/models.py:193 msgid "Parts are trackable by default" msgstr "Artikel sind grundsätzlich verfolgbar" -#: common/models.py:192 part/models.py:866 part/templates/part/detail.html:150 +#: common/models.py:199 part/models.py:866 part/templates/part/detail.html:150 #: templates/js/table_filters.js:28 msgid "Virtual" msgstr "Virtuell" -#: common/models.py:193 +#: common/models.py:200 msgid "Parts are virtual by default" msgstr "Teile sind grundsätzlich virtuell" -#: common/models.py:199 +#: common/models.py:206 msgid "Show Quantity in Forms" msgstr "zeige Bestand in Eingabemasken" -#: common/models.py:200 +#: common/models.py:207 msgid "Display available part quantity in some forms" msgstr "Zeige den verfügbaren Bestand in einigen Eingabemasken" -#: common/models.py:206 +#: common/models.py:213 msgid "Debug Mode" msgstr "Entwickler-Modus" -#: common/models.py:207 +#: common/models.py:214 msgid "Generate reports in debug mode (HTML output)" msgstr "Berichte im Entwickler-Modus generieren (als HTML)" -#: common/models.py:213 +#: common/models.py:220 msgid "Page Size" msgstr "Seitengröße" -#: common/models.py:214 +#: common/models.py:221 msgid "Default page size for PDF reports" msgstr "Standardseitenformat für PDF-Bericht" -#: common/models.py:224 +#: common/models.py:231 msgid "Test Reports" msgstr "Test-Berichte" -#: common/models.py:225 +#: common/models.py:232 msgid "Enable generation of test reports" msgstr "Erstellung von Test-Berichten aktivieren" -#: common/models.py:231 +#: common/models.py:238 msgid "Stock Expiry" msgstr "Bestands-Ablauf" -#: common/models.py:232 +#: common/models.py:239 msgid "Enable stock expiry functionality" msgstr "Ablaufen von Bestand ermöglichen" -#: common/models.py:238 +#: common/models.py:245 msgid "Sell Expired Stock" msgstr "Abgelaufenen Bestand verkaufen" -#: common/models.py:239 +#: common/models.py:246 msgid "Allow sale of expired stock" msgstr "Verkauf von abgelaufenem Bestand erlaubt" -#: common/models.py:245 +#: common/models.py:252 msgid "Stock Stale Time" msgstr "Bestands-Stehzeit" -#: common/models.py:246 +#: common/models.py:253 msgid "Number of days stock items are considered stale before expiring" msgstr "" "Anzahl an Tagen, an denen Bestand als abgestanden markiert wird, bevor sie " "ablaufen" -#: common/models.py:248 part/templates/part/detail.html:121 +#: common/models.py:255 part/templates/part/detail.html:121 msgid "days" msgstr "Tage" -#: common/models.py:253 +#: common/models.py:260 msgid "Build Expired Stock" msgstr "Abgelaufenen Bestand verbauen" -#: common/models.py:254 +#: common/models.py:261 msgid "Allow building with expired stock" msgstr "Verbauen von abgelaufenen Bestand erlaubt" -#: common/models.py:260 +#: common/models.py:267 msgid "Stock Ownership Control" msgstr "Bestands-Eigentümerkontrolle" -#: common/models.py:261 +#: common/models.py:268 msgid "Enable ownership control over stock locations and items" msgstr "Eigentümerkontrolle für Lagerorte und Teile aktivieren" -#: common/models.py:267 +#: common/models.py:274 msgid "Group by Part" msgstr "Gruppieren nach Teil" -#: common/models.py:268 +#: common/models.py:275 msgid "Group stock items by part reference in table views" msgstr "Bestand in Tabellen anhand von Teil-Referenz gruppieren" -#: common/models.py:274 +#: common/models.py:281 msgid "Recent Stock Count" msgstr "aktueller Bestand" -#: common/models.py:275 +#: common/models.py:282 msgid "Number of recent stock items to display on index page" msgstr "Anzahl des geänderten Bestands auf der Startseite" -#: common/models.py:281 +#: common/models.py:288 msgid "Build Order Reference Prefix" msgstr "Bauauftrag-Referenz Präfix" -#: common/models.py:282 +#: common/models.py:289 msgid "Prefix value for build order reference" msgstr "Präfix für Bauauftrag-Referenz" -#: common/models.py:287 +#: common/models.py:294 msgid "Build Order Reference Regex" msgstr "Bauauftrag-Referenz RegEx" -#: common/models.py:288 +#: common/models.py:295 msgid "Regular expression pattern for matching build order reference" msgstr "RegEx Muster für die Zuordnung von Bauauftrag-Referenzen" -#: common/models.py:292 +#: common/models.py:299 msgid "Sales Order Reference Prefix" msgstr "Auftrags-Referenz Präfix" -#: common/models.py:293 +#: common/models.py:300 msgid "Prefix value for sales order reference" msgstr "Präfix für Auftrags-Referenz" -#: common/models.py:298 +#: common/models.py:305 msgid "Purchase Order Reference Prefix" msgstr "Bestellungs-Referenz Präfix" -#: common/models.py:299 +#: common/models.py:306 msgid "Prefix value for purchase order reference" msgstr "Präfix für Bestellungs-Referenz" -#: common/models.py:522 +#: common/models.py:529 msgid "Settings key (must be unique - case insensitive" msgstr "" "Einstellungs-Schlüssel (muss einzigartig sein, Groß-/ Kleinschreibung wird " "nicht beachtet)" -#: common/models.py:524 +#: common/models.py:531 msgid "Settings value" msgstr "Einstellungs-Wert" -#: common/models.py:559 +#: common/models.py:566 msgid "Must be an integer value" msgstr "Nur Ganzzahl eingeben" -#: common/models.py:582 +#: common/models.py:589 msgid "Value must be a boolean value" msgstr "Wahrheitswert erforderlich" -#: common/models.py:593 +#: common/models.py:600 msgid "Value must be an integer value" msgstr "Nur Ganzzahl eingeben" -#: common/models.py:616 +#: common/models.py:623 msgid "Key string must be unique" msgstr "Schlüsseltext muss eindeutig sein" -#: common/models.py:697 company/forms.py:177 +#: common/models.py:704 company/forms.py:177 msgid "Price break quantity" msgstr "Preisstaffelungs Anzahl" -#: common/models.py:705 company/templates/company/supplier_part_pricing.html:82 +#: common/models.py:712 company/templates/company/supplier_part_pricing.html:82 #: part/templates/part/sale_prices.html:90 templates/js/bom.js:255 msgid "Price" msgstr "Preis" -#: common/models.py:706 +#: common/models.py:713 msgid "Unit price at specified quantity" msgstr "Stückpreis für die angegebene Anzahl" -#: common/models.py:729 +#: common/models.py:736 msgid "Default" msgstr "Standard" @@ -1726,7 +1743,7 @@ msgstr "Hersteller-Teilenummer" #: company/forms.py:136 company/models.py:330 #: company/templates/company/manufacturer_part_base.html:89 #: company/templates/company/manufacturer_part_detail.html:26 -#: company/templates/company/supplier_part_base.html:100 +#: company/templates/company/supplier_part_base.html:101 #: company/templates/company/supplier_part_detail.html:35 #: order/templates/order/purchase_order_detail.html:183 part/bom.py:171 #: part/bom.py:242 templates/js/company.js:181 templates/js/company.js:307 @@ -1785,8 +1802,8 @@ msgstr "Anlaufstelle" #: company/models.py:124 company/models.py:336 company/models.py:488 #: order/models.py:103 part/models.py:743 #: report/templates/report/inventree_build_order_base.html:165 -#: stock/models.py:1559 templates/js/company.js:188 templates/js/company.js:318 -#: templates/js/part.js:430 +#: stock/models.py:1560 templates/js/company.js:188 templates/js/company.js:318 +#: templates/js/part.js:431 msgid "Link" msgstr "Link" @@ -1834,7 +1851,7 @@ msgstr "Teil auswählen" #: company/models.py:323 company/templates/company/detail.html:57 #: company/templates/company/manufacturer_part_base.html:85 #: company/templates/company/manufacturer_part_detail.html:25 -#: company/templates/company/supplier_part_base.html:93 +#: company/templates/company/supplier_part_base.html:94 #: company/templates/company/supplier_part_detail.html:34 part/bom.py:170 #: part/bom.py:241 stock/templates/stock/item_base.html:341 #: templates/js/company.js:44 templates/js/company.js:165 @@ -1851,7 +1868,7 @@ msgid "Manufacturer part description" msgstr "Herstellerteil Beschreibung" #: company/models.py:469 company/templates/company/detail.html:62 -#: company/templates/company/supplier_part_base.html:83 +#: company/templates/company/supplier_part_base.html:84 #: company/templates/company/supplier_part_detail.html:25 order/models.py:190 #: order/templates/order/order_base.html:92 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:175 @@ -1865,7 +1882,7 @@ msgstr "Zulieferer" msgid "Select supplier" msgstr "Zulieferer auswählen" -#: company/models.py:475 company/templates/company/supplier_part_base.html:87 +#: company/models.py:475 company/templates/company/supplier_part_base.html:88 #: company/templates/company/supplier_part_detail.html:26 #: order/templates/order/purchase_order_detail.html:174 part/bom.py:176 #: part/bom.py:287 @@ -1895,8 +1912,8 @@ msgstr "Teil-URL des Zulieferers" msgid "Supplier part description" msgstr "Zuliefererbeschreibung des Teils" -#: company/models.py:500 company/templates/company/supplier_part_base.html:114 -#: company/templates/company/supplier_part_detail.html:38 part/models.py:2170 +#: company/models.py:500 company/templates/company/supplier_part_base.html:115 +#: company/templates/company/supplier_part_detail.html:38 part/models.py:2190 #: report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" @@ -1910,7 +1927,7 @@ msgstr "Basiskosten" msgid "Minimum charge (e.g. stocking fee)" msgstr "Mindestpreis" -#: company/models.py:506 company/templates/company/supplier_part_base.html:107 +#: company/models.py:506 company/templates/company/supplier_part_base.html:108 #: stock/models.py:397 stock/templates/stock/item_base.html:299 #: templates/js/stock.js:667 msgid "Packaging" @@ -2046,7 +2063,7 @@ msgstr "Teile löschen" #: company/templates/company/detail_manufacturer_part.html:66 #: company/templates/company/detail_supplier_part.html:66 #: part/templates/part/bom.html:159 part/templates/part/category.html:118 -#: templates/js/stock.js:1080 +#: templates/js/stock.js:1157 msgid "New Part" msgstr "Neues Teil" @@ -2093,7 +2110,7 @@ msgstr "Neues Zulieferer-Teil anlegen" #: company/templates/company/detail_supplier_part.html:22 #: company/templates/company/manufacturer_part_suppliers.html:17 #: order/templates/order/purchase_order_detail.html:74 -#: part/templates/part/supplier.html:17 templates/js/stock.js:1086 +#: part/templates/part/supplier.html:17 templates/js/stock.js:1163 msgid "New Supplier Part" msgstr "Neues Zulieferer-Teil" @@ -2109,12 +2126,12 @@ msgstr "Neuer Zulieferer" msgid "Create new Supplier" msgstr "Neuen Zulieferer anlegen" -#: company/templates/company/index.html:7 +#: company/templates/company/index.html:8 msgid "Supplier List" msgstr "Zulieferer-Liste" #: company/templates/company/manufacturer_part_base.html:36 -#: company/templates/company/supplier_part_base.html:35 +#: company/templates/company/supplier_part_base.html:36 #: company/templates/company/supplier_part_orders.html:17 #: part/templates/part/orders.html:17 part/templates/part/part_base.html:65 msgid "Order part" @@ -2135,7 +2152,7 @@ msgstr "Herstellerteil Details" #: company/templates/company/manufacturer_part_base.html:62 #: company/templates/company/manufacturer_part_detail.html:18 -#: company/templates/company/supplier_part_base.html:60 +#: company/templates/company/supplier_part_base.html:61 #: company/templates/company/supplier_part_detail.html:18 msgid "Internal Part" msgstr "Internes Teil" @@ -2167,12 +2184,12 @@ msgstr "HerstellerTeil Bestand" #: company/templates/company/navbar.html:41 #: company/templates/company/supplier_part_navbar.html:15 #: part/templates/part/navbar.html:36 stock/api.py:51 -#: stock/templates/stock/loc_link.html:7 stock/templates/stock/location.html:29 -#: stock/templates/stock/stock_app_base.html:9 -#: templates/InvenTree/index.html:127 templates/InvenTree/search.html:196 +#: stock/templates/stock/loc_link.html:7 stock/templates/stock/location.html:36 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/index.html:128 templates/InvenTree/search.html:196 #: templates/InvenTree/search.html:232 -#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:172 -#: templates/js/part.js:397 templates/js/stock.js:563 templates/navbar.html:26 +#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:173 +#: templates/js/part.js:398 templates/js/stock.js:563 templates/navbar.html:26 msgid "Stock" msgstr "Lagerbestand" @@ -2193,7 +2210,7 @@ msgstr "Zuliefererteil entfernen" #: company/templates/company/manufacturer_part_suppliers.html:22 #: part/templates/part/manufacturer.html:24 part/templates/part/params.html:44 #: part/templates/part/related.html:44 part/templates/part/supplier.html:22 -#: stock/views.py:1002 users/models.py:183 +#: stock/views.py:1002 users/models.py:184 msgid "Delete" msgstr "Löschen" @@ -2213,8 +2230,12 @@ msgid "Supplied Parts" msgstr "Zulieferer-Teile" #: company/templates/company/navbar.html:38 part/templates/part/navbar.html:33 -#: stock/templates/stock/location.html:100 -#: stock/templates/stock/location.html:115 templates/InvenTree/search.html:198 +#: stock/templates/stock/location.html:107 +#: stock/templates/stock/location.html:122 +#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location_navbar.html:22 +#: stock/templates/stock/location_navbar.html:29 +#: templates/InvenTree/search.html:198 templates/js/stock.js:968 #: templates/stats.html:72 templates/stats.html:81 users/models.py:40 msgid "Stock Items" msgstr "BestandsObjekte" @@ -2226,7 +2247,7 @@ msgstr "BestandsObjekte" #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:13 #: part/templates/part/navbar.html:98 part/templates/part/navbar.html:101 -#: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:227 +#: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:228 #: templates/InvenTree/search.html:345 #: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46 #: users/models.py:43 @@ -2238,7 +2259,7 @@ msgstr "Aufträge" #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:13 #: part/templates/part/navbar.html:84 part/templates/part/navbar.html:87 -#: part/templates/part/orders.html:10 templates/InvenTree/index.html:204 +#: part/templates/part/orders.html:10 templates/InvenTree/index.html:205 #: templates/InvenTree/search.html:325 #: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37 #: users/models.py:42 @@ -2269,21 +2290,21 @@ msgstr "Neuen Auftrag anlegen" msgid "New Sales Order" msgstr "Neuer Auftrag" -#: company/templates/company/supplier_part_base.html:6 -#: company/templates/company/supplier_part_base.html:19 stock/models.py:382 +#: company/templates/company/supplier_part_base.html:7 +#: company/templates/company/supplier_part_base.html:20 stock/models.py:382 #: stock/templates/stock/item_base.html:358 templates/js/company.js:279 msgid "Supplier Part" msgstr "Zulieferer-Teil" -#: company/templates/company/supplier_part_base.html:39 +#: company/templates/company/supplier_part_base.html:40 msgid "Edit supplier part" msgstr "Zulieferer-Teil bearbeiten" -#: company/templates/company/supplier_part_base.html:43 +#: company/templates/company/supplier_part_base.html:44 msgid "Delete supplier part" msgstr "Zulieferer-Teil entfernen" -#: company/templates/company/supplier_part_base.html:55 +#: company/templates/company/supplier_part_base.html:56 #: company/templates/company/supplier_part_detail.html:10 msgid "Supplier Part Details" msgstr "Zulieferer-Teildetails" @@ -2423,7 +2444,7 @@ msgstr "Herstellerteil löschen" msgid "Edit Supplier Part" msgstr "Zulieferer-Teil bearbeiten" -#: company/views.py:578 templates/js/stock.js:1087 +#: company/views.py:578 templates/js/stock.js:1164 msgid "Create new Supplier Part" msgstr "Neues Zulieferer-Teil anlegen" @@ -2609,7 +2630,7 @@ msgid "Date order was completed" msgstr "Datum an dem der Auftrag fertigstellt wurde" #: order/models.py:243 order/models.py:342 part/views.py:1586 -#: stock/models.py:270 stock/models.py:952 +#: stock/models.py:270 stock/models.py:953 msgid "Quantity must be greater than zero" msgstr "Anzahl muss größer Null sein" @@ -2886,15 +2907,15 @@ msgstr "Position hinzufügen" #: order/templates/order/purchase_order_detail.html:45 #: order/templates/order/purchase_order_detail.html:125 -#: part/templates/part/category.html:197 part/templates/part/category.html:239 +#: part/templates/part/category.html:185 part/templates/part/category.html:227 #: stock/templates/stock/location.html:191 templates/js/stock.js:708 -#: templates/js/stock.js:1092 +#: templates/js/stock.js:1169 msgid "New Location" msgstr "Neuer Lagerort" #: order/templates/order/purchase_order_detail.html:46 #: order/templates/order/purchase_order_detail.html:126 -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:42 msgid "Create new stock location" msgstr "Neuen Lagerort anlegen" @@ -2931,25 +2952,14 @@ msgstr "Ausstehende Teile für %(order)s - %(desc)s empfangen" #: order/templates/order/receive_parts.html:14 part/api.py:40 #: part/models.py:322 part/templates/part/cat_link.html:7 -#: part/templates/part/category.html:95 -#: part/templates/part/category_navbar.html:11 -#: part/templates/part/category_navbar.html:14 +#: part/templates/part/category.html:99 +#: part/templates/part/category_navbar.html:22 +#: part/templates/part/category_navbar.html:29 #: part/templates/part/category_partlist.html:10 -#: templates/InvenTree/index.html:96 templates/InvenTree/search.html:114 -#: templates/InvenTree/settings/tabs.html:25 templates/navbar.html:23 -#: templates/stats.html:59 templates/stats.html:68 users/models.py:38 -msgid "Parts" -msgstr "Teile" - -#: order/templates/order/receive_parts.html:14 part/api.py:40 -#: part/models.py:322 part/templates/part/cat_link.html:7 -#: part/templates/part/category.html:95 -#: part/templates/part/category_navbar.html:11 -#: part/templates/part/category_navbar.html:14 -#: part/templates/part/category_partlist.html:10 -#: templates/InvenTree/index.html:96 templates/InvenTree/search.html:114 -#: templates/InvenTree/settings/tabs.html:25 templates/navbar.html:23 -#: templates/stats.html:59 templates/stats.html:68 users/models.py:38 +#: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114 +#: templates/InvenTree/settings/tabs.html:25 templates/js/part.js:577 +#: templates/navbar.html:23 templates/stats.html:59 templates/stats.html:68 +#: users/models.py:38 msgid "Parts" msgstr "Teile" @@ -2962,7 +2972,7 @@ msgid "Order Code" msgstr "Bestellnummer" #: order/templates/order/receive_parts.html:21 -#: part/templates/part/part_base.html:129 templates/js/part.js:413 +#: part/templates/part/part_base.html:129 templates/js/part.js:414 msgid "On Order" msgstr "bestellt" @@ -3273,7 +3283,7 @@ msgid "Remove allocation" msgstr "Zuordnung entfernen" #: part/bom.py:138 part/models.py:72 part/models.py:762 -#: part/templates/part/category.html:62 part/templates/part/detail.html:90 +#: part/templates/part/category.html:66 part/templates/part/detail.html:90 msgid "Default Location" msgstr "Standard-Lagerort" @@ -3351,7 +3361,7 @@ msgstr "Zulieferer einschließen" msgid "Include part supplier data in exported BOM" msgstr "Zulieferer-Daten in Stückliste-Export einschließen" -#: part/forms.py:122 part/models.py:2057 +#: part/forms.py:122 part/models.py:2077 msgid "Parent Part" msgstr "Ausgangsteil" @@ -3427,7 +3437,7 @@ msgstr "Parameter-Vorlage zu Kategorien dieser Ebene hinzufügen" msgid "Add parameter template to all categories" msgstr "Parameter-Vorlage zu allen Kategorien hinzufügen" -#: part/forms.py:344 part/models.py:2151 +#: part/forms.py:344 part/models.py:2171 msgid "Sub part" msgstr "Untergeordnetes Teil" @@ -3447,13 +3457,13 @@ msgstr "Standard Stichwörter" msgid "Default keywords for parts in this category" msgstr "Standard-Stichworte für Teile dieser Kategorie" -#: part/models.py:82 part/models.py:2103 -#: part/templates/part/part_app_base.html:9 +#: part/models.py:82 part/models.py:2123 +#: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Teil-Kategorie" -#: part/models.py:83 part/templates/part/category.html:19 -#: part/templates/part/category.html:90 part/templates/part/category.html:141 +#: part/models.py:83 part/templates/part/category.html:23 +#: part/templates/part/category.html:94 part/templates/part/category.html:141 #: templates/InvenTree/search.html:127 templates/stats.html:63 #: users/models.py:37 msgid "Part Categories" @@ -3508,7 +3518,7 @@ msgstr "Variante von" msgid "Part description" msgstr "Beschreibung des Teils" -#: part/models.py:716 part/templates/part/category.html:69 +#: part/models.py:716 part/templates/part/category.html:73 #: part/templates/part/detail.html:67 msgid "Keywords" msgstr "Schlüsselwörter" @@ -3517,8 +3527,8 @@ msgstr "Schlüsselwörter" msgid "Part keywords to improve visibility in search results" msgstr "Schlüsselworte um die Sichtbarkeit in Suchergebnissen zu verbessern" -#: part/models.py:724 part/models.py:2102 part/templates/part/detail.html:73 -#: part/templates/part/set_category.html:15 templates/js/part.js:384 +#: part/models.py:724 part/models.py:2122 part/templates/part/detail.html:73 +#: part/templates/part/set_category.html:15 templates/js/part.js:385 msgid "Category" msgstr "Kategorie" @@ -3527,7 +3537,7 @@ msgid "Part category" msgstr "Teile-Kategorie" #: part/models.py:730 part/templates/part/detail.html:28 -#: part/templates/part/part_base.html:94 templates/js/part.js:160 +#: part/templates/part/part_base.html:94 templates/js/part.js:161 msgid "IPN" msgstr "IPN (Interne Produktnummer)" @@ -3540,7 +3550,7 @@ msgid "Part revision or version number" msgstr "Revisions- oder Versionsnummer" #: part/models.py:738 part/templates/part/detail.html:35 report/models.py:198 -#: templates/js/part.js:164 +#: templates/js/part.js:165 msgid "Revision" msgstr "Revision" @@ -3572,7 +3582,7 @@ msgstr "Minimaler Lagerbestand" msgid "Minimum allowed stock level" msgstr "Minimal zulässiger Lagerbestand" -#: part/models.py:828 part/models.py:2031 part/templates/part/detail.html:106 +#: part/models.py:828 part/models.py:2051 part/templates/part/detail.html:106 #: part/templates/part/params.html:29 msgid "Units" msgstr "Einheiten" @@ -3603,7 +3613,7 @@ msgstr "Kann dieses Teil an Kunden verkauft werden?" #: part/models.py:861 part/templates/part/detail.html:227 #: templates/js/table_filters.js:20 templates/js/table_filters.js:60 -#: templates/js/table_filters.js:214 templates/js/table_filters.js:283 +#: templates/js/table_filters.js:236 templates/js/table_filters.js:305 msgid "Active" msgstr "Aktiv" @@ -3639,170 +3649,170 @@ msgstr "BOM Kontrolldatum" msgid "Creation User" msgstr "Erstellungs-Nutzer" -#: part/models.py:1929 +#: part/models.py:1949 msgid "Test templates can only be created for trackable parts" msgstr "Test-Vorlagen können nur für verfolgbare Teile angelegt werden" -#: part/models.py:1946 +#: part/models.py:1966 msgid "Test with this name already exists for this part" msgstr "Ein Test mit diesem Namen besteht bereits für dieses Teil" -#: part/models.py:1966 templates/js/part.js:561 templates/js/stock.js:104 +#: part/models.py:1986 templates/js/part.js:638 templates/js/stock.js:104 msgid "Test Name" msgstr "Test-Name" -#: part/models.py:1967 +#: part/models.py:1987 msgid "Enter a name for the test" msgstr "Namen für diesen Test eingeben" -#: part/models.py:1972 +#: part/models.py:1992 msgid "Test Description" msgstr "Test-Beschreibung" -#: part/models.py:1973 +#: part/models.py:1993 msgid "Enter description for this test" msgstr "Beschreibung für diesen Test eingeben" -#: part/models.py:1978 templates/js/part.js:570 -#: templates/js/table_filters.js:200 +#: part/models.py:1998 templates/js/part.js:647 +#: templates/js/table_filters.js:222 msgid "Required" msgstr "benötigt" -#: part/models.py:1979 +#: part/models.py:1999 msgid "Is this test required to pass?" msgstr "Muss dieser Test erfolgreich sein?" -#: part/models.py:1984 templates/js/part.js:578 +#: part/models.py:2004 templates/js/part.js:655 msgid "Requires Value" msgstr "verpflichtender Wert" -#: part/models.py:1985 +#: part/models.py:2005 msgid "Does this test require a value when adding a test result?" msgstr "" "Muss für diesen Test ein Wert für das Test-Ergebnis eingetragen werden?" -#: part/models.py:1990 templates/js/part.js:585 +#: part/models.py:2010 templates/js/part.js:662 msgid "Requires Attachment" msgstr "Anhang muss eingegeben werden" -#: part/models.py:1991 +#: part/models.py:2011 msgid "Does this test require a file attachment when adding a test result?" msgstr "" "Muss für diesen Test ein Anhang für das Test-Ergebnis hinzugefügt werden?" -#: part/models.py:2024 +#: part/models.py:2044 msgid "Parameter template name must be unique" msgstr "Vorlagen-Name des Parameters muss eindeutig sein" -#: part/models.py:2029 +#: part/models.py:2049 msgid "Parameter Name" msgstr "Name des Parameters" -#: part/models.py:2031 +#: part/models.py:2051 msgid "Parameter Units" msgstr "Parameter Einheit" -#: part/models.py:2059 part/models.py:2108 part/models.py:2109 +#: part/models.py:2079 part/models.py:2128 part/models.py:2129 #: templates/InvenTree/settings/category.html:62 msgid "Parameter Template" msgstr "Parameter Vorlage" -#: part/models.py:2061 +#: part/models.py:2081 msgid "Data" msgstr "Wert" -#: part/models.py:2061 +#: part/models.py:2081 msgid "Parameter Value" msgstr "Parameter Wert" -#: part/models.py:2113 templates/InvenTree/settings/category.html:67 +#: part/models.py:2133 templates/InvenTree/settings/category.html:67 msgid "Default Value" msgstr "Standard-Wert" -#: part/models.py:2114 +#: part/models.py:2134 msgid "Default Parameter Value" msgstr "Standard Parameter Wert" -#: part/models.py:2143 +#: part/models.py:2163 msgid "Select parent part" msgstr "Ausgangsteil auswählen" -#: part/models.py:2152 +#: part/models.py:2172 msgid "Select part to be used in BOM" msgstr "Teil für die Nutzung in der Stückliste auswählen" -#: part/models.py:2158 +#: part/models.py:2178 msgid "BOM quantity for this BOM item" msgstr "Stücklisten-Anzahl für dieses Stücklisten-Teil" -#: part/models.py:2160 templates/js/bom.js:216 templates/js/bom.js:269 +#: part/models.py:2180 templates/js/bom.js:216 templates/js/bom.js:269 msgid "Optional" msgstr "Optional" -#: part/models.py:2160 +#: part/models.py:2180 msgid "This BOM item is optional" msgstr "Diese Stücklisten-Position ist optional" -#: part/models.py:2163 +#: part/models.py:2183 msgid "Overage" msgstr "Überschuss" -#: part/models.py:2164 +#: part/models.py:2184 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Geschätzter Ausschuss (absolut oder prozentual)" -#: part/models.py:2167 +#: part/models.py:2187 msgid "BOM item reference" msgstr "Referenz der Postion auf der Stückliste" -#: part/models.py:2170 +#: part/models.py:2190 msgid "BOM item notes" msgstr "Notizen zur Stücklisten-Position" -#: part/models.py:2172 +#: part/models.py:2192 msgid "Checksum" msgstr "Prüfsumme" -#: part/models.py:2172 +#: part/models.py:2192 msgid "BOM line checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:2176 templates/js/bom.js:279 templates/js/bom.js:286 +#: part/models.py:2196 templates/js/bom.js:279 templates/js/bom.js:286 #: templates/js/table_filters.js:50 msgid "Inherited" msgstr "Geerbt" -#: part/models.py:2177 +#: part/models.py:2197 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" "Diese Stücklisten-Position wird in die Stücklisten von Teil-Varianten vererbt" -#: part/models.py:2253 part/views.py:1592 part/views.py:1644 +#: part/models.py:2273 part/views.py:1592 part/views.py:1644 #: stock/models.py:260 msgid "Quantity must be integer value for trackable parts" msgstr "Menge muss eine Ganzzahl sein" -#: part/models.py:2262 part/models.py:2264 +#: part/models.py:2282 part/models.py:2284 msgid "Sub part must be specified" msgstr "Zulieferer-Teil muss festgelegt sein" -#: part/models.py:2267 +#: part/models.py:2287 msgid "BOM Item" msgstr "Stücklisten-Position" -#: part/models.py:2384 +#: part/models.py:2404 msgid "Part 1" msgstr "Teil 1" -#: part/models.py:2388 +#: part/models.py:2408 msgid "Part 2" msgstr "Teil 2" -#: part/models.py:2388 +#: part/models.py:2408 msgid "Select Related Part" msgstr "verknüpftes Teil auswählen" -#: part/models.py:2420 +#: part/models.py:2440 msgid "" "Error creating relationship: check that the part is not related to itself " "and that the relationship is unique" @@ -3898,7 +3908,7 @@ msgid "All selected BOM items will be deleted" msgstr "Alle ausgewählte Stücklistenpositionen werden gelöscht" #: part/templates/part/bom.html:160 part/views.py:584 -#: templates/js/stock.js:1081 +#: templates/js/stock.js:1158 msgid "Create New Part" msgstr "Neues Teil anlegen" @@ -4014,39 +4024,42 @@ msgstr "gefertigte Teile" msgid "Start New Build" msgstr "Neuen Bauauftrag beginnen" -#: part/templates/part/category.html:20 +#: part/templates/part/category.html:24 msgid "All parts" msgstr "Alle Teile" -#: part/templates/part/category.html:25 part/views.py:2270 +#: part/templates/part/category.html:29 part/views.py:2270 msgid "Create new part category" msgstr "Teil-Kategorie anlegen" -#: part/templates/part/category.html:31 +#: part/templates/part/category.html:35 msgid "Edit part category" msgstr "Teil-Kategorie bearbeiten" -#: part/templates/part/category.html:36 +#: part/templates/part/category.html:40 msgid "Delete part category" msgstr "Teil-Kategorie löschen" -#: part/templates/part/category.html:46 part/templates/part/category.html:85 +#: part/templates/part/category.html:50 part/templates/part/category.html:89 msgid "Category Details" msgstr "Kategorie-Details" -#: part/templates/part/category.html:51 +#: part/templates/part/category.html:55 msgid "Category Path" msgstr "Pfad zur Kategorie" -#: part/templates/part/category.html:56 +#: part/templates/part/category.html:60 msgid "Category Description" msgstr "Kategorie-Beschreibung" -#: part/templates/part/category.html:75 +#: part/templates/part/category.html:79 +#: part/templates/part/category_navbar.html:11 +#: part/templates/part/category_navbar.html:18 +#: part/templates/part/subcategory.html:16 msgid "Subcategories" msgstr "Unter-Kategorien" -#: part/templates/part/category.html:80 +#: part/templates/part/category.html:84 msgid "Parts (Including subcategories)" msgstr "Teile (inklusive Unter-Kategorien)" @@ -4066,24 +4079,24 @@ msgstr "Teil-Kategorie auswählen" msgid "Export Data" msgstr "Exportieren" -#: part/templates/part/category.html:198 +#: part/templates/part/category.html:186 #: stock/templates/stock/location.html:192 templates/js/stock.js:709 msgid "Create new location" msgstr "Neuen Lagerort anlegen" -#: part/templates/part/category.html:203 part/templates/part/category.html:233 +#: part/templates/part/category.html:191 part/templates/part/category.html:221 msgid "New Category" msgstr "Neue Kategorie" -#: part/templates/part/category.html:204 +#: part/templates/part/category.html:192 msgid "Create new category" msgstr "Teil-Kategorie anlegen" -#: part/templates/part/category.html:234 +#: part/templates/part/category.html:222 msgid "Create new Part Category" msgstr "Neue Teil-Kategorie anlegen" -#: part/templates/part/category.html:240 stock/views.py:1359 +#: part/templates/part/category.html:228 stock/views.py:1359 msgid "Create new Stock Location" msgstr "Neuen Lagerort erstellen" @@ -4132,8 +4145,8 @@ msgstr "" "Wenn diese Kat. gelöscht wird, werden diese Teile in die oberste Kat. " "verschoben" -#: part/templates/part/category_navbar.html:18 -#: part/templates/part/category_navbar.html:21 +#: part/templates/part/category_navbar.html:34 +#: part/templates/part/category_navbar.html:37 #: part/templates/part/navbar.html:22 msgid "Parameters" msgstr "Parameter" @@ -4317,7 +4330,7 @@ msgstr "Neuer Parameter" #: part/templates/part/params.html:28 #: report/templates/report/inventree_test_report_base.html:90 -#: stock/models.py:1654 templates/InvenTree/settings/header.html:8 +#: stock/models.py:1655 templates/InvenTree/settings/header.html:8 #: templates/js/stock.js:124 msgid "Value" msgstr "Wert" @@ -4334,7 +4347,7 @@ msgstr "Neue Vorlage" msgid "Create New Parameter Template" msgstr "Neue Teilparametervorlage anlegen" -#: part/templates/part/part_app_base.html:11 +#: part/templates/part/part_app_base.html:12 msgid "Part List" msgstr "Teileliste" @@ -4344,7 +4357,7 @@ msgid "This part is a variant of %(link)s" msgstr "Dieses Teil ist eine Variante von %(link)s" #: part/templates/part/part_base.html:33 templates/js/company.js:156 -#: templates/js/company.js:254 templates/js/part.js:75 templates/js/part.js:152 +#: templates/js/company.js:254 templates/js/part.js:76 templates/js/part.js:153 msgid "Inactive" msgstr "Inaktiv" @@ -4354,19 +4367,19 @@ msgstr "Teil favorisieren" #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:131 -#: stock/templates/stock/location.html:44 +#: stock/templates/stock/location.html:51 msgid "Barcode actions" msgstr "Barcode Aktionen" #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:133 -#: stock/templates/stock/location.html:46 templates/qr_button.html:1 +#: stock/templates/stock/location.html:53 templates/qr_button.html:1 msgid "Show QR Code" msgstr "QR-Code anzeigen" #: part/templates/part/part_base.html:50 #: stock/templates/stock/item_base.html:149 -#: stock/templates/stock/location.html:47 +#: stock/templates/stock/location.html:54 msgid "Print Label" msgstr "Label drucken" @@ -4394,11 +4407,11 @@ msgstr "Teil bearbeiten" msgid "Delete part" msgstr "Teil löschen" -#: part/templates/part/part_base.html:123 templates/js/table_filters.js:134 +#: part/templates/part/part_base.html:123 templates/js/table_filters.js:156 msgid "In Stock" msgstr "Auf Lager" -#: part/templates/part/part_base.html:136 templates/InvenTree/index.html:130 +#: part/templates/part/part_base.html:136 templates/InvenTree/index.html:131 msgid "Required for Build Orders" msgstr "Für Bauaufträge benötigt" @@ -4414,7 +4427,7 @@ msgstr "zu Bauaufträgen zugeordnet" msgid "Can Build" msgstr "Herstellbar" -#: part/templates/part/part_base.html:171 templates/js/part.js:417 +#: part/templates/part/part_base.html:171 templates/js/part.js:418 msgid "Building" msgstr "Im Bau" @@ -4540,18 +4553,14 @@ msgid "Showing stock for all variants of %(full_name)s" msgstr "Lagerbestand aller Varianten von %(full_name)s" #: part/templates/part/stock_count.html:7 templates/js/bom.js:239 -#: templates/js/part.js:421 +#: templates/js/part.js:422 msgid "No Stock" msgstr "Kein Bestand" -#: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:129 +#: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:130 msgid "Low Stock" msgstr "niedriger Bestand" -#: part/templates/part/subcategories.html:5 -msgid "Child Categories" -msgstr "Unter-Kategorien" - #: part/templates/part/supplier.html:10 msgid "Part Suppliers" msgstr "Zulieferer" @@ -4890,17 +4899,17 @@ msgid "Test Results" msgstr "Testergebnisse" #: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:1642 +#: stock/models.py:1643 msgid "Test" msgstr "Test" #: report/templates/report/inventree_test_report_base.html:89 -#: stock/models.py:1648 +#: stock/models.py:1649 msgid "Result" msgstr "Ergebnis" #: report/templates/report/inventree_test_report_base.html:92 -#: templates/js/order.js:195 templates/js/stock.js:909 +#: templates/js/order.js:195 templates/js/stock.js:986 msgid "Date" msgstr "Datum" @@ -4958,7 +4967,8 @@ msgstr " Transaktionsnotizen hinzufügen (optional)" msgid "Select test report template" msgstr "Test Bericht Vorlage auswählen" -#: stock/forms.py:267 templates/js/table_filters.js:111 +#: stock/forms.py:267 templates/js/table_filters.js:70 +#: templates/js/table_filters.js:133 msgid "Include sublocations" msgstr "Unter-Lagerorte einschließen" @@ -5068,7 +5078,7 @@ msgstr "Basis-Teil" msgid "Select a matching supplier part for this stock item" msgstr "Passendes Zulieferer-Teil für dieses BestandsObjekt auswählen" -#: stock/models.py:388 stock/templates/stock/stock_app_base.html:7 +#: stock/models.py:388 stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Bestand-Lagerort" @@ -5160,101 +5170,101 @@ msgstr "zurück vom Kunden" msgid "Returned to location" msgstr "zurück ins Lager" -#: stock/models.py:791 +#: stock/models.py:792 msgid "Installed into stock item" msgstr "In BestandsObjekt verbaut" -#: stock/models.py:799 +#: stock/models.py:800 msgid "Installed stock item" msgstr "verbautes BestandsObjekt" -#: stock/models.py:823 +#: stock/models.py:824 msgid "Uninstalled stock item" msgstr "BestandsObjekt ausgebaut" -#: stock/models.py:842 +#: stock/models.py:843 msgid "Uninstalled into location" msgstr "ausgebaut nach Lagerort" -#: stock/models.py:943 +#: stock/models.py:944 msgid "Part is not set as trackable" msgstr "Teil ist nicht verfolgbar" -#: stock/models.py:949 +#: stock/models.py:950 msgid "Quantity must be integer" msgstr "Anzahl muss eine Ganzzahl sein" -#: stock/models.py:955 +#: stock/models.py:956 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "Anzahl darf nicht die verfügbare Anzahl überschreiten ({n})" -#: stock/models.py:958 +#: stock/models.py:959 msgid "Serial numbers must be a list of integers" msgstr "Seriennummern muss eine Liste von Ganzzahlen sein" -#: stock/models.py:961 +#: stock/models.py:962 msgid "Quantity does not match serial numbers" msgstr "Anzahl stimmt nicht mit den Seriennummern überein" -#: stock/models.py:993 +#: stock/models.py:994 msgid "Add serial number" msgstr "Seriennummer hinzufügen" -#: stock/models.py:996 +#: stock/models.py:997 #, python-brace-format msgid "Serialized {n} items" msgstr "{n} Teile serialisiert" -#: stock/models.py:1074 +#: stock/models.py:1075 msgid "Split from existing stock" msgstr "aufteilen vom vorhandenen Bestand" -#: stock/models.py:1112 +#: stock/models.py:1113 msgid "StockItem cannot be moved as it is not in stock" msgstr "BestandsObjekt kann nicht bewegt werden, da kein Bestand vorhanden ist" -#: stock/models.py:1555 +#: stock/models.py:1556 msgid "Title" msgstr "Titel" -#: stock/models.py:1555 +#: stock/models.py:1556 msgid "Tracking entry title" msgstr "Objektverfolgung - Name des Eintrags" -#: stock/models.py:1557 +#: stock/models.py:1558 msgid "Entry notes" msgstr "Eintrags-Notizen" -#: stock/models.py:1559 +#: stock/models.py:1560 msgid "Link to external page for further information" msgstr "Link auf externe Seite für weitere Informationen" -#: stock/models.py:1619 +#: stock/models.py:1620 msgid "Value must be provided for this test" msgstr "Wert muss für diesen Test angegeben werden" -#: stock/models.py:1625 +#: stock/models.py:1626 msgid "Attachment must be uploaded for this test" msgstr "Anhang muss für diesen Test hochgeladen werden" -#: stock/models.py:1643 +#: stock/models.py:1644 msgid "Test name" msgstr "Name des Tests" -#: stock/models.py:1649 templates/js/table_filters.js:190 +#: stock/models.py:1650 templates/js/table_filters.js:212 msgid "Test result" msgstr "Testergebnis" -#: stock/models.py:1655 +#: stock/models.py:1656 msgid "Test output value" msgstr "Test Ausgabe Wert" -#: stock/models.py:1662 +#: stock/models.py:1663 msgid "Test result attachment" msgstr "Test Ergebnis Anhang" -#: stock/models.py:1668 +#: stock/models.py:1669 msgid "Test notes" msgstr "Test Notizen" @@ -5302,8 +5312,7 @@ msgstr "" #, python-format msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" msgstr "" -"Dieses BestandsObjekt ist dem Bauauftrag %(link)s zugewiesen (Menge: " -"%(qty)s)" +"Dieses BestandsObjekt ist dem Bauauftrag %(link)s zugewiesen (Menge: %(qty)s)" #: stock/templates/stock/item_base.html:67 msgid "" @@ -5325,12 +5334,12 @@ msgstr "" "aufgebraucht ist." #: stock/templates/stock/item_base.html:95 -#: stock/templates/stock/item_base.html:369 templates/js/table_filters.js:123 +#: stock/templates/stock/item_base.html:369 templates/js/table_filters.js:145 msgid "Expired" msgstr "abgelaufen" #: stock/templates/stock/item_base.html:99 -#: stock/templates/stock/item_base.html:371 templates/js/table_filters.js:128 +#: stock/templates/stock/item_base.html:371 templates/js/table_filters.js:150 msgid "Stale" msgstr "überfällig" @@ -5361,15 +5370,15 @@ msgid "Stock adjustment actions" msgstr "Bestands-Anpassungs Aktionen" #: stock/templates/stock/item_base.html:164 -#: stock/templates/stock/location.html:58 templates/stock_table.html:55 +#: stock/templates/stock/location.html:65 templates/stock_table.html:56 msgid "Count stock" msgstr "Bestand zählen" -#: stock/templates/stock/item_base.html:167 templates/stock_table.html:53 +#: stock/templates/stock/item_base.html:167 templates/stock_table.html:54 msgid "Add stock" msgstr "Bestand hinzufügen" -#: stock/templates/stock/item_base.html:170 templates/stock_table.html:54 +#: stock/templates/stock/item_base.html:170 templates/stock_table.html:55 msgid "Remove stock" msgstr "Bestand entfernen" @@ -5389,7 +5398,7 @@ msgstr "zu Kunden zuordnen" msgid "Return to stock" msgstr "zu Bestand zurückgeben" -#: stock/templates/stock/item_base.html:187 templates/js/stock.js:1222 +#: stock/templates/stock/item_base.html:187 templates/js/stock.js:1299 msgid "Uninstall stock item" msgstr "BestandsObjekt deinstallieren" @@ -5398,7 +5407,7 @@ msgid "Uninstall" msgstr "Deinstallieren" #: stock/templates/stock/item_base.html:196 -#: stock/templates/stock/location.html:55 +#: stock/templates/stock/location.html:62 msgid "Stock actions" msgstr "Bestands-Aktionen" @@ -5522,7 +5531,7 @@ msgstr "Testdaten löschen" msgid "Add Test Data" msgstr "Testdaten hinzufügen" -#: stock/templates/stock/location.html:13 +#: stock/templates/stock/location.html:20 msgid "" "You are not in the list of owners of this location. This stock location " "cannot be edited." @@ -5530,47 +5539,50 @@ msgstr "" "Sie sind nicht auf der Liste der Besitzer dieses Lagerorts. Der Bestands-" "Lagerort kann nicht verändert werden." -#: stock/templates/stock/location.html:30 +#: stock/templates/stock/location.html:37 msgid "All stock items" msgstr "Alle BestandsObjekte" -#: stock/templates/stock/location.html:48 +#: stock/templates/stock/location.html:55 msgid "Check-in Items" msgstr "Teile einchecken" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:71 msgid "Location actions" msgstr "Lagerort-Aktionen" -#: stock/templates/stock/location.html:66 +#: stock/templates/stock/location.html:73 msgid "Edit location" msgstr "Lagerort bearbeiten" -#: stock/templates/stock/location.html:68 +#: stock/templates/stock/location.html:75 msgid "Delete location" msgstr "Lagerort löschen" -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:87 msgid "Location Details" msgstr "Lagerort-Details" -#: stock/templates/stock/location.html:85 +#: stock/templates/stock/location.html:92 msgid "Location Path" msgstr "Lagerort-Pfad" -#: stock/templates/stock/location.html:90 +#: stock/templates/stock/location.html:97 msgid "Location Description" msgstr "Lagerort-Beschreibung" -#: stock/templates/stock/location.html:95 +#: stock/templates/stock/location.html:102 +#: stock/templates/stock/location_navbar.html:11 +#: stock/templates/stock/location_navbar.html:18 +#: stock/templates/stock/sublocation.html:16 msgid "Sublocations" msgstr "Unter-Lagerorte" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:112 msgid "Stock Details" msgstr "Objekt-Details" -#: stock/templates/stock/location.html:110 templates/InvenTree/search.html:279 +#: stock/templates/stock/location.html:117 templates/InvenTree/search.html:279 #: templates/stats.html:76 users/models.py:39 msgid "Stock Locations" msgstr "Bestand-Lagerorte" @@ -5579,18 +5591,6 @@ msgstr "Bestand-Lagerorte" msgid "Are you sure you want to delete this stock location?" msgstr "Sind Sie sicher, dass Sie diesen Lagerort löschen wollen?" -#: stock/templates/stock/location_list.html:6 -msgid "Sub-Locations" -msgstr "Sub-Lagerorte" - -#. Translators: pluralize with counter -#: stock/templates/stock/location_list.html:17 -#, python-format -msgid "%(counter)s Item" -msgid_plural "%(counter)s Items" -msgstr[0] "%(counter)s Objekt" -msgstr[1] "%(counter)s Objekte" - #: stock/templates/stock/navbar.html:11 msgid "Stock Item Tracking" msgstr "BestandsObjekt-Verfolgung" @@ -5615,7 +5615,7 @@ msgstr "Kinder" msgid "Remove item" msgstr "Teil entfernen" -#: stock/templates/stock/stock_app_base.html:15 +#: stock/templates/stock/stock_app_base.html:16 msgid "Loading..." msgstr "Lade..." @@ -5640,6 +5640,14 @@ msgstr "Es kann in eine der folgenden Varianten konvertiert werden." msgid "This action cannot be easily undone" msgstr "Diese Aktion kann nicht einfach rückgängig gemacht werden" +#: stock/templates/stock/sublocation.html:23 templates/stock_table.html:37 +msgid "Printing Actions" +msgstr "Druck Aktionen" + +#: stock/templates/stock/sublocation.html:27 templates/stock_table.html:41 +msgid "Print labels" +msgstr "Label drucken" + #: stock/templates/stock/tracking_delete.html:6 msgid "Are you sure you want to delete this stock tracking entry?" msgstr "" @@ -5763,7 +5771,7 @@ msgstr "Entfernen" msgid "Add Stock Items" msgstr "BestandsObjekte hinzufügen" -#: stock/views.py:1001 users/models.py:179 +#: stock/views.py:1001 users/models.py:180 msgid "Add" msgstr "Hinzufügen" @@ -5873,55 +5881,55 @@ msgstr "Seite nicht gefunden" msgid "The requested page does not exist" msgstr "Seite existiert nicht" -#: templates/InvenTree/index.html:6 +#: templates/InvenTree/index.html:7 msgid "Index" msgstr "Index" -#: templates/InvenTree/index.html:97 +#: templates/InvenTree/index.html:98 msgid "Starred Parts" msgstr "Teilfavoriten" -#: templates/InvenTree/index.html:98 +#: templates/InvenTree/index.html:99 msgid "Latest Parts" msgstr "neueste Teile" -#: templates/InvenTree/index.html:99 +#: templates/InvenTree/index.html:100 msgid "BOM Waiting Validation" msgstr "Stücklisten erwarten Kontrolle" -#: templates/InvenTree/index.html:128 +#: templates/InvenTree/index.html:129 msgid "Recently Updated" msgstr "kürzlich aktualisiert" -#: templates/InvenTree/index.html:144 +#: templates/InvenTree/index.html:145 msgid "Expired Stock" msgstr "abgelaufener Bestand" -#: templates/InvenTree/index.html:145 +#: templates/InvenTree/index.html:146 msgid "Stale Stock" msgstr "Lagerbestand überfällig" -#: templates/InvenTree/index.html:183 +#: templates/InvenTree/index.html:184 msgid "Build Orders In Progress" msgstr "laufende Bauaufträge" -#: templates/InvenTree/index.html:184 +#: templates/InvenTree/index.html:185 msgid "Overdue Build Orders" msgstr "überfällige Bauaufträge" -#: templates/InvenTree/index.html:205 +#: templates/InvenTree/index.html:206 msgid "Outstanding Purchase Orders" msgstr "ausstehende Bestellungen" -#: templates/InvenTree/index.html:206 +#: templates/InvenTree/index.html:207 msgid "Overdue Purchase Orders" msgstr "überfällige Bestellungen" -#: templates/InvenTree/index.html:228 +#: templates/InvenTree/index.html:229 msgid "Outstanding Sales Orders" msgstr "ausstehende Aufträge" -#: templates/InvenTree/index.html:229 +#: templates/InvenTree/index.html:230 msgid "Overdue Sales Orders" msgstr "überfällige Aufträge" @@ -5971,7 +5979,7 @@ msgstr "Vorlage löschen" msgid "Global InvenTree Settings" msgstr "Systemweite InvenTree-Einstellungen" -#: templates/InvenTree/settings/global.html:26 +#: templates/InvenTree/settings/global.html:27 msgid "Barcode Settings" msgstr "Barcode-Einstellungen" @@ -6011,8 +6019,8 @@ msgstr "Kein Wert angegeben" msgid "Edit setting" msgstr "Einstellungen ändern" -#: templates/InvenTree/settings/settings.html:7 -#: templates/InvenTree/settings/settings.html:13 templates/navbar.html:84 +#: templates/InvenTree/settings/settings.html:8 +#: templates/InvenTree/settings/settings.html:14 templates/navbar.html:84 msgid "Settings" msgstr "Einstellungen" @@ -6024,7 +6032,7 @@ msgstr "Auftrags-Einstellungen" msgid "Stock Settings" msgstr "Bestands-Einstellungen" -#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:48 +#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:49 msgid "Stock Options" msgstr "Stock-Optionen" @@ -6089,7 +6097,7 @@ msgid "Change Password" msgstr "Passwort ändern" #: templates/InvenTree/settings/user.html:28 -#: templates/registration/login.html:58 +#: templates/registration/login.html:59 msgid "Username" msgstr "Benutzername" @@ -6347,7 +6355,7 @@ msgid "Quantity Per" msgstr "Anzahl pro" #: templates/js/build.js:582 templates/js/build.js:996 -#: templates/stock_table.html:57 +#: templates/stock_table.html:58 msgid "Order stock" msgstr "Bestand bestellen" @@ -6355,8 +6363,9 @@ msgstr "Bestand bestellen" msgid "No builds matching query" msgstr "Keine Bauaufträge passen zur Anfrage" -#: templates/js/build.js:649 templates/js/part.js:323 templates/js/stock.js:511 -#: templates/js/stock.js:1254 +#: templates/js/build.js:649 templates/js/part.js:324 templates/js/part.js:546 +#: templates/js/stock.js:511 templates/js/stock.js:938 +#: templates/js/stock.js:1331 msgid "Select" msgstr "Auswählen" @@ -6385,12 +6394,12 @@ msgid "No manufacturer parts found" msgstr "Keine Hersteller-Teile gefunden" #: templates/js/company.js:148 templates/js/company.js:246 -#: templates/js/part.js:59 templates/js/part.js:144 +#: templates/js/part.js:60 templates/js/part.js:145 msgid "Template part" msgstr "Vorlagenteil" #: templates/js/company.js:152 templates/js/company.js:250 -#: templates/js/part.js:63 templates/js/part.js:148 +#: templates/js/part.js:64 templates/js/part.js:149 msgid "Assembled part" msgstr "Baugruppe" @@ -6565,59 +6574,63 @@ msgstr "Bestellung überfällig" msgid "No sales orders found" msgstr "Keine Aufträge gefunden" -#: templates/js/part.js:51 templates/js/part.js:136 +#: templates/js/part.js:52 templates/js/part.js:137 msgid "Trackable part" msgstr "nachverfolgbares Teil" -#: templates/js/part.js:55 templates/js/part.js:140 +#: templates/js/part.js:56 templates/js/part.js:141 msgid "Virtual part" msgstr "virtuelles Teil" -#: templates/js/part.js:67 +#: templates/js/part.js:68 msgid "Starred part" msgstr "Favoritenteil" -#: templates/js/part.js:71 +#: templates/js/part.js:72 msgid "Salable part" msgstr "Verkäufliches Teil" -#: templates/js/part.js:185 +#: templates/js/part.js:186 msgid "No variants found" msgstr "Keine Varianten gefunden" -#: templates/js/part.js:271 templates/js/part.js:451 +#: templates/js/part.js:272 templates/js/part.js:452 msgid "No parts found" msgstr "Keine Teile gefunden" -#: templates/js/part.js:390 +#: templates/js/part.js:391 msgid "No category" msgstr "Keine Kategorie" -#: templates/js/part.js:408 templates/js/table_filters.js:296 +#: templates/js/part.js:409 templates/js/table_filters.js:318 msgid "Low stock" msgstr "Bestand niedrig" -#: templates/js/part.js:511 +#: templates/js/part.js:571 templates/js/stock.js:962 +msgid "Path" +msgstr "" + +#: templates/js/part.js:588 msgid "YES" msgstr "JA" -#: templates/js/part.js:513 +#: templates/js/part.js:590 msgid "NO" msgstr "NEIN" -#: templates/js/part.js:547 +#: templates/js/part.js:624 msgid "No test templates matching query" msgstr "Keine zur Anfrage passenden Testvorlagen" -#: templates/js/part.js:598 templates/js/stock.js:75 +#: templates/js/part.js:675 templates/js/stock.js:75 msgid "Edit test result" msgstr "Testergebnis bearbeiten" -#: templates/js/part.js:599 templates/js/stock.js:76 +#: templates/js/part.js:676 templates/js/stock.js:76 msgid "Delete test result" msgstr "Testergebnis löschen" -#: templates/js/part.js:605 +#: templates/js/part.js:682 msgid "This test is defined for a parent part" msgstr "Dieses Testergebnis ist für ein Hauptteil" @@ -6787,7 +6800,7 @@ msgstr "BestandsObjekt verloren" msgid "Stock item is destroyed" msgstr "BestandsObjekt zerstört" -#: templates/js/stock.js:620 templates/js/table_filters.js:116 +#: templates/js/stock.js:620 templates/js/table_filters.js:138 msgid "Depleted" msgstr "gelöscht" @@ -6811,31 +6824,31 @@ msgstr "Status Code setzen" msgid "Status code must be selected" msgstr "Status Code muss ausgewählt werden" -#: templates/js/stock.js:973 +#: templates/js/stock.js:1050 msgid "No user information" msgstr "Keine Benutzerinformation" -#: templates/js/stock.js:983 +#: templates/js/stock.js:1060 msgid "Edit tracking entry" msgstr "Tracking-Eintrag bearbeiten" -#: templates/js/stock.js:984 +#: templates/js/stock.js:1061 msgid "Delete tracking entry" msgstr "Tracking-Eintrag löschen" -#: templates/js/stock.js:1093 +#: templates/js/stock.js:1170 msgid "Create New Location" msgstr "Neuen Lagerort anlegen" -#: templates/js/stock.js:1192 +#: templates/js/stock.js:1269 msgid "Serial" msgstr "Seriennummer" -#: templates/js/stock.js:1285 templates/js/table_filters.js:149 +#: templates/js/stock.js:1362 templates/js/table_filters.js:171 msgid "Installed" msgstr "Installiert" -#: templates/js/stock.js:1310 +#: templates/js/stock.js:1387 msgid "Install item" msgstr "Installiere Objekt" @@ -6847,148 +6860,155 @@ msgstr "nachverfolgbares Teil" msgid "Validated" msgstr "überprüft" -#: templates/js/table_filters.js:70 templates/js/table_filters.js:159 -msgid "Is Serialized" -msgstr "ist mit Seriennummer" - -#: templates/js/table_filters.js:73 templates/js/table_filters.js:166 -msgid "Serial number GTE" -msgstr "Seriennummer >=" - -#: templates/js/table_filters.js:74 templates/js/table_filters.js:167 -msgid "Serial number greater than or equal to" -msgstr "Seriennummer größer oder gleich" - -#: templates/js/table_filters.js:77 templates/js/table_filters.js:170 -msgid "Serial number LTE" -msgstr "Seriennummer <=" - -#: templates/js/table_filters.js:78 templates/js/table_filters.js:171 -msgid "Serial number less than or equal to" -msgstr "Seriennummern kleiner oder gleich" +#: templates/js/table_filters.js:71 +#, fuzzy +#| msgid "Include sublocations" +msgid "Include locations" +msgstr "Unter-Lagerorte einschließen" #: templates/js/table_filters.js:81 templates/js/table_filters.js:82 -#: templates/js/table_filters.js:162 templates/js/table_filters.js:163 -msgid "Serial number" -msgstr "Seriennummer" - -#: templates/js/table_filters.js:86 templates/js/table_filters.js:180 -msgid "Batch code" -msgstr "Losnummer" - -#: templates/js/table_filters.js:96 templates/js/table_filters.js:263 -msgid "Active parts" -msgstr "Aktive Teile" - -#: templates/js/table_filters.js:97 -msgid "Show stock for active parts" -msgstr "Bestand aktiver Teile anzeigen" - -#: templates/js/table_filters.js:102 -msgid "Part is an assembly" -msgstr "Teil ist eine Baugruppe" - -#: templates/js/table_filters.js:106 -msgid "Is allocated" -msgstr "Ist zugeordnet" - -#: templates/js/table_filters.js:107 -msgid "Item has been allocated" -msgstr "Teil wurde zugeordnet" - -#: templates/js/table_filters.js:112 -msgid "Include stock in sublocations" -msgstr "Bestand in Unter-Lagerorten einschließen" - -#: templates/js/table_filters.js:117 -msgid "Show stock items which are depleted" -msgstr "Zeige aufgebrauchte BestandsObjekte" - -#: templates/js/table_filters.js:124 -msgid "Show stock items which have expired" -msgstr "Zeige abgelaufene BestandsObjekte" - -#: templates/js/table_filters.js:129 -msgid "Show stock which is close to expiring" -msgstr "Bestand, der bald ablaufen, anzeigen" - -#: templates/js/table_filters.js:135 -msgid "Show items which are in stock" -msgstr "Zeige Objekte welche im Lager sind" - -#: templates/js/table_filters.js:139 -msgid "In Production" -msgstr "In Arbeit" - -#: templates/js/table_filters.js:140 -msgid "Show items which are in production" -msgstr "Elemente, die in Produktion sind, anzeigen" - -#: templates/js/table_filters.js:144 -msgid "Include Variants" -msgstr "Varianten einschließen" - -#: templates/js/table_filters.js:145 -msgid "Include stock items for variant parts" -msgstr "BestandsObjekte für Teil-Varianten einschließen" - -#: templates/js/table_filters.js:150 -msgid "Show stock items which are installed in another item" -msgstr "BestandsObjekte, die in anderen Elementen verbaut sind, anzeigen" - -#: templates/js/table_filters.js:154 -msgid "Sent to customer" -msgstr "Zum Kunden geschickt" - -#: templates/js/table_filters.js:155 -msgid "Show items which have been assigned to a customer" -msgstr "zeige zu Kunden zugeordnete Einträge" - -#: templates/js/table_filters.js:175 templates/js/table_filters.js:176 -msgid "Stock status" -msgstr "Bestandsstatus" - -#: templates/js/table_filters.js:209 -msgid "Build status" -msgstr "Bau-Status" - -#: templates/js/table_filters.js:228 templates/js/table_filters.js:245 -msgid "Order status" -msgstr "Bestellstatus" - -#: templates/js/table_filters.js:233 templates/js/table_filters.js:250 -msgid "Outstanding" -msgstr "ausstehend" - -#: templates/js/table_filters.js:273 +#: templates/js/table_filters.js:295 msgid "Include subcategories" msgstr "Unterkategorien einschließen" -#: templates/js/table_filters.js:274 +#: templates/js/table_filters.js:92 templates/js/table_filters.js:181 +msgid "Is Serialized" +msgstr "ist mit Seriennummer" + +#: templates/js/table_filters.js:95 templates/js/table_filters.js:188 +msgid "Serial number GTE" +msgstr "Seriennummer >=" + +#: templates/js/table_filters.js:96 templates/js/table_filters.js:189 +msgid "Serial number greater than or equal to" +msgstr "Seriennummer größer oder gleich" + +#: templates/js/table_filters.js:99 templates/js/table_filters.js:192 +msgid "Serial number LTE" +msgstr "Seriennummer <=" + +#: templates/js/table_filters.js:100 templates/js/table_filters.js:193 +msgid "Serial number less than or equal to" +msgstr "Seriennummern kleiner oder gleich" + +#: templates/js/table_filters.js:103 templates/js/table_filters.js:104 +#: templates/js/table_filters.js:184 templates/js/table_filters.js:185 +msgid "Serial number" +msgstr "Seriennummer" + +#: templates/js/table_filters.js:108 templates/js/table_filters.js:202 +msgid "Batch code" +msgstr "Losnummer" + +#: templates/js/table_filters.js:118 templates/js/table_filters.js:285 +msgid "Active parts" +msgstr "Aktive Teile" + +#: templates/js/table_filters.js:119 +msgid "Show stock for active parts" +msgstr "Bestand aktiver Teile anzeigen" + +#: templates/js/table_filters.js:124 +msgid "Part is an assembly" +msgstr "Teil ist eine Baugruppe" + +#: templates/js/table_filters.js:128 +msgid "Is allocated" +msgstr "Ist zugeordnet" + +#: templates/js/table_filters.js:129 +msgid "Item has been allocated" +msgstr "Teil wurde zugeordnet" + +#: templates/js/table_filters.js:134 +msgid "Include stock in sublocations" +msgstr "Bestand in Unter-Lagerorten einschließen" + +#: templates/js/table_filters.js:139 +msgid "Show stock items which are depleted" +msgstr "Zeige aufgebrauchte BestandsObjekte" + +#: templates/js/table_filters.js:146 +msgid "Show stock items which have expired" +msgstr "Zeige abgelaufene BestandsObjekte" + +#: templates/js/table_filters.js:151 +msgid "Show stock which is close to expiring" +msgstr "Bestand, der bald ablaufen, anzeigen" + +#: templates/js/table_filters.js:157 +msgid "Show items which are in stock" +msgstr "Zeige Objekte welche im Lager sind" + +#: templates/js/table_filters.js:161 +msgid "In Production" +msgstr "In Arbeit" + +#: templates/js/table_filters.js:162 +msgid "Show items which are in production" +msgstr "Elemente, die in Produktion sind, anzeigen" + +#: templates/js/table_filters.js:166 +msgid "Include Variants" +msgstr "Varianten einschließen" + +#: templates/js/table_filters.js:167 +msgid "Include stock items for variant parts" +msgstr "BestandsObjekte für Teil-Varianten einschließen" + +#: templates/js/table_filters.js:172 +msgid "Show stock items which are installed in another item" +msgstr "BestandsObjekte, die in anderen Elementen verbaut sind, anzeigen" + +#: templates/js/table_filters.js:176 +msgid "Sent to customer" +msgstr "Zum Kunden geschickt" + +#: templates/js/table_filters.js:177 +msgid "Show items which have been assigned to a customer" +msgstr "zeige zu Kunden zugeordnete Einträge" + +#: templates/js/table_filters.js:197 templates/js/table_filters.js:198 +msgid "Stock status" +msgstr "Bestandsstatus" + +#: templates/js/table_filters.js:231 +msgid "Build status" +msgstr "Bau-Status" + +#: templates/js/table_filters.js:250 templates/js/table_filters.js:267 +msgid "Order status" +msgstr "Bestellstatus" + +#: templates/js/table_filters.js:255 templates/js/table_filters.js:272 +msgid "Outstanding" +msgstr "ausstehend" + +#: templates/js/table_filters.js:296 msgid "Include parts in subcategories" msgstr "Teile in Unterkategorien einschließen" -#: templates/js/table_filters.js:278 +#: templates/js/table_filters.js:300 msgid "Has IPN" msgstr "Hat IPN" -#: templates/js/table_filters.js:279 +#: templates/js/table_filters.js:301 msgid "Part has internal part number" msgstr "Teil hat Interne Teilenummer" -#: templates/js/table_filters.js:284 +#: templates/js/table_filters.js:306 msgid "Show active parts" msgstr "Aktive Teile anzeigen" -#: templates/js/table_filters.js:292 +#: templates/js/table_filters.js:314 msgid "Stock available" msgstr "verfügbarer Lagerbestand" -#: templates/js/table_filters.js:308 +#: templates/js/table_filters.js:330 msgid "Starred" msgstr "Favorit" -#: templates/js/table_filters.js:320 +#: templates/js/table_filters.js:342 msgid "Purchasable" msgstr "Käuflich" @@ -7069,7 +7089,7 @@ msgstr "Admin" msgid "Logout" msgstr "Ausloggen" -#: templates/navbar.html:81 templates/registration/login.html:89 +#: templates/navbar.html:81 templates/registration/login.html:90 msgid "Login" msgstr "Einloggen" @@ -7081,81 +7101,81 @@ msgstr "Über InvenBaum" msgid "QR data not provided" msgstr "QR Daten nicht angegeben" -#: templates/registration/logged_out.html:50 +#: templates/registration/logged_out.html:51 msgid "You have been logged out" msgstr "Sie wurden abgemeldet" -#: templates/registration/logged_out.html:51 -#: templates/registration/password_reset_complete.html:51 -#: templates/registration/password_reset_done.html:58 +#: templates/registration/logged_out.html:52 +#: templates/registration/password_reset_complete.html:52 +#: templates/registration/password_reset_done.html:59 msgid "Return to login screen" msgstr "Zurück auf die Anmelde-Seite" -#: templates/registration/login.html:64 +#: templates/registration/login.html:65 msgid "Enter username" msgstr "Benutzername eingeben" -#: templates/registration/login.html:70 +#: templates/registration/login.html:71 msgid "Password" msgstr "Passwort" -#: templates/registration/login.html:83 +#: templates/registration/login.html:84 msgid "Username / password combination is incorrect" msgstr "Benutzername / Passwort Kombination ist falsch" -#: templates/registration/login.html:95 -#: templates/registration/password_reset_form.html:51 +#: templates/registration/login.html:96 +#: templates/registration/password_reset_form.html:52 #, fuzzy #| msgid "Enter password" msgid "Forgotten your password?" msgstr "Passwort eingeben" -#: templates/registration/login.html:95 +#: templates/registration/login.html:96 msgid "Click here to reset" msgstr "" -#: templates/registration/password_reset_complete.html:50 +#: templates/registration/password_reset_complete.html:51 #, fuzzy #| msgid "Purchase order completed" msgid "Password reset complete" msgstr "Bestellung als vollständig markieren" -#: templates/registration/password_reset_confirm.html:52 -#: templates/registration/password_reset_confirm.html:56 +#: templates/registration/password_reset_confirm.html:53 +#: templates/registration/password_reset_confirm.html:57 #, fuzzy #| msgid "Change Password" msgid "Change password" msgstr "Passwort ändern" -#: templates/registration/password_reset_confirm.html:60 +#: templates/registration/password_reset_confirm.html:61 msgid "" "The password reset link was invalid, possibly because it has already been " "used. Please request a new password reset." msgstr "" -#: templates/registration/password_reset_done.html:51 +#: templates/registration/password_reset_done.html:52 msgid "" "We've emailed you instructions for setting your password, if an account " "exists with the email you entered. You should receive them shortly." msgstr "" -#: templates/registration/password_reset_done.html:54 +#: templates/registration/password_reset_done.html:55 msgid "" "If you don't receive an email, please make sure you've entered the address " "you registered with, and check your spam folder." msgstr "" -#: templates/registration/password_reset_form.html:52 +#: templates/registration/password_reset_form.html:53 #, fuzzy #| msgid "Contact email address" msgid "Enter your email address below." msgstr "Kontakt-Email" -#: templates/registration/password_reset_form.html:53 +#: templates/registration/password_reset_form.html:54 msgid "An email will be sent with password reset instructions." msgstr "" -#: templates/registration/password_reset_form.html:58 +#: templates/registration/password_reset_form.html:59 msgid "Send email" msgstr "" @@ -7207,55 +7227,47 @@ msgstr "Aktuellen Bestand exportieren" msgid "Barcode Actions" msgstr "Barcode Aktionen" -#: templates/stock_table.html:36 -msgid "Printing Actions" -msgstr "Druck Aktionen" - -#: templates/stock_table.html:40 -msgid "Print labels" -msgstr "Label drucken" - -#: templates/stock_table.html:42 +#: templates/stock_table.html:43 msgid "Print test reports" msgstr "Test-Berichte drucken" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Add to selected stock items" msgstr "Zu ausgewählten BestandsObjekten hinzufügen" -#: templates/stock_table.html:54 +#: templates/stock_table.html:55 msgid "Remove from selected stock items" msgstr "Von ausgewählten BestandsObjekten entfernen" -#: templates/stock_table.html:55 +#: templates/stock_table.html:56 msgid "Stocktake selected stock items" msgstr "Inventur für gewählte BestandsObjekte" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Move selected stock items" msgstr "Ausgewählte BestandsObjekte verschieben" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Move stock" msgstr "Bestand verschieben" -#: templates/stock_table.html:57 +#: templates/stock_table.html:58 msgid "Order selected items" msgstr "Ausgewählte Positionen bestellen" -#: templates/stock_table.html:58 +#: templates/stock_table.html:59 msgid "Change status" msgstr "Status ändern" -#: templates/stock_table.html:58 +#: templates/stock_table.html:59 msgid "Change stock status" msgstr "Bestandsstatus ändern" -#: templates/stock_table.html:61 +#: templates/stock_table.html:62 msgid "Delete selected items" msgstr "Ausgewählte Positionen löschen" -#: templates/stock_table.html:61 +#: templates/stock_table.html:62 msgid "Delete Stock" msgstr "Bestand löschen" @@ -7291,38 +7303,49 @@ msgstr "Berechtigungen" msgid "Important dates" msgstr "wichtige Daten" -#: users/models.py:166 +#: users/models.py:167 msgid "Permission set" msgstr "Berechtigung geändert" -#: users/models.py:174 +#: users/models.py:175 msgid "Group" msgstr "Gruppe" -#: users/models.py:177 +#: users/models.py:178 msgid "View" msgstr "Ansicht" -#: users/models.py:177 +#: users/models.py:178 msgid "Permission to view items" msgstr "Berechtigung Einträge anzuzeigen" -#: users/models.py:179 +#: users/models.py:180 msgid "Permission to add items" msgstr "Berechtigung Einträge zu erstellen" -#: users/models.py:181 +#: users/models.py:182 msgid "Change" msgstr "Ändern" -#: users/models.py:181 +#: users/models.py:182 msgid "Permissions to edit items" msgstr "Berechtigungen Einträge zu ändern" -#: users/models.py:183 +#: users/models.py:184 msgid "Permission to delete items" msgstr "Berechtigung Einträge zu löschen" +#~ msgid "Child Categories" +#~ msgstr "Unter-Kategorien" + +#~ msgid "Sub-Locations" +#~ msgstr "Sub-Lagerorte" + +#~ msgid "%(counter)s Item" +#~ msgid_plural "%(counter)s Items" +#~ msgstr[0] "%(counter)s Objekt" +#~ msgstr[1] "%(counter)s Objekte" + #~ msgid "Sales Order %(order.reference)s - %(order.customer.name)s" #~ msgstr "Auftrag %(order.reference)s - %(order.customer.name)s" @@ -7479,9 +7502,6 @@ msgstr "Berechtigung Einträge zu löschen" #~ msgid "Build parts" #~ msgstr "Bauteile" -#~ msgid "Allocate parts" -#~ msgstr "Teile zuordnen" - #, fuzzy #~| msgid "Part is not a virtual part" #~ msgid "This part is a virtual part" diff --git a/InvenTree/locale/en/LC_MESSAGES/django.po b/InvenTree/locale/en/LC_MESSAGES/django.po index 88164f6c11..9e300a0372 100644 --- a/InvenTree/locale/en/LC_MESSAGES/django.po +++ b/InvenTree/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-17 23:25+0000\n" +"POT-Creation-Date: 2021-04-21 12:28+1000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -49,7 +49,7 @@ msgstr "" msgid "Confirm item deletion" msgstr "" -#: InvenTree/forms.py:159 templates/registration/login.html:76 +#: InvenTree/forms.py:159 templates/registration/login.html:77 msgid "Enter password" msgstr "" @@ -106,7 +106,7 @@ msgstr "" msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/models.py:59 stock/models.py:1661 +#: InvenTree/models.py:59 stock/models.py:1662 msgid "Attachment" msgstr "" @@ -122,9 +122,9 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:68 InvenTree/models.py:69 part/models.py:1888 +#: InvenTree/models.py:68 InvenTree/models.py:69 part/models.py:1908 #: report/templates/report/inventree_test_report_base.html:91 -#: templates/js/stock.js:964 +#: templates/js/stock.js:1041 msgid "User" msgstr "" @@ -133,9 +133,10 @@ msgid "upload date" msgstr "" #: InvenTree/models.py:107 InvenTree/models.py:108 label/models.py:101 -#: part/models.py:686 part/models.py:2029 part/templates/part/params.html:27 +#: part/models.py:686 part/models.py:2049 part/templates/part/params.html:27 #: report/models.py:179 templates/InvenTree/search.html:137 -#: templates/InvenTree/search.html:289 templates/js/part.js:109 +#: templates/InvenTree/search.html:289 templates/js/part.js:110 +#: templates/js/part.js:553 templates/js/stock.js:944 msgid "Name" msgstr "" @@ -143,7 +144,7 @@ msgstr "" #: build/templates/build/detail.html:21 company/models.py:342 #: company/models.py:494 company/templates/company/detail.html:27 #: company/templates/company/manufacturer_part_base.html:72 -#: company/templates/company/supplier_part_base.html:70 +#: company/templates/company/supplier_part_base.html:71 #: company/templates/company/supplier_part_detail.html:31 label/models.py:108 #: order/models.py:101 order/templates/order/purchase_order_detail.html:168 #: part/models.py:710 part/templates/part/detail.html:54 @@ -155,9 +156,10 @@ msgstr "" #: templates/InvenTree/settings/header.html:9 templates/js/bom.js:190 #: templates/js/build.js:677 templates/js/build.js:944 #: templates/js/company.js:56 templates/js/order.js:183 -#: templates/js/order.js:280 templates/js/part.js:168 templates/js/part.js:251 -#: templates/js/part.js:370 templates/js/part.js:566 templates/js/stock.js:554 -#: templates/js/stock.js:938 +#: templates/js/order.js:280 templates/js/part.js:169 templates/js/part.js:252 +#: templates/js/part.js:371 templates/js/part.js:565 templates/js/part.js:643 +#: templates/js/stock.js:554 templates/js/stock.js:956 +#: templates/js/stock.js:1015 msgid "Description" msgstr "" @@ -169,35 +171,35 @@ msgstr "" msgid "parent" msgstr "" -#: InvenTree/settings.py:480 +#: InvenTree/settings.py:493 msgid "English" msgstr "" -#: InvenTree/settings.py:481 +#: InvenTree/settings.py:494 msgid "French" msgstr "" -#: InvenTree/settings.py:482 +#: InvenTree/settings.py:495 msgid "German" msgstr "" -#: InvenTree/settings.py:483 +#: InvenTree/settings.py:496 msgid "Polish" msgstr "" -#: InvenTree/settings.py:484 +#: InvenTree/settings.py:497 msgid "Turkish" msgstr "" -#: InvenTree/status.py:84 +#: InvenTree/status.py:93 msgid "Background worker check failed" msgstr "" -#: InvenTree/status.py:88 +#: InvenTree/status.py:97 msgid "Email backend not configured" msgstr "" -#: InvenTree/status.py:91 +#: InvenTree/status.py:100 msgid "InvenTree system health checks failed" msgstr "" @@ -380,10 +382,10 @@ msgid "" "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/forms.py:45 build/forms.py:87 build/forms.py:257 build/models.py:1103 +#: build/forms.py:45 build/forms.py:87 build/forms.py:257 build/models.py:1109 #: build/templates/build/auto_allocate.html:17 #: build/templates/build/build_base.html:94 -#: build/templates/build/detail.html:31 common/models.py:696 +#: build/templates/build/detail.html:31 common/models.py:703 #: company/forms.py:176 company/templates/company/supplier_part_pricing.html:77 #: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261 #: order/forms.py:278 order/models.py:593 order/models.py:784 @@ -393,7 +395,7 @@ msgstr "" #: order/templates/order/sales_order_detail.html:77 #: order/templates/order/sales_order_detail.html:159 #: order/templates/order/sales_order_detail.html:224 part/forms.py:342 -#: part/forms.py:371 part/forms.py:387 part/models.py:2158 +#: part/forms.py:371 part/forms.py:387 part/models.py:2178 #: part/templates/part/allocation.html:19 #: part/templates/part/allocation.html:53 #: part/templates/part/part_pricing.html:11 @@ -403,11 +405,11 @@ msgstr "" #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:77 -#: stock/forms.py:175 stock/forms.py:308 stock/models.py:1565 +#: stock/forms.py:175 stock/forms.py:308 stock/models.py:1566 #: stock/templates/stock/item_base.html:244 #: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364 #: templates/js/bom.js:205 templates/js/build.js:420 templates/js/build.js:954 -#: templates/js/stock.js:956 templates/js/stock.js:1194 +#: templates/js/stock.js:1033 templates/js/stock.js:1271 msgid "Quantity" msgstr "" @@ -496,7 +498,7 @@ msgstr "" #: build/templates/build/index.html:15 order/templates/order/so_builds.html:12 #: order/templates/order/so_navbar.html:19 #: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55 -#: part/templates/part/navbar.html:58 templates/InvenTree/index.html:182 +#: part/templates/part/navbar.html:58 templates/InvenTree/index.html:183 #: templates/InvenTree/search.html:185 #: templates/InvenTree/settings/tabs.html:31 users/models.py:41 msgid "Build Orders" @@ -508,7 +510,7 @@ msgstr "" #: build/models.py:127 order/models.py:99 order/models.py:595 #: order/templates/order/purchase_order_detail.html:195 -#: order/templates/order/sales_order_detail.html:219 part/models.py:2167 +#: order/templates/order/sales_order_detail.html:219 part/models.py:2187 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197 #: templates/js/build.js:509 templates/js/build.js:948 @@ -536,12 +538,11 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:156 #: order/templates/order/receive_parts.html:19 #: order/templates/order/sales_order_detail.html:207 part/models.py:321 -#: part/models.py:1856 part/models.py:1868 part/models.py:1886 -#: part/models.py:1961 part/models.py:2057 part/models.py:2142 -#: part/templates/part/part_app_base.html:7 +#: part/models.py:1876 part/models.py:1888 part/models.py:1906 +#: part/models.py:1981 part/models.py:2077 part/models.py:2162 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:14 part/templates/part/related.html:29 #: part/templates/part/set_category.html:13 -#: part/templates/part/subcategories.html:17 #: report/templates/report/inventree_build_order_base.html:110 #: report/templates/report/inventree_po_report.html:90 #: report/templates/report/inventree_so_report.html:90 @@ -549,8 +550,8 @@ msgstr "" #: templates/js/barcode.js:362 templates/js/bom.js:163 #: templates/js/build.js:681 templates/js/build.js:921 #: templates/js/company.js:140 templates/js/company.js:238 -#: templates/js/part.js:232 templates/js/part.js:337 templates/js/stock.js:523 -#: templates/js/stock.js:1266 +#: templates/js/part.js:233 templates/js/part.js:338 templates/js/stock.js:523 +#: templates/js/stock.js:1343 msgid "Part" msgstr "" @@ -656,7 +657,7 @@ msgstr "" #: build/models.py:256 build/templates/build/detail.html:91 #: company/templates/company/manufacturer_part_base.html:79 #: company/templates/company/manufacturer_part_detail.html:28 -#: company/templates/company/supplier_part_base.html:77 +#: company/templates/company/supplier_part_base.html:78 #: company/templates/company/supplier_part_detail.html:28 #: part/templates/part/detail.html:83 part/templates/part/part_base.html:101 #: stock/models.py:426 stock/templates/stock/item_base.html:334 @@ -680,7 +681,7 @@ msgstr "" #: part/templates/part/navbar.html:128 #: report/templates/report/inventree_build_order_base.html:173 #: stock/forms.py:173 stock/forms.py:317 stock/forms.py:349 stock/forms.py:377 -#: stock/models.py:498 stock/models.py:1557 stock/models.py:1667 +#: stock/models.py:498 stock/models.py:1558 stock/models.py:1668 #: stock/templates/stock/navbar.html:57 templates/js/barcode.js:37 #: templates/js/bom.js:333 templates/js/stock.js:128 templates/js/stock.js:671 msgid "Notes" @@ -706,47 +707,47 @@ msgstr "" msgid "Completed build output" msgstr "" -#: build/models.py:996 +#: build/models.py:1002 msgid "BuildItem must be unique for build, stock_item and install_into" msgstr "" -#: build/models.py:1018 +#: build/models.py:1024 msgid "Build item must specify a build output" msgstr "" -#: build/models.py:1023 +#: build/models.py:1029 #, python-brace-format msgid "Selected stock item not found in BOM for part '{p}'" msgstr "" -#: build/models.py:1027 +#: build/models.py:1033 #, python-brace-format msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" msgstr "" -#: build/models.py:1034 order/models.py:758 +#: build/models.py:1040 order/models.py:758 msgid "StockItem is over-allocated" msgstr "" -#: build/models.py:1038 order/models.py:761 +#: build/models.py:1044 order/models.py:761 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1042 +#: build/models.py:1048 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1082 stock/templates/stock/item_base.html:306 +#: build/models.py:1088 stock/templates/stock/item_base.html:306 #: templates/InvenTree/search.html:183 templates/js/build.js:655 #: templates/navbar.html:29 msgid "Build" msgstr "" -#: build/models.py:1083 +#: build/models.py:1089 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1090 part/templates/part/allocation.html:18 +#: build/models.py:1096 part/templates/part/allocation.html:18 #: part/templates/part/allocation.html:24 #: part/templates/part/allocation.html:31 #: part/templates/part/allocation.html:49 @@ -754,26 +755,30 @@ msgstr "" #: stock/templates/stock/item_base.html:93 #: stock/templates/stock/item_base.html:328 #: stock/templates/stock/stock_adjust.html:16 templates/js/build.js:771 -#: templates/js/stock.js:927 templates/js/stock.js:1185 +#: templates/js/stock.js:1004 templates/js/stock.js:1262 msgid "Stock Item" msgstr "" -#: build/models.py:1091 +#: build/models.py:1097 msgid "Source stock item" msgstr "" -#: build/models.py:1104 +#: build/models.py:1110 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1112 +#: build/models.py:1118 msgid "Install into" msgstr "" -#: build/models.py:1113 +#: build/models.py:1119 msgid "Destination stock item" msgstr "" +#: build/templates/build/allocate.html:7 +msgid "Allocate Parts" +msgstr "" + #: build/templates/build/allocate.html:15 msgid "Incomplete Build Ouputs" msgstr "" @@ -860,12 +865,12 @@ msgstr "" #: build/templates/build/build_base.html:40 #: company/templates/company/company_base.html:40 #: company/templates/company/manufacturer_part_base.html:25 -#: company/templates/company/supplier_part_base.html:25 +#: company/templates/company/supplier_part_base.html:26 #: order/templates/order/order_base.html:26 #: order/templates/order/sales_order_base.html:35 -#: part/templates/part/category.html:14 part/templates/part/part_base.html:29 +#: part/templates/part/category.html:18 part/templates/part/part_base.html:29 #: stock/templates/stock/item_base.html:118 -#: stock/templates/stock/location.html:24 +#: stock/templates/stock/location.html:31 msgid "Admin view" msgstr "" @@ -875,8 +880,8 @@ msgstr "" #: order/templates/order/order_base.html:86 #: order/templates/order/sales_order_base.html:41 #: order/templates/order/sales_order_base.html:86 -#: templates/js/table_filters.js:218 templates/js/table_filters.js:237 -#: templates/js/table_filters.js:254 +#: templates/js/table_filters.js:240 templates/js/table_filters.js:259 +#: templates/js/table_filters.js:276 msgid "Overdue" msgstr "" @@ -917,7 +922,7 @@ msgstr "" #: stock/templates/stock/item_base.html:392 templates/InvenTree/search.html:252 #: templates/js/barcode.js:119 templates/js/build.js:710 #: templates/js/order.js:187 templates/js/order.js:285 -#: templates/js/stock.js:628 templates/js/stock.js:1202 +#: templates/js/stock.js:628 templates/js/stock.js:1279 msgid "Status" msgstr "" @@ -1057,8 +1062,8 @@ msgstr "" #: build/templates/build/detail.html:70 #: stock/templates/stock/item_base.html:292 templates/js/stock.js:636 -#: templates/js/stock.js:1209 templates/js/table_filters.js:85 -#: templates/js/table_filters.js:179 +#: templates/js/stock.js:1286 templates/js/table_filters.js:107 +#: templates/js/table_filters.js:201 msgid "Batch" msgstr "" @@ -1180,7 +1185,7 @@ msgstr "" msgid "Create Build Output" msgstr "" -#: build/views.py:203 stock/models.py:968 stock/views.py:1789 +#: build/views.py:203 stock/models.py:969 stock/views.py:1789 msgid "Serial numbers already exist" msgstr "" @@ -1318,335 +1323,343 @@ msgstr "" msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:62 company/models.py:97 company/models.py:98 -msgid "Company name" +#: common/models.py:62 +msgid "Use instance name" msgstr "" #: common/models.py:63 +msgid "Use the instance name in the title-bar" +msgstr "" + +#: common/models.py:69 company/models.py:97 company/models.py:98 +msgid "Company name" +msgstr "" + +#: common/models.py:70 msgid "Internal company name" msgstr "" -#: common/models.py:68 +#: common/models.py:75 msgid "Base URL" msgstr "" -#: common/models.py:69 +#: common/models.py:76 msgid "Base URL for server instance" msgstr "" -#: common/models.py:75 +#: common/models.py:82 msgid "Default Currency" msgstr "" -#: common/models.py:76 +#: common/models.py:83 msgid "Default currency" msgstr "" -#: common/models.py:82 +#: common/models.py:89 msgid "Download from URL" msgstr "" -#: common/models.py:83 +#: common/models.py:90 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:89 +#: common/models.py:96 msgid "Barcode Support" msgstr "" -#: common/models.py:90 +#: common/models.py:97 msgid "Enable barcode scanner support" msgstr "" -#: common/models.py:96 +#: common/models.py:103 msgid "IPN Regex" msgstr "" -#: common/models.py:97 +#: common/models.py:104 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:101 +#: common/models.py:108 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:102 +#: common/models.py:109 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:108 +#: common/models.py:115 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:109 +#: common/models.py:116 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:115 +#: common/models.py:122 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:116 +#: common/models.py:123 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:122 +#: common/models.py:129 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:123 +#: common/models.py:130 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:129 +#: common/models.py:136 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:130 +#: common/models.py:137 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:136 +#: common/models.py:143 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:137 +#: common/models.py:144 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:143 +#: common/models.py:150 msgid "Recent Part Count" msgstr "" -#: common/models.py:144 +#: common/models.py:151 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:150 part/models.py:2059 part/templates/part/detail.html:160 +#: common/models.py:157 part/models.py:2079 part/templates/part/detail.html:160 #: report/models.py:185 stock/forms.py:259 templates/js/table_filters.js:24 -#: templates/js/table_filters.js:288 +#: templates/js/table_filters.js:310 msgid "Template" msgstr "" -#: common/models.py:151 +#: common/models.py:158 msgid "Parts are templates by default" msgstr "" -#: common/models.py:157 part/models.py:834 part/templates/part/detail.html:170 -#: templates/js/table_filters.js:101 templates/js/table_filters.js:300 +#: common/models.py:164 part/models.py:834 part/templates/part/detail.html:170 +#: templates/js/table_filters.js:123 templates/js/table_filters.js:322 msgid "Assembly" msgstr "" -#: common/models.py:158 +#: common/models.py:165 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:164 part/models.py:840 part/templates/part/detail.html:180 -#: templates/js/table_filters.js:304 +#: common/models.py:171 part/models.py:840 part/templates/part/detail.html:180 +#: templates/js/table_filters.js:326 msgid "Component" msgstr "" -#: common/models.py:165 +#: common/models.py:172 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:171 part/models.py:851 part/templates/part/detail.html:200 +#: common/models.py:178 part/models.py:851 part/templates/part/detail.html:200 msgid "Purchaseable" msgstr "" -#: common/models.py:172 +#: common/models.py:179 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:178 part/models.py:856 part/templates/part/detail.html:210 -#: templates/js/table_filters.js:312 +#: common/models.py:185 part/models.py:856 part/templates/part/detail.html:210 +#: templates/js/table_filters.js:334 msgid "Salable" msgstr "" -#: common/models.py:179 +#: common/models.py:186 msgid "Parts are salable by default" msgstr "" -#: common/models.py:185 part/models.py:846 part/templates/part/detail.html:190 -#: templates/js/table_filters.js:32 templates/js/table_filters.js:316 +#: common/models.py:192 part/models.py:846 part/templates/part/detail.html:190 +#: templates/js/table_filters.js:32 templates/js/table_filters.js:338 msgid "Trackable" msgstr "" -#: common/models.py:186 +#: common/models.py:193 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:192 part/models.py:866 part/templates/part/detail.html:150 +#: common/models.py:199 part/models.py:866 part/templates/part/detail.html:150 #: templates/js/table_filters.js:28 msgid "Virtual" msgstr "" -#: common/models.py:193 +#: common/models.py:200 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:199 +#: common/models.py:206 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:200 +#: common/models.py:207 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:206 +#: common/models.py:213 msgid "Debug Mode" msgstr "" -#: common/models.py:207 +#: common/models.py:214 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:213 +#: common/models.py:220 msgid "Page Size" msgstr "" -#: common/models.py:214 +#: common/models.py:221 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:224 +#: common/models.py:231 msgid "Test Reports" msgstr "" -#: common/models.py:225 +#: common/models.py:232 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:231 +#: common/models.py:238 msgid "Stock Expiry" msgstr "" -#: common/models.py:232 +#: common/models.py:239 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:238 +#: common/models.py:245 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:239 +#: common/models.py:246 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:245 +#: common/models.py:252 msgid "Stock Stale Time" msgstr "" -#: common/models.py:246 +#: common/models.py:253 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:248 part/templates/part/detail.html:121 +#: common/models.py:255 part/templates/part/detail.html:121 msgid "days" msgstr "" -#: common/models.py:253 +#: common/models.py:260 msgid "Build Expired Stock" msgstr "" -#: common/models.py:254 +#: common/models.py:261 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:260 +#: common/models.py:267 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:261 +#: common/models.py:268 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:267 +#: common/models.py:274 msgid "Group by Part" msgstr "" -#: common/models.py:268 +#: common/models.py:275 msgid "Group stock items by part reference in table views" msgstr "" -#: common/models.py:274 +#: common/models.py:281 msgid "Recent Stock Count" msgstr "" -#: common/models.py:275 +#: common/models.py:282 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:281 +#: common/models.py:288 msgid "Build Order Reference Prefix" msgstr "" -#: common/models.py:282 +#: common/models.py:289 msgid "Prefix value for build order reference" msgstr "" -#: common/models.py:287 +#: common/models.py:294 msgid "Build Order Reference Regex" msgstr "" -#: common/models.py:288 +#: common/models.py:295 msgid "Regular expression pattern for matching build order reference" msgstr "" -#: common/models.py:292 +#: common/models.py:299 msgid "Sales Order Reference Prefix" msgstr "" -#: common/models.py:293 +#: common/models.py:300 msgid "Prefix value for sales order reference" msgstr "" -#: common/models.py:298 +#: common/models.py:305 msgid "Purchase Order Reference Prefix" msgstr "" -#: common/models.py:299 +#: common/models.py:306 msgid "Prefix value for purchase order reference" msgstr "" -#: common/models.py:522 +#: common/models.py:529 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:524 +#: common/models.py:531 msgid "Settings value" msgstr "" -#: common/models.py:559 +#: common/models.py:566 msgid "Must be an integer value" msgstr "" -#: common/models.py:582 +#: common/models.py:589 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:593 +#: common/models.py:600 msgid "Value must be an integer value" msgstr "" -#: common/models.py:616 +#: common/models.py:623 msgid "Key string must be unique" msgstr "" -#: common/models.py:697 company/forms.py:177 +#: common/models.py:704 company/forms.py:177 msgid "Price break quantity" msgstr "" -#: common/models.py:705 company/templates/company/supplier_part_pricing.html:82 +#: common/models.py:712 company/templates/company/supplier_part_pricing.html:82 #: part/templates/part/sale_prices.html:90 templates/js/bom.js:255 msgid "Price" msgstr "" -#: common/models.py:706 +#: common/models.py:713 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:729 +#: common/models.py:736 msgid "Default" msgstr "" @@ -1702,7 +1715,7 @@ msgstr "" #: company/forms.py:136 company/models.py:330 #: company/templates/company/manufacturer_part_base.html:89 #: company/templates/company/manufacturer_part_detail.html:26 -#: company/templates/company/supplier_part_base.html:100 +#: company/templates/company/supplier_part_base.html:101 #: company/templates/company/supplier_part_detail.html:35 #: order/templates/order/purchase_order_detail.html:183 part/bom.py:171 #: part/bom.py:242 templates/js/company.js:181 templates/js/company.js:307 @@ -1761,8 +1774,8 @@ msgstr "" #: company/models.py:124 company/models.py:336 company/models.py:488 #: order/models.py:103 part/models.py:743 #: report/templates/report/inventree_build_order_base.html:165 -#: stock/models.py:1559 templates/js/company.js:188 templates/js/company.js:318 -#: templates/js/part.js:430 +#: stock/models.py:1560 templates/js/company.js:188 templates/js/company.js:318 +#: templates/js/part.js:431 msgid "Link" msgstr "" @@ -1810,7 +1823,7 @@ msgstr "" #: company/models.py:323 company/templates/company/detail.html:57 #: company/templates/company/manufacturer_part_base.html:85 #: company/templates/company/manufacturer_part_detail.html:25 -#: company/templates/company/supplier_part_base.html:93 +#: company/templates/company/supplier_part_base.html:94 #: company/templates/company/supplier_part_detail.html:34 part/bom.py:170 #: part/bom.py:241 stock/templates/stock/item_base.html:341 #: templates/js/company.js:44 templates/js/company.js:165 @@ -1827,7 +1840,7 @@ msgid "Manufacturer part description" msgstr "" #: company/models.py:469 company/templates/company/detail.html:62 -#: company/templates/company/supplier_part_base.html:83 +#: company/templates/company/supplier_part_base.html:84 #: company/templates/company/supplier_part_detail.html:25 order/models.py:190 #: order/templates/order/order_base.html:92 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:175 @@ -1841,7 +1854,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:475 company/templates/company/supplier_part_base.html:87 +#: company/models.py:475 company/templates/company/supplier_part_base.html:88 #: company/templates/company/supplier_part_detail.html:26 #: order/templates/order/purchase_order_detail.html:174 part/bom.py:176 #: part/bom.py:287 @@ -1871,8 +1884,8 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:500 company/templates/company/supplier_part_base.html:114 -#: company/templates/company/supplier_part_detail.html:38 part/models.py:2170 +#: company/models.py:500 company/templates/company/supplier_part_base.html:115 +#: company/templates/company/supplier_part_detail.html:38 part/models.py:2190 #: report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" @@ -1886,7 +1899,7 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:506 company/templates/company/supplier_part_base.html:107 +#: company/models.py:506 company/templates/company/supplier_part_base.html:108 #: stock/models.py:397 stock/templates/stock/item_base.html:299 #: templates/js/stock.js:667 msgid "Packaging" @@ -2022,7 +2035,7 @@ msgstr "" #: company/templates/company/detail_manufacturer_part.html:66 #: company/templates/company/detail_supplier_part.html:66 #: part/templates/part/bom.html:159 part/templates/part/category.html:118 -#: templates/js/stock.js:1080 +#: templates/js/stock.js:1157 msgid "New Part" msgstr "" @@ -2069,7 +2082,7 @@ msgstr "" #: company/templates/company/detail_supplier_part.html:22 #: company/templates/company/manufacturer_part_suppliers.html:17 #: order/templates/order/purchase_order_detail.html:74 -#: part/templates/part/supplier.html:17 templates/js/stock.js:1086 +#: part/templates/part/supplier.html:17 templates/js/stock.js:1163 msgid "New Supplier Part" msgstr "" @@ -2085,12 +2098,12 @@ msgstr "" msgid "Create new Supplier" msgstr "" -#: company/templates/company/index.html:7 +#: company/templates/company/index.html:8 msgid "Supplier List" msgstr "" #: company/templates/company/manufacturer_part_base.html:36 -#: company/templates/company/supplier_part_base.html:35 +#: company/templates/company/supplier_part_base.html:36 #: company/templates/company/supplier_part_orders.html:17 #: part/templates/part/orders.html:17 part/templates/part/part_base.html:65 msgid "Order part" @@ -2111,7 +2124,7 @@ msgstr "" #: company/templates/company/manufacturer_part_base.html:62 #: company/templates/company/manufacturer_part_detail.html:18 -#: company/templates/company/supplier_part_base.html:60 +#: company/templates/company/supplier_part_base.html:61 #: company/templates/company/supplier_part_detail.html:18 msgid "Internal Part" msgstr "" @@ -2142,12 +2155,12 @@ msgstr "" #: company/templates/company/navbar.html:41 #: company/templates/company/supplier_part_navbar.html:15 #: part/templates/part/navbar.html:36 stock/api.py:51 -#: stock/templates/stock/loc_link.html:7 stock/templates/stock/location.html:29 -#: stock/templates/stock/stock_app_base.html:9 -#: templates/InvenTree/index.html:127 templates/InvenTree/search.html:196 +#: stock/templates/stock/loc_link.html:7 stock/templates/stock/location.html:36 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/index.html:128 templates/InvenTree/search.html:196 #: templates/InvenTree/search.html:232 -#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:172 -#: templates/js/part.js:397 templates/js/stock.js:563 templates/navbar.html:26 +#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:173 +#: templates/js/part.js:398 templates/js/stock.js:563 templates/navbar.html:26 msgid "Stock" msgstr "" @@ -2168,7 +2181,7 @@ msgstr "" #: company/templates/company/manufacturer_part_suppliers.html:22 #: part/templates/part/manufacturer.html:24 part/templates/part/params.html:44 #: part/templates/part/related.html:44 part/templates/part/supplier.html:22 -#: stock/views.py:1002 users/models.py:183 +#: stock/views.py:1002 users/models.py:184 msgid "Delete" msgstr "" @@ -2188,8 +2201,12 @@ msgid "Supplied Parts" msgstr "" #: company/templates/company/navbar.html:38 part/templates/part/navbar.html:33 -#: stock/templates/stock/location.html:100 -#: stock/templates/stock/location.html:115 templates/InvenTree/search.html:198 +#: stock/templates/stock/location.html:107 +#: stock/templates/stock/location.html:122 +#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location_navbar.html:22 +#: stock/templates/stock/location_navbar.html:29 +#: templates/InvenTree/search.html:198 templates/js/stock.js:968 #: templates/stats.html:72 templates/stats.html:81 users/models.py:40 msgid "Stock Items" msgstr "" @@ -2201,7 +2218,7 @@ msgstr "" #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:13 #: part/templates/part/navbar.html:98 part/templates/part/navbar.html:101 -#: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:227 +#: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:228 #: templates/InvenTree/search.html:345 #: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46 #: users/models.py:43 @@ -2213,7 +2230,7 @@ msgstr "" #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:13 #: part/templates/part/navbar.html:84 part/templates/part/navbar.html:87 -#: part/templates/part/orders.html:10 templates/InvenTree/index.html:204 +#: part/templates/part/orders.html:10 templates/InvenTree/index.html:205 #: templates/InvenTree/search.html:325 #: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37 #: users/models.py:42 @@ -2244,21 +2261,21 @@ msgstr "" msgid "New Sales Order" msgstr "" -#: company/templates/company/supplier_part_base.html:6 -#: company/templates/company/supplier_part_base.html:19 stock/models.py:382 +#: company/templates/company/supplier_part_base.html:7 +#: company/templates/company/supplier_part_base.html:20 stock/models.py:382 #: stock/templates/stock/item_base.html:358 templates/js/company.js:279 msgid "Supplier Part" msgstr "" -#: company/templates/company/supplier_part_base.html:39 +#: company/templates/company/supplier_part_base.html:40 msgid "Edit supplier part" msgstr "" -#: company/templates/company/supplier_part_base.html:43 +#: company/templates/company/supplier_part_base.html:44 msgid "Delete supplier part" msgstr "" -#: company/templates/company/supplier_part_base.html:55 +#: company/templates/company/supplier_part_base.html:56 #: company/templates/company/supplier_part_detail.html:10 msgid "Supplier Part Details" msgstr "" @@ -2397,7 +2414,7 @@ msgstr "" msgid "Edit Supplier Part" msgstr "" -#: company/views.py:578 templates/js/stock.js:1087 +#: company/views.py:578 templates/js/stock.js:1164 msgid "Create new Supplier Part" msgstr "" @@ -2583,7 +2600,7 @@ msgid "Date order was completed" msgstr "" #: order/models.py:243 order/models.py:342 part/views.py:1586 -#: stock/models.py:270 stock/models.py:952 +#: stock/models.py:270 stock/models.py:953 msgid "Quantity must be greater than zero" msgstr "" @@ -2857,15 +2874,15 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:45 #: order/templates/order/purchase_order_detail.html:125 -#: part/templates/part/category.html:197 part/templates/part/category.html:239 +#: part/templates/part/category.html:185 part/templates/part/category.html:227 #: stock/templates/stock/location.html:191 templates/js/stock.js:708 -#: templates/js/stock.js:1092 +#: templates/js/stock.js:1169 msgid "New Location" msgstr "" #: order/templates/order/purchase_order_detail.html:46 #: order/templates/order/purchase_order_detail.html:126 -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:42 msgid "Create new stock location" msgstr "" @@ -2902,13 +2919,14 @@ msgstr "" #: order/templates/order/receive_parts.html:14 part/api.py:40 #: part/models.py:322 part/templates/part/cat_link.html:7 -#: part/templates/part/category.html:95 -#: part/templates/part/category_navbar.html:11 -#: part/templates/part/category_navbar.html:14 +#: part/templates/part/category.html:99 +#: part/templates/part/category_navbar.html:22 +#: part/templates/part/category_navbar.html:29 #: part/templates/part/category_partlist.html:10 -#: templates/InvenTree/index.html:96 templates/InvenTree/search.html:114 -#: templates/InvenTree/settings/tabs.html:25 templates/navbar.html:23 -#: templates/stats.html:59 templates/stats.html:68 users/models.py:38 +#: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114 +#: templates/InvenTree/settings/tabs.html:25 templates/js/part.js:577 +#: templates/navbar.html:23 templates/stats.html:59 templates/stats.html:68 +#: users/models.py:38 msgid "Parts" msgstr "" @@ -2921,7 +2939,7 @@ msgid "Order Code" msgstr "" #: order/templates/order/receive_parts.html:21 -#: part/templates/part/part_base.html:129 templates/js/part.js:413 +#: part/templates/part/part_base.html:129 templates/js/part.js:414 msgid "On Order" msgstr "" @@ -3228,7 +3246,7 @@ msgid "Remove allocation" msgstr "" #: part/bom.py:138 part/models.py:72 part/models.py:762 -#: part/templates/part/category.html:62 part/templates/part/detail.html:90 +#: part/templates/part/category.html:66 part/templates/part/detail.html:90 msgid "Default Location" msgstr "" @@ -3305,7 +3323,7 @@ msgstr "" msgid "Include part supplier data in exported BOM" msgstr "" -#: part/forms.py:122 part/models.py:2057 +#: part/forms.py:122 part/models.py:2077 msgid "Parent Part" msgstr "" @@ -3381,7 +3399,7 @@ msgstr "" msgid "Add parameter template to all categories" msgstr "" -#: part/forms.py:344 part/models.py:2151 +#: part/forms.py:344 part/models.py:2171 msgid "Sub part" msgstr "" @@ -3401,13 +3419,13 @@ msgstr "" msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:82 part/models.py:2103 -#: part/templates/part/part_app_base.html:9 +#: part/models.py:82 part/models.py:2123 +#: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:83 part/templates/part/category.html:19 -#: part/templates/part/category.html:90 part/templates/part/category.html:141 +#: part/models.py:83 part/templates/part/category.html:23 +#: part/templates/part/category.html:94 part/templates/part/category.html:141 #: templates/InvenTree/search.html:127 templates/stats.html:63 #: users/models.py:37 msgid "Part Categories" @@ -3462,7 +3480,7 @@ msgstr "" msgid "Part description" msgstr "" -#: part/models.py:716 part/templates/part/category.html:69 +#: part/models.py:716 part/templates/part/category.html:73 #: part/templates/part/detail.html:67 msgid "Keywords" msgstr "" @@ -3471,8 +3489,8 @@ msgstr "" msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:724 part/models.py:2102 part/templates/part/detail.html:73 -#: part/templates/part/set_category.html:15 templates/js/part.js:384 +#: part/models.py:724 part/models.py:2122 part/templates/part/detail.html:73 +#: part/templates/part/set_category.html:15 templates/js/part.js:385 msgid "Category" msgstr "" @@ -3481,7 +3499,7 @@ msgid "Part category" msgstr "" #: part/models.py:730 part/templates/part/detail.html:28 -#: part/templates/part/part_base.html:94 templates/js/part.js:160 +#: part/templates/part/part_base.html:94 templates/js/part.js:161 msgid "IPN" msgstr "" @@ -3494,7 +3512,7 @@ msgid "Part revision or version number" msgstr "" #: part/models.py:738 part/templates/part/detail.html:35 report/models.py:198 -#: templates/js/part.js:164 +#: templates/js/part.js:165 msgid "Revision" msgstr "" @@ -3526,7 +3544,7 @@ msgstr "" msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:828 part/models.py:2031 part/templates/part/detail.html:106 +#: part/models.py:828 part/models.py:2051 part/templates/part/detail.html:106 #: part/templates/part/params.html:29 msgid "Units" msgstr "" @@ -3557,7 +3575,7 @@ msgstr "" #: part/models.py:861 part/templates/part/detail.html:227 #: templates/js/table_filters.js:20 templates/js/table_filters.js:60 -#: templates/js/table_filters.js:214 templates/js/table_filters.js:283 +#: templates/js/table_filters.js:236 templates/js/table_filters.js:305 msgid "Active" msgstr "" @@ -3593,167 +3611,167 @@ msgstr "" msgid "Creation User" msgstr "" -#: part/models.py:1929 +#: part/models.py:1949 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:1946 +#: part/models.py:1966 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:1966 templates/js/part.js:561 templates/js/stock.js:104 +#: part/models.py:1986 templates/js/part.js:638 templates/js/stock.js:104 msgid "Test Name" msgstr "" -#: part/models.py:1967 +#: part/models.py:1987 msgid "Enter a name for the test" msgstr "" -#: part/models.py:1972 +#: part/models.py:1992 msgid "Test Description" msgstr "" -#: part/models.py:1973 +#: part/models.py:1993 msgid "Enter description for this test" msgstr "" -#: part/models.py:1978 templates/js/part.js:570 -#: templates/js/table_filters.js:200 +#: part/models.py:1998 templates/js/part.js:647 +#: templates/js/table_filters.js:222 msgid "Required" msgstr "" -#: part/models.py:1979 +#: part/models.py:1999 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:1984 templates/js/part.js:578 +#: part/models.py:2004 templates/js/part.js:655 msgid "Requires Value" msgstr "" -#: part/models.py:1985 +#: part/models.py:2005 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:1990 templates/js/part.js:585 +#: part/models.py:2010 templates/js/part.js:662 msgid "Requires Attachment" msgstr "" -#: part/models.py:1991 +#: part/models.py:2011 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2024 +#: part/models.py:2044 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2029 +#: part/models.py:2049 msgid "Parameter Name" msgstr "" -#: part/models.py:2031 +#: part/models.py:2051 msgid "Parameter Units" msgstr "" -#: part/models.py:2059 part/models.py:2108 part/models.py:2109 +#: part/models.py:2079 part/models.py:2128 part/models.py:2129 #: templates/InvenTree/settings/category.html:62 msgid "Parameter Template" msgstr "" -#: part/models.py:2061 +#: part/models.py:2081 msgid "Data" msgstr "" -#: part/models.py:2061 +#: part/models.py:2081 msgid "Parameter Value" msgstr "" -#: part/models.py:2113 templates/InvenTree/settings/category.html:67 +#: part/models.py:2133 templates/InvenTree/settings/category.html:67 msgid "Default Value" msgstr "" -#: part/models.py:2114 +#: part/models.py:2134 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2143 +#: part/models.py:2163 msgid "Select parent part" msgstr "" -#: part/models.py:2152 +#: part/models.py:2172 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2158 +#: part/models.py:2178 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2160 templates/js/bom.js:216 templates/js/bom.js:269 +#: part/models.py:2180 templates/js/bom.js:216 templates/js/bom.js:269 msgid "Optional" msgstr "" -#: part/models.py:2160 +#: part/models.py:2180 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2163 +#: part/models.py:2183 msgid "Overage" msgstr "" -#: part/models.py:2164 +#: part/models.py:2184 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2167 +#: part/models.py:2187 msgid "BOM item reference" msgstr "" -#: part/models.py:2170 +#: part/models.py:2190 msgid "BOM item notes" msgstr "" -#: part/models.py:2172 +#: part/models.py:2192 msgid "Checksum" msgstr "" -#: part/models.py:2172 +#: part/models.py:2192 msgid "BOM line checksum" msgstr "" -#: part/models.py:2176 templates/js/bom.js:279 templates/js/bom.js:286 +#: part/models.py:2196 templates/js/bom.js:279 templates/js/bom.js:286 #: templates/js/table_filters.js:50 msgid "Inherited" msgstr "" -#: part/models.py:2177 +#: part/models.py:2197 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2253 part/views.py:1592 part/views.py:1644 +#: part/models.py:2273 part/views.py:1592 part/views.py:1644 #: stock/models.py:260 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2262 part/models.py:2264 +#: part/models.py:2282 part/models.py:2284 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2267 +#: part/models.py:2287 msgid "BOM Item" msgstr "" -#: part/models.py:2384 +#: part/models.py:2404 msgid "Part 1" msgstr "" -#: part/models.py:2388 +#: part/models.py:2408 msgid "Part 2" msgstr "" -#: part/models.py:2388 +#: part/models.py:2408 msgid "Select Related Part" msgstr "" -#: part/models.py:2420 +#: part/models.py:2440 msgid "" "Error creating relationship: check that the part is not related to itself " "and that the relationship is unique" @@ -3841,7 +3859,7 @@ msgid "All selected BOM items will be deleted" msgstr "" #: part/templates/part/bom.html:160 part/views.py:584 -#: templates/js/stock.js:1081 +#: templates/js/stock.js:1158 msgid "Create New Part" msgstr "" @@ -3957,39 +3975,42 @@ msgstr "" msgid "Start New Build" msgstr "" -#: part/templates/part/category.html:20 +#: part/templates/part/category.html:24 msgid "All parts" msgstr "" -#: part/templates/part/category.html:25 part/views.py:2270 +#: part/templates/part/category.html:29 part/views.py:2270 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:31 +#: part/templates/part/category.html:35 msgid "Edit part category" msgstr "" -#: part/templates/part/category.html:36 +#: part/templates/part/category.html:40 msgid "Delete part category" msgstr "" -#: part/templates/part/category.html:46 part/templates/part/category.html:85 +#: part/templates/part/category.html:50 part/templates/part/category.html:89 msgid "Category Details" msgstr "" -#: part/templates/part/category.html:51 +#: part/templates/part/category.html:55 msgid "Category Path" msgstr "" -#: part/templates/part/category.html:56 +#: part/templates/part/category.html:60 msgid "Category Description" msgstr "" -#: part/templates/part/category.html:75 +#: part/templates/part/category.html:79 +#: part/templates/part/category_navbar.html:11 +#: part/templates/part/category_navbar.html:18 +#: part/templates/part/subcategory.html:16 msgid "Subcategories" msgstr "" -#: part/templates/part/category.html:80 +#: part/templates/part/category.html:84 msgid "Parts (Including subcategories)" msgstr "" @@ -4009,24 +4030,24 @@ msgstr "" msgid "Export Data" msgstr "" -#: part/templates/part/category.html:198 +#: part/templates/part/category.html:186 #: stock/templates/stock/location.html:192 templates/js/stock.js:709 msgid "Create new location" msgstr "" -#: part/templates/part/category.html:203 part/templates/part/category.html:233 +#: part/templates/part/category.html:191 part/templates/part/category.html:221 msgid "New Category" msgstr "" -#: part/templates/part/category.html:204 +#: part/templates/part/category.html:192 msgid "Create new category" msgstr "" -#: part/templates/part/category.html:234 +#: part/templates/part/category.html:222 msgid "Create new Part Category" msgstr "" -#: part/templates/part/category.html:240 stock/views.py:1359 +#: part/templates/part/category.html:228 stock/views.py:1359 msgid "Create new Stock Location" msgstr "" @@ -4070,8 +4091,8 @@ msgid "" "category Teile" msgstr "" -#: part/templates/part/category_navbar.html:18 -#: part/templates/part/category_navbar.html:21 +#: part/templates/part/category_navbar.html:34 +#: part/templates/part/category_navbar.html:37 #: part/templates/part/navbar.html:22 msgid "Parameters" msgstr "" @@ -4255,7 +4276,7 @@ msgstr "" #: part/templates/part/params.html:28 #: report/templates/report/inventree_test_report_base.html:90 -#: stock/models.py:1654 templates/InvenTree/settings/header.html:8 +#: stock/models.py:1655 templates/InvenTree/settings/header.html:8 #: templates/js/stock.js:124 msgid "Value" msgstr "" @@ -4272,7 +4293,7 @@ msgstr "" msgid "Create New Parameter Template" msgstr "" -#: part/templates/part/part_app_base.html:11 +#: part/templates/part/part_app_base.html:12 msgid "Part List" msgstr "" @@ -4282,7 +4303,7 @@ msgid "This part is a variant of %(link)s" msgstr "" #: part/templates/part/part_base.html:33 templates/js/company.js:156 -#: templates/js/company.js:254 templates/js/part.js:75 templates/js/part.js:152 +#: templates/js/company.js:254 templates/js/part.js:76 templates/js/part.js:153 msgid "Inactive" msgstr "" @@ -4292,19 +4313,19 @@ msgstr "" #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:131 -#: stock/templates/stock/location.html:44 +#: stock/templates/stock/location.html:51 msgid "Barcode actions" msgstr "" #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:133 -#: stock/templates/stock/location.html:46 templates/qr_button.html:1 +#: stock/templates/stock/location.html:53 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" #: part/templates/part/part_base.html:50 #: stock/templates/stock/item_base.html:149 -#: stock/templates/stock/location.html:47 +#: stock/templates/stock/location.html:54 msgid "Print Label" msgstr "" @@ -4332,11 +4353,11 @@ msgstr "" msgid "Delete part" msgstr "" -#: part/templates/part/part_base.html:123 templates/js/table_filters.js:134 +#: part/templates/part/part_base.html:123 templates/js/table_filters.js:156 msgid "In Stock" msgstr "" -#: part/templates/part/part_base.html:136 templates/InvenTree/index.html:130 +#: part/templates/part/part_base.html:136 templates/InvenTree/index.html:131 msgid "Required for Build Orders" msgstr "" @@ -4352,7 +4373,7 @@ msgstr "" msgid "Can Build" msgstr "" -#: part/templates/part/part_base.html:171 templates/js/part.js:417 +#: part/templates/part/part_base.html:171 templates/js/part.js:418 msgid "Building" msgstr "" @@ -4477,18 +4498,14 @@ msgid "Showing stock for all variants of %(full_name)s" msgstr "" #: part/templates/part/stock_count.html:7 templates/js/bom.js:239 -#: templates/js/part.js:421 +#: templates/js/part.js:422 msgid "No Stock" msgstr "" -#: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:129 +#: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:130 msgid "Low Stock" msgstr "" -#: part/templates/part/subcategories.html:5 -msgid "Child Categories" -msgstr "" - #: part/templates/part/supplier.html:10 msgid "Part Suppliers" msgstr "" @@ -4825,17 +4842,17 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:1642 +#: stock/models.py:1643 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:89 -#: stock/models.py:1648 +#: stock/models.py:1649 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:92 -#: templates/js/order.js:195 templates/js/stock.js:909 +#: templates/js/order.js:195 templates/js/stock.js:986 msgid "Date" msgstr "" @@ -4892,7 +4909,8 @@ msgstr "" msgid "Select test report template" msgstr "" -#: stock/forms.py:267 templates/js/table_filters.js:111 +#: stock/forms.py:267 templates/js/table_filters.js:70 +#: templates/js/table_filters.js:133 msgid "Include sublocations" msgstr "" @@ -5001,7 +5019,7 @@ msgstr "" msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:388 stock/templates/stock/stock_app_base.html:7 +#: stock/models.py:388 stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" @@ -5091,101 +5109,101 @@ msgstr "" msgid "Returned to location" msgstr "" -#: stock/models.py:791 +#: stock/models.py:792 msgid "Installed into stock item" msgstr "" -#: stock/models.py:799 +#: stock/models.py:800 msgid "Installed stock item" msgstr "" -#: stock/models.py:823 +#: stock/models.py:824 msgid "Uninstalled stock item" msgstr "" -#: stock/models.py:842 +#: stock/models.py:843 msgid "Uninstalled into location" msgstr "" -#: stock/models.py:943 +#: stock/models.py:944 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:949 +#: stock/models.py:950 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:955 +#: stock/models.py:956 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:958 +#: stock/models.py:959 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:961 +#: stock/models.py:962 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:993 +#: stock/models.py:994 msgid "Add serial number" msgstr "" -#: stock/models.py:996 +#: stock/models.py:997 #, python-brace-format msgid "Serialized {n} items" msgstr "" -#: stock/models.py:1074 +#: stock/models.py:1075 msgid "Split from existing stock" msgstr "" -#: stock/models.py:1112 +#: stock/models.py:1113 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1555 +#: stock/models.py:1556 msgid "Title" msgstr "" -#: stock/models.py:1555 +#: stock/models.py:1556 msgid "Tracking entry title" msgstr "" -#: stock/models.py:1557 +#: stock/models.py:1558 msgid "Entry notes" msgstr "" -#: stock/models.py:1559 +#: stock/models.py:1560 msgid "Link to external page for further information" msgstr "" -#: stock/models.py:1619 +#: stock/models.py:1620 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1625 +#: stock/models.py:1626 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1643 +#: stock/models.py:1644 msgid "Test name" msgstr "" -#: stock/models.py:1649 templates/js/table_filters.js:190 +#: stock/models.py:1650 templates/js/table_filters.js:212 msgid "Test result" msgstr "" -#: stock/models.py:1655 +#: stock/models.py:1656 msgid "Test output value" msgstr "" -#: stock/models.py:1662 +#: stock/models.py:1663 msgid "Test result attachment" msgstr "" -#: stock/models.py:1668 +#: stock/models.py:1669 msgid "Test notes" msgstr "" @@ -5246,12 +5264,12 @@ msgid "" msgstr "" #: stock/templates/stock/item_base.html:95 -#: stock/templates/stock/item_base.html:369 templates/js/table_filters.js:123 +#: stock/templates/stock/item_base.html:369 templates/js/table_filters.js:145 msgid "Expired" msgstr "" #: stock/templates/stock/item_base.html:99 -#: stock/templates/stock/item_base.html:371 templates/js/table_filters.js:128 +#: stock/templates/stock/item_base.html:371 templates/js/table_filters.js:150 msgid "Stale" msgstr "" @@ -5282,15 +5300,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:164 -#: stock/templates/stock/location.html:58 templates/stock_table.html:55 +#: stock/templates/stock/location.html:65 templates/stock_table.html:56 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:167 templates/stock_table.html:53 +#: stock/templates/stock/item_base.html:167 templates/stock_table.html:54 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:170 templates/stock_table.html:54 +#: stock/templates/stock/item_base.html:170 templates/stock_table.html:55 msgid "Remove stock" msgstr "" @@ -5310,7 +5328,7 @@ msgstr "" msgid "Return to stock" msgstr "" -#: stock/templates/stock/item_base.html:187 templates/js/stock.js:1222 +#: stock/templates/stock/item_base.html:187 templates/js/stock.js:1299 msgid "Uninstall stock item" msgstr "" @@ -5319,7 +5337,7 @@ msgid "Uninstall" msgstr "" #: stock/templates/stock/item_base.html:196 -#: stock/templates/stock/location.html:55 +#: stock/templates/stock/location.html:62 msgid "Stock actions" msgstr "" @@ -5437,53 +5455,56 @@ msgstr "" msgid "Add Test Data" msgstr "" -#: stock/templates/stock/location.html:13 +#: stock/templates/stock/location.html:20 msgid "" "You are not in the list of owners of this location. This stock location " "cannot be edited." msgstr "" -#: stock/templates/stock/location.html:30 +#: stock/templates/stock/location.html:37 msgid "All stock items" msgstr "" -#: stock/templates/stock/location.html:48 +#: stock/templates/stock/location.html:55 msgid "Check-in Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:71 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:66 +#: stock/templates/stock/location.html:73 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:68 +#: stock/templates/stock/location.html:75 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:87 msgid "Location Details" msgstr "" -#: stock/templates/stock/location.html:85 +#: stock/templates/stock/location.html:92 msgid "Location Path" msgstr "" -#: stock/templates/stock/location.html:90 +#: stock/templates/stock/location.html:97 msgid "Location Description" msgstr "" -#: stock/templates/stock/location.html:95 +#: stock/templates/stock/location.html:102 +#: stock/templates/stock/location_navbar.html:11 +#: stock/templates/stock/location_navbar.html:18 +#: stock/templates/stock/sublocation.html:16 msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:112 msgid "Stock Details" msgstr "" -#: stock/templates/stock/location.html:110 templates/InvenTree/search.html:279 +#: stock/templates/stock/location.html:117 templates/InvenTree/search.html:279 #: templates/stats.html:76 users/models.py:39 msgid "Stock Locations" msgstr "" @@ -5492,18 +5513,6 @@ msgstr "" msgid "Are you sure you want to delete this stock location?" msgstr "" -#: stock/templates/stock/location_list.html:6 -msgid "Sub-Locations" -msgstr "" - -#. Translators: pluralize with counter -#: stock/templates/stock/location_list.html:17 -#, python-format -msgid "%(counter)s Item" -msgid_plural "%(counter)s Items" -msgstr[0] "" -msgstr[1] "" - #: stock/templates/stock/navbar.html:11 msgid "Stock Item Tracking" msgstr "" @@ -5528,7 +5537,7 @@ msgstr "" msgid "Remove item" msgstr "" -#: stock/templates/stock/stock_app_base.html:15 +#: stock/templates/stock/stock_app_base.html:16 msgid "Loading..." msgstr "" @@ -5553,6 +5562,14 @@ msgstr "" msgid "This action cannot be easily undone" msgstr "" +#: stock/templates/stock/sublocation.html:23 templates/stock_table.html:37 +msgid "Printing Actions" +msgstr "" + +#: stock/templates/stock/sublocation.html:27 templates/stock_table.html:41 +msgid "Print labels" +msgstr "" + #: stock/templates/stock/tracking_delete.html:6 msgid "Are you sure you want to delete this stock tracking entry?" msgstr "" @@ -5674,7 +5691,7 @@ msgstr "" msgid "Add Stock Items" msgstr "" -#: stock/views.py:1001 users/models.py:179 +#: stock/views.py:1001 users/models.py:180 msgid "Add" msgstr "" @@ -5784,55 +5801,55 @@ msgstr "" msgid "The requested page does not exist" msgstr "" -#: templates/InvenTree/index.html:6 +#: templates/InvenTree/index.html:7 msgid "Index" msgstr "" -#: templates/InvenTree/index.html:97 +#: templates/InvenTree/index.html:98 msgid "Starred Parts" msgstr "" -#: templates/InvenTree/index.html:98 +#: templates/InvenTree/index.html:99 msgid "Latest Parts" msgstr "" -#: templates/InvenTree/index.html:99 +#: templates/InvenTree/index.html:100 msgid "BOM Waiting Validation" msgstr "" -#: templates/InvenTree/index.html:128 +#: templates/InvenTree/index.html:129 msgid "Recently Updated" msgstr "" -#: templates/InvenTree/index.html:144 +#: templates/InvenTree/index.html:145 msgid "Expired Stock" msgstr "" -#: templates/InvenTree/index.html:145 +#: templates/InvenTree/index.html:146 msgid "Stale Stock" msgstr "" -#: templates/InvenTree/index.html:183 +#: templates/InvenTree/index.html:184 msgid "Build Orders In Progress" msgstr "" -#: templates/InvenTree/index.html:184 +#: templates/InvenTree/index.html:185 msgid "Overdue Build Orders" msgstr "" -#: templates/InvenTree/index.html:205 +#: templates/InvenTree/index.html:206 msgid "Outstanding Purchase Orders" msgstr "" -#: templates/InvenTree/index.html:206 +#: templates/InvenTree/index.html:207 msgid "Overdue Purchase Orders" msgstr "" -#: templates/InvenTree/index.html:228 +#: templates/InvenTree/index.html:229 msgid "Outstanding Sales Orders" msgstr "" -#: templates/InvenTree/index.html:229 +#: templates/InvenTree/index.html:230 msgid "Overdue Sales Orders" msgstr "" @@ -5882,7 +5899,7 @@ msgstr "" msgid "Global InvenTree Settings" msgstr "" -#: templates/InvenTree/settings/global.html:26 +#: templates/InvenTree/settings/global.html:27 msgid "Barcode Settings" msgstr "" @@ -5922,8 +5939,8 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:7 -#: templates/InvenTree/settings/settings.html:13 templates/navbar.html:84 +#: templates/InvenTree/settings/settings.html:8 +#: templates/InvenTree/settings/settings.html:14 templates/navbar.html:84 msgid "Settings" msgstr "" @@ -5935,7 +5952,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:48 +#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:49 msgid "Stock Options" msgstr "" @@ -5995,7 +6012,7 @@ msgid "Change Password" msgstr "" #: templates/InvenTree/settings/user.html:28 -#: templates/registration/login.html:58 +#: templates/registration/login.html:59 msgid "Username" msgstr "" @@ -6251,7 +6268,7 @@ msgid "Quantity Per" msgstr "" #: templates/js/build.js:582 templates/js/build.js:996 -#: templates/stock_table.html:57 +#: templates/stock_table.html:58 msgid "Order stock" msgstr "" @@ -6259,8 +6276,9 @@ msgstr "" msgid "No builds matching query" msgstr "" -#: templates/js/build.js:649 templates/js/part.js:323 templates/js/stock.js:511 -#: templates/js/stock.js:1254 +#: templates/js/build.js:649 templates/js/part.js:324 templates/js/part.js:546 +#: templates/js/stock.js:511 templates/js/stock.js:938 +#: templates/js/stock.js:1331 msgid "Select" msgstr "" @@ -6289,12 +6307,12 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/company.js:148 templates/js/company.js:246 -#: templates/js/part.js:59 templates/js/part.js:144 +#: templates/js/part.js:60 templates/js/part.js:145 msgid "Template part" msgstr "" #: templates/js/company.js:152 templates/js/company.js:250 -#: templates/js/part.js:63 templates/js/part.js:148 +#: templates/js/part.js:64 templates/js/part.js:149 msgid "Assembled part" msgstr "" @@ -6468,59 +6486,63 @@ msgstr "" msgid "No sales orders found" msgstr "" -#: templates/js/part.js:51 templates/js/part.js:136 +#: templates/js/part.js:52 templates/js/part.js:137 msgid "Trackable part" msgstr "" -#: templates/js/part.js:55 templates/js/part.js:140 +#: templates/js/part.js:56 templates/js/part.js:141 msgid "Virtual part" msgstr "" -#: templates/js/part.js:67 +#: templates/js/part.js:68 msgid "Starred part" msgstr "" -#: templates/js/part.js:71 +#: templates/js/part.js:72 msgid "Salable part" msgstr "" -#: templates/js/part.js:185 +#: templates/js/part.js:186 msgid "No variants found" msgstr "" -#: templates/js/part.js:271 templates/js/part.js:451 +#: templates/js/part.js:272 templates/js/part.js:452 msgid "No parts found" msgstr "" -#: templates/js/part.js:390 +#: templates/js/part.js:391 msgid "No category" msgstr "" -#: templates/js/part.js:408 templates/js/table_filters.js:296 +#: templates/js/part.js:409 templates/js/table_filters.js:318 msgid "Low stock" msgstr "" -#: templates/js/part.js:511 +#: templates/js/part.js:571 templates/js/stock.js:962 +msgid "Path" +msgstr "" + +#: templates/js/part.js:588 msgid "YES" msgstr "" -#: templates/js/part.js:513 +#: templates/js/part.js:590 msgid "NO" msgstr "" -#: templates/js/part.js:547 +#: templates/js/part.js:624 msgid "No test templates matching query" msgstr "" -#: templates/js/part.js:598 templates/js/stock.js:75 +#: templates/js/part.js:675 templates/js/stock.js:75 msgid "Edit test result" msgstr "" -#: templates/js/part.js:599 templates/js/stock.js:76 +#: templates/js/part.js:676 templates/js/stock.js:76 msgid "Delete test result" msgstr "" -#: templates/js/part.js:605 +#: templates/js/part.js:682 msgid "This test is defined for a parent part" msgstr "" @@ -6690,7 +6712,7 @@ msgstr "" msgid "Stock item is destroyed" msgstr "" -#: templates/js/stock.js:620 templates/js/table_filters.js:116 +#: templates/js/stock.js:620 templates/js/table_filters.js:138 msgid "Depleted" msgstr "" @@ -6714,31 +6736,31 @@ msgstr "" msgid "Status code must be selected" msgstr "" -#: templates/js/stock.js:973 +#: templates/js/stock.js:1050 msgid "No user information" msgstr "" -#: templates/js/stock.js:983 +#: templates/js/stock.js:1060 msgid "Edit tracking entry" msgstr "" -#: templates/js/stock.js:984 +#: templates/js/stock.js:1061 msgid "Delete tracking entry" msgstr "" -#: templates/js/stock.js:1093 +#: templates/js/stock.js:1170 msgid "Create New Location" msgstr "" -#: templates/js/stock.js:1192 +#: templates/js/stock.js:1269 msgid "Serial" msgstr "" -#: templates/js/stock.js:1285 templates/js/table_filters.js:149 +#: templates/js/stock.js:1362 templates/js/table_filters.js:171 msgid "Installed" msgstr "" -#: templates/js/stock.js:1310 +#: templates/js/stock.js:1387 msgid "Install item" msgstr "" @@ -6750,148 +6772,153 @@ msgstr "" msgid "Validated" msgstr "" -#: templates/js/table_filters.js:70 templates/js/table_filters.js:159 -msgid "Is Serialized" -msgstr "" - -#: templates/js/table_filters.js:73 templates/js/table_filters.js:166 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/table_filters.js:74 templates/js/table_filters.js:167 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/table_filters.js:77 templates/js/table_filters.js:170 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/table_filters.js:78 templates/js/table_filters.js:171 -msgid "Serial number less than or equal to" +#: templates/js/table_filters.js:71 +msgid "Include locations" msgstr "" #: templates/js/table_filters.js:81 templates/js/table_filters.js:82 -#: templates/js/table_filters.js:162 templates/js/table_filters.js:163 -msgid "Serial number" -msgstr "" - -#: templates/js/table_filters.js:86 templates/js/table_filters.js:180 -msgid "Batch code" -msgstr "" - -#: templates/js/table_filters.js:96 templates/js/table_filters.js:263 -msgid "Active parts" -msgstr "" - -#: templates/js/table_filters.js:97 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/table_filters.js:102 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/table_filters.js:106 -msgid "Is allocated" -msgstr "" - -#: templates/js/table_filters.js:107 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/table_filters.js:112 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/table_filters.js:117 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/table_filters.js:124 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/table_filters.js:129 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/table_filters.js:135 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/table_filters.js:139 -msgid "In Production" -msgstr "" - -#: templates/js/table_filters.js:140 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/table_filters.js:144 -msgid "Include Variants" -msgstr "" - -#: templates/js/table_filters.js:145 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/table_filters.js:150 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/table_filters.js:154 -msgid "Sent to customer" -msgstr "" - -#: templates/js/table_filters.js:155 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/table_filters.js:175 templates/js/table_filters.js:176 -msgid "Stock status" -msgstr "" - -#: templates/js/table_filters.js:209 -msgid "Build status" -msgstr "" - -#: templates/js/table_filters.js:228 templates/js/table_filters.js:245 -msgid "Order status" -msgstr "" - -#: templates/js/table_filters.js:233 templates/js/table_filters.js:250 -msgid "Outstanding" -msgstr "" - -#: templates/js/table_filters.js:273 +#: templates/js/table_filters.js:295 msgid "Include subcategories" msgstr "" -#: templates/js/table_filters.js:274 +#: templates/js/table_filters.js:92 templates/js/table_filters.js:181 +msgid "Is Serialized" +msgstr "" + +#: templates/js/table_filters.js:95 templates/js/table_filters.js:188 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/table_filters.js:96 templates/js/table_filters.js:189 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/table_filters.js:99 templates/js/table_filters.js:192 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/table_filters.js:100 templates/js/table_filters.js:193 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/table_filters.js:103 templates/js/table_filters.js:104 +#: templates/js/table_filters.js:184 templates/js/table_filters.js:185 +msgid "Serial number" +msgstr "" + +#: templates/js/table_filters.js:108 templates/js/table_filters.js:202 +msgid "Batch code" +msgstr "" + +#: templates/js/table_filters.js:118 templates/js/table_filters.js:285 +msgid "Active parts" +msgstr "" + +#: templates/js/table_filters.js:119 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/table_filters.js:124 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/table_filters.js:128 +msgid "Is allocated" +msgstr "" + +#: templates/js/table_filters.js:129 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/table_filters.js:134 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/table_filters.js:139 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/table_filters.js:146 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/table_filters.js:151 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/table_filters.js:157 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/table_filters.js:161 +msgid "In Production" +msgstr "" + +#: templates/js/table_filters.js:162 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/table_filters.js:166 +msgid "Include Variants" +msgstr "" + +#: templates/js/table_filters.js:167 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/table_filters.js:172 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/table_filters.js:176 +msgid "Sent to customer" +msgstr "" + +#: templates/js/table_filters.js:177 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/table_filters.js:197 templates/js/table_filters.js:198 +msgid "Stock status" +msgstr "" + +#: templates/js/table_filters.js:231 +msgid "Build status" +msgstr "" + +#: templates/js/table_filters.js:250 templates/js/table_filters.js:267 +msgid "Order status" +msgstr "" + +#: templates/js/table_filters.js:255 templates/js/table_filters.js:272 +msgid "Outstanding" +msgstr "" + +#: templates/js/table_filters.js:296 msgid "Include parts in subcategories" msgstr "" -#: templates/js/table_filters.js:278 +#: templates/js/table_filters.js:300 msgid "Has IPN" msgstr "" -#: templates/js/table_filters.js:279 +#: templates/js/table_filters.js:301 msgid "Part has internal part number" msgstr "" -#: templates/js/table_filters.js:284 +#: templates/js/table_filters.js:306 msgid "Show active parts" msgstr "" -#: templates/js/table_filters.js:292 +#: templates/js/table_filters.js:314 msgid "Stock available" msgstr "" -#: templates/js/table_filters.js:308 +#: templates/js/table_filters.js:330 msgid "Starred" msgstr "" -#: templates/js/table_filters.js:320 +#: templates/js/table_filters.js:342 msgid "Purchasable" msgstr "" @@ -6972,7 +6999,7 @@ msgstr "" msgid "Logout" msgstr "" -#: templates/navbar.html:81 templates/registration/login.html:89 +#: templates/navbar.html:81 templates/registration/login.html:90 msgid "Login" msgstr "" @@ -6984,73 +7011,73 @@ msgstr "" msgid "QR data not provided" msgstr "" -#: templates/registration/logged_out.html:50 +#: templates/registration/logged_out.html:51 msgid "You have been logged out" msgstr "" -#: templates/registration/logged_out.html:51 -#: templates/registration/password_reset_complete.html:51 -#: templates/registration/password_reset_done.html:58 +#: templates/registration/logged_out.html:52 +#: templates/registration/password_reset_complete.html:52 +#: templates/registration/password_reset_done.html:59 msgid "Return to login screen" msgstr "" -#: templates/registration/login.html:64 +#: templates/registration/login.html:65 msgid "Enter username" msgstr "" -#: templates/registration/login.html:70 +#: templates/registration/login.html:71 msgid "Password" msgstr "" -#: templates/registration/login.html:83 +#: templates/registration/login.html:84 msgid "Username / password combination is incorrect" msgstr "" -#: templates/registration/login.html:95 -#: templates/registration/password_reset_form.html:51 +#: templates/registration/login.html:96 +#: templates/registration/password_reset_form.html:52 msgid "Forgotten your password?" msgstr "" -#: templates/registration/login.html:95 +#: templates/registration/login.html:96 msgid "Click here to reset" msgstr "" -#: templates/registration/password_reset_complete.html:50 +#: templates/registration/password_reset_complete.html:51 msgid "Password reset complete" msgstr "" -#: templates/registration/password_reset_confirm.html:52 -#: templates/registration/password_reset_confirm.html:56 +#: templates/registration/password_reset_confirm.html:53 +#: templates/registration/password_reset_confirm.html:57 msgid "Change password" msgstr "" -#: templates/registration/password_reset_confirm.html:60 +#: templates/registration/password_reset_confirm.html:61 msgid "" "The password reset link was invalid, possibly because it has already been " "used. Please request a new password reset." msgstr "" -#: templates/registration/password_reset_done.html:51 +#: templates/registration/password_reset_done.html:52 msgid "" "We've emailed you instructions for setting your password, if an account " "exists with the email you entered. You should receive them shortly." msgstr "" -#: templates/registration/password_reset_done.html:54 +#: templates/registration/password_reset_done.html:55 msgid "" "If you don't receive an email, please make sure you've entered the address " "you registered with, and check your spam folder." msgstr "" -#: templates/registration/password_reset_form.html:52 +#: templates/registration/password_reset_form.html:53 msgid "Enter your email address below." msgstr "" -#: templates/registration/password_reset_form.html:53 +#: templates/registration/password_reset_form.html:54 msgid "An email will be sent with password reset instructions." msgstr "" -#: templates/registration/password_reset_form.html:58 +#: templates/registration/password_reset_form.html:59 msgid "Send email" msgstr "" @@ -7098,55 +7125,47 @@ msgstr "" msgid "Barcode Actions" msgstr "" -#: templates/stock_table.html:36 -msgid "Printing Actions" -msgstr "" - -#: templates/stock_table.html:40 -msgid "Print labels" -msgstr "" - -#: templates/stock_table.html:42 +#: templates/stock_table.html:43 msgid "Print test reports" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Add to selected stock items" msgstr "" -#: templates/stock_table.html:54 +#: templates/stock_table.html:55 msgid "Remove from selected stock items" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:56 msgid "Stocktake selected stock items" msgstr "" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Move selected stock items" msgstr "" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Move stock" msgstr "" -#: templates/stock_table.html:57 +#: templates/stock_table.html:58 msgid "Order selected items" msgstr "" -#: templates/stock_table.html:58 +#: templates/stock_table.html:59 msgid "Change status" msgstr "" -#: templates/stock_table.html:58 +#: templates/stock_table.html:59 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:61 +#: templates/stock_table.html:62 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:61 +#: templates/stock_table.html:62 msgid "Delete Stock" msgstr "" @@ -7182,34 +7201,34 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:166 +#: users/models.py:167 msgid "Permission set" msgstr "" -#: users/models.py:174 +#: users/models.py:175 msgid "Group" msgstr "" -#: users/models.py:177 +#: users/models.py:178 msgid "View" msgstr "" -#: users/models.py:177 +#: users/models.py:178 msgid "Permission to view items" msgstr "" -#: users/models.py:179 +#: users/models.py:180 msgid "Permission to add items" msgstr "" -#: users/models.py:181 +#: users/models.py:182 msgid "Change" msgstr "" -#: users/models.py:181 +#: users/models.py:182 msgid "Permissions to edit items" msgstr "" -#: users/models.py:183 +#: users/models.py:184 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/es/LC_MESSAGES/django.po b/InvenTree/locale/es/LC_MESSAGES/django.po index 88164f6c11..9e300a0372 100644 --- a/InvenTree/locale/es/LC_MESSAGES/django.po +++ b/InvenTree/locale/es/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-17 23:25+0000\n" +"POT-Creation-Date: 2021-04-21 12:28+1000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -49,7 +49,7 @@ msgstr "" msgid "Confirm item deletion" msgstr "" -#: InvenTree/forms.py:159 templates/registration/login.html:76 +#: InvenTree/forms.py:159 templates/registration/login.html:77 msgid "Enter password" msgstr "" @@ -106,7 +106,7 @@ msgstr "" msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/models.py:59 stock/models.py:1661 +#: InvenTree/models.py:59 stock/models.py:1662 msgid "Attachment" msgstr "" @@ -122,9 +122,9 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:68 InvenTree/models.py:69 part/models.py:1888 +#: InvenTree/models.py:68 InvenTree/models.py:69 part/models.py:1908 #: report/templates/report/inventree_test_report_base.html:91 -#: templates/js/stock.js:964 +#: templates/js/stock.js:1041 msgid "User" msgstr "" @@ -133,9 +133,10 @@ msgid "upload date" msgstr "" #: InvenTree/models.py:107 InvenTree/models.py:108 label/models.py:101 -#: part/models.py:686 part/models.py:2029 part/templates/part/params.html:27 +#: part/models.py:686 part/models.py:2049 part/templates/part/params.html:27 #: report/models.py:179 templates/InvenTree/search.html:137 -#: templates/InvenTree/search.html:289 templates/js/part.js:109 +#: templates/InvenTree/search.html:289 templates/js/part.js:110 +#: templates/js/part.js:553 templates/js/stock.js:944 msgid "Name" msgstr "" @@ -143,7 +144,7 @@ msgstr "" #: build/templates/build/detail.html:21 company/models.py:342 #: company/models.py:494 company/templates/company/detail.html:27 #: company/templates/company/manufacturer_part_base.html:72 -#: company/templates/company/supplier_part_base.html:70 +#: company/templates/company/supplier_part_base.html:71 #: company/templates/company/supplier_part_detail.html:31 label/models.py:108 #: order/models.py:101 order/templates/order/purchase_order_detail.html:168 #: part/models.py:710 part/templates/part/detail.html:54 @@ -155,9 +156,10 @@ msgstr "" #: templates/InvenTree/settings/header.html:9 templates/js/bom.js:190 #: templates/js/build.js:677 templates/js/build.js:944 #: templates/js/company.js:56 templates/js/order.js:183 -#: templates/js/order.js:280 templates/js/part.js:168 templates/js/part.js:251 -#: templates/js/part.js:370 templates/js/part.js:566 templates/js/stock.js:554 -#: templates/js/stock.js:938 +#: templates/js/order.js:280 templates/js/part.js:169 templates/js/part.js:252 +#: templates/js/part.js:371 templates/js/part.js:565 templates/js/part.js:643 +#: templates/js/stock.js:554 templates/js/stock.js:956 +#: templates/js/stock.js:1015 msgid "Description" msgstr "" @@ -169,35 +171,35 @@ msgstr "" msgid "parent" msgstr "" -#: InvenTree/settings.py:480 +#: InvenTree/settings.py:493 msgid "English" msgstr "" -#: InvenTree/settings.py:481 +#: InvenTree/settings.py:494 msgid "French" msgstr "" -#: InvenTree/settings.py:482 +#: InvenTree/settings.py:495 msgid "German" msgstr "" -#: InvenTree/settings.py:483 +#: InvenTree/settings.py:496 msgid "Polish" msgstr "" -#: InvenTree/settings.py:484 +#: InvenTree/settings.py:497 msgid "Turkish" msgstr "" -#: InvenTree/status.py:84 +#: InvenTree/status.py:93 msgid "Background worker check failed" msgstr "" -#: InvenTree/status.py:88 +#: InvenTree/status.py:97 msgid "Email backend not configured" msgstr "" -#: InvenTree/status.py:91 +#: InvenTree/status.py:100 msgid "InvenTree system health checks failed" msgstr "" @@ -380,10 +382,10 @@ msgid "" "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/forms.py:45 build/forms.py:87 build/forms.py:257 build/models.py:1103 +#: build/forms.py:45 build/forms.py:87 build/forms.py:257 build/models.py:1109 #: build/templates/build/auto_allocate.html:17 #: build/templates/build/build_base.html:94 -#: build/templates/build/detail.html:31 common/models.py:696 +#: build/templates/build/detail.html:31 common/models.py:703 #: company/forms.py:176 company/templates/company/supplier_part_pricing.html:77 #: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261 #: order/forms.py:278 order/models.py:593 order/models.py:784 @@ -393,7 +395,7 @@ msgstr "" #: order/templates/order/sales_order_detail.html:77 #: order/templates/order/sales_order_detail.html:159 #: order/templates/order/sales_order_detail.html:224 part/forms.py:342 -#: part/forms.py:371 part/forms.py:387 part/models.py:2158 +#: part/forms.py:371 part/forms.py:387 part/models.py:2178 #: part/templates/part/allocation.html:19 #: part/templates/part/allocation.html:53 #: part/templates/part/part_pricing.html:11 @@ -403,11 +405,11 @@ msgstr "" #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:77 -#: stock/forms.py:175 stock/forms.py:308 stock/models.py:1565 +#: stock/forms.py:175 stock/forms.py:308 stock/models.py:1566 #: stock/templates/stock/item_base.html:244 #: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364 #: templates/js/bom.js:205 templates/js/build.js:420 templates/js/build.js:954 -#: templates/js/stock.js:956 templates/js/stock.js:1194 +#: templates/js/stock.js:1033 templates/js/stock.js:1271 msgid "Quantity" msgstr "" @@ -496,7 +498,7 @@ msgstr "" #: build/templates/build/index.html:15 order/templates/order/so_builds.html:12 #: order/templates/order/so_navbar.html:19 #: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55 -#: part/templates/part/navbar.html:58 templates/InvenTree/index.html:182 +#: part/templates/part/navbar.html:58 templates/InvenTree/index.html:183 #: templates/InvenTree/search.html:185 #: templates/InvenTree/settings/tabs.html:31 users/models.py:41 msgid "Build Orders" @@ -508,7 +510,7 @@ msgstr "" #: build/models.py:127 order/models.py:99 order/models.py:595 #: order/templates/order/purchase_order_detail.html:195 -#: order/templates/order/sales_order_detail.html:219 part/models.py:2167 +#: order/templates/order/sales_order_detail.html:219 part/models.py:2187 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197 #: templates/js/build.js:509 templates/js/build.js:948 @@ -536,12 +538,11 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:156 #: order/templates/order/receive_parts.html:19 #: order/templates/order/sales_order_detail.html:207 part/models.py:321 -#: part/models.py:1856 part/models.py:1868 part/models.py:1886 -#: part/models.py:1961 part/models.py:2057 part/models.py:2142 -#: part/templates/part/part_app_base.html:7 +#: part/models.py:1876 part/models.py:1888 part/models.py:1906 +#: part/models.py:1981 part/models.py:2077 part/models.py:2162 +#: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:14 part/templates/part/related.html:29 #: part/templates/part/set_category.html:13 -#: part/templates/part/subcategories.html:17 #: report/templates/report/inventree_build_order_base.html:110 #: report/templates/report/inventree_po_report.html:90 #: report/templates/report/inventree_so_report.html:90 @@ -549,8 +550,8 @@ msgstr "" #: templates/js/barcode.js:362 templates/js/bom.js:163 #: templates/js/build.js:681 templates/js/build.js:921 #: templates/js/company.js:140 templates/js/company.js:238 -#: templates/js/part.js:232 templates/js/part.js:337 templates/js/stock.js:523 -#: templates/js/stock.js:1266 +#: templates/js/part.js:233 templates/js/part.js:338 templates/js/stock.js:523 +#: templates/js/stock.js:1343 msgid "Part" msgstr "" @@ -656,7 +657,7 @@ msgstr "" #: build/models.py:256 build/templates/build/detail.html:91 #: company/templates/company/manufacturer_part_base.html:79 #: company/templates/company/manufacturer_part_detail.html:28 -#: company/templates/company/supplier_part_base.html:77 +#: company/templates/company/supplier_part_base.html:78 #: company/templates/company/supplier_part_detail.html:28 #: part/templates/part/detail.html:83 part/templates/part/part_base.html:101 #: stock/models.py:426 stock/templates/stock/item_base.html:334 @@ -680,7 +681,7 @@ msgstr "" #: part/templates/part/navbar.html:128 #: report/templates/report/inventree_build_order_base.html:173 #: stock/forms.py:173 stock/forms.py:317 stock/forms.py:349 stock/forms.py:377 -#: stock/models.py:498 stock/models.py:1557 stock/models.py:1667 +#: stock/models.py:498 stock/models.py:1558 stock/models.py:1668 #: stock/templates/stock/navbar.html:57 templates/js/barcode.js:37 #: templates/js/bom.js:333 templates/js/stock.js:128 templates/js/stock.js:671 msgid "Notes" @@ -706,47 +707,47 @@ msgstr "" msgid "Completed build output" msgstr "" -#: build/models.py:996 +#: build/models.py:1002 msgid "BuildItem must be unique for build, stock_item and install_into" msgstr "" -#: build/models.py:1018 +#: build/models.py:1024 msgid "Build item must specify a build output" msgstr "" -#: build/models.py:1023 +#: build/models.py:1029 #, python-brace-format msgid "Selected stock item not found in BOM for part '{p}'" msgstr "" -#: build/models.py:1027 +#: build/models.py:1033 #, python-brace-format msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" msgstr "" -#: build/models.py:1034 order/models.py:758 +#: build/models.py:1040 order/models.py:758 msgid "StockItem is over-allocated" msgstr "" -#: build/models.py:1038 order/models.py:761 +#: build/models.py:1044 order/models.py:761 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1042 +#: build/models.py:1048 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1082 stock/templates/stock/item_base.html:306 +#: build/models.py:1088 stock/templates/stock/item_base.html:306 #: templates/InvenTree/search.html:183 templates/js/build.js:655 #: templates/navbar.html:29 msgid "Build" msgstr "" -#: build/models.py:1083 +#: build/models.py:1089 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1090 part/templates/part/allocation.html:18 +#: build/models.py:1096 part/templates/part/allocation.html:18 #: part/templates/part/allocation.html:24 #: part/templates/part/allocation.html:31 #: part/templates/part/allocation.html:49 @@ -754,26 +755,30 @@ msgstr "" #: stock/templates/stock/item_base.html:93 #: stock/templates/stock/item_base.html:328 #: stock/templates/stock/stock_adjust.html:16 templates/js/build.js:771 -#: templates/js/stock.js:927 templates/js/stock.js:1185 +#: templates/js/stock.js:1004 templates/js/stock.js:1262 msgid "Stock Item" msgstr "" -#: build/models.py:1091 +#: build/models.py:1097 msgid "Source stock item" msgstr "" -#: build/models.py:1104 +#: build/models.py:1110 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1112 +#: build/models.py:1118 msgid "Install into" msgstr "" -#: build/models.py:1113 +#: build/models.py:1119 msgid "Destination stock item" msgstr "" +#: build/templates/build/allocate.html:7 +msgid "Allocate Parts" +msgstr "" + #: build/templates/build/allocate.html:15 msgid "Incomplete Build Ouputs" msgstr "" @@ -860,12 +865,12 @@ msgstr "" #: build/templates/build/build_base.html:40 #: company/templates/company/company_base.html:40 #: company/templates/company/manufacturer_part_base.html:25 -#: company/templates/company/supplier_part_base.html:25 +#: company/templates/company/supplier_part_base.html:26 #: order/templates/order/order_base.html:26 #: order/templates/order/sales_order_base.html:35 -#: part/templates/part/category.html:14 part/templates/part/part_base.html:29 +#: part/templates/part/category.html:18 part/templates/part/part_base.html:29 #: stock/templates/stock/item_base.html:118 -#: stock/templates/stock/location.html:24 +#: stock/templates/stock/location.html:31 msgid "Admin view" msgstr "" @@ -875,8 +880,8 @@ msgstr "" #: order/templates/order/order_base.html:86 #: order/templates/order/sales_order_base.html:41 #: order/templates/order/sales_order_base.html:86 -#: templates/js/table_filters.js:218 templates/js/table_filters.js:237 -#: templates/js/table_filters.js:254 +#: templates/js/table_filters.js:240 templates/js/table_filters.js:259 +#: templates/js/table_filters.js:276 msgid "Overdue" msgstr "" @@ -917,7 +922,7 @@ msgstr "" #: stock/templates/stock/item_base.html:392 templates/InvenTree/search.html:252 #: templates/js/barcode.js:119 templates/js/build.js:710 #: templates/js/order.js:187 templates/js/order.js:285 -#: templates/js/stock.js:628 templates/js/stock.js:1202 +#: templates/js/stock.js:628 templates/js/stock.js:1279 msgid "Status" msgstr "" @@ -1057,8 +1062,8 @@ msgstr "" #: build/templates/build/detail.html:70 #: stock/templates/stock/item_base.html:292 templates/js/stock.js:636 -#: templates/js/stock.js:1209 templates/js/table_filters.js:85 -#: templates/js/table_filters.js:179 +#: templates/js/stock.js:1286 templates/js/table_filters.js:107 +#: templates/js/table_filters.js:201 msgid "Batch" msgstr "" @@ -1180,7 +1185,7 @@ msgstr "" msgid "Create Build Output" msgstr "" -#: build/views.py:203 stock/models.py:968 stock/views.py:1789 +#: build/views.py:203 stock/models.py:969 stock/views.py:1789 msgid "Serial numbers already exist" msgstr "" @@ -1318,335 +1323,343 @@ msgstr "" msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:62 company/models.py:97 company/models.py:98 -msgid "Company name" +#: common/models.py:62 +msgid "Use instance name" msgstr "" #: common/models.py:63 +msgid "Use the instance name in the title-bar" +msgstr "" + +#: common/models.py:69 company/models.py:97 company/models.py:98 +msgid "Company name" +msgstr "" + +#: common/models.py:70 msgid "Internal company name" msgstr "" -#: common/models.py:68 +#: common/models.py:75 msgid "Base URL" msgstr "" -#: common/models.py:69 +#: common/models.py:76 msgid "Base URL for server instance" msgstr "" -#: common/models.py:75 +#: common/models.py:82 msgid "Default Currency" msgstr "" -#: common/models.py:76 +#: common/models.py:83 msgid "Default currency" msgstr "" -#: common/models.py:82 +#: common/models.py:89 msgid "Download from URL" msgstr "" -#: common/models.py:83 +#: common/models.py:90 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:89 +#: common/models.py:96 msgid "Barcode Support" msgstr "" -#: common/models.py:90 +#: common/models.py:97 msgid "Enable barcode scanner support" msgstr "" -#: common/models.py:96 +#: common/models.py:103 msgid "IPN Regex" msgstr "" -#: common/models.py:97 +#: common/models.py:104 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:101 +#: common/models.py:108 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:102 +#: common/models.py:109 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:108 +#: common/models.py:115 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:109 +#: common/models.py:116 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:115 +#: common/models.py:122 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:116 +#: common/models.py:123 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:122 +#: common/models.py:129 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:123 +#: common/models.py:130 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:129 +#: common/models.py:136 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:130 +#: common/models.py:137 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:136 +#: common/models.py:143 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:137 +#: common/models.py:144 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:143 +#: common/models.py:150 msgid "Recent Part Count" msgstr "" -#: common/models.py:144 +#: common/models.py:151 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:150 part/models.py:2059 part/templates/part/detail.html:160 +#: common/models.py:157 part/models.py:2079 part/templates/part/detail.html:160 #: report/models.py:185 stock/forms.py:259 templates/js/table_filters.js:24 -#: templates/js/table_filters.js:288 +#: templates/js/table_filters.js:310 msgid "Template" msgstr "" -#: common/models.py:151 +#: common/models.py:158 msgid "Parts are templates by default" msgstr "" -#: common/models.py:157 part/models.py:834 part/templates/part/detail.html:170 -#: templates/js/table_filters.js:101 templates/js/table_filters.js:300 +#: common/models.py:164 part/models.py:834 part/templates/part/detail.html:170 +#: templates/js/table_filters.js:123 templates/js/table_filters.js:322 msgid "Assembly" msgstr "" -#: common/models.py:158 +#: common/models.py:165 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:164 part/models.py:840 part/templates/part/detail.html:180 -#: templates/js/table_filters.js:304 +#: common/models.py:171 part/models.py:840 part/templates/part/detail.html:180 +#: templates/js/table_filters.js:326 msgid "Component" msgstr "" -#: common/models.py:165 +#: common/models.py:172 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:171 part/models.py:851 part/templates/part/detail.html:200 +#: common/models.py:178 part/models.py:851 part/templates/part/detail.html:200 msgid "Purchaseable" msgstr "" -#: common/models.py:172 +#: common/models.py:179 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:178 part/models.py:856 part/templates/part/detail.html:210 -#: templates/js/table_filters.js:312 +#: common/models.py:185 part/models.py:856 part/templates/part/detail.html:210 +#: templates/js/table_filters.js:334 msgid "Salable" msgstr "" -#: common/models.py:179 +#: common/models.py:186 msgid "Parts are salable by default" msgstr "" -#: common/models.py:185 part/models.py:846 part/templates/part/detail.html:190 -#: templates/js/table_filters.js:32 templates/js/table_filters.js:316 +#: common/models.py:192 part/models.py:846 part/templates/part/detail.html:190 +#: templates/js/table_filters.js:32 templates/js/table_filters.js:338 msgid "Trackable" msgstr "" -#: common/models.py:186 +#: common/models.py:193 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:192 part/models.py:866 part/templates/part/detail.html:150 +#: common/models.py:199 part/models.py:866 part/templates/part/detail.html:150 #: templates/js/table_filters.js:28 msgid "Virtual" msgstr "" -#: common/models.py:193 +#: common/models.py:200 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:199 +#: common/models.py:206 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:200 +#: common/models.py:207 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:206 +#: common/models.py:213 msgid "Debug Mode" msgstr "" -#: common/models.py:207 +#: common/models.py:214 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:213 +#: common/models.py:220 msgid "Page Size" msgstr "" -#: common/models.py:214 +#: common/models.py:221 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:224 +#: common/models.py:231 msgid "Test Reports" msgstr "" -#: common/models.py:225 +#: common/models.py:232 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:231 +#: common/models.py:238 msgid "Stock Expiry" msgstr "" -#: common/models.py:232 +#: common/models.py:239 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:238 +#: common/models.py:245 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:239 +#: common/models.py:246 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:245 +#: common/models.py:252 msgid "Stock Stale Time" msgstr "" -#: common/models.py:246 +#: common/models.py:253 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:248 part/templates/part/detail.html:121 +#: common/models.py:255 part/templates/part/detail.html:121 msgid "days" msgstr "" -#: common/models.py:253 +#: common/models.py:260 msgid "Build Expired Stock" msgstr "" -#: common/models.py:254 +#: common/models.py:261 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:260 +#: common/models.py:267 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:261 +#: common/models.py:268 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:267 +#: common/models.py:274 msgid "Group by Part" msgstr "" -#: common/models.py:268 +#: common/models.py:275 msgid "Group stock items by part reference in table views" msgstr "" -#: common/models.py:274 +#: common/models.py:281 msgid "Recent Stock Count" msgstr "" -#: common/models.py:275 +#: common/models.py:282 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:281 +#: common/models.py:288 msgid "Build Order Reference Prefix" msgstr "" -#: common/models.py:282 +#: common/models.py:289 msgid "Prefix value for build order reference" msgstr "" -#: common/models.py:287 +#: common/models.py:294 msgid "Build Order Reference Regex" msgstr "" -#: common/models.py:288 +#: common/models.py:295 msgid "Regular expression pattern for matching build order reference" msgstr "" -#: common/models.py:292 +#: common/models.py:299 msgid "Sales Order Reference Prefix" msgstr "" -#: common/models.py:293 +#: common/models.py:300 msgid "Prefix value for sales order reference" msgstr "" -#: common/models.py:298 +#: common/models.py:305 msgid "Purchase Order Reference Prefix" msgstr "" -#: common/models.py:299 +#: common/models.py:306 msgid "Prefix value for purchase order reference" msgstr "" -#: common/models.py:522 +#: common/models.py:529 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:524 +#: common/models.py:531 msgid "Settings value" msgstr "" -#: common/models.py:559 +#: common/models.py:566 msgid "Must be an integer value" msgstr "" -#: common/models.py:582 +#: common/models.py:589 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:593 +#: common/models.py:600 msgid "Value must be an integer value" msgstr "" -#: common/models.py:616 +#: common/models.py:623 msgid "Key string must be unique" msgstr "" -#: common/models.py:697 company/forms.py:177 +#: common/models.py:704 company/forms.py:177 msgid "Price break quantity" msgstr "" -#: common/models.py:705 company/templates/company/supplier_part_pricing.html:82 +#: common/models.py:712 company/templates/company/supplier_part_pricing.html:82 #: part/templates/part/sale_prices.html:90 templates/js/bom.js:255 msgid "Price" msgstr "" -#: common/models.py:706 +#: common/models.py:713 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:729 +#: common/models.py:736 msgid "Default" msgstr "" @@ -1702,7 +1715,7 @@ msgstr "" #: company/forms.py:136 company/models.py:330 #: company/templates/company/manufacturer_part_base.html:89 #: company/templates/company/manufacturer_part_detail.html:26 -#: company/templates/company/supplier_part_base.html:100 +#: company/templates/company/supplier_part_base.html:101 #: company/templates/company/supplier_part_detail.html:35 #: order/templates/order/purchase_order_detail.html:183 part/bom.py:171 #: part/bom.py:242 templates/js/company.js:181 templates/js/company.js:307 @@ -1761,8 +1774,8 @@ msgstr "" #: company/models.py:124 company/models.py:336 company/models.py:488 #: order/models.py:103 part/models.py:743 #: report/templates/report/inventree_build_order_base.html:165 -#: stock/models.py:1559 templates/js/company.js:188 templates/js/company.js:318 -#: templates/js/part.js:430 +#: stock/models.py:1560 templates/js/company.js:188 templates/js/company.js:318 +#: templates/js/part.js:431 msgid "Link" msgstr "" @@ -1810,7 +1823,7 @@ msgstr "" #: company/models.py:323 company/templates/company/detail.html:57 #: company/templates/company/manufacturer_part_base.html:85 #: company/templates/company/manufacturer_part_detail.html:25 -#: company/templates/company/supplier_part_base.html:93 +#: company/templates/company/supplier_part_base.html:94 #: company/templates/company/supplier_part_detail.html:34 part/bom.py:170 #: part/bom.py:241 stock/templates/stock/item_base.html:341 #: templates/js/company.js:44 templates/js/company.js:165 @@ -1827,7 +1840,7 @@ msgid "Manufacturer part description" msgstr "" #: company/models.py:469 company/templates/company/detail.html:62 -#: company/templates/company/supplier_part_base.html:83 +#: company/templates/company/supplier_part_base.html:84 #: company/templates/company/supplier_part_detail.html:25 order/models.py:190 #: order/templates/order/order_base.html:92 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:175 @@ -1841,7 +1854,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:475 company/templates/company/supplier_part_base.html:87 +#: company/models.py:475 company/templates/company/supplier_part_base.html:88 #: company/templates/company/supplier_part_detail.html:26 #: order/templates/order/purchase_order_detail.html:174 part/bom.py:176 #: part/bom.py:287 @@ -1871,8 +1884,8 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:500 company/templates/company/supplier_part_base.html:114 -#: company/templates/company/supplier_part_detail.html:38 part/models.py:2170 +#: company/models.py:500 company/templates/company/supplier_part_base.html:115 +#: company/templates/company/supplier_part_detail.html:38 part/models.py:2190 #: report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" @@ -1886,7 +1899,7 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:506 company/templates/company/supplier_part_base.html:107 +#: company/models.py:506 company/templates/company/supplier_part_base.html:108 #: stock/models.py:397 stock/templates/stock/item_base.html:299 #: templates/js/stock.js:667 msgid "Packaging" @@ -2022,7 +2035,7 @@ msgstr "" #: company/templates/company/detail_manufacturer_part.html:66 #: company/templates/company/detail_supplier_part.html:66 #: part/templates/part/bom.html:159 part/templates/part/category.html:118 -#: templates/js/stock.js:1080 +#: templates/js/stock.js:1157 msgid "New Part" msgstr "" @@ -2069,7 +2082,7 @@ msgstr "" #: company/templates/company/detail_supplier_part.html:22 #: company/templates/company/manufacturer_part_suppliers.html:17 #: order/templates/order/purchase_order_detail.html:74 -#: part/templates/part/supplier.html:17 templates/js/stock.js:1086 +#: part/templates/part/supplier.html:17 templates/js/stock.js:1163 msgid "New Supplier Part" msgstr "" @@ -2085,12 +2098,12 @@ msgstr "" msgid "Create new Supplier" msgstr "" -#: company/templates/company/index.html:7 +#: company/templates/company/index.html:8 msgid "Supplier List" msgstr "" #: company/templates/company/manufacturer_part_base.html:36 -#: company/templates/company/supplier_part_base.html:35 +#: company/templates/company/supplier_part_base.html:36 #: company/templates/company/supplier_part_orders.html:17 #: part/templates/part/orders.html:17 part/templates/part/part_base.html:65 msgid "Order part" @@ -2111,7 +2124,7 @@ msgstr "" #: company/templates/company/manufacturer_part_base.html:62 #: company/templates/company/manufacturer_part_detail.html:18 -#: company/templates/company/supplier_part_base.html:60 +#: company/templates/company/supplier_part_base.html:61 #: company/templates/company/supplier_part_detail.html:18 msgid "Internal Part" msgstr "" @@ -2142,12 +2155,12 @@ msgstr "" #: company/templates/company/navbar.html:41 #: company/templates/company/supplier_part_navbar.html:15 #: part/templates/part/navbar.html:36 stock/api.py:51 -#: stock/templates/stock/loc_link.html:7 stock/templates/stock/location.html:29 -#: stock/templates/stock/stock_app_base.html:9 -#: templates/InvenTree/index.html:127 templates/InvenTree/search.html:196 +#: stock/templates/stock/loc_link.html:7 stock/templates/stock/location.html:36 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/index.html:128 templates/InvenTree/search.html:196 #: templates/InvenTree/search.html:232 -#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:172 -#: templates/js/part.js:397 templates/js/stock.js:563 templates/navbar.html:26 +#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:173 +#: templates/js/part.js:398 templates/js/stock.js:563 templates/navbar.html:26 msgid "Stock" msgstr "" @@ -2168,7 +2181,7 @@ msgstr "" #: company/templates/company/manufacturer_part_suppliers.html:22 #: part/templates/part/manufacturer.html:24 part/templates/part/params.html:44 #: part/templates/part/related.html:44 part/templates/part/supplier.html:22 -#: stock/views.py:1002 users/models.py:183 +#: stock/views.py:1002 users/models.py:184 msgid "Delete" msgstr "" @@ -2188,8 +2201,12 @@ msgid "Supplied Parts" msgstr "" #: company/templates/company/navbar.html:38 part/templates/part/navbar.html:33 -#: stock/templates/stock/location.html:100 -#: stock/templates/stock/location.html:115 templates/InvenTree/search.html:198 +#: stock/templates/stock/location.html:107 +#: stock/templates/stock/location.html:122 +#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location_navbar.html:22 +#: stock/templates/stock/location_navbar.html:29 +#: templates/InvenTree/search.html:198 templates/js/stock.js:968 #: templates/stats.html:72 templates/stats.html:81 users/models.py:40 msgid "Stock Items" msgstr "" @@ -2201,7 +2218,7 @@ msgstr "" #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:13 #: part/templates/part/navbar.html:98 part/templates/part/navbar.html:101 -#: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:227 +#: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:228 #: templates/InvenTree/search.html:345 #: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46 #: users/models.py:43 @@ -2213,7 +2230,7 @@ msgstr "" #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:13 #: part/templates/part/navbar.html:84 part/templates/part/navbar.html:87 -#: part/templates/part/orders.html:10 templates/InvenTree/index.html:204 +#: part/templates/part/orders.html:10 templates/InvenTree/index.html:205 #: templates/InvenTree/search.html:325 #: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37 #: users/models.py:42 @@ -2244,21 +2261,21 @@ msgstr "" msgid "New Sales Order" msgstr "" -#: company/templates/company/supplier_part_base.html:6 -#: company/templates/company/supplier_part_base.html:19 stock/models.py:382 +#: company/templates/company/supplier_part_base.html:7 +#: company/templates/company/supplier_part_base.html:20 stock/models.py:382 #: stock/templates/stock/item_base.html:358 templates/js/company.js:279 msgid "Supplier Part" msgstr "" -#: company/templates/company/supplier_part_base.html:39 +#: company/templates/company/supplier_part_base.html:40 msgid "Edit supplier part" msgstr "" -#: company/templates/company/supplier_part_base.html:43 +#: company/templates/company/supplier_part_base.html:44 msgid "Delete supplier part" msgstr "" -#: company/templates/company/supplier_part_base.html:55 +#: company/templates/company/supplier_part_base.html:56 #: company/templates/company/supplier_part_detail.html:10 msgid "Supplier Part Details" msgstr "" @@ -2397,7 +2414,7 @@ msgstr "" msgid "Edit Supplier Part" msgstr "" -#: company/views.py:578 templates/js/stock.js:1087 +#: company/views.py:578 templates/js/stock.js:1164 msgid "Create new Supplier Part" msgstr "" @@ -2583,7 +2600,7 @@ msgid "Date order was completed" msgstr "" #: order/models.py:243 order/models.py:342 part/views.py:1586 -#: stock/models.py:270 stock/models.py:952 +#: stock/models.py:270 stock/models.py:953 msgid "Quantity must be greater than zero" msgstr "" @@ -2857,15 +2874,15 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:45 #: order/templates/order/purchase_order_detail.html:125 -#: part/templates/part/category.html:197 part/templates/part/category.html:239 +#: part/templates/part/category.html:185 part/templates/part/category.html:227 #: stock/templates/stock/location.html:191 templates/js/stock.js:708 -#: templates/js/stock.js:1092 +#: templates/js/stock.js:1169 msgid "New Location" msgstr "" #: order/templates/order/purchase_order_detail.html:46 #: order/templates/order/purchase_order_detail.html:126 -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/location.html:42 msgid "Create new stock location" msgstr "" @@ -2902,13 +2919,14 @@ msgstr "" #: order/templates/order/receive_parts.html:14 part/api.py:40 #: part/models.py:322 part/templates/part/cat_link.html:7 -#: part/templates/part/category.html:95 -#: part/templates/part/category_navbar.html:11 -#: part/templates/part/category_navbar.html:14 +#: part/templates/part/category.html:99 +#: part/templates/part/category_navbar.html:22 +#: part/templates/part/category_navbar.html:29 #: part/templates/part/category_partlist.html:10 -#: templates/InvenTree/index.html:96 templates/InvenTree/search.html:114 -#: templates/InvenTree/settings/tabs.html:25 templates/navbar.html:23 -#: templates/stats.html:59 templates/stats.html:68 users/models.py:38 +#: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114 +#: templates/InvenTree/settings/tabs.html:25 templates/js/part.js:577 +#: templates/navbar.html:23 templates/stats.html:59 templates/stats.html:68 +#: users/models.py:38 msgid "Parts" msgstr "" @@ -2921,7 +2939,7 @@ msgid "Order Code" msgstr "" #: order/templates/order/receive_parts.html:21 -#: part/templates/part/part_base.html:129 templates/js/part.js:413 +#: part/templates/part/part_base.html:129 templates/js/part.js:414 msgid "On Order" msgstr "" @@ -3228,7 +3246,7 @@ msgid "Remove allocation" msgstr "" #: part/bom.py:138 part/models.py:72 part/models.py:762 -#: part/templates/part/category.html:62 part/templates/part/detail.html:90 +#: part/templates/part/category.html:66 part/templates/part/detail.html:90 msgid "Default Location" msgstr "" @@ -3305,7 +3323,7 @@ msgstr "" msgid "Include part supplier data in exported BOM" msgstr "" -#: part/forms.py:122 part/models.py:2057 +#: part/forms.py:122 part/models.py:2077 msgid "Parent Part" msgstr "" @@ -3381,7 +3399,7 @@ msgstr "" msgid "Add parameter template to all categories" msgstr "" -#: part/forms.py:344 part/models.py:2151 +#: part/forms.py:344 part/models.py:2171 msgid "Sub part" msgstr "" @@ -3401,13 +3419,13 @@ msgstr "" msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:82 part/models.py:2103 -#: part/templates/part/part_app_base.html:9 +#: part/models.py:82 part/models.py:2123 +#: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:83 part/templates/part/category.html:19 -#: part/templates/part/category.html:90 part/templates/part/category.html:141 +#: part/models.py:83 part/templates/part/category.html:23 +#: part/templates/part/category.html:94 part/templates/part/category.html:141 #: templates/InvenTree/search.html:127 templates/stats.html:63 #: users/models.py:37 msgid "Part Categories" @@ -3462,7 +3480,7 @@ msgstr "" msgid "Part description" msgstr "" -#: part/models.py:716 part/templates/part/category.html:69 +#: part/models.py:716 part/templates/part/category.html:73 #: part/templates/part/detail.html:67 msgid "Keywords" msgstr "" @@ -3471,8 +3489,8 @@ msgstr "" msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:724 part/models.py:2102 part/templates/part/detail.html:73 -#: part/templates/part/set_category.html:15 templates/js/part.js:384 +#: part/models.py:724 part/models.py:2122 part/templates/part/detail.html:73 +#: part/templates/part/set_category.html:15 templates/js/part.js:385 msgid "Category" msgstr "" @@ -3481,7 +3499,7 @@ msgid "Part category" msgstr "" #: part/models.py:730 part/templates/part/detail.html:28 -#: part/templates/part/part_base.html:94 templates/js/part.js:160 +#: part/templates/part/part_base.html:94 templates/js/part.js:161 msgid "IPN" msgstr "" @@ -3494,7 +3512,7 @@ msgid "Part revision or version number" msgstr "" #: part/models.py:738 part/templates/part/detail.html:35 report/models.py:198 -#: templates/js/part.js:164 +#: templates/js/part.js:165 msgid "Revision" msgstr "" @@ -3526,7 +3544,7 @@ msgstr "" msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:828 part/models.py:2031 part/templates/part/detail.html:106 +#: part/models.py:828 part/models.py:2051 part/templates/part/detail.html:106 #: part/templates/part/params.html:29 msgid "Units" msgstr "" @@ -3557,7 +3575,7 @@ msgstr "" #: part/models.py:861 part/templates/part/detail.html:227 #: templates/js/table_filters.js:20 templates/js/table_filters.js:60 -#: templates/js/table_filters.js:214 templates/js/table_filters.js:283 +#: templates/js/table_filters.js:236 templates/js/table_filters.js:305 msgid "Active" msgstr "" @@ -3593,167 +3611,167 @@ msgstr "" msgid "Creation User" msgstr "" -#: part/models.py:1929 +#: part/models.py:1949 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:1946 +#: part/models.py:1966 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:1966 templates/js/part.js:561 templates/js/stock.js:104 +#: part/models.py:1986 templates/js/part.js:638 templates/js/stock.js:104 msgid "Test Name" msgstr "" -#: part/models.py:1967 +#: part/models.py:1987 msgid "Enter a name for the test" msgstr "" -#: part/models.py:1972 +#: part/models.py:1992 msgid "Test Description" msgstr "" -#: part/models.py:1973 +#: part/models.py:1993 msgid "Enter description for this test" msgstr "" -#: part/models.py:1978 templates/js/part.js:570 -#: templates/js/table_filters.js:200 +#: part/models.py:1998 templates/js/part.js:647 +#: templates/js/table_filters.js:222 msgid "Required" msgstr "" -#: part/models.py:1979 +#: part/models.py:1999 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:1984 templates/js/part.js:578 +#: part/models.py:2004 templates/js/part.js:655 msgid "Requires Value" msgstr "" -#: part/models.py:1985 +#: part/models.py:2005 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:1990 templates/js/part.js:585 +#: part/models.py:2010 templates/js/part.js:662 msgid "Requires Attachment" msgstr "" -#: part/models.py:1991 +#: part/models.py:2011 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2024 +#: part/models.py:2044 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2029 +#: part/models.py:2049 msgid "Parameter Name" msgstr "" -#: part/models.py:2031 +#: part/models.py:2051 msgid "Parameter Units" msgstr "" -#: part/models.py:2059 part/models.py:2108 part/models.py:2109 +#: part/models.py:2079 part/models.py:2128 part/models.py:2129 #: templates/InvenTree/settings/category.html:62 msgid "Parameter Template" msgstr "" -#: part/models.py:2061 +#: part/models.py:2081 msgid "Data" msgstr "" -#: part/models.py:2061 +#: part/models.py:2081 msgid "Parameter Value" msgstr "" -#: part/models.py:2113 templates/InvenTree/settings/category.html:67 +#: part/models.py:2133 templates/InvenTree/settings/category.html:67 msgid "Default Value" msgstr "" -#: part/models.py:2114 +#: part/models.py:2134 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2143 +#: part/models.py:2163 msgid "Select parent part" msgstr "" -#: part/models.py:2152 +#: part/models.py:2172 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2158 +#: part/models.py:2178 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2160 templates/js/bom.js:216 templates/js/bom.js:269 +#: part/models.py:2180 templates/js/bom.js:216 templates/js/bom.js:269 msgid "Optional" msgstr "" -#: part/models.py:2160 +#: part/models.py:2180 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2163 +#: part/models.py:2183 msgid "Overage" msgstr "" -#: part/models.py:2164 +#: part/models.py:2184 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2167 +#: part/models.py:2187 msgid "BOM item reference" msgstr "" -#: part/models.py:2170 +#: part/models.py:2190 msgid "BOM item notes" msgstr "" -#: part/models.py:2172 +#: part/models.py:2192 msgid "Checksum" msgstr "" -#: part/models.py:2172 +#: part/models.py:2192 msgid "BOM line checksum" msgstr "" -#: part/models.py:2176 templates/js/bom.js:279 templates/js/bom.js:286 +#: part/models.py:2196 templates/js/bom.js:279 templates/js/bom.js:286 #: templates/js/table_filters.js:50 msgid "Inherited" msgstr "" -#: part/models.py:2177 +#: part/models.py:2197 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2253 part/views.py:1592 part/views.py:1644 +#: part/models.py:2273 part/views.py:1592 part/views.py:1644 #: stock/models.py:260 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2262 part/models.py:2264 +#: part/models.py:2282 part/models.py:2284 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2267 +#: part/models.py:2287 msgid "BOM Item" msgstr "" -#: part/models.py:2384 +#: part/models.py:2404 msgid "Part 1" msgstr "" -#: part/models.py:2388 +#: part/models.py:2408 msgid "Part 2" msgstr "" -#: part/models.py:2388 +#: part/models.py:2408 msgid "Select Related Part" msgstr "" -#: part/models.py:2420 +#: part/models.py:2440 msgid "" "Error creating relationship: check that the part is not related to itself " "and that the relationship is unique" @@ -3841,7 +3859,7 @@ msgid "All selected BOM items will be deleted" msgstr "" #: part/templates/part/bom.html:160 part/views.py:584 -#: templates/js/stock.js:1081 +#: templates/js/stock.js:1158 msgid "Create New Part" msgstr "" @@ -3957,39 +3975,42 @@ msgstr "" msgid "Start New Build" msgstr "" -#: part/templates/part/category.html:20 +#: part/templates/part/category.html:24 msgid "All parts" msgstr "" -#: part/templates/part/category.html:25 part/views.py:2270 +#: part/templates/part/category.html:29 part/views.py:2270 msgid "Create new part category" msgstr "" -#: part/templates/part/category.html:31 +#: part/templates/part/category.html:35 msgid "Edit part category" msgstr "" -#: part/templates/part/category.html:36 +#: part/templates/part/category.html:40 msgid "Delete part category" msgstr "" -#: part/templates/part/category.html:46 part/templates/part/category.html:85 +#: part/templates/part/category.html:50 part/templates/part/category.html:89 msgid "Category Details" msgstr "" -#: part/templates/part/category.html:51 +#: part/templates/part/category.html:55 msgid "Category Path" msgstr "" -#: part/templates/part/category.html:56 +#: part/templates/part/category.html:60 msgid "Category Description" msgstr "" -#: part/templates/part/category.html:75 +#: part/templates/part/category.html:79 +#: part/templates/part/category_navbar.html:11 +#: part/templates/part/category_navbar.html:18 +#: part/templates/part/subcategory.html:16 msgid "Subcategories" msgstr "" -#: part/templates/part/category.html:80 +#: part/templates/part/category.html:84 msgid "Parts (Including subcategories)" msgstr "" @@ -4009,24 +4030,24 @@ msgstr "" msgid "Export Data" msgstr "" -#: part/templates/part/category.html:198 +#: part/templates/part/category.html:186 #: stock/templates/stock/location.html:192 templates/js/stock.js:709 msgid "Create new location" msgstr "" -#: part/templates/part/category.html:203 part/templates/part/category.html:233 +#: part/templates/part/category.html:191 part/templates/part/category.html:221 msgid "New Category" msgstr "" -#: part/templates/part/category.html:204 +#: part/templates/part/category.html:192 msgid "Create new category" msgstr "" -#: part/templates/part/category.html:234 +#: part/templates/part/category.html:222 msgid "Create new Part Category" msgstr "" -#: part/templates/part/category.html:240 stock/views.py:1359 +#: part/templates/part/category.html:228 stock/views.py:1359 msgid "Create new Stock Location" msgstr "" @@ -4070,8 +4091,8 @@ msgid "" "category Teile" msgstr "" -#: part/templates/part/category_navbar.html:18 -#: part/templates/part/category_navbar.html:21 +#: part/templates/part/category_navbar.html:34 +#: part/templates/part/category_navbar.html:37 #: part/templates/part/navbar.html:22 msgid "Parameters" msgstr "" @@ -4255,7 +4276,7 @@ msgstr "" #: part/templates/part/params.html:28 #: report/templates/report/inventree_test_report_base.html:90 -#: stock/models.py:1654 templates/InvenTree/settings/header.html:8 +#: stock/models.py:1655 templates/InvenTree/settings/header.html:8 #: templates/js/stock.js:124 msgid "Value" msgstr "" @@ -4272,7 +4293,7 @@ msgstr "" msgid "Create New Parameter Template" msgstr "" -#: part/templates/part/part_app_base.html:11 +#: part/templates/part/part_app_base.html:12 msgid "Part List" msgstr "" @@ -4282,7 +4303,7 @@ msgid "This part is a variant of %(link)s" msgstr "" #: part/templates/part/part_base.html:33 templates/js/company.js:156 -#: templates/js/company.js:254 templates/js/part.js:75 templates/js/part.js:152 +#: templates/js/company.js:254 templates/js/part.js:76 templates/js/part.js:153 msgid "Inactive" msgstr "" @@ -4292,19 +4313,19 @@ msgstr "" #: part/templates/part/part_base.html:47 #: stock/templates/stock/item_base.html:131 -#: stock/templates/stock/location.html:44 +#: stock/templates/stock/location.html:51 msgid "Barcode actions" msgstr "" #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:133 -#: stock/templates/stock/location.html:46 templates/qr_button.html:1 +#: stock/templates/stock/location.html:53 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" #: part/templates/part/part_base.html:50 #: stock/templates/stock/item_base.html:149 -#: stock/templates/stock/location.html:47 +#: stock/templates/stock/location.html:54 msgid "Print Label" msgstr "" @@ -4332,11 +4353,11 @@ msgstr "" msgid "Delete part" msgstr "" -#: part/templates/part/part_base.html:123 templates/js/table_filters.js:134 +#: part/templates/part/part_base.html:123 templates/js/table_filters.js:156 msgid "In Stock" msgstr "" -#: part/templates/part/part_base.html:136 templates/InvenTree/index.html:130 +#: part/templates/part/part_base.html:136 templates/InvenTree/index.html:131 msgid "Required for Build Orders" msgstr "" @@ -4352,7 +4373,7 @@ msgstr "" msgid "Can Build" msgstr "" -#: part/templates/part/part_base.html:171 templates/js/part.js:417 +#: part/templates/part/part_base.html:171 templates/js/part.js:418 msgid "Building" msgstr "" @@ -4477,18 +4498,14 @@ msgid "Showing stock for all variants of %(full_name)s" msgstr "" #: part/templates/part/stock_count.html:7 templates/js/bom.js:239 -#: templates/js/part.js:421 +#: templates/js/part.js:422 msgid "No Stock" msgstr "" -#: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:129 +#: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:130 msgid "Low Stock" msgstr "" -#: part/templates/part/subcategories.html:5 -msgid "Child Categories" -msgstr "" - #: part/templates/part/supplier.html:10 msgid "Part Suppliers" msgstr "" @@ -4825,17 +4842,17 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:1642 +#: stock/models.py:1643 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:89 -#: stock/models.py:1648 +#: stock/models.py:1649 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:92 -#: templates/js/order.js:195 templates/js/stock.js:909 +#: templates/js/order.js:195 templates/js/stock.js:986 msgid "Date" msgstr "" @@ -4892,7 +4909,8 @@ msgstr "" msgid "Select test report template" msgstr "" -#: stock/forms.py:267 templates/js/table_filters.js:111 +#: stock/forms.py:267 templates/js/table_filters.js:70 +#: templates/js/table_filters.js:133 msgid "Include sublocations" msgstr "" @@ -5001,7 +5019,7 @@ msgstr "" msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:388 stock/templates/stock/stock_app_base.html:7 +#: stock/models.py:388 stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" @@ -5091,101 +5109,101 @@ msgstr "" msgid "Returned to location" msgstr "" -#: stock/models.py:791 +#: stock/models.py:792 msgid "Installed into stock item" msgstr "" -#: stock/models.py:799 +#: stock/models.py:800 msgid "Installed stock item" msgstr "" -#: stock/models.py:823 +#: stock/models.py:824 msgid "Uninstalled stock item" msgstr "" -#: stock/models.py:842 +#: stock/models.py:843 msgid "Uninstalled into location" msgstr "" -#: stock/models.py:943 +#: stock/models.py:944 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:949 +#: stock/models.py:950 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:955 +#: stock/models.py:956 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:958 +#: stock/models.py:959 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:961 +#: stock/models.py:962 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:993 +#: stock/models.py:994 msgid "Add serial number" msgstr "" -#: stock/models.py:996 +#: stock/models.py:997 #, python-brace-format msgid "Serialized {n} items" msgstr "" -#: stock/models.py:1074 +#: stock/models.py:1075 msgid "Split from existing stock" msgstr "" -#: stock/models.py:1112 +#: stock/models.py:1113 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1555 +#: stock/models.py:1556 msgid "Title" msgstr "" -#: stock/models.py:1555 +#: stock/models.py:1556 msgid "Tracking entry title" msgstr "" -#: stock/models.py:1557 +#: stock/models.py:1558 msgid "Entry notes" msgstr "" -#: stock/models.py:1559 +#: stock/models.py:1560 msgid "Link to external page for further information" msgstr "" -#: stock/models.py:1619 +#: stock/models.py:1620 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1625 +#: stock/models.py:1626 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1643 +#: stock/models.py:1644 msgid "Test name" msgstr "" -#: stock/models.py:1649 templates/js/table_filters.js:190 +#: stock/models.py:1650 templates/js/table_filters.js:212 msgid "Test result" msgstr "" -#: stock/models.py:1655 +#: stock/models.py:1656 msgid "Test output value" msgstr "" -#: stock/models.py:1662 +#: stock/models.py:1663 msgid "Test result attachment" msgstr "" -#: stock/models.py:1668 +#: stock/models.py:1669 msgid "Test notes" msgstr "" @@ -5246,12 +5264,12 @@ msgid "" msgstr "" #: stock/templates/stock/item_base.html:95 -#: stock/templates/stock/item_base.html:369 templates/js/table_filters.js:123 +#: stock/templates/stock/item_base.html:369 templates/js/table_filters.js:145 msgid "Expired" msgstr "" #: stock/templates/stock/item_base.html:99 -#: stock/templates/stock/item_base.html:371 templates/js/table_filters.js:128 +#: stock/templates/stock/item_base.html:371 templates/js/table_filters.js:150 msgid "Stale" msgstr "" @@ -5282,15 +5300,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:164 -#: stock/templates/stock/location.html:58 templates/stock_table.html:55 +#: stock/templates/stock/location.html:65 templates/stock_table.html:56 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:167 templates/stock_table.html:53 +#: stock/templates/stock/item_base.html:167 templates/stock_table.html:54 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:170 templates/stock_table.html:54 +#: stock/templates/stock/item_base.html:170 templates/stock_table.html:55 msgid "Remove stock" msgstr "" @@ -5310,7 +5328,7 @@ msgstr "" msgid "Return to stock" msgstr "" -#: stock/templates/stock/item_base.html:187 templates/js/stock.js:1222 +#: stock/templates/stock/item_base.html:187 templates/js/stock.js:1299 msgid "Uninstall stock item" msgstr "" @@ -5319,7 +5337,7 @@ msgid "Uninstall" msgstr "" #: stock/templates/stock/item_base.html:196 -#: stock/templates/stock/location.html:55 +#: stock/templates/stock/location.html:62 msgid "Stock actions" msgstr "" @@ -5437,53 +5455,56 @@ msgstr "" msgid "Add Test Data" msgstr "" -#: stock/templates/stock/location.html:13 +#: stock/templates/stock/location.html:20 msgid "" "You are not in the list of owners of this location. This stock location " "cannot be edited." msgstr "" -#: stock/templates/stock/location.html:30 +#: stock/templates/stock/location.html:37 msgid "All stock items" msgstr "" -#: stock/templates/stock/location.html:48 +#: stock/templates/stock/location.html:55 msgid "Check-in Items" msgstr "" -#: stock/templates/stock/location.html:64 +#: stock/templates/stock/location.html:71 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:66 +#: stock/templates/stock/location.html:73 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:68 +#: stock/templates/stock/location.html:75 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:80 +#: stock/templates/stock/location.html:87 msgid "Location Details" msgstr "" -#: stock/templates/stock/location.html:85 +#: stock/templates/stock/location.html:92 msgid "Location Path" msgstr "" -#: stock/templates/stock/location.html:90 +#: stock/templates/stock/location.html:97 msgid "Location Description" msgstr "" -#: stock/templates/stock/location.html:95 +#: stock/templates/stock/location.html:102 +#: stock/templates/stock/location_navbar.html:11 +#: stock/templates/stock/location_navbar.html:18 +#: stock/templates/stock/sublocation.html:16 msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:105 +#: stock/templates/stock/location.html:112 msgid "Stock Details" msgstr "" -#: stock/templates/stock/location.html:110 templates/InvenTree/search.html:279 +#: stock/templates/stock/location.html:117 templates/InvenTree/search.html:279 #: templates/stats.html:76 users/models.py:39 msgid "Stock Locations" msgstr "" @@ -5492,18 +5513,6 @@ msgstr "" msgid "Are you sure you want to delete this stock location?" msgstr "" -#: stock/templates/stock/location_list.html:6 -msgid "Sub-Locations" -msgstr "" - -#. Translators: pluralize with counter -#: stock/templates/stock/location_list.html:17 -#, python-format -msgid "%(counter)s Item" -msgid_plural "%(counter)s Items" -msgstr[0] "" -msgstr[1] "" - #: stock/templates/stock/navbar.html:11 msgid "Stock Item Tracking" msgstr "" @@ -5528,7 +5537,7 @@ msgstr "" msgid "Remove item" msgstr "" -#: stock/templates/stock/stock_app_base.html:15 +#: stock/templates/stock/stock_app_base.html:16 msgid "Loading..." msgstr "" @@ -5553,6 +5562,14 @@ msgstr "" msgid "This action cannot be easily undone" msgstr "" +#: stock/templates/stock/sublocation.html:23 templates/stock_table.html:37 +msgid "Printing Actions" +msgstr "" + +#: stock/templates/stock/sublocation.html:27 templates/stock_table.html:41 +msgid "Print labels" +msgstr "" + #: stock/templates/stock/tracking_delete.html:6 msgid "Are you sure you want to delete this stock tracking entry?" msgstr "" @@ -5674,7 +5691,7 @@ msgstr "" msgid "Add Stock Items" msgstr "" -#: stock/views.py:1001 users/models.py:179 +#: stock/views.py:1001 users/models.py:180 msgid "Add" msgstr "" @@ -5784,55 +5801,55 @@ msgstr "" msgid "The requested page does not exist" msgstr "" -#: templates/InvenTree/index.html:6 +#: templates/InvenTree/index.html:7 msgid "Index" msgstr "" -#: templates/InvenTree/index.html:97 +#: templates/InvenTree/index.html:98 msgid "Starred Parts" msgstr "" -#: templates/InvenTree/index.html:98 +#: templates/InvenTree/index.html:99 msgid "Latest Parts" msgstr "" -#: templates/InvenTree/index.html:99 +#: templates/InvenTree/index.html:100 msgid "BOM Waiting Validation" msgstr "" -#: templates/InvenTree/index.html:128 +#: templates/InvenTree/index.html:129 msgid "Recently Updated" msgstr "" -#: templates/InvenTree/index.html:144 +#: templates/InvenTree/index.html:145 msgid "Expired Stock" msgstr "" -#: templates/InvenTree/index.html:145 +#: templates/InvenTree/index.html:146 msgid "Stale Stock" msgstr "" -#: templates/InvenTree/index.html:183 +#: templates/InvenTree/index.html:184 msgid "Build Orders In Progress" msgstr "" -#: templates/InvenTree/index.html:184 +#: templates/InvenTree/index.html:185 msgid "Overdue Build Orders" msgstr "" -#: templates/InvenTree/index.html:205 +#: templates/InvenTree/index.html:206 msgid "Outstanding Purchase Orders" msgstr "" -#: templates/InvenTree/index.html:206 +#: templates/InvenTree/index.html:207 msgid "Overdue Purchase Orders" msgstr "" -#: templates/InvenTree/index.html:228 +#: templates/InvenTree/index.html:229 msgid "Outstanding Sales Orders" msgstr "" -#: templates/InvenTree/index.html:229 +#: templates/InvenTree/index.html:230 msgid "Overdue Sales Orders" msgstr "" @@ -5882,7 +5899,7 @@ msgstr "" msgid "Global InvenTree Settings" msgstr "" -#: templates/InvenTree/settings/global.html:26 +#: templates/InvenTree/settings/global.html:27 msgid "Barcode Settings" msgstr "" @@ -5922,8 +5939,8 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:7 -#: templates/InvenTree/settings/settings.html:13 templates/navbar.html:84 +#: templates/InvenTree/settings/settings.html:8 +#: templates/InvenTree/settings/settings.html:14 templates/navbar.html:84 msgid "Settings" msgstr "" @@ -5935,7 +5952,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:48 +#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:49 msgid "Stock Options" msgstr "" @@ -5995,7 +6012,7 @@ msgid "Change Password" msgstr "" #: templates/InvenTree/settings/user.html:28 -#: templates/registration/login.html:58 +#: templates/registration/login.html:59 msgid "Username" msgstr "" @@ -6251,7 +6268,7 @@ msgid "Quantity Per" msgstr "" #: templates/js/build.js:582 templates/js/build.js:996 -#: templates/stock_table.html:57 +#: templates/stock_table.html:58 msgid "Order stock" msgstr "" @@ -6259,8 +6276,9 @@ msgstr "" msgid "No builds matching query" msgstr "" -#: templates/js/build.js:649 templates/js/part.js:323 templates/js/stock.js:511 -#: templates/js/stock.js:1254 +#: templates/js/build.js:649 templates/js/part.js:324 templates/js/part.js:546 +#: templates/js/stock.js:511 templates/js/stock.js:938 +#: templates/js/stock.js:1331 msgid "Select" msgstr "" @@ -6289,12 +6307,12 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/company.js:148 templates/js/company.js:246 -#: templates/js/part.js:59 templates/js/part.js:144 +#: templates/js/part.js:60 templates/js/part.js:145 msgid "Template part" msgstr "" #: templates/js/company.js:152 templates/js/company.js:250 -#: templates/js/part.js:63 templates/js/part.js:148 +#: templates/js/part.js:64 templates/js/part.js:149 msgid "Assembled part" msgstr "" @@ -6468,59 +6486,63 @@ msgstr "" msgid "No sales orders found" msgstr "" -#: templates/js/part.js:51 templates/js/part.js:136 +#: templates/js/part.js:52 templates/js/part.js:137 msgid "Trackable part" msgstr "" -#: templates/js/part.js:55 templates/js/part.js:140 +#: templates/js/part.js:56 templates/js/part.js:141 msgid "Virtual part" msgstr "" -#: templates/js/part.js:67 +#: templates/js/part.js:68 msgid "Starred part" msgstr "" -#: templates/js/part.js:71 +#: templates/js/part.js:72 msgid "Salable part" msgstr "" -#: templates/js/part.js:185 +#: templates/js/part.js:186 msgid "No variants found" msgstr "" -#: templates/js/part.js:271 templates/js/part.js:451 +#: templates/js/part.js:272 templates/js/part.js:452 msgid "No parts found" msgstr "" -#: templates/js/part.js:390 +#: templates/js/part.js:391 msgid "No category" msgstr "" -#: templates/js/part.js:408 templates/js/table_filters.js:296 +#: templates/js/part.js:409 templates/js/table_filters.js:318 msgid "Low stock" msgstr "" -#: templates/js/part.js:511 +#: templates/js/part.js:571 templates/js/stock.js:962 +msgid "Path" +msgstr "" + +#: templates/js/part.js:588 msgid "YES" msgstr "" -#: templates/js/part.js:513 +#: templates/js/part.js:590 msgid "NO" msgstr "" -#: templates/js/part.js:547 +#: templates/js/part.js:624 msgid "No test templates matching query" msgstr "" -#: templates/js/part.js:598 templates/js/stock.js:75 +#: templates/js/part.js:675 templates/js/stock.js:75 msgid "Edit test result" msgstr "" -#: templates/js/part.js:599 templates/js/stock.js:76 +#: templates/js/part.js:676 templates/js/stock.js:76 msgid "Delete test result" msgstr "" -#: templates/js/part.js:605 +#: templates/js/part.js:682 msgid "This test is defined for a parent part" msgstr "" @@ -6690,7 +6712,7 @@ msgstr "" msgid "Stock item is destroyed" msgstr "" -#: templates/js/stock.js:620 templates/js/table_filters.js:116 +#: templates/js/stock.js:620 templates/js/table_filters.js:138 msgid "Depleted" msgstr "" @@ -6714,31 +6736,31 @@ msgstr "" msgid "Status code must be selected" msgstr "" -#: templates/js/stock.js:973 +#: templates/js/stock.js:1050 msgid "No user information" msgstr "" -#: templates/js/stock.js:983 +#: templates/js/stock.js:1060 msgid "Edit tracking entry" msgstr "" -#: templates/js/stock.js:984 +#: templates/js/stock.js:1061 msgid "Delete tracking entry" msgstr "" -#: templates/js/stock.js:1093 +#: templates/js/stock.js:1170 msgid "Create New Location" msgstr "" -#: templates/js/stock.js:1192 +#: templates/js/stock.js:1269 msgid "Serial" msgstr "" -#: templates/js/stock.js:1285 templates/js/table_filters.js:149 +#: templates/js/stock.js:1362 templates/js/table_filters.js:171 msgid "Installed" msgstr "" -#: templates/js/stock.js:1310 +#: templates/js/stock.js:1387 msgid "Install item" msgstr "" @@ -6750,148 +6772,153 @@ msgstr "" msgid "Validated" msgstr "" -#: templates/js/table_filters.js:70 templates/js/table_filters.js:159 -msgid "Is Serialized" -msgstr "" - -#: templates/js/table_filters.js:73 templates/js/table_filters.js:166 -msgid "Serial number GTE" -msgstr "" - -#: templates/js/table_filters.js:74 templates/js/table_filters.js:167 -msgid "Serial number greater than or equal to" -msgstr "" - -#: templates/js/table_filters.js:77 templates/js/table_filters.js:170 -msgid "Serial number LTE" -msgstr "" - -#: templates/js/table_filters.js:78 templates/js/table_filters.js:171 -msgid "Serial number less than or equal to" +#: templates/js/table_filters.js:71 +msgid "Include locations" msgstr "" #: templates/js/table_filters.js:81 templates/js/table_filters.js:82 -#: templates/js/table_filters.js:162 templates/js/table_filters.js:163 -msgid "Serial number" -msgstr "" - -#: templates/js/table_filters.js:86 templates/js/table_filters.js:180 -msgid "Batch code" -msgstr "" - -#: templates/js/table_filters.js:96 templates/js/table_filters.js:263 -msgid "Active parts" -msgstr "" - -#: templates/js/table_filters.js:97 -msgid "Show stock for active parts" -msgstr "" - -#: templates/js/table_filters.js:102 -msgid "Part is an assembly" -msgstr "" - -#: templates/js/table_filters.js:106 -msgid "Is allocated" -msgstr "" - -#: templates/js/table_filters.js:107 -msgid "Item has been allocated" -msgstr "" - -#: templates/js/table_filters.js:112 -msgid "Include stock in sublocations" -msgstr "" - -#: templates/js/table_filters.js:117 -msgid "Show stock items which are depleted" -msgstr "" - -#: templates/js/table_filters.js:124 -msgid "Show stock items which have expired" -msgstr "" - -#: templates/js/table_filters.js:129 -msgid "Show stock which is close to expiring" -msgstr "" - -#: templates/js/table_filters.js:135 -msgid "Show items which are in stock" -msgstr "" - -#: templates/js/table_filters.js:139 -msgid "In Production" -msgstr "" - -#: templates/js/table_filters.js:140 -msgid "Show items which are in production" -msgstr "" - -#: templates/js/table_filters.js:144 -msgid "Include Variants" -msgstr "" - -#: templates/js/table_filters.js:145 -msgid "Include stock items for variant parts" -msgstr "" - -#: templates/js/table_filters.js:150 -msgid "Show stock items which are installed in another item" -msgstr "" - -#: templates/js/table_filters.js:154 -msgid "Sent to customer" -msgstr "" - -#: templates/js/table_filters.js:155 -msgid "Show items which have been assigned to a customer" -msgstr "" - -#: templates/js/table_filters.js:175 templates/js/table_filters.js:176 -msgid "Stock status" -msgstr "" - -#: templates/js/table_filters.js:209 -msgid "Build status" -msgstr "" - -#: templates/js/table_filters.js:228 templates/js/table_filters.js:245 -msgid "Order status" -msgstr "" - -#: templates/js/table_filters.js:233 templates/js/table_filters.js:250 -msgid "Outstanding" -msgstr "" - -#: templates/js/table_filters.js:273 +#: templates/js/table_filters.js:295 msgid "Include subcategories" msgstr "" -#: templates/js/table_filters.js:274 +#: templates/js/table_filters.js:92 templates/js/table_filters.js:181 +msgid "Is Serialized" +msgstr "" + +#: templates/js/table_filters.js:95 templates/js/table_filters.js:188 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/table_filters.js:96 templates/js/table_filters.js:189 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/table_filters.js:99 templates/js/table_filters.js:192 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/table_filters.js:100 templates/js/table_filters.js:193 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/table_filters.js:103 templates/js/table_filters.js:104 +#: templates/js/table_filters.js:184 templates/js/table_filters.js:185 +msgid "Serial number" +msgstr "" + +#: templates/js/table_filters.js:108 templates/js/table_filters.js:202 +msgid "Batch code" +msgstr "" + +#: templates/js/table_filters.js:118 templates/js/table_filters.js:285 +msgid "Active parts" +msgstr "" + +#: templates/js/table_filters.js:119 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/table_filters.js:124 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/table_filters.js:128 +msgid "Is allocated" +msgstr "" + +#: templates/js/table_filters.js:129 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/table_filters.js:134 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/table_filters.js:139 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/table_filters.js:146 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/table_filters.js:151 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/table_filters.js:157 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/table_filters.js:161 +msgid "In Production" +msgstr "" + +#: templates/js/table_filters.js:162 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/table_filters.js:166 +msgid "Include Variants" +msgstr "" + +#: templates/js/table_filters.js:167 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/table_filters.js:172 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/table_filters.js:176 +msgid "Sent to customer" +msgstr "" + +#: templates/js/table_filters.js:177 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/table_filters.js:197 templates/js/table_filters.js:198 +msgid "Stock status" +msgstr "" + +#: templates/js/table_filters.js:231 +msgid "Build status" +msgstr "" + +#: templates/js/table_filters.js:250 templates/js/table_filters.js:267 +msgid "Order status" +msgstr "" + +#: templates/js/table_filters.js:255 templates/js/table_filters.js:272 +msgid "Outstanding" +msgstr "" + +#: templates/js/table_filters.js:296 msgid "Include parts in subcategories" msgstr "" -#: templates/js/table_filters.js:278 +#: templates/js/table_filters.js:300 msgid "Has IPN" msgstr "" -#: templates/js/table_filters.js:279 +#: templates/js/table_filters.js:301 msgid "Part has internal part number" msgstr "" -#: templates/js/table_filters.js:284 +#: templates/js/table_filters.js:306 msgid "Show active parts" msgstr "" -#: templates/js/table_filters.js:292 +#: templates/js/table_filters.js:314 msgid "Stock available" msgstr "" -#: templates/js/table_filters.js:308 +#: templates/js/table_filters.js:330 msgid "Starred" msgstr "" -#: templates/js/table_filters.js:320 +#: templates/js/table_filters.js:342 msgid "Purchasable" msgstr "" @@ -6972,7 +6999,7 @@ msgstr "" msgid "Logout" msgstr "" -#: templates/navbar.html:81 templates/registration/login.html:89 +#: templates/navbar.html:81 templates/registration/login.html:90 msgid "Login" msgstr "" @@ -6984,73 +7011,73 @@ msgstr "" msgid "QR data not provided" msgstr "" -#: templates/registration/logged_out.html:50 +#: templates/registration/logged_out.html:51 msgid "You have been logged out" msgstr "" -#: templates/registration/logged_out.html:51 -#: templates/registration/password_reset_complete.html:51 -#: templates/registration/password_reset_done.html:58 +#: templates/registration/logged_out.html:52 +#: templates/registration/password_reset_complete.html:52 +#: templates/registration/password_reset_done.html:59 msgid "Return to login screen" msgstr "" -#: templates/registration/login.html:64 +#: templates/registration/login.html:65 msgid "Enter username" msgstr "" -#: templates/registration/login.html:70 +#: templates/registration/login.html:71 msgid "Password" msgstr "" -#: templates/registration/login.html:83 +#: templates/registration/login.html:84 msgid "Username / password combination is incorrect" msgstr "" -#: templates/registration/login.html:95 -#: templates/registration/password_reset_form.html:51 +#: templates/registration/login.html:96 +#: templates/registration/password_reset_form.html:52 msgid "Forgotten your password?" msgstr "" -#: templates/registration/login.html:95 +#: templates/registration/login.html:96 msgid "Click here to reset" msgstr "" -#: templates/registration/password_reset_complete.html:50 +#: templates/registration/password_reset_complete.html:51 msgid "Password reset complete" msgstr "" -#: templates/registration/password_reset_confirm.html:52 -#: templates/registration/password_reset_confirm.html:56 +#: templates/registration/password_reset_confirm.html:53 +#: templates/registration/password_reset_confirm.html:57 msgid "Change password" msgstr "" -#: templates/registration/password_reset_confirm.html:60 +#: templates/registration/password_reset_confirm.html:61 msgid "" "The password reset link was invalid, possibly because it has already been " "used. Please request a new password reset." msgstr "" -#: templates/registration/password_reset_done.html:51 +#: templates/registration/password_reset_done.html:52 msgid "" "We've emailed you instructions for setting your password, if an account " "exists with the email you entered. You should receive them shortly." msgstr "" -#: templates/registration/password_reset_done.html:54 +#: templates/registration/password_reset_done.html:55 msgid "" "If you don't receive an email, please make sure you've entered the address " "you registered with, and check your spam folder." msgstr "" -#: templates/registration/password_reset_form.html:52 +#: templates/registration/password_reset_form.html:53 msgid "Enter your email address below." msgstr "" -#: templates/registration/password_reset_form.html:53 +#: templates/registration/password_reset_form.html:54 msgid "An email will be sent with password reset instructions." msgstr "" -#: templates/registration/password_reset_form.html:58 +#: templates/registration/password_reset_form.html:59 msgid "Send email" msgstr "" @@ -7098,55 +7125,47 @@ msgstr "" msgid "Barcode Actions" msgstr "" -#: templates/stock_table.html:36 -msgid "Printing Actions" -msgstr "" - -#: templates/stock_table.html:40 -msgid "Print labels" -msgstr "" - -#: templates/stock_table.html:42 +#: templates/stock_table.html:43 msgid "Print test reports" msgstr "" -#: templates/stock_table.html:53 +#: templates/stock_table.html:54 msgid "Add to selected stock items" msgstr "" -#: templates/stock_table.html:54 +#: templates/stock_table.html:55 msgid "Remove from selected stock items" msgstr "" -#: templates/stock_table.html:55 +#: templates/stock_table.html:56 msgid "Stocktake selected stock items" msgstr "" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Move selected stock items" msgstr "" -#: templates/stock_table.html:56 +#: templates/stock_table.html:57 msgid "Move stock" msgstr "" -#: templates/stock_table.html:57 +#: templates/stock_table.html:58 msgid "Order selected items" msgstr "" -#: templates/stock_table.html:58 +#: templates/stock_table.html:59 msgid "Change status" msgstr "" -#: templates/stock_table.html:58 +#: templates/stock_table.html:59 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:61 +#: templates/stock_table.html:62 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:61 +#: templates/stock_table.html:62 msgid "Delete Stock" msgstr "" @@ -7182,34 +7201,34 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:166 +#: users/models.py:167 msgid "Permission set" msgstr "" -#: users/models.py:174 +#: users/models.py:175 msgid "Group" msgstr "" -#: users/models.py:177 +#: users/models.py:178 msgid "View" msgstr "" -#: users/models.py:177 +#: users/models.py:178 msgid "Permission to view items" msgstr "" -#: users/models.py:179 +#: users/models.py:180 msgid "Permission to add items" msgstr "" -#: users/models.py:181 +#: users/models.py:182 msgid "Change" msgstr "" -#: users/models.py:181 +#: users/models.py:182 msgid "Permissions to edit items" msgstr "" -#: users/models.py:183 +#: users/models.py:184 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/fr/LC_MESSAGES/django.po b/InvenTree/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 0000000000..65eebf0e77 --- /dev/null +++ b/InvenTree/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,7234 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-21 12:28+1000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: InvenTree/api.py:64 +msgid "API endpoint not found" +msgstr "" + +#: InvenTree/api.py:110 +msgid "No action specified" +msgstr "" + +#: InvenTree/api.py:124 +msgid "No matching action found" +msgstr "" + +#: InvenTree/fields.py:44 +msgid "Enter date" +msgstr "" + +#: InvenTree/forms.py:110 build/forms.py:99 build/forms.py:120 +#: build/forms.py:142 build/forms.py:166 build/forms.py:188 build/forms.py:223 +#: order/forms.py:27 order/forms.py:38 order/forms.py:49 order/forms.py:60 +#: order/forms.py:71 part/forms.py:134 +msgid "Confirm" +msgstr "" + +#: InvenTree/forms.py:126 +msgid "Confirm delete" +msgstr "" + +#: InvenTree/forms.py:127 +msgid "Confirm item deletion" +msgstr "" + +#: InvenTree/forms.py:159 templates/registration/login.html:77 +msgid "Enter password" +msgstr "" + +#: InvenTree/forms.py:160 +msgid "Enter new password" +msgstr "" + +#: InvenTree/forms.py:167 +msgid "Confirm password" +msgstr "" + +#: InvenTree/forms.py:168 +msgid "Confirm new password" +msgstr "" + +#: InvenTree/forms.py:203 +msgid "Apply Theme" +msgstr "" + +#: InvenTree/forms.py:233 +msgid "Select Category" +msgstr "" + +#: InvenTree/helpers.py:375 order/models.py:245 order/models.py:344 +#: stock/views.py:1763 +msgid "Invalid quantity provided" +msgstr "" + +#: InvenTree/helpers.py:378 +msgid "Empty serial number string" +msgstr "" + +#: InvenTree/helpers.py:399 +#, python-brace-format +msgid "Duplicate serial: {n}" +msgstr "" + +#: InvenTree/helpers.py:403 InvenTree/helpers.py:406 InvenTree/helpers.py:409 +#, python-brace-format +msgid "Invalid group: {g}" +msgstr "" + +#: InvenTree/helpers.py:414 +#, python-brace-format +msgid "Duplicate serial: {g}" +msgstr "" + +#: InvenTree/helpers.py:422 +msgid "No serial numbers found" +msgstr "" + +#: InvenTree/helpers.py:426 +#, python-brace-format +msgid "Number of unique serial number ({s}) must match quantity ({q})" +msgstr "" + +#: InvenTree/models.py:59 stock/models.py:1662 +msgid "Attachment" +msgstr "" + +#: InvenTree/models.py:60 +msgid "Select file to attach" +msgstr "" + +#: InvenTree/models.py:62 templates/attachment_table.html:16 +msgid "Comment" +msgstr "" + +#: InvenTree/models.py:62 +msgid "File comment" +msgstr "" + +#: InvenTree/models.py:68 InvenTree/models.py:69 part/models.py:1908 +#: report/templates/report/inventree_test_report_base.html:91 +#: templates/js/stock.js:1041 +msgid "User" +msgstr "" + +#: InvenTree/models.py:72 +msgid "upload date" +msgstr "" + +#: InvenTree/models.py:107 InvenTree/models.py:108 label/models.py:101 +#: part/models.py:686 part/models.py:2049 part/templates/part/params.html:27 +#: report/models.py:179 templates/InvenTree/search.html:137 +#: templates/InvenTree/search.html:289 templates/js/part.js:110 +#: templates/js/part.js:553 templates/js/stock.js:944 +msgid "Name" +msgstr "" + +#: InvenTree/models.py:114 build/models.py:134 +#: build/templates/build/detail.html:21 company/models.py:342 +#: company/models.py:494 company/templates/company/detail.html:27 +#: company/templates/company/manufacturer_part_base.html:72 +#: company/templates/company/supplier_part_base.html:71 +#: company/templates/company/supplier_part_detail.html:31 label/models.py:108 +#: order/models.py:101 order/templates/order/purchase_order_detail.html:168 +#: part/models.py:710 part/templates/part/detail.html:54 +#: part/templates/part/set_category.html:14 report/models.py:192 +#: report/models.py:505 report/models.py:544 +#: report/templates/report/inventree_build_order_base.html:118 +#: templates/InvenTree/search.html:144 templates/InvenTree/search.html:224 +#: templates/InvenTree/search.html:296 +#: templates/InvenTree/settings/header.html:9 templates/js/bom.js:190 +#: templates/js/build.js:677 templates/js/build.js:944 +#: templates/js/company.js:56 templates/js/order.js:183 +#: templates/js/order.js:280 templates/js/part.js:169 templates/js/part.js:252 +#: templates/js/part.js:371 templates/js/part.js:565 templates/js/part.js:643 +#: templates/js/stock.js:554 templates/js/stock.js:956 +#: templates/js/stock.js:1015 +msgid "Description" +msgstr "" + +#: InvenTree/models.py:115 +msgid "Description (optional)" +msgstr "" + +#: InvenTree/models.py:123 +msgid "parent" +msgstr "" + +#: InvenTree/settings.py:493 +msgid "English" +msgstr "" + +#: InvenTree/settings.py:494 +msgid "French" +msgstr "" + +#: InvenTree/settings.py:495 +msgid "German" +msgstr "" + +#: InvenTree/settings.py:496 +msgid "Polish" +msgstr "" + +#: InvenTree/settings.py:497 +msgid "Turkish" +msgstr "" + +#: InvenTree/status.py:93 +msgid "Background worker check failed" +msgstr "" + +#: InvenTree/status.py:97 +msgid "Email backend not configured" +msgstr "" + +#: InvenTree/status.py:100 +msgid "InvenTree system health checks failed" +msgstr "" + +#: InvenTree/status_codes.py:94 InvenTree/status_codes.py:135 +#: InvenTree/status_codes.py:228 +msgid "Pending" +msgstr "" + +#: InvenTree/status_codes.py:95 +msgid "Placed" +msgstr "" + +#: InvenTree/status_codes.py:96 InvenTree/status_codes.py:231 +msgid "Complete" +msgstr "" + +#: InvenTree/status_codes.py:97 InvenTree/status_codes.py:137 +#: InvenTree/status_codes.py:230 +msgid "Cancelled" +msgstr "" + +#: InvenTree/status_codes.py:98 InvenTree/status_codes.py:138 +#: InvenTree/status_codes.py:180 +msgid "Lost" +msgstr "" + +#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:139 +#: InvenTree/status_codes.py:182 +msgid "Returned" +msgstr "" + +#: InvenTree/status_codes.py:136 +#: order/templates/order/sales_order_base.html:124 +msgid "Shipped" +msgstr "" + +#: InvenTree/status_codes.py:176 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:177 +msgid "Attention needed" +msgstr "" + +#: InvenTree/status_codes.py:178 +msgid "Damaged" +msgstr "" + +#: InvenTree/status_codes.py:179 +msgid "Destroyed" +msgstr "" + +#: InvenTree/status_codes.py:181 +msgid "Rejected" +msgstr "" + +#: InvenTree/status_codes.py:229 +msgid "Production" +msgstr "" + +#: InvenTree/validators.py:22 +msgid "Not a valid currency code" +msgstr "" + +#: InvenTree/validators.py:50 +msgid "Invalid character in part name" +msgstr "" + +#: InvenTree/validators.py:63 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "" + +#: InvenTree/validators.py:77 InvenTree/validators.py:91 +#: InvenTree/validators.py:105 +msgid "Reference must match pattern" +msgstr "" + +#: InvenTree/validators.py:113 +#, python-brace-format +msgid "Illegal character in name ({x})" +msgstr "" + +#: InvenTree/validators.py:132 InvenTree/validators.py:148 +msgid "Overage value must not be negative" +msgstr "" + +#: InvenTree/validators.py:150 +msgid "Overage must not exceed 100%" +msgstr "" + +#: InvenTree/validators.py:157 +msgid "Overage must be an integer value or a percentage" +msgstr "" + +#: InvenTree/views.py:587 +msgid "Delete Item" +msgstr "" + +#: InvenTree/views.py:636 +msgid "Check box to confirm item deletion" +msgstr "" + +#: InvenTree/views.py:651 templates/InvenTree/settings/user.html:18 +msgid "Edit User Information" +msgstr "" + +#: InvenTree/views.py:662 templates/InvenTree/settings/user.html:22 +msgid "Set Password" +msgstr "" + +#: InvenTree/views.py:681 +msgid "Password fields must match" +msgstr "" + +#: InvenTree/views.py:887 templates/navbar.html:95 +msgid "System Information" +msgstr "" + +#: barcodes/api.py:53 barcodes/api.py:150 +msgid "Must provide barcode_data parameter" +msgstr "" + +#: barcodes/api.py:126 +msgid "No match found for barcode data" +msgstr "" + +#: barcodes/api.py:128 +msgid "Match found for barcode data" +msgstr "" + +#: barcodes/api.py:153 +msgid "Must provide stockitem parameter" +msgstr "" + +#: barcodes/api.py:160 +msgid "No matching stock item found" +msgstr "" + +#: barcodes/api.py:190 +msgid "Barcode already matches StockItem object" +msgstr "" + +#: barcodes/api.py:194 +msgid "Barcode already matches StockLocation object" +msgstr "" + +#: barcodes/api.py:198 +msgid "Barcode already matches Part object" +msgstr "" + +#: barcodes/api.py:204 barcodes/api.py:216 +msgid "Barcode hash already matches StockItem object" +msgstr "" + +#: barcodes/api.py:222 +msgid "Barcode associated with StockItem" +msgstr "" + +#: build/forms.py:34 +msgid "Build Order reference" +msgstr "" + +#: build/forms.py:35 +msgid "Order target date" +msgstr "" + +#: build/forms.py:39 build/templates/build/build_base.html:107 +#: build/templates/build/detail.html:121 order/forms.py:109 order/forms.py:144 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:117 +#: report/templates/report/inventree_build_order_base.html:126 +#: templates/js/build.js:723 templates/js/order.js:200 +#: templates/js/order.js:298 +msgid "Target Date" +msgstr "" + +#: build/forms.py:40 build/models.py:224 +msgid "" +"Target date for build completion. Build will be overdue after this date." +msgstr "" + +#: build/forms.py:45 build/forms.py:87 build/forms.py:257 build/models.py:1109 +#: build/templates/build/auto_allocate.html:17 +#: build/templates/build/build_base.html:94 +#: build/templates/build/detail.html:31 common/models.py:703 +#: company/forms.py:176 company/templates/company/supplier_part_pricing.html:77 +#: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261 +#: order/forms.py:278 order/models.py:593 order/models.py:784 +#: order/templates/order/order_wizard/select_parts.html:32 +#: order/templates/order/purchase_order_detail.html:200 +#: order/templates/order/sales_order_detail.html:70 +#: order/templates/order/sales_order_detail.html:77 +#: order/templates/order/sales_order_detail.html:159 +#: order/templates/order/sales_order_detail.html:224 part/forms.py:342 +#: part/forms.py:371 part/forms.py:387 part/models.py:2178 +#: part/templates/part/allocation.html:19 +#: part/templates/part/allocation.html:53 +#: part/templates/part/part_pricing.html:11 +#: part/templates/part/part_pricing.html:18 +#: part/templates/part/sale_prices.html:85 +#: report/templates/report/inventree_build_order_base.html:114 +#: report/templates/report/inventree_po_report.html:91 +#: report/templates/report/inventree_so_report.html:91 +#: report/templates/report/inventree_test_report_base.html:77 +#: stock/forms.py:175 stock/forms.py:308 stock/models.py:1566 +#: stock/templates/stock/item_base.html:244 +#: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364 +#: templates/js/bom.js:205 templates/js/build.js:420 templates/js/build.js:954 +#: templates/js/stock.js:1033 templates/js/stock.js:1271 +msgid "Quantity" +msgstr "" + +#: build/forms.py:46 +msgid "Number of items to build" +msgstr "" + +#: build/forms.py:88 +msgid "Enter quantity for build output" +msgstr "" + +#: build/forms.py:92 order/forms.py:233 stock/forms.py:118 +msgid "Serial Numbers" +msgstr "" + +#: build/forms.py:94 +msgid "Enter serial numbers for build outputs" +msgstr "" + +#: build/forms.py:100 +msgid "Confirm creation of build output" +msgstr "" + +#: build/forms.py:121 +msgid "Confirm deletion of build output" +msgstr "" + +#: build/forms.py:142 +msgid "Confirm unallocation of stock" +msgstr "" + +#: build/forms.py:166 +msgid "Confirm stock allocation" +msgstr "" + +#: build/forms.py:189 +msgid "Mark build as complete" +msgstr "" + +#: build/forms.py:213 build/templates/build/auto_allocate.html:18 +#: order/forms.py:82 stock/forms.py:347 +#: stock/templates/stock/item_base.html:274 +#: stock/templates/stock/stock_adjust.html:17 +#: templates/InvenTree/search.html:260 templates/js/barcode.js:363 +#: templates/js/barcode.js:531 templates/js/build.js:434 +#: templates/js/stock.js:641 +msgid "Location" +msgstr "" + +#: build/forms.py:214 +msgid "Location of completed parts" +msgstr "" + +#: build/forms.py:219 +msgid "Confirm incomplete" +msgstr "" + +#: build/forms.py:220 +msgid "Confirm completion with incomplete stock allocation" +msgstr "" + +#: build/forms.py:223 +msgid "Confirm build completion" +msgstr "" + +#: build/forms.py:243 +msgid "Confirm cancel" +msgstr "" + +#: build/forms.py:243 build/views.py:66 +msgid "Confirm build cancellation" +msgstr "" + +#: build/forms.py:257 +msgid "Select quantity of stock to allocate" +msgstr "" + +#: build/models.py:65 build/templates/build/build_base.html:9 +#: build/templates/build/build_base.html:38 +#: part/templates/part/allocation.html:23 +#: report/templates/report/inventree_build_order_base.html:106 +msgid "Build Order" +msgstr "" + +#: build/models.py:66 build/templates/build/index.html:8 +#: build/templates/build/index.html:15 order/templates/order/so_builds.html:12 +#: order/templates/order/so_navbar.html:19 +#: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55 +#: part/templates/part/navbar.html:58 templates/InvenTree/index.html:183 +#: templates/InvenTree/search.html:185 +#: templates/InvenTree/settings/tabs.html:31 users/models.py:41 +msgid "Build Orders" +msgstr "" + +#: build/models.py:126 +msgid "Build Order Reference" +msgstr "" + +#: build/models.py:127 order/models.py:99 order/models.py:595 +#: order/templates/order/purchase_order_detail.html:195 +#: order/templates/order/sales_order_detail.html:219 part/models.py:2187 +#: report/templates/report/inventree_po_report.html:92 +#: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197 +#: templates/js/build.js:509 templates/js/build.js:948 +msgid "Reference" +msgstr "" + +#: build/models.py:137 +msgid "Brief description of the build" +msgstr "" + +#: build/models.py:146 build/templates/build/build_base.html:124 +#: build/templates/build/detail.html:77 +msgid "Parent Build" +msgstr "" + +#: build/models.py:147 +msgid "BuildOrder to which this build is allocated" +msgstr "" + +#: build/models.py:152 build/templates/build/auto_allocate.html:16 +#: build/templates/build/build_base.html:89 +#: build/templates/build/detail.html:26 company/models.py:669 +#: order/models.py:637 order/models.py:669 +#: order/templates/order/order_wizard/select_parts.html:30 +#: order/templates/order/purchase_order_detail.html:156 +#: order/templates/order/receive_parts.html:19 +#: order/templates/order/sales_order_detail.html:207 part/models.py:321 +#: part/models.py:1876 part/models.py:1888 part/models.py:1906 +#: part/models.py:1981 part/models.py:2077 part/models.py:2162 +#: part/templates/part/part_app_base.html:8 +#: part/templates/part/part_pricing.html:14 part/templates/part/related.html:29 +#: part/templates/part/set_category.html:13 +#: report/templates/report/inventree_build_order_base.html:110 +#: report/templates/report/inventree_po_report.html:90 +#: report/templates/report/inventree_so_report.html:90 +#: templates/InvenTree/search.html:112 templates/InvenTree/search.html:210 +#: templates/js/barcode.js:362 templates/js/bom.js:163 +#: templates/js/build.js:681 templates/js/build.js:921 +#: templates/js/company.js:140 templates/js/company.js:238 +#: templates/js/part.js:233 templates/js/part.js:338 templates/js/stock.js:523 +#: templates/js/stock.js:1343 +msgid "Part" +msgstr "" + +#: build/models.py:160 +msgid "Select part to build" +msgstr "" + +#: build/models.py:165 +msgid "Sales Order Reference" +msgstr "" + +#: build/models.py:169 +msgid "SalesOrder to which this build is allocated" +msgstr "" + +#: build/models.py:174 +msgid "Source Location" +msgstr "" + +#: build/models.py:178 +msgid "" +"Select location to take stock from for this build (leave blank to take from " +"any stock location)" +msgstr "" + +#: build/models.py:183 +msgid "Destination Location" +msgstr "" + +#: build/models.py:187 +msgid "Select location where the completed items will be stored" +msgstr "" + +#: build/models.py:191 +msgid "Build Quantity" +msgstr "" + +#: build/models.py:194 +msgid "Number of stock items to build" +msgstr "" + +#: build/models.py:198 +msgid "Completed items" +msgstr "" + +#: build/models.py:200 +msgid "Number of stock items which have been completed" +msgstr "" + +#: build/models.py:204 part/templates/part/part_base.html:160 +msgid "Build Status" +msgstr "" + +#: build/models.py:208 +msgid "Build status code" +msgstr "" + +#: build/models.py:212 stock/models.py:432 +msgid "Batch Code" +msgstr "" + +#: build/models.py:216 +msgid "Batch code for this build output" +msgstr "" + +#: build/models.py:219 order/models.py:105 part/models.py:882 +#: part/templates/part/detail.html:126 templates/js/order.js:293 +msgid "Creation Date" +msgstr "" + +#: build/models.py:223 order/models.py:451 +msgid "Target completion date" +msgstr "" + +#: build/models.py:227 order/models.py:218 +msgid "Completion Date" +msgstr "" + +#: build/models.py:233 +msgid "completed by" +msgstr "" + +#: build/models.py:241 +msgid "Issued by" +msgstr "" + +#: build/models.py:242 +msgid "User who issued this build order" +msgstr "" + +#: build/models.py:250 build/templates/build/build_base.html:145 +#: build/templates/build/detail.html:105 order/models.py:119 +#: order/templates/order/order_base.html:138 +#: order/templates/order/sales_order_base.html:138 part/models.py:886 +#: report/templates/report/inventree_build_order_base.html:159 +msgid "Responsible" +msgstr "" + +#: build/models.py:251 +msgid "User responsible for this build order" +msgstr "" + +#: build/models.py:256 build/templates/build/detail.html:91 +#: company/templates/company/manufacturer_part_base.html:79 +#: company/templates/company/manufacturer_part_detail.html:28 +#: company/templates/company/supplier_part_base.html:78 +#: company/templates/company/supplier_part_detail.html:28 +#: part/templates/part/detail.html:83 part/templates/part/part_base.html:101 +#: stock/models.py:426 stock/templates/stock/item_base.html:334 +msgid "External Link" +msgstr "" + +#: build/models.py:257 part/models.py:744 stock/models.py:428 +msgid "Link to external URL" +msgstr "" + +#: build/models.py:261 build/templates/build/navbar.html:59 +#: company/models.py:135 company/models.py:501 +#: company/templates/company/navbar.html:70 +#: company/templates/company/navbar.html:73 order/models.py:123 +#: order/models.py:597 order/templates/order/po_navbar.html:29 +#: order/templates/order/po_navbar.html:32 +#: order/templates/order/purchase_order_detail.html:234 +#: order/templates/order/sales_order_detail.html:264 +#: order/templates/order/so_navbar.html:33 +#: order/templates/order/so_navbar.html:36 part/models.py:871 +#: part/templates/part/navbar.html:128 +#: report/templates/report/inventree_build_order_base.html:173 +#: stock/forms.py:173 stock/forms.py:317 stock/forms.py:349 stock/forms.py:377 +#: stock/models.py:498 stock/models.py:1558 stock/models.py:1668 +#: stock/templates/stock/navbar.html:57 templates/js/barcode.js:37 +#: templates/js/bom.js:333 templates/js/stock.js:128 templates/js/stock.js:671 +msgid "Notes" +msgstr "" + +#: build/models.py:262 +msgid "Extra build notes" +msgstr "" + +#: build/models.py:673 +msgid "No build output specified" +msgstr "" + +#: build/models.py:676 +msgid "Build output is already completed" +msgstr "" + +#: build/models.py:679 +msgid "Build output does not match Build Order" +msgstr "" + +#: build/models.py:754 +msgid "Completed build output" +msgstr "" + +#: build/models.py:1002 +msgid "BuildItem must be unique for build, stock_item and install_into" +msgstr "" + +#: build/models.py:1024 +msgid "Build item must specify a build output" +msgstr "" + +#: build/models.py:1029 +#, python-brace-format +msgid "Selected stock item not found in BOM for part '{p}'" +msgstr "" + +#: build/models.py:1033 +#, python-brace-format +msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" +msgstr "" + +#: build/models.py:1040 order/models.py:758 +msgid "StockItem is over-allocated" +msgstr "" + +#: build/models.py:1044 order/models.py:761 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: build/models.py:1048 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1088 stock/templates/stock/item_base.html:306 +#: templates/InvenTree/search.html:183 templates/js/build.js:655 +#: templates/navbar.html:29 +msgid "Build" +msgstr "" + +#: build/models.py:1089 +msgid "Build to allocate parts" +msgstr "" + +#: build/models.py:1096 part/templates/part/allocation.html:18 +#: part/templates/part/allocation.html:24 +#: part/templates/part/allocation.html:31 +#: part/templates/part/allocation.html:49 +#: stock/templates/stock/item_base.html:8 +#: stock/templates/stock/item_base.html:93 +#: stock/templates/stock/item_base.html:328 +#: stock/templates/stock/stock_adjust.html:16 templates/js/build.js:771 +#: templates/js/stock.js:1004 templates/js/stock.js:1262 +msgid "Stock Item" +msgstr "" + +#: build/models.py:1097 +msgid "Source stock item" +msgstr "" + +#: build/models.py:1110 +msgid "Stock quantity to allocate to build" +msgstr "" + +#: build/models.py:1118 +msgid "Install into" +msgstr "" + +#: build/models.py:1119 +msgid "Destination stock item" +msgstr "" + +#: build/templates/build/allocate.html:7 +msgid "Allocate Parts" +msgstr "" + +#: build/templates/build/allocate.html:15 +msgid "Incomplete Build Ouputs" +msgstr "" + +#: build/templates/build/allocate.html:21 +msgid "Build order has been completed" +msgstr "" + +#: build/templates/build/allocate.html:26 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/allocate.html:27 +msgid "Create New Output" +msgstr "" + +#: build/templates/build/allocate.html:30 +msgid "Order required parts" +msgstr "" + +#: build/templates/build/allocate.html:31 +#: company/templates/company/detail_manufacturer_part.html:33 +#: company/templates/company/detail_supplier_part.html:32 order/views.py:794 +#: part/templates/part/category.html:127 +msgid "Order Parts" +msgstr "" + +#: build/templates/build/allocate.html:34 templates/js/build.js:590 +msgid "Unallocate stock" +msgstr "" + +#: build/templates/build/allocate.html:35 build/views.py:338 build/views.py:784 +msgid "Unallocate Stock" +msgstr "" + +#: build/templates/build/allocate.html:49 +msgid "Create a new build output" +msgstr "" + +#: build/templates/build/allocate.html:50 +msgid "No incomplete build outputs remain." +msgstr "" + +#: build/templates/build/allocate.html:51 +msgid "Create a new build output using the button above" +msgstr "" + +#: build/templates/build/attachments.html:12 +#: build/templates/build/navbar.html:49 build/templates/build/navbar.html:52 +#: order/templates/order/po_navbar.html:26 +#: order/templates/order/so_navbar.html:29 part/templates/part/navbar.html:119 +#: part/templates/part/navbar.html:122 stock/templates/stock/navbar.html:47 +#: stock/templates/stock/navbar.html:50 +msgid "Attachments" +msgstr "" + +#: build/templates/build/auto_allocate.html:9 +msgid "Automatically Allocate Stock" +msgstr "" + +#: build/templates/build/auto_allocate.html:10 +msgid "" +"The following stock items will be allocated to the specified build output" +msgstr "" + +#: build/templates/build/auto_allocate.html:37 +msgid "No stock items found that can be automatically allocated to this build" +msgstr "" + +#: build/templates/build/auto_allocate.html:39 +msgid "Stock items will have to be manually allocated" +msgstr "" + +#: build/templates/build/build_base.html:16 +#, python-format +msgid "This Build Order is allocated to Sales Order %(link)s" +msgstr "" + +#: build/templates/build/build_base.html:22 +#, python-format +msgid "This Build Order is a child of Build Order %(link)s" +msgstr "" + +#: build/templates/build/build_base.html:40 +#: company/templates/company/company_base.html:40 +#: company/templates/company/manufacturer_part_base.html:25 +#: company/templates/company/supplier_part_base.html:26 +#: order/templates/order/order_base.html:26 +#: order/templates/order/sales_order_base.html:35 +#: part/templates/part/category.html:18 part/templates/part/part_base.html:29 +#: stock/templates/stock/item_base.html:118 +#: stock/templates/stock/location.html:31 +msgid "Admin view" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: build/templates/build/build_base.html:111 +#: order/templates/order/order_base.html:32 +#: order/templates/order/order_base.html:86 +#: order/templates/order/sales_order_base.html:41 +#: order/templates/order/sales_order_base.html:86 +#: templates/js/table_filters.js:240 templates/js/table_filters.js:259 +#: templates/js/table_filters.js:276 +msgid "Overdue" +msgstr "" + +#: build/templates/build/build_base.html:55 +msgid "Print actions" +msgstr "" + +#: build/templates/build/build_base.html:59 +msgid "Print Build Order" +msgstr "" + +#: build/templates/build/build_base.html:65 +msgid "Build actions" +msgstr "" + +#: build/templates/build/build_base.html:69 +msgid "Edit Build" +msgstr "" + +#: build/templates/build/build_base.html:71 +#: build/templates/build/build_base.html:179 +msgid "Complete Build" +msgstr "" + +#: build/templates/build/build_base.html:72 +#: build/templates/build/build_base.html:170 build/views.py:57 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:85 +#: build/templates/build/detail.html:11 +msgid "Build Details" +msgstr "" + +#: build/templates/build/build_base.html:99 +#: build/templates/build/detail.html:59 order/models.py:445 +#: order/templates/order/receive_parts.html:24 +#: stock/templates/stock/item_base.html:392 templates/InvenTree/search.html:252 +#: templates/js/barcode.js:119 templates/js/build.js:710 +#: templates/js/order.js:187 templates/js/order.js:285 +#: templates/js/stock.js:628 templates/js/stock.js:1279 +msgid "Status" +msgstr "" + +#: build/templates/build/build_base.html:111 +#, python-format +msgid "This build was due on %(target)s" +msgstr "" + +#: build/templates/build/build_base.html:118 +#: build/templates/build/detail.html:64 +msgid "Progress" +msgstr "" + +#: build/templates/build/build_base.html:131 +#: build/templates/build/detail.html:84 order/models.py:667 +#: order/templates/order/sales_order_base.html:9 +#: order/templates/order/sales_order_base.html:33 +#: order/templates/order/sales_order_ship.html:25 +#: part/templates/part/allocation.html:30 +#: report/templates/report/inventree_build_order_base.html:136 +#: report/templates/report/inventree_so_report.html:77 +#: stock/templates/stock/item_base.html:268 templates/js/order.js:245 +msgid "Sales Order" +msgstr "" + +#: build/templates/build/build_base.html:138 +#: build/templates/build/detail.html:98 +#: report/templates/report/inventree_build_order_base.html:153 +msgid "Issued By" +msgstr "" + +#: build/templates/build/build_children.html:10 +#: build/templates/build/navbar.html:42 +msgid "Child Build Orders" +msgstr "" + +#: build/templates/build/build_output.html:10 +#: build/templates/build/navbar.html:35 build/templates/build/navbar.html:38 +msgid "Build Outputs" +msgstr "" + +#: build/templates/build/build_output_create.html:7 +msgid "The Bill of Materials contains trackable parts" +msgstr "" + +#: build/templates/build/build_output_create.html:8 +msgid "Build outputs must be generated individually." +msgstr "" + +#: build/templates/build/build_output_create.html:9 +msgid "Multiple build outputs will be created based on the quantity specified." +msgstr "" + +#: build/templates/build/build_output_create.html:15 +msgid "Trackable parts can have serial numbers specified" +msgstr "" + +#: build/templates/build/build_output_create.html:16 +msgid "Enter serial numbers to generate multiple single build outputs" +msgstr "" + +#: build/templates/build/cancel.html:5 +msgid "Are you sure you wish to cancel this build?" +msgstr "" + +#: build/templates/build/complete.html:8 +msgid "Build can be completed" +msgstr "" + +#: build/templates/build/complete.html:12 +msgid "Build cannot be completed" +msgstr "" + +#: build/templates/build/complete.html:15 +msgid "Incompleted build outputs remain" +msgstr "" + +#: build/templates/build/complete.html:18 +msgid "Required build quantity has not been completed" +msgstr "" + +#: build/templates/build/complete_output.html:9 +msgid "Stock allocation is complete" +msgstr "" + +#: build/templates/build/complete_output.html:13 +msgid "Stock allocation is incomplete" +msgstr "" + +#: build/templates/build/complete_output.html:19 +msgid "parts have not been fully allocated" +msgstr "" + +#: build/templates/build/complete_output.html:40 +msgid "The following items will be created" +msgstr "" + +#: build/templates/build/create_build_item.html:7 +msgid "Select a stock item to allocate to the selected build output" +msgstr "" + +#: build/templates/build/create_build_item.html:11 +#, python-format +msgid "" +"The allocated stock will be installed into the following build output:
    " +"%(output)s" +msgstr "" + +#: build/templates/build/create_build_item.html:17 +#, python-format +msgid "No stock available for %(part)s" +msgstr "" + +#: build/templates/build/delete_build_item.html:8 +msgid "Are you sure you want to unallocate this stock?" +msgstr "" + +#: build/templates/build/delete_build_item.html:11 +msgid "The selected stock will be unallocated from the build output" +msgstr "" + +#: build/templates/build/detail.html:35 +msgid "Stock Source" +msgstr "" + +#: build/templates/build/detail.html:40 +msgid "Stock can be taken from any available location." +msgstr "" + +#: build/templates/build/detail.html:46 stock/forms.py:169 stock/forms.py:375 +msgid "Destination" +msgstr "" + +#: build/templates/build/detail.html:53 +msgid "Destination location not specified" +msgstr "" + +#: build/templates/build/detail.html:70 +#: stock/templates/stock/item_base.html:292 templates/js/stock.js:636 +#: templates/js/stock.js:1286 templates/js/table_filters.js:107 +#: templates/js/table_filters.js:201 +msgid "Batch" +msgstr "" + +#: build/templates/build/detail.html:116 +#: order/templates/order/order_base.html:111 +#: order/templates/order/sales_order_base.html:111 templates/js/build.js:718 +msgid "Created" +msgstr "" + +#: build/templates/build/detail.html:127 +msgid "No target date set" +msgstr "" + +#: build/templates/build/detail.html:132 templates/js/build.js:696 +#: templates/js/build.js:728 +msgid "Completed" +msgstr "" + +#: build/templates/build/detail.html:136 +msgid "Build not complete" +msgstr "" + +#: build/templates/build/edit_build_item.html:7 +msgid "Alter the quantity of stock allocated to the build output" +msgstr "" + +#: build/templates/build/index.html:28 build/views.py:657 +msgid "New Build Order" +msgstr "" + +#: build/templates/build/index.html:37 build/templates/build/index.html:38 +msgid "Print Build Orders" +msgstr "" + +#: build/templates/build/index.html:43 +#: order/templates/order/purchase_orders.html:27 +#: order/templates/order/sales_orders.html:27 +msgid "Display calendar view" +msgstr "" + +#: build/templates/build/index.html:46 +#: order/templates/order/purchase_orders.html:30 +#: order/templates/order/sales_orders.html:30 +msgid "Display list view" +msgstr "" + +#: build/templates/build/navbar.html:12 +msgid "Build Order Details" +msgstr "" + +#: build/templates/build/navbar.html:15 +#: company/templates/company/navbar.html:15 +#: order/templates/order/po_navbar.html:14 +#: order/templates/order/so_navbar.html:15 part/templates/part/navbar.html:15 +msgid "Details" +msgstr "" + +#: build/templates/build/navbar.html:20 build/templates/build/navbar.html:23 +#: build/templates/build/parts.html:11 +msgid "Required Parts" +msgstr "" + +#: build/templates/build/navbar.html:27 build/templates/build/navbar.html:30 +msgid "In Progress" +msgstr "" + +#: build/templates/build/navbar.html:45 +msgid "Child Builds" +msgstr "" + +#: build/templates/build/navbar.html:56 +msgid "Build Order Notes" +msgstr "" + +#: build/templates/build/notes.html:12 +msgid "Build Notes" +msgstr "" + +#: build/templates/build/notes.html:14 company/templates/company/notes.html:13 +#: order/templates/order/order_notes.html:15 +#: order/templates/order/sales_order_notes.html:16 +#: part/templates/part/notes.html:14 stock/templates/stock/item_notes.html:15 +msgid "Edit notes" +msgstr "" + +#: build/templates/build/notes.html:26 company/templates/company/notes.html:24 +#: order/templates/order/order_notes.html:27 +#: order/templates/order/sales_order_notes.html:29 +#: part/templates/part/notes.html:27 stock/templates/stock/item_base.html:470 +#: stock/templates/stock/item_notes.html:26 +msgid "Save" +msgstr "" + +#: build/templates/build/unallocate.html:10 +msgid "Are you sure you wish to unallocate all stock for this build?" +msgstr "" + +#: build/templates/build/unallocate.html:12 +msgid "All incomplete stock allocations will be removed from the build" +msgstr "" + +#: build/views.py:77 +msgid "Build was cancelled" +msgstr "" + +#: build/views.py:91 +msgid "Allocate Stock" +msgstr "" + +#: build/views.py:154 build/views.py:314 build/views.py:485 +msgid "Build output must be specified" +msgstr "" + +#: build/views.py:168 +msgid "Allocated stock to build output" +msgstr "" + +#: build/views.py:180 +msgid "Create Build Output" +msgstr "" + +#: build/views.py:203 stock/models.py:969 stock/views.py:1789 +msgid "Serial numbers already exist" +msgstr "" + +#: build/views.py:212 +msgid "Serial numbers required for trackable build output" +msgstr "" + +#: build/views.py:278 +msgid "Delete Build Output" +msgstr "" + +#: build/views.py:299 build/views.py:383 +msgid "Confirm unallocation of build stock" +msgstr "" + +#: build/views.py:300 build/views.py:384 stock/views.py:425 +msgid "Check the confirmation box" +msgstr "" + +#: build/views.py:312 +msgid "Build output does not match build" +msgstr "" + +#: build/views.py:326 +msgid "Build output deleted" +msgstr "" + +#: build/views.py:408 +msgid "Complete Build Order" +msgstr "" + +#: build/views.py:414 +msgid "Build order cannot be completed" +msgstr "" + +#: build/views.py:425 +msgid "Completed build order" +msgstr "" + +#: build/views.py:441 +msgid "Complete Build Output" +msgstr "" + +#: build/views.py:476 +msgid "Quantity to complete cannot exceed build output quantity" +msgstr "" + +#: build/views.py:482 +msgid "Confirm completion of incomplete build" +msgstr "" + +#: build/views.py:573 +msgid "Build output completed" +msgstr "" + +#: build/views.py:711 +msgid "Created new build" +msgstr "" + +#: build/views.py:732 +msgid "Edit Build Order Details" +msgstr "" + +#: build/views.py:765 +msgid "Edited build" +msgstr "" + +#: build/views.py:774 +msgid "Delete Build Order" +msgstr "" + +#: build/views.py:789 +msgid "Removed parts from build allocation" +msgstr "" + +#: build/views.py:801 +msgid "Allocate stock to build output" +msgstr "" + +#: build/views.py:844 +msgid "Item must be currently in stock" +msgstr "" + +#: build/views.py:850 +msgid "Stock item is over-allocated" +msgstr "" + +#: build/views.py:851 templates/js/bom.js:230 templates/js/build.js:519 +#: templates/js/build.js:778 templates/js/build.js:961 +msgid "Available" +msgstr "" + +#: build/views.py:853 +msgid "Stock item must be selected" +msgstr "" + +#: build/views.py:1016 +msgid "Edit Stock Allocation" +msgstr "" + +#: build/views.py:1020 +msgid "Updated Build Item" +msgstr "" + +#: build/views.py:1049 +msgid "Add Build Order Attachment" +msgstr "" + +#: build/views.py:1062 order/views.py:110 order/views.py:162 part/views.py:172 +#: stock/views.py:277 +msgid "Added attachment" +msgstr "" + +#: build/views.py:1098 order/views.py:189 order/views.py:210 +msgid "Edit Attachment" +msgstr "" + +#: build/views.py:1108 order/views.py:193 order/views.py:214 +msgid "Attachment updated" +msgstr "" + +#: build/views.py:1118 order/views.py:229 order/views.py:243 +msgid "Delete Attachment" +msgstr "" + +#: build/views.py:1123 order/views.py:235 order/views.py:249 stock/views.py:333 +msgid "Deleted attachment" +msgstr "" + +#: common/models.py:56 +msgid "InvenTree Instance Name" +msgstr "" + +#: common/models.py:58 +msgid "String descriptor for the server instance" +msgstr "" + +#: common/models.py:62 +msgid "Use instance name" +msgstr "" + +#: common/models.py:63 +msgid "Use the instance name in the title-bar" +msgstr "" + +#: common/models.py:69 company/models.py:97 company/models.py:98 +msgid "Company name" +msgstr "" + +#: common/models.py:70 +msgid "Internal company name" +msgstr "" + +#: common/models.py:75 +msgid "Base URL" +msgstr "" + +#: common/models.py:76 +msgid "Base URL for server instance" +msgstr "" + +#: common/models.py:82 +msgid "Default Currency" +msgstr "" + +#: common/models.py:83 +msgid "Default currency" +msgstr "" + +#: common/models.py:89 +msgid "Download from URL" +msgstr "" + +#: common/models.py:90 +msgid "Allow download of remote images and files from external URL" +msgstr "" + +#: common/models.py:96 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:97 +msgid "Enable barcode scanner support" +msgstr "" + +#: common/models.py:103 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:104 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:108 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:109 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:115 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:116 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:122 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:123 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:129 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:130 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:136 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:137 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:143 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:144 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:150 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:151 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:157 part/models.py:2079 part/templates/part/detail.html:160 +#: report/models.py:185 stock/forms.py:259 templates/js/table_filters.js:24 +#: templates/js/table_filters.js:310 +msgid "Template" +msgstr "" + +#: common/models.py:158 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:164 part/models.py:834 part/templates/part/detail.html:170 +#: templates/js/table_filters.js:123 templates/js/table_filters.js:322 +msgid "Assembly" +msgstr "" + +#: common/models.py:165 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:171 part/models.py:840 part/templates/part/detail.html:180 +#: templates/js/table_filters.js:326 +msgid "Component" +msgstr "" + +#: common/models.py:172 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:178 part/models.py:851 part/templates/part/detail.html:200 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:179 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:185 part/models.py:856 part/templates/part/detail.html:210 +#: templates/js/table_filters.js:334 +msgid "Salable" +msgstr "" + +#: common/models.py:186 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:192 part/models.py:846 part/templates/part/detail.html:190 +#: templates/js/table_filters.js:32 templates/js/table_filters.js:338 +msgid "Trackable" +msgstr "" + +#: common/models.py:193 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:199 part/models.py:866 part/templates/part/detail.html:150 +#: templates/js/table_filters.js:28 +msgid "Virtual" +msgstr "" + +#: common/models.py:200 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:206 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:207 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:213 +msgid "Debug Mode" +msgstr "" + +#: common/models.py:214 +msgid "Generate reports in debug mode (HTML output)" +msgstr "" + +#: common/models.py:220 +msgid "Page Size" +msgstr "" + +#: common/models.py:221 +msgid "Default page size for PDF reports" +msgstr "" + +#: common/models.py:231 +msgid "Test Reports" +msgstr "" + +#: common/models.py:232 +msgid "Enable generation of test reports" +msgstr "" + +#: common/models.py:238 +msgid "Stock Expiry" +msgstr "" + +#: common/models.py:239 +msgid "Enable stock expiry functionality" +msgstr "" + +#: common/models.py:245 +msgid "Sell Expired Stock" +msgstr "" + +#: common/models.py:246 +msgid "Allow sale of expired stock" +msgstr "" + +#: common/models.py:252 +msgid "Stock Stale Time" +msgstr "" + +#: common/models.py:253 +msgid "Number of days stock items are considered stale before expiring" +msgstr "" + +#: common/models.py:255 part/templates/part/detail.html:121 +msgid "days" +msgstr "" + +#: common/models.py:260 +msgid "Build Expired Stock" +msgstr "" + +#: common/models.py:261 +msgid "Allow building with expired stock" +msgstr "" + +#: common/models.py:267 +msgid "Stock Ownership Control" +msgstr "" + +#: common/models.py:268 +msgid "Enable ownership control over stock locations and items" +msgstr "" + +#: common/models.py:274 +msgid "Group by Part" +msgstr "" + +#: common/models.py:275 +msgid "Group stock items by part reference in table views" +msgstr "" + +#: common/models.py:281 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:282 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:288 +msgid "Build Order Reference Prefix" +msgstr "" + +#: common/models.py:289 +msgid "Prefix value for build order reference" +msgstr "" + +#: common/models.py:294 +msgid "Build Order Reference Regex" +msgstr "" + +#: common/models.py:295 +msgid "Regular expression pattern for matching build order reference" +msgstr "" + +#: common/models.py:299 +msgid "Sales Order Reference Prefix" +msgstr "" + +#: common/models.py:300 +msgid "Prefix value for sales order reference" +msgstr "" + +#: common/models.py:305 +msgid "Purchase Order Reference Prefix" +msgstr "" + +#: common/models.py:306 +msgid "Prefix value for purchase order reference" +msgstr "" + +#: common/models.py:529 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:531 +msgid "Settings value" +msgstr "" + +#: common/models.py:566 +msgid "Must be an integer value" +msgstr "" + +#: common/models.py:589 +msgid "Value must be a boolean value" +msgstr "" + +#: common/models.py:600 +msgid "Value must be an integer value" +msgstr "" + +#: common/models.py:623 +msgid "Key string must be unique" +msgstr "" + +#: common/models.py:704 company/forms.py:177 +msgid "Price break quantity" +msgstr "" + +#: common/models.py:712 company/templates/company/supplier_part_pricing.html:82 +#: part/templates/part/sale_prices.html:90 templates/js/bom.js:255 +msgid "Price" +msgstr "" + +#: common/models.py:713 +msgid "Unit price at specified quantity" +msgstr "" + +#: common/models.py:736 +msgid "Default" +msgstr "" + +#: common/templates/common/edit_setting.html:11 +msgid "Current value" +msgstr "" + +#: common/views.py:25 +msgid "Change Setting" +msgstr "" + +#: common/views.py:94 +msgid "Supplied value is not allowed" +msgstr "" + +#: common/views.py:103 +msgid "Supplied value must be a boolean" +msgstr "" + +#: company/forms.py:38 company/models.py:145 +#: company/templates/company/detail.html:42 +msgid "Currency" +msgstr "" + +#: company/forms.py:39 company/models.py:147 +msgid "Default currency used for this company" +msgstr "" + +#: company/forms.py:77 part/forms.py:46 +msgid "URL" +msgstr "" + +#: company/forms.py:78 part/forms.py:47 +msgid "Image URL" +msgstr "" + +#: company/forms.py:118 +msgid "Single Price" +msgstr "" + +#: company/forms.py:120 +msgid "Single quantity price" +msgstr "" + +#: company/forms.py:128 company/models.py:324 +msgid "Select manufacturer" +msgstr "" + +#: company/forms.py:134 company/models.py:331 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/forms.py:136 company/models.py:330 +#: company/templates/company/manufacturer_part_base.html:89 +#: company/templates/company/manufacturer_part_detail.html:26 +#: company/templates/company/supplier_part_base.html:101 +#: company/templates/company/supplier_part_detail.html:35 +#: order/templates/order/purchase_order_detail.html:183 part/bom.py:171 +#: part/bom.py:242 templates/js/company.js:181 templates/js/company.js:307 +msgid "MPN" +msgstr "" + +#: company/models.py:102 +msgid "Company description" +msgstr "" + +#: company/models.py:103 +msgid "Description of the company" +msgstr "" + +#: company/models.py:107 company/templates/company/company_base.html:70 +#: company/templates/company/detail.html:33 templates/js/company.js:60 +msgid "Website" +msgstr "" + +#: company/models.py:107 +msgid "Company website URL" +msgstr "" + +#: company/models.py:110 company/templates/company/company_base.html:77 +msgid "Address" +msgstr "" + +#: company/models.py:111 +msgid "Company address" +msgstr "" + +#: company/models.py:114 +msgid "Phone number" +msgstr "" + +#: company/models.py:115 +msgid "Contact phone number" +msgstr "" + +#: company/models.py:118 company/templates/company/company_base.html:91 +msgid "Email" +msgstr "" + +#: company/models.py:118 +msgid "Contact email address" +msgstr "" + +#: company/models.py:121 company/templates/company/company_base.html:98 +msgid "Contact" +msgstr "" + +#: company/models.py:122 +msgid "Point of contact" +msgstr "" + +#: company/models.py:124 company/models.py:336 company/models.py:488 +#: order/models.py:103 part/models.py:743 +#: report/templates/report/inventree_build_order_base.html:165 +#: stock/models.py:1560 templates/js/company.js:188 templates/js/company.js:318 +#: templates/js/part.js:431 +msgid "Link" +msgstr "" + +#: company/models.py:124 +msgid "Link to external company information" +msgstr "" + +#: company/models.py:132 part/models.py:753 +msgid "Image" +msgstr "" + +#: company/models.py:137 +msgid "is customer" +msgstr "" + +#: company/models.py:137 +msgid "Do you sell items to this company?" +msgstr "" + +#: company/models.py:139 +msgid "is supplier" +msgstr "" + +#: company/models.py:139 +msgid "Do you purchase items from this company?" +msgstr "" + +#: company/models.py:141 +msgid "is manufacturer" +msgstr "" + +#: company/models.py:141 +msgid "Does this company manufacture parts?" +msgstr "" + +#: company/models.py:308 company/models.py:459 stock/models.py:373 +#: stock/templates/stock/item_base.html:224 +msgid "Base Part" +msgstr "" + +#: company/models.py:312 company/models.py:463 order/views.py:1372 +msgid "Select part" +msgstr "" + +#: company/models.py:323 company/templates/company/detail.html:57 +#: company/templates/company/manufacturer_part_base.html:85 +#: company/templates/company/manufacturer_part_detail.html:25 +#: company/templates/company/supplier_part_base.html:94 +#: company/templates/company/supplier_part_detail.html:34 part/bom.py:170 +#: part/bom.py:241 stock/templates/stock/item_base.html:341 +#: templates/js/company.js:44 templates/js/company.js:165 +#: templates/js/company.js:289 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:337 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:343 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:469 company/templates/company/detail.html:62 +#: company/templates/company/supplier_part_base.html:84 +#: company/templates/company/supplier_part_detail.html:25 order/models.py:190 +#: order/templates/order/order_base.html:92 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:175 +#: part/bom.py:286 stock/templates/stock/item_base.html:353 +#: templates/js/company.js:48 templates/js/company.js:263 +#: templates/js/order.js:170 +msgid "Supplier" +msgstr "" + +#: company/models.py:470 +msgid "Select supplier" +msgstr "" + +#: company/models.py:475 company/templates/company/supplier_part_base.html:88 +#: company/templates/company/supplier_part_detail.html:26 +#: order/templates/order/purchase_order_detail.html:174 part/bom.py:176 +#: part/bom.py:287 +msgid "SKU" +msgstr "" + +#: company/models.py:476 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:482 +#: company/templates/company/manufacturer_part_base.html:6 +#: company/templates/company/manufacturer_part_base.html:19 +#: stock/templates/stock/item_base.html:346 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:483 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:489 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:495 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:500 company/templates/company/supplier_part_base.html:115 +#: company/templates/company/supplier_part_detail.html:38 part/models.py:2190 +#: report/templates/report/inventree_po_report.html:93 +#: report/templates/report/inventree_so_report.html:93 +msgid "Note" +msgstr "" + +#: company/models.py:504 +msgid "base cost" +msgstr "" + +#: company/models.py:504 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:506 company/templates/company/supplier_part_base.html:108 +#: stock/models.py:397 stock/templates/stock/item_base.html:299 +#: templates/js/stock.js:667 +msgid "Packaging" +msgstr "" + +#: company/models.py:506 +msgid "Part packaging" +msgstr "" + +#: company/models.py:508 +msgid "multiple" +msgstr "" + +#: company/models.py:508 +msgid "Order multiple" +msgstr "" + +#: company/templates/company/assigned_stock.html:10 +#: company/templates/company/navbar.html:62 +#: company/templates/company/navbar.html:65 templates/js/build.js:411 +msgid "Assigned Stock" +msgstr "" + +#: company/templates/company/company_base.html:9 +#: company/templates/company/company_base.html:35 +#: templates/InvenTree/search.html:304 templates/js/company.js:33 +msgid "Company" +msgstr "" + +#: company/templates/company/company_base.html:25 +#: part/templates/part/part_thumb.html:21 +msgid "Upload new image" +msgstr "" + +#: company/templates/company/company_base.html:27 +#: part/templates/part/part_thumb.html:23 +msgid "Download image from URL" +msgstr "" + +#: company/templates/company/company_base.html:46 order/views.py:306 +msgid "Create Purchase Order" +msgstr "" + +#: company/templates/company/company_base.html:51 +msgid "Edit company information" +msgstr "" + +#: company/templates/company/company_base.html:56 company/views.py:326 +msgid "Delete Company" +msgstr "" + +#: company/templates/company/company_base.html:64 +#: company/templates/company/detail.html:10 +#: company/templates/company/navbar.html:12 +msgid "Company Details" +msgstr "" + +#: company/templates/company/company_base.html:84 +msgid "Phone" +msgstr "" + +#: company/templates/company/delete.html:7 +#, python-format +msgid "Are you sure you want to delete company '%(name)s'?" +msgstr "" + +#: company/templates/company/delete.html:12 +#, python-format +msgid "" +"There are %(count)s parts sourced from this company.
    \n" +"If this supplier is deleted, these supplier part entries will also be " +"deleted." +msgstr "" + +#: company/templates/company/detail.html:21 +msgid "Company Name" +msgstr "" + +#: company/templates/company/detail.html:36 +msgid "No website specified" +msgstr "" + +#: company/templates/company/detail.html:45 +msgid "Uses default currency" +msgstr "" + +#: company/templates/company/detail.html:67 order/models.py:440 +#: order/templates/order/sales_order_base.html:92 stock/models.py:415 +#: stock/models.py:416 stock/templates/stock/item_base.html:251 +#: templates/js/company.js:40 templates/js/order.js:267 +msgid "Customer" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:11 +#: templates/InvenTree/search.html:149 +msgid "Manufacturer Parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:22 +msgid "Create new manufacturer part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:23 +#: part/templates/part/manufacturer.html:19 +msgid "New Manufacturer Part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:28 +#: company/templates/company/detail_supplier_part.html:27 +#: company/templates/company/manufacturer_part_suppliers.html:20 +#: part/templates/part/category.html:122 +#: part/templates/part/manufacturer.html:22 +#: part/templates/part/supplier.html:20 +msgid "Options" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:33 +#: company/templates/company/detail_supplier_part.html:32 +#: part/templates/part/category.html:127 +msgid "Order parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:36 +#: company/templates/company/detail_supplier_part.html:35 +msgid "Delete parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:36 +#: company/templates/company/detail_supplier_part.html:35 +msgid "Delete Parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:66 +#: company/templates/company/detail_supplier_part.html:66 +#: part/templates/part/bom.html:159 part/templates/part/category.html:118 +#: templates/js/stock.js:1157 +msgid "New Part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:67 +#: company/templates/company/detail_supplier_part.html:67 +msgid "Create new Part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:72 +#: company/views.py:71 part/templates/part/manufacturer.html:52 +#: part/templates/part/supplier.html:56 +msgid "New Manufacturer" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:73 +#: company/views.py:284 +msgid "Create new Manufacturer" +msgstr "" + +#: company/templates/company/detail_stock.html:10 +msgid "Supplier Stock" +msgstr "" + +#: company/templates/company/detail_stock.html:37 +#: company/templates/company/supplier_part_stock.html:34 +#: part/templates/part/category.html:114 part/templates/part/category.html:128 +#: part/templates/part/stock.html:54 stock/templates/stock/location.html:163 +msgid "Export" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:11 +#: company/templates/company/manufacturer_part_navbar.html:11 +#: company/templates/company/manufacturer_part_suppliers.html:10 +#: templates/InvenTree/search.html:164 +msgid "Supplier Parts" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:21 +#: order/templates/order/order_wizard/select_parts.html:42 +#: order/templates/order/purchase_order_detail.html:75 +msgid "Create new supplier part" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:22 +#: company/templates/company/manufacturer_part_suppliers.html:17 +#: order/templates/order/purchase_order_detail.html:74 +#: part/templates/part/supplier.html:17 templates/js/stock.js:1163 +msgid "New Supplier Part" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:72 +#: company/templates/company/manufacturer_part_suppliers.html:47 +#: company/views.py:64 order/templates/order/purchase_orders.html:183 +#: part/templates/part/supplier.html:50 +msgid "New Supplier" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:73 company/views.py:281 +#: order/templates/order/purchase_orders.html:184 +msgid "Create new Supplier" +msgstr "" + +#: company/templates/company/index.html:8 +msgid "Supplier List" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:36 +#: company/templates/company/supplier_part_base.html:36 +#: company/templates/company/supplier_part_orders.html:17 +#: part/templates/part/orders.html:17 part/templates/part/part_base.html:65 +msgid "Order part" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:41 +msgid "Edit manufacturer part" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:45 +msgid "Delete manufacturer part" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:57 +#: company/templates/company/manufacturer_part_detail.html:10 +msgid "Manufacturer Part Details" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:62 +#: company/templates/company/manufacturer_part_detail.html:18 +#: company/templates/company/supplier_part_base.html:61 +#: company/templates/company/supplier_part_detail.html:18 +msgid "Internal Part" +msgstr "" + +#: company/templates/company/manufacturer_part_delete.html:6 +msgid "Are you sure you want to delete the following Manufacturer Parts?" +msgstr "" + +#: company/templates/company/manufacturer_part_delete.html:36 +#, python-format +msgid "" +"There are %(count)s suppliers defined for this manufacturer part. If you " +"delete it, the following supplier parts will also be deleted:" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:14 +#: company/views.py:63 part/templates/part/navbar.html:78 +#: part/templates/part/navbar.html:81 templates/InvenTree/search.html:316 +#: templates/navbar.html:35 +msgid "Suppliers" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:19 +msgid "Manufacturer Part Stock" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:22 +#: company/templates/company/navbar.html:41 +#: company/templates/company/supplier_part_navbar.html:15 +#: part/templates/part/navbar.html:36 stock/api.py:51 +#: stock/templates/stock/loc_link.html:7 stock/templates/stock/location.html:36 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/index.html:128 templates/InvenTree/search.html:196 +#: templates/InvenTree/search.html:232 +#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:173 +#: templates/js/part.js:398 templates/js/stock.js:563 templates/navbar.html:26 +msgid "Stock" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:26 +msgid "Manufacturer Part Orders" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:29 +#: company/templates/company/supplier_part_navbar.html:22 +msgid "Orders" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:22 +#: part/templates/part/supplier.html:22 +msgid "Delete supplier parts" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:22 +#: part/templates/part/manufacturer.html:24 part/templates/part/params.html:44 +#: part/templates/part/related.html:44 part/templates/part/supplier.html:22 +#: stock/views.py:1002 users/models.py:184 +msgid "Delete" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:48 +#: part/templates/part/supplier.html:51 +msgid "Create new supplier" +msgstr "" + +#: company/templates/company/navbar.html:20 +#: company/templates/company/navbar.html:23 +msgid "Manufactured Parts" +msgstr "" + +#: company/templates/company/navbar.html:29 +#: company/templates/company/navbar.html:32 +msgid "Supplied Parts" +msgstr "" + +#: company/templates/company/navbar.html:38 part/templates/part/navbar.html:33 +#: stock/templates/stock/location.html:107 +#: stock/templates/stock/location.html:122 +#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location_navbar.html:22 +#: stock/templates/stock/location_navbar.html:29 +#: templates/InvenTree/search.html:198 templates/js/stock.js:968 +#: templates/stats.html:72 templates/stats.html:81 users/models.py:40 +msgid "Stock Items" +msgstr "" + +#: company/templates/company/navbar.html:47 +#: company/templates/company/navbar.html:56 +#: company/templates/company/navbar.html:59 +#: company/templates/company/sales_orders.html:11 +#: order/templates/order/sales_orders.html:8 +#: order/templates/order/sales_orders.html:13 +#: part/templates/part/navbar.html:98 part/templates/part/navbar.html:101 +#: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:228 +#: templates/InvenTree/search.html:345 +#: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46 +#: users/models.py:43 +msgid "Sales Orders" +msgstr "" + +#: company/templates/company/navbar.html:50 +#: company/templates/company/purchase_orders.html:10 +#: order/templates/order/purchase_orders.html:8 +#: order/templates/order/purchase_orders.html:13 +#: part/templates/part/navbar.html:84 part/templates/part/navbar.html:87 +#: part/templates/part/orders.html:10 templates/InvenTree/index.html:205 +#: templates/InvenTree/search.html:325 +#: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37 +#: users/models.py:42 +msgid "Purchase Orders" +msgstr "" + +#: company/templates/company/notes.html:11 +msgid "Company Notes" +msgstr "" + +#: company/templates/company/purchase_orders.html:18 +#: order/templates/order/purchase_orders.html:20 +msgid "Create new purchase order" +msgstr "" + +#: company/templates/company/purchase_orders.html:19 +#: order/templates/order/purchase_orders.html:21 +msgid "New Purchase Order" +msgstr "" + +#: company/templates/company/sales_orders.html:19 +#: order/templates/order/sales_orders.html:20 +msgid "Create new sales order" +msgstr "" + +#: company/templates/company/sales_orders.html:20 +#: order/templates/order/sales_orders.html:21 +msgid "New Sales Order" +msgstr "" + +#: company/templates/company/supplier_part_base.html:7 +#: company/templates/company/supplier_part_base.html:20 stock/models.py:382 +#: stock/templates/stock/item_base.html:358 templates/js/company.js:279 +msgid "Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part_base.html:40 +msgid "Edit supplier part" +msgstr "" + +#: company/templates/company/supplier_part_base.html:44 +msgid "Delete supplier part" +msgstr "" + +#: company/templates/company/supplier_part_base.html:56 +#: company/templates/company/supplier_part_detail.html:10 +msgid "Supplier Part Details" +msgstr "" + +#: company/templates/company/supplier_part_delete.html:5 +msgid "Are you sure you want to delete the following Supplier Parts?" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part_stock.html:10 +msgid "Supplier Part Stock" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part_orders.html:10 +msgid "Supplier Part Orders" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:26 +msgid "Supplier Part Pricing" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:29 +msgid "Pricing" +msgstr "" + +#: company/templates/company/supplier_part_orders.html:18 +#: part/templates/part/orders.html:18 +msgid "Order Part" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:11 +msgid "Pricing Information" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:19 company/views.py:794 +#: part/templates/part/sale_prices.html:17 part/views.py:2624 +msgid "Add Price Break" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:38 +#: part/templates/part/sale_prices.html:46 +msgid "No price break information found" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:89 +#: part/templates/part/sale_prices.html:97 +msgid "Edit price break" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:90 +#: part/templates/part/sale_prices.html:98 +msgid "Delete price break" +msgstr "" + +#: company/views.py:70 part/templates/part/navbar.html:72 +#: part/templates/part/navbar.html:75 templates/InvenTree/search.html:306 +#: templates/navbar.html:36 +msgid "Manufacturers" +msgstr "" + +#: company/views.py:77 templates/InvenTree/search.html:336 +#: templates/navbar.html:45 +msgid "Customers" +msgstr "" + +#: company/views.py:78 order/templates/order/sales_orders.html:185 +msgid "New Customer" +msgstr "" + +#: company/views.py:86 +msgid "Companies" +msgstr "" + +#: company/views.py:87 +msgid "New Company" +msgstr "" + +#: company/views.py:169 part/views.py:848 +msgid "Download Image" +msgstr "" + +#: company/views.py:198 part/views.py:880 +msgid "Image size exceeds maximum allowable size for download" +msgstr "" + +#: company/views.py:214 part/views.py:896 +msgid "Supplied URL is not a valid image file" +msgstr "" + +#: company/views.py:243 +msgid "Update Company Image" +msgstr "" + +#: company/views.py:249 +msgid "Updated company image" +msgstr "" + +#: company/views.py:259 +msgid "Edit Company" +msgstr "" + +#: company/views.py:264 +msgid "Edited company information" +msgstr "" + +#: company/views.py:287 order/templates/order/sales_orders.html:186 +msgid "Create new Customer" +msgstr "" + +#: company/views.py:289 +msgid "Create new Company" +msgstr "" + +#: company/views.py:316 +msgid "Created new company" +msgstr "" + +#: company/views.py:332 +msgid "Company was deleted" +msgstr "" + +#: company/views.py:357 +msgid "Edit Manufacturer Part" +msgstr "" + +#: company/views.py:366 +msgid "Create New Manufacturer Part" +msgstr "" + +#: company/views.py:440 +msgid "Delete Manufacturer Part" +msgstr "" + +#: company/views.py:528 +msgid "Edit Supplier Part" +msgstr "" + +#: company/views.py:578 templates/js/stock.js:1164 +msgid "Create new Supplier Part" +msgstr "" + +#: company/views.py:722 +msgid "Delete Supplier Part" +msgstr "" + +#: company/views.py:799 part/views.py:2628 +msgid "Added new price break" +msgstr "" + +#: company/views.py:855 part/views.py:2672 +msgid "Edit Price Break" +msgstr "" + +#: company/views.py:870 part/views.py:2686 +msgid "Delete Price Break" +msgstr "" + +#: label/api.py:56 report/api.py:201 +msgid "No valid objects provided to template" +msgstr "" + +#: label/models.py:102 +msgid "Label name" +msgstr "" + +#: label/models.py:109 +msgid "Label description" +msgstr "" + +#: label/models.py:116 stock/forms.py:202 +msgid "Label" +msgstr "" + +#: label/models.py:117 +msgid "Label template file" +msgstr "" + +#: label/models.py:123 report/models.py:274 +msgid "Enabled" +msgstr "" + +#: label/models.py:124 +msgid "Label template is enabled" +msgstr "" + +#: label/models.py:129 +msgid "Width [mm]" +msgstr "" + +#: label/models.py:130 +msgid "Label width, specified in mm" +msgstr "" + +#: label/models.py:136 +msgid "Height [mm]" +msgstr "" + +#: label/models.py:137 +msgid "Label height, specified in mm" +msgstr "" + +#: label/models.py:222 label/models.py:275 +msgid "Query filters (comma-separated list of key=value pairs" +msgstr "" + +#: label/models.py:223 label/models.py:276 report/models.py:294 +#: report/models.py:415 report/models.py:449 +msgid "Filters" +msgstr "" + +#: order/forms.py:27 order/templates/order/order_base.html:47 +msgid "Place order" +msgstr "" + +#: order/forms.py:38 order/templates/order/order_base.html:54 +msgid "Mark order as complete" +msgstr "" + +#: order/forms.py:49 order/forms.py:60 order/templates/order/order_base.html:59 +#: order/templates/order/sales_order_base.html:59 +msgid "Cancel order" +msgstr "" + +#: order/forms.py:71 order/templates/order/sales_order_base.html:56 +msgid "Ship order" +msgstr "" + +#: order/forms.py:82 +msgid "Receive parts to this location" +msgstr "" + +#: order/forms.py:103 +msgid "Purchase Order reference" +msgstr "" + +#: order/forms.py:110 +msgid "Target date for order delivery. Order will be overdue after this date." +msgstr "" + +#: order/forms.py:138 +msgid "Enter sales order number" +msgstr "" + +#: order/forms.py:145 order/models.py:452 +msgid "" +"Target date for order completion. Order will be overdue after this date." +msgstr "" + +#: order/forms.py:235 +msgid "Enter stock item serial numbers" +msgstr "" + +#: order/forms.py:241 +msgid "Enter quantity of stock items" +msgstr "" + +#: order/models.py:99 +msgid "Order reference" +msgstr "" + +#: order/models.py:101 +msgid "Order description" +msgstr "" + +#: order/models.py:103 +msgid "Link to external page" +msgstr "" + +#: order/models.py:111 part/templates/part/detail.html:132 +msgid "Created By" +msgstr "" + +#: order/models.py:118 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:123 +msgid "Order notes" +msgstr "" + +#: order/models.py:182 order/models.py:445 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:191 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:194 order/templates/order/order_base.html:98 +#: templates/js/order.js:179 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:194 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:201 +msgid "received by" +msgstr "" + +#: order/models.py:206 +msgid "Issue Date" +msgstr "" + +#: order/models.py:207 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:212 +msgid "Target Delivery Date" +msgstr "" + +#: order/models.py:213 +msgid "" +"Expected date for order delivery. Order will be overdue after this date." +msgstr "" + +#: order/models.py:219 +msgid "Date order was completed" +msgstr "" + +#: order/models.py:243 order/models.py:342 part/views.py:1586 +#: stock/models.py:270 stock/models.py:953 +msgid "Quantity must be greater than zero" +msgstr "" + +#: order/models.py:248 +msgid "Part supplier must match PO supplier" +msgstr "" + +#: order/models.py:337 +msgid "Lines can only be received against an order marked as 'Placed'" +msgstr "" + +#: order/models.py:359 +msgid "Received items" +msgstr "" + +#: order/models.py:441 +msgid "Company to which the items are being sold" +msgstr "" + +#: order/models.py:447 +msgid "Customer Reference " +msgstr "" + +#: order/models.py:447 +msgid "Customer order reference code" +msgstr "" + +#: order/models.py:455 templates/js/order.js:303 +msgid "Shipment Date" +msgstr "" + +#: order/models.py:462 +msgid "shipped by" +msgstr "" + +#: order/models.py:506 +msgid "SalesOrder cannot be shipped as it is not currently pending" +msgstr "" + +#: order/models.py:593 +msgid "Item quantity" +msgstr "" + +#: order/models.py:595 +msgid "Line item reference" +msgstr "" + +#: order/models.py:597 +msgid "Line item notes" +msgstr "" + +#: order/models.py:623 order/models.py:667 +#: part/templates/part/allocation.html:17 +#: part/templates/part/allocation.html:45 +msgid "Order" +msgstr "" + +#: order/models.py:624 order/templates/order/order_base.html:9 +#: order/templates/order/order_base.html:24 +#: report/templates/report/inventree_po_report.html:77 +#: stock/templates/stock/item_base.html:313 templates/js/order.js:148 +msgid "Purchase Order" +msgstr "" + +#: order/models.py:638 +msgid "Supplier part" +msgstr "" + +#: order/models.py:641 order/templates/order/order_base.html:131 +#: order/templates/order/purchase_order_detail.html:214 +#: order/templates/order/receive_parts.html:22 +#: order/templates/order/sales_order_base.html:131 +msgid "Received" +msgstr "" + +#: order/models.py:641 +msgid "Number of items received" +msgstr "" + +#: order/models.py:648 stock/models.py:508 +#: stock/templates/stock/item_base.html:320 +msgid "Purchase Price" +msgstr "" + +#: order/models.py:649 +msgid "Unit purchase price" +msgstr "" + +#: order/models.py:743 order/models.py:745 +msgid "Stock item has not been assigned" +msgstr "" + +#: order/models.py:749 +msgid "Cannot allocate stock item to a line with a different part" +msgstr "" + +#: order/models.py:751 +msgid "Cannot allocate stock to a line without a part" +msgstr "" + +#: order/models.py:754 +msgid "Allocation quantity cannot exceed stock quantity" +msgstr "" + +#: order/models.py:764 +msgid "Quantity must be 1 for serialized stock item" +msgstr "" + +#: order/models.py:769 +msgid "Line" +msgstr "" + +#: order/models.py:780 +msgid "Item" +msgstr "" + +#: order/models.py:781 +msgid "Select stock item to allocate" +msgstr "" + +#: order/models.py:784 +msgid "Enter stock allocation quantity" +msgstr "" + +#: order/templates/order/delete_attachment.html:5 +#: stock/templates/stock/attachment_delete.html:5 +#: templates/attachment_delete.html:5 +msgid "Are you sure you want to delete this attachment?" +msgstr "" + +#: order/templates/order/order_base.html:39 +#: order/templates/order/sales_order_base.html:48 +msgid "Print" +msgstr "" + +#: order/templates/order/order_base.html:43 +#: order/templates/order/sales_order_base.html:52 +msgid "Edit order information" +msgstr "" + +#: order/templates/order/order_base.html:51 +msgid "Receive items" +msgstr "" + +#: order/templates/order/order_base.html:64 +msgid "Export order to file" +msgstr "" + +#: order/templates/order/order_base.html:72 +#: order/templates/order/po_navbar.html:11 +msgid "Purchase Order Details" +msgstr "" + +#: order/templates/order/order_base.html:77 +#: order/templates/order/sales_order_base.html:77 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:82 +#: order/templates/order/sales_order_base.html:82 +msgid "Order Status" +msgstr "" + +#: order/templates/order/order_base.html:117 +#: report/templates/report/inventree_build_order_base.html:122 +msgid "Issued" +msgstr "" + +#: order/templates/order/order_cancel.html:7 +#: order/templates/order/sales_order_cancel.html:9 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: order/templates/order/order_complete.html:7 +msgid "Mark this order as complete?" +msgstr "" + +#: order/templates/order/order_complete.html:10 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: order/templates/order/order_complete.html:11 +msgid "Marking this order as complete will remove these line items." +msgstr "" + +#: order/templates/order/order_issue.html:7 +msgid "" +"After placing this purchase order, line items will no longer be editable." +msgstr "" + +#: order/templates/order/order_notes.html:13 +msgid "Order Notes" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:9 +msgid "Step 1 of 2 - Select Part Suppliers" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:14 +msgid "Select suppliers" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:18 +msgid "No purchaseable parts selected" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:31 +msgid "Select Supplier" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:57 +#, python-format +msgid "Select a supplier for %(name)s" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:69 +#: part/templates/part/set_category.html:32 +msgid "Remove part" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:8 +msgid "Step 2 of 2 - Select Purchase Orders" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:12 +msgid "Select existing purchase orders, or create new orders." +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:31 +#: templates/js/order.js:205 templates/js/order.js:308 +msgid "Items" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:32 +msgid "Select Purchase Order" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:45 +#, python-format +msgid "Create new purchase order for %(name)s" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:68 +#, python-format +msgid "Select a purchase order for %(name)s" +msgstr "" + +#: order/templates/order/po_attachments.html:12 +#: order/templates/order/po_navbar.html:23 +msgid "Purchase Order Attachments" +msgstr "" + +#: order/templates/order/po_navbar.html:17 +msgid "Received Stock Items" +msgstr "" + +#: order/templates/order/po_navbar.html:20 +#: order/templates/order/po_received_items.html:12 +msgid "Received Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:14 +msgid "Purchase Order Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:24 +#: order/templates/order/sales_order_detail.html:22 order/views.py:1108 +#: order/views.py:1191 +msgid "Add Line Item" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:125 +#: part/templates/part/category.html:185 part/templates/part/category.html:227 +#: stock/templates/stock/location.html:191 templates/js/stock.js:708 +#: templates/js/stock.js:1169 +msgid "New Location" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:46 +#: order/templates/order/purchase_order_detail.html:126 +#: stock/templates/stock/location.html:42 +msgid "Create new stock location" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:139 +msgid "No line items found" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:205 +msgid "Unit Price" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:246 +#: order/templates/order/sales_order_detail.html:294 +msgid "Edit line item" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:247 +msgid "Delete line item" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:252 +msgid "Receive line item" +msgstr "" + +#: order/templates/order/purchase_orders.html:24 +#: order/templates/order/sales_orders.html:24 +msgid "Print Order Reports" +msgstr "" + +#: order/templates/order/receive_parts.html:8 +#, python-format +msgid "Receive outstanding parts for %(order)s - %(desc)s" +msgstr "" + +#: order/templates/order/receive_parts.html:14 part/api.py:40 +#: part/models.py:322 part/templates/part/cat_link.html:7 +#: part/templates/part/category.html:99 +#: part/templates/part/category_navbar.html:22 +#: part/templates/part/category_navbar.html:29 +#: part/templates/part/category_partlist.html:10 +#: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114 +#: templates/InvenTree/settings/tabs.html:25 templates/js/part.js:577 +#: templates/navbar.html:23 templates/stats.html:59 templates/stats.html:68 +#: users/models.py:38 +msgid "Parts" +msgstr "" + +#: order/templates/order/receive_parts.html:15 +msgid "Select parts to receive against this order" +msgstr "" + +#: order/templates/order/receive_parts.html:20 +msgid "Order Code" +msgstr "" + +#: order/templates/order/receive_parts.html:21 +#: part/templates/part/part_base.html:129 templates/js/part.js:414 +msgid "On Order" +msgstr "" + +#: order/templates/order/receive_parts.html:23 +msgid "Receive" +msgstr "" + +#: order/templates/order/receive_parts.html:36 +msgid "Error: Referenced part has been removed" +msgstr "" + +#: order/templates/order/receive_parts.html:57 +msgid "Remove line" +msgstr "" + +#: order/templates/order/sales_order_base.html:15 +msgid "This SalesOrder has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:64 +msgid "Packing List" +msgstr "" + +#: order/templates/order/sales_order_base.html:72 +#: order/templates/order/so_navbar.html:12 +msgid "Sales Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:98 templates/js/order.js:275 +msgid "Customer Reference" +msgstr "" + +#: order/templates/order/sales_order_cancel.html:8 +#: order/templates/order/sales_order_ship.html:9 +#: part/templates/part/bom_duplicate.html:12 +#: stock/templates/stock/stockitem_convert.html:13 +msgid "Warning" +msgstr "" + +#: order/templates/order/sales_order_detail.html:13 +msgid "Sales Order Items" +msgstr "" + +#: order/templates/order/sales_order_detail.html:75 +#: order/templates/order/sales_order_detail.html:157 +#: report/templates/report/inventree_test_report_base.html:75 +#: stock/models.py:420 stock/templates/stock/item_base.html:238 +#: templates/js/build.js:418 +msgid "Serial Number" +msgstr "" + +#: order/templates/order/sales_order_detail.html:92 templates/js/bom.js:342 +#: templates/js/build.js:571 templates/js/build.js:984 +msgid "Actions" +msgstr "" + +#: order/templates/order/sales_order_detail.html:99 templates/js/build.js:459 +#: templates/js/build.js:789 +msgid "Edit stock allocation" +msgstr "" + +#: order/templates/order/sales_order_detail.html:100 templates/js/build.js:461 +#: templates/js/build.js:790 +msgid "Delete stock allocation" +msgstr "" + +#: order/templates/order/sales_order_detail.html:170 +msgid "No matching line items" +msgstr "" + +#: order/templates/order/sales_order_detail.html:199 +msgid "ID" +msgstr "" + +#: order/templates/order/sales_order_detail.html:229 templates/js/build.js:523 +#: templates/js/build.js:785 +msgid "Allocated" +msgstr "" + +#: order/templates/order/sales_order_detail.html:231 +msgid "Fulfilled" +msgstr "" + +#: order/templates/order/sales_order_detail.html:279 +msgid "Allocate serial numbers" +msgstr "" + +#: order/templates/order/sales_order_detail.html:282 templates/js/build.js:585 +msgid "Allocate stock" +msgstr "" + +#: order/templates/order/sales_order_detail.html:285 +msgid "Purchase stock" +msgstr "" + +#: order/templates/order/sales_order_detail.html:289 templates/js/build.js:578 +#: templates/js/build.js:992 +msgid "Build stock" +msgstr "" + +#: order/templates/order/sales_order_detail.html:295 +msgid "Delete line item " +msgstr "" + +#: order/templates/order/sales_order_notes.html:14 +msgid "Sales Order Notes" +msgstr "" + +#: order/templates/order/sales_order_ship.html:10 +msgid "" +"This order has not been fully allocated. If the order is marked as shipped, " +"it can no longer be adjusted." +msgstr "" + +#: order/templates/order/sales_order_ship.html:12 +msgid "Ensure that the order allocation is correct before shipping the order." +msgstr "" + +#: order/templates/order/sales_order_ship.html:18 +msgid "Some line items in this order have been over-allocated" +msgstr "" + +#: order/templates/order/sales_order_ship.html:20 +msgid "Ensure that this is correct before shipping the order." +msgstr "" + +#: order/templates/order/sales_order_ship.html:27 +msgid "Shipping this order means that the order will no longer be editable." +msgstr "" + +#: order/templates/order/so_allocate_by_serial.html:9 +msgid "Allocate stock items by serial number" +msgstr "" + +#: order/templates/order/so_allocation_delete.html:7 +msgid "This action will unallocate the following stock from the Sales Order" +msgstr "" + +#: order/templates/order/so_attachments.html:12 +#: order/templates/order/so_navbar.html:26 +msgid "Sales Order Attachments" +msgstr "" + +#: order/templates/order/so_lineitem_delete.html:5 +msgid "Are you sure you wish to delete this line item?" +msgstr "" + +#: order/views.py:99 +msgid "Add Purchase Order Attachment" +msgstr "" + +#: order/views.py:149 +msgid "Add Sales Order Attachment" +msgstr "" + +#: order/views.py:341 +msgid "Create Sales Order" +msgstr "" + +#: order/views.py:376 +msgid "Edit Purchase Order" +msgstr "" + +#: order/views.py:396 +msgid "Edit Sales Order" +msgstr "" + +#: order/views.py:412 +msgid "Cancel Order" +msgstr "" + +#: order/views.py:421 order/views.py:447 +msgid "Confirm order cancellation" +msgstr "" + +#: order/views.py:424 order/views.py:450 +msgid "Order cannot be cancelled" +msgstr "" + +#: order/views.py:438 +msgid "Cancel sales order" +msgstr "" + +#: order/views.py:464 +msgid "Issue Order" +msgstr "" + +#: order/views.py:473 +msgid "Confirm order placement" +msgstr "" + +#: order/views.py:483 +msgid "Purchase order issued" +msgstr "" + +#: order/views.py:494 +msgid "Complete Order" +msgstr "" + +#: order/views.py:510 +msgid "Confirm order completion" +msgstr "" + +#: order/views.py:521 +msgid "Purchase order completed" +msgstr "" + +#: order/views.py:531 +msgid "Ship Order" +msgstr "" + +#: order/views.py:547 +msgid "Confirm order shipment" +msgstr "" + +#: order/views.py:553 +msgid "Could not ship order" +msgstr "" + +#: order/views.py:607 +msgid "Receive Parts" +msgstr "" + +#: order/views.py:677 +msgid "Items received" +msgstr "" + +#: order/views.py:691 +msgid "No destination set" +msgstr "" + +#: order/views.py:736 +msgid "Error converting quantity to number" +msgstr "" + +#: order/views.py:742 +msgid "Receive quantity less than zero" +msgstr "" + +#: order/views.py:748 +msgid "No lines specified" +msgstr "" + +#: order/views.py:1060 +#, python-brace-format +msgid "Ordered {n} parts" +msgstr "" + +#: order/views.py:1117 +msgid "Supplier part must be specified" +msgstr "" + +#: order/views.py:1123 +msgid "Supplier must match for Part and Order" +msgstr "" + +#: order/views.py:1242 order/views.py:1260 +msgid "Edit Line Item" +msgstr "" + +#: order/views.py:1276 order/views.py:1288 +msgid "Delete Line Item" +msgstr "" + +#: order/views.py:1281 order/views.py:1293 +msgid "Deleted line item" +msgstr "" + +#: order/views.py:1306 +msgid "Allocate Serial Numbers" +msgstr "" + +#: order/views.py:1351 +#, python-brace-format +msgid "Allocated {n} items" +msgstr "" + +#: order/views.py:1367 +msgid "Select line item" +msgstr "" + +#: order/views.py:1398 +msgid "No matching item for serial" +msgstr "" + +#: order/views.py:1408 +msgid "is not in stock" +msgstr "" + +#: order/views.py:1416 +msgid "already allocated to an order" +msgstr "" + +#: order/views.py:1470 +msgid "Allocate Stock to Order" +msgstr "" + +#: order/views.py:1544 +msgid "Edit Allocation Quantity" +msgstr "" + +#: order/views.py:1559 +msgid "Remove allocation" +msgstr "" + +#: part/bom.py:138 part/models.py:72 part/models.py:762 +#: part/templates/part/category.html:66 part/templates/part/detail.html:90 +msgid "Default Location" +msgstr "" + +#: part/bom.py:139 part/templates/part/part_base.html:117 +msgid "Available Stock" +msgstr "" + +#: part/bom.py:379 +#, python-brace-format +msgid "Unsupported file format: {f}" +msgstr "" + +#: part/bom.py:384 +msgid "Error reading BOM file (invalid data)" +msgstr "" + +#: part/bom.py:386 +msgid "Error reading BOM file (incorrect row size)" +msgstr "" + +#: part/forms.py:89 stock/forms.py:265 +msgid "File Format" +msgstr "" + +#: part/forms.py:89 stock/forms.py:265 +msgid "Select output file format" +msgstr "" + +#: part/forms.py:91 +msgid "Cascading" +msgstr "" + +#: part/forms.py:91 +msgid "Download cascading / multi-level BOM" +msgstr "" + +#: part/forms.py:93 +msgid "Levels" +msgstr "" + +#: part/forms.py:93 +msgid "Select maximum number of BOM levels to export (0 = all levels)" +msgstr "" + +#: part/forms.py:95 +msgid "Include Parameter Data" +msgstr "" + +#: part/forms.py:95 +msgid "Include part parameters data in exported BOM" +msgstr "" + +#: part/forms.py:97 +msgid "Include Stock Data" +msgstr "" + +#: part/forms.py:97 +msgid "Include part stock data in exported BOM" +msgstr "" + +#: part/forms.py:99 +msgid "Include Manufacturer Data" +msgstr "" + +#: part/forms.py:99 +msgid "Include part manufacturer data in exported BOM" +msgstr "" + +#: part/forms.py:101 +msgid "Include Supplier Data" +msgstr "" + +#: part/forms.py:101 +msgid "Include part supplier data in exported BOM" +msgstr "" + +#: part/forms.py:122 part/models.py:2077 +msgid "Parent Part" +msgstr "" + +#: part/forms.py:123 part/templates/part/bom_duplicate.html:7 +msgid "Select parent part to copy BOM from" +msgstr "" + +#: part/forms.py:129 +msgid "Clear existing BOM items" +msgstr "" + +#: part/forms.py:135 +msgid "Confirm BOM duplication" +msgstr "" + +#: part/forms.py:153 +msgid "validate" +msgstr "" + +#: part/forms.py:153 +msgid "Confirm that the BOM is correct" +msgstr "" + +#: part/forms.py:165 +msgid "BOM file" +msgstr "" + +#: part/forms.py:165 +msgid "Select BOM file to upload" +msgstr "" + +#: part/forms.py:184 +msgid "Related Part" +msgstr "" + +#: part/forms.py:203 +msgid "Select part category" +msgstr "" + +#: part/forms.py:220 +msgid "Duplicate all BOM data for this part" +msgstr "" + +#: part/forms.py:221 +msgid "Copy BOM" +msgstr "" + +#: part/forms.py:226 +msgid "Duplicate all parameter data for this part" +msgstr "" + +#: part/forms.py:227 +msgid "Copy Parameters" +msgstr "" + +#: part/forms.py:232 +msgid "Confirm part creation" +msgstr "" + +#: part/forms.py:237 +msgid "Include category parameter templates" +msgstr "" + +#: part/forms.py:242 +msgid "Include parent categories parameter templates" +msgstr "" + +#: part/forms.py:322 +msgid "Add parameter template to same level categories" +msgstr "" + +#: part/forms.py:326 +msgid "Add parameter template to all categories" +msgstr "" + +#: part/forms.py:344 part/models.py:2171 +msgid "Sub part" +msgstr "" + +#: part/forms.py:372 +msgid "Input quantity for price calculation" +msgstr "" + +#: part/models.py:73 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:76 +msgid "Default keywords" +msgstr "" + +#: part/models.py:76 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:82 part/models.py:2123 +#: part/templates/part/part_app_base.html:10 +msgid "Part Category" +msgstr "" + +#: part/models.py:83 part/templates/part/category.html:23 +#: part/templates/part/category.html:94 part/templates/part/category.html:141 +#: templates/InvenTree/search.html:127 templates/stats.html:63 +#: users/models.py:37 +msgid "Part Categories" +msgstr "" + +#: part/models.py:446 part/models.py:458 +#, python-brace-format +msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" +msgstr "" + +#: part/models.py:555 +msgid "Next available serial numbers are" +msgstr "" + +#: part/models.py:559 +msgid "Next available serial number is" +msgstr "" + +#: part/models.py:564 +msgid "Most recent serial number is" +msgstr "" + +#: part/models.py:643 +msgid "Duplicate IPN not allowed in part settings" +msgstr "" + +#: part/models.py:654 +msgid "Part must be unique for name, IPN and revision" +msgstr "" + +#: part/models.py:685 part/templates/part/detail.html:22 +msgid "Part name" +msgstr "" + +#: part/models.py:692 +msgid "Is Template" +msgstr "" + +#: part/models.py:693 +msgid "Is this part a template part?" +msgstr "" + +#: part/models.py:704 +msgid "Is this part a variant of another part?" +msgstr "" + +#: part/models.py:705 part/templates/part/detail.html:60 +msgid "Variant Of" +msgstr "" + +#: part/models.py:711 +msgid "Part description" +msgstr "" + +#: part/models.py:716 part/templates/part/category.html:73 +#: part/templates/part/detail.html:67 +msgid "Keywords" +msgstr "" + +#: part/models.py:717 +msgid "Part keywords to improve visibility in search results" +msgstr "" + +#: part/models.py:724 part/models.py:2122 part/templates/part/detail.html:73 +#: part/templates/part/set_category.html:15 templates/js/part.js:385 +msgid "Category" +msgstr "" + +#: part/models.py:725 +msgid "Part category" +msgstr "" + +#: part/models.py:730 part/templates/part/detail.html:28 +#: part/templates/part/part_base.html:94 templates/js/part.js:161 +msgid "IPN" +msgstr "" + +#: part/models.py:731 +msgid "Internal Part Number" +msgstr "" + +#: part/models.py:737 +msgid "Part revision or version number" +msgstr "" + +#: part/models.py:738 part/templates/part/detail.html:35 report/models.py:198 +#: templates/js/part.js:165 +msgid "Revision" +msgstr "" + +#: part/models.py:760 +msgid "Where is this item normally stored?" +msgstr "" + +#: part/models.py:807 part/templates/part/detail.html:97 +msgid "Default Supplier" +msgstr "" + +#: part/models.py:808 +msgid "Default supplier part" +msgstr "" + +#: part/models.py:815 +msgid "Default Expiry" +msgstr "" + +#: part/models.py:816 +msgid "Expiry time (in days) for stock items of this part" +msgstr "" + +#: part/models.py:821 part/templates/part/detail.html:113 +msgid "Minimum Stock" +msgstr "" + +#: part/models.py:822 +msgid "Minimum allowed stock level" +msgstr "" + +#: part/models.py:828 part/models.py:2051 part/templates/part/detail.html:106 +#: part/templates/part/params.html:29 +msgid "Units" +msgstr "" + +#: part/models.py:829 +msgid "Stock keeping units for this part" +msgstr "" + +#: part/models.py:835 +msgid "Can this part be built from other parts?" +msgstr "" + +#: part/models.py:841 +msgid "Can this part be used to build other parts?" +msgstr "" + +#: part/models.py:847 +msgid "Does this part have tracking for unique items?" +msgstr "" + +#: part/models.py:852 +msgid "Can this part be purchased from external suppliers?" +msgstr "" + +#: part/models.py:857 +msgid "Can this part be sold to customers?" +msgstr "" + +#: part/models.py:861 part/templates/part/detail.html:227 +#: templates/js/table_filters.js:20 templates/js/table_filters.js:60 +#: templates/js/table_filters.js:236 templates/js/table_filters.js:305 +msgid "Active" +msgstr "" + +#: part/models.py:862 +msgid "Is this part active?" +msgstr "" + +#: part/models.py:867 +msgid "Is this a virtual part, such as a software product or license?" +msgstr "" + +#: part/models.py:872 +msgid "Part notes - supports Markdown formatting" +msgstr "" + +#: part/models.py:875 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:875 +msgid "Stored BOM checksum" +msgstr "" + +#: part/models.py:878 +msgid "BOM checked by" +msgstr "" + +#: part/models.py:880 +msgid "BOM checked date" +msgstr "" + +#: part/models.py:884 +msgid "Creation User" +msgstr "" + +#: part/models.py:1949 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:1966 +msgid "Test with this name already exists for this part" +msgstr "" + +#: part/models.py:1986 templates/js/part.js:638 templates/js/stock.js:104 +msgid "Test Name" +msgstr "" + +#: part/models.py:1987 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:1992 +msgid "Test Description" +msgstr "" + +#: part/models.py:1993 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:1998 templates/js/part.js:647 +#: templates/js/table_filters.js:222 +msgid "Required" +msgstr "" + +#: part/models.py:1999 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:2004 templates/js/part.js:655 +msgid "Requires Value" +msgstr "" + +#: part/models.py:2005 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:2010 templates/js/part.js:662 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:2011 +msgid "Does this test require a file attachment when adding a test result?" +msgstr "" + +#: part/models.py:2044 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:2049 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:2051 +msgid "Parameter Units" +msgstr "" + +#: part/models.py:2079 part/models.py:2128 part/models.py:2129 +#: templates/InvenTree/settings/category.html:62 +msgid "Parameter Template" +msgstr "" + +#: part/models.py:2081 +msgid "Data" +msgstr "" + +#: part/models.py:2081 +msgid "Parameter Value" +msgstr "" + +#: part/models.py:2133 templates/InvenTree/settings/category.html:67 +msgid "Default Value" +msgstr "" + +#: part/models.py:2134 +msgid "Default Parameter Value" +msgstr "" + +#: part/models.py:2163 +msgid "Select parent part" +msgstr "" + +#: part/models.py:2172 +msgid "Select part to be used in BOM" +msgstr "" + +#: part/models.py:2178 +msgid "BOM quantity for this BOM item" +msgstr "" + +#: part/models.py:2180 templates/js/bom.js:216 templates/js/bom.js:269 +msgid "Optional" +msgstr "" + +#: part/models.py:2180 +msgid "This BOM item is optional" +msgstr "" + +#: part/models.py:2183 +msgid "Overage" +msgstr "" + +#: part/models.py:2184 +msgid "Estimated build wastage quantity (absolute or percentage)" +msgstr "" + +#: part/models.py:2187 +msgid "BOM item reference" +msgstr "" + +#: part/models.py:2190 +msgid "BOM item notes" +msgstr "" + +#: part/models.py:2192 +msgid "Checksum" +msgstr "" + +#: part/models.py:2192 +msgid "BOM line checksum" +msgstr "" + +#: part/models.py:2196 templates/js/bom.js:279 templates/js/bom.js:286 +#: templates/js/table_filters.js:50 +msgid "Inherited" +msgstr "" + +#: part/models.py:2197 +msgid "This BOM item is inherited by BOMs for variant parts" +msgstr "" + +#: part/models.py:2273 part/views.py:1592 part/views.py:1644 +#: stock/models.py:260 +msgid "Quantity must be integer value for trackable parts" +msgstr "" + +#: part/models.py:2282 part/models.py:2284 +msgid "Sub part must be specified" +msgstr "" + +#: part/models.py:2287 +msgid "BOM Item" +msgstr "" + +#: part/models.py:2404 +msgid "Part 1" +msgstr "" + +#: part/models.py:2408 +msgid "Part 2" +msgstr "" + +#: part/models.py:2408 +msgid "Select Related Part" +msgstr "" + +#: part/models.py:2440 +msgid "" +"Error creating relationship: check that the part is not related to itself " +"and that the relationship is unique" +msgstr "" + +#: part/templates/part/allocation.html:11 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/attachments.html:10 +msgid "Part Attachments" +msgstr "" + +#: part/templates/part/bom-delete.html:6 +msgid "Are you sure you want to delete this BOM item?" +msgstr "" + +#: part/templates/part/bom-delete.html:8 +msgid "Deleting this entry will remove the BOM row from the following part" +msgstr "" + +#: part/templates/part/bom.html:10 part/templates/part/navbar.html:48 +#: part/templates/part/navbar.html:51 +msgid "Bill of Materials" +msgstr "" + +#: part/templates/part/bom.html:19 +#, python-format +msgid "The BOM for %(part)s has changed, and must be validated.
    " +msgstr "" + +#: part/templates/part/bom.html:21 +#, python-format +msgid "" +"The BOM for %(part)s was last checked by %(checker)s on %(check_date)s" +msgstr "" + +#: part/templates/part/bom.html:25 +#, python-format +msgid "The BOM for %(part)s has not been validated." +msgstr "" + +#: part/templates/part/bom.html:32 +msgid "Remove selected BOM items" +msgstr "" + +#: part/templates/part/bom.html:35 +msgid "Import BOM data" +msgstr "" + +#: part/templates/part/bom.html:39 +msgid "Copy BOM from parent part" +msgstr "" + +#: part/templates/part/bom.html:43 +msgid "New BOM Item" +msgstr "" + +#: part/templates/part/bom.html:46 +msgid "Finish Editing" +msgstr "" + +#: part/templates/part/bom.html:51 +msgid "Edit BOM" +msgstr "" + +#: part/templates/part/bom.html:55 +msgid "Validate Bill of Materials" +msgstr "" + +#: part/templates/part/bom.html:61 part/views.py:1887 +msgid "Export Bill of Materials" +msgstr "" + +#: part/templates/part/bom.html:64 +msgid "Print BOM Report" +msgstr "" + +#: part/templates/part/bom.html:109 +msgid "Delete selected BOM items?" +msgstr "" + +#: part/templates/part/bom.html:110 +msgid "All selected BOM items will be deleted" +msgstr "" + +#: part/templates/part/bom.html:160 part/views.py:584 +#: templates/js/stock.js:1158 +msgid "Create New Part" +msgstr "" + +#: part/templates/part/bom_duplicate.html:13 +msgid "This part already has a Bill of Materials" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:11 +#: part/templates/part/bom_upload/select_parts.html:11 +#: part/templates/part/bom_upload/upload_file.html:11 +msgid "Upload Bill of Materials" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:16 +msgid "Step 2 - Select Fields" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:21 +msgid "Missing selections for the following required columns" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:32 +msgid "Submit Selections" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:41 +msgid "File Fields" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:47 +msgid "Remove column" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:58 +msgid "Match Fields" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:68 +msgid "Duplicate column selection" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:76 +#: part/templates/part/bom_upload/select_parts.html:58 +msgid "Remove row" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:16 +msgid "Step 3 - Select Parts" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:21 +msgid "Errors exist in the submitted data" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:27 +msgid "Submit BOM" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:39 +msgid "Row" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:40 +#: part/templates/part/bom_upload/select_parts.html:69 +msgid "Select Part" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:65 +#: part/templates/part/category.html:117 +msgid "Create new part" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:16 +msgid "Step 1 - Select BOM File" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:19 +msgid "Requirements for BOM upload" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:21 +msgid "" +"The BOM file must contain the required named columns as provided in the " +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:21 +msgid "BOM Upload Template" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:22 +msgid "Each part must already exist in the database" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:27 +msgid "Upload File" +msgstr "" + +#: part/templates/part/bom_validate.html:6 +#, python-format +msgid "" +"Confirm that the Bill of Materials (BOM) is valid for:
    %(part)s" +msgstr "" + +#: part/templates/part/bom_validate.html:9 +msgid "This will validate each line in the BOM." +msgstr "" + +#: part/templates/part/build.html:10 +msgid "Part Builds" +msgstr "" + +#: part/templates/part/build.html:18 +msgid "Start New Build" +msgstr "" + +#: part/templates/part/category.html:24 +msgid "All parts" +msgstr "" + +#: part/templates/part/category.html:29 part/views.py:2270 +msgid "Create new part category" +msgstr "" + +#: part/templates/part/category.html:35 +msgid "Edit part category" +msgstr "" + +#: part/templates/part/category.html:40 +msgid "Delete part category" +msgstr "" + +#: part/templates/part/category.html:50 part/templates/part/category.html:89 +msgid "Category Details" +msgstr "" + +#: part/templates/part/category.html:55 +msgid "Category Path" +msgstr "" + +#: part/templates/part/category.html:60 +msgid "Category Description" +msgstr "" + +#: part/templates/part/category.html:79 +#: part/templates/part/category_navbar.html:11 +#: part/templates/part/category_navbar.html:18 +#: part/templates/part/subcategory.html:16 +msgid "Subcategories" +msgstr "" + +#: part/templates/part/category.html:84 +msgid "Parts (Including subcategories)" +msgstr "" + +#: part/templates/part/category.html:113 +msgid "Export Part Data" +msgstr "" + +#: part/templates/part/category.html:125 +msgid "Set category" +msgstr "" + +#: part/templates/part/category.html:125 +msgid "Set Category" +msgstr "" + +#: part/templates/part/category.html:128 +msgid "Export Data" +msgstr "" + +#: part/templates/part/category.html:186 +#: stock/templates/stock/location.html:192 templates/js/stock.js:709 +msgid "Create new location" +msgstr "" + +#: part/templates/part/category.html:191 part/templates/part/category.html:221 +msgid "New Category" +msgstr "" + +#: part/templates/part/category.html:192 +msgid "Create new category" +msgstr "" + +#: part/templates/part/category.html:222 +msgid "Create new Part Category" +msgstr "" + +#: part/templates/part/category.html:228 stock/views.py:1359 +msgid "Create new Stock Location" +msgstr "" + +#: part/templates/part/category_delete.html:5 +msgid "Are you sure you want to delete category" +msgstr "" + +#: part/templates/part/category_delete.html:8 +#, python-format +msgid "This category contains %(count)s child categories" +msgstr "" + +#: part/templates/part/category_delete.html:9 +msgid "" +"If this category is deleted, these child categories will be moved to the" +msgstr "" + +#: part/templates/part/category_delete.html:11 +msgid "category" +msgstr "" + +#: part/templates/part/category_delete.html:13 +msgid "top level Parts category" +msgstr "" + +#: part/templates/part/category_delete.html:25 +#, python-format +msgid "This category contains %(count)s parts" +msgstr "" + +#: part/templates/part/category_delete.html:27 +#, python-format +msgid "" +"If this category is deleted, these parts will be moved to the parent " +"category %(path)s" +msgstr "" + +#: part/templates/part/category_delete.html:29 +msgid "" +"If this category is deleted, these parts will be moved to the top-level " +"category Teile" +msgstr "" + +#: part/templates/part/category_navbar.html:34 +#: part/templates/part/category_navbar.html:37 +#: part/templates/part/navbar.html:22 +msgid "Parameters" +msgstr "" + +#: part/templates/part/category_parametric.html:10 +#: part/templates/part/navbar.html:19 part/templates/part/params.html:10 +msgid "Part Parameters" +msgstr "" + +#: part/templates/part/copy_part.html:9 part/views.py:460 +msgid "Duplicate Part" +msgstr "" + +#: part/templates/part/copy_part.html:10 +#, python-format +msgid "Make a copy of part '%(full_name)s'." +msgstr "" + +#: part/templates/part/copy_part.html:14 +#: part/templates/part/create_part.html:11 +msgid "Possible Matching Parts" +msgstr "" + +#: part/templates/part/copy_part.html:15 +#: part/templates/part/create_part.html:12 +msgid "The new part may be a duplicate of these existing parts" +msgstr "" + +#: part/templates/part/create_part.html:17 +#, python-format +msgid "%(full_name)s - %(desc)s (%(match_per)s%% match)" +msgstr "" + +#: part/templates/part/detail.html:11 part/templates/part/navbar.html:11 +msgid "Part Details" +msgstr "" + +#: part/templates/part/detail.html:42 +msgid "Latest Serial Number" +msgstr "" + +#: part/templates/part/detail.html:47 +msgid "No serial numbers recorded" +msgstr "" + +#: part/templates/part/detail.html:120 +msgid "Stock Expiry Time" +msgstr "" + +#: part/templates/part/detail.html:139 +msgid "Responsible User" +msgstr "" + +#: part/templates/part/detail.html:153 +msgid "Part is virtual (not a physical part)" +msgstr "" + +#: part/templates/part/detail.html:155 +msgid "Part is not a virtual part" +msgstr "" + +#: part/templates/part/detail.html:163 +msgid "Part is a template part (variants can be made from this part)" +msgstr "" + +#: part/templates/part/detail.html:165 +msgid "Part is not a template part" +msgstr "" + +#: part/templates/part/detail.html:173 +msgid "Part can be assembled from other parts" +msgstr "" + +#: part/templates/part/detail.html:175 +msgid "Part cannot be assembled from other parts" +msgstr "" + +#: part/templates/part/detail.html:183 +msgid "Part can be used in assemblies" +msgstr "" + +#: part/templates/part/detail.html:185 +msgid "Part cannot be used in assemblies" +msgstr "" + +#: part/templates/part/detail.html:193 +msgid "Part stock is tracked by serial number" +msgstr "" + +#: part/templates/part/detail.html:195 +msgid "Part stock is not tracked by serial number" +msgstr "" + +#: part/templates/part/detail.html:203 part/templates/part/detail.html:205 +msgid "Part can be purchased from external suppliers" +msgstr "" + +#: part/templates/part/detail.html:213 +msgid "Part can be sold to customers" +msgstr "" + +#: part/templates/part/detail.html:215 +msgid "Part cannot be sold to customers" +msgstr "" + +#: part/templates/part/detail.html:230 +msgid "Part is active" +msgstr "" + +#: part/templates/part/detail.html:232 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/manufacturer.html:11 +msgid "Part Manufacturers" +msgstr "" + +#: part/templates/part/manufacturer.html:24 +msgid "Delete manufacturer parts" +msgstr "" + +#: part/templates/part/manufacturer.html:53 +#: part/templates/part/supplier.html:57 +msgid "Create new manufacturer" +msgstr "" + +#: part/templates/part/navbar.html:26 part/templates/part/variants.html:11 +msgid "Part Variants" +msgstr "" + +#: part/templates/part/navbar.html:29 +msgid "Variants" +msgstr "" + +#: part/templates/part/navbar.html:40 +msgid "Allocated Stock" +msgstr "" + +#: part/templates/part/navbar.html:43 +msgid "Allocations" +msgstr "" + +#: part/templates/part/navbar.html:64 part/templates/part/navbar.html:67 +msgid "Used In" +msgstr "" + +#: part/templates/part/navbar.html:92 +msgid "Sales Price Information" +msgstr "" + +#: part/templates/part/navbar.html:95 +msgid "Sale Price" +msgstr "" + +#: part/templates/part/navbar.html:106 part/templates/part/part_tests.html:10 +msgid "Part Test Templates" +msgstr "" + +#: part/templates/part/navbar.html:109 stock/templates/stock/item_base.html:398 +msgid "Tests" +msgstr "" + +#: part/templates/part/navbar.html:113 part/templates/part/navbar.html:116 +#: part/templates/part/related.html:10 +msgid "Related Parts" +msgstr "" + +#: part/templates/part/navbar.html:125 part/templates/part/notes.html:12 +msgid "Part Notes" +msgstr "" + +#: part/templates/part/params.html:17 +msgid "Add new parameter" +msgstr "" + +#: part/templates/part/params.html:18 +#: templates/InvenTree/settings/category.html:29 +#: templates/InvenTree/settings/part.html:44 +msgid "New Parameter" +msgstr "" + +#: part/templates/part/params.html:28 +#: report/templates/report/inventree_test_report_base.html:90 +#: stock/models.py:1655 templates/InvenTree/settings/header.html:8 +#: templates/js/stock.js:124 +msgid "Value" +msgstr "" + +#: part/templates/part/params.html:41 templates/InvenTree/settings/user.html:19 +msgid "Edit" +msgstr "" + +#: part/templates/part/params.html:68 +msgid "New Template" +msgstr "" + +#: part/templates/part/params.html:69 +msgid "Create New Parameter Template" +msgstr "" + +#: part/templates/part/part_app_base.html:12 +msgid "Part List" +msgstr "" + +#: part/templates/part/part_base.html:18 +#, python-format +msgid "This part is a variant of %(link)s" +msgstr "" + +#: part/templates/part/part_base.html:33 templates/js/company.js:156 +#: templates/js/company.js:254 templates/js/part.js:76 templates/js/part.js:153 +msgid "Inactive" +msgstr "" + +#: part/templates/part/part_base.html:40 +msgid "Star this part" +msgstr "" + +#: part/templates/part/part_base.html:47 +#: stock/templates/stock/item_base.html:131 +#: stock/templates/stock/location.html:51 +msgid "Barcode actions" +msgstr "" + +#: part/templates/part/part_base.html:49 +#: stock/templates/stock/item_base.html:133 +#: stock/templates/stock/location.html:53 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: part/templates/part/part_base.html:50 +#: stock/templates/stock/item_base.html:149 +#: stock/templates/stock/location.html:54 +msgid "Print Label" +msgstr "" + +#: part/templates/part/part_base.html:55 +msgid "Show pricing information" +msgstr "" + +#: part/templates/part/part_base.html:59 +msgid "Count part stock" +msgstr "" + +#: part/templates/part/part_base.html:74 +msgid "Part actions" +msgstr "" + +#: part/templates/part/part_base.html:77 +msgid "Duplicate part" +msgstr "" + +#: part/templates/part/part_base.html:80 +msgid "Edit part" +msgstr "" + +#: part/templates/part/part_base.html:83 +msgid "Delete part" +msgstr "" + +#: part/templates/part/part_base.html:123 templates/js/table_filters.js:156 +msgid "In Stock" +msgstr "" + +#: part/templates/part/part_base.html:136 templates/InvenTree/index.html:131 +msgid "Required for Build Orders" +msgstr "" + +#: part/templates/part/part_base.html:143 +msgid "Required for Sales Orders" +msgstr "" + +#: part/templates/part/part_base.html:150 +msgid "Allocated to Orders" +msgstr "" + +#: part/templates/part/part_base.html:165 templates/js/bom.js:300 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:171 templates/js/part.js:418 +msgid "Building" +msgstr "" + +#: part/templates/part/part_base.html:250 +msgid "Calculate" +msgstr "" + +#: part/templates/part/part_pricing.html:8 +#, python-format +msgid "Pricing information for:
    %(part)s." +msgstr "" + +#: part/templates/part/part_pricing.html:23 +msgid "Supplier Pricing" +msgstr "" + +#: part/templates/part/part_pricing.html:27 +#: part/templates/part/part_pricing.html:53 +msgid "Unit Cost" +msgstr "" + +#: part/templates/part/part_pricing.html:33 +#: part/templates/part/part_pricing.html:59 +msgid "Total Cost" +msgstr "" + +#: part/templates/part/part_pricing.html:41 +msgid "No supplier pricing available" +msgstr "" + +#: part/templates/part/part_pricing.html:49 +msgid "BOM Pricing" +msgstr "" + +#: part/templates/part/part_pricing.html:67 +msgid "Note: BOM pricing is incomplete for this part" +msgstr "" + +#: part/templates/part/part_pricing.html:74 +msgid "No BOM pricing available" +msgstr "" + +#: part/templates/part/part_pricing.html:84 +msgid "No pricing information is available for this part." +msgstr "" + +#: part/templates/part/part_tests.html:17 +msgid "Add Test Template" +msgstr "" + +#: part/templates/part/part_thumb.html:20 +msgid "Select from existing images" +msgstr "" + +#: part/templates/part/partial_delete.html:7 +#, python-format +msgid "Are you sure you want to delete part '%(full_name)s'?" +msgstr "" + +#: part/templates/part/partial_delete.html:12 +#, python-format +msgid "" +"This part is used in BOMs for %(count)s other parts. If you delete this " +"part, the BOMs for the following parts will be updated" +msgstr "" + +#: part/templates/part/partial_delete.html:22 +#, python-format +msgid "" +"There are %(count)s stock entries defined for this part. If you delete this " +"part, the following stock entries will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:33 +#, python-format +msgid "" +"There are %(count)s manufacturers defined for this part. If you delete this " +"part, the following manufacturer parts will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:44 +#, python-format +msgid "" +"There are %(count)s suppliers defined for this part. If you delete this " +"part, the following supplier parts will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:55 +#, python-format +msgid "" +"There are %(count)s unique parts tracked for '%(full_name)s'. Deleting this " +"part will permanently remove this tracking information." +msgstr "" + +#: part/templates/part/related.html:18 +msgid "Add Related" +msgstr "" + +#: part/templates/part/sale_prices.html:10 +msgid "Sell Price Information" +msgstr "" + +#: part/templates/part/sales_orders.html:18 +msgid "New sales order" +msgstr "" + +#: part/templates/part/sales_orders.html:18 +msgid "New Order" +msgstr "" + +#: part/templates/part/set_category.html:9 +msgid "Set category for the following parts" +msgstr "" + +#: part/templates/part/stock.html:10 +msgid "Part Stock" +msgstr "" + +#: part/templates/part/stock.html:16 +#, python-format +msgid "Showing stock for all variants of %(full_name)s" +msgstr "" + +#: part/templates/part/stock_count.html:7 templates/js/bom.js:239 +#: templates/js/part.js:422 +msgid "No Stock" +msgstr "" + +#: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:130 +msgid "Low Stock" +msgstr "" + +#: part/templates/part/supplier.html:10 +msgid "Part Suppliers" +msgstr "" + +#: part/templates/part/track.html:10 +msgid "Part Tracking" +msgstr "" + +#: part/templates/part/used_in.html:9 +msgid "Assemblies" +msgstr "" + +#: part/templates/part/variant_part.html:9 +msgid "Create new part variant" +msgstr "" + +#: part/templates/part/variant_part.html:10 +#, python-format +msgid "Create a new variant of template '%(full_name)s'." +msgstr "" + +#: part/templates/part/variants.html:19 +msgid "Create new variant" +msgstr "" + +#: part/templates/part/variants.html:20 +msgid "New Variant" +msgstr "" + +#: part/views.py:89 +msgid "Add Related Part" +msgstr "" + +#: part/views.py:144 +msgid "Delete Related Part" +msgstr "" + +#: part/views.py:158 +msgid "Add part attachment" +msgstr "" + +#: part/views.py:211 templates/attachment_table.html:32 +msgid "Edit attachment" +msgstr "" + +#: part/views.py:215 +msgid "Part attachment updated" +msgstr "" + +#: part/views.py:230 +msgid "Delete Part Attachment" +msgstr "" + +#: part/views.py:238 +msgid "Deleted part attachment" +msgstr "" + +#: part/views.py:247 +msgid "Create Test Template" +msgstr "" + +#: part/views.py:274 +msgid "Edit Test Template" +msgstr "" + +#: part/views.py:288 +msgid "Delete Test Template" +msgstr "" + +#: part/views.py:295 +msgid "Set Part Category" +msgstr "" + +#: part/views.py:345 +#, python-brace-format +msgid "Set category for {n} parts" +msgstr "" + +#: part/views.py:380 +msgid "Create Variant" +msgstr "" + +#: part/views.py:465 +msgid "Copied part" +msgstr "" + +#: part/views.py:519 part/views.py:657 +msgid "Possible matches exist - confirm creation of new part" +msgstr "" + +#: part/views.py:589 +msgid "Created new part" +msgstr "" + +#: part/views.py:825 +msgid "Part QR Code" +msgstr "" + +#: part/views.py:927 +msgid "Upload Part Image" +msgstr "" + +#: part/views.py:933 part/views.py:968 +msgid "Updated part image" +msgstr "" + +#: part/views.py:942 +msgid "Select Part Image" +msgstr "" + +#: part/views.py:971 +msgid "Part image not found" +msgstr "" + +#: part/views.py:982 +msgid "Edit Part Properties" +msgstr "" + +#: part/views.py:1017 +msgid "Duplicate BOM" +msgstr "" + +#: part/views.py:1047 +msgid "Confirm duplication of BOM from parent" +msgstr "" + +#: part/views.py:1068 +msgid "Validate BOM" +msgstr "" + +#: part/views.py:1089 +msgid "Confirm that the BOM is valid" +msgstr "" + +#: part/views.py:1100 +msgid "Validated Bill of Materials" +msgstr "" + +#: part/views.py:1234 +msgid "No BOM file provided" +msgstr "" + +#: part/views.py:1595 +msgid "Enter a valid quantity" +msgstr "" + +#: part/views.py:1620 part/views.py:1623 +msgid "Select valid part" +msgstr "" + +#: part/views.py:1629 +msgid "Duplicate part selected" +msgstr "" + +#: part/views.py:1667 +msgid "Select a part" +msgstr "" + +#: part/views.py:1673 +msgid "Selected part creates a circular BOM" +msgstr "" + +#: part/views.py:1677 +msgid "Specify quantity" +msgstr "" + +#: part/views.py:1939 +msgid "Confirm Part Deletion" +msgstr "" + +#: part/views.py:1946 +msgid "Part was deleted" +msgstr "" + +#: part/views.py:1955 +msgid "Part Pricing" +msgstr "" + +#: part/views.py:2069 +msgid "Create Part Parameter Template" +msgstr "" + +#: part/views.py:2079 +msgid "Edit Part Parameter Template" +msgstr "" + +#: part/views.py:2086 +msgid "Delete Part Parameter Template" +msgstr "" + +#: part/views.py:2094 +msgid "Create Part Parameter" +msgstr "" + +#: part/views.py:2144 +msgid "Edit Part Parameter" +msgstr "" + +#: part/views.py:2158 +msgid "Delete Part Parameter" +msgstr "" + +#: part/views.py:2218 +msgid "Edit Part Category" +msgstr "" + +#: part/views.py:2256 +msgid "Delete Part Category" +msgstr "" + +#: part/views.py:2262 +msgid "Part category was deleted" +msgstr "" + +#: part/views.py:2314 +msgid "Create Category Parameter Template" +msgstr "" + +#: part/views.py:2415 +msgid "Edit Category Parameter Template" +msgstr "" + +#: part/views.py:2471 +msgid "Delete Category Parameter Template" +msgstr "" + +#: part/views.py:2490 +msgid "Create BOM Item" +msgstr "" + +#: part/views.py:2560 +msgid "Edit BOM item" +msgstr "" + +#: part/views.py:2616 +msgid "Confim BOM item deletion" +msgstr "" + +#: report/models.py:180 +msgid "Template name" +msgstr "" + +#: report/models.py:186 +msgid "Report template file" +msgstr "" + +#: report/models.py:193 +msgid "Report template description" +msgstr "" + +#: report/models.py:199 +msgid "Report revision number (auto-increments)" +msgstr "" + +#: report/models.py:275 +msgid "Report template is enabled" +msgstr "" + +#: report/models.py:295 +msgid "StockItem query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:303 +msgid "Include Installed Tests" +msgstr "" + +#: report/models.py:304 +msgid "Include test results for stock items installed inside assembled item" +msgstr "" + +#: report/models.py:347 +msgid "Build Filters" +msgstr "" + +#: report/models.py:348 +msgid "Build query filters (comma-separated list of key=value pairs" +msgstr "" + +#: report/models.py:385 +msgid "Part Filters" +msgstr "" + +#: report/models.py:386 +msgid "Part query filters (comma-separated list of key=value pairs" +msgstr "" + +#: report/models.py:416 +msgid "Purchase order query filters" +msgstr "" + +#: report/models.py:450 +msgid "Sales order query filters" +msgstr "" + +#: report/models.py:500 +msgid "Snippet" +msgstr "" + +#: report/models.py:501 +msgid "Report snippet file" +msgstr "" + +#: report/models.py:505 +msgid "Snippet file description" +msgstr "" + +#: report/models.py:540 +msgid "Asset" +msgstr "" + +#: report/models.py:541 +msgid "Report asset file" +msgstr "" + +#: report/models.py:544 +msgid "Asset file description" +msgstr "" + +#: report/templates/report/inventree_build_order_base.html:147 +msgid "Required For" +msgstr "" + +#: report/templates/report/inventree_po_report.html:85 +#: report/templates/report/inventree_so_report.html:85 +msgid "Line Items" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:21 +msgid "Stock Item Test Report" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:83 +msgid "Test Results" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:1643 +msgid "Test" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:89 +#: stock/models.py:1649 +msgid "Result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:92 +#: templates/js/order.js:195 templates/js/stock.js:986 +msgid "Date" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:103 +msgid "Pass" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:105 +msgid "Fail" +msgstr "" + +#: stock/api.py:199 +#, python-brace-format +msgid "Updated stock for {n} items" +msgstr "" + +#: stock/api.py:268 +#, python-brace-format +msgid "Moved {n} parts to {loc}" +msgstr "" + +#: stock/forms.py:114 stock/forms.py:406 stock/models.py:475 +#: stock/templates/stock/item_base.html:365 templates/js/stock.js:656 +msgid "Expiry Date" +msgstr "" + +#: stock/forms.py:115 stock/forms.py:407 +msgid "Expiration date for this stock item" +msgstr "" + +#: stock/forms.py:118 +msgid "Enter unique serial numbers (or leave blank)" +msgstr "" + +#: stock/forms.py:169 +msgid "" +"Destination for serialized stock (by default, will remain in current " +"location)" +msgstr "" + +#: stock/forms.py:171 +msgid "Serial numbers" +msgstr "" + +#: stock/forms.py:171 +msgid "Unique serial numbers (must match quantity)" +msgstr "" + +#: stock/forms.py:173 stock/forms.py:349 +msgid "Add transaction note (optional)" +msgstr "" + +#: stock/forms.py:203 stock/forms.py:259 +msgid "Select test report template" +msgstr "" + +#: stock/forms.py:267 templates/js/table_filters.js:70 +#: templates/js/table_filters.js:133 +msgid "Include sublocations" +msgstr "" + +#: stock/forms.py:267 +msgid "Include stock items in sub locations" +msgstr "" + +#: stock/forms.py:302 +msgid "Stock item to install" +msgstr "" + +#: stock/forms.py:309 +msgid "Stock quantity to assign" +msgstr "" + +#: stock/forms.py:337 +msgid "Must not exceed available quantity" +msgstr "" + +#: stock/forms.py:347 +msgid "Destination location for uninstalled items" +msgstr "" + +#: stock/forms.py:351 +msgid "Confirm uninstall" +msgstr "" + +#: stock/forms.py:351 +msgid "Confirm removal of installed stock items" +msgstr "" + +#: stock/forms.py:375 +msgid "Destination stock location" +msgstr "" + +#: stock/forms.py:377 +msgid "Add note (required)" +msgstr "" + +#: stock/forms.py:381 stock/views.py:852 stock/views.py:1051 +msgid "Confirm stock adjustment" +msgstr "" + +#: stock/forms.py:381 +msgid "Confirm movement of stock items" +msgstr "" + +#: stock/forms.py:383 +msgid "Set Default Location" +msgstr "" + +#: stock/forms.py:383 +msgid "Set the destination as the default location for selected parts" +msgstr "" + +#: stock/models.py:54 stock/models.py:513 +msgid "Owner" +msgstr "" + +#: stock/models.py:55 stock/models.py:514 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:205 +msgid "Created stock item" +msgstr "" + +#: stock/models.py:241 +msgid "StockItem with this serial number already exists" +msgstr "" + +#: stock/models.py:277 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:287 stock/models.py:296 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:288 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:310 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:316 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:323 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:365 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:374 +msgid "Base part" +msgstr "" + +#: stock/models.py:383 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:388 stock/templates/stock/stock_app_base.html:8 +msgid "Stock Location" +msgstr "" + +#: stock/models.py:391 +msgid "Where is this stock item located?" +msgstr "" + +#: stock/models.py:398 +msgid "Packaging this stock item is stored in" +msgstr "" + +#: stock/models.py:403 stock/templates/stock/item_base.html:259 +msgid "Installed In" +msgstr "" + +#: stock/models.py:406 +msgid "Is this item installed in another item?" +msgstr "" + +#: stock/models.py:422 +msgid "Serial number for this item" +msgstr "" + +#: stock/models.py:434 +msgid "Batch code for this stock item" +msgstr "" + +#: stock/models.py:438 +msgid "Stock Quantity" +msgstr "" + +#: stock/models.py:447 +msgid "Source Build" +msgstr "" + +#: stock/models.py:449 +msgid "Build for this stock item" +msgstr "" + +#: stock/models.py:460 +msgid "Source Purchase Order" +msgstr "" + +#: stock/models.py:463 +msgid "Purchase order for this stock item" +msgstr "" + +#: stock/models.py:469 +msgid "Destination Sales Order" +msgstr "" + +#: stock/models.py:476 +msgid "" +"Expiry date for stock item. Stock will be considered expired after this date" +msgstr "" + +#: stock/models.py:489 +msgid "Delete on deplete" +msgstr "" + +#: stock/models.py:489 +msgid "Delete this Stock Item when stock is depleted" +msgstr "" + +#: stock/models.py:499 stock/templates/stock/item_notes.html:13 +#: stock/templates/stock/navbar.html:54 +msgid "Stock Item Notes" +msgstr "" + +#: stock/models.py:509 +msgid "Single unit purchase price at time of purchase" +msgstr "" + +#: stock/models.py:614 +msgid "Assigned to Customer" +msgstr "" + +#: stock/models.py:616 +msgid "Manually assigned to customer" +msgstr "" + +#: stock/models.py:629 +msgid "Returned from customer" +msgstr "" + +#: stock/models.py:631 +msgid "Returned to location" +msgstr "" + +#: stock/models.py:792 +msgid "Installed into stock item" +msgstr "" + +#: stock/models.py:800 +msgid "Installed stock item" +msgstr "" + +#: stock/models.py:824 +msgid "Uninstalled stock item" +msgstr "" + +#: stock/models.py:843 +msgid "Uninstalled into location" +msgstr "" + +#: stock/models.py:944 +msgid "Part is not set as trackable" +msgstr "" + +#: stock/models.py:950 +msgid "Quantity must be integer" +msgstr "" + +#: stock/models.py:956 +#, python-brace-format +msgid "Quantity must not exceed available stock quantity ({n})" +msgstr "" + +#: stock/models.py:959 +msgid "Serial numbers must be a list of integers" +msgstr "" + +#: stock/models.py:962 +msgid "Quantity does not match serial numbers" +msgstr "" + +#: stock/models.py:994 +msgid "Add serial number" +msgstr "" + +#: stock/models.py:997 +#, python-brace-format +msgid "Serialized {n} items" +msgstr "" + +#: stock/models.py:1075 +msgid "Split from existing stock" +msgstr "" + +#: stock/models.py:1113 +msgid "StockItem cannot be moved as it is not in stock" +msgstr "" + +#: stock/models.py:1556 +msgid "Title" +msgstr "" + +#: stock/models.py:1556 +msgid "Tracking entry title" +msgstr "" + +#: stock/models.py:1558 +msgid "Entry notes" +msgstr "" + +#: stock/models.py:1560 +msgid "Link to external page for further information" +msgstr "" + +#: stock/models.py:1620 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:1626 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:1644 +msgid "Test name" +msgstr "" + +#: stock/models.py:1650 templates/js/table_filters.js:212 +msgid "Test result" +msgstr "" + +#: stock/models.py:1656 +msgid "Test output value" +msgstr "" + +#: stock/models.py:1663 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:1669 +msgid "Test notes" +msgstr "" + +#: stock/templates/stock/item.html:12 +msgid "Stock Tracking Information" +msgstr "" + +#: stock/templates/stock/item.html:30 +msgid "New Entry" +msgstr "" + +#: stock/templates/stock/item_attachments.html:11 +msgid "Stock Item Attachments" +msgstr "" + +#: stock/templates/stock/item_base.html:24 +msgid "" +"You are not in the list of owners of this item. This stock item cannot be " +"edited." +msgstr "" + +#: stock/templates/stock/item_base.html:31 +msgid "This stock item is in production and cannot be edited." +msgstr "" + +#: stock/templates/stock/item_base.html:32 +msgid "Edit the stock item from the build view." +msgstr "" + +#: stock/templates/stock/item_base.html:45 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:53 +#, python-format +msgid "" +"This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgstr "" + +#: stock/templates/stock/item_base.html:61 +#, python-format +msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgstr "" + +#: stock/templates/stock/item_base.html:67 +msgid "" +"This stock item is serialized - it has a unique serial number and the " +"quantity cannot be adjusted." +msgstr "" + +#: stock/templates/stock/item_base.html:71 +msgid "This stock item cannot be deleted as it has child items" +msgstr "" + +#: stock/templates/stock/item_base.html:75 +msgid "" +"This stock item will be automatically deleted when all stock is depleted." +msgstr "" + +#: stock/templates/stock/item_base.html:95 +#: stock/templates/stock/item_base.html:369 templates/js/table_filters.js:145 +msgid "Expired" +msgstr "" + +#: stock/templates/stock/item_base.html:99 +#: stock/templates/stock/item_base.html:371 templates/js/table_filters.js:150 +msgid "Stale" +msgstr "" + +#: stock/templates/stock/item_base.html:136 templates/js/barcode.js:309 +#: templates/js/barcode.js:314 +msgid "Unlink Barcode" +msgstr "" + +#: stock/templates/stock/item_base.html:138 +msgid "Link Barcode" +msgstr "" + +#: stock/templates/stock/item_base.html:140 templates/stock_table.html:31 +msgid "Scan to Location" +msgstr "" + +#: stock/templates/stock/item_base.html:147 +msgid "Printing actions" +msgstr "" + +#: stock/templates/stock/item_base.html:151 +#: stock/templates/stock/item_tests.html:27 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item_base.html:160 +msgid "Stock adjustment actions" +msgstr "" + +#: stock/templates/stock/item_base.html:164 +#: stock/templates/stock/location.html:65 templates/stock_table.html:56 +msgid "Count stock" +msgstr "" + +#: stock/templates/stock/item_base.html:167 templates/stock_table.html:54 +msgid "Add stock" +msgstr "" + +#: stock/templates/stock/item_base.html:170 templates/stock_table.html:55 +msgid "Remove stock" +msgstr "" + +#: stock/templates/stock/item_base.html:173 +msgid "Serialize stock" +msgstr "" + +#: stock/templates/stock/item_base.html:177 +msgid "Transfer stock" +msgstr "" + +#: stock/templates/stock/item_base.html:180 +msgid "Assign to customer" +msgstr "" + +#: stock/templates/stock/item_base.html:183 +msgid "Return to stock" +msgstr "" + +#: stock/templates/stock/item_base.html:187 templates/js/stock.js:1299 +msgid "Uninstall stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:187 +msgid "Uninstall" +msgstr "" + +#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/location.html:62 +msgid "Stock actions" +msgstr "" + +#: stock/templates/stock/item_base.html:199 +msgid "Convert to variant" +msgstr "" + +#: stock/templates/stock/item_base.html:202 +msgid "Duplicate stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:204 +msgid "Edit stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:207 +msgid "Delete stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:219 +msgid "Stock Item Details" +msgstr "" + +#: stock/templates/stock/item_base.html:278 templates/js/build.js:442 +msgid "No location set" +msgstr "" + +#: stock/templates/stock/item_base.html:285 +msgid "Barcode Identifier" +msgstr "" + +#: stock/templates/stock/item_base.html:327 +msgid "Parent Item" +msgstr "" + +#: stock/templates/stock/item_base.html:369 +#, python-format +msgid "This StockItem expired on %(item.expiry_date)s" +msgstr "" + +#: stock/templates/stock/item_base.html:371 +#, python-format +msgid "This StockItem expires on %(item.expiry_date)s" +msgstr "" + +#: stock/templates/stock/item_base.html:378 templates/js/stock.js:662 +msgid "Last Updated" +msgstr "" + +#: stock/templates/stock/item_base.html:383 +msgid "Last Stocktake" +msgstr "" + +#: stock/templates/stock/item_base.html:387 +msgid "No stocktake performed" +msgstr "" + +#: stock/templates/stock/item_childs.html:12 +msgid "Child Stock Items" +msgstr "" + +#: stock/templates/stock/item_childs.html:20 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item_delete.html:9 +msgid "Are you sure you want to delete this stock item?" +msgstr "" + +#: stock/templates/stock/item_delete.html:12 +#, python-format +msgid "" +"This will remove %(qty)s units of %(full_name)s from stock." +msgstr "" + +#: stock/templates/stock/item_install.html:7 +msgid "Install another StockItem into this item." +msgstr "" + +#: stock/templates/stock/item_install.html:10 +msgid "Stock items can only be installed if they meet the following criteria" +msgstr "" + +#: stock/templates/stock/item_install.html:13 +msgid "The StockItem links to a Part which is in the BOM for this StockItem" +msgstr "" + +#: stock/templates/stock/item_install.html:14 +msgid "The StockItem is currently in stock" +msgstr "" + +#: stock/templates/stock/item_installed.html:11 +#: stock/templates/stock/navbar.html:27 +msgid "Installed Stock Items" +msgstr "" + +#: stock/templates/stock/item_serialize.html:5 +msgid "Create serialized items from this stock item." +msgstr "" + +#: stock/templates/stock/item_serialize.html:7 +msgid "Select quantity to serialize, and unique serial numbers." +msgstr "" + +#: stock/templates/stock/item_tests.html:11 +#: stock/templates/stock/navbar.html:19 stock/templates/stock/navbar.html:22 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item_tests.html:20 +msgid "Delete Test Data" +msgstr "" + +#: stock/templates/stock/item_tests.html:24 +msgid "Add Test Data" +msgstr "" + +#: stock/templates/stock/location.html:20 +msgid "" +"You are not in the list of owners of this location. This stock location " +"cannot be edited." +msgstr "" + +#: stock/templates/stock/location.html:37 +msgid "All stock items" +msgstr "" + +#: stock/templates/stock/location.html:55 +msgid "Check-in Items" +msgstr "" + +#: stock/templates/stock/location.html:71 +msgid "Location actions" +msgstr "" + +#: stock/templates/stock/location.html:73 +msgid "Edit location" +msgstr "" + +#: stock/templates/stock/location.html:75 +msgid "Delete location" +msgstr "" + +#: stock/templates/stock/location.html:87 +msgid "Location Details" +msgstr "" + +#: stock/templates/stock/location.html:92 +msgid "Location Path" +msgstr "" + +#: stock/templates/stock/location.html:97 +msgid "Location Description" +msgstr "" + +#: stock/templates/stock/location.html:102 +#: stock/templates/stock/location_navbar.html:11 +#: stock/templates/stock/location_navbar.html:18 +#: stock/templates/stock/sublocation.html:16 +msgid "Sublocations" +msgstr "" + +#: stock/templates/stock/location.html:112 +msgid "Stock Details" +msgstr "" + +#: stock/templates/stock/location.html:117 templates/InvenTree/search.html:279 +#: templates/stats.html:76 users/models.py:39 +msgid "Stock Locations" +msgstr "" + +#: stock/templates/stock/location_delete.html:7 +msgid "Are you sure you want to delete this stock location?" +msgstr "" + +#: stock/templates/stock/navbar.html:11 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/templates/stock/navbar.html:14 +msgid "History" +msgstr "" + +#: stock/templates/stock/navbar.html:30 +msgid "Installed Items" +msgstr "" + +#: stock/templates/stock/navbar.html:38 +msgid "Child Items" +msgstr "" + +#: stock/templates/stock/navbar.html:41 +msgid "Children" +msgstr "" + +#: stock/templates/stock/stock_adjust.html:43 +msgid "Remove item" +msgstr "" + +#: stock/templates/stock/stock_app_base.html:16 +msgid "Loading..." +msgstr "" + +#: stock/templates/stock/stock_uninstall.html:8 +msgid "The following stock items will be uninstalled" +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1332 +msgid "Convert Stock Item" +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:8 +#, python-format +msgid "This stock item is current an instance of %(part)s" +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:9 +msgid "It can be converted to one of the part variants listed below." +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:14 +msgid "This action cannot be easily undone" +msgstr "" + +#: stock/templates/stock/sublocation.html:23 templates/stock_table.html:37 +msgid "Printing Actions" +msgstr "" + +#: stock/templates/stock/sublocation.html:27 templates/stock_table.html:41 +msgid "Print labels" +msgstr "" + +#: stock/templates/stock/tracking_delete.html:6 +msgid "Are you sure you want to delete this stock tracking entry?" +msgstr "" + +#: stock/views.py:123 +msgid "Edit Stock Location" +msgstr "" + +#: stock/views.py:230 stock/views.py:1322 stock/views.py:1433 +#: stock/views.py:1798 +msgid "Owner is required (ownership control is enabled)" +msgstr "" + +#: stock/views.py:245 +msgid "Stock Location QR code" +msgstr "" + +#: stock/views.py:265 +msgid "Add Stock Item Attachment" +msgstr "" + +#: stock/views.py:311 +msgid "Edit Stock Item Attachment" +msgstr "" + +#: stock/views.py:327 +msgid "Delete Stock Item Attachment" +msgstr "" + +#: stock/views.py:343 +msgid "Assign to Customer" +msgstr "" + +#: stock/views.py:352 +msgid "Customer must be specified" +msgstr "" + +#: stock/views.py:376 +msgid "Return to Stock" +msgstr "" + +#: stock/views.py:385 +msgid "Specify a valid location" +msgstr "" + +#: stock/views.py:396 +msgid "Stock item returned from customer" +msgstr "" + +#: stock/views.py:407 +msgid "Delete All Test Data" +msgstr "" + +#: stock/views.py:424 +msgid "Confirm test data deletion" +msgstr "" + +#: stock/views.py:444 +msgid "Add Test Result" +msgstr "" + +#: stock/views.py:484 +msgid "Edit Test Result" +msgstr "" + +#: stock/views.py:501 +msgid "Delete Test Result" +msgstr "" + +#: stock/views.py:509 +msgid "Stock Export Options" +msgstr "" + +#: stock/views.py:630 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/views.py:656 +msgid "Install Stock Item" +msgstr "" + +#: stock/views.py:755 +msgid "Uninstall Stock Items" +msgstr "" + +#: stock/views.py:863 +msgid "Uninstalled stock items" +msgstr "" + +#: stock/views.py:888 +msgid "Adjust Stock" +msgstr "" + +#: stock/views.py:998 +msgid "Move Stock Items" +msgstr "" + +#: stock/views.py:998 +msgid "Move" +msgstr "" + +#: stock/views.py:999 +msgid "Count Stock Items" +msgstr "" + +#: stock/views.py:999 +msgid "Count" +msgstr "" + +#: stock/views.py:1000 +msgid "Remove From Stock" +msgstr "" + +#: stock/views.py:1000 +msgid "Take" +msgstr "" + +#: stock/views.py:1001 +msgid "Add Stock Items" +msgstr "" + +#: stock/views.py:1001 users/models.py:180 +msgid "Add" +msgstr "" + +#: stock/views.py:1002 +msgid "Delete Stock Items" +msgstr "" + +#: stock/views.py:1031 +msgid "Must enter integer value" +msgstr "" + +#: stock/views.py:1036 +msgid "Quantity must be positive" +msgstr "" + +#: stock/views.py:1043 +#, python-brace-format +msgid "Quantity must not exceed {x}" +msgstr "" + +#: stock/views.py:1107 +msgid "No action performed" +msgstr "" + +#: stock/views.py:1122 +#, python-brace-format +msgid "Added stock to {n} items" +msgstr "" + +#: stock/views.py:1137 +#, python-brace-format +msgid "Removed stock from {n} items" +msgstr "" + +#: stock/views.py:1150 +#, python-brace-format +msgid "Counted stock for {n} items" +msgstr "" + +#: stock/views.py:1190 +msgid "No items were moved" +msgstr "" + +#: stock/views.py:1193 +#, python-brace-format +msgid "Moved {n} items to {dest}" +msgstr "" + +#: stock/views.py:1212 +#, python-brace-format +msgid "Deleted {n} stock items" +msgstr "" + +#: stock/views.py:1224 +msgid "Edit Stock Item" +msgstr "" + +#: stock/views.py:1450 +msgid "Serialize Stock" +msgstr "" + +#: stock/views.py:1543 templates/js/build.js:210 +msgid "Create new Stock Item" +msgstr "" + +#: stock/views.py:1685 +msgid "Duplicate Stock Item" +msgstr "" + +#: stock/views.py:1767 +msgid "Quantity cannot be negative" +msgstr "" + +#: stock/views.py:1867 +msgid "Delete Stock Location" +msgstr "" + +#: stock/views.py:1880 +msgid "Delete Stock Item" +msgstr "" + +#: stock/views.py:1891 +msgid "Delete Stock Tracking Entry" +msgstr "" + +#: stock/views.py:1898 +msgid "Edit Stock Tracking Entry" +msgstr "" + +#: stock/views.py:1907 +msgid "Add Stock Tracking Entry" +msgstr "" + +#: templates/403.html:5 templates/403.html:11 +msgid "Permission Denied" +msgstr "" + +#: templates/403.html:14 +msgid "You do not have permission to view this page." +msgstr "" + +#: templates/404.html:5 templates/404.html:11 +msgid "Page Not Found" +msgstr "" + +#: templates/404.html:14 +msgid "The requested page does not exist" +msgstr "" + +#: templates/InvenTree/index.html:7 +msgid "Index" +msgstr "" + +#: templates/InvenTree/index.html:98 +msgid "Starred Parts" +msgstr "" + +#: templates/InvenTree/index.html:99 +msgid "Latest Parts" +msgstr "" + +#: templates/InvenTree/index.html:100 +msgid "BOM Waiting Validation" +msgstr "" + +#: templates/InvenTree/index.html:129 +msgid "Recently Updated" +msgstr "" + +#: templates/InvenTree/index.html:145 +msgid "Expired Stock" +msgstr "" + +#: templates/InvenTree/index.html:146 +msgid "Stale Stock" +msgstr "" + +#: templates/InvenTree/index.html:184 +msgid "Build Orders In Progress" +msgstr "" + +#: templates/InvenTree/index.html:185 +msgid "Overdue Build Orders" +msgstr "" + +#: templates/InvenTree/index.html:206 +msgid "Outstanding Purchase Orders" +msgstr "" + +#: templates/InvenTree/index.html:207 +msgid "Overdue Purchase Orders" +msgstr "" + +#: templates/InvenTree/index.html:229 +msgid "Outstanding Sales Orders" +msgstr "" + +#: templates/InvenTree/index.html:230 +msgid "Overdue Sales Orders" +msgstr "" + +#: templates/InvenTree/search.html:8 templates/InvenTree/search.html:14 +msgid "Search Results" +msgstr "" + +#: templates/InvenTree/search.html:24 +msgid "Enter a search query" +msgstr "" + +#: templates/InvenTree/search.html:268 templates/js/stock.js:300 +msgid "Shipped to customer" +msgstr "" + +#: templates/InvenTree/search.html:271 templates/js/stock.js:310 +msgid "No stock location set" +msgstr "" + +#: templates/InvenTree/settings/build.html:10 +msgid "Build Order Settings" +msgstr "" + +#: templates/InvenTree/settings/category.html:9 +msgid "Category Settings" +msgstr "" + +#: templates/InvenTree/settings/category.html:25 +msgid "Category Parameter Templates" +msgstr "" + +#: templates/InvenTree/settings/category.html:52 +msgid "No category parameter templates found" +msgstr "" + +#: templates/InvenTree/settings/category.html:70 +#: templates/InvenTree/settings/part.html:81 +msgid "Edit Template" +msgstr "" + +#: templates/InvenTree/settings/category.html:71 +#: templates/InvenTree/settings/part.html:82 +msgid "Delete Template" +msgstr "" + +#: templates/InvenTree/settings/global.html:10 +msgid "Global InvenTree Settings" +msgstr "" + +#: templates/InvenTree/settings/global.html:27 +msgid "Barcode Settings" +msgstr "" + +#: templates/InvenTree/settings/header.html:7 +msgid "Setting" +msgstr "" + +#: templates/InvenTree/settings/part.html:9 +msgid "Part Settings" +msgstr "" + +#: templates/InvenTree/settings/part.html:14 +msgid "Part Options" +msgstr "" + +#: templates/InvenTree/settings/part.html:40 +msgid "Part Parameter Templates" +msgstr "" + +#: templates/InvenTree/settings/part.html:61 +msgid "No part parameter templates found" +msgstr "" + +#: templates/InvenTree/settings/po.html:9 +msgid "Purchase Order Settings" +msgstr "" + +#: templates/InvenTree/settings/report.html:10 +msgid "Report Settings" +msgstr "" + +#: templates/InvenTree/settings/setting.html:23 +msgid "No value set" +msgstr "" + +#: templates/InvenTree/settings/setting.html:31 +msgid "Edit setting" +msgstr "" + +#: templates/InvenTree/settings/settings.html:8 +#: templates/InvenTree/settings/settings.html:14 templates/navbar.html:84 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/so.html:9 +msgid "Sales Order Settings" +msgstr "" + +#: templates/InvenTree/settings/stock.html:9 +msgid "Stock Settings" +msgstr "" + +#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:49 +msgid "Stock Options" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:3 +#: templates/InvenTree/settings/user.html:10 +msgid "User Settings" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:6 +msgid "Account" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:9 +msgid "Theme" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:13 +msgid "InvenTree Settings" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:16 +msgid "Global" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:19 +msgid "Report" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:22 +msgid "Categories" +msgstr "" + +#: templates/InvenTree/settings/theme.html:10 +msgid "Theme Settings" +msgstr "" + +#: templates/InvenTree/settings/theme.html:17 +msgid "Color Themes" +msgstr "" + +#: templates/InvenTree/settings/theme.html:29 +#, python-format +msgid "" +"\n" +"\t\tThe CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected " +"color theme was not found.
    \n" +"\t\tPlease select another color theme :)\n" +"\t" +msgstr "" + +#: templates/InvenTree/settings/user.html:16 +msgid "User Information" +msgstr "" + +#: templates/InvenTree/settings/user.html:21 +msgid "Change Password" +msgstr "" + +#: templates/InvenTree/settings/user.html:28 +#: templates/registration/login.html:59 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:32 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:36 +msgid "Last Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:40 +msgid "Email Address" +msgstr "" + +#: templates/about.html:13 +msgid "InvenTree Version Information" +msgstr "" + +#: templates/about.html:22 +msgid "InvenTree Version" +msgstr "" + +#: templates/about.html:26 +msgid "Up to Date" +msgstr "" + +#: templates/about.html:28 +msgid "Update Available" +msgstr "" + +#: templates/about.html:34 +msgid "Django Version" +msgstr "" + +#: templates/about.html:41 +msgid "Commit Hash" +msgstr "" + +#: templates/about.html:48 +msgid "Commit Date" +msgstr "" + +#: templates/about.html:53 +msgid "InvenTree Documentation" +msgstr "" + +#: templates/about.html:58 +msgid "View Code on GitHub" +msgstr "" + +#: templates/about.html:63 +msgid "Get the App" +msgstr "" + +#: templates/about.html:68 +msgid "Submit Bug Report" +msgstr "" + +#: templates/attachment_table.html:6 +msgid "Add Attachment" +msgstr "" + +#: templates/attachment_table.html:15 +msgid "File" +msgstr "" + +#: templates/attachment_table.html:17 +msgid "Uploaded" +msgstr "" + +#: templates/attachment_table.html:35 +msgid "Delete attachment" +msgstr "" + +#: templates/image_download.html:8 +msgid "Specify URL for downloading image" +msgstr "" + +#: templates/image_download.html:11 +msgid "Must be a valid image URL" +msgstr "" + +#: templates/image_download.html:12 +msgid "Remote server must be accessible" +msgstr "" + +#: templates/image_download.html:13 +msgid "Remote image must not exceed maximum allowable file size" +msgstr "" + +#: templates/js/barcode.js:8 +msgid "Scan barcode data here using wedge scanner" +msgstr "" + +#: templates/js/barcode.js:10 +msgid "Enter barcode data" +msgstr "" + +#: templates/js/barcode.js:14 +msgid "Barcode" +msgstr "" + +#: templates/js/barcode.js:32 +msgid "Enter optional notes for stock transfer" +msgstr "" + +#: templates/js/barcode.js:33 +msgid "Enter notes" +msgstr "" + +#: templates/js/barcode.js:71 +msgid "Server error" +msgstr "" + +#: templates/js/barcode.js:92 +msgid "Unknown response from server" +msgstr "" + +#: templates/js/barcode.js:119 templates/js/modals.js:857 +msgid "Invalid server response" +msgstr "" + +#: templates/js/barcode.js:212 +msgid "Scan barcode data below" +msgstr "" + +#: templates/js/barcode.js:270 +msgid "No URL in response" +msgstr "" + +#: templates/js/barcode.js:288 +msgid "Link Barcode to Stock Item" +msgstr "" + +#: templates/js/barcode.js:311 +msgid "" +"This will remove the association between this stock item and the barcode" +msgstr "" + +#: templates/js/barcode.js:317 +msgid "Unlink" +msgstr "" + +#: templates/js/barcode.js:376 +msgid "Remove stock item" +msgstr "" + +#: templates/js/barcode.js:418 +msgid "Check Stock Items into Location" +msgstr "" + +#: templates/js/barcode.js:422 templates/js/barcode.js:547 +msgid "Check In" +msgstr "" + +#: templates/js/barcode.js:462 templates/js/barcode.js:586 +msgid "Error transferring stock" +msgstr "" + +#: templates/js/barcode.js:481 +msgid "Stock Item already scanned" +msgstr "" + +#: templates/js/barcode.js:485 +msgid "Stock Item already in this location" +msgstr "" + +#: templates/js/barcode.js:492 +msgid "Added stock item" +msgstr "" + +#: templates/js/barcode.js:499 +msgid "Barcode does not match Stock Item" +msgstr "" + +#: templates/js/barcode.js:542 +msgid "Check Into Location" +msgstr "" + +#: templates/js/barcode.js:605 +msgid "Barcode does not match a valid location" +msgstr "" + +#: templates/js/bom.js:175 templates/js/build.js:934 +msgid "Open subassembly" +msgstr "" + +#: templates/js/bom.js:261 +msgid "No pricing available" +msgstr "" + +#: templates/js/bom.js:272 templates/js/filters.js:167 +#: templates/js/filters.js:397 +msgid "true" +msgstr "" + +#: templates/js/bom.js:273 templates/js/filters.js:171 +#: templates/js/filters.js:398 +msgid "false" +msgstr "" + +#: templates/js/bom.js:290 templates/js/bom.js:376 +msgid "View BOM" +msgstr "" + +#: templates/js/bom.js:350 +msgid "Validate BOM Item" +msgstr "" + +#: templates/js/bom.js:352 +msgid "This line has been validated" +msgstr "" + +#: templates/js/bom.js:354 +msgid "Edit BOM Item" +msgstr "" + +#: templates/js/bom.js:356 +msgid "Delete BOM Item" +msgstr "" + +#: templates/js/bom.js:447 templates/js/build.js:305 templates/js/build.js:1032 +msgid "No BOM items found" +msgstr "" + +#: templates/js/build.js:56 +msgid "Auto-allocate stock items to this output" +msgstr "" + +#: templates/js/build.js:62 +msgid "Complete build output" +msgstr "" + +#: templates/js/build.js:71 +msgid "Unallocate stock from build output" +msgstr "" + +#: templates/js/build.js:77 +msgid "Delete build output" +msgstr "" + +#: templates/js/build.js:209 templates/stock_table.html:20 +msgid "New Stock Item" +msgstr "" + +#: templates/js/build.js:493 +msgid "Required Part" +msgstr "" + +#: templates/js/build.js:514 +msgid "Quantity Per" +msgstr "" + +#: templates/js/build.js:582 templates/js/build.js:996 +#: templates/stock_table.html:58 +msgid "Order stock" +msgstr "" + +#: templates/js/build.js:632 +msgid "No builds matching query" +msgstr "" + +#: templates/js/build.js:649 templates/js/part.js:324 templates/js/part.js:546 +#: templates/js/stock.js:511 templates/js/stock.js:938 +#: templates/js/stock.js:1331 +msgid "Select" +msgstr "" + +#: templates/js/build.js:669 +msgid "Build order is overdue" +msgstr "" + +#: templates/js/build.js:767 +msgid "No parts allocated for" +msgstr "" + +#: templates/js/company.js:74 +msgid "Parts Supplied" +msgstr "" + +#: templates/js/company.js:83 +msgid "Parts Manufactured" +msgstr "" + +#: templates/js/company.js:96 +msgid "No company information found" +msgstr "" + +#: templates/js/company.js:129 +msgid "No manufacturer parts found" +msgstr "" + +#: templates/js/company.js:148 templates/js/company.js:246 +#: templates/js/part.js:60 templates/js/part.js:145 +msgid "Template part" +msgstr "" + +#: templates/js/company.js:152 templates/js/company.js:250 +#: templates/js/part.js:64 templates/js/part.js:149 +msgid "Assembled part" +msgstr "" + +#: templates/js/company.js:227 +msgid "No supplier parts found" +msgstr "" + +#: templates/js/filters.js:193 +msgid "Select filter" +msgstr "" + +#: templates/js/filters.js:268 +msgid "Add new filter" +msgstr "" + +#: templates/js/filters.js:271 +msgid "Clear all filters" +msgstr "" + +#: templates/js/filters.js:296 +msgid "Create filter" +msgstr "" + +#: templates/js/label.js:10 templates/js/report.js:98 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/label.js:11 +msgid "Stock item(s) must be selected before printing labels" +msgstr "" + +#: templates/js/label.js:29 templates/js/label.js:79 +msgid "No Labels Found" +msgstr "" + +#: templates/js/label.js:30 +msgid "No labels found which match selected stock item(s)" +msgstr "" + +#: templates/js/label.js:61 +msgid "Select Stock Locations" +msgstr "" + +#: templates/js/label.js:62 +msgid "Stock location(s) must be selected before printing labels" +msgstr "" + +#: templates/js/label.js:80 +msgid "No labels found which match selected stock location(s)" +msgstr "" + +#: templates/js/label.js:154 +msgid "stock items selected" +msgstr "" + +#: templates/js/label.js:162 +msgid "Select Label" +msgstr "" + +#: templates/js/label.js:177 +msgid "Select Label Template" +msgstr "" + +#: templates/js/modals.js:256 +msgid "Waiting for server..." +msgstr "" + +#: templates/js/modals.js:406 +msgid "Show Error Information" +msgstr "" + +#: templates/js/modals.js:473 templates/modals.html:73 +msgid "Accept" +msgstr "" + +#: templates/js/modals.js:474 templates/modals.html:72 +msgid "Cancel" +msgstr "" + +#: templates/js/modals.js:538 +msgid "Loading Data" +msgstr "" + +#: templates/js/modals.js:549 templates/js/modals.js:808 +#: templates/modals.html:29 templates/modals.html:53 +msgid "Submit" +msgstr "" + +#: templates/js/modals.js:550 templates/js/modals.js:809 +#: templates/modals.html:28 templates/modals.html:52 templates/modals.html:93 +msgid "Close" +msgstr "" + +#: templates/js/modals.js:760 +msgid "Invalid response from server" +msgstr "" + +#: templates/js/modals.js:760 +msgid "Form data missing from server response" +msgstr "" + +#: templates/js/modals.js:773 +msgid "Error posting form data" +msgstr "" + +#: templates/js/modals.js:857 +msgid "JSON response missing form data" +msgstr "" + +#: templates/js/modals.js:867 +msgid "No Response" +msgstr "" + +#: templates/js/modals.js:868 +msgid "No response from the InvenTree server" +msgstr "" + +#: templates/js/modals.js:872 +msgid "Error 400: Bad Request" +msgstr "" + +#: templates/js/modals.js:873 +msgid "Server returned error code 400" +msgstr "" + +#: templates/js/modals.js:877 +msgid "Error 401: Not Authenticated" +msgstr "" + +#: templates/js/modals.js:878 +msgid "Authentication credentials not supplied" +msgstr "" + +#: templates/js/modals.js:882 +msgid "Error 403: Permission Denied" +msgstr "" + +#: templates/js/modals.js:883 +msgid "You do not have the required permissions to access this function" +msgstr "" + +#: templates/js/modals.js:887 +msgid "Error 404: Resource Not Found" +msgstr "" + +#: templates/js/modals.js:888 +msgid "The requested resource could not be located on the server" +msgstr "" + +#: templates/js/modals.js:892 +msgid "Error 408: Timeout" +msgstr "" + +#: templates/js/modals.js:893 +msgid "Connection timeout while requesting data from server" +msgstr "" + +#: templates/js/modals.js:896 +msgid "Error requesting form data" +msgstr "" + +#: templates/js/order.js:138 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/order.js:162 templates/js/order.js:257 +msgid "Order is overdue" +msgstr "" + +#: templates/js/order.js:234 +msgid "No sales orders found" +msgstr "" + +#: templates/js/part.js:52 templates/js/part.js:137 +msgid "Trackable part" +msgstr "" + +#: templates/js/part.js:56 templates/js/part.js:141 +msgid "Virtual part" +msgstr "" + +#: templates/js/part.js:68 +msgid "Starred part" +msgstr "" + +#: templates/js/part.js:72 +msgid "Salable part" +msgstr "" + +#: templates/js/part.js:186 +msgid "No variants found" +msgstr "" + +#: templates/js/part.js:272 templates/js/part.js:452 +msgid "No parts found" +msgstr "" + +#: templates/js/part.js:391 +msgid "No category" +msgstr "" + +#: templates/js/part.js:409 templates/js/table_filters.js:318 +msgid "Low stock" +msgstr "" + +#: templates/js/part.js:571 templates/js/stock.js:962 +msgid "Path" +msgstr "" + +#: templates/js/part.js:588 +msgid "YES" +msgstr "" + +#: templates/js/part.js:590 +msgid "NO" +msgstr "" + +#: templates/js/part.js:624 +msgid "No test templates matching query" +msgstr "" + +#: templates/js/part.js:675 templates/js/stock.js:75 +msgid "Edit test result" +msgstr "" + +#: templates/js/part.js:676 templates/js/stock.js:76 +msgid "Delete test result" +msgstr "" + +#: templates/js/part.js:682 +msgid "This test is defined for a parent part" +msgstr "" + +#: templates/js/report.js:47 +msgid "items selected" +msgstr "" + +#: templates/js/report.js:55 +msgid "Select Report Template" +msgstr "" + +#: templates/js/report.js:70 +msgid "Select Test Report Template" +msgstr "" + +#: templates/js/report.js:99 +msgid "Stock item(s) must be selected before printing reports" +msgstr "" + +#: templates/js/report.js:116 templates/js/report.js:169 +#: templates/js/report.js:223 templates/js/report.js:277 +#: templates/js/report.js:331 +msgid "No Reports Found" +msgstr "" + +#: templates/js/report.js:117 +msgid "No report templates found which match selected stock item(s)" +msgstr "" + +#: templates/js/report.js:152 +msgid "Select Builds" +msgstr "" + +#: templates/js/report.js:153 +msgid "Build(s) must be selected before printing reports" +msgstr "" + +#: templates/js/report.js:170 +msgid "No report templates found which match selected build(s)" +msgstr "" + +#: templates/js/report.js:205 +msgid "Select Parts" +msgstr "" + +#: templates/js/report.js:206 +msgid "Part(s) must be selected before printing reports" +msgstr "" + +#: templates/js/report.js:224 +msgid "No report templates found which match selected part(s)" +msgstr "" + +#: templates/js/report.js:259 +msgid "Select Purchase Orders" +msgstr "" + +#: templates/js/report.js:260 +msgid "Purchase Order(s) must be selected before printing report" +msgstr "" + +#: templates/js/report.js:278 templates/js/report.js:332 +msgid "No report templates found which match selected orders" +msgstr "" + +#: templates/js/report.js:313 +msgid "Select Sales Orders" +msgstr "" + +#: templates/js/report.js:314 +msgid "Sales Order(s) must be selected before printing report" +msgstr "" + +#: templates/js/stock.js:38 +msgid "PASS" +msgstr "" + +#: templates/js/stock.js:40 +msgid "FAIL" +msgstr "" + +#: templates/js/stock.js:45 +msgid "NO RESULT" +msgstr "" + +#: templates/js/stock.js:71 +msgid "Add test result" +msgstr "" + +#: templates/js/stock.js:90 +msgid "No test results found" +msgstr "" + +#: templates/js/stock.js:132 +msgid "Test Date" +msgstr "" + +#: templates/js/stock.js:292 +msgid "In production" +msgstr "" + +#: templates/js/stock.js:296 +msgid "Installed in Stock Item" +msgstr "" + +#: templates/js/stock.js:304 +msgid "Assigned to Sales Order" +msgstr "" + +#: templates/js/stock.js:336 +msgid "No stock items matching query" +msgstr "" + +#: templates/js/stock.js:357 +msgid "items" +msgstr "" + +#: templates/js/stock.js:449 +msgid "batches" +msgstr "" + +#: templates/js/stock.js:476 +msgid "locations" +msgstr "" + +#: templates/js/stock.js:478 +msgid "Undefined location" +msgstr "" + +#: templates/js/stock.js:579 +msgid "Stock item is in production" +msgstr "" + +#: templates/js/stock.js:584 +msgid "Stock item assigned to sales order" +msgstr "" + +#: templates/js/stock.js:587 +msgid "Stock item assigned to customer" +msgstr "" + +#: templates/js/stock.js:591 +msgid "Stock item has expired" +msgstr "" + +#: templates/js/stock.js:593 +msgid "Stock item will expire soon" +msgstr "" + +#: templates/js/stock.js:597 +msgid "Stock item has been allocated" +msgstr "" + +#: templates/js/stock.js:601 +msgid "Stock item has been installed in another item" +msgstr "" + +#: templates/js/stock.js:609 +msgid "Stock item has been rejected" +msgstr "" + +#: templates/js/stock.js:613 +msgid "Stock item is lost" +msgstr "" + +#: templates/js/stock.js:616 +msgid "Stock item is destroyed" +msgstr "" + +#: templates/js/stock.js:620 templates/js/table_filters.js:138 +msgid "Depleted" +msgstr "" + +#: templates/js/stock.js:649 +msgid "Stocktake" +msgstr "" + +#: templates/js/stock.js:825 +msgid "Stock Status" +msgstr "" + +#: templates/js/stock.js:840 +msgid "Set Stock Status" +msgstr "" + +#: templates/js/stock.js:854 +msgid "Select Status Code" +msgstr "" + +#: templates/js/stock.js:855 +msgid "Status code must be selected" +msgstr "" + +#: templates/js/stock.js:1050 +msgid "No user information" +msgstr "" + +#: templates/js/stock.js:1060 +msgid "Edit tracking entry" +msgstr "" + +#: templates/js/stock.js:1061 +msgid "Delete tracking entry" +msgstr "" + +#: templates/js/stock.js:1170 +msgid "Create New Location" +msgstr "" + +#: templates/js/stock.js:1269 +msgid "Serial" +msgstr "" + +#: templates/js/stock.js:1362 templates/js/table_filters.js:171 +msgid "Installed" +msgstr "" + +#: templates/js/stock.js:1387 +msgid "Install item" +msgstr "" + +#: templates/js/table_filters.js:42 +msgid "Trackable Part" +msgstr "" + +#: templates/js/table_filters.js:46 +msgid "Validated" +msgstr "" + +#: templates/js/table_filters.js:71 +msgid "Include locations" +msgstr "" + +#: templates/js/table_filters.js:81 templates/js/table_filters.js:82 +#: templates/js/table_filters.js:295 +msgid "Include subcategories" +msgstr "" + +#: templates/js/table_filters.js:92 templates/js/table_filters.js:181 +msgid "Is Serialized" +msgstr "" + +#: templates/js/table_filters.js:95 templates/js/table_filters.js:188 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/table_filters.js:96 templates/js/table_filters.js:189 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/table_filters.js:99 templates/js/table_filters.js:192 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/table_filters.js:100 templates/js/table_filters.js:193 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/table_filters.js:103 templates/js/table_filters.js:104 +#: templates/js/table_filters.js:184 templates/js/table_filters.js:185 +msgid "Serial number" +msgstr "" + +#: templates/js/table_filters.js:108 templates/js/table_filters.js:202 +msgid "Batch code" +msgstr "" + +#: templates/js/table_filters.js:118 templates/js/table_filters.js:285 +msgid "Active parts" +msgstr "" + +#: templates/js/table_filters.js:119 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/table_filters.js:124 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/table_filters.js:128 +msgid "Is allocated" +msgstr "" + +#: templates/js/table_filters.js:129 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/table_filters.js:134 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/table_filters.js:139 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/table_filters.js:146 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/table_filters.js:151 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/table_filters.js:157 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/table_filters.js:161 +msgid "In Production" +msgstr "" + +#: templates/js/table_filters.js:162 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/table_filters.js:166 +msgid "Include Variants" +msgstr "" + +#: templates/js/table_filters.js:167 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/table_filters.js:172 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/table_filters.js:176 +msgid "Sent to customer" +msgstr "" + +#: templates/js/table_filters.js:177 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/table_filters.js:197 templates/js/table_filters.js:198 +msgid "Stock status" +msgstr "" + +#: templates/js/table_filters.js:231 +msgid "Build status" +msgstr "" + +#: templates/js/table_filters.js:250 templates/js/table_filters.js:267 +msgid "Order status" +msgstr "" + +#: templates/js/table_filters.js:255 templates/js/table_filters.js:272 +msgid "Outstanding" +msgstr "" + +#: templates/js/table_filters.js:296 +msgid "Include parts in subcategories" +msgstr "" + +#: templates/js/table_filters.js:300 +msgid "Has IPN" +msgstr "" + +#: templates/js/table_filters.js:301 +msgid "Part has internal part number" +msgstr "" + +#: templates/js/table_filters.js:306 +msgid "Show active parts" +msgstr "" + +#: templates/js/table_filters.js:314 +msgid "Stock available" +msgstr "" + +#: templates/js/table_filters.js:330 +msgid "Starred" +msgstr "" + +#: templates/js/table_filters.js:342 +msgid "Purchasable" +msgstr "" + +#: templates/js/tables.js:321 +msgid "Loading data" +msgstr "" + +#: templates/js/tables.js:324 +msgid "rows per page" +msgstr "" + +#: templates/js/tables.js:327 +msgid "Showing" +msgstr "" + +#: templates/js/tables.js:327 +msgid "to" +msgstr "" + +#: templates/js/tables.js:327 +msgid "of" +msgstr "" + +#: templates/js/tables.js:327 +msgid "rows" +msgstr "" + +#: templates/js/tables.js:330 templates/search_form.html:6 +#: templates/search_form.html:8 +msgid "Search" +msgstr "" + +#: templates/js/tables.js:333 +msgid "No matching results" +msgstr "" + +#: templates/js/tables.js:336 +msgid "Hide/Show pagination" +msgstr "" + +#: templates/js/tables.js:339 +msgid "Refresh" +msgstr "" + +#: templates/js/tables.js:342 +msgid "Toggle" +msgstr "" + +#: templates/js/tables.js:345 +msgid "Columns" +msgstr "" + +#: templates/js/tables.js:348 +msgid "All" +msgstr "" + +#: templates/modals.html:21 templates/modals.html:46 +msgid "Form errors exist" +msgstr "" + +#: templates/navbar.html:33 +msgid "Buy" +msgstr "" + +#: templates/navbar.html:43 +msgid "Sell" +msgstr "" + +#: templates/navbar.html:55 +msgid "Scan Barcode" +msgstr "" + +#: templates/navbar.html:77 users/models.py:36 +msgid "Admin" +msgstr "" + +#: templates/navbar.html:79 +msgid "Logout" +msgstr "" + +#: templates/navbar.html:81 templates/registration/login.html:90 +msgid "Login" +msgstr "" + +#: templates/navbar.html:104 +msgid "About InvenTree" +msgstr "" + +#: templates/qr_code.html:11 +msgid "QR data not provided" +msgstr "" + +#: templates/registration/logged_out.html:51 +msgid "You have been logged out" +msgstr "" + +#: templates/registration/logged_out.html:52 +#: templates/registration/password_reset_complete.html:52 +#: templates/registration/password_reset_done.html:59 +msgid "Return to login screen" +msgstr "" + +#: templates/registration/login.html:65 +msgid "Enter username" +msgstr "" + +#: templates/registration/login.html:71 +msgid "Password" +msgstr "" + +#: templates/registration/login.html:84 +msgid "Username / password combination is incorrect" +msgstr "" + +#: templates/registration/login.html:96 +#: templates/registration/password_reset_form.html:52 +msgid "Forgotten your password?" +msgstr "" + +#: templates/registration/login.html:96 +msgid "Click here to reset" +msgstr "" + +#: templates/registration/password_reset_complete.html:51 +msgid "Password reset complete" +msgstr "" + +#: templates/registration/password_reset_confirm.html:53 +#: templates/registration/password_reset_confirm.html:57 +msgid "Change password" +msgstr "" + +#: templates/registration/password_reset_confirm.html:61 +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +#: templates/registration/password_reset_done.html:52 +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +#: templates/registration/password_reset_done.html:55 +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#: templates/registration/password_reset_form.html:53 +msgid "Enter your email address below." +msgstr "" + +#: templates/registration/password_reset_form.html:54 +msgid "An email will be sent with password reset instructions." +msgstr "" + +#: templates/registration/password_reset_form.html:59 +msgid "Send email" +msgstr "" + +#: templates/stats.html:9 +msgid "Server" +msgstr "" + +#: templates/stats.html:13 +msgid "Instance Name" +msgstr "" + +#: templates/stats.html:19 +msgid "Server status" +msgstr "" + +#: templates/stats.html:22 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:24 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:31 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:34 +msgid "Background worker not running" +msgstr "" + +#: templates/stats.html:42 +msgid "Email Settings" +msgstr "" + +#: templates/stats.html:45 +msgid "Email settings not configured" +msgstr "" + +#: templates/stock_table.html:14 +msgid "Export Stock Information" +msgstr "" + +#: templates/stock_table.html:27 +msgid "Barcode Actions" +msgstr "" + +#: templates/stock_table.html:43 +msgid "Print test reports" +msgstr "" + +#: templates/stock_table.html:54 +msgid "Add to selected stock items" +msgstr "" + +#: templates/stock_table.html:55 +msgid "Remove from selected stock items" +msgstr "" + +#: templates/stock_table.html:56 +msgid "Stocktake selected stock items" +msgstr "" + +#: templates/stock_table.html:57 +msgid "Move selected stock items" +msgstr "" + +#: templates/stock_table.html:57 +msgid "Move stock" +msgstr "" + +#: templates/stock_table.html:58 +msgid "Order selected items" +msgstr "" + +#: templates/stock_table.html:59 +msgid "Change status" +msgstr "" + +#: templates/stock_table.html:59 +msgid "Change stock status" +msgstr "" + +#: templates/stock_table.html:62 +msgid "Delete selected items" +msgstr "" + +#: templates/stock_table.html:62 +msgid "Delete Stock" +msgstr "" + +#: templates/yesnolabel.html:4 +msgid "Yes" +msgstr "" + +#: templates/yesnolabel.html:6 +msgid "No" +msgstr "" + +#: users/admin.py:64 +msgid "Users" +msgstr "" + +#: users/admin.py:65 +msgid "Select which users are assigned to this group" +msgstr "" + +#: users/admin.py:187 +msgid "The following users are members of multiple groups:" +msgstr "" + +#: users/admin.py:210 +msgid "Personal info" +msgstr "" + +#: users/admin.py:211 +msgid "Permissions" +msgstr "" + +#: users/admin.py:214 +msgid "Important dates" +msgstr "" + +#: users/models.py:167 +msgid "Permission set" +msgstr "" + +#: users/models.py:175 +msgid "Group" +msgstr "" + +#: users/models.py:178 +msgid "View" +msgstr "" + +#: users/models.py:178 +msgid "Permission to view items" +msgstr "" + +#: users/models.py:180 +msgid "Permission to add items" +msgstr "" + +#: users/models.py:182 +msgid "Change" +msgstr "" + +#: users/models.py:182 +msgid "Permissions to edit items" +msgstr "" + +#: users/models.py:184 +msgid "Permission to delete items" +msgstr "" diff --git a/InvenTree/locale/it/LC_MESSAGES/django.po b/InvenTree/locale/it/LC_MESSAGES/django.po new file mode 100644 index 0000000000..9e300a0372 --- /dev/null +++ b/InvenTree/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,7234 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-21 12:28+1000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: InvenTree/api.py:64 +msgid "API endpoint not found" +msgstr "" + +#: InvenTree/api.py:110 +msgid "No action specified" +msgstr "" + +#: InvenTree/api.py:124 +msgid "No matching action found" +msgstr "" + +#: InvenTree/fields.py:44 +msgid "Enter date" +msgstr "" + +#: InvenTree/forms.py:110 build/forms.py:99 build/forms.py:120 +#: build/forms.py:142 build/forms.py:166 build/forms.py:188 build/forms.py:223 +#: order/forms.py:27 order/forms.py:38 order/forms.py:49 order/forms.py:60 +#: order/forms.py:71 part/forms.py:134 +msgid "Confirm" +msgstr "" + +#: InvenTree/forms.py:126 +msgid "Confirm delete" +msgstr "" + +#: InvenTree/forms.py:127 +msgid "Confirm item deletion" +msgstr "" + +#: InvenTree/forms.py:159 templates/registration/login.html:77 +msgid "Enter password" +msgstr "" + +#: InvenTree/forms.py:160 +msgid "Enter new password" +msgstr "" + +#: InvenTree/forms.py:167 +msgid "Confirm password" +msgstr "" + +#: InvenTree/forms.py:168 +msgid "Confirm new password" +msgstr "" + +#: InvenTree/forms.py:203 +msgid "Apply Theme" +msgstr "" + +#: InvenTree/forms.py:233 +msgid "Select Category" +msgstr "" + +#: InvenTree/helpers.py:375 order/models.py:245 order/models.py:344 +#: stock/views.py:1763 +msgid "Invalid quantity provided" +msgstr "" + +#: InvenTree/helpers.py:378 +msgid "Empty serial number string" +msgstr "" + +#: InvenTree/helpers.py:399 +#, python-brace-format +msgid "Duplicate serial: {n}" +msgstr "" + +#: InvenTree/helpers.py:403 InvenTree/helpers.py:406 InvenTree/helpers.py:409 +#, python-brace-format +msgid "Invalid group: {g}" +msgstr "" + +#: InvenTree/helpers.py:414 +#, python-brace-format +msgid "Duplicate serial: {g}" +msgstr "" + +#: InvenTree/helpers.py:422 +msgid "No serial numbers found" +msgstr "" + +#: InvenTree/helpers.py:426 +#, python-brace-format +msgid "Number of unique serial number ({s}) must match quantity ({q})" +msgstr "" + +#: InvenTree/models.py:59 stock/models.py:1662 +msgid "Attachment" +msgstr "" + +#: InvenTree/models.py:60 +msgid "Select file to attach" +msgstr "" + +#: InvenTree/models.py:62 templates/attachment_table.html:16 +msgid "Comment" +msgstr "" + +#: InvenTree/models.py:62 +msgid "File comment" +msgstr "" + +#: InvenTree/models.py:68 InvenTree/models.py:69 part/models.py:1908 +#: report/templates/report/inventree_test_report_base.html:91 +#: templates/js/stock.js:1041 +msgid "User" +msgstr "" + +#: InvenTree/models.py:72 +msgid "upload date" +msgstr "" + +#: InvenTree/models.py:107 InvenTree/models.py:108 label/models.py:101 +#: part/models.py:686 part/models.py:2049 part/templates/part/params.html:27 +#: report/models.py:179 templates/InvenTree/search.html:137 +#: templates/InvenTree/search.html:289 templates/js/part.js:110 +#: templates/js/part.js:553 templates/js/stock.js:944 +msgid "Name" +msgstr "" + +#: InvenTree/models.py:114 build/models.py:134 +#: build/templates/build/detail.html:21 company/models.py:342 +#: company/models.py:494 company/templates/company/detail.html:27 +#: company/templates/company/manufacturer_part_base.html:72 +#: company/templates/company/supplier_part_base.html:71 +#: company/templates/company/supplier_part_detail.html:31 label/models.py:108 +#: order/models.py:101 order/templates/order/purchase_order_detail.html:168 +#: part/models.py:710 part/templates/part/detail.html:54 +#: part/templates/part/set_category.html:14 report/models.py:192 +#: report/models.py:505 report/models.py:544 +#: report/templates/report/inventree_build_order_base.html:118 +#: templates/InvenTree/search.html:144 templates/InvenTree/search.html:224 +#: templates/InvenTree/search.html:296 +#: templates/InvenTree/settings/header.html:9 templates/js/bom.js:190 +#: templates/js/build.js:677 templates/js/build.js:944 +#: templates/js/company.js:56 templates/js/order.js:183 +#: templates/js/order.js:280 templates/js/part.js:169 templates/js/part.js:252 +#: templates/js/part.js:371 templates/js/part.js:565 templates/js/part.js:643 +#: templates/js/stock.js:554 templates/js/stock.js:956 +#: templates/js/stock.js:1015 +msgid "Description" +msgstr "" + +#: InvenTree/models.py:115 +msgid "Description (optional)" +msgstr "" + +#: InvenTree/models.py:123 +msgid "parent" +msgstr "" + +#: InvenTree/settings.py:493 +msgid "English" +msgstr "" + +#: InvenTree/settings.py:494 +msgid "French" +msgstr "" + +#: InvenTree/settings.py:495 +msgid "German" +msgstr "" + +#: InvenTree/settings.py:496 +msgid "Polish" +msgstr "" + +#: InvenTree/settings.py:497 +msgid "Turkish" +msgstr "" + +#: InvenTree/status.py:93 +msgid "Background worker check failed" +msgstr "" + +#: InvenTree/status.py:97 +msgid "Email backend not configured" +msgstr "" + +#: InvenTree/status.py:100 +msgid "InvenTree system health checks failed" +msgstr "" + +#: InvenTree/status_codes.py:94 InvenTree/status_codes.py:135 +#: InvenTree/status_codes.py:228 +msgid "Pending" +msgstr "" + +#: InvenTree/status_codes.py:95 +msgid "Placed" +msgstr "" + +#: InvenTree/status_codes.py:96 InvenTree/status_codes.py:231 +msgid "Complete" +msgstr "" + +#: InvenTree/status_codes.py:97 InvenTree/status_codes.py:137 +#: InvenTree/status_codes.py:230 +msgid "Cancelled" +msgstr "" + +#: InvenTree/status_codes.py:98 InvenTree/status_codes.py:138 +#: InvenTree/status_codes.py:180 +msgid "Lost" +msgstr "" + +#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:139 +#: InvenTree/status_codes.py:182 +msgid "Returned" +msgstr "" + +#: InvenTree/status_codes.py:136 +#: order/templates/order/sales_order_base.html:124 +msgid "Shipped" +msgstr "" + +#: InvenTree/status_codes.py:176 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:177 +msgid "Attention needed" +msgstr "" + +#: InvenTree/status_codes.py:178 +msgid "Damaged" +msgstr "" + +#: InvenTree/status_codes.py:179 +msgid "Destroyed" +msgstr "" + +#: InvenTree/status_codes.py:181 +msgid "Rejected" +msgstr "" + +#: InvenTree/status_codes.py:229 +msgid "Production" +msgstr "" + +#: InvenTree/validators.py:22 +msgid "Not a valid currency code" +msgstr "" + +#: InvenTree/validators.py:50 +msgid "Invalid character in part name" +msgstr "" + +#: InvenTree/validators.py:63 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "" + +#: InvenTree/validators.py:77 InvenTree/validators.py:91 +#: InvenTree/validators.py:105 +msgid "Reference must match pattern" +msgstr "" + +#: InvenTree/validators.py:113 +#, python-brace-format +msgid "Illegal character in name ({x})" +msgstr "" + +#: InvenTree/validators.py:132 InvenTree/validators.py:148 +msgid "Overage value must not be negative" +msgstr "" + +#: InvenTree/validators.py:150 +msgid "Overage must not exceed 100%" +msgstr "" + +#: InvenTree/validators.py:157 +msgid "Overage must be an integer value or a percentage" +msgstr "" + +#: InvenTree/views.py:587 +msgid "Delete Item" +msgstr "" + +#: InvenTree/views.py:636 +msgid "Check box to confirm item deletion" +msgstr "" + +#: InvenTree/views.py:651 templates/InvenTree/settings/user.html:18 +msgid "Edit User Information" +msgstr "" + +#: InvenTree/views.py:662 templates/InvenTree/settings/user.html:22 +msgid "Set Password" +msgstr "" + +#: InvenTree/views.py:681 +msgid "Password fields must match" +msgstr "" + +#: InvenTree/views.py:887 templates/navbar.html:95 +msgid "System Information" +msgstr "" + +#: barcodes/api.py:53 barcodes/api.py:150 +msgid "Must provide barcode_data parameter" +msgstr "" + +#: barcodes/api.py:126 +msgid "No match found for barcode data" +msgstr "" + +#: barcodes/api.py:128 +msgid "Match found for barcode data" +msgstr "" + +#: barcodes/api.py:153 +msgid "Must provide stockitem parameter" +msgstr "" + +#: barcodes/api.py:160 +msgid "No matching stock item found" +msgstr "" + +#: barcodes/api.py:190 +msgid "Barcode already matches StockItem object" +msgstr "" + +#: barcodes/api.py:194 +msgid "Barcode already matches StockLocation object" +msgstr "" + +#: barcodes/api.py:198 +msgid "Barcode already matches Part object" +msgstr "" + +#: barcodes/api.py:204 barcodes/api.py:216 +msgid "Barcode hash already matches StockItem object" +msgstr "" + +#: barcodes/api.py:222 +msgid "Barcode associated with StockItem" +msgstr "" + +#: build/forms.py:34 +msgid "Build Order reference" +msgstr "" + +#: build/forms.py:35 +msgid "Order target date" +msgstr "" + +#: build/forms.py:39 build/templates/build/build_base.html:107 +#: build/templates/build/detail.html:121 order/forms.py:109 order/forms.py:144 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:117 +#: report/templates/report/inventree_build_order_base.html:126 +#: templates/js/build.js:723 templates/js/order.js:200 +#: templates/js/order.js:298 +msgid "Target Date" +msgstr "" + +#: build/forms.py:40 build/models.py:224 +msgid "" +"Target date for build completion. Build will be overdue after this date." +msgstr "" + +#: build/forms.py:45 build/forms.py:87 build/forms.py:257 build/models.py:1109 +#: build/templates/build/auto_allocate.html:17 +#: build/templates/build/build_base.html:94 +#: build/templates/build/detail.html:31 common/models.py:703 +#: company/forms.py:176 company/templates/company/supplier_part_pricing.html:77 +#: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261 +#: order/forms.py:278 order/models.py:593 order/models.py:784 +#: order/templates/order/order_wizard/select_parts.html:32 +#: order/templates/order/purchase_order_detail.html:200 +#: order/templates/order/sales_order_detail.html:70 +#: order/templates/order/sales_order_detail.html:77 +#: order/templates/order/sales_order_detail.html:159 +#: order/templates/order/sales_order_detail.html:224 part/forms.py:342 +#: part/forms.py:371 part/forms.py:387 part/models.py:2178 +#: part/templates/part/allocation.html:19 +#: part/templates/part/allocation.html:53 +#: part/templates/part/part_pricing.html:11 +#: part/templates/part/part_pricing.html:18 +#: part/templates/part/sale_prices.html:85 +#: report/templates/report/inventree_build_order_base.html:114 +#: report/templates/report/inventree_po_report.html:91 +#: report/templates/report/inventree_so_report.html:91 +#: report/templates/report/inventree_test_report_base.html:77 +#: stock/forms.py:175 stock/forms.py:308 stock/models.py:1566 +#: stock/templates/stock/item_base.html:244 +#: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364 +#: templates/js/bom.js:205 templates/js/build.js:420 templates/js/build.js:954 +#: templates/js/stock.js:1033 templates/js/stock.js:1271 +msgid "Quantity" +msgstr "" + +#: build/forms.py:46 +msgid "Number of items to build" +msgstr "" + +#: build/forms.py:88 +msgid "Enter quantity for build output" +msgstr "" + +#: build/forms.py:92 order/forms.py:233 stock/forms.py:118 +msgid "Serial Numbers" +msgstr "" + +#: build/forms.py:94 +msgid "Enter serial numbers for build outputs" +msgstr "" + +#: build/forms.py:100 +msgid "Confirm creation of build output" +msgstr "" + +#: build/forms.py:121 +msgid "Confirm deletion of build output" +msgstr "" + +#: build/forms.py:142 +msgid "Confirm unallocation of stock" +msgstr "" + +#: build/forms.py:166 +msgid "Confirm stock allocation" +msgstr "" + +#: build/forms.py:189 +msgid "Mark build as complete" +msgstr "" + +#: build/forms.py:213 build/templates/build/auto_allocate.html:18 +#: order/forms.py:82 stock/forms.py:347 +#: stock/templates/stock/item_base.html:274 +#: stock/templates/stock/stock_adjust.html:17 +#: templates/InvenTree/search.html:260 templates/js/barcode.js:363 +#: templates/js/barcode.js:531 templates/js/build.js:434 +#: templates/js/stock.js:641 +msgid "Location" +msgstr "" + +#: build/forms.py:214 +msgid "Location of completed parts" +msgstr "" + +#: build/forms.py:219 +msgid "Confirm incomplete" +msgstr "" + +#: build/forms.py:220 +msgid "Confirm completion with incomplete stock allocation" +msgstr "" + +#: build/forms.py:223 +msgid "Confirm build completion" +msgstr "" + +#: build/forms.py:243 +msgid "Confirm cancel" +msgstr "" + +#: build/forms.py:243 build/views.py:66 +msgid "Confirm build cancellation" +msgstr "" + +#: build/forms.py:257 +msgid "Select quantity of stock to allocate" +msgstr "" + +#: build/models.py:65 build/templates/build/build_base.html:9 +#: build/templates/build/build_base.html:38 +#: part/templates/part/allocation.html:23 +#: report/templates/report/inventree_build_order_base.html:106 +msgid "Build Order" +msgstr "" + +#: build/models.py:66 build/templates/build/index.html:8 +#: build/templates/build/index.html:15 order/templates/order/so_builds.html:12 +#: order/templates/order/so_navbar.html:19 +#: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55 +#: part/templates/part/navbar.html:58 templates/InvenTree/index.html:183 +#: templates/InvenTree/search.html:185 +#: templates/InvenTree/settings/tabs.html:31 users/models.py:41 +msgid "Build Orders" +msgstr "" + +#: build/models.py:126 +msgid "Build Order Reference" +msgstr "" + +#: build/models.py:127 order/models.py:99 order/models.py:595 +#: order/templates/order/purchase_order_detail.html:195 +#: order/templates/order/sales_order_detail.html:219 part/models.py:2187 +#: report/templates/report/inventree_po_report.html:92 +#: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197 +#: templates/js/build.js:509 templates/js/build.js:948 +msgid "Reference" +msgstr "" + +#: build/models.py:137 +msgid "Brief description of the build" +msgstr "" + +#: build/models.py:146 build/templates/build/build_base.html:124 +#: build/templates/build/detail.html:77 +msgid "Parent Build" +msgstr "" + +#: build/models.py:147 +msgid "BuildOrder to which this build is allocated" +msgstr "" + +#: build/models.py:152 build/templates/build/auto_allocate.html:16 +#: build/templates/build/build_base.html:89 +#: build/templates/build/detail.html:26 company/models.py:669 +#: order/models.py:637 order/models.py:669 +#: order/templates/order/order_wizard/select_parts.html:30 +#: order/templates/order/purchase_order_detail.html:156 +#: order/templates/order/receive_parts.html:19 +#: order/templates/order/sales_order_detail.html:207 part/models.py:321 +#: part/models.py:1876 part/models.py:1888 part/models.py:1906 +#: part/models.py:1981 part/models.py:2077 part/models.py:2162 +#: part/templates/part/part_app_base.html:8 +#: part/templates/part/part_pricing.html:14 part/templates/part/related.html:29 +#: part/templates/part/set_category.html:13 +#: report/templates/report/inventree_build_order_base.html:110 +#: report/templates/report/inventree_po_report.html:90 +#: report/templates/report/inventree_so_report.html:90 +#: templates/InvenTree/search.html:112 templates/InvenTree/search.html:210 +#: templates/js/barcode.js:362 templates/js/bom.js:163 +#: templates/js/build.js:681 templates/js/build.js:921 +#: templates/js/company.js:140 templates/js/company.js:238 +#: templates/js/part.js:233 templates/js/part.js:338 templates/js/stock.js:523 +#: templates/js/stock.js:1343 +msgid "Part" +msgstr "" + +#: build/models.py:160 +msgid "Select part to build" +msgstr "" + +#: build/models.py:165 +msgid "Sales Order Reference" +msgstr "" + +#: build/models.py:169 +msgid "SalesOrder to which this build is allocated" +msgstr "" + +#: build/models.py:174 +msgid "Source Location" +msgstr "" + +#: build/models.py:178 +msgid "" +"Select location to take stock from for this build (leave blank to take from " +"any stock location)" +msgstr "" + +#: build/models.py:183 +msgid "Destination Location" +msgstr "" + +#: build/models.py:187 +msgid "Select location where the completed items will be stored" +msgstr "" + +#: build/models.py:191 +msgid "Build Quantity" +msgstr "" + +#: build/models.py:194 +msgid "Number of stock items to build" +msgstr "" + +#: build/models.py:198 +msgid "Completed items" +msgstr "" + +#: build/models.py:200 +msgid "Number of stock items which have been completed" +msgstr "" + +#: build/models.py:204 part/templates/part/part_base.html:160 +msgid "Build Status" +msgstr "" + +#: build/models.py:208 +msgid "Build status code" +msgstr "" + +#: build/models.py:212 stock/models.py:432 +msgid "Batch Code" +msgstr "" + +#: build/models.py:216 +msgid "Batch code for this build output" +msgstr "" + +#: build/models.py:219 order/models.py:105 part/models.py:882 +#: part/templates/part/detail.html:126 templates/js/order.js:293 +msgid "Creation Date" +msgstr "" + +#: build/models.py:223 order/models.py:451 +msgid "Target completion date" +msgstr "" + +#: build/models.py:227 order/models.py:218 +msgid "Completion Date" +msgstr "" + +#: build/models.py:233 +msgid "completed by" +msgstr "" + +#: build/models.py:241 +msgid "Issued by" +msgstr "" + +#: build/models.py:242 +msgid "User who issued this build order" +msgstr "" + +#: build/models.py:250 build/templates/build/build_base.html:145 +#: build/templates/build/detail.html:105 order/models.py:119 +#: order/templates/order/order_base.html:138 +#: order/templates/order/sales_order_base.html:138 part/models.py:886 +#: report/templates/report/inventree_build_order_base.html:159 +msgid "Responsible" +msgstr "" + +#: build/models.py:251 +msgid "User responsible for this build order" +msgstr "" + +#: build/models.py:256 build/templates/build/detail.html:91 +#: company/templates/company/manufacturer_part_base.html:79 +#: company/templates/company/manufacturer_part_detail.html:28 +#: company/templates/company/supplier_part_base.html:78 +#: company/templates/company/supplier_part_detail.html:28 +#: part/templates/part/detail.html:83 part/templates/part/part_base.html:101 +#: stock/models.py:426 stock/templates/stock/item_base.html:334 +msgid "External Link" +msgstr "" + +#: build/models.py:257 part/models.py:744 stock/models.py:428 +msgid "Link to external URL" +msgstr "" + +#: build/models.py:261 build/templates/build/navbar.html:59 +#: company/models.py:135 company/models.py:501 +#: company/templates/company/navbar.html:70 +#: company/templates/company/navbar.html:73 order/models.py:123 +#: order/models.py:597 order/templates/order/po_navbar.html:29 +#: order/templates/order/po_navbar.html:32 +#: order/templates/order/purchase_order_detail.html:234 +#: order/templates/order/sales_order_detail.html:264 +#: order/templates/order/so_navbar.html:33 +#: order/templates/order/so_navbar.html:36 part/models.py:871 +#: part/templates/part/navbar.html:128 +#: report/templates/report/inventree_build_order_base.html:173 +#: stock/forms.py:173 stock/forms.py:317 stock/forms.py:349 stock/forms.py:377 +#: stock/models.py:498 stock/models.py:1558 stock/models.py:1668 +#: stock/templates/stock/navbar.html:57 templates/js/barcode.js:37 +#: templates/js/bom.js:333 templates/js/stock.js:128 templates/js/stock.js:671 +msgid "Notes" +msgstr "" + +#: build/models.py:262 +msgid "Extra build notes" +msgstr "" + +#: build/models.py:673 +msgid "No build output specified" +msgstr "" + +#: build/models.py:676 +msgid "Build output is already completed" +msgstr "" + +#: build/models.py:679 +msgid "Build output does not match Build Order" +msgstr "" + +#: build/models.py:754 +msgid "Completed build output" +msgstr "" + +#: build/models.py:1002 +msgid "BuildItem must be unique for build, stock_item and install_into" +msgstr "" + +#: build/models.py:1024 +msgid "Build item must specify a build output" +msgstr "" + +#: build/models.py:1029 +#, python-brace-format +msgid "Selected stock item not found in BOM for part '{p}'" +msgstr "" + +#: build/models.py:1033 +#, python-brace-format +msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" +msgstr "" + +#: build/models.py:1040 order/models.py:758 +msgid "StockItem is over-allocated" +msgstr "" + +#: build/models.py:1044 order/models.py:761 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: build/models.py:1048 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1088 stock/templates/stock/item_base.html:306 +#: templates/InvenTree/search.html:183 templates/js/build.js:655 +#: templates/navbar.html:29 +msgid "Build" +msgstr "" + +#: build/models.py:1089 +msgid "Build to allocate parts" +msgstr "" + +#: build/models.py:1096 part/templates/part/allocation.html:18 +#: part/templates/part/allocation.html:24 +#: part/templates/part/allocation.html:31 +#: part/templates/part/allocation.html:49 +#: stock/templates/stock/item_base.html:8 +#: stock/templates/stock/item_base.html:93 +#: stock/templates/stock/item_base.html:328 +#: stock/templates/stock/stock_adjust.html:16 templates/js/build.js:771 +#: templates/js/stock.js:1004 templates/js/stock.js:1262 +msgid "Stock Item" +msgstr "" + +#: build/models.py:1097 +msgid "Source stock item" +msgstr "" + +#: build/models.py:1110 +msgid "Stock quantity to allocate to build" +msgstr "" + +#: build/models.py:1118 +msgid "Install into" +msgstr "" + +#: build/models.py:1119 +msgid "Destination stock item" +msgstr "" + +#: build/templates/build/allocate.html:7 +msgid "Allocate Parts" +msgstr "" + +#: build/templates/build/allocate.html:15 +msgid "Incomplete Build Ouputs" +msgstr "" + +#: build/templates/build/allocate.html:21 +msgid "Build order has been completed" +msgstr "" + +#: build/templates/build/allocate.html:26 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/allocate.html:27 +msgid "Create New Output" +msgstr "" + +#: build/templates/build/allocate.html:30 +msgid "Order required parts" +msgstr "" + +#: build/templates/build/allocate.html:31 +#: company/templates/company/detail_manufacturer_part.html:33 +#: company/templates/company/detail_supplier_part.html:32 order/views.py:794 +#: part/templates/part/category.html:127 +msgid "Order Parts" +msgstr "" + +#: build/templates/build/allocate.html:34 templates/js/build.js:590 +msgid "Unallocate stock" +msgstr "" + +#: build/templates/build/allocate.html:35 build/views.py:338 build/views.py:784 +msgid "Unallocate Stock" +msgstr "" + +#: build/templates/build/allocate.html:49 +msgid "Create a new build output" +msgstr "" + +#: build/templates/build/allocate.html:50 +msgid "No incomplete build outputs remain." +msgstr "" + +#: build/templates/build/allocate.html:51 +msgid "Create a new build output using the button above" +msgstr "" + +#: build/templates/build/attachments.html:12 +#: build/templates/build/navbar.html:49 build/templates/build/navbar.html:52 +#: order/templates/order/po_navbar.html:26 +#: order/templates/order/so_navbar.html:29 part/templates/part/navbar.html:119 +#: part/templates/part/navbar.html:122 stock/templates/stock/navbar.html:47 +#: stock/templates/stock/navbar.html:50 +msgid "Attachments" +msgstr "" + +#: build/templates/build/auto_allocate.html:9 +msgid "Automatically Allocate Stock" +msgstr "" + +#: build/templates/build/auto_allocate.html:10 +msgid "" +"The following stock items will be allocated to the specified build output" +msgstr "" + +#: build/templates/build/auto_allocate.html:37 +msgid "No stock items found that can be automatically allocated to this build" +msgstr "" + +#: build/templates/build/auto_allocate.html:39 +msgid "Stock items will have to be manually allocated" +msgstr "" + +#: build/templates/build/build_base.html:16 +#, python-format +msgid "This Build Order is allocated to Sales Order %(link)s" +msgstr "" + +#: build/templates/build/build_base.html:22 +#, python-format +msgid "This Build Order is a child of Build Order %(link)s" +msgstr "" + +#: build/templates/build/build_base.html:40 +#: company/templates/company/company_base.html:40 +#: company/templates/company/manufacturer_part_base.html:25 +#: company/templates/company/supplier_part_base.html:26 +#: order/templates/order/order_base.html:26 +#: order/templates/order/sales_order_base.html:35 +#: part/templates/part/category.html:18 part/templates/part/part_base.html:29 +#: stock/templates/stock/item_base.html:118 +#: stock/templates/stock/location.html:31 +msgid "Admin view" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: build/templates/build/build_base.html:111 +#: order/templates/order/order_base.html:32 +#: order/templates/order/order_base.html:86 +#: order/templates/order/sales_order_base.html:41 +#: order/templates/order/sales_order_base.html:86 +#: templates/js/table_filters.js:240 templates/js/table_filters.js:259 +#: templates/js/table_filters.js:276 +msgid "Overdue" +msgstr "" + +#: build/templates/build/build_base.html:55 +msgid "Print actions" +msgstr "" + +#: build/templates/build/build_base.html:59 +msgid "Print Build Order" +msgstr "" + +#: build/templates/build/build_base.html:65 +msgid "Build actions" +msgstr "" + +#: build/templates/build/build_base.html:69 +msgid "Edit Build" +msgstr "" + +#: build/templates/build/build_base.html:71 +#: build/templates/build/build_base.html:179 +msgid "Complete Build" +msgstr "" + +#: build/templates/build/build_base.html:72 +#: build/templates/build/build_base.html:170 build/views.py:57 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:85 +#: build/templates/build/detail.html:11 +msgid "Build Details" +msgstr "" + +#: build/templates/build/build_base.html:99 +#: build/templates/build/detail.html:59 order/models.py:445 +#: order/templates/order/receive_parts.html:24 +#: stock/templates/stock/item_base.html:392 templates/InvenTree/search.html:252 +#: templates/js/barcode.js:119 templates/js/build.js:710 +#: templates/js/order.js:187 templates/js/order.js:285 +#: templates/js/stock.js:628 templates/js/stock.js:1279 +msgid "Status" +msgstr "" + +#: build/templates/build/build_base.html:111 +#, python-format +msgid "This build was due on %(target)s" +msgstr "" + +#: build/templates/build/build_base.html:118 +#: build/templates/build/detail.html:64 +msgid "Progress" +msgstr "" + +#: build/templates/build/build_base.html:131 +#: build/templates/build/detail.html:84 order/models.py:667 +#: order/templates/order/sales_order_base.html:9 +#: order/templates/order/sales_order_base.html:33 +#: order/templates/order/sales_order_ship.html:25 +#: part/templates/part/allocation.html:30 +#: report/templates/report/inventree_build_order_base.html:136 +#: report/templates/report/inventree_so_report.html:77 +#: stock/templates/stock/item_base.html:268 templates/js/order.js:245 +msgid "Sales Order" +msgstr "" + +#: build/templates/build/build_base.html:138 +#: build/templates/build/detail.html:98 +#: report/templates/report/inventree_build_order_base.html:153 +msgid "Issued By" +msgstr "" + +#: build/templates/build/build_children.html:10 +#: build/templates/build/navbar.html:42 +msgid "Child Build Orders" +msgstr "" + +#: build/templates/build/build_output.html:10 +#: build/templates/build/navbar.html:35 build/templates/build/navbar.html:38 +msgid "Build Outputs" +msgstr "" + +#: build/templates/build/build_output_create.html:7 +msgid "The Bill of Materials contains trackable parts" +msgstr "" + +#: build/templates/build/build_output_create.html:8 +msgid "Build outputs must be generated individually." +msgstr "" + +#: build/templates/build/build_output_create.html:9 +msgid "Multiple build outputs will be created based on the quantity specified." +msgstr "" + +#: build/templates/build/build_output_create.html:15 +msgid "Trackable parts can have serial numbers specified" +msgstr "" + +#: build/templates/build/build_output_create.html:16 +msgid "Enter serial numbers to generate multiple single build outputs" +msgstr "" + +#: build/templates/build/cancel.html:5 +msgid "Are you sure you wish to cancel this build?" +msgstr "" + +#: build/templates/build/complete.html:8 +msgid "Build can be completed" +msgstr "" + +#: build/templates/build/complete.html:12 +msgid "Build cannot be completed" +msgstr "" + +#: build/templates/build/complete.html:15 +msgid "Incompleted build outputs remain" +msgstr "" + +#: build/templates/build/complete.html:18 +msgid "Required build quantity has not been completed" +msgstr "" + +#: build/templates/build/complete_output.html:9 +msgid "Stock allocation is complete" +msgstr "" + +#: build/templates/build/complete_output.html:13 +msgid "Stock allocation is incomplete" +msgstr "" + +#: build/templates/build/complete_output.html:19 +msgid "parts have not been fully allocated" +msgstr "" + +#: build/templates/build/complete_output.html:40 +msgid "The following items will be created" +msgstr "" + +#: build/templates/build/create_build_item.html:7 +msgid "Select a stock item to allocate to the selected build output" +msgstr "" + +#: build/templates/build/create_build_item.html:11 +#, python-format +msgid "" +"The allocated stock will be installed into the following build output:
    " +"%(output)s" +msgstr "" + +#: build/templates/build/create_build_item.html:17 +#, python-format +msgid "No stock available for %(part)s" +msgstr "" + +#: build/templates/build/delete_build_item.html:8 +msgid "Are you sure you want to unallocate this stock?" +msgstr "" + +#: build/templates/build/delete_build_item.html:11 +msgid "The selected stock will be unallocated from the build output" +msgstr "" + +#: build/templates/build/detail.html:35 +msgid "Stock Source" +msgstr "" + +#: build/templates/build/detail.html:40 +msgid "Stock can be taken from any available location." +msgstr "" + +#: build/templates/build/detail.html:46 stock/forms.py:169 stock/forms.py:375 +msgid "Destination" +msgstr "" + +#: build/templates/build/detail.html:53 +msgid "Destination location not specified" +msgstr "" + +#: build/templates/build/detail.html:70 +#: stock/templates/stock/item_base.html:292 templates/js/stock.js:636 +#: templates/js/stock.js:1286 templates/js/table_filters.js:107 +#: templates/js/table_filters.js:201 +msgid "Batch" +msgstr "" + +#: build/templates/build/detail.html:116 +#: order/templates/order/order_base.html:111 +#: order/templates/order/sales_order_base.html:111 templates/js/build.js:718 +msgid "Created" +msgstr "" + +#: build/templates/build/detail.html:127 +msgid "No target date set" +msgstr "" + +#: build/templates/build/detail.html:132 templates/js/build.js:696 +#: templates/js/build.js:728 +msgid "Completed" +msgstr "" + +#: build/templates/build/detail.html:136 +msgid "Build not complete" +msgstr "" + +#: build/templates/build/edit_build_item.html:7 +msgid "Alter the quantity of stock allocated to the build output" +msgstr "" + +#: build/templates/build/index.html:28 build/views.py:657 +msgid "New Build Order" +msgstr "" + +#: build/templates/build/index.html:37 build/templates/build/index.html:38 +msgid "Print Build Orders" +msgstr "" + +#: build/templates/build/index.html:43 +#: order/templates/order/purchase_orders.html:27 +#: order/templates/order/sales_orders.html:27 +msgid "Display calendar view" +msgstr "" + +#: build/templates/build/index.html:46 +#: order/templates/order/purchase_orders.html:30 +#: order/templates/order/sales_orders.html:30 +msgid "Display list view" +msgstr "" + +#: build/templates/build/navbar.html:12 +msgid "Build Order Details" +msgstr "" + +#: build/templates/build/navbar.html:15 +#: company/templates/company/navbar.html:15 +#: order/templates/order/po_navbar.html:14 +#: order/templates/order/so_navbar.html:15 part/templates/part/navbar.html:15 +msgid "Details" +msgstr "" + +#: build/templates/build/navbar.html:20 build/templates/build/navbar.html:23 +#: build/templates/build/parts.html:11 +msgid "Required Parts" +msgstr "" + +#: build/templates/build/navbar.html:27 build/templates/build/navbar.html:30 +msgid "In Progress" +msgstr "" + +#: build/templates/build/navbar.html:45 +msgid "Child Builds" +msgstr "" + +#: build/templates/build/navbar.html:56 +msgid "Build Order Notes" +msgstr "" + +#: build/templates/build/notes.html:12 +msgid "Build Notes" +msgstr "" + +#: build/templates/build/notes.html:14 company/templates/company/notes.html:13 +#: order/templates/order/order_notes.html:15 +#: order/templates/order/sales_order_notes.html:16 +#: part/templates/part/notes.html:14 stock/templates/stock/item_notes.html:15 +msgid "Edit notes" +msgstr "" + +#: build/templates/build/notes.html:26 company/templates/company/notes.html:24 +#: order/templates/order/order_notes.html:27 +#: order/templates/order/sales_order_notes.html:29 +#: part/templates/part/notes.html:27 stock/templates/stock/item_base.html:470 +#: stock/templates/stock/item_notes.html:26 +msgid "Save" +msgstr "" + +#: build/templates/build/unallocate.html:10 +msgid "Are you sure you wish to unallocate all stock for this build?" +msgstr "" + +#: build/templates/build/unallocate.html:12 +msgid "All incomplete stock allocations will be removed from the build" +msgstr "" + +#: build/views.py:77 +msgid "Build was cancelled" +msgstr "" + +#: build/views.py:91 +msgid "Allocate Stock" +msgstr "" + +#: build/views.py:154 build/views.py:314 build/views.py:485 +msgid "Build output must be specified" +msgstr "" + +#: build/views.py:168 +msgid "Allocated stock to build output" +msgstr "" + +#: build/views.py:180 +msgid "Create Build Output" +msgstr "" + +#: build/views.py:203 stock/models.py:969 stock/views.py:1789 +msgid "Serial numbers already exist" +msgstr "" + +#: build/views.py:212 +msgid "Serial numbers required for trackable build output" +msgstr "" + +#: build/views.py:278 +msgid "Delete Build Output" +msgstr "" + +#: build/views.py:299 build/views.py:383 +msgid "Confirm unallocation of build stock" +msgstr "" + +#: build/views.py:300 build/views.py:384 stock/views.py:425 +msgid "Check the confirmation box" +msgstr "" + +#: build/views.py:312 +msgid "Build output does not match build" +msgstr "" + +#: build/views.py:326 +msgid "Build output deleted" +msgstr "" + +#: build/views.py:408 +msgid "Complete Build Order" +msgstr "" + +#: build/views.py:414 +msgid "Build order cannot be completed" +msgstr "" + +#: build/views.py:425 +msgid "Completed build order" +msgstr "" + +#: build/views.py:441 +msgid "Complete Build Output" +msgstr "" + +#: build/views.py:476 +msgid "Quantity to complete cannot exceed build output quantity" +msgstr "" + +#: build/views.py:482 +msgid "Confirm completion of incomplete build" +msgstr "" + +#: build/views.py:573 +msgid "Build output completed" +msgstr "" + +#: build/views.py:711 +msgid "Created new build" +msgstr "" + +#: build/views.py:732 +msgid "Edit Build Order Details" +msgstr "" + +#: build/views.py:765 +msgid "Edited build" +msgstr "" + +#: build/views.py:774 +msgid "Delete Build Order" +msgstr "" + +#: build/views.py:789 +msgid "Removed parts from build allocation" +msgstr "" + +#: build/views.py:801 +msgid "Allocate stock to build output" +msgstr "" + +#: build/views.py:844 +msgid "Item must be currently in stock" +msgstr "" + +#: build/views.py:850 +msgid "Stock item is over-allocated" +msgstr "" + +#: build/views.py:851 templates/js/bom.js:230 templates/js/build.js:519 +#: templates/js/build.js:778 templates/js/build.js:961 +msgid "Available" +msgstr "" + +#: build/views.py:853 +msgid "Stock item must be selected" +msgstr "" + +#: build/views.py:1016 +msgid "Edit Stock Allocation" +msgstr "" + +#: build/views.py:1020 +msgid "Updated Build Item" +msgstr "" + +#: build/views.py:1049 +msgid "Add Build Order Attachment" +msgstr "" + +#: build/views.py:1062 order/views.py:110 order/views.py:162 part/views.py:172 +#: stock/views.py:277 +msgid "Added attachment" +msgstr "" + +#: build/views.py:1098 order/views.py:189 order/views.py:210 +msgid "Edit Attachment" +msgstr "" + +#: build/views.py:1108 order/views.py:193 order/views.py:214 +msgid "Attachment updated" +msgstr "" + +#: build/views.py:1118 order/views.py:229 order/views.py:243 +msgid "Delete Attachment" +msgstr "" + +#: build/views.py:1123 order/views.py:235 order/views.py:249 stock/views.py:333 +msgid "Deleted attachment" +msgstr "" + +#: common/models.py:56 +msgid "InvenTree Instance Name" +msgstr "" + +#: common/models.py:58 +msgid "String descriptor for the server instance" +msgstr "" + +#: common/models.py:62 +msgid "Use instance name" +msgstr "" + +#: common/models.py:63 +msgid "Use the instance name in the title-bar" +msgstr "" + +#: common/models.py:69 company/models.py:97 company/models.py:98 +msgid "Company name" +msgstr "" + +#: common/models.py:70 +msgid "Internal company name" +msgstr "" + +#: common/models.py:75 +msgid "Base URL" +msgstr "" + +#: common/models.py:76 +msgid "Base URL for server instance" +msgstr "" + +#: common/models.py:82 +msgid "Default Currency" +msgstr "" + +#: common/models.py:83 +msgid "Default currency" +msgstr "" + +#: common/models.py:89 +msgid "Download from URL" +msgstr "" + +#: common/models.py:90 +msgid "Allow download of remote images and files from external URL" +msgstr "" + +#: common/models.py:96 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:97 +msgid "Enable barcode scanner support" +msgstr "" + +#: common/models.py:103 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:104 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:108 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:109 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:115 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:116 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:122 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:123 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:129 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:130 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:136 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:137 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:143 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:144 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:150 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:151 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:157 part/models.py:2079 part/templates/part/detail.html:160 +#: report/models.py:185 stock/forms.py:259 templates/js/table_filters.js:24 +#: templates/js/table_filters.js:310 +msgid "Template" +msgstr "" + +#: common/models.py:158 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:164 part/models.py:834 part/templates/part/detail.html:170 +#: templates/js/table_filters.js:123 templates/js/table_filters.js:322 +msgid "Assembly" +msgstr "" + +#: common/models.py:165 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:171 part/models.py:840 part/templates/part/detail.html:180 +#: templates/js/table_filters.js:326 +msgid "Component" +msgstr "" + +#: common/models.py:172 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:178 part/models.py:851 part/templates/part/detail.html:200 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:179 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:185 part/models.py:856 part/templates/part/detail.html:210 +#: templates/js/table_filters.js:334 +msgid "Salable" +msgstr "" + +#: common/models.py:186 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:192 part/models.py:846 part/templates/part/detail.html:190 +#: templates/js/table_filters.js:32 templates/js/table_filters.js:338 +msgid "Trackable" +msgstr "" + +#: common/models.py:193 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:199 part/models.py:866 part/templates/part/detail.html:150 +#: templates/js/table_filters.js:28 +msgid "Virtual" +msgstr "" + +#: common/models.py:200 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:206 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:207 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:213 +msgid "Debug Mode" +msgstr "" + +#: common/models.py:214 +msgid "Generate reports in debug mode (HTML output)" +msgstr "" + +#: common/models.py:220 +msgid "Page Size" +msgstr "" + +#: common/models.py:221 +msgid "Default page size for PDF reports" +msgstr "" + +#: common/models.py:231 +msgid "Test Reports" +msgstr "" + +#: common/models.py:232 +msgid "Enable generation of test reports" +msgstr "" + +#: common/models.py:238 +msgid "Stock Expiry" +msgstr "" + +#: common/models.py:239 +msgid "Enable stock expiry functionality" +msgstr "" + +#: common/models.py:245 +msgid "Sell Expired Stock" +msgstr "" + +#: common/models.py:246 +msgid "Allow sale of expired stock" +msgstr "" + +#: common/models.py:252 +msgid "Stock Stale Time" +msgstr "" + +#: common/models.py:253 +msgid "Number of days stock items are considered stale before expiring" +msgstr "" + +#: common/models.py:255 part/templates/part/detail.html:121 +msgid "days" +msgstr "" + +#: common/models.py:260 +msgid "Build Expired Stock" +msgstr "" + +#: common/models.py:261 +msgid "Allow building with expired stock" +msgstr "" + +#: common/models.py:267 +msgid "Stock Ownership Control" +msgstr "" + +#: common/models.py:268 +msgid "Enable ownership control over stock locations and items" +msgstr "" + +#: common/models.py:274 +msgid "Group by Part" +msgstr "" + +#: common/models.py:275 +msgid "Group stock items by part reference in table views" +msgstr "" + +#: common/models.py:281 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:282 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:288 +msgid "Build Order Reference Prefix" +msgstr "" + +#: common/models.py:289 +msgid "Prefix value for build order reference" +msgstr "" + +#: common/models.py:294 +msgid "Build Order Reference Regex" +msgstr "" + +#: common/models.py:295 +msgid "Regular expression pattern for matching build order reference" +msgstr "" + +#: common/models.py:299 +msgid "Sales Order Reference Prefix" +msgstr "" + +#: common/models.py:300 +msgid "Prefix value for sales order reference" +msgstr "" + +#: common/models.py:305 +msgid "Purchase Order Reference Prefix" +msgstr "" + +#: common/models.py:306 +msgid "Prefix value for purchase order reference" +msgstr "" + +#: common/models.py:529 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:531 +msgid "Settings value" +msgstr "" + +#: common/models.py:566 +msgid "Must be an integer value" +msgstr "" + +#: common/models.py:589 +msgid "Value must be a boolean value" +msgstr "" + +#: common/models.py:600 +msgid "Value must be an integer value" +msgstr "" + +#: common/models.py:623 +msgid "Key string must be unique" +msgstr "" + +#: common/models.py:704 company/forms.py:177 +msgid "Price break quantity" +msgstr "" + +#: common/models.py:712 company/templates/company/supplier_part_pricing.html:82 +#: part/templates/part/sale_prices.html:90 templates/js/bom.js:255 +msgid "Price" +msgstr "" + +#: common/models.py:713 +msgid "Unit price at specified quantity" +msgstr "" + +#: common/models.py:736 +msgid "Default" +msgstr "" + +#: common/templates/common/edit_setting.html:11 +msgid "Current value" +msgstr "" + +#: common/views.py:25 +msgid "Change Setting" +msgstr "" + +#: common/views.py:94 +msgid "Supplied value is not allowed" +msgstr "" + +#: common/views.py:103 +msgid "Supplied value must be a boolean" +msgstr "" + +#: company/forms.py:38 company/models.py:145 +#: company/templates/company/detail.html:42 +msgid "Currency" +msgstr "" + +#: company/forms.py:39 company/models.py:147 +msgid "Default currency used for this company" +msgstr "" + +#: company/forms.py:77 part/forms.py:46 +msgid "URL" +msgstr "" + +#: company/forms.py:78 part/forms.py:47 +msgid "Image URL" +msgstr "" + +#: company/forms.py:118 +msgid "Single Price" +msgstr "" + +#: company/forms.py:120 +msgid "Single quantity price" +msgstr "" + +#: company/forms.py:128 company/models.py:324 +msgid "Select manufacturer" +msgstr "" + +#: company/forms.py:134 company/models.py:331 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/forms.py:136 company/models.py:330 +#: company/templates/company/manufacturer_part_base.html:89 +#: company/templates/company/manufacturer_part_detail.html:26 +#: company/templates/company/supplier_part_base.html:101 +#: company/templates/company/supplier_part_detail.html:35 +#: order/templates/order/purchase_order_detail.html:183 part/bom.py:171 +#: part/bom.py:242 templates/js/company.js:181 templates/js/company.js:307 +msgid "MPN" +msgstr "" + +#: company/models.py:102 +msgid "Company description" +msgstr "" + +#: company/models.py:103 +msgid "Description of the company" +msgstr "" + +#: company/models.py:107 company/templates/company/company_base.html:70 +#: company/templates/company/detail.html:33 templates/js/company.js:60 +msgid "Website" +msgstr "" + +#: company/models.py:107 +msgid "Company website URL" +msgstr "" + +#: company/models.py:110 company/templates/company/company_base.html:77 +msgid "Address" +msgstr "" + +#: company/models.py:111 +msgid "Company address" +msgstr "" + +#: company/models.py:114 +msgid "Phone number" +msgstr "" + +#: company/models.py:115 +msgid "Contact phone number" +msgstr "" + +#: company/models.py:118 company/templates/company/company_base.html:91 +msgid "Email" +msgstr "" + +#: company/models.py:118 +msgid "Contact email address" +msgstr "" + +#: company/models.py:121 company/templates/company/company_base.html:98 +msgid "Contact" +msgstr "" + +#: company/models.py:122 +msgid "Point of contact" +msgstr "" + +#: company/models.py:124 company/models.py:336 company/models.py:488 +#: order/models.py:103 part/models.py:743 +#: report/templates/report/inventree_build_order_base.html:165 +#: stock/models.py:1560 templates/js/company.js:188 templates/js/company.js:318 +#: templates/js/part.js:431 +msgid "Link" +msgstr "" + +#: company/models.py:124 +msgid "Link to external company information" +msgstr "" + +#: company/models.py:132 part/models.py:753 +msgid "Image" +msgstr "" + +#: company/models.py:137 +msgid "is customer" +msgstr "" + +#: company/models.py:137 +msgid "Do you sell items to this company?" +msgstr "" + +#: company/models.py:139 +msgid "is supplier" +msgstr "" + +#: company/models.py:139 +msgid "Do you purchase items from this company?" +msgstr "" + +#: company/models.py:141 +msgid "is manufacturer" +msgstr "" + +#: company/models.py:141 +msgid "Does this company manufacture parts?" +msgstr "" + +#: company/models.py:308 company/models.py:459 stock/models.py:373 +#: stock/templates/stock/item_base.html:224 +msgid "Base Part" +msgstr "" + +#: company/models.py:312 company/models.py:463 order/views.py:1372 +msgid "Select part" +msgstr "" + +#: company/models.py:323 company/templates/company/detail.html:57 +#: company/templates/company/manufacturer_part_base.html:85 +#: company/templates/company/manufacturer_part_detail.html:25 +#: company/templates/company/supplier_part_base.html:94 +#: company/templates/company/supplier_part_detail.html:34 part/bom.py:170 +#: part/bom.py:241 stock/templates/stock/item_base.html:341 +#: templates/js/company.js:44 templates/js/company.js:165 +#: templates/js/company.js:289 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:337 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:343 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:469 company/templates/company/detail.html:62 +#: company/templates/company/supplier_part_base.html:84 +#: company/templates/company/supplier_part_detail.html:25 order/models.py:190 +#: order/templates/order/order_base.html:92 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:175 +#: part/bom.py:286 stock/templates/stock/item_base.html:353 +#: templates/js/company.js:48 templates/js/company.js:263 +#: templates/js/order.js:170 +msgid "Supplier" +msgstr "" + +#: company/models.py:470 +msgid "Select supplier" +msgstr "" + +#: company/models.py:475 company/templates/company/supplier_part_base.html:88 +#: company/templates/company/supplier_part_detail.html:26 +#: order/templates/order/purchase_order_detail.html:174 part/bom.py:176 +#: part/bom.py:287 +msgid "SKU" +msgstr "" + +#: company/models.py:476 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:482 +#: company/templates/company/manufacturer_part_base.html:6 +#: company/templates/company/manufacturer_part_base.html:19 +#: stock/templates/stock/item_base.html:346 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:483 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:489 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:495 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:500 company/templates/company/supplier_part_base.html:115 +#: company/templates/company/supplier_part_detail.html:38 part/models.py:2190 +#: report/templates/report/inventree_po_report.html:93 +#: report/templates/report/inventree_so_report.html:93 +msgid "Note" +msgstr "" + +#: company/models.py:504 +msgid "base cost" +msgstr "" + +#: company/models.py:504 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:506 company/templates/company/supplier_part_base.html:108 +#: stock/models.py:397 stock/templates/stock/item_base.html:299 +#: templates/js/stock.js:667 +msgid "Packaging" +msgstr "" + +#: company/models.py:506 +msgid "Part packaging" +msgstr "" + +#: company/models.py:508 +msgid "multiple" +msgstr "" + +#: company/models.py:508 +msgid "Order multiple" +msgstr "" + +#: company/templates/company/assigned_stock.html:10 +#: company/templates/company/navbar.html:62 +#: company/templates/company/navbar.html:65 templates/js/build.js:411 +msgid "Assigned Stock" +msgstr "" + +#: company/templates/company/company_base.html:9 +#: company/templates/company/company_base.html:35 +#: templates/InvenTree/search.html:304 templates/js/company.js:33 +msgid "Company" +msgstr "" + +#: company/templates/company/company_base.html:25 +#: part/templates/part/part_thumb.html:21 +msgid "Upload new image" +msgstr "" + +#: company/templates/company/company_base.html:27 +#: part/templates/part/part_thumb.html:23 +msgid "Download image from URL" +msgstr "" + +#: company/templates/company/company_base.html:46 order/views.py:306 +msgid "Create Purchase Order" +msgstr "" + +#: company/templates/company/company_base.html:51 +msgid "Edit company information" +msgstr "" + +#: company/templates/company/company_base.html:56 company/views.py:326 +msgid "Delete Company" +msgstr "" + +#: company/templates/company/company_base.html:64 +#: company/templates/company/detail.html:10 +#: company/templates/company/navbar.html:12 +msgid "Company Details" +msgstr "" + +#: company/templates/company/company_base.html:84 +msgid "Phone" +msgstr "" + +#: company/templates/company/delete.html:7 +#, python-format +msgid "Are you sure you want to delete company '%(name)s'?" +msgstr "" + +#: company/templates/company/delete.html:12 +#, python-format +msgid "" +"There are %(count)s parts sourced from this company.
    \n" +"If this supplier is deleted, these supplier part entries will also be " +"deleted." +msgstr "" + +#: company/templates/company/detail.html:21 +msgid "Company Name" +msgstr "" + +#: company/templates/company/detail.html:36 +msgid "No website specified" +msgstr "" + +#: company/templates/company/detail.html:45 +msgid "Uses default currency" +msgstr "" + +#: company/templates/company/detail.html:67 order/models.py:440 +#: order/templates/order/sales_order_base.html:92 stock/models.py:415 +#: stock/models.py:416 stock/templates/stock/item_base.html:251 +#: templates/js/company.js:40 templates/js/order.js:267 +msgid "Customer" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:11 +#: templates/InvenTree/search.html:149 +msgid "Manufacturer Parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:22 +msgid "Create new manufacturer part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:23 +#: part/templates/part/manufacturer.html:19 +msgid "New Manufacturer Part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:28 +#: company/templates/company/detail_supplier_part.html:27 +#: company/templates/company/manufacturer_part_suppliers.html:20 +#: part/templates/part/category.html:122 +#: part/templates/part/manufacturer.html:22 +#: part/templates/part/supplier.html:20 +msgid "Options" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:33 +#: company/templates/company/detail_supplier_part.html:32 +#: part/templates/part/category.html:127 +msgid "Order parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:36 +#: company/templates/company/detail_supplier_part.html:35 +msgid "Delete parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:36 +#: company/templates/company/detail_supplier_part.html:35 +msgid "Delete Parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:66 +#: company/templates/company/detail_supplier_part.html:66 +#: part/templates/part/bom.html:159 part/templates/part/category.html:118 +#: templates/js/stock.js:1157 +msgid "New Part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:67 +#: company/templates/company/detail_supplier_part.html:67 +msgid "Create new Part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:72 +#: company/views.py:71 part/templates/part/manufacturer.html:52 +#: part/templates/part/supplier.html:56 +msgid "New Manufacturer" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:73 +#: company/views.py:284 +msgid "Create new Manufacturer" +msgstr "" + +#: company/templates/company/detail_stock.html:10 +msgid "Supplier Stock" +msgstr "" + +#: company/templates/company/detail_stock.html:37 +#: company/templates/company/supplier_part_stock.html:34 +#: part/templates/part/category.html:114 part/templates/part/category.html:128 +#: part/templates/part/stock.html:54 stock/templates/stock/location.html:163 +msgid "Export" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:11 +#: company/templates/company/manufacturer_part_navbar.html:11 +#: company/templates/company/manufacturer_part_suppliers.html:10 +#: templates/InvenTree/search.html:164 +msgid "Supplier Parts" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:21 +#: order/templates/order/order_wizard/select_parts.html:42 +#: order/templates/order/purchase_order_detail.html:75 +msgid "Create new supplier part" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:22 +#: company/templates/company/manufacturer_part_suppliers.html:17 +#: order/templates/order/purchase_order_detail.html:74 +#: part/templates/part/supplier.html:17 templates/js/stock.js:1163 +msgid "New Supplier Part" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:72 +#: company/templates/company/manufacturer_part_suppliers.html:47 +#: company/views.py:64 order/templates/order/purchase_orders.html:183 +#: part/templates/part/supplier.html:50 +msgid "New Supplier" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:73 company/views.py:281 +#: order/templates/order/purchase_orders.html:184 +msgid "Create new Supplier" +msgstr "" + +#: company/templates/company/index.html:8 +msgid "Supplier List" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:36 +#: company/templates/company/supplier_part_base.html:36 +#: company/templates/company/supplier_part_orders.html:17 +#: part/templates/part/orders.html:17 part/templates/part/part_base.html:65 +msgid "Order part" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:41 +msgid "Edit manufacturer part" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:45 +msgid "Delete manufacturer part" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:57 +#: company/templates/company/manufacturer_part_detail.html:10 +msgid "Manufacturer Part Details" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:62 +#: company/templates/company/manufacturer_part_detail.html:18 +#: company/templates/company/supplier_part_base.html:61 +#: company/templates/company/supplier_part_detail.html:18 +msgid "Internal Part" +msgstr "" + +#: company/templates/company/manufacturer_part_delete.html:6 +msgid "Are you sure you want to delete the following Manufacturer Parts?" +msgstr "" + +#: company/templates/company/manufacturer_part_delete.html:36 +#, python-format +msgid "" +"There are %(count)s suppliers defined for this manufacturer part. If you " +"delete it, the following supplier parts will also be deleted:" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:14 +#: company/views.py:63 part/templates/part/navbar.html:78 +#: part/templates/part/navbar.html:81 templates/InvenTree/search.html:316 +#: templates/navbar.html:35 +msgid "Suppliers" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:19 +msgid "Manufacturer Part Stock" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:22 +#: company/templates/company/navbar.html:41 +#: company/templates/company/supplier_part_navbar.html:15 +#: part/templates/part/navbar.html:36 stock/api.py:51 +#: stock/templates/stock/loc_link.html:7 stock/templates/stock/location.html:36 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/index.html:128 templates/InvenTree/search.html:196 +#: templates/InvenTree/search.html:232 +#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:173 +#: templates/js/part.js:398 templates/js/stock.js:563 templates/navbar.html:26 +msgid "Stock" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:26 +msgid "Manufacturer Part Orders" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:29 +#: company/templates/company/supplier_part_navbar.html:22 +msgid "Orders" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:22 +#: part/templates/part/supplier.html:22 +msgid "Delete supplier parts" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:22 +#: part/templates/part/manufacturer.html:24 part/templates/part/params.html:44 +#: part/templates/part/related.html:44 part/templates/part/supplier.html:22 +#: stock/views.py:1002 users/models.py:184 +msgid "Delete" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:48 +#: part/templates/part/supplier.html:51 +msgid "Create new supplier" +msgstr "" + +#: company/templates/company/navbar.html:20 +#: company/templates/company/navbar.html:23 +msgid "Manufactured Parts" +msgstr "" + +#: company/templates/company/navbar.html:29 +#: company/templates/company/navbar.html:32 +msgid "Supplied Parts" +msgstr "" + +#: company/templates/company/navbar.html:38 part/templates/part/navbar.html:33 +#: stock/templates/stock/location.html:107 +#: stock/templates/stock/location.html:122 +#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location_navbar.html:22 +#: stock/templates/stock/location_navbar.html:29 +#: templates/InvenTree/search.html:198 templates/js/stock.js:968 +#: templates/stats.html:72 templates/stats.html:81 users/models.py:40 +msgid "Stock Items" +msgstr "" + +#: company/templates/company/navbar.html:47 +#: company/templates/company/navbar.html:56 +#: company/templates/company/navbar.html:59 +#: company/templates/company/sales_orders.html:11 +#: order/templates/order/sales_orders.html:8 +#: order/templates/order/sales_orders.html:13 +#: part/templates/part/navbar.html:98 part/templates/part/navbar.html:101 +#: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:228 +#: templates/InvenTree/search.html:345 +#: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46 +#: users/models.py:43 +msgid "Sales Orders" +msgstr "" + +#: company/templates/company/navbar.html:50 +#: company/templates/company/purchase_orders.html:10 +#: order/templates/order/purchase_orders.html:8 +#: order/templates/order/purchase_orders.html:13 +#: part/templates/part/navbar.html:84 part/templates/part/navbar.html:87 +#: part/templates/part/orders.html:10 templates/InvenTree/index.html:205 +#: templates/InvenTree/search.html:325 +#: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37 +#: users/models.py:42 +msgid "Purchase Orders" +msgstr "" + +#: company/templates/company/notes.html:11 +msgid "Company Notes" +msgstr "" + +#: company/templates/company/purchase_orders.html:18 +#: order/templates/order/purchase_orders.html:20 +msgid "Create new purchase order" +msgstr "" + +#: company/templates/company/purchase_orders.html:19 +#: order/templates/order/purchase_orders.html:21 +msgid "New Purchase Order" +msgstr "" + +#: company/templates/company/sales_orders.html:19 +#: order/templates/order/sales_orders.html:20 +msgid "Create new sales order" +msgstr "" + +#: company/templates/company/sales_orders.html:20 +#: order/templates/order/sales_orders.html:21 +msgid "New Sales Order" +msgstr "" + +#: company/templates/company/supplier_part_base.html:7 +#: company/templates/company/supplier_part_base.html:20 stock/models.py:382 +#: stock/templates/stock/item_base.html:358 templates/js/company.js:279 +msgid "Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part_base.html:40 +msgid "Edit supplier part" +msgstr "" + +#: company/templates/company/supplier_part_base.html:44 +msgid "Delete supplier part" +msgstr "" + +#: company/templates/company/supplier_part_base.html:56 +#: company/templates/company/supplier_part_detail.html:10 +msgid "Supplier Part Details" +msgstr "" + +#: company/templates/company/supplier_part_delete.html:5 +msgid "Are you sure you want to delete the following Supplier Parts?" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part_stock.html:10 +msgid "Supplier Part Stock" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part_orders.html:10 +msgid "Supplier Part Orders" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:26 +msgid "Supplier Part Pricing" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:29 +msgid "Pricing" +msgstr "" + +#: company/templates/company/supplier_part_orders.html:18 +#: part/templates/part/orders.html:18 +msgid "Order Part" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:11 +msgid "Pricing Information" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:19 company/views.py:794 +#: part/templates/part/sale_prices.html:17 part/views.py:2624 +msgid "Add Price Break" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:38 +#: part/templates/part/sale_prices.html:46 +msgid "No price break information found" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:89 +#: part/templates/part/sale_prices.html:97 +msgid "Edit price break" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:90 +#: part/templates/part/sale_prices.html:98 +msgid "Delete price break" +msgstr "" + +#: company/views.py:70 part/templates/part/navbar.html:72 +#: part/templates/part/navbar.html:75 templates/InvenTree/search.html:306 +#: templates/navbar.html:36 +msgid "Manufacturers" +msgstr "" + +#: company/views.py:77 templates/InvenTree/search.html:336 +#: templates/navbar.html:45 +msgid "Customers" +msgstr "" + +#: company/views.py:78 order/templates/order/sales_orders.html:185 +msgid "New Customer" +msgstr "" + +#: company/views.py:86 +msgid "Companies" +msgstr "" + +#: company/views.py:87 +msgid "New Company" +msgstr "" + +#: company/views.py:169 part/views.py:848 +msgid "Download Image" +msgstr "" + +#: company/views.py:198 part/views.py:880 +msgid "Image size exceeds maximum allowable size for download" +msgstr "" + +#: company/views.py:214 part/views.py:896 +msgid "Supplied URL is not a valid image file" +msgstr "" + +#: company/views.py:243 +msgid "Update Company Image" +msgstr "" + +#: company/views.py:249 +msgid "Updated company image" +msgstr "" + +#: company/views.py:259 +msgid "Edit Company" +msgstr "" + +#: company/views.py:264 +msgid "Edited company information" +msgstr "" + +#: company/views.py:287 order/templates/order/sales_orders.html:186 +msgid "Create new Customer" +msgstr "" + +#: company/views.py:289 +msgid "Create new Company" +msgstr "" + +#: company/views.py:316 +msgid "Created new company" +msgstr "" + +#: company/views.py:332 +msgid "Company was deleted" +msgstr "" + +#: company/views.py:357 +msgid "Edit Manufacturer Part" +msgstr "" + +#: company/views.py:366 +msgid "Create New Manufacturer Part" +msgstr "" + +#: company/views.py:440 +msgid "Delete Manufacturer Part" +msgstr "" + +#: company/views.py:528 +msgid "Edit Supplier Part" +msgstr "" + +#: company/views.py:578 templates/js/stock.js:1164 +msgid "Create new Supplier Part" +msgstr "" + +#: company/views.py:722 +msgid "Delete Supplier Part" +msgstr "" + +#: company/views.py:799 part/views.py:2628 +msgid "Added new price break" +msgstr "" + +#: company/views.py:855 part/views.py:2672 +msgid "Edit Price Break" +msgstr "" + +#: company/views.py:870 part/views.py:2686 +msgid "Delete Price Break" +msgstr "" + +#: label/api.py:56 report/api.py:201 +msgid "No valid objects provided to template" +msgstr "" + +#: label/models.py:102 +msgid "Label name" +msgstr "" + +#: label/models.py:109 +msgid "Label description" +msgstr "" + +#: label/models.py:116 stock/forms.py:202 +msgid "Label" +msgstr "" + +#: label/models.py:117 +msgid "Label template file" +msgstr "" + +#: label/models.py:123 report/models.py:274 +msgid "Enabled" +msgstr "" + +#: label/models.py:124 +msgid "Label template is enabled" +msgstr "" + +#: label/models.py:129 +msgid "Width [mm]" +msgstr "" + +#: label/models.py:130 +msgid "Label width, specified in mm" +msgstr "" + +#: label/models.py:136 +msgid "Height [mm]" +msgstr "" + +#: label/models.py:137 +msgid "Label height, specified in mm" +msgstr "" + +#: label/models.py:222 label/models.py:275 +msgid "Query filters (comma-separated list of key=value pairs" +msgstr "" + +#: label/models.py:223 label/models.py:276 report/models.py:294 +#: report/models.py:415 report/models.py:449 +msgid "Filters" +msgstr "" + +#: order/forms.py:27 order/templates/order/order_base.html:47 +msgid "Place order" +msgstr "" + +#: order/forms.py:38 order/templates/order/order_base.html:54 +msgid "Mark order as complete" +msgstr "" + +#: order/forms.py:49 order/forms.py:60 order/templates/order/order_base.html:59 +#: order/templates/order/sales_order_base.html:59 +msgid "Cancel order" +msgstr "" + +#: order/forms.py:71 order/templates/order/sales_order_base.html:56 +msgid "Ship order" +msgstr "" + +#: order/forms.py:82 +msgid "Receive parts to this location" +msgstr "" + +#: order/forms.py:103 +msgid "Purchase Order reference" +msgstr "" + +#: order/forms.py:110 +msgid "Target date for order delivery. Order will be overdue after this date." +msgstr "" + +#: order/forms.py:138 +msgid "Enter sales order number" +msgstr "" + +#: order/forms.py:145 order/models.py:452 +msgid "" +"Target date for order completion. Order will be overdue after this date." +msgstr "" + +#: order/forms.py:235 +msgid "Enter stock item serial numbers" +msgstr "" + +#: order/forms.py:241 +msgid "Enter quantity of stock items" +msgstr "" + +#: order/models.py:99 +msgid "Order reference" +msgstr "" + +#: order/models.py:101 +msgid "Order description" +msgstr "" + +#: order/models.py:103 +msgid "Link to external page" +msgstr "" + +#: order/models.py:111 part/templates/part/detail.html:132 +msgid "Created By" +msgstr "" + +#: order/models.py:118 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:123 +msgid "Order notes" +msgstr "" + +#: order/models.py:182 order/models.py:445 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:191 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:194 order/templates/order/order_base.html:98 +#: templates/js/order.js:179 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:194 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:201 +msgid "received by" +msgstr "" + +#: order/models.py:206 +msgid "Issue Date" +msgstr "" + +#: order/models.py:207 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:212 +msgid "Target Delivery Date" +msgstr "" + +#: order/models.py:213 +msgid "" +"Expected date for order delivery. Order will be overdue after this date." +msgstr "" + +#: order/models.py:219 +msgid "Date order was completed" +msgstr "" + +#: order/models.py:243 order/models.py:342 part/views.py:1586 +#: stock/models.py:270 stock/models.py:953 +msgid "Quantity must be greater than zero" +msgstr "" + +#: order/models.py:248 +msgid "Part supplier must match PO supplier" +msgstr "" + +#: order/models.py:337 +msgid "Lines can only be received against an order marked as 'Placed'" +msgstr "" + +#: order/models.py:359 +msgid "Received items" +msgstr "" + +#: order/models.py:441 +msgid "Company to which the items are being sold" +msgstr "" + +#: order/models.py:447 +msgid "Customer Reference " +msgstr "" + +#: order/models.py:447 +msgid "Customer order reference code" +msgstr "" + +#: order/models.py:455 templates/js/order.js:303 +msgid "Shipment Date" +msgstr "" + +#: order/models.py:462 +msgid "shipped by" +msgstr "" + +#: order/models.py:506 +msgid "SalesOrder cannot be shipped as it is not currently pending" +msgstr "" + +#: order/models.py:593 +msgid "Item quantity" +msgstr "" + +#: order/models.py:595 +msgid "Line item reference" +msgstr "" + +#: order/models.py:597 +msgid "Line item notes" +msgstr "" + +#: order/models.py:623 order/models.py:667 +#: part/templates/part/allocation.html:17 +#: part/templates/part/allocation.html:45 +msgid "Order" +msgstr "" + +#: order/models.py:624 order/templates/order/order_base.html:9 +#: order/templates/order/order_base.html:24 +#: report/templates/report/inventree_po_report.html:77 +#: stock/templates/stock/item_base.html:313 templates/js/order.js:148 +msgid "Purchase Order" +msgstr "" + +#: order/models.py:638 +msgid "Supplier part" +msgstr "" + +#: order/models.py:641 order/templates/order/order_base.html:131 +#: order/templates/order/purchase_order_detail.html:214 +#: order/templates/order/receive_parts.html:22 +#: order/templates/order/sales_order_base.html:131 +msgid "Received" +msgstr "" + +#: order/models.py:641 +msgid "Number of items received" +msgstr "" + +#: order/models.py:648 stock/models.py:508 +#: stock/templates/stock/item_base.html:320 +msgid "Purchase Price" +msgstr "" + +#: order/models.py:649 +msgid "Unit purchase price" +msgstr "" + +#: order/models.py:743 order/models.py:745 +msgid "Stock item has not been assigned" +msgstr "" + +#: order/models.py:749 +msgid "Cannot allocate stock item to a line with a different part" +msgstr "" + +#: order/models.py:751 +msgid "Cannot allocate stock to a line without a part" +msgstr "" + +#: order/models.py:754 +msgid "Allocation quantity cannot exceed stock quantity" +msgstr "" + +#: order/models.py:764 +msgid "Quantity must be 1 for serialized stock item" +msgstr "" + +#: order/models.py:769 +msgid "Line" +msgstr "" + +#: order/models.py:780 +msgid "Item" +msgstr "" + +#: order/models.py:781 +msgid "Select stock item to allocate" +msgstr "" + +#: order/models.py:784 +msgid "Enter stock allocation quantity" +msgstr "" + +#: order/templates/order/delete_attachment.html:5 +#: stock/templates/stock/attachment_delete.html:5 +#: templates/attachment_delete.html:5 +msgid "Are you sure you want to delete this attachment?" +msgstr "" + +#: order/templates/order/order_base.html:39 +#: order/templates/order/sales_order_base.html:48 +msgid "Print" +msgstr "" + +#: order/templates/order/order_base.html:43 +#: order/templates/order/sales_order_base.html:52 +msgid "Edit order information" +msgstr "" + +#: order/templates/order/order_base.html:51 +msgid "Receive items" +msgstr "" + +#: order/templates/order/order_base.html:64 +msgid "Export order to file" +msgstr "" + +#: order/templates/order/order_base.html:72 +#: order/templates/order/po_navbar.html:11 +msgid "Purchase Order Details" +msgstr "" + +#: order/templates/order/order_base.html:77 +#: order/templates/order/sales_order_base.html:77 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:82 +#: order/templates/order/sales_order_base.html:82 +msgid "Order Status" +msgstr "" + +#: order/templates/order/order_base.html:117 +#: report/templates/report/inventree_build_order_base.html:122 +msgid "Issued" +msgstr "" + +#: order/templates/order/order_cancel.html:7 +#: order/templates/order/sales_order_cancel.html:9 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: order/templates/order/order_complete.html:7 +msgid "Mark this order as complete?" +msgstr "" + +#: order/templates/order/order_complete.html:10 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: order/templates/order/order_complete.html:11 +msgid "Marking this order as complete will remove these line items." +msgstr "" + +#: order/templates/order/order_issue.html:7 +msgid "" +"After placing this purchase order, line items will no longer be editable." +msgstr "" + +#: order/templates/order/order_notes.html:13 +msgid "Order Notes" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:9 +msgid "Step 1 of 2 - Select Part Suppliers" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:14 +msgid "Select suppliers" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:18 +msgid "No purchaseable parts selected" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:31 +msgid "Select Supplier" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:57 +#, python-format +msgid "Select a supplier for %(name)s" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:69 +#: part/templates/part/set_category.html:32 +msgid "Remove part" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:8 +msgid "Step 2 of 2 - Select Purchase Orders" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:12 +msgid "Select existing purchase orders, or create new orders." +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:31 +#: templates/js/order.js:205 templates/js/order.js:308 +msgid "Items" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:32 +msgid "Select Purchase Order" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:45 +#, python-format +msgid "Create new purchase order for %(name)s" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:68 +#, python-format +msgid "Select a purchase order for %(name)s" +msgstr "" + +#: order/templates/order/po_attachments.html:12 +#: order/templates/order/po_navbar.html:23 +msgid "Purchase Order Attachments" +msgstr "" + +#: order/templates/order/po_navbar.html:17 +msgid "Received Stock Items" +msgstr "" + +#: order/templates/order/po_navbar.html:20 +#: order/templates/order/po_received_items.html:12 +msgid "Received Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:14 +msgid "Purchase Order Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:24 +#: order/templates/order/sales_order_detail.html:22 order/views.py:1108 +#: order/views.py:1191 +msgid "Add Line Item" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:125 +#: part/templates/part/category.html:185 part/templates/part/category.html:227 +#: stock/templates/stock/location.html:191 templates/js/stock.js:708 +#: templates/js/stock.js:1169 +msgid "New Location" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:46 +#: order/templates/order/purchase_order_detail.html:126 +#: stock/templates/stock/location.html:42 +msgid "Create new stock location" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:139 +msgid "No line items found" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:205 +msgid "Unit Price" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:246 +#: order/templates/order/sales_order_detail.html:294 +msgid "Edit line item" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:247 +msgid "Delete line item" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:252 +msgid "Receive line item" +msgstr "" + +#: order/templates/order/purchase_orders.html:24 +#: order/templates/order/sales_orders.html:24 +msgid "Print Order Reports" +msgstr "" + +#: order/templates/order/receive_parts.html:8 +#, python-format +msgid "Receive outstanding parts for %(order)s - %(desc)s" +msgstr "" + +#: order/templates/order/receive_parts.html:14 part/api.py:40 +#: part/models.py:322 part/templates/part/cat_link.html:7 +#: part/templates/part/category.html:99 +#: part/templates/part/category_navbar.html:22 +#: part/templates/part/category_navbar.html:29 +#: part/templates/part/category_partlist.html:10 +#: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114 +#: templates/InvenTree/settings/tabs.html:25 templates/js/part.js:577 +#: templates/navbar.html:23 templates/stats.html:59 templates/stats.html:68 +#: users/models.py:38 +msgid "Parts" +msgstr "" + +#: order/templates/order/receive_parts.html:15 +msgid "Select parts to receive against this order" +msgstr "" + +#: order/templates/order/receive_parts.html:20 +msgid "Order Code" +msgstr "" + +#: order/templates/order/receive_parts.html:21 +#: part/templates/part/part_base.html:129 templates/js/part.js:414 +msgid "On Order" +msgstr "" + +#: order/templates/order/receive_parts.html:23 +msgid "Receive" +msgstr "" + +#: order/templates/order/receive_parts.html:36 +msgid "Error: Referenced part has been removed" +msgstr "" + +#: order/templates/order/receive_parts.html:57 +msgid "Remove line" +msgstr "" + +#: order/templates/order/sales_order_base.html:15 +msgid "This SalesOrder has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:64 +msgid "Packing List" +msgstr "" + +#: order/templates/order/sales_order_base.html:72 +#: order/templates/order/so_navbar.html:12 +msgid "Sales Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:98 templates/js/order.js:275 +msgid "Customer Reference" +msgstr "" + +#: order/templates/order/sales_order_cancel.html:8 +#: order/templates/order/sales_order_ship.html:9 +#: part/templates/part/bom_duplicate.html:12 +#: stock/templates/stock/stockitem_convert.html:13 +msgid "Warning" +msgstr "" + +#: order/templates/order/sales_order_detail.html:13 +msgid "Sales Order Items" +msgstr "" + +#: order/templates/order/sales_order_detail.html:75 +#: order/templates/order/sales_order_detail.html:157 +#: report/templates/report/inventree_test_report_base.html:75 +#: stock/models.py:420 stock/templates/stock/item_base.html:238 +#: templates/js/build.js:418 +msgid "Serial Number" +msgstr "" + +#: order/templates/order/sales_order_detail.html:92 templates/js/bom.js:342 +#: templates/js/build.js:571 templates/js/build.js:984 +msgid "Actions" +msgstr "" + +#: order/templates/order/sales_order_detail.html:99 templates/js/build.js:459 +#: templates/js/build.js:789 +msgid "Edit stock allocation" +msgstr "" + +#: order/templates/order/sales_order_detail.html:100 templates/js/build.js:461 +#: templates/js/build.js:790 +msgid "Delete stock allocation" +msgstr "" + +#: order/templates/order/sales_order_detail.html:170 +msgid "No matching line items" +msgstr "" + +#: order/templates/order/sales_order_detail.html:199 +msgid "ID" +msgstr "" + +#: order/templates/order/sales_order_detail.html:229 templates/js/build.js:523 +#: templates/js/build.js:785 +msgid "Allocated" +msgstr "" + +#: order/templates/order/sales_order_detail.html:231 +msgid "Fulfilled" +msgstr "" + +#: order/templates/order/sales_order_detail.html:279 +msgid "Allocate serial numbers" +msgstr "" + +#: order/templates/order/sales_order_detail.html:282 templates/js/build.js:585 +msgid "Allocate stock" +msgstr "" + +#: order/templates/order/sales_order_detail.html:285 +msgid "Purchase stock" +msgstr "" + +#: order/templates/order/sales_order_detail.html:289 templates/js/build.js:578 +#: templates/js/build.js:992 +msgid "Build stock" +msgstr "" + +#: order/templates/order/sales_order_detail.html:295 +msgid "Delete line item " +msgstr "" + +#: order/templates/order/sales_order_notes.html:14 +msgid "Sales Order Notes" +msgstr "" + +#: order/templates/order/sales_order_ship.html:10 +msgid "" +"This order has not been fully allocated. If the order is marked as shipped, " +"it can no longer be adjusted." +msgstr "" + +#: order/templates/order/sales_order_ship.html:12 +msgid "Ensure that the order allocation is correct before shipping the order." +msgstr "" + +#: order/templates/order/sales_order_ship.html:18 +msgid "Some line items in this order have been over-allocated" +msgstr "" + +#: order/templates/order/sales_order_ship.html:20 +msgid "Ensure that this is correct before shipping the order." +msgstr "" + +#: order/templates/order/sales_order_ship.html:27 +msgid "Shipping this order means that the order will no longer be editable." +msgstr "" + +#: order/templates/order/so_allocate_by_serial.html:9 +msgid "Allocate stock items by serial number" +msgstr "" + +#: order/templates/order/so_allocation_delete.html:7 +msgid "This action will unallocate the following stock from the Sales Order" +msgstr "" + +#: order/templates/order/so_attachments.html:12 +#: order/templates/order/so_navbar.html:26 +msgid "Sales Order Attachments" +msgstr "" + +#: order/templates/order/so_lineitem_delete.html:5 +msgid "Are you sure you wish to delete this line item?" +msgstr "" + +#: order/views.py:99 +msgid "Add Purchase Order Attachment" +msgstr "" + +#: order/views.py:149 +msgid "Add Sales Order Attachment" +msgstr "" + +#: order/views.py:341 +msgid "Create Sales Order" +msgstr "" + +#: order/views.py:376 +msgid "Edit Purchase Order" +msgstr "" + +#: order/views.py:396 +msgid "Edit Sales Order" +msgstr "" + +#: order/views.py:412 +msgid "Cancel Order" +msgstr "" + +#: order/views.py:421 order/views.py:447 +msgid "Confirm order cancellation" +msgstr "" + +#: order/views.py:424 order/views.py:450 +msgid "Order cannot be cancelled" +msgstr "" + +#: order/views.py:438 +msgid "Cancel sales order" +msgstr "" + +#: order/views.py:464 +msgid "Issue Order" +msgstr "" + +#: order/views.py:473 +msgid "Confirm order placement" +msgstr "" + +#: order/views.py:483 +msgid "Purchase order issued" +msgstr "" + +#: order/views.py:494 +msgid "Complete Order" +msgstr "" + +#: order/views.py:510 +msgid "Confirm order completion" +msgstr "" + +#: order/views.py:521 +msgid "Purchase order completed" +msgstr "" + +#: order/views.py:531 +msgid "Ship Order" +msgstr "" + +#: order/views.py:547 +msgid "Confirm order shipment" +msgstr "" + +#: order/views.py:553 +msgid "Could not ship order" +msgstr "" + +#: order/views.py:607 +msgid "Receive Parts" +msgstr "" + +#: order/views.py:677 +msgid "Items received" +msgstr "" + +#: order/views.py:691 +msgid "No destination set" +msgstr "" + +#: order/views.py:736 +msgid "Error converting quantity to number" +msgstr "" + +#: order/views.py:742 +msgid "Receive quantity less than zero" +msgstr "" + +#: order/views.py:748 +msgid "No lines specified" +msgstr "" + +#: order/views.py:1060 +#, python-brace-format +msgid "Ordered {n} parts" +msgstr "" + +#: order/views.py:1117 +msgid "Supplier part must be specified" +msgstr "" + +#: order/views.py:1123 +msgid "Supplier must match for Part and Order" +msgstr "" + +#: order/views.py:1242 order/views.py:1260 +msgid "Edit Line Item" +msgstr "" + +#: order/views.py:1276 order/views.py:1288 +msgid "Delete Line Item" +msgstr "" + +#: order/views.py:1281 order/views.py:1293 +msgid "Deleted line item" +msgstr "" + +#: order/views.py:1306 +msgid "Allocate Serial Numbers" +msgstr "" + +#: order/views.py:1351 +#, python-brace-format +msgid "Allocated {n} items" +msgstr "" + +#: order/views.py:1367 +msgid "Select line item" +msgstr "" + +#: order/views.py:1398 +msgid "No matching item for serial" +msgstr "" + +#: order/views.py:1408 +msgid "is not in stock" +msgstr "" + +#: order/views.py:1416 +msgid "already allocated to an order" +msgstr "" + +#: order/views.py:1470 +msgid "Allocate Stock to Order" +msgstr "" + +#: order/views.py:1544 +msgid "Edit Allocation Quantity" +msgstr "" + +#: order/views.py:1559 +msgid "Remove allocation" +msgstr "" + +#: part/bom.py:138 part/models.py:72 part/models.py:762 +#: part/templates/part/category.html:66 part/templates/part/detail.html:90 +msgid "Default Location" +msgstr "" + +#: part/bom.py:139 part/templates/part/part_base.html:117 +msgid "Available Stock" +msgstr "" + +#: part/bom.py:379 +#, python-brace-format +msgid "Unsupported file format: {f}" +msgstr "" + +#: part/bom.py:384 +msgid "Error reading BOM file (invalid data)" +msgstr "" + +#: part/bom.py:386 +msgid "Error reading BOM file (incorrect row size)" +msgstr "" + +#: part/forms.py:89 stock/forms.py:265 +msgid "File Format" +msgstr "" + +#: part/forms.py:89 stock/forms.py:265 +msgid "Select output file format" +msgstr "" + +#: part/forms.py:91 +msgid "Cascading" +msgstr "" + +#: part/forms.py:91 +msgid "Download cascading / multi-level BOM" +msgstr "" + +#: part/forms.py:93 +msgid "Levels" +msgstr "" + +#: part/forms.py:93 +msgid "Select maximum number of BOM levels to export (0 = all levels)" +msgstr "" + +#: part/forms.py:95 +msgid "Include Parameter Data" +msgstr "" + +#: part/forms.py:95 +msgid "Include part parameters data in exported BOM" +msgstr "" + +#: part/forms.py:97 +msgid "Include Stock Data" +msgstr "" + +#: part/forms.py:97 +msgid "Include part stock data in exported BOM" +msgstr "" + +#: part/forms.py:99 +msgid "Include Manufacturer Data" +msgstr "" + +#: part/forms.py:99 +msgid "Include part manufacturer data in exported BOM" +msgstr "" + +#: part/forms.py:101 +msgid "Include Supplier Data" +msgstr "" + +#: part/forms.py:101 +msgid "Include part supplier data in exported BOM" +msgstr "" + +#: part/forms.py:122 part/models.py:2077 +msgid "Parent Part" +msgstr "" + +#: part/forms.py:123 part/templates/part/bom_duplicate.html:7 +msgid "Select parent part to copy BOM from" +msgstr "" + +#: part/forms.py:129 +msgid "Clear existing BOM items" +msgstr "" + +#: part/forms.py:135 +msgid "Confirm BOM duplication" +msgstr "" + +#: part/forms.py:153 +msgid "validate" +msgstr "" + +#: part/forms.py:153 +msgid "Confirm that the BOM is correct" +msgstr "" + +#: part/forms.py:165 +msgid "BOM file" +msgstr "" + +#: part/forms.py:165 +msgid "Select BOM file to upload" +msgstr "" + +#: part/forms.py:184 +msgid "Related Part" +msgstr "" + +#: part/forms.py:203 +msgid "Select part category" +msgstr "" + +#: part/forms.py:220 +msgid "Duplicate all BOM data for this part" +msgstr "" + +#: part/forms.py:221 +msgid "Copy BOM" +msgstr "" + +#: part/forms.py:226 +msgid "Duplicate all parameter data for this part" +msgstr "" + +#: part/forms.py:227 +msgid "Copy Parameters" +msgstr "" + +#: part/forms.py:232 +msgid "Confirm part creation" +msgstr "" + +#: part/forms.py:237 +msgid "Include category parameter templates" +msgstr "" + +#: part/forms.py:242 +msgid "Include parent categories parameter templates" +msgstr "" + +#: part/forms.py:322 +msgid "Add parameter template to same level categories" +msgstr "" + +#: part/forms.py:326 +msgid "Add parameter template to all categories" +msgstr "" + +#: part/forms.py:344 part/models.py:2171 +msgid "Sub part" +msgstr "" + +#: part/forms.py:372 +msgid "Input quantity for price calculation" +msgstr "" + +#: part/models.py:73 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:76 +msgid "Default keywords" +msgstr "" + +#: part/models.py:76 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:82 part/models.py:2123 +#: part/templates/part/part_app_base.html:10 +msgid "Part Category" +msgstr "" + +#: part/models.py:83 part/templates/part/category.html:23 +#: part/templates/part/category.html:94 part/templates/part/category.html:141 +#: templates/InvenTree/search.html:127 templates/stats.html:63 +#: users/models.py:37 +msgid "Part Categories" +msgstr "" + +#: part/models.py:446 part/models.py:458 +#, python-brace-format +msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" +msgstr "" + +#: part/models.py:555 +msgid "Next available serial numbers are" +msgstr "" + +#: part/models.py:559 +msgid "Next available serial number is" +msgstr "" + +#: part/models.py:564 +msgid "Most recent serial number is" +msgstr "" + +#: part/models.py:643 +msgid "Duplicate IPN not allowed in part settings" +msgstr "" + +#: part/models.py:654 +msgid "Part must be unique for name, IPN and revision" +msgstr "" + +#: part/models.py:685 part/templates/part/detail.html:22 +msgid "Part name" +msgstr "" + +#: part/models.py:692 +msgid "Is Template" +msgstr "" + +#: part/models.py:693 +msgid "Is this part a template part?" +msgstr "" + +#: part/models.py:704 +msgid "Is this part a variant of another part?" +msgstr "" + +#: part/models.py:705 part/templates/part/detail.html:60 +msgid "Variant Of" +msgstr "" + +#: part/models.py:711 +msgid "Part description" +msgstr "" + +#: part/models.py:716 part/templates/part/category.html:73 +#: part/templates/part/detail.html:67 +msgid "Keywords" +msgstr "" + +#: part/models.py:717 +msgid "Part keywords to improve visibility in search results" +msgstr "" + +#: part/models.py:724 part/models.py:2122 part/templates/part/detail.html:73 +#: part/templates/part/set_category.html:15 templates/js/part.js:385 +msgid "Category" +msgstr "" + +#: part/models.py:725 +msgid "Part category" +msgstr "" + +#: part/models.py:730 part/templates/part/detail.html:28 +#: part/templates/part/part_base.html:94 templates/js/part.js:161 +msgid "IPN" +msgstr "" + +#: part/models.py:731 +msgid "Internal Part Number" +msgstr "" + +#: part/models.py:737 +msgid "Part revision or version number" +msgstr "" + +#: part/models.py:738 part/templates/part/detail.html:35 report/models.py:198 +#: templates/js/part.js:165 +msgid "Revision" +msgstr "" + +#: part/models.py:760 +msgid "Where is this item normally stored?" +msgstr "" + +#: part/models.py:807 part/templates/part/detail.html:97 +msgid "Default Supplier" +msgstr "" + +#: part/models.py:808 +msgid "Default supplier part" +msgstr "" + +#: part/models.py:815 +msgid "Default Expiry" +msgstr "" + +#: part/models.py:816 +msgid "Expiry time (in days) for stock items of this part" +msgstr "" + +#: part/models.py:821 part/templates/part/detail.html:113 +msgid "Minimum Stock" +msgstr "" + +#: part/models.py:822 +msgid "Minimum allowed stock level" +msgstr "" + +#: part/models.py:828 part/models.py:2051 part/templates/part/detail.html:106 +#: part/templates/part/params.html:29 +msgid "Units" +msgstr "" + +#: part/models.py:829 +msgid "Stock keeping units for this part" +msgstr "" + +#: part/models.py:835 +msgid "Can this part be built from other parts?" +msgstr "" + +#: part/models.py:841 +msgid "Can this part be used to build other parts?" +msgstr "" + +#: part/models.py:847 +msgid "Does this part have tracking for unique items?" +msgstr "" + +#: part/models.py:852 +msgid "Can this part be purchased from external suppliers?" +msgstr "" + +#: part/models.py:857 +msgid "Can this part be sold to customers?" +msgstr "" + +#: part/models.py:861 part/templates/part/detail.html:227 +#: templates/js/table_filters.js:20 templates/js/table_filters.js:60 +#: templates/js/table_filters.js:236 templates/js/table_filters.js:305 +msgid "Active" +msgstr "" + +#: part/models.py:862 +msgid "Is this part active?" +msgstr "" + +#: part/models.py:867 +msgid "Is this a virtual part, such as a software product or license?" +msgstr "" + +#: part/models.py:872 +msgid "Part notes - supports Markdown formatting" +msgstr "" + +#: part/models.py:875 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:875 +msgid "Stored BOM checksum" +msgstr "" + +#: part/models.py:878 +msgid "BOM checked by" +msgstr "" + +#: part/models.py:880 +msgid "BOM checked date" +msgstr "" + +#: part/models.py:884 +msgid "Creation User" +msgstr "" + +#: part/models.py:1949 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:1966 +msgid "Test with this name already exists for this part" +msgstr "" + +#: part/models.py:1986 templates/js/part.js:638 templates/js/stock.js:104 +msgid "Test Name" +msgstr "" + +#: part/models.py:1987 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:1992 +msgid "Test Description" +msgstr "" + +#: part/models.py:1993 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:1998 templates/js/part.js:647 +#: templates/js/table_filters.js:222 +msgid "Required" +msgstr "" + +#: part/models.py:1999 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:2004 templates/js/part.js:655 +msgid "Requires Value" +msgstr "" + +#: part/models.py:2005 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:2010 templates/js/part.js:662 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:2011 +msgid "Does this test require a file attachment when adding a test result?" +msgstr "" + +#: part/models.py:2044 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:2049 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:2051 +msgid "Parameter Units" +msgstr "" + +#: part/models.py:2079 part/models.py:2128 part/models.py:2129 +#: templates/InvenTree/settings/category.html:62 +msgid "Parameter Template" +msgstr "" + +#: part/models.py:2081 +msgid "Data" +msgstr "" + +#: part/models.py:2081 +msgid "Parameter Value" +msgstr "" + +#: part/models.py:2133 templates/InvenTree/settings/category.html:67 +msgid "Default Value" +msgstr "" + +#: part/models.py:2134 +msgid "Default Parameter Value" +msgstr "" + +#: part/models.py:2163 +msgid "Select parent part" +msgstr "" + +#: part/models.py:2172 +msgid "Select part to be used in BOM" +msgstr "" + +#: part/models.py:2178 +msgid "BOM quantity for this BOM item" +msgstr "" + +#: part/models.py:2180 templates/js/bom.js:216 templates/js/bom.js:269 +msgid "Optional" +msgstr "" + +#: part/models.py:2180 +msgid "This BOM item is optional" +msgstr "" + +#: part/models.py:2183 +msgid "Overage" +msgstr "" + +#: part/models.py:2184 +msgid "Estimated build wastage quantity (absolute or percentage)" +msgstr "" + +#: part/models.py:2187 +msgid "BOM item reference" +msgstr "" + +#: part/models.py:2190 +msgid "BOM item notes" +msgstr "" + +#: part/models.py:2192 +msgid "Checksum" +msgstr "" + +#: part/models.py:2192 +msgid "BOM line checksum" +msgstr "" + +#: part/models.py:2196 templates/js/bom.js:279 templates/js/bom.js:286 +#: templates/js/table_filters.js:50 +msgid "Inherited" +msgstr "" + +#: part/models.py:2197 +msgid "This BOM item is inherited by BOMs for variant parts" +msgstr "" + +#: part/models.py:2273 part/views.py:1592 part/views.py:1644 +#: stock/models.py:260 +msgid "Quantity must be integer value for trackable parts" +msgstr "" + +#: part/models.py:2282 part/models.py:2284 +msgid "Sub part must be specified" +msgstr "" + +#: part/models.py:2287 +msgid "BOM Item" +msgstr "" + +#: part/models.py:2404 +msgid "Part 1" +msgstr "" + +#: part/models.py:2408 +msgid "Part 2" +msgstr "" + +#: part/models.py:2408 +msgid "Select Related Part" +msgstr "" + +#: part/models.py:2440 +msgid "" +"Error creating relationship: check that the part is not related to itself " +"and that the relationship is unique" +msgstr "" + +#: part/templates/part/allocation.html:11 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/attachments.html:10 +msgid "Part Attachments" +msgstr "" + +#: part/templates/part/bom-delete.html:6 +msgid "Are you sure you want to delete this BOM item?" +msgstr "" + +#: part/templates/part/bom-delete.html:8 +msgid "Deleting this entry will remove the BOM row from the following part" +msgstr "" + +#: part/templates/part/bom.html:10 part/templates/part/navbar.html:48 +#: part/templates/part/navbar.html:51 +msgid "Bill of Materials" +msgstr "" + +#: part/templates/part/bom.html:19 +#, python-format +msgid "The BOM for %(part)s has changed, and must be validated.
    " +msgstr "" + +#: part/templates/part/bom.html:21 +#, python-format +msgid "" +"The BOM for %(part)s was last checked by %(checker)s on %(check_date)s" +msgstr "" + +#: part/templates/part/bom.html:25 +#, python-format +msgid "The BOM for %(part)s has not been validated." +msgstr "" + +#: part/templates/part/bom.html:32 +msgid "Remove selected BOM items" +msgstr "" + +#: part/templates/part/bom.html:35 +msgid "Import BOM data" +msgstr "" + +#: part/templates/part/bom.html:39 +msgid "Copy BOM from parent part" +msgstr "" + +#: part/templates/part/bom.html:43 +msgid "New BOM Item" +msgstr "" + +#: part/templates/part/bom.html:46 +msgid "Finish Editing" +msgstr "" + +#: part/templates/part/bom.html:51 +msgid "Edit BOM" +msgstr "" + +#: part/templates/part/bom.html:55 +msgid "Validate Bill of Materials" +msgstr "" + +#: part/templates/part/bom.html:61 part/views.py:1887 +msgid "Export Bill of Materials" +msgstr "" + +#: part/templates/part/bom.html:64 +msgid "Print BOM Report" +msgstr "" + +#: part/templates/part/bom.html:109 +msgid "Delete selected BOM items?" +msgstr "" + +#: part/templates/part/bom.html:110 +msgid "All selected BOM items will be deleted" +msgstr "" + +#: part/templates/part/bom.html:160 part/views.py:584 +#: templates/js/stock.js:1158 +msgid "Create New Part" +msgstr "" + +#: part/templates/part/bom_duplicate.html:13 +msgid "This part already has a Bill of Materials" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:11 +#: part/templates/part/bom_upload/select_parts.html:11 +#: part/templates/part/bom_upload/upload_file.html:11 +msgid "Upload Bill of Materials" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:16 +msgid "Step 2 - Select Fields" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:21 +msgid "Missing selections for the following required columns" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:32 +msgid "Submit Selections" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:41 +msgid "File Fields" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:47 +msgid "Remove column" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:58 +msgid "Match Fields" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:68 +msgid "Duplicate column selection" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:76 +#: part/templates/part/bom_upload/select_parts.html:58 +msgid "Remove row" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:16 +msgid "Step 3 - Select Parts" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:21 +msgid "Errors exist in the submitted data" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:27 +msgid "Submit BOM" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:39 +msgid "Row" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:40 +#: part/templates/part/bom_upload/select_parts.html:69 +msgid "Select Part" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:65 +#: part/templates/part/category.html:117 +msgid "Create new part" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:16 +msgid "Step 1 - Select BOM File" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:19 +msgid "Requirements for BOM upload" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:21 +msgid "" +"The BOM file must contain the required named columns as provided in the " +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:21 +msgid "BOM Upload Template" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:22 +msgid "Each part must already exist in the database" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:27 +msgid "Upload File" +msgstr "" + +#: part/templates/part/bom_validate.html:6 +#, python-format +msgid "" +"Confirm that the Bill of Materials (BOM) is valid for:
    %(part)s" +msgstr "" + +#: part/templates/part/bom_validate.html:9 +msgid "This will validate each line in the BOM." +msgstr "" + +#: part/templates/part/build.html:10 +msgid "Part Builds" +msgstr "" + +#: part/templates/part/build.html:18 +msgid "Start New Build" +msgstr "" + +#: part/templates/part/category.html:24 +msgid "All parts" +msgstr "" + +#: part/templates/part/category.html:29 part/views.py:2270 +msgid "Create new part category" +msgstr "" + +#: part/templates/part/category.html:35 +msgid "Edit part category" +msgstr "" + +#: part/templates/part/category.html:40 +msgid "Delete part category" +msgstr "" + +#: part/templates/part/category.html:50 part/templates/part/category.html:89 +msgid "Category Details" +msgstr "" + +#: part/templates/part/category.html:55 +msgid "Category Path" +msgstr "" + +#: part/templates/part/category.html:60 +msgid "Category Description" +msgstr "" + +#: part/templates/part/category.html:79 +#: part/templates/part/category_navbar.html:11 +#: part/templates/part/category_navbar.html:18 +#: part/templates/part/subcategory.html:16 +msgid "Subcategories" +msgstr "" + +#: part/templates/part/category.html:84 +msgid "Parts (Including subcategories)" +msgstr "" + +#: part/templates/part/category.html:113 +msgid "Export Part Data" +msgstr "" + +#: part/templates/part/category.html:125 +msgid "Set category" +msgstr "" + +#: part/templates/part/category.html:125 +msgid "Set Category" +msgstr "" + +#: part/templates/part/category.html:128 +msgid "Export Data" +msgstr "" + +#: part/templates/part/category.html:186 +#: stock/templates/stock/location.html:192 templates/js/stock.js:709 +msgid "Create new location" +msgstr "" + +#: part/templates/part/category.html:191 part/templates/part/category.html:221 +msgid "New Category" +msgstr "" + +#: part/templates/part/category.html:192 +msgid "Create new category" +msgstr "" + +#: part/templates/part/category.html:222 +msgid "Create new Part Category" +msgstr "" + +#: part/templates/part/category.html:228 stock/views.py:1359 +msgid "Create new Stock Location" +msgstr "" + +#: part/templates/part/category_delete.html:5 +msgid "Are you sure you want to delete category" +msgstr "" + +#: part/templates/part/category_delete.html:8 +#, python-format +msgid "This category contains %(count)s child categories" +msgstr "" + +#: part/templates/part/category_delete.html:9 +msgid "" +"If this category is deleted, these child categories will be moved to the" +msgstr "" + +#: part/templates/part/category_delete.html:11 +msgid "category" +msgstr "" + +#: part/templates/part/category_delete.html:13 +msgid "top level Parts category" +msgstr "" + +#: part/templates/part/category_delete.html:25 +#, python-format +msgid "This category contains %(count)s parts" +msgstr "" + +#: part/templates/part/category_delete.html:27 +#, python-format +msgid "" +"If this category is deleted, these parts will be moved to the parent " +"category %(path)s" +msgstr "" + +#: part/templates/part/category_delete.html:29 +msgid "" +"If this category is deleted, these parts will be moved to the top-level " +"category Teile" +msgstr "" + +#: part/templates/part/category_navbar.html:34 +#: part/templates/part/category_navbar.html:37 +#: part/templates/part/navbar.html:22 +msgid "Parameters" +msgstr "" + +#: part/templates/part/category_parametric.html:10 +#: part/templates/part/navbar.html:19 part/templates/part/params.html:10 +msgid "Part Parameters" +msgstr "" + +#: part/templates/part/copy_part.html:9 part/views.py:460 +msgid "Duplicate Part" +msgstr "" + +#: part/templates/part/copy_part.html:10 +#, python-format +msgid "Make a copy of part '%(full_name)s'." +msgstr "" + +#: part/templates/part/copy_part.html:14 +#: part/templates/part/create_part.html:11 +msgid "Possible Matching Parts" +msgstr "" + +#: part/templates/part/copy_part.html:15 +#: part/templates/part/create_part.html:12 +msgid "The new part may be a duplicate of these existing parts" +msgstr "" + +#: part/templates/part/create_part.html:17 +#, python-format +msgid "%(full_name)s - %(desc)s (%(match_per)s%% match)" +msgstr "" + +#: part/templates/part/detail.html:11 part/templates/part/navbar.html:11 +msgid "Part Details" +msgstr "" + +#: part/templates/part/detail.html:42 +msgid "Latest Serial Number" +msgstr "" + +#: part/templates/part/detail.html:47 +msgid "No serial numbers recorded" +msgstr "" + +#: part/templates/part/detail.html:120 +msgid "Stock Expiry Time" +msgstr "" + +#: part/templates/part/detail.html:139 +msgid "Responsible User" +msgstr "" + +#: part/templates/part/detail.html:153 +msgid "Part is virtual (not a physical part)" +msgstr "" + +#: part/templates/part/detail.html:155 +msgid "Part is not a virtual part" +msgstr "" + +#: part/templates/part/detail.html:163 +msgid "Part is a template part (variants can be made from this part)" +msgstr "" + +#: part/templates/part/detail.html:165 +msgid "Part is not a template part" +msgstr "" + +#: part/templates/part/detail.html:173 +msgid "Part can be assembled from other parts" +msgstr "" + +#: part/templates/part/detail.html:175 +msgid "Part cannot be assembled from other parts" +msgstr "" + +#: part/templates/part/detail.html:183 +msgid "Part can be used in assemblies" +msgstr "" + +#: part/templates/part/detail.html:185 +msgid "Part cannot be used in assemblies" +msgstr "" + +#: part/templates/part/detail.html:193 +msgid "Part stock is tracked by serial number" +msgstr "" + +#: part/templates/part/detail.html:195 +msgid "Part stock is not tracked by serial number" +msgstr "" + +#: part/templates/part/detail.html:203 part/templates/part/detail.html:205 +msgid "Part can be purchased from external suppliers" +msgstr "" + +#: part/templates/part/detail.html:213 +msgid "Part can be sold to customers" +msgstr "" + +#: part/templates/part/detail.html:215 +msgid "Part cannot be sold to customers" +msgstr "" + +#: part/templates/part/detail.html:230 +msgid "Part is active" +msgstr "" + +#: part/templates/part/detail.html:232 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/manufacturer.html:11 +msgid "Part Manufacturers" +msgstr "" + +#: part/templates/part/manufacturer.html:24 +msgid "Delete manufacturer parts" +msgstr "" + +#: part/templates/part/manufacturer.html:53 +#: part/templates/part/supplier.html:57 +msgid "Create new manufacturer" +msgstr "" + +#: part/templates/part/navbar.html:26 part/templates/part/variants.html:11 +msgid "Part Variants" +msgstr "" + +#: part/templates/part/navbar.html:29 +msgid "Variants" +msgstr "" + +#: part/templates/part/navbar.html:40 +msgid "Allocated Stock" +msgstr "" + +#: part/templates/part/navbar.html:43 +msgid "Allocations" +msgstr "" + +#: part/templates/part/navbar.html:64 part/templates/part/navbar.html:67 +msgid "Used In" +msgstr "" + +#: part/templates/part/navbar.html:92 +msgid "Sales Price Information" +msgstr "" + +#: part/templates/part/navbar.html:95 +msgid "Sale Price" +msgstr "" + +#: part/templates/part/navbar.html:106 part/templates/part/part_tests.html:10 +msgid "Part Test Templates" +msgstr "" + +#: part/templates/part/navbar.html:109 stock/templates/stock/item_base.html:398 +msgid "Tests" +msgstr "" + +#: part/templates/part/navbar.html:113 part/templates/part/navbar.html:116 +#: part/templates/part/related.html:10 +msgid "Related Parts" +msgstr "" + +#: part/templates/part/navbar.html:125 part/templates/part/notes.html:12 +msgid "Part Notes" +msgstr "" + +#: part/templates/part/params.html:17 +msgid "Add new parameter" +msgstr "" + +#: part/templates/part/params.html:18 +#: templates/InvenTree/settings/category.html:29 +#: templates/InvenTree/settings/part.html:44 +msgid "New Parameter" +msgstr "" + +#: part/templates/part/params.html:28 +#: report/templates/report/inventree_test_report_base.html:90 +#: stock/models.py:1655 templates/InvenTree/settings/header.html:8 +#: templates/js/stock.js:124 +msgid "Value" +msgstr "" + +#: part/templates/part/params.html:41 templates/InvenTree/settings/user.html:19 +msgid "Edit" +msgstr "" + +#: part/templates/part/params.html:68 +msgid "New Template" +msgstr "" + +#: part/templates/part/params.html:69 +msgid "Create New Parameter Template" +msgstr "" + +#: part/templates/part/part_app_base.html:12 +msgid "Part List" +msgstr "" + +#: part/templates/part/part_base.html:18 +#, python-format +msgid "This part is a variant of %(link)s" +msgstr "" + +#: part/templates/part/part_base.html:33 templates/js/company.js:156 +#: templates/js/company.js:254 templates/js/part.js:76 templates/js/part.js:153 +msgid "Inactive" +msgstr "" + +#: part/templates/part/part_base.html:40 +msgid "Star this part" +msgstr "" + +#: part/templates/part/part_base.html:47 +#: stock/templates/stock/item_base.html:131 +#: stock/templates/stock/location.html:51 +msgid "Barcode actions" +msgstr "" + +#: part/templates/part/part_base.html:49 +#: stock/templates/stock/item_base.html:133 +#: stock/templates/stock/location.html:53 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: part/templates/part/part_base.html:50 +#: stock/templates/stock/item_base.html:149 +#: stock/templates/stock/location.html:54 +msgid "Print Label" +msgstr "" + +#: part/templates/part/part_base.html:55 +msgid "Show pricing information" +msgstr "" + +#: part/templates/part/part_base.html:59 +msgid "Count part stock" +msgstr "" + +#: part/templates/part/part_base.html:74 +msgid "Part actions" +msgstr "" + +#: part/templates/part/part_base.html:77 +msgid "Duplicate part" +msgstr "" + +#: part/templates/part/part_base.html:80 +msgid "Edit part" +msgstr "" + +#: part/templates/part/part_base.html:83 +msgid "Delete part" +msgstr "" + +#: part/templates/part/part_base.html:123 templates/js/table_filters.js:156 +msgid "In Stock" +msgstr "" + +#: part/templates/part/part_base.html:136 templates/InvenTree/index.html:131 +msgid "Required for Build Orders" +msgstr "" + +#: part/templates/part/part_base.html:143 +msgid "Required for Sales Orders" +msgstr "" + +#: part/templates/part/part_base.html:150 +msgid "Allocated to Orders" +msgstr "" + +#: part/templates/part/part_base.html:165 templates/js/bom.js:300 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:171 templates/js/part.js:418 +msgid "Building" +msgstr "" + +#: part/templates/part/part_base.html:250 +msgid "Calculate" +msgstr "" + +#: part/templates/part/part_pricing.html:8 +#, python-format +msgid "Pricing information for:
    %(part)s." +msgstr "" + +#: part/templates/part/part_pricing.html:23 +msgid "Supplier Pricing" +msgstr "" + +#: part/templates/part/part_pricing.html:27 +#: part/templates/part/part_pricing.html:53 +msgid "Unit Cost" +msgstr "" + +#: part/templates/part/part_pricing.html:33 +#: part/templates/part/part_pricing.html:59 +msgid "Total Cost" +msgstr "" + +#: part/templates/part/part_pricing.html:41 +msgid "No supplier pricing available" +msgstr "" + +#: part/templates/part/part_pricing.html:49 +msgid "BOM Pricing" +msgstr "" + +#: part/templates/part/part_pricing.html:67 +msgid "Note: BOM pricing is incomplete for this part" +msgstr "" + +#: part/templates/part/part_pricing.html:74 +msgid "No BOM pricing available" +msgstr "" + +#: part/templates/part/part_pricing.html:84 +msgid "No pricing information is available for this part." +msgstr "" + +#: part/templates/part/part_tests.html:17 +msgid "Add Test Template" +msgstr "" + +#: part/templates/part/part_thumb.html:20 +msgid "Select from existing images" +msgstr "" + +#: part/templates/part/partial_delete.html:7 +#, python-format +msgid "Are you sure you want to delete part '%(full_name)s'?" +msgstr "" + +#: part/templates/part/partial_delete.html:12 +#, python-format +msgid "" +"This part is used in BOMs for %(count)s other parts. If you delete this " +"part, the BOMs for the following parts will be updated" +msgstr "" + +#: part/templates/part/partial_delete.html:22 +#, python-format +msgid "" +"There are %(count)s stock entries defined for this part. If you delete this " +"part, the following stock entries will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:33 +#, python-format +msgid "" +"There are %(count)s manufacturers defined for this part. If you delete this " +"part, the following manufacturer parts will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:44 +#, python-format +msgid "" +"There are %(count)s suppliers defined for this part. If you delete this " +"part, the following supplier parts will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:55 +#, python-format +msgid "" +"There are %(count)s unique parts tracked for '%(full_name)s'. Deleting this " +"part will permanently remove this tracking information." +msgstr "" + +#: part/templates/part/related.html:18 +msgid "Add Related" +msgstr "" + +#: part/templates/part/sale_prices.html:10 +msgid "Sell Price Information" +msgstr "" + +#: part/templates/part/sales_orders.html:18 +msgid "New sales order" +msgstr "" + +#: part/templates/part/sales_orders.html:18 +msgid "New Order" +msgstr "" + +#: part/templates/part/set_category.html:9 +msgid "Set category for the following parts" +msgstr "" + +#: part/templates/part/stock.html:10 +msgid "Part Stock" +msgstr "" + +#: part/templates/part/stock.html:16 +#, python-format +msgid "Showing stock for all variants of %(full_name)s" +msgstr "" + +#: part/templates/part/stock_count.html:7 templates/js/bom.js:239 +#: templates/js/part.js:422 +msgid "No Stock" +msgstr "" + +#: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:130 +msgid "Low Stock" +msgstr "" + +#: part/templates/part/supplier.html:10 +msgid "Part Suppliers" +msgstr "" + +#: part/templates/part/track.html:10 +msgid "Part Tracking" +msgstr "" + +#: part/templates/part/used_in.html:9 +msgid "Assemblies" +msgstr "" + +#: part/templates/part/variant_part.html:9 +msgid "Create new part variant" +msgstr "" + +#: part/templates/part/variant_part.html:10 +#, python-format +msgid "Create a new variant of template '%(full_name)s'." +msgstr "" + +#: part/templates/part/variants.html:19 +msgid "Create new variant" +msgstr "" + +#: part/templates/part/variants.html:20 +msgid "New Variant" +msgstr "" + +#: part/views.py:89 +msgid "Add Related Part" +msgstr "" + +#: part/views.py:144 +msgid "Delete Related Part" +msgstr "" + +#: part/views.py:158 +msgid "Add part attachment" +msgstr "" + +#: part/views.py:211 templates/attachment_table.html:32 +msgid "Edit attachment" +msgstr "" + +#: part/views.py:215 +msgid "Part attachment updated" +msgstr "" + +#: part/views.py:230 +msgid "Delete Part Attachment" +msgstr "" + +#: part/views.py:238 +msgid "Deleted part attachment" +msgstr "" + +#: part/views.py:247 +msgid "Create Test Template" +msgstr "" + +#: part/views.py:274 +msgid "Edit Test Template" +msgstr "" + +#: part/views.py:288 +msgid "Delete Test Template" +msgstr "" + +#: part/views.py:295 +msgid "Set Part Category" +msgstr "" + +#: part/views.py:345 +#, python-brace-format +msgid "Set category for {n} parts" +msgstr "" + +#: part/views.py:380 +msgid "Create Variant" +msgstr "" + +#: part/views.py:465 +msgid "Copied part" +msgstr "" + +#: part/views.py:519 part/views.py:657 +msgid "Possible matches exist - confirm creation of new part" +msgstr "" + +#: part/views.py:589 +msgid "Created new part" +msgstr "" + +#: part/views.py:825 +msgid "Part QR Code" +msgstr "" + +#: part/views.py:927 +msgid "Upload Part Image" +msgstr "" + +#: part/views.py:933 part/views.py:968 +msgid "Updated part image" +msgstr "" + +#: part/views.py:942 +msgid "Select Part Image" +msgstr "" + +#: part/views.py:971 +msgid "Part image not found" +msgstr "" + +#: part/views.py:982 +msgid "Edit Part Properties" +msgstr "" + +#: part/views.py:1017 +msgid "Duplicate BOM" +msgstr "" + +#: part/views.py:1047 +msgid "Confirm duplication of BOM from parent" +msgstr "" + +#: part/views.py:1068 +msgid "Validate BOM" +msgstr "" + +#: part/views.py:1089 +msgid "Confirm that the BOM is valid" +msgstr "" + +#: part/views.py:1100 +msgid "Validated Bill of Materials" +msgstr "" + +#: part/views.py:1234 +msgid "No BOM file provided" +msgstr "" + +#: part/views.py:1595 +msgid "Enter a valid quantity" +msgstr "" + +#: part/views.py:1620 part/views.py:1623 +msgid "Select valid part" +msgstr "" + +#: part/views.py:1629 +msgid "Duplicate part selected" +msgstr "" + +#: part/views.py:1667 +msgid "Select a part" +msgstr "" + +#: part/views.py:1673 +msgid "Selected part creates a circular BOM" +msgstr "" + +#: part/views.py:1677 +msgid "Specify quantity" +msgstr "" + +#: part/views.py:1939 +msgid "Confirm Part Deletion" +msgstr "" + +#: part/views.py:1946 +msgid "Part was deleted" +msgstr "" + +#: part/views.py:1955 +msgid "Part Pricing" +msgstr "" + +#: part/views.py:2069 +msgid "Create Part Parameter Template" +msgstr "" + +#: part/views.py:2079 +msgid "Edit Part Parameter Template" +msgstr "" + +#: part/views.py:2086 +msgid "Delete Part Parameter Template" +msgstr "" + +#: part/views.py:2094 +msgid "Create Part Parameter" +msgstr "" + +#: part/views.py:2144 +msgid "Edit Part Parameter" +msgstr "" + +#: part/views.py:2158 +msgid "Delete Part Parameter" +msgstr "" + +#: part/views.py:2218 +msgid "Edit Part Category" +msgstr "" + +#: part/views.py:2256 +msgid "Delete Part Category" +msgstr "" + +#: part/views.py:2262 +msgid "Part category was deleted" +msgstr "" + +#: part/views.py:2314 +msgid "Create Category Parameter Template" +msgstr "" + +#: part/views.py:2415 +msgid "Edit Category Parameter Template" +msgstr "" + +#: part/views.py:2471 +msgid "Delete Category Parameter Template" +msgstr "" + +#: part/views.py:2490 +msgid "Create BOM Item" +msgstr "" + +#: part/views.py:2560 +msgid "Edit BOM item" +msgstr "" + +#: part/views.py:2616 +msgid "Confim BOM item deletion" +msgstr "" + +#: report/models.py:180 +msgid "Template name" +msgstr "" + +#: report/models.py:186 +msgid "Report template file" +msgstr "" + +#: report/models.py:193 +msgid "Report template description" +msgstr "" + +#: report/models.py:199 +msgid "Report revision number (auto-increments)" +msgstr "" + +#: report/models.py:275 +msgid "Report template is enabled" +msgstr "" + +#: report/models.py:295 +msgid "StockItem query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:303 +msgid "Include Installed Tests" +msgstr "" + +#: report/models.py:304 +msgid "Include test results for stock items installed inside assembled item" +msgstr "" + +#: report/models.py:347 +msgid "Build Filters" +msgstr "" + +#: report/models.py:348 +msgid "Build query filters (comma-separated list of key=value pairs" +msgstr "" + +#: report/models.py:385 +msgid "Part Filters" +msgstr "" + +#: report/models.py:386 +msgid "Part query filters (comma-separated list of key=value pairs" +msgstr "" + +#: report/models.py:416 +msgid "Purchase order query filters" +msgstr "" + +#: report/models.py:450 +msgid "Sales order query filters" +msgstr "" + +#: report/models.py:500 +msgid "Snippet" +msgstr "" + +#: report/models.py:501 +msgid "Report snippet file" +msgstr "" + +#: report/models.py:505 +msgid "Snippet file description" +msgstr "" + +#: report/models.py:540 +msgid "Asset" +msgstr "" + +#: report/models.py:541 +msgid "Report asset file" +msgstr "" + +#: report/models.py:544 +msgid "Asset file description" +msgstr "" + +#: report/templates/report/inventree_build_order_base.html:147 +msgid "Required For" +msgstr "" + +#: report/templates/report/inventree_po_report.html:85 +#: report/templates/report/inventree_so_report.html:85 +msgid "Line Items" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:21 +msgid "Stock Item Test Report" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:83 +msgid "Test Results" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:1643 +msgid "Test" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:89 +#: stock/models.py:1649 +msgid "Result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:92 +#: templates/js/order.js:195 templates/js/stock.js:986 +msgid "Date" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:103 +msgid "Pass" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:105 +msgid "Fail" +msgstr "" + +#: stock/api.py:199 +#, python-brace-format +msgid "Updated stock for {n} items" +msgstr "" + +#: stock/api.py:268 +#, python-brace-format +msgid "Moved {n} parts to {loc}" +msgstr "" + +#: stock/forms.py:114 stock/forms.py:406 stock/models.py:475 +#: stock/templates/stock/item_base.html:365 templates/js/stock.js:656 +msgid "Expiry Date" +msgstr "" + +#: stock/forms.py:115 stock/forms.py:407 +msgid "Expiration date for this stock item" +msgstr "" + +#: stock/forms.py:118 +msgid "Enter unique serial numbers (or leave blank)" +msgstr "" + +#: stock/forms.py:169 +msgid "" +"Destination for serialized stock (by default, will remain in current " +"location)" +msgstr "" + +#: stock/forms.py:171 +msgid "Serial numbers" +msgstr "" + +#: stock/forms.py:171 +msgid "Unique serial numbers (must match quantity)" +msgstr "" + +#: stock/forms.py:173 stock/forms.py:349 +msgid "Add transaction note (optional)" +msgstr "" + +#: stock/forms.py:203 stock/forms.py:259 +msgid "Select test report template" +msgstr "" + +#: stock/forms.py:267 templates/js/table_filters.js:70 +#: templates/js/table_filters.js:133 +msgid "Include sublocations" +msgstr "" + +#: stock/forms.py:267 +msgid "Include stock items in sub locations" +msgstr "" + +#: stock/forms.py:302 +msgid "Stock item to install" +msgstr "" + +#: stock/forms.py:309 +msgid "Stock quantity to assign" +msgstr "" + +#: stock/forms.py:337 +msgid "Must not exceed available quantity" +msgstr "" + +#: stock/forms.py:347 +msgid "Destination location for uninstalled items" +msgstr "" + +#: stock/forms.py:351 +msgid "Confirm uninstall" +msgstr "" + +#: stock/forms.py:351 +msgid "Confirm removal of installed stock items" +msgstr "" + +#: stock/forms.py:375 +msgid "Destination stock location" +msgstr "" + +#: stock/forms.py:377 +msgid "Add note (required)" +msgstr "" + +#: stock/forms.py:381 stock/views.py:852 stock/views.py:1051 +msgid "Confirm stock adjustment" +msgstr "" + +#: stock/forms.py:381 +msgid "Confirm movement of stock items" +msgstr "" + +#: stock/forms.py:383 +msgid "Set Default Location" +msgstr "" + +#: stock/forms.py:383 +msgid "Set the destination as the default location for selected parts" +msgstr "" + +#: stock/models.py:54 stock/models.py:513 +msgid "Owner" +msgstr "" + +#: stock/models.py:55 stock/models.py:514 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:205 +msgid "Created stock item" +msgstr "" + +#: stock/models.py:241 +msgid "StockItem with this serial number already exists" +msgstr "" + +#: stock/models.py:277 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:287 stock/models.py:296 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:288 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:310 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:316 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:323 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:365 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:374 +msgid "Base part" +msgstr "" + +#: stock/models.py:383 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:388 stock/templates/stock/stock_app_base.html:8 +msgid "Stock Location" +msgstr "" + +#: stock/models.py:391 +msgid "Where is this stock item located?" +msgstr "" + +#: stock/models.py:398 +msgid "Packaging this stock item is stored in" +msgstr "" + +#: stock/models.py:403 stock/templates/stock/item_base.html:259 +msgid "Installed In" +msgstr "" + +#: stock/models.py:406 +msgid "Is this item installed in another item?" +msgstr "" + +#: stock/models.py:422 +msgid "Serial number for this item" +msgstr "" + +#: stock/models.py:434 +msgid "Batch code for this stock item" +msgstr "" + +#: stock/models.py:438 +msgid "Stock Quantity" +msgstr "" + +#: stock/models.py:447 +msgid "Source Build" +msgstr "" + +#: stock/models.py:449 +msgid "Build for this stock item" +msgstr "" + +#: stock/models.py:460 +msgid "Source Purchase Order" +msgstr "" + +#: stock/models.py:463 +msgid "Purchase order for this stock item" +msgstr "" + +#: stock/models.py:469 +msgid "Destination Sales Order" +msgstr "" + +#: stock/models.py:476 +msgid "" +"Expiry date for stock item. Stock will be considered expired after this date" +msgstr "" + +#: stock/models.py:489 +msgid "Delete on deplete" +msgstr "" + +#: stock/models.py:489 +msgid "Delete this Stock Item when stock is depleted" +msgstr "" + +#: stock/models.py:499 stock/templates/stock/item_notes.html:13 +#: stock/templates/stock/navbar.html:54 +msgid "Stock Item Notes" +msgstr "" + +#: stock/models.py:509 +msgid "Single unit purchase price at time of purchase" +msgstr "" + +#: stock/models.py:614 +msgid "Assigned to Customer" +msgstr "" + +#: stock/models.py:616 +msgid "Manually assigned to customer" +msgstr "" + +#: stock/models.py:629 +msgid "Returned from customer" +msgstr "" + +#: stock/models.py:631 +msgid "Returned to location" +msgstr "" + +#: stock/models.py:792 +msgid "Installed into stock item" +msgstr "" + +#: stock/models.py:800 +msgid "Installed stock item" +msgstr "" + +#: stock/models.py:824 +msgid "Uninstalled stock item" +msgstr "" + +#: stock/models.py:843 +msgid "Uninstalled into location" +msgstr "" + +#: stock/models.py:944 +msgid "Part is not set as trackable" +msgstr "" + +#: stock/models.py:950 +msgid "Quantity must be integer" +msgstr "" + +#: stock/models.py:956 +#, python-brace-format +msgid "Quantity must not exceed available stock quantity ({n})" +msgstr "" + +#: stock/models.py:959 +msgid "Serial numbers must be a list of integers" +msgstr "" + +#: stock/models.py:962 +msgid "Quantity does not match serial numbers" +msgstr "" + +#: stock/models.py:994 +msgid "Add serial number" +msgstr "" + +#: stock/models.py:997 +#, python-brace-format +msgid "Serialized {n} items" +msgstr "" + +#: stock/models.py:1075 +msgid "Split from existing stock" +msgstr "" + +#: stock/models.py:1113 +msgid "StockItem cannot be moved as it is not in stock" +msgstr "" + +#: stock/models.py:1556 +msgid "Title" +msgstr "" + +#: stock/models.py:1556 +msgid "Tracking entry title" +msgstr "" + +#: stock/models.py:1558 +msgid "Entry notes" +msgstr "" + +#: stock/models.py:1560 +msgid "Link to external page for further information" +msgstr "" + +#: stock/models.py:1620 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:1626 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:1644 +msgid "Test name" +msgstr "" + +#: stock/models.py:1650 templates/js/table_filters.js:212 +msgid "Test result" +msgstr "" + +#: stock/models.py:1656 +msgid "Test output value" +msgstr "" + +#: stock/models.py:1663 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:1669 +msgid "Test notes" +msgstr "" + +#: stock/templates/stock/item.html:12 +msgid "Stock Tracking Information" +msgstr "" + +#: stock/templates/stock/item.html:30 +msgid "New Entry" +msgstr "" + +#: stock/templates/stock/item_attachments.html:11 +msgid "Stock Item Attachments" +msgstr "" + +#: stock/templates/stock/item_base.html:24 +msgid "" +"You are not in the list of owners of this item. This stock item cannot be " +"edited." +msgstr "" + +#: stock/templates/stock/item_base.html:31 +msgid "This stock item is in production and cannot be edited." +msgstr "" + +#: stock/templates/stock/item_base.html:32 +msgid "Edit the stock item from the build view." +msgstr "" + +#: stock/templates/stock/item_base.html:45 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:53 +#, python-format +msgid "" +"This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgstr "" + +#: stock/templates/stock/item_base.html:61 +#, python-format +msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgstr "" + +#: stock/templates/stock/item_base.html:67 +msgid "" +"This stock item is serialized - it has a unique serial number and the " +"quantity cannot be adjusted." +msgstr "" + +#: stock/templates/stock/item_base.html:71 +msgid "This stock item cannot be deleted as it has child items" +msgstr "" + +#: stock/templates/stock/item_base.html:75 +msgid "" +"This stock item will be automatically deleted when all stock is depleted." +msgstr "" + +#: stock/templates/stock/item_base.html:95 +#: stock/templates/stock/item_base.html:369 templates/js/table_filters.js:145 +msgid "Expired" +msgstr "" + +#: stock/templates/stock/item_base.html:99 +#: stock/templates/stock/item_base.html:371 templates/js/table_filters.js:150 +msgid "Stale" +msgstr "" + +#: stock/templates/stock/item_base.html:136 templates/js/barcode.js:309 +#: templates/js/barcode.js:314 +msgid "Unlink Barcode" +msgstr "" + +#: stock/templates/stock/item_base.html:138 +msgid "Link Barcode" +msgstr "" + +#: stock/templates/stock/item_base.html:140 templates/stock_table.html:31 +msgid "Scan to Location" +msgstr "" + +#: stock/templates/stock/item_base.html:147 +msgid "Printing actions" +msgstr "" + +#: stock/templates/stock/item_base.html:151 +#: stock/templates/stock/item_tests.html:27 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item_base.html:160 +msgid "Stock adjustment actions" +msgstr "" + +#: stock/templates/stock/item_base.html:164 +#: stock/templates/stock/location.html:65 templates/stock_table.html:56 +msgid "Count stock" +msgstr "" + +#: stock/templates/stock/item_base.html:167 templates/stock_table.html:54 +msgid "Add stock" +msgstr "" + +#: stock/templates/stock/item_base.html:170 templates/stock_table.html:55 +msgid "Remove stock" +msgstr "" + +#: stock/templates/stock/item_base.html:173 +msgid "Serialize stock" +msgstr "" + +#: stock/templates/stock/item_base.html:177 +msgid "Transfer stock" +msgstr "" + +#: stock/templates/stock/item_base.html:180 +msgid "Assign to customer" +msgstr "" + +#: stock/templates/stock/item_base.html:183 +msgid "Return to stock" +msgstr "" + +#: stock/templates/stock/item_base.html:187 templates/js/stock.js:1299 +msgid "Uninstall stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:187 +msgid "Uninstall" +msgstr "" + +#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/location.html:62 +msgid "Stock actions" +msgstr "" + +#: stock/templates/stock/item_base.html:199 +msgid "Convert to variant" +msgstr "" + +#: stock/templates/stock/item_base.html:202 +msgid "Duplicate stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:204 +msgid "Edit stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:207 +msgid "Delete stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:219 +msgid "Stock Item Details" +msgstr "" + +#: stock/templates/stock/item_base.html:278 templates/js/build.js:442 +msgid "No location set" +msgstr "" + +#: stock/templates/stock/item_base.html:285 +msgid "Barcode Identifier" +msgstr "" + +#: stock/templates/stock/item_base.html:327 +msgid "Parent Item" +msgstr "" + +#: stock/templates/stock/item_base.html:369 +#, python-format +msgid "This StockItem expired on %(item.expiry_date)s" +msgstr "" + +#: stock/templates/stock/item_base.html:371 +#, python-format +msgid "This StockItem expires on %(item.expiry_date)s" +msgstr "" + +#: stock/templates/stock/item_base.html:378 templates/js/stock.js:662 +msgid "Last Updated" +msgstr "" + +#: stock/templates/stock/item_base.html:383 +msgid "Last Stocktake" +msgstr "" + +#: stock/templates/stock/item_base.html:387 +msgid "No stocktake performed" +msgstr "" + +#: stock/templates/stock/item_childs.html:12 +msgid "Child Stock Items" +msgstr "" + +#: stock/templates/stock/item_childs.html:20 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item_delete.html:9 +msgid "Are you sure you want to delete this stock item?" +msgstr "" + +#: stock/templates/stock/item_delete.html:12 +#, python-format +msgid "" +"This will remove %(qty)s units of %(full_name)s from stock." +msgstr "" + +#: stock/templates/stock/item_install.html:7 +msgid "Install another StockItem into this item." +msgstr "" + +#: stock/templates/stock/item_install.html:10 +msgid "Stock items can only be installed if they meet the following criteria" +msgstr "" + +#: stock/templates/stock/item_install.html:13 +msgid "The StockItem links to a Part which is in the BOM for this StockItem" +msgstr "" + +#: stock/templates/stock/item_install.html:14 +msgid "The StockItem is currently in stock" +msgstr "" + +#: stock/templates/stock/item_installed.html:11 +#: stock/templates/stock/navbar.html:27 +msgid "Installed Stock Items" +msgstr "" + +#: stock/templates/stock/item_serialize.html:5 +msgid "Create serialized items from this stock item." +msgstr "" + +#: stock/templates/stock/item_serialize.html:7 +msgid "Select quantity to serialize, and unique serial numbers." +msgstr "" + +#: stock/templates/stock/item_tests.html:11 +#: stock/templates/stock/navbar.html:19 stock/templates/stock/navbar.html:22 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item_tests.html:20 +msgid "Delete Test Data" +msgstr "" + +#: stock/templates/stock/item_tests.html:24 +msgid "Add Test Data" +msgstr "" + +#: stock/templates/stock/location.html:20 +msgid "" +"You are not in the list of owners of this location. This stock location " +"cannot be edited." +msgstr "" + +#: stock/templates/stock/location.html:37 +msgid "All stock items" +msgstr "" + +#: stock/templates/stock/location.html:55 +msgid "Check-in Items" +msgstr "" + +#: stock/templates/stock/location.html:71 +msgid "Location actions" +msgstr "" + +#: stock/templates/stock/location.html:73 +msgid "Edit location" +msgstr "" + +#: stock/templates/stock/location.html:75 +msgid "Delete location" +msgstr "" + +#: stock/templates/stock/location.html:87 +msgid "Location Details" +msgstr "" + +#: stock/templates/stock/location.html:92 +msgid "Location Path" +msgstr "" + +#: stock/templates/stock/location.html:97 +msgid "Location Description" +msgstr "" + +#: stock/templates/stock/location.html:102 +#: stock/templates/stock/location_navbar.html:11 +#: stock/templates/stock/location_navbar.html:18 +#: stock/templates/stock/sublocation.html:16 +msgid "Sublocations" +msgstr "" + +#: stock/templates/stock/location.html:112 +msgid "Stock Details" +msgstr "" + +#: stock/templates/stock/location.html:117 templates/InvenTree/search.html:279 +#: templates/stats.html:76 users/models.py:39 +msgid "Stock Locations" +msgstr "" + +#: stock/templates/stock/location_delete.html:7 +msgid "Are you sure you want to delete this stock location?" +msgstr "" + +#: stock/templates/stock/navbar.html:11 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/templates/stock/navbar.html:14 +msgid "History" +msgstr "" + +#: stock/templates/stock/navbar.html:30 +msgid "Installed Items" +msgstr "" + +#: stock/templates/stock/navbar.html:38 +msgid "Child Items" +msgstr "" + +#: stock/templates/stock/navbar.html:41 +msgid "Children" +msgstr "" + +#: stock/templates/stock/stock_adjust.html:43 +msgid "Remove item" +msgstr "" + +#: stock/templates/stock/stock_app_base.html:16 +msgid "Loading..." +msgstr "" + +#: stock/templates/stock/stock_uninstall.html:8 +msgid "The following stock items will be uninstalled" +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1332 +msgid "Convert Stock Item" +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:8 +#, python-format +msgid "This stock item is current an instance of %(part)s" +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:9 +msgid "It can be converted to one of the part variants listed below." +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:14 +msgid "This action cannot be easily undone" +msgstr "" + +#: stock/templates/stock/sublocation.html:23 templates/stock_table.html:37 +msgid "Printing Actions" +msgstr "" + +#: stock/templates/stock/sublocation.html:27 templates/stock_table.html:41 +msgid "Print labels" +msgstr "" + +#: stock/templates/stock/tracking_delete.html:6 +msgid "Are you sure you want to delete this stock tracking entry?" +msgstr "" + +#: stock/views.py:123 +msgid "Edit Stock Location" +msgstr "" + +#: stock/views.py:230 stock/views.py:1322 stock/views.py:1433 +#: stock/views.py:1798 +msgid "Owner is required (ownership control is enabled)" +msgstr "" + +#: stock/views.py:245 +msgid "Stock Location QR code" +msgstr "" + +#: stock/views.py:265 +msgid "Add Stock Item Attachment" +msgstr "" + +#: stock/views.py:311 +msgid "Edit Stock Item Attachment" +msgstr "" + +#: stock/views.py:327 +msgid "Delete Stock Item Attachment" +msgstr "" + +#: stock/views.py:343 +msgid "Assign to Customer" +msgstr "" + +#: stock/views.py:352 +msgid "Customer must be specified" +msgstr "" + +#: stock/views.py:376 +msgid "Return to Stock" +msgstr "" + +#: stock/views.py:385 +msgid "Specify a valid location" +msgstr "" + +#: stock/views.py:396 +msgid "Stock item returned from customer" +msgstr "" + +#: stock/views.py:407 +msgid "Delete All Test Data" +msgstr "" + +#: stock/views.py:424 +msgid "Confirm test data deletion" +msgstr "" + +#: stock/views.py:444 +msgid "Add Test Result" +msgstr "" + +#: stock/views.py:484 +msgid "Edit Test Result" +msgstr "" + +#: stock/views.py:501 +msgid "Delete Test Result" +msgstr "" + +#: stock/views.py:509 +msgid "Stock Export Options" +msgstr "" + +#: stock/views.py:630 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/views.py:656 +msgid "Install Stock Item" +msgstr "" + +#: stock/views.py:755 +msgid "Uninstall Stock Items" +msgstr "" + +#: stock/views.py:863 +msgid "Uninstalled stock items" +msgstr "" + +#: stock/views.py:888 +msgid "Adjust Stock" +msgstr "" + +#: stock/views.py:998 +msgid "Move Stock Items" +msgstr "" + +#: stock/views.py:998 +msgid "Move" +msgstr "" + +#: stock/views.py:999 +msgid "Count Stock Items" +msgstr "" + +#: stock/views.py:999 +msgid "Count" +msgstr "" + +#: stock/views.py:1000 +msgid "Remove From Stock" +msgstr "" + +#: stock/views.py:1000 +msgid "Take" +msgstr "" + +#: stock/views.py:1001 +msgid "Add Stock Items" +msgstr "" + +#: stock/views.py:1001 users/models.py:180 +msgid "Add" +msgstr "" + +#: stock/views.py:1002 +msgid "Delete Stock Items" +msgstr "" + +#: stock/views.py:1031 +msgid "Must enter integer value" +msgstr "" + +#: stock/views.py:1036 +msgid "Quantity must be positive" +msgstr "" + +#: stock/views.py:1043 +#, python-brace-format +msgid "Quantity must not exceed {x}" +msgstr "" + +#: stock/views.py:1107 +msgid "No action performed" +msgstr "" + +#: stock/views.py:1122 +#, python-brace-format +msgid "Added stock to {n} items" +msgstr "" + +#: stock/views.py:1137 +#, python-brace-format +msgid "Removed stock from {n} items" +msgstr "" + +#: stock/views.py:1150 +#, python-brace-format +msgid "Counted stock for {n} items" +msgstr "" + +#: stock/views.py:1190 +msgid "No items were moved" +msgstr "" + +#: stock/views.py:1193 +#, python-brace-format +msgid "Moved {n} items to {dest}" +msgstr "" + +#: stock/views.py:1212 +#, python-brace-format +msgid "Deleted {n} stock items" +msgstr "" + +#: stock/views.py:1224 +msgid "Edit Stock Item" +msgstr "" + +#: stock/views.py:1450 +msgid "Serialize Stock" +msgstr "" + +#: stock/views.py:1543 templates/js/build.js:210 +msgid "Create new Stock Item" +msgstr "" + +#: stock/views.py:1685 +msgid "Duplicate Stock Item" +msgstr "" + +#: stock/views.py:1767 +msgid "Quantity cannot be negative" +msgstr "" + +#: stock/views.py:1867 +msgid "Delete Stock Location" +msgstr "" + +#: stock/views.py:1880 +msgid "Delete Stock Item" +msgstr "" + +#: stock/views.py:1891 +msgid "Delete Stock Tracking Entry" +msgstr "" + +#: stock/views.py:1898 +msgid "Edit Stock Tracking Entry" +msgstr "" + +#: stock/views.py:1907 +msgid "Add Stock Tracking Entry" +msgstr "" + +#: templates/403.html:5 templates/403.html:11 +msgid "Permission Denied" +msgstr "" + +#: templates/403.html:14 +msgid "You do not have permission to view this page." +msgstr "" + +#: templates/404.html:5 templates/404.html:11 +msgid "Page Not Found" +msgstr "" + +#: templates/404.html:14 +msgid "The requested page does not exist" +msgstr "" + +#: templates/InvenTree/index.html:7 +msgid "Index" +msgstr "" + +#: templates/InvenTree/index.html:98 +msgid "Starred Parts" +msgstr "" + +#: templates/InvenTree/index.html:99 +msgid "Latest Parts" +msgstr "" + +#: templates/InvenTree/index.html:100 +msgid "BOM Waiting Validation" +msgstr "" + +#: templates/InvenTree/index.html:129 +msgid "Recently Updated" +msgstr "" + +#: templates/InvenTree/index.html:145 +msgid "Expired Stock" +msgstr "" + +#: templates/InvenTree/index.html:146 +msgid "Stale Stock" +msgstr "" + +#: templates/InvenTree/index.html:184 +msgid "Build Orders In Progress" +msgstr "" + +#: templates/InvenTree/index.html:185 +msgid "Overdue Build Orders" +msgstr "" + +#: templates/InvenTree/index.html:206 +msgid "Outstanding Purchase Orders" +msgstr "" + +#: templates/InvenTree/index.html:207 +msgid "Overdue Purchase Orders" +msgstr "" + +#: templates/InvenTree/index.html:229 +msgid "Outstanding Sales Orders" +msgstr "" + +#: templates/InvenTree/index.html:230 +msgid "Overdue Sales Orders" +msgstr "" + +#: templates/InvenTree/search.html:8 templates/InvenTree/search.html:14 +msgid "Search Results" +msgstr "" + +#: templates/InvenTree/search.html:24 +msgid "Enter a search query" +msgstr "" + +#: templates/InvenTree/search.html:268 templates/js/stock.js:300 +msgid "Shipped to customer" +msgstr "" + +#: templates/InvenTree/search.html:271 templates/js/stock.js:310 +msgid "No stock location set" +msgstr "" + +#: templates/InvenTree/settings/build.html:10 +msgid "Build Order Settings" +msgstr "" + +#: templates/InvenTree/settings/category.html:9 +msgid "Category Settings" +msgstr "" + +#: templates/InvenTree/settings/category.html:25 +msgid "Category Parameter Templates" +msgstr "" + +#: templates/InvenTree/settings/category.html:52 +msgid "No category parameter templates found" +msgstr "" + +#: templates/InvenTree/settings/category.html:70 +#: templates/InvenTree/settings/part.html:81 +msgid "Edit Template" +msgstr "" + +#: templates/InvenTree/settings/category.html:71 +#: templates/InvenTree/settings/part.html:82 +msgid "Delete Template" +msgstr "" + +#: templates/InvenTree/settings/global.html:10 +msgid "Global InvenTree Settings" +msgstr "" + +#: templates/InvenTree/settings/global.html:27 +msgid "Barcode Settings" +msgstr "" + +#: templates/InvenTree/settings/header.html:7 +msgid "Setting" +msgstr "" + +#: templates/InvenTree/settings/part.html:9 +msgid "Part Settings" +msgstr "" + +#: templates/InvenTree/settings/part.html:14 +msgid "Part Options" +msgstr "" + +#: templates/InvenTree/settings/part.html:40 +msgid "Part Parameter Templates" +msgstr "" + +#: templates/InvenTree/settings/part.html:61 +msgid "No part parameter templates found" +msgstr "" + +#: templates/InvenTree/settings/po.html:9 +msgid "Purchase Order Settings" +msgstr "" + +#: templates/InvenTree/settings/report.html:10 +msgid "Report Settings" +msgstr "" + +#: templates/InvenTree/settings/setting.html:23 +msgid "No value set" +msgstr "" + +#: templates/InvenTree/settings/setting.html:31 +msgid "Edit setting" +msgstr "" + +#: templates/InvenTree/settings/settings.html:8 +#: templates/InvenTree/settings/settings.html:14 templates/navbar.html:84 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/so.html:9 +msgid "Sales Order Settings" +msgstr "" + +#: templates/InvenTree/settings/stock.html:9 +msgid "Stock Settings" +msgstr "" + +#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:49 +msgid "Stock Options" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:3 +#: templates/InvenTree/settings/user.html:10 +msgid "User Settings" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:6 +msgid "Account" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:9 +msgid "Theme" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:13 +msgid "InvenTree Settings" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:16 +msgid "Global" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:19 +msgid "Report" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:22 +msgid "Categories" +msgstr "" + +#: templates/InvenTree/settings/theme.html:10 +msgid "Theme Settings" +msgstr "" + +#: templates/InvenTree/settings/theme.html:17 +msgid "Color Themes" +msgstr "" + +#: templates/InvenTree/settings/theme.html:29 +#, python-format +msgid "" +"\n" +"\t\tThe CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected " +"color theme was not found.
    \n" +"\t\tPlease select another color theme :)\n" +"\t" +msgstr "" + +#: templates/InvenTree/settings/user.html:16 +msgid "User Information" +msgstr "" + +#: templates/InvenTree/settings/user.html:21 +msgid "Change Password" +msgstr "" + +#: templates/InvenTree/settings/user.html:28 +#: templates/registration/login.html:59 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:32 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:36 +msgid "Last Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:40 +msgid "Email Address" +msgstr "" + +#: templates/about.html:13 +msgid "InvenTree Version Information" +msgstr "" + +#: templates/about.html:22 +msgid "InvenTree Version" +msgstr "" + +#: templates/about.html:26 +msgid "Up to Date" +msgstr "" + +#: templates/about.html:28 +msgid "Update Available" +msgstr "" + +#: templates/about.html:34 +msgid "Django Version" +msgstr "" + +#: templates/about.html:41 +msgid "Commit Hash" +msgstr "" + +#: templates/about.html:48 +msgid "Commit Date" +msgstr "" + +#: templates/about.html:53 +msgid "InvenTree Documentation" +msgstr "" + +#: templates/about.html:58 +msgid "View Code on GitHub" +msgstr "" + +#: templates/about.html:63 +msgid "Get the App" +msgstr "" + +#: templates/about.html:68 +msgid "Submit Bug Report" +msgstr "" + +#: templates/attachment_table.html:6 +msgid "Add Attachment" +msgstr "" + +#: templates/attachment_table.html:15 +msgid "File" +msgstr "" + +#: templates/attachment_table.html:17 +msgid "Uploaded" +msgstr "" + +#: templates/attachment_table.html:35 +msgid "Delete attachment" +msgstr "" + +#: templates/image_download.html:8 +msgid "Specify URL for downloading image" +msgstr "" + +#: templates/image_download.html:11 +msgid "Must be a valid image URL" +msgstr "" + +#: templates/image_download.html:12 +msgid "Remote server must be accessible" +msgstr "" + +#: templates/image_download.html:13 +msgid "Remote image must not exceed maximum allowable file size" +msgstr "" + +#: templates/js/barcode.js:8 +msgid "Scan barcode data here using wedge scanner" +msgstr "" + +#: templates/js/barcode.js:10 +msgid "Enter barcode data" +msgstr "" + +#: templates/js/barcode.js:14 +msgid "Barcode" +msgstr "" + +#: templates/js/barcode.js:32 +msgid "Enter optional notes for stock transfer" +msgstr "" + +#: templates/js/barcode.js:33 +msgid "Enter notes" +msgstr "" + +#: templates/js/barcode.js:71 +msgid "Server error" +msgstr "" + +#: templates/js/barcode.js:92 +msgid "Unknown response from server" +msgstr "" + +#: templates/js/barcode.js:119 templates/js/modals.js:857 +msgid "Invalid server response" +msgstr "" + +#: templates/js/barcode.js:212 +msgid "Scan barcode data below" +msgstr "" + +#: templates/js/barcode.js:270 +msgid "No URL in response" +msgstr "" + +#: templates/js/barcode.js:288 +msgid "Link Barcode to Stock Item" +msgstr "" + +#: templates/js/barcode.js:311 +msgid "" +"This will remove the association between this stock item and the barcode" +msgstr "" + +#: templates/js/barcode.js:317 +msgid "Unlink" +msgstr "" + +#: templates/js/barcode.js:376 +msgid "Remove stock item" +msgstr "" + +#: templates/js/barcode.js:418 +msgid "Check Stock Items into Location" +msgstr "" + +#: templates/js/barcode.js:422 templates/js/barcode.js:547 +msgid "Check In" +msgstr "" + +#: templates/js/barcode.js:462 templates/js/barcode.js:586 +msgid "Error transferring stock" +msgstr "" + +#: templates/js/barcode.js:481 +msgid "Stock Item already scanned" +msgstr "" + +#: templates/js/barcode.js:485 +msgid "Stock Item already in this location" +msgstr "" + +#: templates/js/barcode.js:492 +msgid "Added stock item" +msgstr "" + +#: templates/js/barcode.js:499 +msgid "Barcode does not match Stock Item" +msgstr "" + +#: templates/js/barcode.js:542 +msgid "Check Into Location" +msgstr "" + +#: templates/js/barcode.js:605 +msgid "Barcode does not match a valid location" +msgstr "" + +#: templates/js/bom.js:175 templates/js/build.js:934 +msgid "Open subassembly" +msgstr "" + +#: templates/js/bom.js:261 +msgid "No pricing available" +msgstr "" + +#: templates/js/bom.js:272 templates/js/filters.js:167 +#: templates/js/filters.js:397 +msgid "true" +msgstr "" + +#: templates/js/bom.js:273 templates/js/filters.js:171 +#: templates/js/filters.js:398 +msgid "false" +msgstr "" + +#: templates/js/bom.js:290 templates/js/bom.js:376 +msgid "View BOM" +msgstr "" + +#: templates/js/bom.js:350 +msgid "Validate BOM Item" +msgstr "" + +#: templates/js/bom.js:352 +msgid "This line has been validated" +msgstr "" + +#: templates/js/bom.js:354 +msgid "Edit BOM Item" +msgstr "" + +#: templates/js/bom.js:356 +msgid "Delete BOM Item" +msgstr "" + +#: templates/js/bom.js:447 templates/js/build.js:305 templates/js/build.js:1032 +msgid "No BOM items found" +msgstr "" + +#: templates/js/build.js:56 +msgid "Auto-allocate stock items to this output" +msgstr "" + +#: templates/js/build.js:62 +msgid "Complete build output" +msgstr "" + +#: templates/js/build.js:71 +msgid "Unallocate stock from build output" +msgstr "" + +#: templates/js/build.js:77 +msgid "Delete build output" +msgstr "" + +#: templates/js/build.js:209 templates/stock_table.html:20 +msgid "New Stock Item" +msgstr "" + +#: templates/js/build.js:493 +msgid "Required Part" +msgstr "" + +#: templates/js/build.js:514 +msgid "Quantity Per" +msgstr "" + +#: templates/js/build.js:582 templates/js/build.js:996 +#: templates/stock_table.html:58 +msgid "Order stock" +msgstr "" + +#: templates/js/build.js:632 +msgid "No builds matching query" +msgstr "" + +#: templates/js/build.js:649 templates/js/part.js:324 templates/js/part.js:546 +#: templates/js/stock.js:511 templates/js/stock.js:938 +#: templates/js/stock.js:1331 +msgid "Select" +msgstr "" + +#: templates/js/build.js:669 +msgid "Build order is overdue" +msgstr "" + +#: templates/js/build.js:767 +msgid "No parts allocated for" +msgstr "" + +#: templates/js/company.js:74 +msgid "Parts Supplied" +msgstr "" + +#: templates/js/company.js:83 +msgid "Parts Manufactured" +msgstr "" + +#: templates/js/company.js:96 +msgid "No company information found" +msgstr "" + +#: templates/js/company.js:129 +msgid "No manufacturer parts found" +msgstr "" + +#: templates/js/company.js:148 templates/js/company.js:246 +#: templates/js/part.js:60 templates/js/part.js:145 +msgid "Template part" +msgstr "" + +#: templates/js/company.js:152 templates/js/company.js:250 +#: templates/js/part.js:64 templates/js/part.js:149 +msgid "Assembled part" +msgstr "" + +#: templates/js/company.js:227 +msgid "No supplier parts found" +msgstr "" + +#: templates/js/filters.js:193 +msgid "Select filter" +msgstr "" + +#: templates/js/filters.js:268 +msgid "Add new filter" +msgstr "" + +#: templates/js/filters.js:271 +msgid "Clear all filters" +msgstr "" + +#: templates/js/filters.js:296 +msgid "Create filter" +msgstr "" + +#: templates/js/label.js:10 templates/js/report.js:98 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/label.js:11 +msgid "Stock item(s) must be selected before printing labels" +msgstr "" + +#: templates/js/label.js:29 templates/js/label.js:79 +msgid "No Labels Found" +msgstr "" + +#: templates/js/label.js:30 +msgid "No labels found which match selected stock item(s)" +msgstr "" + +#: templates/js/label.js:61 +msgid "Select Stock Locations" +msgstr "" + +#: templates/js/label.js:62 +msgid "Stock location(s) must be selected before printing labels" +msgstr "" + +#: templates/js/label.js:80 +msgid "No labels found which match selected stock location(s)" +msgstr "" + +#: templates/js/label.js:154 +msgid "stock items selected" +msgstr "" + +#: templates/js/label.js:162 +msgid "Select Label" +msgstr "" + +#: templates/js/label.js:177 +msgid "Select Label Template" +msgstr "" + +#: templates/js/modals.js:256 +msgid "Waiting for server..." +msgstr "" + +#: templates/js/modals.js:406 +msgid "Show Error Information" +msgstr "" + +#: templates/js/modals.js:473 templates/modals.html:73 +msgid "Accept" +msgstr "" + +#: templates/js/modals.js:474 templates/modals.html:72 +msgid "Cancel" +msgstr "" + +#: templates/js/modals.js:538 +msgid "Loading Data" +msgstr "" + +#: templates/js/modals.js:549 templates/js/modals.js:808 +#: templates/modals.html:29 templates/modals.html:53 +msgid "Submit" +msgstr "" + +#: templates/js/modals.js:550 templates/js/modals.js:809 +#: templates/modals.html:28 templates/modals.html:52 templates/modals.html:93 +msgid "Close" +msgstr "" + +#: templates/js/modals.js:760 +msgid "Invalid response from server" +msgstr "" + +#: templates/js/modals.js:760 +msgid "Form data missing from server response" +msgstr "" + +#: templates/js/modals.js:773 +msgid "Error posting form data" +msgstr "" + +#: templates/js/modals.js:857 +msgid "JSON response missing form data" +msgstr "" + +#: templates/js/modals.js:867 +msgid "No Response" +msgstr "" + +#: templates/js/modals.js:868 +msgid "No response from the InvenTree server" +msgstr "" + +#: templates/js/modals.js:872 +msgid "Error 400: Bad Request" +msgstr "" + +#: templates/js/modals.js:873 +msgid "Server returned error code 400" +msgstr "" + +#: templates/js/modals.js:877 +msgid "Error 401: Not Authenticated" +msgstr "" + +#: templates/js/modals.js:878 +msgid "Authentication credentials not supplied" +msgstr "" + +#: templates/js/modals.js:882 +msgid "Error 403: Permission Denied" +msgstr "" + +#: templates/js/modals.js:883 +msgid "You do not have the required permissions to access this function" +msgstr "" + +#: templates/js/modals.js:887 +msgid "Error 404: Resource Not Found" +msgstr "" + +#: templates/js/modals.js:888 +msgid "The requested resource could not be located on the server" +msgstr "" + +#: templates/js/modals.js:892 +msgid "Error 408: Timeout" +msgstr "" + +#: templates/js/modals.js:893 +msgid "Connection timeout while requesting data from server" +msgstr "" + +#: templates/js/modals.js:896 +msgid "Error requesting form data" +msgstr "" + +#: templates/js/order.js:138 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/order.js:162 templates/js/order.js:257 +msgid "Order is overdue" +msgstr "" + +#: templates/js/order.js:234 +msgid "No sales orders found" +msgstr "" + +#: templates/js/part.js:52 templates/js/part.js:137 +msgid "Trackable part" +msgstr "" + +#: templates/js/part.js:56 templates/js/part.js:141 +msgid "Virtual part" +msgstr "" + +#: templates/js/part.js:68 +msgid "Starred part" +msgstr "" + +#: templates/js/part.js:72 +msgid "Salable part" +msgstr "" + +#: templates/js/part.js:186 +msgid "No variants found" +msgstr "" + +#: templates/js/part.js:272 templates/js/part.js:452 +msgid "No parts found" +msgstr "" + +#: templates/js/part.js:391 +msgid "No category" +msgstr "" + +#: templates/js/part.js:409 templates/js/table_filters.js:318 +msgid "Low stock" +msgstr "" + +#: templates/js/part.js:571 templates/js/stock.js:962 +msgid "Path" +msgstr "" + +#: templates/js/part.js:588 +msgid "YES" +msgstr "" + +#: templates/js/part.js:590 +msgid "NO" +msgstr "" + +#: templates/js/part.js:624 +msgid "No test templates matching query" +msgstr "" + +#: templates/js/part.js:675 templates/js/stock.js:75 +msgid "Edit test result" +msgstr "" + +#: templates/js/part.js:676 templates/js/stock.js:76 +msgid "Delete test result" +msgstr "" + +#: templates/js/part.js:682 +msgid "This test is defined for a parent part" +msgstr "" + +#: templates/js/report.js:47 +msgid "items selected" +msgstr "" + +#: templates/js/report.js:55 +msgid "Select Report Template" +msgstr "" + +#: templates/js/report.js:70 +msgid "Select Test Report Template" +msgstr "" + +#: templates/js/report.js:99 +msgid "Stock item(s) must be selected before printing reports" +msgstr "" + +#: templates/js/report.js:116 templates/js/report.js:169 +#: templates/js/report.js:223 templates/js/report.js:277 +#: templates/js/report.js:331 +msgid "No Reports Found" +msgstr "" + +#: templates/js/report.js:117 +msgid "No report templates found which match selected stock item(s)" +msgstr "" + +#: templates/js/report.js:152 +msgid "Select Builds" +msgstr "" + +#: templates/js/report.js:153 +msgid "Build(s) must be selected before printing reports" +msgstr "" + +#: templates/js/report.js:170 +msgid "No report templates found which match selected build(s)" +msgstr "" + +#: templates/js/report.js:205 +msgid "Select Parts" +msgstr "" + +#: templates/js/report.js:206 +msgid "Part(s) must be selected before printing reports" +msgstr "" + +#: templates/js/report.js:224 +msgid "No report templates found which match selected part(s)" +msgstr "" + +#: templates/js/report.js:259 +msgid "Select Purchase Orders" +msgstr "" + +#: templates/js/report.js:260 +msgid "Purchase Order(s) must be selected before printing report" +msgstr "" + +#: templates/js/report.js:278 templates/js/report.js:332 +msgid "No report templates found which match selected orders" +msgstr "" + +#: templates/js/report.js:313 +msgid "Select Sales Orders" +msgstr "" + +#: templates/js/report.js:314 +msgid "Sales Order(s) must be selected before printing report" +msgstr "" + +#: templates/js/stock.js:38 +msgid "PASS" +msgstr "" + +#: templates/js/stock.js:40 +msgid "FAIL" +msgstr "" + +#: templates/js/stock.js:45 +msgid "NO RESULT" +msgstr "" + +#: templates/js/stock.js:71 +msgid "Add test result" +msgstr "" + +#: templates/js/stock.js:90 +msgid "No test results found" +msgstr "" + +#: templates/js/stock.js:132 +msgid "Test Date" +msgstr "" + +#: templates/js/stock.js:292 +msgid "In production" +msgstr "" + +#: templates/js/stock.js:296 +msgid "Installed in Stock Item" +msgstr "" + +#: templates/js/stock.js:304 +msgid "Assigned to Sales Order" +msgstr "" + +#: templates/js/stock.js:336 +msgid "No stock items matching query" +msgstr "" + +#: templates/js/stock.js:357 +msgid "items" +msgstr "" + +#: templates/js/stock.js:449 +msgid "batches" +msgstr "" + +#: templates/js/stock.js:476 +msgid "locations" +msgstr "" + +#: templates/js/stock.js:478 +msgid "Undefined location" +msgstr "" + +#: templates/js/stock.js:579 +msgid "Stock item is in production" +msgstr "" + +#: templates/js/stock.js:584 +msgid "Stock item assigned to sales order" +msgstr "" + +#: templates/js/stock.js:587 +msgid "Stock item assigned to customer" +msgstr "" + +#: templates/js/stock.js:591 +msgid "Stock item has expired" +msgstr "" + +#: templates/js/stock.js:593 +msgid "Stock item will expire soon" +msgstr "" + +#: templates/js/stock.js:597 +msgid "Stock item has been allocated" +msgstr "" + +#: templates/js/stock.js:601 +msgid "Stock item has been installed in another item" +msgstr "" + +#: templates/js/stock.js:609 +msgid "Stock item has been rejected" +msgstr "" + +#: templates/js/stock.js:613 +msgid "Stock item is lost" +msgstr "" + +#: templates/js/stock.js:616 +msgid "Stock item is destroyed" +msgstr "" + +#: templates/js/stock.js:620 templates/js/table_filters.js:138 +msgid "Depleted" +msgstr "" + +#: templates/js/stock.js:649 +msgid "Stocktake" +msgstr "" + +#: templates/js/stock.js:825 +msgid "Stock Status" +msgstr "" + +#: templates/js/stock.js:840 +msgid "Set Stock Status" +msgstr "" + +#: templates/js/stock.js:854 +msgid "Select Status Code" +msgstr "" + +#: templates/js/stock.js:855 +msgid "Status code must be selected" +msgstr "" + +#: templates/js/stock.js:1050 +msgid "No user information" +msgstr "" + +#: templates/js/stock.js:1060 +msgid "Edit tracking entry" +msgstr "" + +#: templates/js/stock.js:1061 +msgid "Delete tracking entry" +msgstr "" + +#: templates/js/stock.js:1170 +msgid "Create New Location" +msgstr "" + +#: templates/js/stock.js:1269 +msgid "Serial" +msgstr "" + +#: templates/js/stock.js:1362 templates/js/table_filters.js:171 +msgid "Installed" +msgstr "" + +#: templates/js/stock.js:1387 +msgid "Install item" +msgstr "" + +#: templates/js/table_filters.js:42 +msgid "Trackable Part" +msgstr "" + +#: templates/js/table_filters.js:46 +msgid "Validated" +msgstr "" + +#: templates/js/table_filters.js:71 +msgid "Include locations" +msgstr "" + +#: templates/js/table_filters.js:81 templates/js/table_filters.js:82 +#: templates/js/table_filters.js:295 +msgid "Include subcategories" +msgstr "" + +#: templates/js/table_filters.js:92 templates/js/table_filters.js:181 +msgid "Is Serialized" +msgstr "" + +#: templates/js/table_filters.js:95 templates/js/table_filters.js:188 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/table_filters.js:96 templates/js/table_filters.js:189 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/table_filters.js:99 templates/js/table_filters.js:192 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/table_filters.js:100 templates/js/table_filters.js:193 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/table_filters.js:103 templates/js/table_filters.js:104 +#: templates/js/table_filters.js:184 templates/js/table_filters.js:185 +msgid "Serial number" +msgstr "" + +#: templates/js/table_filters.js:108 templates/js/table_filters.js:202 +msgid "Batch code" +msgstr "" + +#: templates/js/table_filters.js:118 templates/js/table_filters.js:285 +msgid "Active parts" +msgstr "" + +#: templates/js/table_filters.js:119 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/table_filters.js:124 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/table_filters.js:128 +msgid "Is allocated" +msgstr "" + +#: templates/js/table_filters.js:129 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/table_filters.js:134 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/table_filters.js:139 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/table_filters.js:146 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/table_filters.js:151 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/table_filters.js:157 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/table_filters.js:161 +msgid "In Production" +msgstr "" + +#: templates/js/table_filters.js:162 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/table_filters.js:166 +msgid "Include Variants" +msgstr "" + +#: templates/js/table_filters.js:167 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/table_filters.js:172 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/table_filters.js:176 +msgid "Sent to customer" +msgstr "" + +#: templates/js/table_filters.js:177 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/table_filters.js:197 templates/js/table_filters.js:198 +msgid "Stock status" +msgstr "" + +#: templates/js/table_filters.js:231 +msgid "Build status" +msgstr "" + +#: templates/js/table_filters.js:250 templates/js/table_filters.js:267 +msgid "Order status" +msgstr "" + +#: templates/js/table_filters.js:255 templates/js/table_filters.js:272 +msgid "Outstanding" +msgstr "" + +#: templates/js/table_filters.js:296 +msgid "Include parts in subcategories" +msgstr "" + +#: templates/js/table_filters.js:300 +msgid "Has IPN" +msgstr "" + +#: templates/js/table_filters.js:301 +msgid "Part has internal part number" +msgstr "" + +#: templates/js/table_filters.js:306 +msgid "Show active parts" +msgstr "" + +#: templates/js/table_filters.js:314 +msgid "Stock available" +msgstr "" + +#: templates/js/table_filters.js:330 +msgid "Starred" +msgstr "" + +#: templates/js/table_filters.js:342 +msgid "Purchasable" +msgstr "" + +#: templates/js/tables.js:321 +msgid "Loading data" +msgstr "" + +#: templates/js/tables.js:324 +msgid "rows per page" +msgstr "" + +#: templates/js/tables.js:327 +msgid "Showing" +msgstr "" + +#: templates/js/tables.js:327 +msgid "to" +msgstr "" + +#: templates/js/tables.js:327 +msgid "of" +msgstr "" + +#: templates/js/tables.js:327 +msgid "rows" +msgstr "" + +#: templates/js/tables.js:330 templates/search_form.html:6 +#: templates/search_form.html:8 +msgid "Search" +msgstr "" + +#: templates/js/tables.js:333 +msgid "No matching results" +msgstr "" + +#: templates/js/tables.js:336 +msgid "Hide/Show pagination" +msgstr "" + +#: templates/js/tables.js:339 +msgid "Refresh" +msgstr "" + +#: templates/js/tables.js:342 +msgid "Toggle" +msgstr "" + +#: templates/js/tables.js:345 +msgid "Columns" +msgstr "" + +#: templates/js/tables.js:348 +msgid "All" +msgstr "" + +#: templates/modals.html:21 templates/modals.html:46 +msgid "Form errors exist" +msgstr "" + +#: templates/navbar.html:33 +msgid "Buy" +msgstr "" + +#: templates/navbar.html:43 +msgid "Sell" +msgstr "" + +#: templates/navbar.html:55 +msgid "Scan Barcode" +msgstr "" + +#: templates/navbar.html:77 users/models.py:36 +msgid "Admin" +msgstr "" + +#: templates/navbar.html:79 +msgid "Logout" +msgstr "" + +#: templates/navbar.html:81 templates/registration/login.html:90 +msgid "Login" +msgstr "" + +#: templates/navbar.html:104 +msgid "About InvenTree" +msgstr "" + +#: templates/qr_code.html:11 +msgid "QR data not provided" +msgstr "" + +#: templates/registration/logged_out.html:51 +msgid "You have been logged out" +msgstr "" + +#: templates/registration/logged_out.html:52 +#: templates/registration/password_reset_complete.html:52 +#: templates/registration/password_reset_done.html:59 +msgid "Return to login screen" +msgstr "" + +#: templates/registration/login.html:65 +msgid "Enter username" +msgstr "" + +#: templates/registration/login.html:71 +msgid "Password" +msgstr "" + +#: templates/registration/login.html:84 +msgid "Username / password combination is incorrect" +msgstr "" + +#: templates/registration/login.html:96 +#: templates/registration/password_reset_form.html:52 +msgid "Forgotten your password?" +msgstr "" + +#: templates/registration/login.html:96 +msgid "Click here to reset" +msgstr "" + +#: templates/registration/password_reset_complete.html:51 +msgid "Password reset complete" +msgstr "" + +#: templates/registration/password_reset_confirm.html:53 +#: templates/registration/password_reset_confirm.html:57 +msgid "Change password" +msgstr "" + +#: templates/registration/password_reset_confirm.html:61 +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +#: templates/registration/password_reset_done.html:52 +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +#: templates/registration/password_reset_done.html:55 +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#: templates/registration/password_reset_form.html:53 +msgid "Enter your email address below." +msgstr "" + +#: templates/registration/password_reset_form.html:54 +msgid "An email will be sent with password reset instructions." +msgstr "" + +#: templates/registration/password_reset_form.html:59 +msgid "Send email" +msgstr "" + +#: templates/stats.html:9 +msgid "Server" +msgstr "" + +#: templates/stats.html:13 +msgid "Instance Name" +msgstr "" + +#: templates/stats.html:19 +msgid "Server status" +msgstr "" + +#: templates/stats.html:22 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:24 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:31 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:34 +msgid "Background worker not running" +msgstr "" + +#: templates/stats.html:42 +msgid "Email Settings" +msgstr "" + +#: templates/stats.html:45 +msgid "Email settings not configured" +msgstr "" + +#: templates/stock_table.html:14 +msgid "Export Stock Information" +msgstr "" + +#: templates/stock_table.html:27 +msgid "Barcode Actions" +msgstr "" + +#: templates/stock_table.html:43 +msgid "Print test reports" +msgstr "" + +#: templates/stock_table.html:54 +msgid "Add to selected stock items" +msgstr "" + +#: templates/stock_table.html:55 +msgid "Remove from selected stock items" +msgstr "" + +#: templates/stock_table.html:56 +msgid "Stocktake selected stock items" +msgstr "" + +#: templates/stock_table.html:57 +msgid "Move selected stock items" +msgstr "" + +#: templates/stock_table.html:57 +msgid "Move stock" +msgstr "" + +#: templates/stock_table.html:58 +msgid "Order selected items" +msgstr "" + +#: templates/stock_table.html:59 +msgid "Change status" +msgstr "" + +#: templates/stock_table.html:59 +msgid "Change stock status" +msgstr "" + +#: templates/stock_table.html:62 +msgid "Delete selected items" +msgstr "" + +#: templates/stock_table.html:62 +msgid "Delete Stock" +msgstr "" + +#: templates/yesnolabel.html:4 +msgid "Yes" +msgstr "" + +#: templates/yesnolabel.html:6 +msgid "No" +msgstr "" + +#: users/admin.py:64 +msgid "Users" +msgstr "" + +#: users/admin.py:65 +msgid "Select which users are assigned to this group" +msgstr "" + +#: users/admin.py:187 +msgid "The following users are members of multiple groups:" +msgstr "" + +#: users/admin.py:210 +msgid "Personal info" +msgstr "" + +#: users/admin.py:211 +msgid "Permissions" +msgstr "" + +#: users/admin.py:214 +msgid "Important dates" +msgstr "" + +#: users/models.py:167 +msgid "Permission set" +msgstr "" + +#: users/models.py:175 +msgid "Group" +msgstr "" + +#: users/models.py:178 +msgid "View" +msgstr "" + +#: users/models.py:178 +msgid "Permission to view items" +msgstr "" + +#: users/models.py:180 +msgid "Permission to add items" +msgstr "" + +#: users/models.py:182 +msgid "Change" +msgstr "" + +#: users/models.py:182 +msgid "Permissions to edit items" +msgstr "" + +#: users/models.py:184 +msgid "Permission to delete items" +msgstr "" diff --git a/InvenTree/locale/ja/LC_MESSAGES/django.po b/InvenTree/locale/ja/LC_MESSAGES/django.po new file mode 100644 index 0000000000..1df1660be4 --- /dev/null +++ b/InvenTree/locale/ja/LC_MESSAGES/django.po @@ -0,0 +1,7234 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-21 12:28+1000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: InvenTree/api.py:64 +msgid "API endpoint not found" +msgstr "" + +#: InvenTree/api.py:110 +msgid "No action specified" +msgstr "" + +#: InvenTree/api.py:124 +msgid "No matching action found" +msgstr "" + +#: InvenTree/fields.py:44 +msgid "Enter date" +msgstr "" + +#: InvenTree/forms.py:110 build/forms.py:99 build/forms.py:120 +#: build/forms.py:142 build/forms.py:166 build/forms.py:188 build/forms.py:223 +#: order/forms.py:27 order/forms.py:38 order/forms.py:49 order/forms.py:60 +#: order/forms.py:71 part/forms.py:134 +msgid "Confirm" +msgstr "" + +#: InvenTree/forms.py:126 +msgid "Confirm delete" +msgstr "" + +#: InvenTree/forms.py:127 +msgid "Confirm item deletion" +msgstr "" + +#: InvenTree/forms.py:159 templates/registration/login.html:77 +msgid "Enter password" +msgstr "" + +#: InvenTree/forms.py:160 +msgid "Enter new password" +msgstr "" + +#: InvenTree/forms.py:167 +msgid "Confirm password" +msgstr "" + +#: InvenTree/forms.py:168 +msgid "Confirm new password" +msgstr "" + +#: InvenTree/forms.py:203 +msgid "Apply Theme" +msgstr "" + +#: InvenTree/forms.py:233 +msgid "Select Category" +msgstr "" + +#: InvenTree/helpers.py:375 order/models.py:245 order/models.py:344 +#: stock/views.py:1763 +msgid "Invalid quantity provided" +msgstr "" + +#: InvenTree/helpers.py:378 +msgid "Empty serial number string" +msgstr "" + +#: InvenTree/helpers.py:399 +#, python-brace-format +msgid "Duplicate serial: {n}" +msgstr "" + +#: InvenTree/helpers.py:403 InvenTree/helpers.py:406 InvenTree/helpers.py:409 +#, python-brace-format +msgid "Invalid group: {g}" +msgstr "" + +#: InvenTree/helpers.py:414 +#, python-brace-format +msgid "Duplicate serial: {g}" +msgstr "" + +#: InvenTree/helpers.py:422 +msgid "No serial numbers found" +msgstr "" + +#: InvenTree/helpers.py:426 +#, python-brace-format +msgid "Number of unique serial number ({s}) must match quantity ({q})" +msgstr "" + +#: InvenTree/models.py:59 stock/models.py:1662 +msgid "Attachment" +msgstr "" + +#: InvenTree/models.py:60 +msgid "Select file to attach" +msgstr "" + +#: InvenTree/models.py:62 templates/attachment_table.html:16 +msgid "Comment" +msgstr "" + +#: InvenTree/models.py:62 +msgid "File comment" +msgstr "" + +#: InvenTree/models.py:68 InvenTree/models.py:69 part/models.py:1908 +#: report/templates/report/inventree_test_report_base.html:91 +#: templates/js/stock.js:1041 +msgid "User" +msgstr "" + +#: InvenTree/models.py:72 +msgid "upload date" +msgstr "" + +#: InvenTree/models.py:107 InvenTree/models.py:108 label/models.py:101 +#: part/models.py:686 part/models.py:2049 part/templates/part/params.html:27 +#: report/models.py:179 templates/InvenTree/search.html:137 +#: templates/InvenTree/search.html:289 templates/js/part.js:110 +#: templates/js/part.js:553 templates/js/stock.js:944 +msgid "Name" +msgstr "" + +#: InvenTree/models.py:114 build/models.py:134 +#: build/templates/build/detail.html:21 company/models.py:342 +#: company/models.py:494 company/templates/company/detail.html:27 +#: company/templates/company/manufacturer_part_base.html:72 +#: company/templates/company/supplier_part_base.html:71 +#: company/templates/company/supplier_part_detail.html:31 label/models.py:108 +#: order/models.py:101 order/templates/order/purchase_order_detail.html:168 +#: part/models.py:710 part/templates/part/detail.html:54 +#: part/templates/part/set_category.html:14 report/models.py:192 +#: report/models.py:505 report/models.py:544 +#: report/templates/report/inventree_build_order_base.html:118 +#: templates/InvenTree/search.html:144 templates/InvenTree/search.html:224 +#: templates/InvenTree/search.html:296 +#: templates/InvenTree/settings/header.html:9 templates/js/bom.js:190 +#: templates/js/build.js:677 templates/js/build.js:944 +#: templates/js/company.js:56 templates/js/order.js:183 +#: templates/js/order.js:280 templates/js/part.js:169 templates/js/part.js:252 +#: templates/js/part.js:371 templates/js/part.js:565 templates/js/part.js:643 +#: templates/js/stock.js:554 templates/js/stock.js:956 +#: templates/js/stock.js:1015 +msgid "Description" +msgstr "" + +#: InvenTree/models.py:115 +msgid "Description (optional)" +msgstr "" + +#: InvenTree/models.py:123 +msgid "parent" +msgstr "" + +#: InvenTree/settings.py:493 +msgid "English" +msgstr "" + +#: InvenTree/settings.py:494 +msgid "French" +msgstr "" + +#: InvenTree/settings.py:495 +msgid "German" +msgstr "" + +#: InvenTree/settings.py:496 +msgid "Polish" +msgstr "" + +#: InvenTree/settings.py:497 +msgid "Turkish" +msgstr "" + +#: InvenTree/status.py:93 +msgid "Background worker check failed" +msgstr "" + +#: InvenTree/status.py:97 +msgid "Email backend not configured" +msgstr "" + +#: InvenTree/status.py:100 +msgid "InvenTree system health checks failed" +msgstr "" + +#: InvenTree/status_codes.py:94 InvenTree/status_codes.py:135 +#: InvenTree/status_codes.py:228 +msgid "Pending" +msgstr "" + +#: InvenTree/status_codes.py:95 +msgid "Placed" +msgstr "" + +#: InvenTree/status_codes.py:96 InvenTree/status_codes.py:231 +msgid "Complete" +msgstr "" + +#: InvenTree/status_codes.py:97 InvenTree/status_codes.py:137 +#: InvenTree/status_codes.py:230 +msgid "Cancelled" +msgstr "" + +#: InvenTree/status_codes.py:98 InvenTree/status_codes.py:138 +#: InvenTree/status_codes.py:180 +msgid "Lost" +msgstr "" + +#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:139 +#: InvenTree/status_codes.py:182 +msgid "Returned" +msgstr "" + +#: InvenTree/status_codes.py:136 +#: order/templates/order/sales_order_base.html:124 +msgid "Shipped" +msgstr "" + +#: InvenTree/status_codes.py:176 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:177 +msgid "Attention needed" +msgstr "" + +#: InvenTree/status_codes.py:178 +msgid "Damaged" +msgstr "" + +#: InvenTree/status_codes.py:179 +msgid "Destroyed" +msgstr "" + +#: InvenTree/status_codes.py:181 +msgid "Rejected" +msgstr "" + +#: InvenTree/status_codes.py:229 +msgid "Production" +msgstr "" + +#: InvenTree/validators.py:22 +msgid "Not a valid currency code" +msgstr "" + +#: InvenTree/validators.py:50 +msgid "Invalid character in part name" +msgstr "" + +#: InvenTree/validators.py:63 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "" + +#: InvenTree/validators.py:77 InvenTree/validators.py:91 +#: InvenTree/validators.py:105 +msgid "Reference must match pattern" +msgstr "" + +#: InvenTree/validators.py:113 +#, python-brace-format +msgid "Illegal character in name ({x})" +msgstr "" + +#: InvenTree/validators.py:132 InvenTree/validators.py:148 +msgid "Overage value must not be negative" +msgstr "" + +#: InvenTree/validators.py:150 +msgid "Overage must not exceed 100%" +msgstr "" + +#: InvenTree/validators.py:157 +msgid "Overage must be an integer value or a percentage" +msgstr "" + +#: InvenTree/views.py:587 +msgid "Delete Item" +msgstr "" + +#: InvenTree/views.py:636 +msgid "Check box to confirm item deletion" +msgstr "" + +#: InvenTree/views.py:651 templates/InvenTree/settings/user.html:18 +msgid "Edit User Information" +msgstr "" + +#: InvenTree/views.py:662 templates/InvenTree/settings/user.html:22 +msgid "Set Password" +msgstr "" + +#: InvenTree/views.py:681 +msgid "Password fields must match" +msgstr "" + +#: InvenTree/views.py:887 templates/navbar.html:95 +msgid "System Information" +msgstr "" + +#: barcodes/api.py:53 barcodes/api.py:150 +msgid "Must provide barcode_data parameter" +msgstr "" + +#: barcodes/api.py:126 +msgid "No match found for barcode data" +msgstr "" + +#: barcodes/api.py:128 +msgid "Match found for barcode data" +msgstr "" + +#: barcodes/api.py:153 +msgid "Must provide stockitem parameter" +msgstr "" + +#: barcodes/api.py:160 +msgid "No matching stock item found" +msgstr "" + +#: barcodes/api.py:190 +msgid "Barcode already matches StockItem object" +msgstr "" + +#: barcodes/api.py:194 +msgid "Barcode already matches StockLocation object" +msgstr "" + +#: barcodes/api.py:198 +msgid "Barcode already matches Part object" +msgstr "" + +#: barcodes/api.py:204 barcodes/api.py:216 +msgid "Barcode hash already matches StockItem object" +msgstr "" + +#: barcodes/api.py:222 +msgid "Barcode associated with StockItem" +msgstr "" + +#: build/forms.py:34 +msgid "Build Order reference" +msgstr "" + +#: build/forms.py:35 +msgid "Order target date" +msgstr "" + +#: build/forms.py:39 build/templates/build/build_base.html:107 +#: build/templates/build/detail.html:121 order/forms.py:109 order/forms.py:144 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:117 +#: report/templates/report/inventree_build_order_base.html:126 +#: templates/js/build.js:723 templates/js/order.js:200 +#: templates/js/order.js:298 +msgid "Target Date" +msgstr "" + +#: build/forms.py:40 build/models.py:224 +msgid "" +"Target date for build completion. Build will be overdue after this date." +msgstr "" + +#: build/forms.py:45 build/forms.py:87 build/forms.py:257 build/models.py:1109 +#: build/templates/build/auto_allocate.html:17 +#: build/templates/build/build_base.html:94 +#: build/templates/build/detail.html:31 common/models.py:703 +#: company/forms.py:176 company/templates/company/supplier_part_pricing.html:77 +#: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261 +#: order/forms.py:278 order/models.py:593 order/models.py:784 +#: order/templates/order/order_wizard/select_parts.html:32 +#: order/templates/order/purchase_order_detail.html:200 +#: order/templates/order/sales_order_detail.html:70 +#: order/templates/order/sales_order_detail.html:77 +#: order/templates/order/sales_order_detail.html:159 +#: order/templates/order/sales_order_detail.html:224 part/forms.py:342 +#: part/forms.py:371 part/forms.py:387 part/models.py:2178 +#: part/templates/part/allocation.html:19 +#: part/templates/part/allocation.html:53 +#: part/templates/part/part_pricing.html:11 +#: part/templates/part/part_pricing.html:18 +#: part/templates/part/sale_prices.html:85 +#: report/templates/report/inventree_build_order_base.html:114 +#: report/templates/report/inventree_po_report.html:91 +#: report/templates/report/inventree_so_report.html:91 +#: report/templates/report/inventree_test_report_base.html:77 +#: stock/forms.py:175 stock/forms.py:308 stock/models.py:1566 +#: stock/templates/stock/item_base.html:244 +#: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364 +#: templates/js/bom.js:205 templates/js/build.js:420 templates/js/build.js:954 +#: templates/js/stock.js:1033 templates/js/stock.js:1271 +msgid "Quantity" +msgstr "" + +#: build/forms.py:46 +msgid "Number of items to build" +msgstr "" + +#: build/forms.py:88 +msgid "Enter quantity for build output" +msgstr "" + +#: build/forms.py:92 order/forms.py:233 stock/forms.py:118 +msgid "Serial Numbers" +msgstr "" + +#: build/forms.py:94 +msgid "Enter serial numbers for build outputs" +msgstr "" + +#: build/forms.py:100 +msgid "Confirm creation of build output" +msgstr "" + +#: build/forms.py:121 +msgid "Confirm deletion of build output" +msgstr "" + +#: build/forms.py:142 +msgid "Confirm unallocation of stock" +msgstr "" + +#: build/forms.py:166 +msgid "Confirm stock allocation" +msgstr "" + +#: build/forms.py:189 +msgid "Mark build as complete" +msgstr "" + +#: build/forms.py:213 build/templates/build/auto_allocate.html:18 +#: order/forms.py:82 stock/forms.py:347 +#: stock/templates/stock/item_base.html:274 +#: stock/templates/stock/stock_adjust.html:17 +#: templates/InvenTree/search.html:260 templates/js/barcode.js:363 +#: templates/js/barcode.js:531 templates/js/build.js:434 +#: templates/js/stock.js:641 +msgid "Location" +msgstr "" + +#: build/forms.py:214 +msgid "Location of completed parts" +msgstr "" + +#: build/forms.py:219 +msgid "Confirm incomplete" +msgstr "" + +#: build/forms.py:220 +msgid "Confirm completion with incomplete stock allocation" +msgstr "" + +#: build/forms.py:223 +msgid "Confirm build completion" +msgstr "" + +#: build/forms.py:243 +msgid "Confirm cancel" +msgstr "" + +#: build/forms.py:243 build/views.py:66 +msgid "Confirm build cancellation" +msgstr "" + +#: build/forms.py:257 +msgid "Select quantity of stock to allocate" +msgstr "" + +#: build/models.py:65 build/templates/build/build_base.html:9 +#: build/templates/build/build_base.html:38 +#: part/templates/part/allocation.html:23 +#: report/templates/report/inventree_build_order_base.html:106 +msgid "Build Order" +msgstr "" + +#: build/models.py:66 build/templates/build/index.html:8 +#: build/templates/build/index.html:15 order/templates/order/so_builds.html:12 +#: order/templates/order/so_navbar.html:19 +#: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55 +#: part/templates/part/navbar.html:58 templates/InvenTree/index.html:183 +#: templates/InvenTree/search.html:185 +#: templates/InvenTree/settings/tabs.html:31 users/models.py:41 +msgid "Build Orders" +msgstr "" + +#: build/models.py:126 +msgid "Build Order Reference" +msgstr "" + +#: build/models.py:127 order/models.py:99 order/models.py:595 +#: order/templates/order/purchase_order_detail.html:195 +#: order/templates/order/sales_order_detail.html:219 part/models.py:2187 +#: report/templates/report/inventree_po_report.html:92 +#: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197 +#: templates/js/build.js:509 templates/js/build.js:948 +msgid "Reference" +msgstr "" + +#: build/models.py:137 +msgid "Brief description of the build" +msgstr "" + +#: build/models.py:146 build/templates/build/build_base.html:124 +#: build/templates/build/detail.html:77 +msgid "Parent Build" +msgstr "" + +#: build/models.py:147 +msgid "BuildOrder to which this build is allocated" +msgstr "" + +#: build/models.py:152 build/templates/build/auto_allocate.html:16 +#: build/templates/build/build_base.html:89 +#: build/templates/build/detail.html:26 company/models.py:669 +#: order/models.py:637 order/models.py:669 +#: order/templates/order/order_wizard/select_parts.html:30 +#: order/templates/order/purchase_order_detail.html:156 +#: order/templates/order/receive_parts.html:19 +#: order/templates/order/sales_order_detail.html:207 part/models.py:321 +#: part/models.py:1876 part/models.py:1888 part/models.py:1906 +#: part/models.py:1981 part/models.py:2077 part/models.py:2162 +#: part/templates/part/part_app_base.html:8 +#: part/templates/part/part_pricing.html:14 part/templates/part/related.html:29 +#: part/templates/part/set_category.html:13 +#: report/templates/report/inventree_build_order_base.html:110 +#: report/templates/report/inventree_po_report.html:90 +#: report/templates/report/inventree_so_report.html:90 +#: templates/InvenTree/search.html:112 templates/InvenTree/search.html:210 +#: templates/js/barcode.js:362 templates/js/bom.js:163 +#: templates/js/build.js:681 templates/js/build.js:921 +#: templates/js/company.js:140 templates/js/company.js:238 +#: templates/js/part.js:233 templates/js/part.js:338 templates/js/stock.js:523 +#: templates/js/stock.js:1343 +msgid "Part" +msgstr "" + +#: build/models.py:160 +msgid "Select part to build" +msgstr "" + +#: build/models.py:165 +msgid "Sales Order Reference" +msgstr "" + +#: build/models.py:169 +msgid "SalesOrder to which this build is allocated" +msgstr "" + +#: build/models.py:174 +msgid "Source Location" +msgstr "" + +#: build/models.py:178 +msgid "" +"Select location to take stock from for this build (leave blank to take from " +"any stock location)" +msgstr "" + +#: build/models.py:183 +msgid "Destination Location" +msgstr "" + +#: build/models.py:187 +msgid "Select location where the completed items will be stored" +msgstr "" + +#: build/models.py:191 +msgid "Build Quantity" +msgstr "" + +#: build/models.py:194 +msgid "Number of stock items to build" +msgstr "" + +#: build/models.py:198 +msgid "Completed items" +msgstr "" + +#: build/models.py:200 +msgid "Number of stock items which have been completed" +msgstr "" + +#: build/models.py:204 part/templates/part/part_base.html:160 +msgid "Build Status" +msgstr "" + +#: build/models.py:208 +msgid "Build status code" +msgstr "" + +#: build/models.py:212 stock/models.py:432 +msgid "Batch Code" +msgstr "" + +#: build/models.py:216 +msgid "Batch code for this build output" +msgstr "" + +#: build/models.py:219 order/models.py:105 part/models.py:882 +#: part/templates/part/detail.html:126 templates/js/order.js:293 +msgid "Creation Date" +msgstr "" + +#: build/models.py:223 order/models.py:451 +msgid "Target completion date" +msgstr "" + +#: build/models.py:227 order/models.py:218 +msgid "Completion Date" +msgstr "" + +#: build/models.py:233 +msgid "completed by" +msgstr "" + +#: build/models.py:241 +msgid "Issued by" +msgstr "" + +#: build/models.py:242 +msgid "User who issued this build order" +msgstr "" + +#: build/models.py:250 build/templates/build/build_base.html:145 +#: build/templates/build/detail.html:105 order/models.py:119 +#: order/templates/order/order_base.html:138 +#: order/templates/order/sales_order_base.html:138 part/models.py:886 +#: report/templates/report/inventree_build_order_base.html:159 +msgid "Responsible" +msgstr "" + +#: build/models.py:251 +msgid "User responsible for this build order" +msgstr "" + +#: build/models.py:256 build/templates/build/detail.html:91 +#: company/templates/company/manufacturer_part_base.html:79 +#: company/templates/company/manufacturer_part_detail.html:28 +#: company/templates/company/supplier_part_base.html:78 +#: company/templates/company/supplier_part_detail.html:28 +#: part/templates/part/detail.html:83 part/templates/part/part_base.html:101 +#: stock/models.py:426 stock/templates/stock/item_base.html:334 +msgid "External Link" +msgstr "" + +#: build/models.py:257 part/models.py:744 stock/models.py:428 +msgid "Link to external URL" +msgstr "" + +#: build/models.py:261 build/templates/build/navbar.html:59 +#: company/models.py:135 company/models.py:501 +#: company/templates/company/navbar.html:70 +#: company/templates/company/navbar.html:73 order/models.py:123 +#: order/models.py:597 order/templates/order/po_navbar.html:29 +#: order/templates/order/po_navbar.html:32 +#: order/templates/order/purchase_order_detail.html:234 +#: order/templates/order/sales_order_detail.html:264 +#: order/templates/order/so_navbar.html:33 +#: order/templates/order/so_navbar.html:36 part/models.py:871 +#: part/templates/part/navbar.html:128 +#: report/templates/report/inventree_build_order_base.html:173 +#: stock/forms.py:173 stock/forms.py:317 stock/forms.py:349 stock/forms.py:377 +#: stock/models.py:498 stock/models.py:1558 stock/models.py:1668 +#: stock/templates/stock/navbar.html:57 templates/js/barcode.js:37 +#: templates/js/bom.js:333 templates/js/stock.js:128 templates/js/stock.js:671 +msgid "Notes" +msgstr "" + +#: build/models.py:262 +msgid "Extra build notes" +msgstr "" + +#: build/models.py:673 +msgid "No build output specified" +msgstr "" + +#: build/models.py:676 +msgid "Build output is already completed" +msgstr "" + +#: build/models.py:679 +msgid "Build output does not match Build Order" +msgstr "" + +#: build/models.py:754 +msgid "Completed build output" +msgstr "" + +#: build/models.py:1002 +msgid "BuildItem must be unique for build, stock_item and install_into" +msgstr "" + +#: build/models.py:1024 +msgid "Build item must specify a build output" +msgstr "" + +#: build/models.py:1029 +#, python-brace-format +msgid "Selected stock item not found in BOM for part '{p}'" +msgstr "" + +#: build/models.py:1033 +#, python-brace-format +msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" +msgstr "" + +#: build/models.py:1040 order/models.py:758 +msgid "StockItem is over-allocated" +msgstr "" + +#: build/models.py:1044 order/models.py:761 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: build/models.py:1048 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1088 stock/templates/stock/item_base.html:306 +#: templates/InvenTree/search.html:183 templates/js/build.js:655 +#: templates/navbar.html:29 +msgid "Build" +msgstr "" + +#: build/models.py:1089 +msgid "Build to allocate parts" +msgstr "" + +#: build/models.py:1096 part/templates/part/allocation.html:18 +#: part/templates/part/allocation.html:24 +#: part/templates/part/allocation.html:31 +#: part/templates/part/allocation.html:49 +#: stock/templates/stock/item_base.html:8 +#: stock/templates/stock/item_base.html:93 +#: stock/templates/stock/item_base.html:328 +#: stock/templates/stock/stock_adjust.html:16 templates/js/build.js:771 +#: templates/js/stock.js:1004 templates/js/stock.js:1262 +msgid "Stock Item" +msgstr "" + +#: build/models.py:1097 +msgid "Source stock item" +msgstr "" + +#: build/models.py:1110 +msgid "Stock quantity to allocate to build" +msgstr "" + +#: build/models.py:1118 +msgid "Install into" +msgstr "" + +#: build/models.py:1119 +msgid "Destination stock item" +msgstr "" + +#: build/templates/build/allocate.html:7 +msgid "Allocate Parts" +msgstr "" + +#: build/templates/build/allocate.html:15 +msgid "Incomplete Build Ouputs" +msgstr "" + +#: build/templates/build/allocate.html:21 +msgid "Build order has been completed" +msgstr "" + +#: build/templates/build/allocate.html:26 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/allocate.html:27 +msgid "Create New Output" +msgstr "" + +#: build/templates/build/allocate.html:30 +msgid "Order required parts" +msgstr "" + +#: build/templates/build/allocate.html:31 +#: company/templates/company/detail_manufacturer_part.html:33 +#: company/templates/company/detail_supplier_part.html:32 order/views.py:794 +#: part/templates/part/category.html:127 +msgid "Order Parts" +msgstr "" + +#: build/templates/build/allocate.html:34 templates/js/build.js:590 +msgid "Unallocate stock" +msgstr "" + +#: build/templates/build/allocate.html:35 build/views.py:338 build/views.py:784 +msgid "Unallocate Stock" +msgstr "" + +#: build/templates/build/allocate.html:49 +msgid "Create a new build output" +msgstr "" + +#: build/templates/build/allocate.html:50 +msgid "No incomplete build outputs remain." +msgstr "" + +#: build/templates/build/allocate.html:51 +msgid "Create a new build output using the button above" +msgstr "" + +#: build/templates/build/attachments.html:12 +#: build/templates/build/navbar.html:49 build/templates/build/navbar.html:52 +#: order/templates/order/po_navbar.html:26 +#: order/templates/order/so_navbar.html:29 part/templates/part/navbar.html:119 +#: part/templates/part/navbar.html:122 stock/templates/stock/navbar.html:47 +#: stock/templates/stock/navbar.html:50 +msgid "Attachments" +msgstr "" + +#: build/templates/build/auto_allocate.html:9 +msgid "Automatically Allocate Stock" +msgstr "" + +#: build/templates/build/auto_allocate.html:10 +msgid "" +"The following stock items will be allocated to the specified build output" +msgstr "" + +#: build/templates/build/auto_allocate.html:37 +msgid "No stock items found that can be automatically allocated to this build" +msgstr "" + +#: build/templates/build/auto_allocate.html:39 +msgid "Stock items will have to be manually allocated" +msgstr "" + +#: build/templates/build/build_base.html:16 +#, python-format +msgid "This Build Order is allocated to Sales Order %(link)s" +msgstr "" + +#: build/templates/build/build_base.html:22 +#, python-format +msgid "This Build Order is a child of Build Order %(link)s" +msgstr "" + +#: build/templates/build/build_base.html:40 +#: company/templates/company/company_base.html:40 +#: company/templates/company/manufacturer_part_base.html:25 +#: company/templates/company/supplier_part_base.html:26 +#: order/templates/order/order_base.html:26 +#: order/templates/order/sales_order_base.html:35 +#: part/templates/part/category.html:18 part/templates/part/part_base.html:29 +#: stock/templates/stock/item_base.html:118 +#: stock/templates/stock/location.html:31 +msgid "Admin view" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: build/templates/build/build_base.html:111 +#: order/templates/order/order_base.html:32 +#: order/templates/order/order_base.html:86 +#: order/templates/order/sales_order_base.html:41 +#: order/templates/order/sales_order_base.html:86 +#: templates/js/table_filters.js:240 templates/js/table_filters.js:259 +#: templates/js/table_filters.js:276 +msgid "Overdue" +msgstr "" + +#: build/templates/build/build_base.html:55 +msgid "Print actions" +msgstr "" + +#: build/templates/build/build_base.html:59 +msgid "Print Build Order" +msgstr "" + +#: build/templates/build/build_base.html:65 +msgid "Build actions" +msgstr "" + +#: build/templates/build/build_base.html:69 +msgid "Edit Build" +msgstr "" + +#: build/templates/build/build_base.html:71 +#: build/templates/build/build_base.html:179 +msgid "Complete Build" +msgstr "" + +#: build/templates/build/build_base.html:72 +#: build/templates/build/build_base.html:170 build/views.py:57 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:85 +#: build/templates/build/detail.html:11 +msgid "Build Details" +msgstr "" + +#: build/templates/build/build_base.html:99 +#: build/templates/build/detail.html:59 order/models.py:445 +#: order/templates/order/receive_parts.html:24 +#: stock/templates/stock/item_base.html:392 templates/InvenTree/search.html:252 +#: templates/js/barcode.js:119 templates/js/build.js:710 +#: templates/js/order.js:187 templates/js/order.js:285 +#: templates/js/stock.js:628 templates/js/stock.js:1279 +msgid "Status" +msgstr "" + +#: build/templates/build/build_base.html:111 +#, python-format +msgid "This build was due on %(target)s" +msgstr "" + +#: build/templates/build/build_base.html:118 +#: build/templates/build/detail.html:64 +msgid "Progress" +msgstr "" + +#: build/templates/build/build_base.html:131 +#: build/templates/build/detail.html:84 order/models.py:667 +#: order/templates/order/sales_order_base.html:9 +#: order/templates/order/sales_order_base.html:33 +#: order/templates/order/sales_order_ship.html:25 +#: part/templates/part/allocation.html:30 +#: report/templates/report/inventree_build_order_base.html:136 +#: report/templates/report/inventree_so_report.html:77 +#: stock/templates/stock/item_base.html:268 templates/js/order.js:245 +msgid "Sales Order" +msgstr "" + +#: build/templates/build/build_base.html:138 +#: build/templates/build/detail.html:98 +#: report/templates/report/inventree_build_order_base.html:153 +msgid "Issued By" +msgstr "" + +#: build/templates/build/build_children.html:10 +#: build/templates/build/navbar.html:42 +msgid "Child Build Orders" +msgstr "" + +#: build/templates/build/build_output.html:10 +#: build/templates/build/navbar.html:35 build/templates/build/navbar.html:38 +msgid "Build Outputs" +msgstr "" + +#: build/templates/build/build_output_create.html:7 +msgid "The Bill of Materials contains trackable parts" +msgstr "" + +#: build/templates/build/build_output_create.html:8 +msgid "Build outputs must be generated individually." +msgstr "" + +#: build/templates/build/build_output_create.html:9 +msgid "Multiple build outputs will be created based on the quantity specified." +msgstr "" + +#: build/templates/build/build_output_create.html:15 +msgid "Trackable parts can have serial numbers specified" +msgstr "" + +#: build/templates/build/build_output_create.html:16 +msgid "Enter serial numbers to generate multiple single build outputs" +msgstr "" + +#: build/templates/build/cancel.html:5 +msgid "Are you sure you wish to cancel this build?" +msgstr "" + +#: build/templates/build/complete.html:8 +msgid "Build can be completed" +msgstr "" + +#: build/templates/build/complete.html:12 +msgid "Build cannot be completed" +msgstr "" + +#: build/templates/build/complete.html:15 +msgid "Incompleted build outputs remain" +msgstr "" + +#: build/templates/build/complete.html:18 +msgid "Required build quantity has not been completed" +msgstr "" + +#: build/templates/build/complete_output.html:9 +msgid "Stock allocation is complete" +msgstr "" + +#: build/templates/build/complete_output.html:13 +msgid "Stock allocation is incomplete" +msgstr "" + +#: build/templates/build/complete_output.html:19 +msgid "parts have not been fully allocated" +msgstr "" + +#: build/templates/build/complete_output.html:40 +msgid "The following items will be created" +msgstr "" + +#: build/templates/build/create_build_item.html:7 +msgid "Select a stock item to allocate to the selected build output" +msgstr "" + +#: build/templates/build/create_build_item.html:11 +#, python-format +msgid "" +"The allocated stock will be installed into the following build output:
    " +"%(output)s" +msgstr "" + +#: build/templates/build/create_build_item.html:17 +#, python-format +msgid "No stock available for %(part)s" +msgstr "" + +#: build/templates/build/delete_build_item.html:8 +msgid "Are you sure you want to unallocate this stock?" +msgstr "" + +#: build/templates/build/delete_build_item.html:11 +msgid "The selected stock will be unallocated from the build output" +msgstr "" + +#: build/templates/build/detail.html:35 +msgid "Stock Source" +msgstr "" + +#: build/templates/build/detail.html:40 +msgid "Stock can be taken from any available location." +msgstr "" + +#: build/templates/build/detail.html:46 stock/forms.py:169 stock/forms.py:375 +msgid "Destination" +msgstr "" + +#: build/templates/build/detail.html:53 +msgid "Destination location not specified" +msgstr "" + +#: build/templates/build/detail.html:70 +#: stock/templates/stock/item_base.html:292 templates/js/stock.js:636 +#: templates/js/stock.js:1286 templates/js/table_filters.js:107 +#: templates/js/table_filters.js:201 +msgid "Batch" +msgstr "" + +#: build/templates/build/detail.html:116 +#: order/templates/order/order_base.html:111 +#: order/templates/order/sales_order_base.html:111 templates/js/build.js:718 +msgid "Created" +msgstr "" + +#: build/templates/build/detail.html:127 +msgid "No target date set" +msgstr "" + +#: build/templates/build/detail.html:132 templates/js/build.js:696 +#: templates/js/build.js:728 +msgid "Completed" +msgstr "" + +#: build/templates/build/detail.html:136 +msgid "Build not complete" +msgstr "" + +#: build/templates/build/edit_build_item.html:7 +msgid "Alter the quantity of stock allocated to the build output" +msgstr "" + +#: build/templates/build/index.html:28 build/views.py:657 +msgid "New Build Order" +msgstr "" + +#: build/templates/build/index.html:37 build/templates/build/index.html:38 +msgid "Print Build Orders" +msgstr "" + +#: build/templates/build/index.html:43 +#: order/templates/order/purchase_orders.html:27 +#: order/templates/order/sales_orders.html:27 +msgid "Display calendar view" +msgstr "" + +#: build/templates/build/index.html:46 +#: order/templates/order/purchase_orders.html:30 +#: order/templates/order/sales_orders.html:30 +msgid "Display list view" +msgstr "" + +#: build/templates/build/navbar.html:12 +msgid "Build Order Details" +msgstr "" + +#: build/templates/build/navbar.html:15 +#: company/templates/company/navbar.html:15 +#: order/templates/order/po_navbar.html:14 +#: order/templates/order/so_navbar.html:15 part/templates/part/navbar.html:15 +msgid "Details" +msgstr "" + +#: build/templates/build/navbar.html:20 build/templates/build/navbar.html:23 +#: build/templates/build/parts.html:11 +msgid "Required Parts" +msgstr "" + +#: build/templates/build/navbar.html:27 build/templates/build/navbar.html:30 +msgid "In Progress" +msgstr "" + +#: build/templates/build/navbar.html:45 +msgid "Child Builds" +msgstr "" + +#: build/templates/build/navbar.html:56 +msgid "Build Order Notes" +msgstr "" + +#: build/templates/build/notes.html:12 +msgid "Build Notes" +msgstr "" + +#: build/templates/build/notes.html:14 company/templates/company/notes.html:13 +#: order/templates/order/order_notes.html:15 +#: order/templates/order/sales_order_notes.html:16 +#: part/templates/part/notes.html:14 stock/templates/stock/item_notes.html:15 +msgid "Edit notes" +msgstr "" + +#: build/templates/build/notes.html:26 company/templates/company/notes.html:24 +#: order/templates/order/order_notes.html:27 +#: order/templates/order/sales_order_notes.html:29 +#: part/templates/part/notes.html:27 stock/templates/stock/item_base.html:470 +#: stock/templates/stock/item_notes.html:26 +msgid "Save" +msgstr "" + +#: build/templates/build/unallocate.html:10 +msgid "Are you sure you wish to unallocate all stock for this build?" +msgstr "" + +#: build/templates/build/unallocate.html:12 +msgid "All incomplete stock allocations will be removed from the build" +msgstr "" + +#: build/views.py:77 +msgid "Build was cancelled" +msgstr "" + +#: build/views.py:91 +msgid "Allocate Stock" +msgstr "" + +#: build/views.py:154 build/views.py:314 build/views.py:485 +msgid "Build output must be specified" +msgstr "" + +#: build/views.py:168 +msgid "Allocated stock to build output" +msgstr "" + +#: build/views.py:180 +msgid "Create Build Output" +msgstr "" + +#: build/views.py:203 stock/models.py:969 stock/views.py:1789 +msgid "Serial numbers already exist" +msgstr "" + +#: build/views.py:212 +msgid "Serial numbers required for trackable build output" +msgstr "" + +#: build/views.py:278 +msgid "Delete Build Output" +msgstr "" + +#: build/views.py:299 build/views.py:383 +msgid "Confirm unallocation of build stock" +msgstr "" + +#: build/views.py:300 build/views.py:384 stock/views.py:425 +msgid "Check the confirmation box" +msgstr "" + +#: build/views.py:312 +msgid "Build output does not match build" +msgstr "" + +#: build/views.py:326 +msgid "Build output deleted" +msgstr "" + +#: build/views.py:408 +msgid "Complete Build Order" +msgstr "" + +#: build/views.py:414 +msgid "Build order cannot be completed" +msgstr "" + +#: build/views.py:425 +msgid "Completed build order" +msgstr "" + +#: build/views.py:441 +msgid "Complete Build Output" +msgstr "" + +#: build/views.py:476 +msgid "Quantity to complete cannot exceed build output quantity" +msgstr "" + +#: build/views.py:482 +msgid "Confirm completion of incomplete build" +msgstr "" + +#: build/views.py:573 +msgid "Build output completed" +msgstr "" + +#: build/views.py:711 +msgid "Created new build" +msgstr "" + +#: build/views.py:732 +msgid "Edit Build Order Details" +msgstr "" + +#: build/views.py:765 +msgid "Edited build" +msgstr "" + +#: build/views.py:774 +msgid "Delete Build Order" +msgstr "" + +#: build/views.py:789 +msgid "Removed parts from build allocation" +msgstr "" + +#: build/views.py:801 +msgid "Allocate stock to build output" +msgstr "" + +#: build/views.py:844 +msgid "Item must be currently in stock" +msgstr "" + +#: build/views.py:850 +msgid "Stock item is over-allocated" +msgstr "" + +#: build/views.py:851 templates/js/bom.js:230 templates/js/build.js:519 +#: templates/js/build.js:778 templates/js/build.js:961 +msgid "Available" +msgstr "" + +#: build/views.py:853 +msgid "Stock item must be selected" +msgstr "" + +#: build/views.py:1016 +msgid "Edit Stock Allocation" +msgstr "" + +#: build/views.py:1020 +msgid "Updated Build Item" +msgstr "" + +#: build/views.py:1049 +msgid "Add Build Order Attachment" +msgstr "" + +#: build/views.py:1062 order/views.py:110 order/views.py:162 part/views.py:172 +#: stock/views.py:277 +msgid "Added attachment" +msgstr "" + +#: build/views.py:1098 order/views.py:189 order/views.py:210 +msgid "Edit Attachment" +msgstr "" + +#: build/views.py:1108 order/views.py:193 order/views.py:214 +msgid "Attachment updated" +msgstr "" + +#: build/views.py:1118 order/views.py:229 order/views.py:243 +msgid "Delete Attachment" +msgstr "" + +#: build/views.py:1123 order/views.py:235 order/views.py:249 stock/views.py:333 +msgid "Deleted attachment" +msgstr "" + +#: common/models.py:56 +msgid "InvenTree Instance Name" +msgstr "" + +#: common/models.py:58 +msgid "String descriptor for the server instance" +msgstr "" + +#: common/models.py:62 +msgid "Use instance name" +msgstr "" + +#: common/models.py:63 +msgid "Use the instance name in the title-bar" +msgstr "" + +#: common/models.py:69 company/models.py:97 company/models.py:98 +msgid "Company name" +msgstr "" + +#: common/models.py:70 +msgid "Internal company name" +msgstr "" + +#: common/models.py:75 +msgid "Base URL" +msgstr "" + +#: common/models.py:76 +msgid "Base URL for server instance" +msgstr "" + +#: common/models.py:82 +msgid "Default Currency" +msgstr "" + +#: common/models.py:83 +msgid "Default currency" +msgstr "" + +#: common/models.py:89 +msgid "Download from URL" +msgstr "" + +#: common/models.py:90 +msgid "Allow download of remote images and files from external URL" +msgstr "" + +#: common/models.py:96 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:97 +msgid "Enable barcode scanner support" +msgstr "" + +#: common/models.py:103 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:104 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:108 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:109 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:115 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:116 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:122 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:123 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:129 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:130 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:136 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:137 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:143 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:144 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:150 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:151 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:157 part/models.py:2079 part/templates/part/detail.html:160 +#: report/models.py:185 stock/forms.py:259 templates/js/table_filters.js:24 +#: templates/js/table_filters.js:310 +msgid "Template" +msgstr "" + +#: common/models.py:158 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:164 part/models.py:834 part/templates/part/detail.html:170 +#: templates/js/table_filters.js:123 templates/js/table_filters.js:322 +msgid "Assembly" +msgstr "" + +#: common/models.py:165 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:171 part/models.py:840 part/templates/part/detail.html:180 +#: templates/js/table_filters.js:326 +msgid "Component" +msgstr "" + +#: common/models.py:172 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:178 part/models.py:851 part/templates/part/detail.html:200 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:179 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:185 part/models.py:856 part/templates/part/detail.html:210 +#: templates/js/table_filters.js:334 +msgid "Salable" +msgstr "" + +#: common/models.py:186 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:192 part/models.py:846 part/templates/part/detail.html:190 +#: templates/js/table_filters.js:32 templates/js/table_filters.js:338 +msgid "Trackable" +msgstr "" + +#: common/models.py:193 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:199 part/models.py:866 part/templates/part/detail.html:150 +#: templates/js/table_filters.js:28 +msgid "Virtual" +msgstr "" + +#: common/models.py:200 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:206 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:207 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:213 +msgid "Debug Mode" +msgstr "" + +#: common/models.py:214 +msgid "Generate reports in debug mode (HTML output)" +msgstr "" + +#: common/models.py:220 +msgid "Page Size" +msgstr "" + +#: common/models.py:221 +msgid "Default page size for PDF reports" +msgstr "" + +#: common/models.py:231 +msgid "Test Reports" +msgstr "" + +#: common/models.py:232 +msgid "Enable generation of test reports" +msgstr "" + +#: common/models.py:238 +msgid "Stock Expiry" +msgstr "" + +#: common/models.py:239 +msgid "Enable stock expiry functionality" +msgstr "" + +#: common/models.py:245 +msgid "Sell Expired Stock" +msgstr "" + +#: common/models.py:246 +msgid "Allow sale of expired stock" +msgstr "" + +#: common/models.py:252 +msgid "Stock Stale Time" +msgstr "" + +#: common/models.py:253 +msgid "Number of days stock items are considered stale before expiring" +msgstr "" + +#: common/models.py:255 part/templates/part/detail.html:121 +msgid "days" +msgstr "" + +#: common/models.py:260 +msgid "Build Expired Stock" +msgstr "" + +#: common/models.py:261 +msgid "Allow building with expired stock" +msgstr "" + +#: common/models.py:267 +msgid "Stock Ownership Control" +msgstr "" + +#: common/models.py:268 +msgid "Enable ownership control over stock locations and items" +msgstr "" + +#: common/models.py:274 +msgid "Group by Part" +msgstr "" + +#: common/models.py:275 +msgid "Group stock items by part reference in table views" +msgstr "" + +#: common/models.py:281 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:282 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:288 +msgid "Build Order Reference Prefix" +msgstr "" + +#: common/models.py:289 +msgid "Prefix value for build order reference" +msgstr "" + +#: common/models.py:294 +msgid "Build Order Reference Regex" +msgstr "" + +#: common/models.py:295 +msgid "Regular expression pattern for matching build order reference" +msgstr "" + +#: common/models.py:299 +msgid "Sales Order Reference Prefix" +msgstr "" + +#: common/models.py:300 +msgid "Prefix value for sales order reference" +msgstr "" + +#: common/models.py:305 +msgid "Purchase Order Reference Prefix" +msgstr "" + +#: common/models.py:306 +msgid "Prefix value for purchase order reference" +msgstr "" + +#: common/models.py:529 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:531 +msgid "Settings value" +msgstr "" + +#: common/models.py:566 +msgid "Must be an integer value" +msgstr "" + +#: common/models.py:589 +msgid "Value must be a boolean value" +msgstr "" + +#: common/models.py:600 +msgid "Value must be an integer value" +msgstr "" + +#: common/models.py:623 +msgid "Key string must be unique" +msgstr "" + +#: common/models.py:704 company/forms.py:177 +msgid "Price break quantity" +msgstr "" + +#: common/models.py:712 company/templates/company/supplier_part_pricing.html:82 +#: part/templates/part/sale_prices.html:90 templates/js/bom.js:255 +msgid "Price" +msgstr "" + +#: common/models.py:713 +msgid "Unit price at specified quantity" +msgstr "" + +#: common/models.py:736 +msgid "Default" +msgstr "" + +#: common/templates/common/edit_setting.html:11 +msgid "Current value" +msgstr "" + +#: common/views.py:25 +msgid "Change Setting" +msgstr "" + +#: common/views.py:94 +msgid "Supplied value is not allowed" +msgstr "" + +#: common/views.py:103 +msgid "Supplied value must be a boolean" +msgstr "" + +#: company/forms.py:38 company/models.py:145 +#: company/templates/company/detail.html:42 +msgid "Currency" +msgstr "" + +#: company/forms.py:39 company/models.py:147 +msgid "Default currency used for this company" +msgstr "" + +#: company/forms.py:77 part/forms.py:46 +msgid "URL" +msgstr "" + +#: company/forms.py:78 part/forms.py:47 +msgid "Image URL" +msgstr "" + +#: company/forms.py:118 +msgid "Single Price" +msgstr "" + +#: company/forms.py:120 +msgid "Single quantity price" +msgstr "" + +#: company/forms.py:128 company/models.py:324 +msgid "Select manufacturer" +msgstr "" + +#: company/forms.py:134 company/models.py:331 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/forms.py:136 company/models.py:330 +#: company/templates/company/manufacturer_part_base.html:89 +#: company/templates/company/manufacturer_part_detail.html:26 +#: company/templates/company/supplier_part_base.html:101 +#: company/templates/company/supplier_part_detail.html:35 +#: order/templates/order/purchase_order_detail.html:183 part/bom.py:171 +#: part/bom.py:242 templates/js/company.js:181 templates/js/company.js:307 +msgid "MPN" +msgstr "" + +#: company/models.py:102 +msgid "Company description" +msgstr "" + +#: company/models.py:103 +msgid "Description of the company" +msgstr "" + +#: company/models.py:107 company/templates/company/company_base.html:70 +#: company/templates/company/detail.html:33 templates/js/company.js:60 +msgid "Website" +msgstr "" + +#: company/models.py:107 +msgid "Company website URL" +msgstr "" + +#: company/models.py:110 company/templates/company/company_base.html:77 +msgid "Address" +msgstr "" + +#: company/models.py:111 +msgid "Company address" +msgstr "" + +#: company/models.py:114 +msgid "Phone number" +msgstr "" + +#: company/models.py:115 +msgid "Contact phone number" +msgstr "" + +#: company/models.py:118 company/templates/company/company_base.html:91 +msgid "Email" +msgstr "" + +#: company/models.py:118 +msgid "Contact email address" +msgstr "" + +#: company/models.py:121 company/templates/company/company_base.html:98 +msgid "Contact" +msgstr "" + +#: company/models.py:122 +msgid "Point of contact" +msgstr "" + +#: company/models.py:124 company/models.py:336 company/models.py:488 +#: order/models.py:103 part/models.py:743 +#: report/templates/report/inventree_build_order_base.html:165 +#: stock/models.py:1560 templates/js/company.js:188 templates/js/company.js:318 +#: templates/js/part.js:431 +msgid "Link" +msgstr "" + +#: company/models.py:124 +msgid "Link to external company information" +msgstr "" + +#: company/models.py:132 part/models.py:753 +msgid "Image" +msgstr "" + +#: company/models.py:137 +msgid "is customer" +msgstr "" + +#: company/models.py:137 +msgid "Do you sell items to this company?" +msgstr "" + +#: company/models.py:139 +msgid "is supplier" +msgstr "" + +#: company/models.py:139 +msgid "Do you purchase items from this company?" +msgstr "" + +#: company/models.py:141 +msgid "is manufacturer" +msgstr "" + +#: company/models.py:141 +msgid "Does this company manufacture parts?" +msgstr "" + +#: company/models.py:308 company/models.py:459 stock/models.py:373 +#: stock/templates/stock/item_base.html:224 +msgid "Base Part" +msgstr "" + +#: company/models.py:312 company/models.py:463 order/views.py:1372 +msgid "Select part" +msgstr "" + +#: company/models.py:323 company/templates/company/detail.html:57 +#: company/templates/company/manufacturer_part_base.html:85 +#: company/templates/company/manufacturer_part_detail.html:25 +#: company/templates/company/supplier_part_base.html:94 +#: company/templates/company/supplier_part_detail.html:34 part/bom.py:170 +#: part/bom.py:241 stock/templates/stock/item_base.html:341 +#: templates/js/company.js:44 templates/js/company.js:165 +#: templates/js/company.js:289 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:337 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:343 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:469 company/templates/company/detail.html:62 +#: company/templates/company/supplier_part_base.html:84 +#: company/templates/company/supplier_part_detail.html:25 order/models.py:190 +#: order/templates/order/order_base.html:92 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:175 +#: part/bom.py:286 stock/templates/stock/item_base.html:353 +#: templates/js/company.js:48 templates/js/company.js:263 +#: templates/js/order.js:170 +msgid "Supplier" +msgstr "" + +#: company/models.py:470 +msgid "Select supplier" +msgstr "" + +#: company/models.py:475 company/templates/company/supplier_part_base.html:88 +#: company/templates/company/supplier_part_detail.html:26 +#: order/templates/order/purchase_order_detail.html:174 part/bom.py:176 +#: part/bom.py:287 +msgid "SKU" +msgstr "" + +#: company/models.py:476 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:482 +#: company/templates/company/manufacturer_part_base.html:6 +#: company/templates/company/manufacturer_part_base.html:19 +#: stock/templates/stock/item_base.html:346 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:483 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:489 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:495 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:500 company/templates/company/supplier_part_base.html:115 +#: company/templates/company/supplier_part_detail.html:38 part/models.py:2190 +#: report/templates/report/inventree_po_report.html:93 +#: report/templates/report/inventree_so_report.html:93 +msgid "Note" +msgstr "" + +#: company/models.py:504 +msgid "base cost" +msgstr "" + +#: company/models.py:504 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:506 company/templates/company/supplier_part_base.html:108 +#: stock/models.py:397 stock/templates/stock/item_base.html:299 +#: templates/js/stock.js:667 +msgid "Packaging" +msgstr "" + +#: company/models.py:506 +msgid "Part packaging" +msgstr "" + +#: company/models.py:508 +msgid "multiple" +msgstr "" + +#: company/models.py:508 +msgid "Order multiple" +msgstr "" + +#: company/templates/company/assigned_stock.html:10 +#: company/templates/company/navbar.html:62 +#: company/templates/company/navbar.html:65 templates/js/build.js:411 +msgid "Assigned Stock" +msgstr "" + +#: company/templates/company/company_base.html:9 +#: company/templates/company/company_base.html:35 +#: templates/InvenTree/search.html:304 templates/js/company.js:33 +msgid "Company" +msgstr "" + +#: company/templates/company/company_base.html:25 +#: part/templates/part/part_thumb.html:21 +msgid "Upload new image" +msgstr "" + +#: company/templates/company/company_base.html:27 +#: part/templates/part/part_thumb.html:23 +msgid "Download image from URL" +msgstr "" + +#: company/templates/company/company_base.html:46 order/views.py:306 +msgid "Create Purchase Order" +msgstr "" + +#: company/templates/company/company_base.html:51 +msgid "Edit company information" +msgstr "" + +#: company/templates/company/company_base.html:56 company/views.py:326 +msgid "Delete Company" +msgstr "" + +#: company/templates/company/company_base.html:64 +#: company/templates/company/detail.html:10 +#: company/templates/company/navbar.html:12 +msgid "Company Details" +msgstr "" + +#: company/templates/company/company_base.html:84 +msgid "Phone" +msgstr "" + +#: company/templates/company/delete.html:7 +#, python-format +msgid "Are you sure you want to delete company '%(name)s'?" +msgstr "" + +#: company/templates/company/delete.html:12 +#, python-format +msgid "" +"There are %(count)s parts sourced from this company.
    \n" +"If this supplier is deleted, these supplier part entries will also be " +"deleted." +msgstr "" + +#: company/templates/company/detail.html:21 +msgid "Company Name" +msgstr "" + +#: company/templates/company/detail.html:36 +msgid "No website specified" +msgstr "" + +#: company/templates/company/detail.html:45 +msgid "Uses default currency" +msgstr "" + +#: company/templates/company/detail.html:67 order/models.py:440 +#: order/templates/order/sales_order_base.html:92 stock/models.py:415 +#: stock/models.py:416 stock/templates/stock/item_base.html:251 +#: templates/js/company.js:40 templates/js/order.js:267 +msgid "Customer" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:11 +#: templates/InvenTree/search.html:149 +msgid "Manufacturer Parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:22 +msgid "Create new manufacturer part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:23 +#: part/templates/part/manufacturer.html:19 +msgid "New Manufacturer Part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:28 +#: company/templates/company/detail_supplier_part.html:27 +#: company/templates/company/manufacturer_part_suppliers.html:20 +#: part/templates/part/category.html:122 +#: part/templates/part/manufacturer.html:22 +#: part/templates/part/supplier.html:20 +msgid "Options" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:33 +#: company/templates/company/detail_supplier_part.html:32 +#: part/templates/part/category.html:127 +msgid "Order parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:36 +#: company/templates/company/detail_supplier_part.html:35 +msgid "Delete parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:36 +#: company/templates/company/detail_supplier_part.html:35 +msgid "Delete Parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:66 +#: company/templates/company/detail_supplier_part.html:66 +#: part/templates/part/bom.html:159 part/templates/part/category.html:118 +#: templates/js/stock.js:1157 +msgid "New Part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:67 +#: company/templates/company/detail_supplier_part.html:67 +msgid "Create new Part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:72 +#: company/views.py:71 part/templates/part/manufacturer.html:52 +#: part/templates/part/supplier.html:56 +msgid "New Manufacturer" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:73 +#: company/views.py:284 +msgid "Create new Manufacturer" +msgstr "" + +#: company/templates/company/detail_stock.html:10 +msgid "Supplier Stock" +msgstr "" + +#: company/templates/company/detail_stock.html:37 +#: company/templates/company/supplier_part_stock.html:34 +#: part/templates/part/category.html:114 part/templates/part/category.html:128 +#: part/templates/part/stock.html:54 stock/templates/stock/location.html:163 +msgid "Export" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:11 +#: company/templates/company/manufacturer_part_navbar.html:11 +#: company/templates/company/manufacturer_part_suppliers.html:10 +#: templates/InvenTree/search.html:164 +msgid "Supplier Parts" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:21 +#: order/templates/order/order_wizard/select_parts.html:42 +#: order/templates/order/purchase_order_detail.html:75 +msgid "Create new supplier part" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:22 +#: company/templates/company/manufacturer_part_suppliers.html:17 +#: order/templates/order/purchase_order_detail.html:74 +#: part/templates/part/supplier.html:17 templates/js/stock.js:1163 +msgid "New Supplier Part" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:72 +#: company/templates/company/manufacturer_part_suppliers.html:47 +#: company/views.py:64 order/templates/order/purchase_orders.html:183 +#: part/templates/part/supplier.html:50 +msgid "New Supplier" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:73 company/views.py:281 +#: order/templates/order/purchase_orders.html:184 +msgid "Create new Supplier" +msgstr "" + +#: company/templates/company/index.html:8 +msgid "Supplier List" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:36 +#: company/templates/company/supplier_part_base.html:36 +#: company/templates/company/supplier_part_orders.html:17 +#: part/templates/part/orders.html:17 part/templates/part/part_base.html:65 +msgid "Order part" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:41 +msgid "Edit manufacturer part" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:45 +msgid "Delete manufacturer part" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:57 +#: company/templates/company/manufacturer_part_detail.html:10 +msgid "Manufacturer Part Details" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:62 +#: company/templates/company/manufacturer_part_detail.html:18 +#: company/templates/company/supplier_part_base.html:61 +#: company/templates/company/supplier_part_detail.html:18 +msgid "Internal Part" +msgstr "" + +#: company/templates/company/manufacturer_part_delete.html:6 +msgid "Are you sure you want to delete the following Manufacturer Parts?" +msgstr "" + +#: company/templates/company/manufacturer_part_delete.html:36 +#, python-format +msgid "" +"There are %(count)s suppliers defined for this manufacturer part. If you " +"delete it, the following supplier parts will also be deleted:" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:14 +#: company/views.py:63 part/templates/part/navbar.html:78 +#: part/templates/part/navbar.html:81 templates/InvenTree/search.html:316 +#: templates/navbar.html:35 +msgid "Suppliers" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:19 +msgid "Manufacturer Part Stock" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:22 +#: company/templates/company/navbar.html:41 +#: company/templates/company/supplier_part_navbar.html:15 +#: part/templates/part/navbar.html:36 stock/api.py:51 +#: stock/templates/stock/loc_link.html:7 stock/templates/stock/location.html:36 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/index.html:128 templates/InvenTree/search.html:196 +#: templates/InvenTree/search.html:232 +#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:173 +#: templates/js/part.js:398 templates/js/stock.js:563 templates/navbar.html:26 +msgid "Stock" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:26 +msgid "Manufacturer Part Orders" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:29 +#: company/templates/company/supplier_part_navbar.html:22 +msgid "Orders" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:22 +#: part/templates/part/supplier.html:22 +msgid "Delete supplier parts" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:22 +#: part/templates/part/manufacturer.html:24 part/templates/part/params.html:44 +#: part/templates/part/related.html:44 part/templates/part/supplier.html:22 +#: stock/views.py:1002 users/models.py:184 +msgid "Delete" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:48 +#: part/templates/part/supplier.html:51 +msgid "Create new supplier" +msgstr "" + +#: company/templates/company/navbar.html:20 +#: company/templates/company/navbar.html:23 +msgid "Manufactured Parts" +msgstr "" + +#: company/templates/company/navbar.html:29 +#: company/templates/company/navbar.html:32 +msgid "Supplied Parts" +msgstr "" + +#: company/templates/company/navbar.html:38 part/templates/part/navbar.html:33 +#: stock/templates/stock/location.html:107 +#: stock/templates/stock/location.html:122 +#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location_navbar.html:22 +#: stock/templates/stock/location_navbar.html:29 +#: templates/InvenTree/search.html:198 templates/js/stock.js:968 +#: templates/stats.html:72 templates/stats.html:81 users/models.py:40 +msgid "Stock Items" +msgstr "" + +#: company/templates/company/navbar.html:47 +#: company/templates/company/navbar.html:56 +#: company/templates/company/navbar.html:59 +#: company/templates/company/sales_orders.html:11 +#: order/templates/order/sales_orders.html:8 +#: order/templates/order/sales_orders.html:13 +#: part/templates/part/navbar.html:98 part/templates/part/navbar.html:101 +#: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:228 +#: templates/InvenTree/search.html:345 +#: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46 +#: users/models.py:43 +msgid "Sales Orders" +msgstr "" + +#: company/templates/company/navbar.html:50 +#: company/templates/company/purchase_orders.html:10 +#: order/templates/order/purchase_orders.html:8 +#: order/templates/order/purchase_orders.html:13 +#: part/templates/part/navbar.html:84 part/templates/part/navbar.html:87 +#: part/templates/part/orders.html:10 templates/InvenTree/index.html:205 +#: templates/InvenTree/search.html:325 +#: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37 +#: users/models.py:42 +msgid "Purchase Orders" +msgstr "" + +#: company/templates/company/notes.html:11 +msgid "Company Notes" +msgstr "" + +#: company/templates/company/purchase_orders.html:18 +#: order/templates/order/purchase_orders.html:20 +msgid "Create new purchase order" +msgstr "" + +#: company/templates/company/purchase_orders.html:19 +#: order/templates/order/purchase_orders.html:21 +msgid "New Purchase Order" +msgstr "" + +#: company/templates/company/sales_orders.html:19 +#: order/templates/order/sales_orders.html:20 +msgid "Create new sales order" +msgstr "" + +#: company/templates/company/sales_orders.html:20 +#: order/templates/order/sales_orders.html:21 +msgid "New Sales Order" +msgstr "" + +#: company/templates/company/supplier_part_base.html:7 +#: company/templates/company/supplier_part_base.html:20 stock/models.py:382 +#: stock/templates/stock/item_base.html:358 templates/js/company.js:279 +msgid "Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part_base.html:40 +msgid "Edit supplier part" +msgstr "" + +#: company/templates/company/supplier_part_base.html:44 +msgid "Delete supplier part" +msgstr "" + +#: company/templates/company/supplier_part_base.html:56 +#: company/templates/company/supplier_part_detail.html:10 +msgid "Supplier Part Details" +msgstr "" + +#: company/templates/company/supplier_part_delete.html:5 +msgid "Are you sure you want to delete the following Supplier Parts?" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part_stock.html:10 +msgid "Supplier Part Stock" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part_orders.html:10 +msgid "Supplier Part Orders" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:26 +msgid "Supplier Part Pricing" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:29 +msgid "Pricing" +msgstr "" + +#: company/templates/company/supplier_part_orders.html:18 +#: part/templates/part/orders.html:18 +msgid "Order Part" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:11 +msgid "Pricing Information" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:19 company/views.py:794 +#: part/templates/part/sale_prices.html:17 part/views.py:2624 +msgid "Add Price Break" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:38 +#: part/templates/part/sale_prices.html:46 +msgid "No price break information found" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:89 +#: part/templates/part/sale_prices.html:97 +msgid "Edit price break" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:90 +#: part/templates/part/sale_prices.html:98 +msgid "Delete price break" +msgstr "" + +#: company/views.py:70 part/templates/part/navbar.html:72 +#: part/templates/part/navbar.html:75 templates/InvenTree/search.html:306 +#: templates/navbar.html:36 +msgid "Manufacturers" +msgstr "" + +#: company/views.py:77 templates/InvenTree/search.html:336 +#: templates/navbar.html:45 +msgid "Customers" +msgstr "" + +#: company/views.py:78 order/templates/order/sales_orders.html:185 +msgid "New Customer" +msgstr "" + +#: company/views.py:86 +msgid "Companies" +msgstr "" + +#: company/views.py:87 +msgid "New Company" +msgstr "" + +#: company/views.py:169 part/views.py:848 +msgid "Download Image" +msgstr "" + +#: company/views.py:198 part/views.py:880 +msgid "Image size exceeds maximum allowable size for download" +msgstr "" + +#: company/views.py:214 part/views.py:896 +msgid "Supplied URL is not a valid image file" +msgstr "" + +#: company/views.py:243 +msgid "Update Company Image" +msgstr "" + +#: company/views.py:249 +msgid "Updated company image" +msgstr "" + +#: company/views.py:259 +msgid "Edit Company" +msgstr "" + +#: company/views.py:264 +msgid "Edited company information" +msgstr "" + +#: company/views.py:287 order/templates/order/sales_orders.html:186 +msgid "Create new Customer" +msgstr "" + +#: company/views.py:289 +msgid "Create new Company" +msgstr "" + +#: company/views.py:316 +msgid "Created new company" +msgstr "" + +#: company/views.py:332 +msgid "Company was deleted" +msgstr "" + +#: company/views.py:357 +msgid "Edit Manufacturer Part" +msgstr "" + +#: company/views.py:366 +msgid "Create New Manufacturer Part" +msgstr "" + +#: company/views.py:440 +msgid "Delete Manufacturer Part" +msgstr "" + +#: company/views.py:528 +msgid "Edit Supplier Part" +msgstr "" + +#: company/views.py:578 templates/js/stock.js:1164 +msgid "Create new Supplier Part" +msgstr "" + +#: company/views.py:722 +msgid "Delete Supplier Part" +msgstr "" + +#: company/views.py:799 part/views.py:2628 +msgid "Added new price break" +msgstr "" + +#: company/views.py:855 part/views.py:2672 +msgid "Edit Price Break" +msgstr "" + +#: company/views.py:870 part/views.py:2686 +msgid "Delete Price Break" +msgstr "" + +#: label/api.py:56 report/api.py:201 +msgid "No valid objects provided to template" +msgstr "" + +#: label/models.py:102 +msgid "Label name" +msgstr "" + +#: label/models.py:109 +msgid "Label description" +msgstr "" + +#: label/models.py:116 stock/forms.py:202 +msgid "Label" +msgstr "" + +#: label/models.py:117 +msgid "Label template file" +msgstr "" + +#: label/models.py:123 report/models.py:274 +msgid "Enabled" +msgstr "" + +#: label/models.py:124 +msgid "Label template is enabled" +msgstr "" + +#: label/models.py:129 +msgid "Width [mm]" +msgstr "" + +#: label/models.py:130 +msgid "Label width, specified in mm" +msgstr "" + +#: label/models.py:136 +msgid "Height [mm]" +msgstr "" + +#: label/models.py:137 +msgid "Label height, specified in mm" +msgstr "" + +#: label/models.py:222 label/models.py:275 +msgid "Query filters (comma-separated list of key=value pairs" +msgstr "" + +#: label/models.py:223 label/models.py:276 report/models.py:294 +#: report/models.py:415 report/models.py:449 +msgid "Filters" +msgstr "" + +#: order/forms.py:27 order/templates/order/order_base.html:47 +msgid "Place order" +msgstr "" + +#: order/forms.py:38 order/templates/order/order_base.html:54 +msgid "Mark order as complete" +msgstr "" + +#: order/forms.py:49 order/forms.py:60 order/templates/order/order_base.html:59 +#: order/templates/order/sales_order_base.html:59 +msgid "Cancel order" +msgstr "" + +#: order/forms.py:71 order/templates/order/sales_order_base.html:56 +msgid "Ship order" +msgstr "" + +#: order/forms.py:82 +msgid "Receive parts to this location" +msgstr "" + +#: order/forms.py:103 +msgid "Purchase Order reference" +msgstr "" + +#: order/forms.py:110 +msgid "Target date for order delivery. Order will be overdue after this date." +msgstr "" + +#: order/forms.py:138 +msgid "Enter sales order number" +msgstr "" + +#: order/forms.py:145 order/models.py:452 +msgid "" +"Target date for order completion. Order will be overdue after this date." +msgstr "" + +#: order/forms.py:235 +msgid "Enter stock item serial numbers" +msgstr "" + +#: order/forms.py:241 +msgid "Enter quantity of stock items" +msgstr "" + +#: order/models.py:99 +msgid "Order reference" +msgstr "" + +#: order/models.py:101 +msgid "Order description" +msgstr "" + +#: order/models.py:103 +msgid "Link to external page" +msgstr "" + +#: order/models.py:111 part/templates/part/detail.html:132 +msgid "Created By" +msgstr "" + +#: order/models.py:118 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:123 +msgid "Order notes" +msgstr "" + +#: order/models.py:182 order/models.py:445 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:191 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:194 order/templates/order/order_base.html:98 +#: templates/js/order.js:179 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:194 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:201 +msgid "received by" +msgstr "" + +#: order/models.py:206 +msgid "Issue Date" +msgstr "" + +#: order/models.py:207 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:212 +msgid "Target Delivery Date" +msgstr "" + +#: order/models.py:213 +msgid "" +"Expected date for order delivery. Order will be overdue after this date." +msgstr "" + +#: order/models.py:219 +msgid "Date order was completed" +msgstr "" + +#: order/models.py:243 order/models.py:342 part/views.py:1586 +#: stock/models.py:270 stock/models.py:953 +msgid "Quantity must be greater than zero" +msgstr "" + +#: order/models.py:248 +msgid "Part supplier must match PO supplier" +msgstr "" + +#: order/models.py:337 +msgid "Lines can only be received against an order marked as 'Placed'" +msgstr "" + +#: order/models.py:359 +msgid "Received items" +msgstr "" + +#: order/models.py:441 +msgid "Company to which the items are being sold" +msgstr "" + +#: order/models.py:447 +msgid "Customer Reference " +msgstr "" + +#: order/models.py:447 +msgid "Customer order reference code" +msgstr "" + +#: order/models.py:455 templates/js/order.js:303 +msgid "Shipment Date" +msgstr "" + +#: order/models.py:462 +msgid "shipped by" +msgstr "" + +#: order/models.py:506 +msgid "SalesOrder cannot be shipped as it is not currently pending" +msgstr "" + +#: order/models.py:593 +msgid "Item quantity" +msgstr "" + +#: order/models.py:595 +msgid "Line item reference" +msgstr "" + +#: order/models.py:597 +msgid "Line item notes" +msgstr "" + +#: order/models.py:623 order/models.py:667 +#: part/templates/part/allocation.html:17 +#: part/templates/part/allocation.html:45 +msgid "Order" +msgstr "" + +#: order/models.py:624 order/templates/order/order_base.html:9 +#: order/templates/order/order_base.html:24 +#: report/templates/report/inventree_po_report.html:77 +#: stock/templates/stock/item_base.html:313 templates/js/order.js:148 +msgid "Purchase Order" +msgstr "" + +#: order/models.py:638 +msgid "Supplier part" +msgstr "" + +#: order/models.py:641 order/templates/order/order_base.html:131 +#: order/templates/order/purchase_order_detail.html:214 +#: order/templates/order/receive_parts.html:22 +#: order/templates/order/sales_order_base.html:131 +msgid "Received" +msgstr "" + +#: order/models.py:641 +msgid "Number of items received" +msgstr "" + +#: order/models.py:648 stock/models.py:508 +#: stock/templates/stock/item_base.html:320 +msgid "Purchase Price" +msgstr "" + +#: order/models.py:649 +msgid "Unit purchase price" +msgstr "" + +#: order/models.py:743 order/models.py:745 +msgid "Stock item has not been assigned" +msgstr "" + +#: order/models.py:749 +msgid "Cannot allocate stock item to a line with a different part" +msgstr "" + +#: order/models.py:751 +msgid "Cannot allocate stock to a line without a part" +msgstr "" + +#: order/models.py:754 +msgid "Allocation quantity cannot exceed stock quantity" +msgstr "" + +#: order/models.py:764 +msgid "Quantity must be 1 for serialized stock item" +msgstr "" + +#: order/models.py:769 +msgid "Line" +msgstr "" + +#: order/models.py:780 +msgid "Item" +msgstr "" + +#: order/models.py:781 +msgid "Select stock item to allocate" +msgstr "" + +#: order/models.py:784 +msgid "Enter stock allocation quantity" +msgstr "" + +#: order/templates/order/delete_attachment.html:5 +#: stock/templates/stock/attachment_delete.html:5 +#: templates/attachment_delete.html:5 +msgid "Are you sure you want to delete this attachment?" +msgstr "" + +#: order/templates/order/order_base.html:39 +#: order/templates/order/sales_order_base.html:48 +msgid "Print" +msgstr "" + +#: order/templates/order/order_base.html:43 +#: order/templates/order/sales_order_base.html:52 +msgid "Edit order information" +msgstr "" + +#: order/templates/order/order_base.html:51 +msgid "Receive items" +msgstr "" + +#: order/templates/order/order_base.html:64 +msgid "Export order to file" +msgstr "" + +#: order/templates/order/order_base.html:72 +#: order/templates/order/po_navbar.html:11 +msgid "Purchase Order Details" +msgstr "" + +#: order/templates/order/order_base.html:77 +#: order/templates/order/sales_order_base.html:77 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:82 +#: order/templates/order/sales_order_base.html:82 +msgid "Order Status" +msgstr "" + +#: order/templates/order/order_base.html:117 +#: report/templates/report/inventree_build_order_base.html:122 +msgid "Issued" +msgstr "" + +#: order/templates/order/order_cancel.html:7 +#: order/templates/order/sales_order_cancel.html:9 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: order/templates/order/order_complete.html:7 +msgid "Mark this order as complete?" +msgstr "" + +#: order/templates/order/order_complete.html:10 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: order/templates/order/order_complete.html:11 +msgid "Marking this order as complete will remove these line items." +msgstr "" + +#: order/templates/order/order_issue.html:7 +msgid "" +"After placing this purchase order, line items will no longer be editable." +msgstr "" + +#: order/templates/order/order_notes.html:13 +msgid "Order Notes" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:9 +msgid "Step 1 of 2 - Select Part Suppliers" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:14 +msgid "Select suppliers" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:18 +msgid "No purchaseable parts selected" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:31 +msgid "Select Supplier" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:57 +#, python-format +msgid "Select a supplier for %(name)s" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:69 +#: part/templates/part/set_category.html:32 +msgid "Remove part" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:8 +msgid "Step 2 of 2 - Select Purchase Orders" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:12 +msgid "Select existing purchase orders, or create new orders." +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:31 +#: templates/js/order.js:205 templates/js/order.js:308 +msgid "Items" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:32 +msgid "Select Purchase Order" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:45 +#, python-format +msgid "Create new purchase order for %(name)s" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:68 +#, python-format +msgid "Select a purchase order for %(name)s" +msgstr "" + +#: order/templates/order/po_attachments.html:12 +#: order/templates/order/po_navbar.html:23 +msgid "Purchase Order Attachments" +msgstr "" + +#: order/templates/order/po_navbar.html:17 +msgid "Received Stock Items" +msgstr "" + +#: order/templates/order/po_navbar.html:20 +#: order/templates/order/po_received_items.html:12 +msgid "Received Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:14 +msgid "Purchase Order Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:24 +#: order/templates/order/sales_order_detail.html:22 order/views.py:1108 +#: order/views.py:1191 +msgid "Add Line Item" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:125 +#: part/templates/part/category.html:185 part/templates/part/category.html:227 +#: stock/templates/stock/location.html:191 templates/js/stock.js:708 +#: templates/js/stock.js:1169 +msgid "New Location" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:46 +#: order/templates/order/purchase_order_detail.html:126 +#: stock/templates/stock/location.html:42 +msgid "Create new stock location" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:139 +msgid "No line items found" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:205 +msgid "Unit Price" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:246 +#: order/templates/order/sales_order_detail.html:294 +msgid "Edit line item" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:247 +msgid "Delete line item" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:252 +msgid "Receive line item" +msgstr "" + +#: order/templates/order/purchase_orders.html:24 +#: order/templates/order/sales_orders.html:24 +msgid "Print Order Reports" +msgstr "" + +#: order/templates/order/receive_parts.html:8 +#, python-format +msgid "Receive outstanding parts for %(order)s - %(desc)s" +msgstr "" + +#: order/templates/order/receive_parts.html:14 part/api.py:40 +#: part/models.py:322 part/templates/part/cat_link.html:7 +#: part/templates/part/category.html:99 +#: part/templates/part/category_navbar.html:22 +#: part/templates/part/category_navbar.html:29 +#: part/templates/part/category_partlist.html:10 +#: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114 +#: templates/InvenTree/settings/tabs.html:25 templates/js/part.js:577 +#: templates/navbar.html:23 templates/stats.html:59 templates/stats.html:68 +#: users/models.py:38 +msgid "Parts" +msgstr "" + +#: order/templates/order/receive_parts.html:15 +msgid "Select parts to receive against this order" +msgstr "" + +#: order/templates/order/receive_parts.html:20 +msgid "Order Code" +msgstr "" + +#: order/templates/order/receive_parts.html:21 +#: part/templates/part/part_base.html:129 templates/js/part.js:414 +msgid "On Order" +msgstr "" + +#: order/templates/order/receive_parts.html:23 +msgid "Receive" +msgstr "" + +#: order/templates/order/receive_parts.html:36 +msgid "Error: Referenced part has been removed" +msgstr "" + +#: order/templates/order/receive_parts.html:57 +msgid "Remove line" +msgstr "" + +#: order/templates/order/sales_order_base.html:15 +msgid "This SalesOrder has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:64 +msgid "Packing List" +msgstr "" + +#: order/templates/order/sales_order_base.html:72 +#: order/templates/order/so_navbar.html:12 +msgid "Sales Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:98 templates/js/order.js:275 +msgid "Customer Reference" +msgstr "" + +#: order/templates/order/sales_order_cancel.html:8 +#: order/templates/order/sales_order_ship.html:9 +#: part/templates/part/bom_duplicate.html:12 +#: stock/templates/stock/stockitem_convert.html:13 +msgid "Warning" +msgstr "" + +#: order/templates/order/sales_order_detail.html:13 +msgid "Sales Order Items" +msgstr "" + +#: order/templates/order/sales_order_detail.html:75 +#: order/templates/order/sales_order_detail.html:157 +#: report/templates/report/inventree_test_report_base.html:75 +#: stock/models.py:420 stock/templates/stock/item_base.html:238 +#: templates/js/build.js:418 +msgid "Serial Number" +msgstr "" + +#: order/templates/order/sales_order_detail.html:92 templates/js/bom.js:342 +#: templates/js/build.js:571 templates/js/build.js:984 +msgid "Actions" +msgstr "" + +#: order/templates/order/sales_order_detail.html:99 templates/js/build.js:459 +#: templates/js/build.js:789 +msgid "Edit stock allocation" +msgstr "" + +#: order/templates/order/sales_order_detail.html:100 templates/js/build.js:461 +#: templates/js/build.js:790 +msgid "Delete stock allocation" +msgstr "" + +#: order/templates/order/sales_order_detail.html:170 +msgid "No matching line items" +msgstr "" + +#: order/templates/order/sales_order_detail.html:199 +msgid "ID" +msgstr "" + +#: order/templates/order/sales_order_detail.html:229 templates/js/build.js:523 +#: templates/js/build.js:785 +msgid "Allocated" +msgstr "" + +#: order/templates/order/sales_order_detail.html:231 +msgid "Fulfilled" +msgstr "" + +#: order/templates/order/sales_order_detail.html:279 +msgid "Allocate serial numbers" +msgstr "" + +#: order/templates/order/sales_order_detail.html:282 templates/js/build.js:585 +msgid "Allocate stock" +msgstr "" + +#: order/templates/order/sales_order_detail.html:285 +msgid "Purchase stock" +msgstr "" + +#: order/templates/order/sales_order_detail.html:289 templates/js/build.js:578 +#: templates/js/build.js:992 +msgid "Build stock" +msgstr "" + +#: order/templates/order/sales_order_detail.html:295 +msgid "Delete line item " +msgstr "" + +#: order/templates/order/sales_order_notes.html:14 +msgid "Sales Order Notes" +msgstr "" + +#: order/templates/order/sales_order_ship.html:10 +msgid "" +"This order has not been fully allocated. If the order is marked as shipped, " +"it can no longer be adjusted." +msgstr "" + +#: order/templates/order/sales_order_ship.html:12 +msgid "Ensure that the order allocation is correct before shipping the order." +msgstr "" + +#: order/templates/order/sales_order_ship.html:18 +msgid "Some line items in this order have been over-allocated" +msgstr "" + +#: order/templates/order/sales_order_ship.html:20 +msgid "Ensure that this is correct before shipping the order." +msgstr "" + +#: order/templates/order/sales_order_ship.html:27 +msgid "Shipping this order means that the order will no longer be editable." +msgstr "" + +#: order/templates/order/so_allocate_by_serial.html:9 +msgid "Allocate stock items by serial number" +msgstr "" + +#: order/templates/order/so_allocation_delete.html:7 +msgid "This action will unallocate the following stock from the Sales Order" +msgstr "" + +#: order/templates/order/so_attachments.html:12 +#: order/templates/order/so_navbar.html:26 +msgid "Sales Order Attachments" +msgstr "" + +#: order/templates/order/so_lineitem_delete.html:5 +msgid "Are you sure you wish to delete this line item?" +msgstr "" + +#: order/views.py:99 +msgid "Add Purchase Order Attachment" +msgstr "" + +#: order/views.py:149 +msgid "Add Sales Order Attachment" +msgstr "" + +#: order/views.py:341 +msgid "Create Sales Order" +msgstr "" + +#: order/views.py:376 +msgid "Edit Purchase Order" +msgstr "" + +#: order/views.py:396 +msgid "Edit Sales Order" +msgstr "" + +#: order/views.py:412 +msgid "Cancel Order" +msgstr "" + +#: order/views.py:421 order/views.py:447 +msgid "Confirm order cancellation" +msgstr "" + +#: order/views.py:424 order/views.py:450 +msgid "Order cannot be cancelled" +msgstr "" + +#: order/views.py:438 +msgid "Cancel sales order" +msgstr "" + +#: order/views.py:464 +msgid "Issue Order" +msgstr "" + +#: order/views.py:473 +msgid "Confirm order placement" +msgstr "" + +#: order/views.py:483 +msgid "Purchase order issued" +msgstr "" + +#: order/views.py:494 +msgid "Complete Order" +msgstr "" + +#: order/views.py:510 +msgid "Confirm order completion" +msgstr "" + +#: order/views.py:521 +msgid "Purchase order completed" +msgstr "" + +#: order/views.py:531 +msgid "Ship Order" +msgstr "" + +#: order/views.py:547 +msgid "Confirm order shipment" +msgstr "" + +#: order/views.py:553 +msgid "Could not ship order" +msgstr "" + +#: order/views.py:607 +msgid "Receive Parts" +msgstr "" + +#: order/views.py:677 +msgid "Items received" +msgstr "" + +#: order/views.py:691 +msgid "No destination set" +msgstr "" + +#: order/views.py:736 +msgid "Error converting quantity to number" +msgstr "" + +#: order/views.py:742 +msgid "Receive quantity less than zero" +msgstr "" + +#: order/views.py:748 +msgid "No lines specified" +msgstr "" + +#: order/views.py:1060 +#, python-brace-format +msgid "Ordered {n} parts" +msgstr "" + +#: order/views.py:1117 +msgid "Supplier part must be specified" +msgstr "" + +#: order/views.py:1123 +msgid "Supplier must match for Part and Order" +msgstr "" + +#: order/views.py:1242 order/views.py:1260 +msgid "Edit Line Item" +msgstr "" + +#: order/views.py:1276 order/views.py:1288 +msgid "Delete Line Item" +msgstr "" + +#: order/views.py:1281 order/views.py:1293 +msgid "Deleted line item" +msgstr "" + +#: order/views.py:1306 +msgid "Allocate Serial Numbers" +msgstr "" + +#: order/views.py:1351 +#, python-brace-format +msgid "Allocated {n} items" +msgstr "" + +#: order/views.py:1367 +msgid "Select line item" +msgstr "" + +#: order/views.py:1398 +msgid "No matching item for serial" +msgstr "" + +#: order/views.py:1408 +msgid "is not in stock" +msgstr "" + +#: order/views.py:1416 +msgid "already allocated to an order" +msgstr "" + +#: order/views.py:1470 +msgid "Allocate Stock to Order" +msgstr "" + +#: order/views.py:1544 +msgid "Edit Allocation Quantity" +msgstr "" + +#: order/views.py:1559 +msgid "Remove allocation" +msgstr "" + +#: part/bom.py:138 part/models.py:72 part/models.py:762 +#: part/templates/part/category.html:66 part/templates/part/detail.html:90 +msgid "Default Location" +msgstr "" + +#: part/bom.py:139 part/templates/part/part_base.html:117 +msgid "Available Stock" +msgstr "" + +#: part/bom.py:379 +#, python-brace-format +msgid "Unsupported file format: {f}" +msgstr "" + +#: part/bom.py:384 +msgid "Error reading BOM file (invalid data)" +msgstr "" + +#: part/bom.py:386 +msgid "Error reading BOM file (incorrect row size)" +msgstr "" + +#: part/forms.py:89 stock/forms.py:265 +msgid "File Format" +msgstr "" + +#: part/forms.py:89 stock/forms.py:265 +msgid "Select output file format" +msgstr "" + +#: part/forms.py:91 +msgid "Cascading" +msgstr "" + +#: part/forms.py:91 +msgid "Download cascading / multi-level BOM" +msgstr "" + +#: part/forms.py:93 +msgid "Levels" +msgstr "" + +#: part/forms.py:93 +msgid "Select maximum number of BOM levels to export (0 = all levels)" +msgstr "" + +#: part/forms.py:95 +msgid "Include Parameter Data" +msgstr "" + +#: part/forms.py:95 +msgid "Include part parameters data in exported BOM" +msgstr "" + +#: part/forms.py:97 +msgid "Include Stock Data" +msgstr "" + +#: part/forms.py:97 +msgid "Include part stock data in exported BOM" +msgstr "" + +#: part/forms.py:99 +msgid "Include Manufacturer Data" +msgstr "" + +#: part/forms.py:99 +msgid "Include part manufacturer data in exported BOM" +msgstr "" + +#: part/forms.py:101 +msgid "Include Supplier Data" +msgstr "" + +#: part/forms.py:101 +msgid "Include part supplier data in exported BOM" +msgstr "" + +#: part/forms.py:122 part/models.py:2077 +msgid "Parent Part" +msgstr "" + +#: part/forms.py:123 part/templates/part/bom_duplicate.html:7 +msgid "Select parent part to copy BOM from" +msgstr "" + +#: part/forms.py:129 +msgid "Clear existing BOM items" +msgstr "" + +#: part/forms.py:135 +msgid "Confirm BOM duplication" +msgstr "" + +#: part/forms.py:153 +msgid "validate" +msgstr "" + +#: part/forms.py:153 +msgid "Confirm that the BOM is correct" +msgstr "" + +#: part/forms.py:165 +msgid "BOM file" +msgstr "" + +#: part/forms.py:165 +msgid "Select BOM file to upload" +msgstr "" + +#: part/forms.py:184 +msgid "Related Part" +msgstr "" + +#: part/forms.py:203 +msgid "Select part category" +msgstr "" + +#: part/forms.py:220 +msgid "Duplicate all BOM data for this part" +msgstr "" + +#: part/forms.py:221 +msgid "Copy BOM" +msgstr "" + +#: part/forms.py:226 +msgid "Duplicate all parameter data for this part" +msgstr "" + +#: part/forms.py:227 +msgid "Copy Parameters" +msgstr "" + +#: part/forms.py:232 +msgid "Confirm part creation" +msgstr "" + +#: part/forms.py:237 +msgid "Include category parameter templates" +msgstr "" + +#: part/forms.py:242 +msgid "Include parent categories parameter templates" +msgstr "" + +#: part/forms.py:322 +msgid "Add parameter template to same level categories" +msgstr "" + +#: part/forms.py:326 +msgid "Add parameter template to all categories" +msgstr "" + +#: part/forms.py:344 part/models.py:2171 +msgid "Sub part" +msgstr "" + +#: part/forms.py:372 +msgid "Input quantity for price calculation" +msgstr "" + +#: part/models.py:73 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:76 +msgid "Default keywords" +msgstr "" + +#: part/models.py:76 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:82 part/models.py:2123 +#: part/templates/part/part_app_base.html:10 +msgid "Part Category" +msgstr "" + +#: part/models.py:83 part/templates/part/category.html:23 +#: part/templates/part/category.html:94 part/templates/part/category.html:141 +#: templates/InvenTree/search.html:127 templates/stats.html:63 +#: users/models.py:37 +msgid "Part Categories" +msgstr "" + +#: part/models.py:446 part/models.py:458 +#, python-brace-format +msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" +msgstr "" + +#: part/models.py:555 +msgid "Next available serial numbers are" +msgstr "" + +#: part/models.py:559 +msgid "Next available serial number is" +msgstr "" + +#: part/models.py:564 +msgid "Most recent serial number is" +msgstr "" + +#: part/models.py:643 +msgid "Duplicate IPN not allowed in part settings" +msgstr "" + +#: part/models.py:654 +msgid "Part must be unique for name, IPN and revision" +msgstr "" + +#: part/models.py:685 part/templates/part/detail.html:22 +msgid "Part name" +msgstr "" + +#: part/models.py:692 +msgid "Is Template" +msgstr "" + +#: part/models.py:693 +msgid "Is this part a template part?" +msgstr "" + +#: part/models.py:704 +msgid "Is this part a variant of another part?" +msgstr "" + +#: part/models.py:705 part/templates/part/detail.html:60 +msgid "Variant Of" +msgstr "" + +#: part/models.py:711 +msgid "Part description" +msgstr "" + +#: part/models.py:716 part/templates/part/category.html:73 +#: part/templates/part/detail.html:67 +msgid "Keywords" +msgstr "" + +#: part/models.py:717 +msgid "Part keywords to improve visibility in search results" +msgstr "" + +#: part/models.py:724 part/models.py:2122 part/templates/part/detail.html:73 +#: part/templates/part/set_category.html:15 templates/js/part.js:385 +msgid "Category" +msgstr "" + +#: part/models.py:725 +msgid "Part category" +msgstr "" + +#: part/models.py:730 part/templates/part/detail.html:28 +#: part/templates/part/part_base.html:94 templates/js/part.js:161 +msgid "IPN" +msgstr "" + +#: part/models.py:731 +msgid "Internal Part Number" +msgstr "" + +#: part/models.py:737 +msgid "Part revision or version number" +msgstr "" + +#: part/models.py:738 part/templates/part/detail.html:35 report/models.py:198 +#: templates/js/part.js:165 +msgid "Revision" +msgstr "" + +#: part/models.py:760 +msgid "Where is this item normally stored?" +msgstr "" + +#: part/models.py:807 part/templates/part/detail.html:97 +msgid "Default Supplier" +msgstr "" + +#: part/models.py:808 +msgid "Default supplier part" +msgstr "" + +#: part/models.py:815 +msgid "Default Expiry" +msgstr "" + +#: part/models.py:816 +msgid "Expiry time (in days) for stock items of this part" +msgstr "" + +#: part/models.py:821 part/templates/part/detail.html:113 +msgid "Minimum Stock" +msgstr "" + +#: part/models.py:822 +msgid "Minimum allowed stock level" +msgstr "" + +#: part/models.py:828 part/models.py:2051 part/templates/part/detail.html:106 +#: part/templates/part/params.html:29 +msgid "Units" +msgstr "" + +#: part/models.py:829 +msgid "Stock keeping units for this part" +msgstr "" + +#: part/models.py:835 +msgid "Can this part be built from other parts?" +msgstr "" + +#: part/models.py:841 +msgid "Can this part be used to build other parts?" +msgstr "" + +#: part/models.py:847 +msgid "Does this part have tracking for unique items?" +msgstr "" + +#: part/models.py:852 +msgid "Can this part be purchased from external suppliers?" +msgstr "" + +#: part/models.py:857 +msgid "Can this part be sold to customers?" +msgstr "" + +#: part/models.py:861 part/templates/part/detail.html:227 +#: templates/js/table_filters.js:20 templates/js/table_filters.js:60 +#: templates/js/table_filters.js:236 templates/js/table_filters.js:305 +msgid "Active" +msgstr "" + +#: part/models.py:862 +msgid "Is this part active?" +msgstr "" + +#: part/models.py:867 +msgid "Is this a virtual part, such as a software product or license?" +msgstr "" + +#: part/models.py:872 +msgid "Part notes - supports Markdown formatting" +msgstr "" + +#: part/models.py:875 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:875 +msgid "Stored BOM checksum" +msgstr "" + +#: part/models.py:878 +msgid "BOM checked by" +msgstr "" + +#: part/models.py:880 +msgid "BOM checked date" +msgstr "" + +#: part/models.py:884 +msgid "Creation User" +msgstr "" + +#: part/models.py:1949 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:1966 +msgid "Test with this name already exists for this part" +msgstr "" + +#: part/models.py:1986 templates/js/part.js:638 templates/js/stock.js:104 +msgid "Test Name" +msgstr "" + +#: part/models.py:1987 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:1992 +msgid "Test Description" +msgstr "" + +#: part/models.py:1993 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:1998 templates/js/part.js:647 +#: templates/js/table_filters.js:222 +msgid "Required" +msgstr "" + +#: part/models.py:1999 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:2004 templates/js/part.js:655 +msgid "Requires Value" +msgstr "" + +#: part/models.py:2005 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:2010 templates/js/part.js:662 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:2011 +msgid "Does this test require a file attachment when adding a test result?" +msgstr "" + +#: part/models.py:2044 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:2049 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:2051 +msgid "Parameter Units" +msgstr "" + +#: part/models.py:2079 part/models.py:2128 part/models.py:2129 +#: templates/InvenTree/settings/category.html:62 +msgid "Parameter Template" +msgstr "" + +#: part/models.py:2081 +msgid "Data" +msgstr "" + +#: part/models.py:2081 +msgid "Parameter Value" +msgstr "" + +#: part/models.py:2133 templates/InvenTree/settings/category.html:67 +msgid "Default Value" +msgstr "" + +#: part/models.py:2134 +msgid "Default Parameter Value" +msgstr "" + +#: part/models.py:2163 +msgid "Select parent part" +msgstr "" + +#: part/models.py:2172 +msgid "Select part to be used in BOM" +msgstr "" + +#: part/models.py:2178 +msgid "BOM quantity for this BOM item" +msgstr "" + +#: part/models.py:2180 templates/js/bom.js:216 templates/js/bom.js:269 +msgid "Optional" +msgstr "" + +#: part/models.py:2180 +msgid "This BOM item is optional" +msgstr "" + +#: part/models.py:2183 +msgid "Overage" +msgstr "" + +#: part/models.py:2184 +msgid "Estimated build wastage quantity (absolute or percentage)" +msgstr "" + +#: part/models.py:2187 +msgid "BOM item reference" +msgstr "" + +#: part/models.py:2190 +msgid "BOM item notes" +msgstr "" + +#: part/models.py:2192 +msgid "Checksum" +msgstr "" + +#: part/models.py:2192 +msgid "BOM line checksum" +msgstr "" + +#: part/models.py:2196 templates/js/bom.js:279 templates/js/bom.js:286 +#: templates/js/table_filters.js:50 +msgid "Inherited" +msgstr "" + +#: part/models.py:2197 +msgid "This BOM item is inherited by BOMs for variant parts" +msgstr "" + +#: part/models.py:2273 part/views.py:1592 part/views.py:1644 +#: stock/models.py:260 +msgid "Quantity must be integer value for trackable parts" +msgstr "" + +#: part/models.py:2282 part/models.py:2284 +msgid "Sub part must be specified" +msgstr "" + +#: part/models.py:2287 +msgid "BOM Item" +msgstr "" + +#: part/models.py:2404 +msgid "Part 1" +msgstr "" + +#: part/models.py:2408 +msgid "Part 2" +msgstr "" + +#: part/models.py:2408 +msgid "Select Related Part" +msgstr "" + +#: part/models.py:2440 +msgid "" +"Error creating relationship: check that the part is not related to itself " +"and that the relationship is unique" +msgstr "" + +#: part/templates/part/allocation.html:11 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/attachments.html:10 +msgid "Part Attachments" +msgstr "" + +#: part/templates/part/bom-delete.html:6 +msgid "Are you sure you want to delete this BOM item?" +msgstr "" + +#: part/templates/part/bom-delete.html:8 +msgid "Deleting this entry will remove the BOM row from the following part" +msgstr "" + +#: part/templates/part/bom.html:10 part/templates/part/navbar.html:48 +#: part/templates/part/navbar.html:51 +msgid "Bill of Materials" +msgstr "" + +#: part/templates/part/bom.html:19 +#, python-format +msgid "The BOM for %(part)s has changed, and must be validated.
    " +msgstr "" + +#: part/templates/part/bom.html:21 +#, python-format +msgid "" +"The BOM for %(part)s was last checked by %(checker)s on %(check_date)s" +msgstr "" + +#: part/templates/part/bom.html:25 +#, python-format +msgid "The BOM for %(part)s has not been validated." +msgstr "" + +#: part/templates/part/bom.html:32 +msgid "Remove selected BOM items" +msgstr "" + +#: part/templates/part/bom.html:35 +msgid "Import BOM data" +msgstr "" + +#: part/templates/part/bom.html:39 +msgid "Copy BOM from parent part" +msgstr "" + +#: part/templates/part/bom.html:43 +msgid "New BOM Item" +msgstr "" + +#: part/templates/part/bom.html:46 +msgid "Finish Editing" +msgstr "" + +#: part/templates/part/bom.html:51 +msgid "Edit BOM" +msgstr "" + +#: part/templates/part/bom.html:55 +msgid "Validate Bill of Materials" +msgstr "" + +#: part/templates/part/bom.html:61 part/views.py:1887 +msgid "Export Bill of Materials" +msgstr "" + +#: part/templates/part/bom.html:64 +msgid "Print BOM Report" +msgstr "" + +#: part/templates/part/bom.html:109 +msgid "Delete selected BOM items?" +msgstr "" + +#: part/templates/part/bom.html:110 +msgid "All selected BOM items will be deleted" +msgstr "" + +#: part/templates/part/bom.html:160 part/views.py:584 +#: templates/js/stock.js:1158 +msgid "Create New Part" +msgstr "" + +#: part/templates/part/bom_duplicate.html:13 +msgid "This part already has a Bill of Materials" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:11 +#: part/templates/part/bom_upload/select_parts.html:11 +#: part/templates/part/bom_upload/upload_file.html:11 +msgid "Upload Bill of Materials" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:16 +msgid "Step 2 - Select Fields" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:21 +msgid "Missing selections for the following required columns" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:32 +msgid "Submit Selections" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:41 +msgid "File Fields" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:47 +msgid "Remove column" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:58 +msgid "Match Fields" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:68 +msgid "Duplicate column selection" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:76 +#: part/templates/part/bom_upload/select_parts.html:58 +msgid "Remove row" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:16 +msgid "Step 3 - Select Parts" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:21 +msgid "Errors exist in the submitted data" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:27 +msgid "Submit BOM" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:39 +msgid "Row" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:40 +#: part/templates/part/bom_upload/select_parts.html:69 +msgid "Select Part" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:65 +#: part/templates/part/category.html:117 +msgid "Create new part" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:16 +msgid "Step 1 - Select BOM File" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:19 +msgid "Requirements for BOM upload" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:21 +msgid "" +"The BOM file must contain the required named columns as provided in the " +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:21 +msgid "BOM Upload Template" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:22 +msgid "Each part must already exist in the database" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:27 +msgid "Upload File" +msgstr "" + +#: part/templates/part/bom_validate.html:6 +#, python-format +msgid "" +"Confirm that the Bill of Materials (BOM) is valid for:
    %(part)s" +msgstr "" + +#: part/templates/part/bom_validate.html:9 +msgid "This will validate each line in the BOM." +msgstr "" + +#: part/templates/part/build.html:10 +msgid "Part Builds" +msgstr "" + +#: part/templates/part/build.html:18 +msgid "Start New Build" +msgstr "" + +#: part/templates/part/category.html:24 +msgid "All parts" +msgstr "" + +#: part/templates/part/category.html:29 part/views.py:2270 +msgid "Create new part category" +msgstr "" + +#: part/templates/part/category.html:35 +msgid "Edit part category" +msgstr "" + +#: part/templates/part/category.html:40 +msgid "Delete part category" +msgstr "" + +#: part/templates/part/category.html:50 part/templates/part/category.html:89 +msgid "Category Details" +msgstr "" + +#: part/templates/part/category.html:55 +msgid "Category Path" +msgstr "" + +#: part/templates/part/category.html:60 +msgid "Category Description" +msgstr "" + +#: part/templates/part/category.html:79 +#: part/templates/part/category_navbar.html:11 +#: part/templates/part/category_navbar.html:18 +#: part/templates/part/subcategory.html:16 +msgid "Subcategories" +msgstr "" + +#: part/templates/part/category.html:84 +msgid "Parts (Including subcategories)" +msgstr "" + +#: part/templates/part/category.html:113 +msgid "Export Part Data" +msgstr "" + +#: part/templates/part/category.html:125 +msgid "Set category" +msgstr "" + +#: part/templates/part/category.html:125 +msgid "Set Category" +msgstr "" + +#: part/templates/part/category.html:128 +msgid "Export Data" +msgstr "" + +#: part/templates/part/category.html:186 +#: stock/templates/stock/location.html:192 templates/js/stock.js:709 +msgid "Create new location" +msgstr "" + +#: part/templates/part/category.html:191 part/templates/part/category.html:221 +msgid "New Category" +msgstr "" + +#: part/templates/part/category.html:192 +msgid "Create new category" +msgstr "" + +#: part/templates/part/category.html:222 +msgid "Create new Part Category" +msgstr "" + +#: part/templates/part/category.html:228 stock/views.py:1359 +msgid "Create new Stock Location" +msgstr "" + +#: part/templates/part/category_delete.html:5 +msgid "Are you sure you want to delete category" +msgstr "" + +#: part/templates/part/category_delete.html:8 +#, python-format +msgid "This category contains %(count)s child categories" +msgstr "" + +#: part/templates/part/category_delete.html:9 +msgid "" +"If this category is deleted, these child categories will be moved to the" +msgstr "" + +#: part/templates/part/category_delete.html:11 +msgid "category" +msgstr "" + +#: part/templates/part/category_delete.html:13 +msgid "top level Parts category" +msgstr "" + +#: part/templates/part/category_delete.html:25 +#, python-format +msgid "This category contains %(count)s parts" +msgstr "" + +#: part/templates/part/category_delete.html:27 +#, python-format +msgid "" +"If this category is deleted, these parts will be moved to the parent " +"category %(path)s" +msgstr "" + +#: part/templates/part/category_delete.html:29 +msgid "" +"If this category is deleted, these parts will be moved to the top-level " +"category Teile" +msgstr "" + +#: part/templates/part/category_navbar.html:34 +#: part/templates/part/category_navbar.html:37 +#: part/templates/part/navbar.html:22 +msgid "Parameters" +msgstr "" + +#: part/templates/part/category_parametric.html:10 +#: part/templates/part/navbar.html:19 part/templates/part/params.html:10 +msgid "Part Parameters" +msgstr "" + +#: part/templates/part/copy_part.html:9 part/views.py:460 +msgid "Duplicate Part" +msgstr "" + +#: part/templates/part/copy_part.html:10 +#, python-format +msgid "Make a copy of part '%(full_name)s'." +msgstr "" + +#: part/templates/part/copy_part.html:14 +#: part/templates/part/create_part.html:11 +msgid "Possible Matching Parts" +msgstr "" + +#: part/templates/part/copy_part.html:15 +#: part/templates/part/create_part.html:12 +msgid "The new part may be a duplicate of these existing parts" +msgstr "" + +#: part/templates/part/create_part.html:17 +#, python-format +msgid "%(full_name)s - %(desc)s (%(match_per)s%% match)" +msgstr "" + +#: part/templates/part/detail.html:11 part/templates/part/navbar.html:11 +msgid "Part Details" +msgstr "" + +#: part/templates/part/detail.html:42 +msgid "Latest Serial Number" +msgstr "" + +#: part/templates/part/detail.html:47 +msgid "No serial numbers recorded" +msgstr "" + +#: part/templates/part/detail.html:120 +msgid "Stock Expiry Time" +msgstr "" + +#: part/templates/part/detail.html:139 +msgid "Responsible User" +msgstr "" + +#: part/templates/part/detail.html:153 +msgid "Part is virtual (not a physical part)" +msgstr "" + +#: part/templates/part/detail.html:155 +msgid "Part is not a virtual part" +msgstr "" + +#: part/templates/part/detail.html:163 +msgid "Part is a template part (variants can be made from this part)" +msgstr "" + +#: part/templates/part/detail.html:165 +msgid "Part is not a template part" +msgstr "" + +#: part/templates/part/detail.html:173 +msgid "Part can be assembled from other parts" +msgstr "" + +#: part/templates/part/detail.html:175 +msgid "Part cannot be assembled from other parts" +msgstr "" + +#: part/templates/part/detail.html:183 +msgid "Part can be used in assemblies" +msgstr "" + +#: part/templates/part/detail.html:185 +msgid "Part cannot be used in assemblies" +msgstr "" + +#: part/templates/part/detail.html:193 +msgid "Part stock is tracked by serial number" +msgstr "" + +#: part/templates/part/detail.html:195 +msgid "Part stock is not tracked by serial number" +msgstr "" + +#: part/templates/part/detail.html:203 part/templates/part/detail.html:205 +msgid "Part can be purchased from external suppliers" +msgstr "" + +#: part/templates/part/detail.html:213 +msgid "Part can be sold to customers" +msgstr "" + +#: part/templates/part/detail.html:215 +msgid "Part cannot be sold to customers" +msgstr "" + +#: part/templates/part/detail.html:230 +msgid "Part is active" +msgstr "" + +#: part/templates/part/detail.html:232 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/manufacturer.html:11 +msgid "Part Manufacturers" +msgstr "" + +#: part/templates/part/manufacturer.html:24 +msgid "Delete manufacturer parts" +msgstr "" + +#: part/templates/part/manufacturer.html:53 +#: part/templates/part/supplier.html:57 +msgid "Create new manufacturer" +msgstr "" + +#: part/templates/part/navbar.html:26 part/templates/part/variants.html:11 +msgid "Part Variants" +msgstr "" + +#: part/templates/part/navbar.html:29 +msgid "Variants" +msgstr "" + +#: part/templates/part/navbar.html:40 +msgid "Allocated Stock" +msgstr "" + +#: part/templates/part/navbar.html:43 +msgid "Allocations" +msgstr "" + +#: part/templates/part/navbar.html:64 part/templates/part/navbar.html:67 +msgid "Used In" +msgstr "" + +#: part/templates/part/navbar.html:92 +msgid "Sales Price Information" +msgstr "" + +#: part/templates/part/navbar.html:95 +msgid "Sale Price" +msgstr "" + +#: part/templates/part/navbar.html:106 part/templates/part/part_tests.html:10 +msgid "Part Test Templates" +msgstr "" + +#: part/templates/part/navbar.html:109 stock/templates/stock/item_base.html:398 +msgid "Tests" +msgstr "" + +#: part/templates/part/navbar.html:113 part/templates/part/navbar.html:116 +#: part/templates/part/related.html:10 +msgid "Related Parts" +msgstr "" + +#: part/templates/part/navbar.html:125 part/templates/part/notes.html:12 +msgid "Part Notes" +msgstr "" + +#: part/templates/part/params.html:17 +msgid "Add new parameter" +msgstr "" + +#: part/templates/part/params.html:18 +#: templates/InvenTree/settings/category.html:29 +#: templates/InvenTree/settings/part.html:44 +msgid "New Parameter" +msgstr "" + +#: part/templates/part/params.html:28 +#: report/templates/report/inventree_test_report_base.html:90 +#: stock/models.py:1655 templates/InvenTree/settings/header.html:8 +#: templates/js/stock.js:124 +msgid "Value" +msgstr "" + +#: part/templates/part/params.html:41 templates/InvenTree/settings/user.html:19 +msgid "Edit" +msgstr "" + +#: part/templates/part/params.html:68 +msgid "New Template" +msgstr "" + +#: part/templates/part/params.html:69 +msgid "Create New Parameter Template" +msgstr "" + +#: part/templates/part/part_app_base.html:12 +msgid "Part List" +msgstr "" + +#: part/templates/part/part_base.html:18 +#, python-format +msgid "This part is a variant of %(link)s" +msgstr "" + +#: part/templates/part/part_base.html:33 templates/js/company.js:156 +#: templates/js/company.js:254 templates/js/part.js:76 templates/js/part.js:153 +msgid "Inactive" +msgstr "" + +#: part/templates/part/part_base.html:40 +msgid "Star this part" +msgstr "" + +#: part/templates/part/part_base.html:47 +#: stock/templates/stock/item_base.html:131 +#: stock/templates/stock/location.html:51 +msgid "Barcode actions" +msgstr "" + +#: part/templates/part/part_base.html:49 +#: stock/templates/stock/item_base.html:133 +#: stock/templates/stock/location.html:53 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: part/templates/part/part_base.html:50 +#: stock/templates/stock/item_base.html:149 +#: stock/templates/stock/location.html:54 +msgid "Print Label" +msgstr "" + +#: part/templates/part/part_base.html:55 +msgid "Show pricing information" +msgstr "" + +#: part/templates/part/part_base.html:59 +msgid "Count part stock" +msgstr "" + +#: part/templates/part/part_base.html:74 +msgid "Part actions" +msgstr "" + +#: part/templates/part/part_base.html:77 +msgid "Duplicate part" +msgstr "" + +#: part/templates/part/part_base.html:80 +msgid "Edit part" +msgstr "" + +#: part/templates/part/part_base.html:83 +msgid "Delete part" +msgstr "" + +#: part/templates/part/part_base.html:123 templates/js/table_filters.js:156 +msgid "In Stock" +msgstr "" + +#: part/templates/part/part_base.html:136 templates/InvenTree/index.html:131 +msgid "Required for Build Orders" +msgstr "" + +#: part/templates/part/part_base.html:143 +msgid "Required for Sales Orders" +msgstr "" + +#: part/templates/part/part_base.html:150 +msgid "Allocated to Orders" +msgstr "" + +#: part/templates/part/part_base.html:165 templates/js/bom.js:300 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:171 templates/js/part.js:418 +msgid "Building" +msgstr "" + +#: part/templates/part/part_base.html:250 +msgid "Calculate" +msgstr "" + +#: part/templates/part/part_pricing.html:8 +#, python-format +msgid "Pricing information for:
    %(part)s." +msgstr "" + +#: part/templates/part/part_pricing.html:23 +msgid "Supplier Pricing" +msgstr "" + +#: part/templates/part/part_pricing.html:27 +#: part/templates/part/part_pricing.html:53 +msgid "Unit Cost" +msgstr "" + +#: part/templates/part/part_pricing.html:33 +#: part/templates/part/part_pricing.html:59 +msgid "Total Cost" +msgstr "" + +#: part/templates/part/part_pricing.html:41 +msgid "No supplier pricing available" +msgstr "" + +#: part/templates/part/part_pricing.html:49 +msgid "BOM Pricing" +msgstr "" + +#: part/templates/part/part_pricing.html:67 +msgid "Note: BOM pricing is incomplete for this part" +msgstr "" + +#: part/templates/part/part_pricing.html:74 +msgid "No BOM pricing available" +msgstr "" + +#: part/templates/part/part_pricing.html:84 +msgid "No pricing information is available for this part." +msgstr "" + +#: part/templates/part/part_tests.html:17 +msgid "Add Test Template" +msgstr "" + +#: part/templates/part/part_thumb.html:20 +msgid "Select from existing images" +msgstr "" + +#: part/templates/part/partial_delete.html:7 +#, python-format +msgid "Are you sure you want to delete part '%(full_name)s'?" +msgstr "" + +#: part/templates/part/partial_delete.html:12 +#, python-format +msgid "" +"This part is used in BOMs for %(count)s other parts. If you delete this " +"part, the BOMs for the following parts will be updated" +msgstr "" + +#: part/templates/part/partial_delete.html:22 +#, python-format +msgid "" +"There are %(count)s stock entries defined for this part. If you delete this " +"part, the following stock entries will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:33 +#, python-format +msgid "" +"There are %(count)s manufacturers defined for this part. If you delete this " +"part, the following manufacturer parts will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:44 +#, python-format +msgid "" +"There are %(count)s suppliers defined for this part. If you delete this " +"part, the following supplier parts will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:55 +#, python-format +msgid "" +"There are %(count)s unique parts tracked for '%(full_name)s'. Deleting this " +"part will permanently remove this tracking information." +msgstr "" + +#: part/templates/part/related.html:18 +msgid "Add Related" +msgstr "" + +#: part/templates/part/sale_prices.html:10 +msgid "Sell Price Information" +msgstr "" + +#: part/templates/part/sales_orders.html:18 +msgid "New sales order" +msgstr "" + +#: part/templates/part/sales_orders.html:18 +msgid "New Order" +msgstr "" + +#: part/templates/part/set_category.html:9 +msgid "Set category for the following parts" +msgstr "" + +#: part/templates/part/stock.html:10 +msgid "Part Stock" +msgstr "" + +#: part/templates/part/stock.html:16 +#, python-format +msgid "Showing stock for all variants of %(full_name)s" +msgstr "" + +#: part/templates/part/stock_count.html:7 templates/js/bom.js:239 +#: templates/js/part.js:422 +msgid "No Stock" +msgstr "" + +#: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:130 +msgid "Low Stock" +msgstr "" + +#: part/templates/part/supplier.html:10 +msgid "Part Suppliers" +msgstr "" + +#: part/templates/part/track.html:10 +msgid "Part Tracking" +msgstr "" + +#: part/templates/part/used_in.html:9 +msgid "Assemblies" +msgstr "" + +#: part/templates/part/variant_part.html:9 +msgid "Create new part variant" +msgstr "" + +#: part/templates/part/variant_part.html:10 +#, python-format +msgid "Create a new variant of template '%(full_name)s'." +msgstr "" + +#: part/templates/part/variants.html:19 +msgid "Create new variant" +msgstr "" + +#: part/templates/part/variants.html:20 +msgid "New Variant" +msgstr "" + +#: part/views.py:89 +msgid "Add Related Part" +msgstr "" + +#: part/views.py:144 +msgid "Delete Related Part" +msgstr "" + +#: part/views.py:158 +msgid "Add part attachment" +msgstr "" + +#: part/views.py:211 templates/attachment_table.html:32 +msgid "Edit attachment" +msgstr "" + +#: part/views.py:215 +msgid "Part attachment updated" +msgstr "" + +#: part/views.py:230 +msgid "Delete Part Attachment" +msgstr "" + +#: part/views.py:238 +msgid "Deleted part attachment" +msgstr "" + +#: part/views.py:247 +msgid "Create Test Template" +msgstr "" + +#: part/views.py:274 +msgid "Edit Test Template" +msgstr "" + +#: part/views.py:288 +msgid "Delete Test Template" +msgstr "" + +#: part/views.py:295 +msgid "Set Part Category" +msgstr "" + +#: part/views.py:345 +#, python-brace-format +msgid "Set category for {n} parts" +msgstr "" + +#: part/views.py:380 +msgid "Create Variant" +msgstr "" + +#: part/views.py:465 +msgid "Copied part" +msgstr "" + +#: part/views.py:519 part/views.py:657 +msgid "Possible matches exist - confirm creation of new part" +msgstr "" + +#: part/views.py:589 +msgid "Created new part" +msgstr "" + +#: part/views.py:825 +msgid "Part QR Code" +msgstr "" + +#: part/views.py:927 +msgid "Upload Part Image" +msgstr "" + +#: part/views.py:933 part/views.py:968 +msgid "Updated part image" +msgstr "" + +#: part/views.py:942 +msgid "Select Part Image" +msgstr "" + +#: part/views.py:971 +msgid "Part image not found" +msgstr "" + +#: part/views.py:982 +msgid "Edit Part Properties" +msgstr "" + +#: part/views.py:1017 +msgid "Duplicate BOM" +msgstr "" + +#: part/views.py:1047 +msgid "Confirm duplication of BOM from parent" +msgstr "" + +#: part/views.py:1068 +msgid "Validate BOM" +msgstr "" + +#: part/views.py:1089 +msgid "Confirm that the BOM is valid" +msgstr "" + +#: part/views.py:1100 +msgid "Validated Bill of Materials" +msgstr "" + +#: part/views.py:1234 +msgid "No BOM file provided" +msgstr "" + +#: part/views.py:1595 +msgid "Enter a valid quantity" +msgstr "" + +#: part/views.py:1620 part/views.py:1623 +msgid "Select valid part" +msgstr "" + +#: part/views.py:1629 +msgid "Duplicate part selected" +msgstr "" + +#: part/views.py:1667 +msgid "Select a part" +msgstr "" + +#: part/views.py:1673 +msgid "Selected part creates a circular BOM" +msgstr "" + +#: part/views.py:1677 +msgid "Specify quantity" +msgstr "" + +#: part/views.py:1939 +msgid "Confirm Part Deletion" +msgstr "" + +#: part/views.py:1946 +msgid "Part was deleted" +msgstr "" + +#: part/views.py:1955 +msgid "Part Pricing" +msgstr "" + +#: part/views.py:2069 +msgid "Create Part Parameter Template" +msgstr "" + +#: part/views.py:2079 +msgid "Edit Part Parameter Template" +msgstr "" + +#: part/views.py:2086 +msgid "Delete Part Parameter Template" +msgstr "" + +#: part/views.py:2094 +msgid "Create Part Parameter" +msgstr "" + +#: part/views.py:2144 +msgid "Edit Part Parameter" +msgstr "" + +#: part/views.py:2158 +msgid "Delete Part Parameter" +msgstr "" + +#: part/views.py:2218 +msgid "Edit Part Category" +msgstr "" + +#: part/views.py:2256 +msgid "Delete Part Category" +msgstr "" + +#: part/views.py:2262 +msgid "Part category was deleted" +msgstr "" + +#: part/views.py:2314 +msgid "Create Category Parameter Template" +msgstr "" + +#: part/views.py:2415 +msgid "Edit Category Parameter Template" +msgstr "" + +#: part/views.py:2471 +msgid "Delete Category Parameter Template" +msgstr "" + +#: part/views.py:2490 +msgid "Create BOM Item" +msgstr "" + +#: part/views.py:2560 +msgid "Edit BOM item" +msgstr "" + +#: part/views.py:2616 +msgid "Confim BOM item deletion" +msgstr "" + +#: report/models.py:180 +msgid "Template name" +msgstr "" + +#: report/models.py:186 +msgid "Report template file" +msgstr "" + +#: report/models.py:193 +msgid "Report template description" +msgstr "" + +#: report/models.py:199 +msgid "Report revision number (auto-increments)" +msgstr "" + +#: report/models.py:275 +msgid "Report template is enabled" +msgstr "" + +#: report/models.py:295 +msgid "StockItem query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:303 +msgid "Include Installed Tests" +msgstr "" + +#: report/models.py:304 +msgid "Include test results for stock items installed inside assembled item" +msgstr "" + +#: report/models.py:347 +msgid "Build Filters" +msgstr "" + +#: report/models.py:348 +msgid "Build query filters (comma-separated list of key=value pairs" +msgstr "" + +#: report/models.py:385 +msgid "Part Filters" +msgstr "" + +#: report/models.py:386 +msgid "Part query filters (comma-separated list of key=value pairs" +msgstr "" + +#: report/models.py:416 +msgid "Purchase order query filters" +msgstr "" + +#: report/models.py:450 +msgid "Sales order query filters" +msgstr "" + +#: report/models.py:500 +msgid "Snippet" +msgstr "" + +#: report/models.py:501 +msgid "Report snippet file" +msgstr "" + +#: report/models.py:505 +msgid "Snippet file description" +msgstr "" + +#: report/models.py:540 +msgid "Asset" +msgstr "" + +#: report/models.py:541 +msgid "Report asset file" +msgstr "" + +#: report/models.py:544 +msgid "Asset file description" +msgstr "" + +#: report/templates/report/inventree_build_order_base.html:147 +msgid "Required For" +msgstr "" + +#: report/templates/report/inventree_po_report.html:85 +#: report/templates/report/inventree_so_report.html:85 +msgid "Line Items" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:21 +msgid "Stock Item Test Report" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:83 +msgid "Test Results" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:1643 +msgid "Test" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:89 +#: stock/models.py:1649 +msgid "Result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:92 +#: templates/js/order.js:195 templates/js/stock.js:986 +msgid "Date" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:103 +msgid "Pass" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:105 +msgid "Fail" +msgstr "" + +#: stock/api.py:199 +#, python-brace-format +msgid "Updated stock for {n} items" +msgstr "" + +#: stock/api.py:268 +#, python-brace-format +msgid "Moved {n} parts to {loc}" +msgstr "" + +#: stock/forms.py:114 stock/forms.py:406 stock/models.py:475 +#: stock/templates/stock/item_base.html:365 templates/js/stock.js:656 +msgid "Expiry Date" +msgstr "" + +#: stock/forms.py:115 stock/forms.py:407 +msgid "Expiration date for this stock item" +msgstr "" + +#: stock/forms.py:118 +msgid "Enter unique serial numbers (or leave blank)" +msgstr "" + +#: stock/forms.py:169 +msgid "" +"Destination for serialized stock (by default, will remain in current " +"location)" +msgstr "" + +#: stock/forms.py:171 +msgid "Serial numbers" +msgstr "" + +#: stock/forms.py:171 +msgid "Unique serial numbers (must match quantity)" +msgstr "" + +#: stock/forms.py:173 stock/forms.py:349 +msgid "Add transaction note (optional)" +msgstr "" + +#: stock/forms.py:203 stock/forms.py:259 +msgid "Select test report template" +msgstr "" + +#: stock/forms.py:267 templates/js/table_filters.js:70 +#: templates/js/table_filters.js:133 +msgid "Include sublocations" +msgstr "" + +#: stock/forms.py:267 +msgid "Include stock items in sub locations" +msgstr "" + +#: stock/forms.py:302 +msgid "Stock item to install" +msgstr "" + +#: stock/forms.py:309 +msgid "Stock quantity to assign" +msgstr "" + +#: stock/forms.py:337 +msgid "Must not exceed available quantity" +msgstr "" + +#: stock/forms.py:347 +msgid "Destination location for uninstalled items" +msgstr "" + +#: stock/forms.py:351 +msgid "Confirm uninstall" +msgstr "" + +#: stock/forms.py:351 +msgid "Confirm removal of installed stock items" +msgstr "" + +#: stock/forms.py:375 +msgid "Destination stock location" +msgstr "" + +#: stock/forms.py:377 +msgid "Add note (required)" +msgstr "" + +#: stock/forms.py:381 stock/views.py:852 stock/views.py:1051 +msgid "Confirm stock adjustment" +msgstr "" + +#: stock/forms.py:381 +msgid "Confirm movement of stock items" +msgstr "" + +#: stock/forms.py:383 +msgid "Set Default Location" +msgstr "" + +#: stock/forms.py:383 +msgid "Set the destination as the default location for selected parts" +msgstr "" + +#: stock/models.py:54 stock/models.py:513 +msgid "Owner" +msgstr "" + +#: stock/models.py:55 stock/models.py:514 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:205 +msgid "Created stock item" +msgstr "" + +#: stock/models.py:241 +msgid "StockItem with this serial number already exists" +msgstr "" + +#: stock/models.py:277 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:287 stock/models.py:296 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:288 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:310 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:316 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:323 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:365 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:374 +msgid "Base part" +msgstr "" + +#: stock/models.py:383 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:388 stock/templates/stock/stock_app_base.html:8 +msgid "Stock Location" +msgstr "" + +#: stock/models.py:391 +msgid "Where is this stock item located?" +msgstr "" + +#: stock/models.py:398 +msgid "Packaging this stock item is stored in" +msgstr "" + +#: stock/models.py:403 stock/templates/stock/item_base.html:259 +msgid "Installed In" +msgstr "" + +#: stock/models.py:406 +msgid "Is this item installed in another item?" +msgstr "" + +#: stock/models.py:422 +msgid "Serial number for this item" +msgstr "" + +#: stock/models.py:434 +msgid "Batch code for this stock item" +msgstr "" + +#: stock/models.py:438 +msgid "Stock Quantity" +msgstr "" + +#: stock/models.py:447 +msgid "Source Build" +msgstr "" + +#: stock/models.py:449 +msgid "Build for this stock item" +msgstr "" + +#: stock/models.py:460 +msgid "Source Purchase Order" +msgstr "" + +#: stock/models.py:463 +msgid "Purchase order for this stock item" +msgstr "" + +#: stock/models.py:469 +msgid "Destination Sales Order" +msgstr "" + +#: stock/models.py:476 +msgid "" +"Expiry date for stock item. Stock will be considered expired after this date" +msgstr "" + +#: stock/models.py:489 +msgid "Delete on deplete" +msgstr "" + +#: stock/models.py:489 +msgid "Delete this Stock Item when stock is depleted" +msgstr "" + +#: stock/models.py:499 stock/templates/stock/item_notes.html:13 +#: stock/templates/stock/navbar.html:54 +msgid "Stock Item Notes" +msgstr "" + +#: stock/models.py:509 +msgid "Single unit purchase price at time of purchase" +msgstr "" + +#: stock/models.py:614 +msgid "Assigned to Customer" +msgstr "" + +#: stock/models.py:616 +msgid "Manually assigned to customer" +msgstr "" + +#: stock/models.py:629 +msgid "Returned from customer" +msgstr "" + +#: stock/models.py:631 +msgid "Returned to location" +msgstr "" + +#: stock/models.py:792 +msgid "Installed into stock item" +msgstr "" + +#: stock/models.py:800 +msgid "Installed stock item" +msgstr "" + +#: stock/models.py:824 +msgid "Uninstalled stock item" +msgstr "" + +#: stock/models.py:843 +msgid "Uninstalled into location" +msgstr "" + +#: stock/models.py:944 +msgid "Part is not set as trackable" +msgstr "" + +#: stock/models.py:950 +msgid "Quantity must be integer" +msgstr "" + +#: stock/models.py:956 +#, python-brace-format +msgid "Quantity must not exceed available stock quantity ({n})" +msgstr "" + +#: stock/models.py:959 +msgid "Serial numbers must be a list of integers" +msgstr "" + +#: stock/models.py:962 +msgid "Quantity does not match serial numbers" +msgstr "" + +#: stock/models.py:994 +msgid "Add serial number" +msgstr "" + +#: stock/models.py:997 +#, python-brace-format +msgid "Serialized {n} items" +msgstr "" + +#: stock/models.py:1075 +msgid "Split from existing stock" +msgstr "" + +#: stock/models.py:1113 +msgid "StockItem cannot be moved as it is not in stock" +msgstr "" + +#: stock/models.py:1556 +msgid "Title" +msgstr "" + +#: stock/models.py:1556 +msgid "Tracking entry title" +msgstr "" + +#: stock/models.py:1558 +msgid "Entry notes" +msgstr "" + +#: stock/models.py:1560 +msgid "Link to external page for further information" +msgstr "" + +#: stock/models.py:1620 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:1626 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:1644 +msgid "Test name" +msgstr "" + +#: stock/models.py:1650 templates/js/table_filters.js:212 +msgid "Test result" +msgstr "" + +#: stock/models.py:1656 +msgid "Test output value" +msgstr "" + +#: stock/models.py:1663 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:1669 +msgid "Test notes" +msgstr "" + +#: stock/templates/stock/item.html:12 +msgid "Stock Tracking Information" +msgstr "" + +#: stock/templates/stock/item.html:30 +msgid "New Entry" +msgstr "" + +#: stock/templates/stock/item_attachments.html:11 +msgid "Stock Item Attachments" +msgstr "" + +#: stock/templates/stock/item_base.html:24 +msgid "" +"You are not in the list of owners of this item. This stock item cannot be " +"edited." +msgstr "" + +#: stock/templates/stock/item_base.html:31 +msgid "This stock item is in production and cannot be edited." +msgstr "" + +#: stock/templates/stock/item_base.html:32 +msgid "Edit the stock item from the build view." +msgstr "" + +#: stock/templates/stock/item_base.html:45 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:53 +#, python-format +msgid "" +"This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgstr "" + +#: stock/templates/stock/item_base.html:61 +#, python-format +msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgstr "" + +#: stock/templates/stock/item_base.html:67 +msgid "" +"This stock item is serialized - it has a unique serial number and the " +"quantity cannot be adjusted." +msgstr "" + +#: stock/templates/stock/item_base.html:71 +msgid "This stock item cannot be deleted as it has child items" +msgstr "" + +#: stock/templates/stock/item_base.html:75 +msgid "" +"This stock item will be automatically deleted when all stock is depleted." +msgstr "" + +#: stock/templates/stock/item_base.html:95 +#: stock/templates/stock/item_base.html:369 templates/js/table_filters.js:145 +msgid "Expired" +msgstr "" + +#: stock/templates/stock/item_base.html:99 +#: stock/templates/stock/item_base.html:371 templates/js/table_filters.js:150 +msgid "Stale" +msgstr "" + +#: stock/templates/stock/item_base.html:136 templates/js/barcode.js:309 +#: templates/js/barcode.js:314 +msgid "Unlink Barcode" +msgstr "" + +#: stock/templates/stock/item_base.html:138 +msgid "Link Barcode" +msgstr "" + +#: stock/templates/stock/item_base.html:140 templates/stock_table.html:31 +msgid "Scan to Location" +msgstr "" + +#: stock/templates/stock/item_base.html:147 +msgid "Printing actions" +msgstr "" + +#: stock/templates/stock/item_base.html:151 +#: stock/templates/stock/item_tests.html:27 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item_base.html:160 +msgid "Stock adjustment actions" +msgstr "" + +#: stock/templates/stock/item_base.html:164 +#: stock/templates/stock/location.html:65 templates/stock_table.html:56 +msgid "Count stock" +msgstr "" + +#: stock/templates/stock/item_base.html:167 templates/stock_table.html:54 +msgid "Add stock" +msgstr "" + +#: stock/templates/stock/item_base.html:170 templates/stock_table.html:55 +msgid "Remove stock" +msgstr "" + +#: stock/templates/stock/item_base.html:173 +msgid "Serialize stock" +msgstr "" + +#: stock/templates/stock/item_base.html:177 +msgid "Transfer stock" +msgstr "" + +#: stock/templates/stock/item_base.html:180 +msgid "Assign to customer" +msgstr "" + +#: stock/templates/stock/item_base.html:183 +msgid "Return to stock" +msgstr "" + +#: stock/templates/stock/item_base.html:187 templates/js/stock.js:1299 +msgid "Uninstall stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:187 +msgid "Uninstall" +msgstr "" + +#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/location.html:62 +msgid "Stock actions" +msgstr "" + +#: stock/templates/stock/item_base.html:199 +msgid "Convert to variant" +msgstr "" + +#: stock/templates/stock/item_base.html:202 +msgid "Duplicate stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:204 +msgid "Edit stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:207 +msgid "Delete stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:219 +msgid "Stock Item Details" +msgstr "" + +#: stock/templates/stock/item_base.html:278 templates/js/build.js:442 +msgid "No location set" +msgstr "" + +#: stock/templates/stock/item_base.html:285 +msgid "Barcode Identifier" +msgstr "" + +#: stock/templates/stock/item_base.html:327 +msgid "Parent Item" +msgstr "" + +#: stock/templates/stock/item_base.html:369 +#, python-format +msgid "This StockItem expired on %(item.expiry_date)s" +msgstr "" + +#: stock/templates/stock/item_base.html:371 +#, python-format +msgid "This StockItem expires on %(item.expiry_date)s" +msgstr "" + +#: stock/templates/stock/item_base.html:378 templates/js/stock.js:662 +msgid "Last Updated" +msgstr "" + +#: stock/templates/stock/item_base.html:383 +msgid "Last Stocktake" +msgstr "" + +#: stock/templates/stock/item_base.html:387 +msgid "No stocktake performed" +msgstr "" + +#: stock/templates/stock/item_childs.html:12 +msgid "Child Stock Items" +msgstr "" + +#: stock/templates/stock/item_childs.html:20 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item_delete.html:9 +msgid "Are you sure you want to delete this stock item?" +msgstr "" + +#: stock/templates/stock/item_delete.html:12 +#, python-format +msgid "" +"This will remove %(qty)s units of %(full_name)s from stock." +msgstr "" + +#: stock/templates/stock/item_install.html:7 +msgid "Install another StockItem into this item." +msgstr "" + +#: stock/templates/stock/item_install.html:10 +msgid "Stock items can only be installed if they meet the following criteria" +msgstr "" + +#: stock/templates/stock/item_install.html:13 +msgid "The StockItem links to a Part which is in the BOM for this StockItem" +msgstr "" + +#: stock/templates/stock/item_install.html:14 +msgid "The StockItem is currently in stock" +msgstr "" + +#: stock/templates/stock/item_installed.html:11 +#: stock/templates/stock/navbar.html:27 +msgid "Installed Stock Items" +msgstr "" + +#: stock/templates/stock/item_serialize.html:5 +msgid "Create serialized items from this stock item." +msgstr "" + +#: stock/templates/stock/item_serialize.html:7 +msgid "Select quantity to serialize, and unique serial numbers." +msgstr "" + +#: stock/templates/stock/item_tests.html:11 +#: stock/templates/stock/navbar.html:19 stock/templates/stock/navbar.html:22 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item_tests.html:20 +msgid "Delete Test Data" +msgstr "" + +#: stock/templates/stock/item_tests.html:24 +msgid "Add Test Data" +msgstr "" + +#: stock/templates/stock/location.html:20 +msgid "" +"You are not in the list of owners of this location. This stock location " +"cannot be edited." +msgstr "" + +#: stock/templates/stock/location.html:37 +msgid "All stock items" +msgstr "" + +#: stock/templates/stock/location.html:55 +msgid "Check-in Items" +msgstr "" + +#: stock/templates/stock/location.html:71 +msgid "Location actions" +msgstr "" + +#: stock/templates/stock/location.html:73 +msgid "Edit location" +msgstr "" + +#: stock/templates/stock/location.html:75 +msgid "Delete location" +msgstr "" + +#: stock/templates/stock/location.html:87 +msgid "Location Details" +msgstr "" + +#: stock/templates/stock/location.html:92 +msgid "Location Path" +msgstr "" + +#: stock/templates/stock/location.html:97 +msgid "Location Description" +msgstr "" + +#: stock/templates/stock/location.html:102 +#: stock/templates/stock/location_navbar.html:11 +#: stock/templates/stock/location_navbar.html:18 +#: stock/templates/stock/sublocation.html:16 +msgid "Sublocations" +msgstr "" + +#: stock/templates/stock/location.html:112 +msgid "Stock Details" +msgstr "" + +#: stock/templates/stock/location.html:117 templates/InvenTree/search.html:279 +#: templates/stats.html:76 users/models.py:39 +msgid "Stock Locations" +msgstr "" + +#: stock/templates/stock/location_delete.html:7 +msgid "Are you sure you want to delete this stock location?" +msgstr "" + +#: stock/templates/stock/navbar.html:11 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/templates/stock/navbar.html:14 +msgid "History" +msgstr "" + +#: stock/templates/stock/navbar.html:30 +msgid "Installed Items" +msgstr "" + +#: stock/templates/stock/navbar.html:38 +msgid "Child Items" +msgstr "" + +#: stock/templates/stock/navbar.html:41 +msgid "Children" +msgstr "" + +#: stock/templates/stock/stock_adjust.html:43 +msgid "Remove item" +msgstr "" + +#: stock/templates/stock/stock_app_base.html:16 +msgid "Loading..." +msgstr "" + +#: stock/templates/stock/stock_uninstall.html:8 +msgid "The following stock items will be uninstalled" +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1332 +msgid "Convert Stock Item" +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:8 +#, python-format +msgid "This stock item is current an instance of %(part)s" +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:9 +msgid "It can be converted to one of the part variants listed below." +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:14 +msgid "This action cannot be easily undone" +msgstr "" + +#: stock/templates/stock/sublocation.html:23 templates/stock_table.html:37 +msgid "Printing Actions" +msgstr "" + +#: stock/templates/stock/sublocation.html:27 templates/stock_table.html:41 +msgid "Print labels" +msgstr "" + +#: stock/templates/stock/tracking_delete.html:6 +msgid "Are you sure you want to delete this stock tracking entry?" +msgstr "" + +#: stock/views.py:123 +msgid "Edit Stock Location" +msgstr "" + +#: stock/views.py:230 stock/views.py:1322 stock/views.py:1433 +#: stock/views.py:1798 +msgid "Owner is required (ownership control is enabled)" +msgstr "" + +#: stock/views.py:245 +msgid "Stock Location QR code" +msgstr "" + +#: stock/views.py:265 +msgid "Add Stock Item Attachment" +msgstr "" + +#: stock/views.py:311 +msgid "Edit Stock Item Attachment" +msgstr "" + +#: stock/views.py:327 +msgid "Delete Stock Item Attachment" +msgstr "" + +#: stock/views.py:343 +msgid "Assign to Customer" +msgstr "" + +#: stock/views.py:352 +msgid "Customer must be specified" +msgstr "" + +#: stock/views.py:376 +msgid "Return to Stock" +msgstr "" + +#: stock/views.py:385 +msgid "Specify a valid location" +msgstr "" + +#: stock/views.py:396 +msgid "Stock item returned from customer" +msgstr "" + +#: stock/views.py:407 +msgid "Delete All Test Data" +msgstr "" + +#: stock/views.py:424 +msgid "Confirm test data deletion" +msgstr "" + +#: stock/views.py:444 +msgid "Add Test Result" +msgstr "" + +#: stock/views.py:484 +msgid "Edit Test Result" +msgstr "" + +#: stock/views.py:501 +msgid "Delete Test Result" +msgstr "" + +#: stock/views.py:509 +msgid "Stock Export Options" +msgstr "" + +#: stock/views.py:630 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/views.py:656 +msgid "Install Stock Item" +msgstr "" + +#: stock/views.py:755 +msgid "Uninstall Stock Items" +msgstr "" + +#: stock/views.py:863 +msgid "Uninstalled stock items" +msgstr "" + +#: stock/views.py:888 +msgid "Adjust Stock" +msgstr "" + +#: stock/views.py:998 +msgid "Move Stock Items" +msgstr "" + +#: stock/views.py:998 +msgid "Move" +msgstr "" + +#: stock/views.py:999 +msgid "Count Stock Items" +msgstr "" + +#: stock/views.py:999 +msgid "Count" +msgstr "" + +#: stock/views.py:1000 +msgid "Remove From Stock" +msgstr "" + +#: stock/views.py:1000 +msgid "Take" +msgstr "" + +#: stock/views.py:1001 +msgid "Add Stock Items" +msgstr "" + +#: stock/views.py:1001 users/models.py:180 +msgid "Add" +msgstr "" + +#: stock/views.py:1002 +msgid "Delete Stock Items" +msgstr "" + +#: stock/views.py:1031 +msgid "Must enter integer value" +msgstr "" + +#: stock/views.py:1036 +msgid "Quantity must be positive" +msgstr "" + +#: stock/views.py:1043 +#, python-brace-format +msgid "Quantity must not exceed {x}" +msgstr "" + +#: stock/views.py:1107 +msgid "No action performed" +msgstr "" + +#: stock/views.py:1122 +#, python-brace-format +msgid "Added stock to {n} items" +msgstr "" + +#: stock/views.py:1137 +#, python-brace-format +msgid "Removed stock from {n} items" +msgstr "" + +#: stock/views.py:1150 +#, python-brace-format +msgid "Counted stock for {n} items" +msgstr "" + +#: stock/views.py:1190 +msgid "No items were moved" +msgstr "" + +#: stock/views.py:1193 +#, python-brace-format +msgid "Moved {n} items to {dest}" +msgstr "" + +#: stock/views.py:1212 +#, python-brace-format +msgid "Deleted {n} stock items" +msgstr "" + +#: stock/views.py:1224 +msgid "Edit Stock Item" +msgstr "" + +#: stock/views.py:1450 +msgid "Serialize Stock" +msgstr "" + +#: stock/views.py:1543 templates/js/build.js:210 +msgid "Create new Stock Item" +msgstr "" + +#: stock/views.py:1685 +msgid "Duplicate Stock Item" +msgstr "" + +#: stock/views.py:1767 +msgid "Quantity cannot be negative" +msgstr "" + +#: stock/views.py:1867 +msgid "Delete Stock Location" +msgstr "" + +#: stock/views.py:1880 +msgid "Delete Stock Item" +msgstr "" + +#: stock/views.py:1891 +msgid "Delete Stock Tracking Entry" +msgstr "" + +#: stock/views.py:1898 +msgid "Edit Stock Tracking Entry" +msgstr "" + +#: stock/views.py:1907 +msgid "Add Stock Tracking Entry" +msgstr "" + +#: templates/403.html:5 templates/403.html:11 +msgid "Permission Denied" +msgstr "" + +#: templates/403.html:14 +msgid "You do not have permission to view this page." +msgstr "" + +#: templates/404.html:5 templates/404.html:11 +msgid "Page Not Found" +msgstr "" + +#: templates/404.html:14 +msgid "The requested page does not exist" +msgstr "" + +#: templates/InvenTree/index.html:7 +msgid "Index" +msgstr "" + +#: templates/InvenTree/index.html:98 +msgid "Starred Parts" +msgstr "" + +#: templates/InvenTree/index.html:99 +msgid "Latest Parts" +msgstr "" + +#: templates/InvenTree/index.html:100 +msgid "BOM Waiting Validation" +msgstr "" + +#: templates/InvenTree/index.html:129 +msgid "Recently Updated" +msgstr "" + +#: templates/InvenTree/index.html:145 +msgid "Expired Stock" +msgstr "" + +#: templates/InvenTree/index.html:146 +msgid "Stale Stock" +msgstr "" + +#: templates/InvenTree/index.html:184 +msgid "Build Orders In Progress" +msgstr "" + +#: templates/InvenTree/index.html:185 +msgid "Overdue Build Orders" +msgstr "" + +#: templates/InvenTree/index.html:206 +msgid "Outstanding Purchase Orders" +msgstr "" + +#: templates/InvenTree/index.html:207 +msgid "Overdue Purchase Orders" +msgstr "" + +#: templates/InvenTree/index.html:229 +msgid "Outstanding Sales Orders" +msgstr "" + +#: templates/InvenTree/index.html:230 +msgid "Overdue Sales Orders" +msgstr "" + +#: templates/InvenTree/search.html:8 templates/InvenTree/search.html:14 +msgid "Search Results" +msgstr "" + +#: templates/InvenTree/search.html:24 +msgid "Enter a search query" +msgstr "" + +#: templates/InvenTree/search.html:268 templates/js/stock.js:300 +msgid "Shipped to customer" +msgstr "" + +#: templates/InvenTree/search.html:271 templates/js/stock.js:310 +msgid "No stock location set" +msgstr "" + +#: templates/InvenTree/settings/build.html:10 +msgid "Build Order Settings" +msgstr "" + +#: templates/InvenTree/settings/category.html:9 +msgid "Category Settings" +msgstr "" + +#: templates/InvenTree/settings/category.html:25 +msgid "Category Parameter Templates" +msgstr "" + +#: templates/InvenTree/settings/category.html:52 +msgid "No category parameter templates found" +msgstr "" + +#: templates/InvenTree/settings/category.html:70 +#: templates/InvenTree/settings/part.html:81 +msgid "Edit Template" +msgstr "" + +#: templates/InvenTree/settings/category.html:71 +#: templates/InvenTree/settings/part.html:82 +msgid "Delete Template" +msgstr "" + +#: templates/InvenTree/settings/global.html:10 +msgid "Global InvenTree Settings" +msgstr "" + +#: templates/InvenTree/settings/global.html:27 +msgid "Barcode Settings" +msgstr "" + +#: templates/InvenTree/settings/header.html:7 +msgid "Setting" +msgstr "" + +#: templates/InvenTree/settings/part.html:9 +msgid "Part Settings" +msgstr "" + +#: templates/InvenTree/settings/part.html:14 +msgid "Part Options" +msgstr "" + +#: templates/InvenTree/settings/part.html:40 +msgid "Part Parameter Templates" +msgstr "" + +#: templates/InvenTree/settings/part.html:61 +msgid "No part parameter templates found" +msgstr "" + +#: templates/InvenTree/settings/po.html:9 +msgid "Purchase Order Settings" +msgstr "" + +#: templates/InvenTree/settings/report.html:10 +msgid "Report Settings" +msgstr "" + +#: templates/InvenTree/settings/setting.html:23 +msgid "No value set" +msgstr "" + +#: templates/InvenTree/settings/setting.html:31 +msgid "Edit setting" +msgstr "" + +#: templates/InvenTree/settings/settings.html:8 +#: templates/InvenTree/settings/settings.html:14 templates/navbar.html:84 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/so.html:9 +msgid "Sales Order Settings" +msgstr "" + +#: templates/InvenTree/settings/stock.html:9 +msgid "Stock Settings" +msgstr "" + +#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:49 +msgid "Stock Options" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:3 +#: templates/InvenTree/settings/user.html:10 +msgid "User Settings" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:6 +msgid "Account" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:9 +msgid "Theme" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:13 +msgid "InvenTree Settings" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:16 +msgid "Global" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:19 +msgid "Report" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:22 +msgid "Categories" +msgstr "" + +#: templates/InvenTree/settings/theme.html:10 +msgid "Theme Settings" +msgstr "" + +#: templates/InvenTree/settings/theme.html:17 +msgid "Color Themes" +msgstr "" + +#: templates/InvenTree/settings/theme.html:29 +#, python-format +msgid "" +"\n" +"\t\tThe CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected " +"color theme was not found.
    \n" +"\t\tPlease select another color theme :)\n" +"\t" +msgstr "" + +#: templates/InvenTree/settings/user.html:16 +msgid "User Information" +msgstr "" + +#: templates/InvenTree/settings/user.html:21 +msgid "Change Password" +msgstr "" + +#: templates/InvenTree/settings/user.html:28 +#: templates/registration/login.html:59 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:32 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:36 +msgid "Last Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:40 +msgid "Email Address" +msgstr "" + +#: templates/about.html:13 +msgid "InvenTree Version Information" +msgstr "" + +#: templates/about.html:22 +msgid "InvenTree Version" +msgstr "" + +#: templates/about.html:26 +msgid "Up to Date" +msgstr "" + +#: templates/about.html:28 +msgid "Update Available" +msgstr "" + +#: templates/about.html:34 +msgid "Django Version" +msgstr "" + +#: templates/about.html:41 +msgid "Commit Hash" +msgstr "" + +#: templates/about.html:48 +msgid "Commit Date" +msgstr "" + +#: templates/about.html:53 +msgid "InvenTree Documentation" +msgstr "" + +#: templates/about.html:58 +msgid "View Code on GitHub" +msgstr "" + +#: templates/about.html:63 +msgid "Get the App" +msgstr "" + +#: templates/about.html:68 +msgid "Submit Bug Report" +msgstr "" + +#: templates/attachment_table.html:6 +msgid "Add Attachment" +msgstr "" + +#: templates/attachment_table.html:15 +msgid "File" +msgstr "" + +#: templates/attachment_table.html:17 +msgid "Uploaded" +msgstr "" + +#: templates/attachment_table.html:35 +msgid "Delete attachment" +msgstr "" + +#: templates/image_download.html:8 +msgid "Specify URL for downloading image" +msgstr "" + +#: templates/image_download.html:11 +msgid "Must be a valid image URL" +msgstr "" + +#: templates/image_download.html:12 +msgid "Remote server must be accessible" +msgstr "" + +#: templates/image_download.html:13 +msgid "Remote image must not exceed maximum allowable file size" +msgstr "" + +#: templates/js/barcode.js:8 +msgid "Scan barcode data here using wedge scanner" +msgstr "" + +#: templates/js/barcode.js:10 +msgid "Enter barcode data" +msgstr "" + +#: templates/js/barcode.js:14 +msgid "Barcode" +msgstr "" + +#: templates/js/barcode.js:32 +msgid "Enter optional notes for stock transfer" +msgstr "" + +#: templates/js/barcode.js:33 +msgid "Enter notes" +msgstr "" + +#: templates/js/barcode.js:71 +msgid "Server error" +msgstr "" + +#: templates/js/barcode.js:92 +msgid "Unknown response from server" +msgstr "" + +#: templates/js/barcode.js:119 templates/js/modals.js:857 +msgid "Invalid server response" +msgstr "" + +#: templates/js/barcode.js:212 +msgid "Scan barcode data below" +msgstr "" + +#: templates/js/barcode.js:270 +msgid "No URL in response" +msgstr "" + +#: templates/js/barcode.js:288 +msgid "Link Barcode to Stock Item" +msgstr "" + +#: templates/js/barcode.js:311 +msgid "" +"This will remove the association between this stock item and the barcode" +msgstr "" + +#: templates/js/barcode.js:317 +msgid "Unlink" +msgstr "" + +#: templates/js/barcode.js:376 +msgid "Remove stock item" +msgstr "" + +#: templates/js/barcode.js:418 +msgid "Check Stock Items into Location" +msgstr "" + +#: templates/js/barcode.js:422 templates/js/barcode.js:547 +msgid "Check In" +msgstr "" + +#: templates/js/barcode.js:462 templates/js/barcode.js:586 +msgid "Error transferring stock" +msgstr "" + +#: templates/js/barcode.js:481 +msgid "Stock Item already scanned" +msgstr "" + +#: templates/js/barcode.js:485 +msgid "Stock Item already in this location" +msgstr "" + +#: templates/js/barcode.js:492 +msgid "Added stock item" +msgstr "" + +#: templates/js/barcode.js:499 +msgid "Barcode does not match Stock Item" +msgstr "" + +#: templates/js/barcode.js:542 +msgid "Check Into Location" +msgstr "" + +#: templates/js/barcode.js:605 +msgid "Barcode does not match a valid location" +msgstr "" + +#: templates/js/bom.js:175 templates/js/build.js:934 +msgid "Open subassembly" +msgstr "" + +#: templates/js/bom.js:261 +msgid "No pricing available" +msgstr "" + +#: templates/js/bom.js:272 templates/js/filters.js:167 +#: templates/js/filters.js:397 +msgid "true" +msgstr "" + +#: templates/js/bom.js:273 templates/js/filters.js:171 +#: templates/js/filters.js:398 +msgid "false" +msgstr "" + +#: templates/js/bom.js:290 templates/js/bom.js:376 +msgid "View BOM" +msgstr "" + +#: templates/js/bom.js:350 +msgid "Validate BOM Item" +msgstr "" + +#: templates/js/bom.js:352 +msgid "This line has been validated" +msgstr "" + +#: templates/js/bom.js:354 +msgid "Edit BOM Item" +msgstr "" + +#: templates/js/bom.js:356 +msgid "Delete BOM Item" +msgstr "" + +#: templates/js/bom.js:447 templates/js/build.js:305 templates/js/build.js:1032 +msgid "No BOM items found" +msgstr "" + +#: templates/js/build.js:56 +msgid "Auto-allocate stock items to this output" +msgstr "" + +#: templates/js/build.js:62 +msgid "Complete build output" +msgstr "" + +#: templates/js/build.js:71 +msgid "Unallocate stock from build output" +msgstr "" + +#: templates/js/build.js:77 +msgid "Delete build output" +msgstr "" + +#: templates/js/build.js:209 templates/stock_table.html:20 +msgid "New Stock Item" +msgstr "" + +#: templates/js/build.js:493 +msgid "Required Part" +msgstr "" + +#: templates/js/build.js:514 +msgid "Quantity Per" +msgstr "" + +#: templates/js/build.js:582 templates/js/build.js:996 +#: templates/stock_table.html:58 +msgid "Order stock" +msgstr "" + +#: templates/js/build.js:632 +msgid "No builds matching query" +msgstr "" + +#: templates/js/build.js:649 templates/js/part.js:324 templates/js/part.js:546 +#: templates/js/stock.js:511 templates/js/stock.js:938 +#: templates/js/stock.js:1331 +msgid "Select" +msgstr "" + +#: templates/js/build.js:669 +msgid "Build order is overdue" +msgstr "" + +#: templates/js/build.js:767 +msgid "No parts allocated for" +msgstr "" + +#: templates/js/company.js:74 +msgid "Parts Supplied" +msgstr "" + +#: templates/js/company.js:83 +msgid "Parts Manufactured" +msgstr "" + +#: templates/js/company.js:96 +msgid "No company information found" +msgstr "" + +#: templates/js/company.js:129 +msgid "No manufacturer parts found" +msgstr "" + +#: templates/js/company.js:148 templates/js/company.js:246 +#: templates/js/part.js:60 templates/js/part.js:145 +msgid "Template part" +msgstr "" + +#: templates/js/company.js:152 templates/js/company.js:250 +#: templates/js/part.js:64 templates/js/part.js:149 +msgid "Assembled part" +msgstr "" + +#: templates/js/company.js:227 +msgid "No supplier parts found" +msgstr "" + +#: templates/js/filters.js:193 +msgid "Select filter" +msgstr "" + +#: templates/js/filters.js:268 +msgid "Add new filter" +msgstr "" + +#: templates/js/filters.js:271 +msgid "Clear all filters" +msgstr "" + +#: templates/js/filters.js:296 +msgid "Create filter" +msgstr "" + +#: templates/js/label.js:10 templates/js/report.js:98 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/label.js:11 +msgid "Stock item(s) must be selected before printing labels" +msgstr "" + +#: templates/js/label.js:29 templates/js/label.js:79 +msgid "No Labels Found" +msgstr "" + +#: templates/js/label.js:30 +msgid "No labels found which match selected stock item(s)" +msgstr "" + +#: templates/js/label.js:61 +msgid "Select Stock Locations" +msgstr "" + +#: templates/js/label.js:62 +msgid "Stock location(s) must be selected before printing labels" +msgstr "" + +#: templates/js/label.js:80 +msgid "No labels found which match selected stock location(s)" +msgstr "" + +#: templates/js/label.js:154 +msgid "stock items selected" +msgstr "" + +#: templates/js/label.js:162 +msgid "Select Label" +msgstr "" + +#: templates/js/label.js:177 +msgid "Select Label Template" +msgstr "" + +#: templates/js/modals.js:256 +msgid "Waiting for server..." +msgstr "" + +#: templates/js/modals.js:406 +msgid "Show Error Information" +msgstr "" + +#: templates/js/modals.js:473 templates/modals.html:73 +msgid "Accept" +msgstr "" + +#: templates/js/modals.js:474 templates/modals.html:72 +msgid "Cancel" +msgstr "" + +#: templates/js/modals.js:538 +msgid "Loading Data" +msgstr "" + +#: templates/js/modals.js:549 templates/js/modals.js:808 +#: templates/modals.html:29 templates/modals.html:53 +msgid "Submit" +msgstr "" + +#: templates/js/modals.js:550 templates/js/modals.js:809 +#: templates/modals.html:28 templates/modals.html:52 templates/modals.html:93 +msgid "Close" +msgstr "" + +#: templates/js/modals.js:760 +msgid "Invalid response from server" +msgstr "" + +#: templates/js/modals.js:760 +msgid "Form data missing from server response" +msgstr "" + +#: templates/js/modals.js:773 +msgid "Error posting form data" +msgstr "" + +#: templates/js/modals.js:857 +msgid "JSON response missing form data" +msgstr "" + +#: templates/js/modals.js:867 +msgid "No Response" +msgstr "" + +#: templates/js/modals.js:868 +msgid "No response from the InvenTree server" +msgstr "" + +#: templates/js/modals.js:872 +msgid "Error 400: Bad Request" +msgstr "" + +#: templates/js/modals.js:873 +msgid "Server returned error code 400" +msgstr "" + +#: templates/js/modals.js:877 +msgid "Error 401: Not Authenticated" +msgstr "" + +#: templates/js/modals.js:878 +msgid "Authentication credentials not supplied" +msgstr "" + +#: templates/js/modals.js:882 +msgid "Error 403: Permission Denied" +msgstr "" + +#: templates/js/modals.js:883 +msgid "You do not have the required permissions to access this function" +msgstr "" + +#: templates/js/modals.js:887 +msgid "Error 404: Resource Not Found" +msgstr "" + +#: templates/js/modals.js:888 +msgid "The requested resource could not be located on the server" +msgstr "" + +#: templates/js/modals.js:892 +msgid "Error 408: Timeout" +msgstr "" + +#: templates/js/modals.js:893 +msgid "Connection timeout while requesting data from server" +msgstr "" + +#: templates/js/modals.js:896 +msgid "Error requesting form data" +msgstr "" + +#: templates/js/order.js:138 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/order.js:162 templates/js/order.js:257 +msgid "Order is overdue" +msgstr "" + +#: templates/js/order.js:234 +msgid "No sales orders found" +msgstr "" + +#: templates/js/part.js:52 templates/js/part.js:137 +msgid "Trackable part" +msgstr "" + +#: templates/js/part.js:56 templates/js/part.js:141 +msgid "Virtual part" +msgstr "" + +#: templates/js/part.js:68 +msgid "Starred part" +msgstr "" + +#: templates/js/part.js:72 +msgid "Salable part" +msgstr "" + +#: templates/js/part.js:186 +msgid "No variants found" +msgstr "" + +#: templates/js/part.js:272 templates/js/part.js:452 +msgid "No parts found" +msgstr "" + +#: templates/js/part.js:391 +msgid "No category" +msgstr "" + +#: templates/js/part.js:409 templates/js/table_filters.js:318 +msgid "Low stock" +msgstr "" + +#: templates/js/part.js:571 templates/js/stock.js:962 +msgid "Path" +msgstr "" + +#: templates/js/part.js:588 +msgid "YES" +msgstr "" + +#: templates/js/part.js:590 +msgid "NO" +msgstr "" + +#: templates/js/part.js:624 +msgid "No test templates matching query" +msgstr "" + +#: templates/js/part.js:675 templates/js/stock.js:75 +msgid "Edit test result" +msgstr "" + +#: templates/js/part.js:676 templates/js/stock.js:76 +msgid "Delete test result" +msgstr "" + +#: templates/js/part.js:682 +msgid "This test is defined for a parent part" +msgstr "" + +#: templates/js/report.js:47 +msgid "items selected" +msgstr "" + +#: templates/js/report.js:55 +msgid "Select Report Template" +msgstr "" + +#: templates/js/report.js:70 +msgid "Select Test Report Template" +msgstr "" + +#: templates/js/report.js:99 +msgid "Stock item(s) must be selected before printing reports" +msgstr "" + +#: templates/js/report.js:116 templates/js/report.js:169 +#: templates/js/report.js:223 templates/js/report.js:277 +#: templates/js/report.js:331 +msgid "No Reports Found" +msgstr "" + +#: templates/js/report.js:117 +msgid "No report templates found which match selected stock item(s)" +msgstr "" + +#: templates/js/report.js:152 +msgid "Select Builds" +msgstr "" + +#: templates/js/report.js:153 +msgid "Build(s) must be selected before printing reports" +msgstr "" + +#: templates/js/report.js:170 +msgid "No report templates found which match selected build(s)" +msgstr "" + +#: templates/js/report.js:205 +msgid "Select Parts" +msgstr "" + +#: templates/js/report.js:206 +msgid "Part(s) must be selected before printing reports" +msgstr "" + +#: templates/js/report.js:224 +msgid "No report templates found which match selected part(s)" +msgstr "" + +#: templates/js/report.js:259 +msgid "Select Purchase Orders" +msgstr "" + +#: templates/js/report.js:260 +msgid "Purchase Order(s) must be selected before printing report" +msgstr "" + +#: templates/js/report.js:278 templates/js/report.js:332 +msgid "No report templates found which match selected orders" +msgstr "" + +#: templates/js/report.js:313 +msgid "Select Sales Orders" +msgstr "" + +#: templates/js/report.js:314 +msgid "Sales Order(s) must be selected before printing report" +msgstr "" + +#: templates/js/stock.js:38 +msgid "PASS" +msgstr "" + +#: templates/js/stock.js:40 +msgid "FAIL" +msgstr "" + +#: templates/js/stock.js:45 +msgid "NO RESULT" +msgstr "" + +#: templates/js/stock.js:71 +msgid "Add test result" +msgstr "" + +#: templates/js/stock.js:90 +msgid "No test results found" +msgstr "" + +#: templates/js/stock.js:132 +msgid "Test Date" +msgstr "" + +#: templates/js/stock.js:292 +msgid "In production" +msgstr "" + +#: templates/js/stock.js:296 +msgid "Installed in Stock Item" +msgstr "" + +#: templates/js/stock.js:304 +msgid "Assigned to Sales Order" +msgstr "" + +#: templates/js/stock.js:336 +msgid "No stock items matching query" +msgstr "" + +#: templates/js/stock.js:357 +msgid "items" +msgstr "" + +#: templates/js/stock.js:449 +msgid "batches" +msgstr "" + +#: templates/js/stock.js:476 +msgid "locations" +msgstr "" + +#: templates/js/stock.js:478 +msgid "Undefined location" +msgstr "" + +#: templates/js/stock.js:579 +msgid "Stock item is in production" +msgstr "" + +#: templates/js/stock.js:584 +msgid "Stock item assigned to sales order" +msgstr "" + +#: templates/js/stock.js:587 +msgid "Stock item assigned to customer" +msgstr "" + +#: templates/js/stock.js:591 +msgid "Stock item has expired" +msgstr "" + +#: templates/js/stock.js:593 +msgid "Stock item will expire soon" +msgstr "" + +#: templates/js/stock.js:597 +msgid "Stock item has been allocated" +msgstr "" + +#: templates/js/stock.js:601 +msgid "Stock item has been installed in another item" +msgstr "" + +#: templates/js/stock.js:609 +msgid "Stock item has been rejected" +msgstr "" + +#: templates/js/stock.js:613 +msgid "Stock item is lost" +msgstr "" + +#: templates/js/stock.js:616 +msgid "Stock item is destroyed" +msgstr "" + +#: templates/js/stock.js:620 templates/js/table_filters.js:138 +msgid "Depleted" +msgstr "" + +#: templates/js/stock.js:649 +msgid "Stocktake" +msgstr "" + +#: templates/js/stock.js:825 +msgid "Stock Status" +msgstr "" + +#: templates/js/stock.js:840 +msgid "Set Stock Status" +msgstr "" + +#: templates/js/stock.js:854 +msgid "Select Status Code" +msgstr "" + +#: templates/js/stock.js:855 +msgid "Status code must be selected" +msgstr "" + +#: templates/js/stock.js:1050 +msgid "No user information" +msgstr "" + +#: templates/js/stock.js:1060 +msgid "Edit tracking entry" +msgstr "" + +#: templates/js/stock.js:1061 +msgid "Delete tracking entry" +msgstr "" + +#: templates/js/stock.js:1170 +msgid "Create New Location" +msgstr "" + +#: templates/js/stock.js:1269 +msgid "Serial" +msgstr "" + +#: templates/js/stock.js:1362 templates/js/table_filters.js:171 +msgid "Installed" +msgstr "" + +#: templates/js/stock.js:1387 +msgid "Install item" +msgstr "" + +#: templates/js/table_filters.js:42 +msgid "Trackable Part" +msgstr "" + +#: templates/js/table_filters.js:46 +msgid "Validated" +msgstr "" + +#: templates/js/table_filters.js:71 +msgid "Include locations" +msgstr "" + +#: templates/js/table_filters.js:81 templates/js/table_filters.js:82 +#: templates/js/table_filters.js:295 +msgid "Include subcategories" +msgstr "" + +#: templates/js/table_filters.js:92 templates/js/table_filters.js:181 +msgid "Is Serialized" +msgstr "" + +#: templates/js/table_filters.js:95 templates/js/table_filters.js:188 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/table_filters.js:96 templates/js/table_filters.js:189 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/table_filters.js:99 templates/js/table_filters.js:192 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/table_filters.js:100 templates/js/table_filters.js:193 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/table_filters.js:103 templates/js/table_filters.js:104 +#: templates/js/table_filters.js:184 templates/js/table_filters.js:185 +msgid "Serial number" +msgstr "" + +#: templates/js/table_filters.js:108 templates/js/table_filters.js:202 +msgid "Batch code" +msgstr "" + +#: templates/js/table_filters.js:118 templates/js/table_filters.js:285 +msgid "Active parts" +msgstr "" + +#: templates/js/table_filters.js:119 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/table_filters.js:124 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/table_filters.js:128 +msgid "Is allocated" +msgstr "" + +#: templates/js/table_filters.js:129 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/table_filters.js:134 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/table_filters.js:139 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/table_filters.js:146 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/table_filters.js:151 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/table_filters.js:157 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/table_filters.js:161 +msgid "In Production" +msgstr "" + +#: templates/js/table_filters.js:162 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/table_filters.js:166 +msgid "Include Variants" +msgstr "" + +#: templates/js/table_filters.js:167 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/table_filters.js:172 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/table_filters.js:176 +msgid "Sent to customer" +msgstr "" + +#: templates/js/table_filters.js:177 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/table_filters.js:197 templates/js/table_filters.js:198 +msgid "Stock status" +msgstr "" + +#: templates/js/table_filters.js:231 +msgid "Build status" +msgstr "" + +#: templates/js/table_filters.js:250 templates/js/table_filters.js:267 +msgid "Order status" +msgstr "" + +#: templates/js/table_filters.js:255 templates/js/table_filters.js:272 +msgid "Outstanding" +msgstr "" + +#: templates/js/table_filters.js:296 +msgid "Include parts in subcategories" +msgstr "" + +#: templates/js/table_filters.js:300 +msgid "Has IPN" +msgstr "" + +#: templates/js/table_filters.js:301 +msgid "Part has internal part number" +msgstr "" + +#: templates/js/table_filters.js:306 +msgid "Show active parts" +msgstr "" + +#: templates/js/table_filters.js:314 +msgid "Stock available" +msgstr "" + +#: templates/js/table_filters.js:330 +msgid "Starred" +msgstr "" + +#: templates/js/table_filters.js:342 +msgid "Purchasable" +msgstr "" + +#: templates/js/tables.js:321 +msgid "Loading data" +msgstr "" + +#: templates/js/tables.js:324 +msgid "rows per page" +msgstr "" + +#: templates/js/tables.js:327 +msgid "Showing" +msgstr "" + +#: templates/js/tables.js:327 +msgid "to" +msgstr "" + +#: templates/js/tables.js:327 +msgid "of" +msgstr "" + +#: templates/js/tables.js:327 +msgid "rows" +msgstr "" + +#: templates/js/tables.js:330 templates/search_form.html:6 +#: templates/search_form.html:8 +msgid "Search" +msgstr "" + +#: templates/js/tables.js:333 +msgid "No matching results" +msgstr "" + +#: templates/js/tables.js:336 +msgid "Hide/Show pagination" +msgstr "" + +#: templates/js/tables.js:339 +msgid "Refresh" +msgstr "" + +#: templates/js/tables.js:342 +msgid "Toggle" +msgstr "" + +#: templates/js/tables.js:345 +msgid "Columns" +msgstr "" + +#: templates/js/tables.js:348 +msgid "All" +msgstr "" + +#: templates/modals.html:21 templates/modals.html:46 +msgid "Form errors exist" +msgstr "" + +#: templates/navbar.html:33 +msgid "Buy" +msgstr "" + +#: templates/navbar.html:43 +msgid "Sell" +msgstr "" + +#: templates/navbar.html:55 +msgid "Scan Barcode" +msgstr "" + +#: templates/navbar.html:77 users/models.py:36 +msgid "Admin" +msgstr "" + +#: templates/navbar.html:79 +msgid "Logout" +msgstr "" + +#: templates/navbar.html:81 templates/registration/login.html:90 +msgid "Login" +msgstr "" + +#: templates/navbar.html:104 +msgid "About InvenTree" +msgstr "" + +#: templates/qr_code.html:11 +msgid "QR data not provided" +msgstr "" + +#: templates/registration/logged_out.html:51 +msgid "You have been logged out" +msgstr "" + +#: templates/registration/logged_out.html:52 +#: templates/registration/password_reset_complete.html:52 +#: templates/registration/password_reset_done.html:59 +msgid "Return to login screen" +msgstr "" + +#: templates/registration/login.html:65 +msgid "Enter username" +msgstr "" + +#: templates/registration/login.html:71 +msgid "Password" +msgstr "" + +#: templates/registration/login.html:84 +msgid "Username / password combination is incorrect" +msgstr "" + +#: templates/registration/login.html:96 +#: templates/registration/password_reset_form.html:52 +msgid "Forgotten your password?" +msgstr "" + +#: templates/registration/login.html:96 +msgid "Click here to reset" +msgstr "" + +#: templates/registration/password_reset_complete.html:51 +msgid "Password reset complete" +msgstr "" + +#: templates/registration/password_reset_confirm.html:53 +#: templates/registration/password_reset_confirm.html:57 +msgid "Change password" +msgstr "" + +#: templates/registration/password_reset_confirm.html:61 +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +#: templates/registration/password_reset_done.html:52 +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +#: templates/registration/password_reset_done.html:55 +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#: templates/registration/password_reset_form.html:53 +msgid "Enter your email address below." +msgstr "" + +#: templates/registration/password_reset_form.html:54 +msgid "An email will be sent with password reset instructions." +msgstr "" + +#: templates/registration/password_reset_form.html:59 +msgid "Send email" +msgstr "" + +#: templates/stats.html:9 +msgid "Server" +msgstr "" + +#: templates/stats.html:13 +msgid "Instance Name" +msgstr "" + +#: templates/stats.html:19 +msgid "Server status" +msgstr "" + +#: templates/stats.html:22 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:24 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:31 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:34 +msgid "Background worker not running" +msgstr "" + +#: templates/stats.html:42 +msgid "Email Settings" +msgstr "" + +#: templates/stats.html:45 +msgid "Email settings not configured" +msgstr "" + +#: templates/stock_table.html:14 +msgid "Export Stock Information" +msgstr "" + +#: templates/stock_table.html:27 +msgid "Barcode Actions" +msgstr "" + +#: templates/stock_table.html:43 +msgid "Print test reports" +msgstr "" + +#: templates/stock_table.html:54 +msgid "Add to selected stock items" +msgstr "" + +#: templates/stock_table.html:55 +msgid "Remove from selected stock items" +msgstr "" + +#: templates/stock_table.html:56 +msgid "Stocktake selected stock items" +msgstr "" + +#: templates/stock_table.html:57 +msgid "Move selected stock items" +msgstr "" + +#: templates/stock_table.html:57 +msgid "Move stock" +msgstr "" + +#: templates/stock_table.html:58 +msgid "Order selected items" +msgstr "" + +#: templates/stock_table.html:59 +msgid "Change status" +msgstr "" + +#: templates/stock_table.html:59 +msgid "Change stock status" +msgstr "" + +#: templates/stock_table.html:62 +msgid "Delete selected items" +msgstr "" + +#: templates/stock_table.html:62 +msgid "Delete Stock" +msgstr "" + +#: templates/yesnolabel.html:4 +msgid "Yes" +msgstr "" + +#: templates/yesnolabel.html:6 +msgid "No" +msgstr "" + +#: users/admin.py:64 +msgid "Users" +msgstr "" + +#: users/admin.py:65 +msgid "Select which users are assigned to this group" +msgstr "" + +#: users/admin.py:187 +msgid "The following users are members of multiple groups:" +msgstr "" + +#: users/admin.py:210 +msgid "Personal info" +msgstr "" + +#: users/admin.py:211 +msgid "Permissions" +msgstr "" + +#: users/admin.py:214 +msgid "Important dates" +msgstr "" + +#: users/models.py:167 +msgid "Permission set" +msgstr "" + +#: users/models.py:175 +msgid "Group" +msgstr "" + +#: users/models.py:178 +msgid "View" +msgstr "" + +#: users/models.py:178 +msgid "Permission to view items" +msgstr "" + +#: users/models.py:180 +msgid "Permission to add items" +msgstr "" + +#: users/models.py:182 +msgid "Change" +msgstr "" + +#: users/models.py:182 +msgid "Permissions to edit items" +msgstr "" + +#: users/models.py:184 +msgid "Permission to delete items" +msgstr "" diff --git a/InvenTree/locale/pl/LC_MESSAGES/django.po b/InvenTree/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 0000000000..78d68fc969 --- /dev/null +++ b/InvenTree/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,7236 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-21 12:28+1000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" +"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" +"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +#: InvenTree/api.py:64 +msgid "API endpoint not found" +msgstr "" + +#: InvenTree/api.py:110 +msgid "No action specified" +msgstr "" + +#: InvenTree/api.py:124 +msgid "No matching action found" +msgstr "" + +#: InvenTree/fields.py:44 +msgid "Enter date" +msgstr "" + +#: InvenTree/forms.py:110 build/forms.py:99 build/forms.py:120 +#: build/forms.py:142 build/forms.py:166 build/forms.py:188 build/forms.py:223 +#: order/forms.py:27 order/forms.py:38 order/forms.py:49 order/forms.py:60 +#: order/forms.py:71 part/forms.py:134 +msgid "Confirm" +msgstr "" + +#: InvenTree/forms.py:126 +msgid "Confirm delete" +msgstr "" + +#: InvenTree/forms.py:127 +msgid "Confirm item deletion" +msgstr "" + +#: InvenTree/forms.py:159 templates/registration/login.html:77 +msgid "Enter password" +msgstr "" + +#: InvenTree/forms.py:160 +msgid "Enter new password" +msgstr "" + +#: InvenTree/forms.py:167 +msgid "Confirm password" +msgstr "" + +#: InvenTree/forms.py:168 +msgid "Confirm new password" +msgstr "" + +#: InvenTree/forms.py:203 +msgid "Apply Theme" +msgstr "" + +#: InvenTree/forms.py:233 +msgid "Select Category" +msgstr "" + +#: InvenTree/helpers.py:375 order/models.py:245 order/models.py:344 +#: stock/views.py:1763 +msgid "Invalid quantity provided" +msgstr "" + +#: InvenTree/helpers.py:378 +msgid "Empty serial number string" +msgstr "" + +#: InvenTree/helpers.py:399 +#, python-brace-format +msgid "Duplicate serial: {n}" +msgstr "" + +#: InvenTree/helpers.py:403 InvenTree/helpers.py:406 InvenTree/helpers.py:409 +#, python-brace-format +msgid "Invalid group: {g}" +msgstr "" + +#: InvenTree/helpers.py:414 +#, python-brace-format +msgid "Duplicate serial: {g}" +msgstr "" + +#: InvenTree/helpers.py:422 +msgid "No serial numbers found" +msgstr "" + +#: InvenTree/helpers.py:426 +#, python-brace-format +msgid "Number of unique serial number ({s}) must match quantity ({q})" +msgstr "" + +#: InvenTree/models.py:59 stock/models.py:1662 +msgid "Attachment" +msgstr "" + +#: InvenTree/models.py:60 +msgid "Select file to attach" +msgstr "" + +#: InvenTree/models.py:62 templates/attachment_table.html:16 +msgid "Comment" +msgstr "" + +#: InvenTree/models.py:62 +msgid "File comment" +msgstr "" + +#: InvenTree/models.py:68 InvenTree/models.py:69 part/models.py:1908 +#: report/templates/report/inventree_test_report_base.html:91 +#: templates/js/stock.js:1041 +msgid "User" +msgstr "" + +#: InvenTree/models.py:72 +msgid "upload date" +msgstr "" + +#: InvenTree/models.py:107 InvenTree/models.py:108 label/models.py:101 +#: part/models.py:686 part/models.py:2049 part/templates/part/params.html:27 +#: report/models.py:179 templates/InvenTree/search.html:137 +#: templates/InvenTree/search.html:289 templates/js/part.js:110 +#: templates/js/part.js:553 templates/js/stock.js:944 +msgid "Name" +msgstr "" + +#: InvenTree/models.py:114 build/models.py:134 +#: build/templates/build/detail.html:21 company/models.py:342 +#: company/models.py:494 company/templates/company/detail.html:27 +#: company/templates/company/manufacturer_part_base.html:72 +#: company/templates/company/supplier_part_base.html:71 +#: company/templates/company/supplier_part_detail.html:31 label/models.py:108 +#: order/models.py:101 order/templates/order/purchase_order_detail.html:168 +#: part/models.py:710 part/templates/part/detail.html:54 +#: part/templates/part/set_category.html:14 report/models.py:192 +#: report/models.py:505 report/models.py:544 +#: report/templates/report/inventree_build_order_base.html:118 +#: templates/InvenTree/search.html:144 templates/InvenTree/search.html:224 +#: templates/InvenTree/search.html:296 +#: templates/InvenTree/settings/header.html:9 templates/js/bom.js:190 +#: templates/js/build.js:677 templates/js/build.js:944 +#: templates/js/company.js:56 templates/js/order.js:183 +#: templates/js/order.js:280 templates/js/part.js:169 templates/js/part.js:252 +#: templates/js/part.js:371 templates/js/part.js:565 templates/js/part.js:643 +#: templates/js/stock.js:554 templates/js/stock.js:956 +#: templates/js/stock.js:1015 +msgid "Description" +msgstr "" + +#: InvenTree/models.py:115 +msgid "Description (optional)" +msgstr "" + +#: InvenTree/models.py:123 +msgid "parent" +msgstr "" + +#: InvenTree/settings.py:493 +msgid "English" +msgstr "" + +#: InvenTree/settings.py:494 +msgid "French" +msgstr "" + +#: InvenTree/settings.py:495 +msgid "German" +msgstr "" + +#: InvenTree/settings.py:496 +msgid "Polish" +msgstr "" + +#: InvenTree/settings.py:497 +msgid "Turkish" +msgstr "" + +#: InvenTree/status.py:93 +msgid "Background worker check failed" +msgstr "" + +#: InvenTree/status.py:97 +msgid "Email backend not configured" +msgstr "" + +#: InvenTree/status.py:100 +msgid "InvenTree system health checks failed" +msgstr "" + +#: InvenTree/status_codes.py:94 InvenTree/status_codes.py:135 +#: InvenTree/status_codes.py:228 +msgid "Pending" +msgstr "" + +#: InvenTree/status_codes.py:95 +msgid "Placed" +msgstr "" + +#: InvenTree/status_codes.py:96 InvenTree/status_codes.py:231 +msgid "Complete" +msgstr "" + +#: InvenTree/status_codes.py:97 InvenTree/status_codes.py:137 +#: InvenTree/status_codes.py:230 +msgid "Cancelled" +msgstr "" + +#: InvenTree/status_codes.py:98 InvenTree/status_codes.py:138 +#: InvenTree/status_codes.py:180 +msgid "Lost" +msgstr "" + +#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:139 +#: InvenTree/status_codes.py:182 +msgid "Returned" +msgstr "" + +#: InvenTree/status_codes.py:136 +#: order/templates/order/sales_order_base.html:124 +msgid "Shipped" +msgstr "" + +#: InvenTree/status_codes.py:176 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:177 +msgid "Attention needed" +msgstr "" + +#: InvenTree/status_codes.py:178 +msgid "Damaged" +msgstr "" + +#: InvenTree/status_codes.py:179 +msgid "Destroyed" +msgstr "" + +#: InvenTree/status_codes.py:181 +msgid "Rejected" +msgstr "" + +#: InvenTree/status_codes.py:229 +msgid "Production" +msgstr "" + +#: InvenTree/validators.py:22 +msgid "Not a valid currency code" +msgstr "" + +#: InvenTree/validators.py:50 +msgid "Invalid character in part name" +msgstr "" + +#: InvenTree/validators.py:63 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "" + +#: InvenTree/validators.py:77 InvenTree/validators.py:91 +#: InvenTree/validators.py:105 +msgid "Reference must match pattern" +msgstr "" + +#: InvenTree/validators.py:113 +#, python-brace-format +msgid "Illegal character in name ({x})" +msgstr "" + +#: InvenTree/validators.py:132 InvenTree/validators.py:148 +msgid "Overage value must not be negative" +msgstr "" + +#: InvenTree/validators.py:150 +msgid "Overage must not exceed 100%" +msgstr "" + +#: InvenTree/validators.py:157 +msgid "Overage must be an integer value or a percentage" +msgstr "" + +#: InvenTree/views.py:587 +msgid "Delete Item" +msgstr "" + +#: InvenTree/views.py:636 +msgid "Check box to confirm item deletion" +msgstr "" + +#: InvenTree/views.py:651 templates/InvenTree/settings/user.html:18 +msgid "Edit User Information" +msgstr "" + +#: InvenTree/views.py:662 templates/InvenTree/settings/user.html:22 +msgid "Set Password" +msgstr "" + +#: InvenTree/views.py:681 +msgid "Password fields must match" +msgstr "" + +#: InvenTree/views.py:887 templates/navbar.html:95 +msgid "System Information" +msgstr "" + +#: barcodes/api.py:53 barcodes/api.py:150 +msgid "Must provide barcode_data parameter" +msgstr "" + +#: barcodes/api.py:126 +msgid "No match found for barcode data" +msgstr "" + +#: barcodes/api.py:128 +msgid "Match found for barcode data" +msgstr "" + +#: barcodes/api.py:153 +msgid "Must provide stockitem parameter" +msgstr "" + +#: barcodes/api.py:160 +msgid "No matching stock item found" +msgstr "" + +#: barcodes/api.py:190 +msgid "Barcode already matches StockItem object" +msgstr "" + +#: barcodes/api.py:194 +msgid "Barcode already matches StockLocation object" +msgstr "" + +#: barcodes/api.py:198 +msgid "Barcode already matches Part object" +msgstr "" + +#: barcodes/api.py:204 barcodes/api.py:216 +msgid "Barcode hash already matches StockItem object" +msgstr "" + +#: barcodes/api.py:222 +msgid "Barcode associated with StockItem" +msgstr "" + +#: build/forms.py:34 +msgid "Build Order reference" +msgstr "" + +#: build/forms.py:35 +msgid "Order target date" +msgstr "" + +#: build/forms.py:39 build/templates/build/build_base.html:107 +#: build/templates/build/detail.html:121 order/forms.py:109 order/forms.py:144 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:117 +#: report/templates/report/inventree_build_order_base.html:126 +#: templates/js/build.js:723 templates/js/order.js:200 +#: templates/js/order.js:298 +msgid "Target Date" +msgstr "" + +#: build/forms.py:40 build/models.py:224 +msgid "" +"Target date for build completion. Build will be overdue after this date." +msgstr "" + +#: build/forms.py:45 build/forms.py:87 build/forms.py:257 build/models.py:1109 +#: build/templates/build/auto_allocate.html:17 +#: build/templates/build/build_base.html:94 +#: build/templates/build/detail.html:31 common/models.py:703 +#: company/forms.py:176 company/templates/company/supplier_part_pricing.html:77 +#: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261 +#: order/forms.py:278 order/models.py:593 order/models.py:784 +#: order/templates/order/order_wizard/select_parts.html:32 +#: order/templates/order/purchase_order_detail.html:200 +#: order/templates/order/sales_order_detail.html:70 +#: order/templates/order/sales_order_detail.html:77 +#: order/templates/order/sales_order_detail.html:159 +#: order/templates/order/sales_order_detail.html:224 part/forms.py:342 +#: part/forms.py:371 part/forms.py:387 part/models.py:2178 +#: part/templates/part/allocation.html:19 +#: part/templates/part/allocation.html:53 +#: part/templates/part/part_pricing.html:11 +#: part/templates/part/part_pricing.html:18 +#: part/templates/part/sale_prices.html:85 +#: report/templates/report/inventree_build_order_base.html:114 +#: report/templates/report/inventree_po_report.html:91 +#: report/templates/report/inventree_so_report.html:91 +#: report/templates/report/inventree_test_report_base.html:77 +#: stock/forms.py:175 stock/forms.py:308 stock/models.py:1566 +#: stock/templates/stock/item_base.html:244 +#: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364 +#: templates/js/bom.js:205 templates/js/build.js:420 templates/js/build.js:954 +#: templates/js/stock.js:1033 templates/js/stock.js:1271 +msgid "Quantity" +msgstr "" + +#: build/forms.py:46 +msgid "Number of items to build" +msgstr "" + +#: build/forms.py:88 +msgid "Enter quantity for build output" +msgstr "" + +#: build/forms.py:92 order/forms.py:233 stock/forms.py:118 +msgid "Serial Numbers" +msgstr "" + +#: build/forms.py:94 +msgid "Enter serial numbers for build outputs" +msgstr "" + +#: build/forms.py:100 +msgid "Confirm creation of build output" +msgstr "" + +#: build/forms.py:121 +msgid "Confirm deletion of build output" +msgstr "" + +#: build/forms.py:142 +msgid "Confirm unallocation of stock" +msgstr "" + +#: build/forms.py:166 +msgid "Confirm stock allocation" +msgstr "" + +#: build/forms.py:189 +msgid "Mark build as complete" +msgstr "" + +#: build/forms.py:213 build/templates/build/auto_allocate.html:18 +#: order/forms.py:82 stock/forms.py:347 +#: stock/templates/stock/item_base.html:274 +#: stock/templates/stock/stock_adjust.html:17 +#: templates/InvenTree/search.html:260 templates/js/barcode.js:363 +#: templates/js/barcode.js:531 templates/js/build.js:434 +#: templates/js/stock.js:641 +msgid "Location" +msgstr "" + +#: build/forms.py:214 +msgid "Location of completed parts" +msgstr "" + +#: build/forms.py:219 +msgid "Confirm incomplete" +msgstr "" + +#: build/forms.py:220 +msgid "Confirm completion with incomplete stock allocation" +msgstr "" + +#: build/forms.py:223 +msgid "Confirm build completion" +msgstr "" + +#: build/forms.py:243 +msgid "Confirm cancel" +msgstr "" + +#: build/forms.py:243 build/views.py:66 +msgid "Confirm build cancellation" +msgstr "" + +#: build/forms.py:257 +msgid "Select quantity of stock to allocate" +msgstr "" + +#: build/models.py:65 build/templates/build/build_base.html:9 +#: build/templates/build/build_base.html:38 +#: part/templates/part/allocation.html:23 +#: report/templates/report/inventree_build_order_base.html:106 +msgid "Build Order" +msgstr "" + +#: build/models.py:66 build/templates/build/index.html:8 +#: build/templates/build/index.html:15 order/templates/order/so_builds.html:12 +#: order/templates/order/so_navbar.html:19 +#: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55 +#: part/templates/part/navbar.html:58 templates/InvenTree/index.html:183 +#: templates/InvenTree/search.html:185 +#: templates/InvenTree/settings/tabs.html:31 users/models.py:41 +msgid "Build Orders" +msgstr "" + +#: build/models.py:126 +msgid "Build Order Reference" +msgstr "" + +#: build/models.py:127 order/models.py:99 order/models.py:595 +#: order/templates/order/purchase_order_detail.html:195 +#: order/templates/order/sales_order_detail.html:219 part/models.py:2187 +#: report/templates/report/inventree_po_report.html:92 +#: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197 +#: templates/js/build.js:509 templates/js/build.js:948 +msgid "Reference" +msgstr "" + +#: build/models.py:137 +msgid "Brief description of the build" +msgstr "" + +#: build/models.py:146 build/templates/build/build_base.html:124 +#: build/templates/build/detail.html:77 +msgid "Parent Build" +msgstr "" + +#: build/models.py:147 +msgid "BuildOrder to which this build is allocated" +msgstr "" + +#: build/models.py:152 build/templates/build/auto_allocate.html:16 +#: build/templates/build/build_base.html:89 +#: build/templates/build/detail.html:26 company/models.py:669 +#: order/models.py:637 order/models.py:669 +#: order/templates/order/order_wizard/select_parts.html:30 +#: order/templates/order/purchase_order_detail.html:156 +#: order/templates/order/receive_parts.html:19 +#: order/templates/order/sales_order_detail.html:207 part/models.py:321 +#: part/models.py:1876 part/models.py:1888 part/models.py:1906 +#: part/models.py:1981 part/models.py:2077 part/models.py:2162 +#: part/templates/part/part_app_base.html:8 +#: part/templates/part/part_pricing.html:14 part/templates/part/related.html:29 +#: part/templates/part/set_category.html:13 +#: report/templates/report/inventree_build_order_base.html:110 +#: report/templates/report/inventree_po_report.html:90 +#: report/templates/report/inventree_so_report.html:90 +#: templates/InvenTree/search.html:112 templates/InvenTree/search.html:210 +#: templates/js/barcode.js:362 templates/js/bom.js:163 +#: templates/js/build.js:681 templates/js/build.js:921 +#: templates/js/company.js:140 templates/js/company.js:238 +#: templates/js/part.js:233 templates/js/part.js:338 templates/js/stock.js:523 +#: templates/js/stock.js:1343 +msgid "Part" +msgstr "" + +#: build/models.py:160 +msgid "Select part to build" +msgstr "" + +#: build/models.py:165 +msgid "Sales Order Reference" +msgstr "" + +#: build/models.py:169 +msgid "SalesOrder to which this build is allocated" +msgstr "" + +#: build/models.py:174 +msgid "Source Location" +msgstr "" + +#: build/models.py:178 +msgid "" +"Select location to take stock from for this build (leave blank to take from " +"any stock location)" +msgstr "" + +#: build/models.py:183 +msgid "Destination Location" +msgstr "" + +#: build/models.py:187 +msgid "Select location where the completed items will be stored" +msgstr "" + +#: build/models.py:191 +msgid "Build Quantity" +msgstr "" + +#: build/models.py:194 +msgid "Number of stock items to build" +msgstr "" + +#: build/models.py:198 +msgid "Completed items" +msgstr "" + +#: build/models.py:200 +msgid "Number of stock items which have been completed" +msgstr "" + +#: build/models.py:204 part/templates/part/part_base.html:160 +msgid "Build Status" +msgstr "" + +#: build/models.py:208 +msgid "Build status code" +msgstr "" + +#: build/models.py:212 stock/models.py:432 +msgid "Batch Code" +msgstr "" + +#: build/models.py:216 +msgid "Batch code for this build output" +msgstr "" + +#: build/models.py:219 order/models.py:105 part/models.py:882 +#: part/templates/part/detail.html:126 templates/js/order.js:293 +msgid "Creation Date" +msgstr "" + +#: build/models.py:223 order/models.py:451 +msgid "Target completion date" +msgstr "" + +#: build/models.py:227 order/models.py:218 +msgid "Completion Date" +msgstr "" + +#: build/models.py:233 +msgid "completed by" +msgstr "" + +#: build/models.py:241 +msgid "Issued by" +msgstr "" + +#: build/models.py:242 +msgid "User who issued this build order" +msgstr "" + +#: build/models.py:250 build/templates/build/build_base.html:145 +#: build/templates/build/detail.html:105 order/models.py:119 +#: order/templates/order/order_base.html:138 +#: order/templates/order/sales_order_base.html:138 part/models.py:886 +#: report/templates/report/inventree_build_order_base.html:159 +msgid "Responsible" +msgstr "" + +#: build/models.py:251 +msgid "User responsible for this build order" +msgstr "" + +#: build/models.py:256 build/templates/build/detail.html:91 +#: company/templates/company/manufacturer_part_base.html:79 +#: company/templates/company/manufacturer_part_detail.html:28 +#: company/templates/company/supplier_part_base.html:78 +#: company/templates/company/supplier_part_detail.html:28 +#: part/templates/part/detail.html:83 part/templates/part/part_base.html:101 +#: stock/models.py:426 stock/templates/stock/item_base.html:334 +msgid "External Link" +msgstr "" + +#: build/models.py:257 part/models.py:744 stock/models.py:428 +msgid "Link to external URL" +msgstr "" + +#: build/models.py:261 build/templates/build/navbar.html:59 +#: company/models.py:135 company/models.py:501 +#: company/templates/company/navbar.html:70 +#: company/templates/company/navbar.html:73 order/models.py:123 +#: order/models.py:597 order/templates/order/po_navbar.html:29 +#: order/templates/order/po_navbar.html:32 +#: order/templates/order/purchase_order_detail.html:234 +#: order/templates/order/sales_order_detail.html:264 +#: order/templates/order/so_navbar.html:33 +#: order/templates/order/so_navbar.html:36 part/models.py:871 +#: part/templates/part/navbar.html:128 +#: report/templates/report/inventree_build_order_base.html:173 +#: stock/forms.py:173 stock/forms.py:317 stock/forms.py:349 stock/forms.py:377 +#: stock/models.py:498 stock/models.py:1558 stock/models.py:1668 +#: stock/templates/stock/navbar.html:57 templates/js/barcode.js:37 +#: templates/js/bom.js:333 templates/js/stock.js:128 templates/js/stock.js:671 +msgid "Notes" +msgstr "" + +#: build/models.py:262 +msgid "Extra build notes" +msgstr "" + +#: build/models.py:673 +msgid "No build output specified" +msgstr "" + +#: build/models.py:676 +msgid "Build output is already completed" +msgstr "" + +#: build/models.py:679 +msgid "Build output does not match Build Order" +msgstr "" + +#: build/models.py:754 +msgid "Completed build output" +msgstr "" + +#: build/models.py:1002 +msgid "BuildItem must be unique for build, stock_item and install_into" +msgstr "" + +#: build/models.py:1024 +msgid "Build item must specify a build output" +msgstr "" + +#: build/models.py:1029 +#, python-brace-format +msgid "Selected stock item not found in BOM for part '{p}'" +msgstr "" + +#: build/models.py:1033 +#, python-brace-format +msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" +msgstr "" + +#: build/models.py:1040 order/models.py:758 +msgid "StockItem is over-allocated" +msgstr "" + +#: build/models.py:1044 order/models.py:761 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: build/models.py:1048 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1088 stock/templates/stock/item_base.html:306 +#: templates/InvenTree/search.html:183 templates/js/build.js:655 +#: templates/navbar.html:29 +msgid "Build" +msgstr "" + +#: build/models.py:1089 +msgid "Build to allocate parts" +msgstr "" + +#: build/models.py:1096 part/templates/part/allocation.html:18 +#: part/templates/part/allocation.html:24 +#: part/templates/part/allocation.html:31 +#: part/templates/part/allocation.html:49 +#: stock/templates/stock/item_base.html:8 +#: stock/templates/stock/item_base.html:93 +#: stock/templates/stock/item_base.html:328 +#: stock/templates/stock/stock_adjust.html:16 templates/js/build.js:771 +#: templates/js/stock.js:1004 templates/js/stock.js:1262 +msgid "Stock Item" +msgstr "" + +#: build/models.py:1097 +msgid "Source stock item" +msgstr "" + +#: build/models.py:1110 +msgid "Stock quantity to allocate to build" +msgstr "" + +#: build/models.py:1118 +msgid "Install into" +msgstr "" + +#: build/models.py:1119 +msgid "Destination stock item" +msgstr "" + +#: build/templates/build/allocate.html:7 +msgid "Allocate Parts" +msgstr "" + +#: build/templates/build/allocate.html:15 +msgid "Incomplete Build Ouputs" +msgstr "" + +#: build/templates/build/allocate.html:21 +msgid "Build order has been completed" +msgstr "" + +#: build/templates/build/allocate.html:26 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/allocate.html:27 +msgid "Create New Output" +msgstr "" + +#: build/templates/build/allocate.html:30 +msgid "Order required parts" +msgstr "" + +#: build/templates/build/allocate.html:31 +#: company/templates/company/detail_manufacturer_part.html:33 +#: company/templates/company/detail_supplier_part.html:32 order/views.py:794 +#: part/templates/part/category.html:127 +msgid "Order Parts" +msgstr "" + +#: build/templates/build/allocate.html:34 templates/js/build.js:590 +msgid "Unallocate stock" +msgstr "" + +#: build/templates/build/allocate.html:35 build/views.py:338 build/views.py:784 +msgid "Unallocate Stock" +msgstr "" + +#: build/templates/build/allocate.html:49 +msgid "Create a new build output" +msgstr "" + +#: build/templates/build/allocate.html:50 +msgid "No incomplete build outputs remain." +msgstr "" + +#: build/templates/build/allocate.html:51 +msgid "Create a new build output using the button above" +msgstr "" + +#: build/templates/build/attachments.html:12 +#: build/templates/build/navbar.html:49 build/templates/build/navbar.html:52 +#: order/templates/order/po_navbar.html:26 +#: order/templates/order/so_navbar.html:29 part/templates/part/navbar.html:119 +#: part/templates/part/navbar.html:122 stock/templates/stock/navbar.html:47 +#: stock/templates/stock/navbar.html:50 +msgid "Attachments" +msgstr "" + +#: build/templates/build/auto_allocate.html:9 +msgid "Automatically Allocate Stock" +msgstr "" + +#: build/templates/build/auto_allocate.html:10 +msgid "" +"The following stock items will be allocated to the specified build output" +msgstr "" + +#: build/templates/build/auto_allocate.html:37 +msgid "No stock items found that can be automatically allocated to this build" +msgstr "" + +#: build/templates/build/auto_allocate.html:39 +msgid "Stock items will have to be manually allocated" +msgstr "" + +#: build/templates/build/build_base.html:16 +#, python-format +msgid "This Build Order is allocated to Sales Order %(link)s" +msgstr "" + +#: build/templates/build/build_base.html:22 +#, python-format +msgid "This Build Order is a child of Build Order %(link)s" +msgstr "" + +#: build/templates/build/build_base.html:40 +#: company/templates/company/company_base.html:40 +#: company/templates/company/manufacturer_part_base.html:25 +#: company/templates/company/supplier_part_base.html:26 +#: order/templates/order/order_base.html:26 +#: order/templates/order/sales_order_base.html:35 +#: part/templates/part/category.html:18 part/templates/part/part_base.html:29 +#: stock/templates/stock/item_base.html:118 +#: stock/templates/stock/location.html:31 +msgid "Admin view" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: build/templates/build/build_base.html:111 +#: order/templates/order/order_base.html:32 +#: order/templates/order/order_base.html:86 +#: order/templates/order/sales_order_base.html:41 +#: order/templates/order/sales_order_base.html:86 +#: templates/js/table_filters.js:240 templates/js/table_filters.js:259 +#: templates/js/table_filters.js:276 +msgid "Overdue" +msgstr "" + +#: build/templates/build/build_base.html:55 +msgid "Print actions" +msgstr "" + +#: build/templates/build/build_base.html:59 +msgid "Print Build Order" +msgstr "" + +#: build/templates/build/build_base.html:65 +msgid "Build actions" +msgstr "" + +#: build/templates/build/build_base.html:69 +msgid "Edit Build" +msgstr "" + +#: build/templates/build/build_base.html:71 +#: build/templates/build/build_base.html:179 +msgid "Complete Build" +msgstr "" + +#: build/templates/build/build_base.html:72 +#: build/templates/build/build_base.html:170 build/views.py:57 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:85 +#: build/templates/build/detail.html:11 +msgid "Build Details" +msgstr "" + +#: build/templates/build/build_base.html:99 +#: build/templates/build/detail.html:59 order/models.py:445 +#: order/templates/order/receive_parts.html:24 +#: stock/templates/stock/item_base.html:392 templates/InvenTree/search.html:252 +#: templates/js/barcode.js:119 templates/js/build.js:710 +#: templates/js/order.js:187 templates/js/order.js:285 +#: templates/js/stock.js:628 templates/js/stock.js:1279 +msgid "Status" +msgstr "" + +#: build/templates/build/build_base.html:111 +#, python-format +msgid "This build was due on %(target)s" +msgstr "" + +#: build/templates/build/build_base.html:118 +#: build/templates/build/detail.html:64 +msgid "Progress" +msgstr "" + +#: build/templates/build/build_base.html:131 +#: build/templates/build/detail.html:84 order/models.py:667 +#: order/templates/order/sales_order_base.html:9 +#: order/templates/order/sales_order_base.html:33 +#: order/templates/order/sales_order_ship.html:25 +#: part/templates/part/allocation.html:30 +#: report/templates/report/inventree_build_order_base.html:136 +#: report/templates/report/inventree_so_report.html:77 +#: stock/templates/stock/item_base.html:268 templates/js/order.js:245 +msgid "Sales Order" +msgstr "" + +#: build/templates/build/build_base.html:138 +#: build/templates/build/detail.html:98 +#: report/templates/report/inventree_build_order_base.html:153 +msgid "Issued By" +msgstr "" + +#: build/templates/build/build_children.html:10 +#: build/templates/build/navbar.html:42 +msgid "Child Build Orders" +msgstr "" + +#: build/templates/build/build_output.html:10 +#: build/templates/build/navbar.html:35 build/templates/build/navbar.html:38 +msgid "Build Outputs" +msgstr "" + +#: build/templates/build/build_output_create.html:7 +msgid "The Bill of Materials contains trackable parts" +msgstr "" + +#: build/templates/build/build_output_create.html:8 +msgid "Build outputs must be generated individually." +msgstr "" + +#: build/templates/build/build_output_create.html:9 +msgid "Multiple build outputs will be created based on the quantity specified." +msgstr "" + +#: build/templates/build/build_output_create.html:15 +msgid "Trackable parts can have serial numbers specified" +msgstr "" + +#: build/templates/build/build_output_create.html:16 +msgid "Enter serial numbers to generate multiple single build outputs" +msgstr "" + +#: build/templates/build/cancel.html:5 +msgid "Are you sure you wish to cancel this build?" +msgstr "" + +#: build/templates/build/complete.html:8 +msgid "Build can be completed" +msgstr "" + +#: build/templates/build/complete.html:12 +msgid "Build cannot be completed" +msgstr "" + +#: build/templates/build/complete.html:15 +msgid "Incompleted build outputs remain" +msgstr "" + +#: build/templates/build/complete.html:18 +msgid "Required build quantity has not been completed" +msgstr "" + +#: build/templates/build/complete_output.html:9 +msgid "Stock allocation is complete" +msgstr "" + +#: build/templates/build/complete_output.html:13 +msgid "Stock allocation is incomplete" +msgstr "" + +#: build/templates/build/complete_output.html:19 +msgid "parts have not been fully allocated" +msgstr "" + +#: build/templates/build/complete_output.html:40 +msgid "The following items will be created" +msgstr "" + +#: build/templates/build/create_build_item.html:7 +msgid "Select a stock item to allocate to the selected build output" +msgstr "" + +#: build/templates/build/create_build_item.html:11 +#, python-format +msgid "" +"The allocated stock will be installed into the following build output:
    " +"%(output)s" +msgstr "" + +#: build/templates/build/create_build_item.html:17 +#, python-format +msgid "No stock available for %(part)s" +msgstr "" + +#: build/templates/build/delete_build_item.html:8 +msgid "Are you sure you want to unallocate this stock?" +msgstr "" + +#: build/templates/build/delete_build_item.html:11 +msgid "The selected stock will be unallocated from the build output" +msgstr "" + +#: build/templates/build/detail.html:35 +msgid "Stock Source" +msgstr "" + +#: build/templates/build/detail.html:40 +msgid "Stock can be taken from any available location." +msgstr "" + +#: build/templates/build/detail.html:46 stock/forms.py:169 stock/forms.py:375 +msgid "Destination" +msgstr "" + +#: build/templates/build/detail.html:53 +msgid "Destination location not specified" +msgstr "" + +#: build/templates/build/detail.html:70 +#: stock/templates/stock/item_base.html:292 templates/js/stock.js:636 +#: templates/js/stock.js:1286 templates/js/table_filters.js:107 +#: templates/js/table_filters.js:201 +msgid "Batch" +msgstr "" + +#: build/templates/build/detail.html:116 +#: order/templates/order/order_base.html:111 +#: order/templates/order/sales_order_base.html:111 templates/js/build.js:718 +msgid "Created" +msgstr "" + +#: build/templates/build/detail.html:127 +msgid "No target date set" +msgstr "" + +#: build/templates/build/detail.html:132 templates/js/build.js:696 +#: templates/js/build.js:728 +msgid "Completed" +msgstr "" + +#: build/templates/build/detail.html:136 +msgid "Build not complete" +msgstr "" + +#: build/templates/build/edit_build_item.html:7 +msgid "Alter the quantity of stock allocated to the build output" +msgstr "" + +#: build/templates/build/index.html:28 build/views.py:657 +msgid "New Build Order" +msgstr "" + +#: build/templates/build/index.html:37 build/templates/build/index.html:38 +msgid "Print Build Orders" +msgstr "" + +#: build/templates/build/index.html:43 +#: order/templates/order/purchase_orders.html:27 +#: order/templates/order/sales_orders.html:27 +msgid "Display calendar view" +msgstr "" + +#: build/templates/build/index.html:46 +#: order/templates/order/purchase_orders.html:30 +#: order/templates/order/sales_orders.html:30 +msgid "Display list view" +msgstr "" + +#: build/templates/build/navbar.html:12 +msgid "Build Order Details" +msgstr "" + +#: build/templates/build/navbar.html:15 +#: company/templates/company/navbar.html:15 +#: order/templates/order/po_navbar.html:14 +#: order/templates/order/so_navbar.html:15 part/templates/part/navbar.html:15 +msgid "Details" +msgstr "" + +#: build/templates/build/navbar.html:20 build/templates/build/navbar.html:23 +#: build/templates/build/parts.html:11 +msgid "Required Parts" +msgstr "" + +#: build/templates/build/navbar.html:27 build/templates/build/navbar.html:30 +msgid "In Progress" +msgstr "" + +#: build/templates/build/navbar.html:45 +msgid "Child Builds" +msgstr "" + +#: build/templates/build/navbar.html:56 +msgid "Build Order Notes" +msgstr "" + +#: build/templates/build/notes.html:12 +msgid "Build Notes" +msgstr "" + +#: build/templates/build/notes.html:14 company/templates/company/notes.html:13 +#: order/templates/order/order_notes.html:15 +#: order/templates/order/sales_order_notes.html:16 +#: part/templates/part/notes.html:14 stock/templates/stock/item_notes.html:15 +msgid "Edit notes" +msgstr "" + +#: build/templates/build/notes.html:26 company/templates/company/notes.html:24 +#: order/templates/order/order_notes.html:27 +#: order/templates/order/sales_order_notes.html:29 +#: part/templates/part/notes.html:27 stock/templates/stock/item_base.html:470 +#: stock/templates/stock/item_notes.html:26 +msgid "Save" +msgstr "" + +#: build/templates/build/unallocate.html:10 +msgid "Are you sure you wish to unallocate all stock for this build?" +msgstr "" + +#: build/templates/build/unallocate.html:12 +msgid "All incomplete stock allocations will be removed from the build" +msgstr "" + +#: build/views.py:77 +msgid "Build was cancelled" +msgstr "" + +#: build/views.py:91 +msgid "Allocate Stock" +msgstr "" + +#: build/views.py:154 build/views.py:314 build/views.py:485 +msgid "Build output must be specified" +msgstr "" + +#: build/views.py:168 +msgid "Allocated stock to build output" +msgstr "" + +#: build/views.py:180 +msgid "Create Build Output" +msgstr "" + +#: build/views.py:203 stock/models.py:969 stock/views.py:1789 +msgid "Serial numbers already exist" +msgstr "" + +#: build/views.py:212 +msgid "Serial numbers required for trackable build output" +msgstr "" + +#: build/views.py:278 +msgid "Delete Build Output" +msgstr "" + +#: build/views.py:299 build/views.py:383 +msgid "Confirm unallocation of build stock" +msgstr "" + +#: build/views.py:300 build/views.py:384 stock/views.py:425 +msgid "Check the confirmation box" +msgstr "" + +#: build/views.py:312 +msgid "Build output does not match build" +msgstr "" + +#: build/views.py:326 +msgid "Build output deleted" +msgstr "" + +#: build/views.py:408 +msgid "Complete Build Order" +msgstr "" + +#: build/views.py:414 +msgid "Build order cannot be completed" +msgstr "" + +#: build/views.py:425 +msgid "Completed build order" +msgstr "" + +#: build/views.py:441 +msgid "Complete Build Output" +msgstr "" + +#: build/views.py:476 +msgid "Quantity to complete cannot exceed build output quantity" +msgstr "" + +#: build/views.py:482 +msgid "Confirm completion of incomplete build" +msgstr "" + +#: build/views.py:573 +msgid "Build output completed" +msgstr "" + +#: build/views.py:711 +msgid "Created new build" +msgstr "" + +#: build/views.py:732 +msgid "Edit Build Order Details" +msgstr "" + +#: build/views.py:765 +msgid "Edited build" +msgstr "" + +#: build/views.py:774 +msgid "Delete Build Order" +msgstr "" + +#: build/views.py:789 +msgid "Removed parts from build allocation" +msgstr "" + +#: build/views.py:801 +msgid "Allocate stock to build output" +msgstr "" + +#: build/views.py:844 +msgid "Item must be currently in stock" +msgstr "" + +#: build/views.py:850 +msgid "Stock item is over-allocated" +msgstr "" + +#: build/views.py:851 templates/js/bom.js:230 templates/js/build.js:519 +#: templates/js/build.js:778 templates/js/build.js:961 +msgid "Available" +msgstr "" + +#: build/views.py:853 +msgid "Stock item must be selected" +msgstr "" + +#: build/views.py:1016 +msgid "Edit Stock Allocation" +msgstr "" + +#: build/views.py:1020 +msgid "Updated Build Item" +msgstr "" + +#: build/views.py:1049 +msgid "Add Build Order Attachment" +msgstr "" + +#: build/views.py:1062 order/views.py:110 order/views.py:162 part/views.py:172 +#: stock/views.py:277 +msgid "Added attachment" +msgstr "" + +#: build/views.py:1098 order/views.py:189 order/views.py:210 +msgid "Edit Attachment" +msgstr "" + +#: build/views.py:1108 order/views.py:193 order/views.py:214 +msgid "Attachment updated" +msgstr "" + +#: build/views.py:1118 order/views.py:229 order/views.py:243 +msgid "Delete Attachment" +msgstr "" + +#: build/views.py:1123 order/views.py:235 order/views.py:249 stock/views.py:333 +msgid "Deleted attachment" +msgstr "" + +#: common/models.py:56 +msgid "InvenTree Instance Name" +msgstr "" + +#: common/models.py:58 +msgid "String descriptor for the server instance" +msgstr "" + +#: common/models.py:62 +msgid "Use instance name" +msgstr "" + +#: common/models.py:63 +msgid "Use the instance name in the title-bar" +msgstr "" + +#: common/models.py:69 company/models.py:97 company/models.py:98 +msgid "Company name" +msgstr "" + +#: common/models.py:70 +msgid "Internal company name" +msgstr "" + +#: common/models.py:75 +msgid "Base URL" +msgstr "" + +#: common/models.py:76 +msgid "Base URL for server instance" +msgstr "" + +#: common/models.py:82 +msgid "Default Currency" +msgstr "" + +#: common/models.py:83 +msgid "Default currency" +msgstr "" + +#: common/models.py:89 +msgid "Download from URL" +msgstr "" + +#: common/models.py:90 +msgid "Allow download of remote images and files from external URL" +msgstr "" + +#: common/models.py:96 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:97 +msgid "Enable barcode scanner support" +msgstr "" + +#: common/models.py:103 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:104 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:108 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:109 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:115 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:116 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:122 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:123 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:129 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:130 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:136 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:137 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:143 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:144 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:150 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:151 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:157 part/models.py:2079 part/templates/part/detail.html:160 +#: report/models.py:185 stock/forms.py:259 templates/js/table_filters.js:24 +#: templates/js/table_filters.js:310 +msgid "Template" +msgstr "" + +#: common/models.py:158 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:164 part/models.py:834 part/templates/part/detail.html:170 +#: templates/js/table_filters.js:123 templates/js/table_filters.js:322 +msgid "Assembly" +msgstr "" + +#: common/models.py:165 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:171 part/models.py:840 part/templates/part/detail.html:180 +#: templates/js/table_filters.js:326 +msgid "Component" +msgstr "" + +#: common/models.py:172 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:178 part/models.py:851 part/templates/part/detail.html:200 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:179 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:185 part/models.py:856 part/templates/part/detail.html:210 +#: templates/js/table_filters.js:334 +msgid "Salable" +msgstr "" + +#: common/models.py:186 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:192 part/models.py:846 part/templates/part/detail.html:190 +#: templates/js/table_filters.js:32 templates/js/table_filters.js:338 +msgid "Trackable" +msgstr "" + +#: common/models.py:193 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:199 part/models.py:866 part/templates/part/detail.html:150 +#: templates/js/table_filters.js:28 +msgid "Virtual" +msgstr "" + +#: common/models.py:200 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:206 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:207 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:213 +msgid "Debug Mode" +msgstr "" + +#: common/models.py:214 +msgid "Generate reports in debug mode (HTML output)" +msgstr "" + +#: common/models.py:220 +msgid "Page Size" +msgstr "" + +#: common/models.py:221 +msgid "Default page size for PDF reports" +msgstr "" + +#: common/models.py:231 +msgid "Test Reports" +msgstr "" + +#: common/models.py:232 +msgid "Enable generation of test reports" +msgstr "" + +#: common/models.py:238 +msgid "Stock Expiry" +msgstr "" + +#: common/models.py:239 +msgid "Enable stock expiry functionality" +msgstr "" + +#: common/models.py:245 +msgid "Sell Expired Stock" +msgstr "" + +#: common/models.py:246 +msgid "Allow sale of expired stock" +msgstr "" + +#: common/models.py:252 +msgid "Stock Stale Time" +msgstr "" + +#: common/models.py:253 +msgid "Number of days stock items are considered stale before expiring" +msgstr "" + +#: common/models.py:255 part/templates/part/detail.html:121 +msgid "days" +msgstr "" + +#: common/models.py:260 +msgid "Build Expired Stock" +msgstr "" + +#: common/models.py:261 +msgid "Allow building with expired stock" +msgstr "" + +#: common/models.py:267 +msgid "Stock Ownership Control" +msgstr "" + +#: common/models.py:268 +msgid "Enable ownership control over stock locations and items" +msgstr "" + +#: common/models.py:274 +msgid "Group by Part" +msgstr "" + +#: common/models.py:275 +msgid "Group stock items by part reference in table views" +msgstr "" + +#: common/models.py:281 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:282 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:288 +msgid "Build Order Reference Prefix" +msgstr "" + +#: common/models.py:289 +msgid "Prefix value for build order reference" +msgstr "" + +#: common/models.py:294 +msgid "Build Order Reference Regex" +msgstr "" + +#: common/models.py:295 +msgid "Regular expression pattern for matching build order reference" +msgstr "" + +#: common/models.py:299 +msgid "Sales Order Reference Prefix" +msgstr "" + +#: common/models.py:300 +msgid "Prefix value for sales order reference" +msgstr "" + +#: common/models.py:305 +msgid "Purchase Order Reference Prefix" +msgstr "" + +#: common/models.py:306 +msgid "Prefix value for purchase order reference" +msgstr "" + +#: common/models.py:529 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:531 +msgid "Settings value" +msgstr "" + +#: common/models.py:566 +msgid "Must be an integer value" +msgstr "" + +#: common/models.py:589 +msgid "Value must be a boolean value" +msgstr "" + +#: common/models.py:600 +msgid "Value must be an integer value" +msgstr "" + +#: common/models.py:623 +msgid "Key string must be unique" +msgstr "" + +#: common/models.py:704 company/forms.py:177 +msgid "Price break quantity" +msgstr "" + +#: common/models.py:712 company/templates/company/supplier_part_pricing.html:82 +#: part/templates/part/sale_prices.html:90 templates/js/bom.js:255 +msgid "Price" +msgstr "" + +#: common/models.py:713 +msgid "Unit price at specified quantity" +msgstr "" + +#: common/models.py:736 +msgid "Default" +msgstr "" + +#: common/templates/common/edit_setting.html:11 +msgid "Current value" +msgstr "" + +#: common/views.py:25 +msgid "Change Setting" +msgstr "" + +#: common/views.py:94 +msgid "Supplied value is not allowed" +msgstr "" + +#: common/views.py:103 +msgid "Supplied value must be a boolean" +msgstr "" + +#: company/forms.py:38 company/models.py:145 +#: company/templates/company/detail.html:42 +msgid "Currency" +msgstr "" + +#: company/forms.py:39 company/models.py:147 +msgid "Default currency used for this company" +msgstr "" + +#: company/forms.py:77 part/forms.py:46 +msgid "URL" +msgstr "" + +#: company/forms.py:78 part/forms.py:47 +msgid "Image URL" +msgstr "" + +#: company/forms.py:118 +msgid "Single Price" +msgstr "" + +#: company/forms.py:120 +msgid "Single quantity price" +msgstr "" + +#: company/forms.py:128 company/models.py:324 +msgid "Select manufacturer" +msgstr "" + +#: company/forms.py:134 company/models.py:331 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/forms.py:136 company/models.py:330 +#: company/templates/company/manufacturer_part_base.html:89 +#: company/templates/company/manufacturer_part_detail.html:26 +#: company/templates/company/supplier_part_base.html:101 +#: company/templates/company/supplier_part_detail.html:35 +#: order/templates/order/purchase_order_detail.html:183 part/bom.py:171 +#: part/bom.py:242 templates/js/company.js:181 templates/js/company.js:307 +msgid "MPN" +msgstr "" + +#: company/models.py:102 +msgid "Company description" +msgstr "" + +#: company/models.py:103 +msgid "Description of the company" +msgstr "" + +#: company/models.py:107 company/templates/company/company_base.html:70 +#: company/templates/company/detail.html:33 templates/js/company.js:60 +msgid "Website" +msgstr "" + +#: company/models.py:107 +msgid "Company website URL" +msgstr "" + +#: company/models.py:110 company/templates/company/company_base.html:77 +msgid "Address" +msgstr "" + +#: company/models.py:111 +msgid "Company address" +msgstr "" + +#: company/models.py:114 +msgid "Phone number" +msgstr "" + +#: company/models.py:115 +msgid "Contact phone number" +msgstr "" + +#: company/models.py:118 company/templates/company/company_base.html:91 +msgid "Email" +msgstr "" + +#: company/models.py:118 +msgid "Contact email address" +msgstr "" + +#: company/models.py:121 company/templates/company/company_base.html:98 +msgid "Contact" +msgstr "" + +#: company/models.py:122 +msgid "Point of contact" +msgstr "" + +#: company/models.py:124 company/models.py:336 company/models.py:488 +#: order/models.py:103 part/models.py:743 +#: report/templates/report/inventree_build_order_base.html:165 +#: stock/models.py:1560 templates/js/company.js:188 templates/js/company.js:318 +#: templates/js/part.js:431 +msgid "Link" +msgstr "" + +#: company/models.py:124 +msgid "Link to external company information" +msgstr "" + +#: company/models.py:132 part/models.py:753 +msgid "Image" +msgstr "" + +#: company/models.py:137 +msgid "is customer" +msgstr "" + +#: company/models.py:137 +msgid "Do you sell items to this company?" +msgstr "" + +#: company/models.py:139 +msgid "is supplier" +msgstr "" + +#: company/models.py:139 +msgid "Do you purchase items from this company?" +msgstr "" + +#: company/models.py:141 +msgid "is manufacturer" +msgstr "" + +#: company/models.py:141 +msgid "Does this company manufacture parts?" +msgstr "" + +#: company/models.py:308 company/models.py:459 stock/models.py:373 +#: stock/templates/stock/item_base.html:224 +msgid "Base Part" +msgstr "" + +#: company/models.py:312 company/models.py:463 order/views.py:1372 +msgid "Select part" +msgstr "" + +#: company/models.py:323 company/templates/company/detail.html:57 +#: company/templates/company/manufacturer_part_base.html:85 +#: company/templates/company/manufacturer_part_detail.html:25 +#: company/templates/company/supplier_part_base.html:94 +#: company/templates/company/supplier_part_detail.html:34 part/bom.py:170 +#: part/bom.py:241 stock/templates/stock/item_base.html:341 +#: templates/js/company.js:44 templates/js/company.js:165 +#: templates/js/company.js:289 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:337 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:343 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:469 company/templates/company/detail.html:62 +#: company/templates/company/supplier_part_base.html:84 +#: company/templates/company/supplier_part_detail.html:25 order/models.py:190 +#: order/templates/order/order_base.html:92 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:175 +#: part/bom.py:286 stock/templates/stock/item_base.html:353 +#: templates/js/company.js:48 templates/js/company.js:263 +#: templates/js/order.js:170 +msgid "Supplier" +msgstr "" + +#: company/models.py:470 +msgid "Select supplier" +msgstr "" + +#: company/models.py:475 company/templates/company/supplier_part_base.html:88 +#: company/templates/company/supplier_part_detail.html:26 +#: order/templates/order/purchase_order_detail.html:174 part/bom.py:176 +#: part/bom.py:287 +msgid "SKU" +msgstr "" + +#: company/models.py:476 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:482 +#: company/templates/company/manufacturer_part_base.html:6 +#: company/templates/company/manufacturer_part_base.html:19 +#: stock/templates/stock/item_base.html:346 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:483 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:489 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:495 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:500 company/templates/company/supplier_part_base.html:115 +#: company/templates/company/supplier_part_detail.html:38 part/models.py:2190 +#: report/templates/report/inventree_po_report.html:93 +#: report/templates/report/inventree_so_report.html:93 +msgid "Note" +msgstr "" + +#: company/models.py:504 +msgid "base cost" +msgstr "" + +#: company/models.py:504 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:506 company/templates/company/supplier_part_base.html:108 +#: stock/models.py:397 stock/templates/stock/item_base.html:299 +#: templates/js/stock.js:667 +msgid "Packaging" +msgstr "" + +#: company/models.py:506 +msgid "Part packaging" +msgstr "" + +#: company/models.py:508 +msgid "multiple" +msgstr "" + +#: company/models.py:508 +msgid "Order multiple" +msgstr "" + +#: company/templates/company/assigned_stock.html:10 +#: company/templates/company/navbar.html:62 +#: company/templates/company/navbar.html:65 templates/js/build.js:411 +msgid "Assigned Stock" +msgstr "" + +#: company/templates/company/company_base.html:9 +#: company/templates/company/company_base.html:35 +#: templates/InvenTree/search.html:304 templates/js/company.js:33 +msgid "Company" +msgstr "" + +#: company/templates/company/company_base.html:25 +#: part/templates/part/part_thumb.html:21 +msgid "Upload new image" +msgstr "" + +#: company/templates/company/company_base.html:27 +#: part/templates/part/part_thumb.html:23 +msgid "Download image from URL" +msgstr "" + +#: company/templates/company/company_base.html:46 order/views.py:306 +msgid "Create Purchase Order" +msgstr "" + +#: company/templates/company/company_base.html:51 +msgid "Edit company information" +msgstr "" + +#: company/templates/company/company_base.html:56 company/views.py:326 +msgid "Delete Company" +msgstr "" + +#: company/templates/company/company_base.html:64 +#: company/templates/company/detail.html:10 +#: company/templates/company/navbar.html:12 +msgid "Company Details" +msgstr "" + +#: company/templates/company/company_base.html:84 +msgid "Phone" +msgstr "" + +#: company/templates/company/delete.html:7 +#, python-format +msgid "Are you sure you want to delete company '%(name)s'?" +msgstr "" + +#: company/templates/company/delete.html:12 +#, python-format +msgid "" +"There are %(count)s parts sourced from this company.
    \n" +"If this supplier is deleted, these supplier part entries will also be " +"deleted." +msgstr "" + +#: company/templates/company/detail.html:21 +msgid "Company Name" +msgstr "" + +#: company/templates/company/detail.html:36 +msgid "No website specified" +msgstr "" + +#: company/templates/company/detail.html:45 +msgid "Uses default currency" +msgstr "" + +#: company/templates/company/detail.html:67 order/models.py:440 +#: order/templates/order/sales_order_base.html:92 stock/models.py:415 +#: stock/models.py:416 stock/templates/stock/item_base.html:251 +#: templates/js/company.js:40 templates/js/order.js:267 +msgid "Customer" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:11 +#: templates/InvenTree/search.html:149 +msgid "Manufacturer Parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:22 +msgid "Create new manufacturer part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:23 +#: part/templates/part/manufacturer.html:19 +msgid "New Manufacturer Part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:28 +#: company/templates/company/detail_supplier_part.html:27 +#: company/templates/company/manufacturer_part_suppliers.html:20 +#: part/templates/part/category.html:122 +#: part/templates/part/manufacturer.html:22 +#: part/templates/part/supplier.html:20 +msgid "Options" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:33 +#: company/templates/company/detail_supplier_part.html:32 +#: part/templates/part/category.html:127 +msgid "Order parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:36 +#: company/templates/company/detail_supplier_part.html:35 +msgid "Delete parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:36 +#: company/templates/company/detail_supplier_part.html:35 +msgid "Delete Parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:66 +#: company/templates/company/detail_supplier_part.html:66 +#: part/templates/part/bom.html:159 part/templates/part/category.html:118 +#: templates/js/stock.js:1157 +msgid "New Part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:67 +#: company/templates/company/detail_supplier_part.html:67 +msgid "Create new Part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:72 +#: company/views.py:71 part/templates/part/manufacturer.html:52 +#: part/templates/part/supplier.html:56 +msgid "New Manufacturer" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:73 +#: company/views.py:284 +msgid "Create new Manufacturer" +msgstr "" + +#: company/templates/company/detail_stock.html:10 +msgid "Supplier Stock" +msgstr "" + +#: company/templates/company/detail_stock.html:37 +#: company/templates/company/supplier_part_stock.html:34 +#: part/templates/part/category.html:114 part/templates/part/category.html:128 +#: part/templates/part/stock.html:54 stock/templates/stock/location.html:163 +msgid "Export" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:11 +#: company/templates/company/manufacturer_part_navbar.html:11 +#: company/templates/company/manufacturer_part_suppliers.html:10 +#: templates/InvenTree/search.html:164 +msgid "Supplier Parts" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:21 +#: order/templates/order/order_wizard/select_parts.html:42 +#: order/templates/order/purchase_order_detail.html:75 +msgid "Create new supplier part" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:22 +#: company/templates/company/manufacturer_part_suppliers.html:17 +#: order/templates/order/purchase_order_detail.html:74 +#: part/templates/part/supplier.html:17 templates/js/stock.js:1163 +msgid "New Supplier Part" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:72 +#: company/templates/company/manufacturer_part_suppliers.html:47 +#: company/views.py:64 order/templates/order/purchase_orders.html:183 +#: part/templates/part/supplier.html:50 +msgid "New Supplier" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:73 company/views.py:281 +#: order/templates/order/purchase_orders.html:184 +msgid "Create new Supplier" +msgstr "" + +#: company/templates/company/index.html:8 +msgid "Supplier List" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:36 +#: company/templates/company/supplier_part_base.html:36 +#: company/templates/company/supplier_part_orders.html:17 +#: part/templates/part/orders.html:17 part/templates/part/part_base.html:65 +msgid "Order part" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:41 +msgid "Edit manufacturer part" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:45 +msgid "Delete manufacturer part" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:57 +#: company/templates/company/manufacturer_part_detail.html:10 +msgid "Manufacturer Part Details" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:62 +#: company/templates/company/manufacturer_part_detail.html:18 +#: company/templates/company/supplier_part_base.html:61 +#: company/templates/company/supplier_part_detail.html:18 +msgid "Internal Part" +msgstr "" + +#: company/templates/company/manufacturer_part_delete.html:6 +msgid "Are you sure you want to delete the following Manufacturer Parts?" +msgstr "" + +#: company/templates/company/manufacturer_part_delete.html:36 +#, python-format +msgid "" +"There are %(count)s suppliers defined for this manufacturer part. If you " +"delete it, the following supplier parts will also be deleted:" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:14 +#: company/views.py:63 part/templates/part/navbar.html:78 +#: part/templates/part/navbar.html:81 templates/InvenTree/search.html:316 +#: templates/navbar.html:35 +msgid "Suppliers" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:19 +msgid "Manufacturer Part Stock" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:22 +#: company/templates/company/navbar.html:41 +#: company/templates/company/supplier_part_navbar.html:15 +#: part/templates/part/navbar.html:36 stock/api.py:51 +#: stock/templates/stock/loc_link.html:7 stock/templates/stock/location.html:36 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/index.html:128 templates/InvenTree/search.html:196 +#: templates/InvenTree/search.html:232 +#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:173 +#: templates/js/part.js:398 templates/js/stock.js:563 templates/navbar.html:26 +msgid "Stock" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:26 +msgid "Manufacturer Part Orders" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:29 +#: company/templates/company/supplier_part_navbar.html:22 +msgid "Orders" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:22 +#: part/templates/part/supplier.html:22 +msgid "Delete supplier parts" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:22 +#: part/templates/part/manufacturer.html:24 part/templates/part/params.html:44 +#: part/templates/part/related.html:44 part/templates/part/supplier.html:22 +#: stock/views.py:1002 users/models.py:184 +msgid "Delete" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:48 +#: part/templates/part/supplier.html:51 +msgid "Create new supplier" +msgstr "" + +#: company/templates/company/navbar.html:20 +#: company/templates/company/navbar.html:23 +msgid "Manufactured Parts" +msgstr "" + +#: company/templates/company/navbar.html:29 +#: company/templates/company/navbar.html:32 +msgid "Supplied Parts" +msgstr "" + +#: company/templates/company/navbar.html:38 part/templates/part/navbar.html:33 +#: stock/templates/stock/location.html:107 +#: stock/templates/stock/location.html:122 +#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location_navbar.html:22 +#: stock/templates/stock/location_navbar.html:29 +#: templates/InvenTree/search.html:198 templates/js/stock.js:968 +#: templates/stats.html:72 templates/stats.html:81 users/models.py:40 +msgid "Stock Items" +msgstr "" + +#: company/templates/company/navbar.html:47 +#: company/templates/company/navbar.html:56 +#: company/templates/company/navbar.html:59 +#: company/templates/company/sales_orders.html:11 +#: order/templates/order/sales_orders.html:8 +#: order/templates/order/sales_orders.html:13 +#: part/templates/part/navbar.html:98 part/templates/part/navbar.html:101 +#: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:228 +#: templates/InvenTree/search.html:345 +#: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46 +#: users/models.py:43 +msgid "Sales Orders" +msgstr "" + +#: company/templates/company/navbar.html:50 +#: company/templates/company/purchase_orders.html:10 +#: order/templates/order/purchase_orders.html:8 +#: order/templates/order/purchase_orders.html:13 +#: part/templates/part/navbar.html:84 part/templates/part/navbar.html:87 +#: part/templates/part/orders.html:10 templates/InvenTree/index.html:205 +#: templates/InvenTree/search.html:325 +#: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37 +#: users/models.py:42 +msgid "Purchase Orders" +msgstr "" + +#: company/templates/company/notes.html:11 +msgid "Company Notes" +msgstr "" + +#: company/templates/company/purchase_orders.html:18 +#: order/templates/order/purchase_orders.html:20 +msgid "Create new purchase order" +msgstr "" + +#: company/templates/company/purchase_orders.html:19 +#: order/templates/order/purchase_orders.html:21 +msgid "New Purchase Order" +msgstr "" + +#: company/templates/company/sales_orders.html:19 +#: order/templates/order/sales_orders.html:20 +msgid "Create new sales order" +msgstr "" + +#: company/templates/company/sales_orders.html:20 +#: order/templates/order/sales_orders.html:21 +msgid "New Sales Order" +msgstr "" + +#: company/templates/company/supplier_part_base.html:7 +#: company/templates/company/supplier_part_base.html:20 stock/models.py:382 +#: stock/templates/stock/item_base.html:358 templates/js/company.js:279 +msgid "Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part_base.html:40 +msgid "Edit supplier part" +msgstr "" + +#: company/templates/company/supplier_part_base.html:44 +msgid "Delete supplier part" +msgstr "" + +#: company/templates/company/supplier_part_base.html:56 +#: company/templates/company/supplier_part_detail.html:10 +msgid "Supplier Part Details" +msgstr "" + +#: company/templates/company/supplier_part_delete.html:5 +msgid "Are you sure you want to delete the following Supplier Parts?" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part_stock.html:10 +msgid "Supplier Part Stock" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part_orders.html:10 +msgid "Supplier Part Orders" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:26 +msgid "Supplier Part Pricing" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:29 +msgid "Pricing" +msgstr "" + +#: company/templates/company/supplier_part_orders.html:18 +#: part/templates/part/orders.html:18 +msgid "Order Part" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:11 +msgid "Pricing Information" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:19 company/views.py:794 +#: part/templates/part/sale_prices.html:17 part/views.py:2624 +msgid "Add Price Break" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:38 +#: part/templates/part/sale_prices.html:46 +msgid "No price break information found" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:89 +#: part/templates/part/sale_prices.html:97 +msgid "Edit price break" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:90 +#: part/templates/part/sale_prices.html:98 +msgid "Delete price break" +msgstr "" + +#: company/views.py:70 part/templates/part/navbar.html:72 +#: part/templates/part/navbar.html:75 templates/InvenTree/search.html:306 +#: templates/navbar.html:36 +msgid "Manufacturers" +msgstr "" + +#: company/views.py:77 templates/InvenTree/search.html:336 +#: templates/navbar.html:45 +msgid "Customers" +msgstr "" + +#: company/views.py:78 order/templates/order/sales_orders.html:185 +msgid "New Customer" +msgstr "" + +#: company/views.py:86 +msgid "Companies" +msgstr "" + +#: company/views.py:87 +msgid "New Company" +msgstr "" + +#: company/views.py:169 part/views.py:848 +msgid "Download Image" +msgstr "" + +#: company/views.py:198 part/views.py:880 +msgid "Image size exceeds maximum allowable size for download" +msgstr "" + +#: company/views.py:214 part/views.py:896 +msgid "Supplied URL is not a valid image file" +msgstr "" + +#: company/views.py:243 +msgid "Update Company Image" +msgstr "" + +#: company/views.py:249 +msgid "Updated company image" +msgstr "" + +#: company/views.py:259 +msgid "Edit Company" +msgstr "" + +#: company/views.py:264 +msgid "Edited company information" +msgstr "" + +#: company/views.py:287 order/templates/order/sales_orders.html:186 +msgid "Create new Customer" +msgstr "" + +#: company/views.py:289 +msgid "Create new Company" +msgstr "" + +#: company/views.py:316 +msgid "Created new company" +msgstr "" + +#: company/views.py:332 +msgid "Company was deleted" +msgstr "" + +#: company/views.py:357 +msgid "Edit Manufacturer Part" +msgstr "" + +#: company/views.py:366 +msgid "Create New Manufacturer Part" +msgstr "" + +#: company/views.py:440 +msgid "Delete Manufacturer Part" +msgstr "" + +#: company/views.py:528 +msgid "Edit Supplier Part" +msgstr "" + +#: company/views.py:578 templates/js/stock.js:1164 +msgid "Create new Supplier Part" +msgstr "" + +#: company/views.py:722 +msgid "Delete Supplier Part" +msgstr "" + +#: company/views.py:799 part/views.py:2628 +msgid "Added new price break" +msgstr "" + +#: company/views.py:855 part/views.py:2672 +msgid "Edit Price Break" +msgstr "" + +#: company/views.py:870 part/views.py:2686 +msgid "Delete Price Break" +msgstr "" + +#: label/api.py:56 report/api.py:201 +msgid "No valid objects provided to template" +msgstr "" + +#: label/models.py:102 +msgid "Label name" +msgstr "" + +#: label/models.py:109 +msgid "Label description" +msgstr "" + +#: label/models.py:116 stock/forms.py:202 +msgid "Label" +msgstr "" + +#: label/models.py:117 +msgid "Label template file" +msgstr "" + +#: label/models.py:123 report/models.py:274 +msgid "Enabled" +msgstr "" + +#: label/models.py:124 +msgid "Label template is enabled" +msgstr "" + +#: label/models.py:129 +msgid "Width [mm]" +msgstr "" + +#: label/models.py:130 +msgid "Label width, specified in mm" +msgstr "" + +#: label/models.py:136 +msgid "Height [mm]" +msgstr "" + +#: label/models.py:137 +msgid "Label height, specified in mm" +msgstr "" + +#: label/models.py:222 label/models.py:275 +msgid "Query filters (comma-separated list of key=value pairs" +msgstr "" + +#: label/models.py:223 label/models.py:276 report/models.py:294 +#: report/models.py:415 report/models.py:449 +msgid "Filters" +msgstr "" + +#: order/forms.py:27 order/templates/order/order_base.html:47 +msgid "Place order" +msgstr "" + +#: order/forms.py:38 order/templates/order/order_base.html:54 +msgid "Mark order as complete" +msgstr "" + +#: order/forms.py:49 order/forms.py:60 order/templates/order/order_base.html:59 +#: order/templates/order/sales_order_base.html:59 +msgid "Cancel order" +msgstr "" + +#: order/forms.py:71 order/templates/order/sales_order_base.html:56 +msgid "Ship order" +msgstr "" + +#: order/forms.py:82 +msgid "Receive parts to this location" +msgstr "" + +#: order/forms.py:103 +msgid "Purchase Order reference" +msgstr "" + +#: order/forms.py:110 +msgid "Target date for order delivery. Order will be overdue after this date." +msgstr "" + +#: order/forms.py:138 +msgid "Enter sales order number" +msgstr "" + +#: order/forms.py:145 order/models.py:452 +msgid "" +"Target date for order completion. Order will be overdue after this date." +msgstr "" + +#: order/forms.py:235 +msgid "Enter stock item serial numbers" +msgstr "" + +#: order/forms.py:241 +msgid "Enter quantity of stock items" +msgstr "" + +#: order/models.py:99 +msgid "Order reference" +msgstr "" + +#: order/models.py:101 +msgid "Order description" +msgstr "" + +#: order/models.py:103 +msgid "Link to external page" +msgstr "" + +#: order/models.py:111 part/templates/part/detail.html:132 +msgid "Created By" +msgstr "" + +#: order/models.py:118 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:123 +msgid "Order notes" +msgstr "" + +#: order/models.py:182 order/models.py:445 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:191 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:194 order/templates/order/order_base.html:98 +#: templates/js/order.js:179 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:194 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:201 +msgid "received by" +msgstr "" + +#: order/models.py:206 +msgid "Issue Date" +msgstr "" + +#: order/models.py:207 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:212 +msgid "Target Delivery Date" +msgstr "" + +#: order/models.py:213 +msgid "" +"Expected date for order delivery. Order will be overdue after this date." +msgstr "" + +#: order/models.py:219 +msgid "Date order was completed" +msgstr "" + +#: order/models.py:243 order/models.py:342 part/views.py:1586 +#: stock/models.py:270 stock/models.py:953 +msgid "Quantity must be greater than zero" +msgstr "" + +#: order/models.py:248 +msgid "Part supplier must match PO supplier" +msgstr "" + +#: order/models.py:337 +msgid "Lines can only be received against an order marked as 'Placed'" +msgstr "" + +#: order/models.py:359 +msgid "Received items" +msgstr "" + +#: order/models.py:441 +msgid "Company to which the items are being sold" +msgstr "" + +#: order/models.py:447 +msgid "Customer Reference " +msgstr "" + +#: order/models.py:447 +msgid "Customer order reference code" +msgstr "" + +#: order/models.py:455 templates/js/order.js:303 +msgid "Shipment Date" +msgstr "" + +#: order/models.py:462 +msgid "shipped by" +msgstr "" + +#: order/models.py:506 +msgid "SalesOrder cannot be shipped as it is not currently pending" +msgstr "" + +#: order/models.py:593 +msgid "Item quantity" +msgstr "" + +#: order/models.py:595 +msgid "Line item reference" +msgstr "" + +#: order/models.py:597 +msgid "Line item notes" +msgstr "" + +#: order/models.py:623 order/models.py:667 +#: part/templates/part/allocation.html:17 +#: part/templates/part/allocation.html:45 +msgid "Order" +msgstr "" + +#: order/models.py:624 order/templates/order/order_base.html:9 +#: order/templates/order/order_base.html:24 +#: report/templates/report/inventree_po_report.html:77 +#: stock/templates/stock/item_base.html:313 templates/js/order.js:148 +msgid "Purchase Order" +msgstr "" + +#: order/models.py:638 +msgid "Supplier part" +msgstr "" + +#: order/models.py:641 order/templates/order/order_base.html:131 +#: order/templates/order/purchase_order_detail.html:214 +#: order/templates/order/receive_parts.html:22 +#: order/templates/order/sales_order_base.html:131 +msgid "Received" +msgstr "" + +#: order/models.py:641 +msgid "Number of items received" +msgstr "" + +#: order/models.py:648 stock/models.py:508 +#: stock/templates/stock/item_base.html:320 +msgid "Purchase Price" +msgstr "" + +#: order/models.py:649 +msgid "Unit purchase price" +msgstr "" + +#: order/models.py:743 order/models.py:745 +msgid "Stock item has not been assigned" +msgstr "" + +#: order/models.py:749 +msgid "Cannot allocate stock item to a line with a different part" +msgstr "" + +#: order/models.py:751 +msgid "Cannot allocate stock to a line without a part" +msgstr "" + +#: order/models.py:754 +msgid "Allocation quantity cannot exceed stock quantity" +msgstr "" + +#: order/models.py:764 +msgid "Quantity must be 1 for serialized stock item" +msgstr "" + +#: order/models.py:769 +msgid "Line" +msgstr "" + +#: order/models.py:780 +msgid "Item" +msgstr "" + +#: order/models.py:781 +msgid "Select stock item to allocate" +msgstr "" + +#: order/models.py:784 +msgid "Enter stock allocation quantity" +msgstr "" + +#: order/templates/order/delete_attachment.html:5 +#: stock/templates/stock/attachment_delete.html:5 +#: templates/attachment_delete.html:5 +msgid "Are you sure you want to delete this attachment?" +msgstr "" + +#: order/templates/order/order_base.html:39 +#: order/templates/order/sales_order_base.html:48 +msgid "Print" +msgstr "" + +#: order/templates/order/order_base.html:43 +#: order/templates/order/sales_order_base.html:52 +msgid "Edit order information" +msgstr "" + +#: order/templates/order/order_base.html:51 +msgid "Receive items" +msgstr "" + +#: order/templates/order/order_base.html:64 +msgid "Export order to file" +msgstr "" + +#: order/templates/order/order_base.html:72 +#: order/templates/order/po_navbar.html:11 +msgid "Purchase Order Details" +msgstr "" + +#: order/templates/order/order_base.html:77 +#: order/templates/order/sales_order_base.html:77 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:82 +#: order/templates/order/sales_order_base.html:82 +msgid "Order Status" +msgstr "" + +#: order/templates/order/order_base.html:117 +#: report/templates/report/inventree_build_order_base.html:122 +msgid "Issued" +msgstr "" + +#: order/templates/order/order_cancel.html:7 +#: order/templates/order/sales_order_cancel.html:9 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: order/templates/order/order_complete.html:7 +msgid "Mark this order as complete?" +msgstr "" + +#: order/templates/order/order_complete.html:10 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: order/templates/order/order_complete.html:11 +msgid "Marking this order as complete will remove these line items." +msgstr "" + +#: order/templates/order/order_issue.html:7 +msgid "" +"After placing this purchase order, line items will no longer be editable." +msgstr "" + +#: order/templates/order/order_notes.html:13 +msgid "Order Notes" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:9 +msgid "Step 1 of 2 - Select Part Suppliers" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:14 +msgid "Select suppliers" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:18 +msgid "No purchaseable parts selected" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:31 +msgid "Select Supplier" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:57 +#, python-format +msgid "Select a supplier for %(name)s" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:69 +#: part/templates/part/set_category.html:32 +msgid "Remove part" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:8 +msgid "Step 2 of 2 - Select Purchase Orders" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:12 +msgid "Select existing purchase orders, or create new orders." +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:31 +#: templates/js/order.js:205 templates/js/order.js:308 +msgid "Items" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:32 +msgid "Select Purchase Order" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:45 +#, python-format +msgid "Create new purchase order for %(name)s" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:68 +#, python-format +msgid "Select a purchase order for %(name)s" +msgstr "" + +#: order/templates/order/po_attachments.html:12 +#: order/templates/order/po_navbar.html:23 +msgid "Purchase Order Attachments" +msgstr "" + +#: order/templates/order/po_navbar.html:17 +msgid "Received Stock Items" +msgstr "" + +#: order/templates/order/po_navbar.html:20 +#: order/templates/order/po_received_items.html:12 +msgid "Received Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:14 +msgid "Purchase Order Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:24 +#: order/templates/order/sales_order_detail.html:22 order/views.py:1108 +#: order/views.py:1191 +msgid "Add Line Item" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:125 +#: part/templates/part/category.html:185 part/templates/part/category.html:227 +#: stock/templates/stock/location.html:191 templates/js/stock.js:708 +#: templates/js/stock.js:1169 +msgid "New Location" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:46 +#: order/templates/order/purchase_order_detail.html:126 +#: stock/templates/stock/location.html:42 +msgid "Create new stock location" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:139 +msgid "No line items found" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:205 +msgid "Unit Price" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:246 +#: order/templates/order/sales_order_detail.html:294 +msgid "Edit line item" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:247 +msgid "Delete line item" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:252 +msgid "Receive line item" +msgstr "" + +#: order/templates/order/purchase_orders.html:24 +#: order/templates/order/sales_orders.html:24 +msgid "Print Order Reports" +msgstr "" + +#: order/templates/order/receive_parts.html:8 +#, python-format +msgid "Receive outstanding parts for %(order)s - %(desc)s" +msgstr "" + +#: order/templates/order/receive_parts.html:14 part/api.py:40 +#: part/models.py:322 part/templates/part/cat_link.html:7 +#: part/templates/part/category.html:99 +#: part/templates/part/category_navbar.html:22 +#: part/templates/part/category_navbar.html:29 +#: part/templates/part/category_partlist.html:10 +#: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114 +#: templates/InvenTree/settings/tabs.html:25 templates/js/part.js:577 +#: templates/navbar.html:23 templates/stats.html:59 templates/stats.html:68 +#: users/models.py:38 +msgid "Parts" +msgstr "" + +#: order/templates/order/receive_parts.html:15 +msgid "Select parts to receive against this order" +msgstr "" + +#: order/templates/order/receive_parts.html:20 +msgid "Order Code" +msgstr "" + +#: order/templates/order/receive_parts.html:21 +#: part/templates/part/part_base.html:129 templates/js/part.js:414 +msgid "On Order" +msgstr "" + +#: order/templates/order/receive_parts.html:23 +msgid "Receive" +msgstr "" + +#: order/templates/order/receive_parts.html:36 +msgid "Error: Referenced part has been removed" +msgstr "" + +#: order/templates/order/receive_parts.html:57 +msgid "Remove line" +msgstr "" + +#: order/templates/order/sales_order_base.html:15 +msgid "This SalesOrder has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:64 +msgid "Packing List" +msgstr "" + +#: order/templates/order/sales_order_base.html:72 +#: order/templates/order/so_navbar.html:12 +msgid "Sales Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:98 templates/js/order.js:275 +msgid "Customer Reference" +msgstr "" + +#: order/templates/order/sales_order_cancel.html:8 +#: order/templates/order/sales_order_ship.html:9 +#: part/templates/part/bom_duplicate.html:12 +#: stock/templates/stock/stockitem_convert.html:13 +msgid "Warning" +msgstr "" + +#: order/templates/order/sales_order_detail.html:13 +msgid "Sales Order Items" +msgstr "" + +#: order/templates/order/sales_order_detail.html:75 +#: order/templates/order/sales_order_detail.html:157 +#: report/templates/report/inventree_test_report_base.html:75 +#: stock/models.py:420 stock/templates/stock/item_base.html:238 +#: templates/js/build.js:418 +msgid "Serial Number" +msgstr "" + +#: order/templates/order/sales_order_detail.html:92 templates/js/bom.js:342 +#: templates/js/build.js:571 templates/js/build.js:984 +msgid "Actions" +msgstr "" + +#: order/templates/order/sales_order_detail.html:99 templates/js/build.js:459 +#: templates/js/build.js:789 +msgid "Edit stock allocation" +msgstr "" + +#: order/templates/order/sales_order_detail.html:100 templates/js/build.js:461 +#: templates/js/build.js:790 +msgid "Delete stock allocation" +msgstr "" + +#: order/templates/order/sales_order_detail.html:170 +msgid "No matching line items" +msgstr "" + +#: order/templates/order/sales_order_detail.html:199 +msgid "ID" +msgstr "" + +#: order/templates/order/sales_order_detail.html:229 templates/js/build.js:523 +#: templates/js/build.js:785 +msgid "Allocated" +msgstr "" + +#: order/templates/order/sales_order_detail.html:231 +msgid "Fulfilled" +msgstr "" + +#: order/templates/order/sales_order_detail.html:279 +msgid "Allocate serial numbers" +msgstr "" + +#: order/templates/order/sales_order_detail.html:282 templates/js/build.js:585 +msgid "Allocate stock" +msgstr "" + +#: order/templates/order/sales_order_detail.html:285 +msgid "Purchase stock" +msgstr "" + +#: order/templates/order/sales_order_detail.html:289 templates/js/build.js:578 +#: templates/js/build.js:992 +msgid "Build stock" +msgstr "" + +#: order/templates/order/sales_order_detail.html:295 +msgid "Delete line item " +msgstr "" + +#: order/templates/order/sales_order_notes.html:14 +msgid "Sales Order Notes" +msgstr "" + +#: order/templates/order/sales_order_ship.html:10 +msgid "" +"This order has not been fully allocated. If the order is marked as shipped, " +"it can no longer be adjusted." +msgstr "" + +#: order/templates/order/sales_order_ship.html:12 +msgid "Ensure that the order allocation is correct before shipping the order." +msgstr "" + +#: order/templates/order/sales_order_ship.html:18 +msgid "Some line items in this order have been over-allocated" +msgstr "" + +#: order/templates/order/sales_order_ship.html:20 +msgid "Ensure that this is correct before shipping the order." +msgstr "" + +#: order/templates/order/sales_order_ship.html:27 +msgid "Shipping this order means that the order will no longer be editable." +msgstr "" + +#: order/templates/order/so_allocate_by_serial.html:9 +msgid "Allocate stock items by serial number" +msgstr "" + +#: order/templates/order/so_allocation_delete.html:7 +msgid "This action will unallocate the following stock from the Sales Order" +msgstr "" + +#: order/templates/order/so_attachments.html:12 +#: order/templates/order/so_navbar.html:26 +msgid "Sales Order Attachments" +msgstr "" + +#: order/templates/order/so_lineitem_delete.html:5 +msgid "Are you sure you wish to delete this line item?" +msgstr "" + +#: order/views.py:99 +msgid "Add Purchase Order Attachment" +msgstr "" + +#: order/views.py:149 +msgid "Add Sales Order Attachment" +msgstr "" + +#: order/views.py:341 +msgid "Create Sales Order" +msgstr "" + +#: order/views.py:376 +msgid "Edit Purchase Order" +msgstr "" + +#: order/views.py:396 +msgid "Edit Sales Order" +msgstr "" + +#: order/views.py:412 +msgid "Cancel Order" +msgstr "" + +#: order/views.py:421 order/views.py:447 +msgid "Confirm order cancellation" +msgstr "" + +#: order/views.py:424 order/views.py:450 +msgid "Order cannot be cancelled" +msgstr "" + +#: order/views.py:438 +msgid "Cancel sales order" +msgstr "" + +#: order/views.py:464 +msgid "Issue Order" +msgstr "" + +#: order/views.py:473 +msgid "Confirm order placement" +msgstr "" + +#: order/views.py:483 +msgid "Purchase order issued" +msgstr "" + +#: order/views.py:494 +msgid "Complete Order" +msgstr "" + +#: order/views.py:510 +msgid "Confirm order completion" +msgstr "" + +#: order/views.py:521 +msgid "Purchase order completed" +msgstr "" + +#: order/views.py:531 +msgid "Ship Order" +msgstr "" + +#: order/views.py:547 +msgid "Confirm order shipment" +msgstr "" + +#: order/views.py:553 +msgid "Could not ship order" +msgstr "" + +#: order/views.py:607 +msgid "Receive Parts" +msgstr "" + +#: order/views.py:677 +msgid "Items received" +msgstr "" + +#: order/views.py:691 +msgid "No destination set" +msgstr "" + +#: order/views.py:736 +msgid "Error converting quantity to number" +msgstr "" + +#: order/views.py:742 +msgid "Receive quantity less than zero" +msgstr "" + +#: order/views.py:748 +msgid "No lines specified" +msgstr "" + +#: order/views.py:1060 +#, python-brace-format +msgid "Ordered {n} parts" +msgstr "" + +#: order/views.py:1117 +msgid "Supplier part must be specified" +msgstr "" + +#: order/views.py:1123 +msgid "Supplier must match for Part and Order" +msgstr "" + +#: order/views.py:1242 order/views.py:1260 +msgid "Edit Line Item" +msgstr "" + +#: order/views.py:1276 order/views.py:1288 +msgid "Delete Line Item" +msgstr "" + +#: order/views.py:1281 order/views.py:1293 +msgid "Deleted line item" +msgstr "" + +#: order/views.py:1306 +msgid "Allocate Serial Numbers" +msgstr "" + +#: order/views.py:1351 +#, python-brace-format +msgid "Allocated {n} items" +msgstr "" + +#: order/views.py:1367 +msgid "Select line item" +msgstr "" + +#: order/views.py:1398 +msgid "No matching item for serial" +msgstr "" + +#: order/views.py:1408 +msgid "is not in stock" +msgstr "" + +#: order/views.py:1416 +msgid "already allocated to an order" +msgstr "" + +#: order/views.py:1470 +msgid "Allocate Stock to Order" +msgstr "" + +#: order/views.py:1544 +msgid "Edit Allocation Quantity" +msgstr "" + +#: order/views.py:1559 +msgid "Remove allocation" +msgstr "" + +#: part/bom.py:138 part/models.py:72 part/models.py:762 +#: part/templates/part/category.html:66 part/templates/part/detail.html:90 +msgid "Default Location" +msgstr "" + +#: part/bom.py:139 part/templates/part/part_base.html:117 +msgid "Available Stock" +msgstr "" + +#: part/bom.py:379 +#, python-brace-format +msgid "Unsupported file format: {f}" +msgstr "" + +#: part/bom.py:384 +msgid "Error reading BOM file (invalid data)" +msgstr "" + +#: part/bom.py:386 +msgid "Error reading BOM file (incorrect row size)" +msgstr "" + +#: part/forms.py:89 stock/forms.py:265 +msgid "File Format" +msgstr "" + +#: part/forms.py:89 stock/forms.py:265 +msgid "Select output file format" +msgstr "" + +#: part/forms.py:91 +msgid "Cascading" +msgstr "" + +#: part/forms.py:91 +msgid "Download cascading / multi-level BOM" +msgstr "" + +#: part/forms.py:93 +msgid "Levels" +msgstr "" + +#: part/forms.py:93 +msgid "Select maximum number of BOM levels to export (0 = all levels)" +msgstr "" + +#: part/forms.py:95 +msgid "Include Parameter Data" +msgstr "" + +#: part/forms.py:95 +msgid "Include part parameters data in exported BOM" +msgstr "" + +#: part/forms.py:97 +msgid "Include Stock Data" +msgstr "" + +#: part/forms.py:97 +msgid "Include part stock data in exported BOM" +msgstr "" + +#: part/forms.py:99 +msgid "Include Manufacturer Data" +msgstr "" + +#: part/forms.py:99 +msgid "Include part manufacturer data in exported BOM" +msgstr "" + +#: part/forms.py:101 +msgid "Include Supplier Data" +msgstr "" + +#: part/forms.py:101 +msgid "Include part supplier data in exported BOM" +msgstr "" + +#: part/forms.py:122 part/models.py:2077 +msgid "Parent Part" +msgstr "" + +#: part/forms.py:123 part/templates/part/bom_duplicate.html:7 +msgid "Select parent part to copy BOM from" +msgstr "" + +#: part/forms.py:129 +msgid "Clear existing BOM items" +msgstr "" + +#: part/forms.py:135 +msgid "Confirm BOM duplication" +msgstr "" + +#: part/forms.py:153 +msgid "validate" +msgstr "" + +#: part/forms.py:153 +msgid "Confirm that the BOM is correct" +msgstr "" + +#: part/forms.py:165 +msgid "BOM file" +msgstr "" + +#: part/forms.py:165 +msgid "Select BOM file to upload" +msgstr "" + +#: part/forms.py:184 +msgid "Related Part" +msgstr "" + +#: part/forms.py:203 +msgid "Select part category" +msgstr "" + +#: part/forms.py:220 +msgid "Duplicate all BOM data for this part" +msgstr "" + +#: part/forms.py:221 +msgid "Copy BOM" +msgstr "" + +#: part/forms.py:226 +msgid "Duplicate all parameter data for this part" +msgstr "" + +#: part/forms.py:227 +msgid "Copy Parameters" +msgstr "" + +#: part/forms.py:232 +msgid "Confirm part creation" +msgstr "" + +#: part/forms.py:237 +msgid "Include category parameter templates" +msgstr "" + +#: part/forms.py:242 +msgid "Include parent categories parameter templates" +msgstr "" + +#: part/forms.py:322 +msgid "Add parameter template to same level categories" +msgstr "" + +#: part/forms.py:326 +msgid "Add parameter template to all categories" +msgstr "" + +#: part/forms.py:344 part/models.py:2171 +msgid "Sub part" +msgstr "" + +#: part/forms.py:372 +msgid "Input quantity for price calculation" +msgstr "" + +#: part/models.py:73 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:76 +msgid "Default keywords" +msgstr "" + +#: part/models.py:76 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:82 part/models.py:2123 +#: part/templates/part/part_app_base.html:10 +msgid "Part Category" +msgstr "" + +#: part/models.py:83 part/templates/part/category.html:23 +#: part/templates/part/category.html:94 part/templates/part/category.html:141 +#: templates/InvenTree/search.html:127 templates/stats.html:63 +#: users/models.py:37 +msgid "Part Categories" +msgstr "" + +#: part/models.py:446 part/models.py:458 +#, python-brace-format +msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" +msgstr "" + +#: part/models.py:555 +msgid "Next available serial numbers are" +msgstr "" + +#: part/models.py:559 +msgid "Next available serial number is" +msgstr "" + +#: part/models.py:564 +msgid "Most recent serial number is" +msgstr "" + +#: part/models.py:643 +msgid "Duplicate IPN not allowed in part settings" +msgstr "" + +#: part/models.py:654 +msgid "Part must be unique for name, IPN and revision" +msgstr "" + +#: part/models.py:685 part/templates/part/detail.html:22 +msgid "Part name" +msgstr "" + +#: part/models.py:692 +msgid "Is Template" +msgstr "" + +#: part/models.py:693 +msgid "Is this part a template part?" +msgstr "" + +#: part/models.py:704 +msgid "Is this part a variant of another part?" +msgstr "" + +#: part/models.py:705 part/templates/part/detail.html:60 +msgid "Variant Of" +msgstr "" + +#: part/models.py:711 +msgid "Part description" +msgstr "" + +#: part/models.py:716 part/templates/part/category.html:73 +#: part/templates/part/detail.html:67 +msgid "Keywords" +msgstr "" + +#: part/models.py:717 +msgid "Part keywords to improve visibility in search results" +msgstr "" + +#: part/models.py:724 part/models.py:2122 part/templates/part/detail.html:73 +#: part/templates/part/set_category.html:15 templates/js/part.js:385 +msgid "Category" +msgstr "" + +#: part/models.py:725 +msgid "Part category" +msgstr "" + +#: part/models.py:730 part/templates/part/detail.html:28 +#: part/templates/part/part_base.html:94 templates/js/part.js:161 +msgid "IPN" +msgstr "" + +#: part/models.py:731 +msgid "Internal Part Number" +msgstr "" + +#: part/models.py:737 +msgid "Part revision or version number" +msgstr "" + +#: part/models.py:738 part/templates/part/detail.html:35 report/models.py:198 +#: templates/js/part.js:165 +msgid "Revision" +msgstr "" + +#: part/models.py:760 +msgid "Where is this item normally stored?" +msgstr "" + +#: part/models.py:807 part/templates/part/detail.html:97 +msgid "Default Supplier" +msgstr "" + +#: part/models.py:808 +msgid "Default supplier part" +msgstr "" + +#: part/models.py:815 +msgid "Default Expiry" +msgstr "" + +#: part/models.py:816 +msgid "Expiry time (in days) for stock items of this part" +msgstr "" + +#: part/models.py:821 part/templates/part/detail.html:113 +msgid "Minimum Stock" +msgstr "" + +#: part/models.py:822 +msgid "Minimum allowed stock level" +msgstr "" + +#: part/models.py:828 part/models.py:2051 part/templates/part/detail.html:106 +#: part/templates/part/params.html:29 +msgid "Units" +msgstr "" + +#: part/models.py:829 +msgid "Stock keeping units for this part" +msgstr "" + +#: part/models.py:835 +msgid "Can this part be built from other parts?" +msgstr "" + +#: part/models.py:841 +msgid "Can this part be used to build other parts?" +msgstr "" + +#: part/models.py:847 +msgid "Does this part have tracking for unique items?" +msgstr "" + +#: part/models.py:852 +msgid "Can this part be purchased from external suppliers?" +msgstr "" + +#: part/models.py:857 +msgid "Can this part be sold to customers?" +msgstr "" + +#: part/models.py:861 part/templates/part/detail.html:227 +#: templates/js/table_filters.js:20 templates/js/table_filters.js:60 +#: templates/js/table_filters.js:236 templates/js/table_filters.js:305 +msgid "Active" +msgstr "" + +#: part/models.py:862 +msgid "Is this part active?" +msgstr "" + +#: part/models.py:867 +msgid "Is this a virtual part, such as a software product or license?" +msgstr "" + +#: part/models.py:872 +msgid "Part notes - supports Markdown formatting" +msgstr "" + +#: part/models.py:875 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:875 +msgid "Stored BOM checksum" +msgstr "" + +#: part/models.py:878 +msgid "BOM checked by" +msgstr "" + +#: part/models.py:880 +msgid "BOM checked date" +msgstr "" + +#: part/models.py:884 +msgid "Creation User" +msgstr "" + +#: part/models.py:1949 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:1966 +msgid "Test with this name already exists for this part" +msgstr "" + +#: part/models.py:1986 templates/js/part.js:638 templates/js/stock.js:104 +msgid "Test Name" +msgstr "" + +#: part/models.py:1987 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:1992 +msgid "Test Description" +msgstr "" + +#: part/models.py:1993 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:1998 templates/js/part.js:647 +#: templates/js/table_filters.js:222 +msgid "Required" +msgstr "" + +#: part/models.py:1999 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:2004 templates/js/part.js:655 +msgid "Requires Value" +msgstr "" + +#: part/models.py:2005 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:2010 templates/js/part.js:662 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:2011 +msgid "Does this test require a file attachment when adding a test result?" +msgstr "" + +#: part/models.py:2044 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:2049 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:2051 +msgid "Parameter Units" +msgstr "" + +#: part/models.py:2079 part/models.py:2128 part/models.py:2129 +#: templates/InvenTree/settings/category.html:62 +msgid "Parameter Template" +msgstr "" + +#: part/models.py:2081 +msgid "Data" +msgstr "" + +#: part/models.py:2081 +msgid "Parameter Value" +msgstr "" + +#: part/models.py:2133 templates/InvenTree/settings/category.html:67 +msgid "Default Value" +msgstr "" + +#: part/models.py:2134 +msgid "Default Parameter Value" +msgstr "" + +#: part/models.py:2163 +msgid "Select parent part" +msgstr "" + +#: part/models.py:2172 +msgid "Select part to be used in BOM" +msgstr "" + +#: part/models.py:2178 +msgid "BOM quantity for this BOM item" +msgstr "" + +#: part/models.py:2180 templates/js/bom.js:216 templates/js/bom.js:269 +msgid "Optional" +msgstr "" + +#: part/models.py:2180 +msgid "This BOM item is optional" +msgstr "" + +#: part/models.py:2183 +msgid "Overage" +msgstr "" + +#: part/models.py:2184 +msgid "Estimated build wastage quantity (absolute or percentage)" +msgstr "" + +#: part/models.py:2187 +msgid "BOM item reference" +msgstr "" + +#: part/models.py:2190 +msgid "BOM item notes" +msgstr "" + +#: part/models.py:2192 +msgid "Checksum" +msgstr "" + +#: part/models.py:2192 +msgid "BOM line checksum" +msgstr "" + +#: part/models.py:2196 templates/js/bom.js:279 templates/js/bom.js:286 +#: templates/js/table_filters.js:50 +msgid "Inherited" +msgstr "" + +#: part/models.py:2197 +msgid "This BOM item is inherited by BOMs for variant parts" +msgstr "" + +#: part/models.py:2273 part/views.py:1592 part/views.py:1644 +#: stock/models.py:260 +msgid "Quantity must be integer value for trackable parts" +msgstr "" + +#: part/models.py:2282 part/models.py:2284 +msgid "Sub part must be specified" +msgstr "" + +#: part/models.py:2287 +msgid "BOM Item" +msgstr "" + +#: part/models.py:2404 +msgid "Part 1" +msgstr "" + +#: part/models.py:2408 +msgid "Part 2" +msgstr "" + +#: part/models.py:2408 +msgid "Select Related Part" +msgstr "" + +#: part/models.py:2440 +msgid "" +"Error creating relationship: check that the part is not related to itself " +"and that the relationship is unique" +msgstr "" + +#: part/templates/part/allocation.html:11 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/attachments.html:10 +msgid "Part Attachments" +msgstr "" + +#: part/templates/part/bom-delete.html:6 +msgid "Are you sure you want to delete this BOM item?" +msgstr "" + +#: part/templates/part/bom-delete.html:8 +msgid "Deleting this entry will remove the BOM row from the following part" +msgstr "" + +#: part/templates/part/bom.html:10 part/templates/part/navbar.html:48 +#: part/templates/part/navbar.html:51 +msgid "Bill of Materials" +msgstr "" + +#: part/templates/part/bom.html:19 +#, python-format +msgid "The BOM for %(part)s has changed, and must be validated.
    " +msgstr "" + +#: part/templates/part/bom.html:21 +#, python-format +msgid "" +"The BOM for %(part)s was last checked by %(checker)s on %(check_date)s" +msgstr "" + +#: part/templates/part/bom.html:25 +#, python-format +msgid "The BOM for %(part)s has not been validated." +msgstr "" + +#: part/templates/part/bom.html:32 +msgid "Remove selected BOM items" +msgstr "" + +#: part/templates/part/bom.html:35 +msgid "Import BOM data" +msgstr "" + +#: part/templates/part/bom.html:39 +msgid "Copy BOM from parent part" +msgstr "" + +#: part/templates/part/bom.html:43 +msgid "New BOM Item" +msgstr "" + +#: part/templates/part/bom.html:46 +msgid "Finish Editing" +msgstr "" + +#: part/templates/part/bom.html:51 +msgid "Edit BOM" +msgstr "" + +#: part/templates/part/bom.html:55 +msgid "Validate Bill of Materials" +msgstr "" + +#: part/templates/part/bom.html:61 part/views.py:1887 +msgid "Export Bill of Materials" +msgstr "" + +#: part/templates/part/bom.html:64 +msgid "Print BOM Report" +msgstr "" + +#: part/templates/part/bom.html:109 +msgid "Delete selected BOM items?" +msgstr "" + +#: part/templates/part/bom.html:110 +msgid "All selected BOM items will be deleted" +msgstr "" + +#: part/templates/part/bom.html:160 part/views.py:584 +#: templates/js/stock.js:1158 +msgid "Create New Part" +msgstr "" + +#: part/templates/part/bom_duplicate.html:13 +msgid "This part already has a Bill of Materials" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:11 +#: part/templates/part/bom_upload/select_parts.html:11 +#: part/templates/part/bom_upload/upload_file.html:11 +msgid "Upload Bill of Materials" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:16 +msgid "Step 2 - Select Fields" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:21 +msgid "Missing selections for the following required columns" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:32 +msgid "Submit Selections" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:41 +msgid "File Fields" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:47 +msgid "Remove column" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:58 +msgid "Match Fields" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:68 +msgid "Duplicate column selection" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:76 +#: part/templates/part/bom_upload/select_parts.html:58 +msgid "Remove row" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:16 +msgid "Step 3 - Select Parts" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:21 +msgid "Errors exist in the submitted data" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:27 +msgid "Submit BOM" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:39 +msgid "Row" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:40 +#: part/templates/part/bom_upload/select_parts.html:69 +msgid "Select Part" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:65 +#: part/templates/part/category.html:117 +msgid "Create new part" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:16 +msgid "Step 1 - Select BOM File" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:19 +msgid "Requirements for BOM upload" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:21 +msgid "" +"The BOM file must contain the required named columns as provided in the " +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:21 +msgid "BOM Upload Template" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:22 +msgid "Each part must already exist in the database" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:27 +msgid "Upload File" +msgstr "" + +#: part/templates/part/bom_validate.html:6 +#, python-format +msgid "" +"Confirm that the Bill of Materials (BOM) is valid for:
    %(part)s" +msgstr "" + +#: part/templates/part/bom_validate.html:9 +msgid "This will validate each line in the BOM." +msgstr "" + +#: part/templates/part/build.html:10 +msgid "Part Builds" +msgstr "" + +#: part/templates/part/build.html:18 +msgid "Start New Build" +msgstr "" + +#: part/templates/part/category.html:24 +msgid "All parts" +msgstr "" + +#: part/templates/part/category.html:29 part/views.py:2270 +msgid "Create new part category" +msgstr "" + +#: part/templates/part/category.html:35 +msgid "Edit part category" +msgstr "" + +#: part/templates/part/category.html:40 +msgid "Delete part category" +msgstr "" + +#: part/templates/part/category.html:50 part/templates/part/category.html:89 +msgid "Category Details" +msgstr "" + +#: part/templates/part/category.html:55 +msgid "Category Path" +msgstr "" + +#: part/templates/part/category.html:60 +msgid "Category Description" +msgstr "" + +#: part/templates/part/category.html:79 +#: part/templates/part/category_navbar.html:11 +#: part/templates/part/category_navbar.html:18 +#: part/templates/part/subcategory.html:16 +msgid "Subcategories" +msgstr "" + +#: part/templates/part/category.html:84 +msgid "Parts (Including subcategories)" +msgstr "" + +#: part/templates/part/category.html:113 +msgid "Export Part Data" +msgstr "" + +#: part/templates/part/category.html:125 +msgid "Set category" +msgstr "" + +#: part/templates/part/category.html:125 +msgid "Set Category" +msgstr "" + +#: part/templates/part/category.html:128 +msgid "Export Data" +msgstr "" + +#: part/templates/part/category.html:186 +#: stock/templates/stock/location.html:192 templates/js/stock.js:709 +msgid "Create new location" +msgstr "" + +#: part/templates/part/category.html:191 part/templates/part/category.html:221 +msgid "New Category" +msgstr "" + +#: part/templates/part/category.html:192 +msgid "Create new category" +msgstr "" + +#: part/templates/part/category.html:222 +msgid "Create new Part Category" +msgstr "" + +#: part/templates/part/category.html:228 stock/views.py:1359 +msgid "Create new Stock Location" +msgstr "" + +#: part/templates/part/category_delete.html:5 +msgid "Are you sure you want to delete category" +msgstr "" + +#: part/templates/part/category_delete.html:8 +#, python-format +msgid "This category contains %(count)s child categories" +msgstr "" + +#: part/templates/part/category_delete.html:9 +msgid "" +"If this category is deleted, these child categories will be moved to the" +msgstr "" + +#: part/templates/part/category_delete.html:11 +msgid "category" +msgstr "" + +#: part/templates/part/category_delete.html:13 +msgid "top level Parts category" +msgstr "" + +#: part/templates/part/category_delete.html:25 +#, python-format +msgid "This category contains %(count)s parts" +msgstr "" + +#: part/templates/part/category_delete.html:27 +#, python-format +msgid "" +"If this category is deleted, these parts will be moved to the parent " +"category %(path)s" +msgstr "" + +#: part/templates/part/category_delete.html:29 +msgid "" +"If this category is deleted, these parts will be moved to the top-level " +"category Teile" +msgstr "" + +#: part/templates/part/category_navbar.html:34 +#: part/templates/part/category_navbar.html:37 +#: part/templates/part/navbar.html:22 +msgid "Parameters" +msgstr "" + +#: part/templates/part/category_parametric.html:10 +#: part/templates/part/navbar.html:19 part/templates/part/params.html:10 +msgid "Part Parameters" +msgstr "" + +#: part/templates/part/copy_part.html:9 part/views.py:460 +msgid "Duplicate Part" +msgstr "" + +#: part/templates/part/copy_part.html:10 +#, python-format +msgid "Make a copy of part '%(full_name)s'." +msgstr "" + +#: part/templates/part/copy_part.html:14 +#: part/templates/part/create_part.html:11 +msgid "Possible Matching Parts" +msgstr "" + +#: part/templates/part/copy_part.html:15 +#: part/templates/part/create_part.html:12 +msgid "The new part may be a duplicate of these existing parts" +msgstr "" + +#: part/templates/part/create_part.html:17 +#, python-format +msgid "%(full_name)s - %(desc)s (%(match_per)s%% match)" +msgstr "" + +#: part/templates/part/detail.html:11 part/templates/part/navbar.html:11 +msgid "Part Details" +msgstr "" + +#: part/templates/part/detail.html:42 +msgid "Latest Serial Number" +msgstr "" + +#: part/templates/part/detail.html:47 +msgid "No serial numbers recorded" +msgstr "" + +#: part/templates/part/detail.html:120 +msgid "Stock Expiry Time" +msgstr "" + +#: part/templates/part/detail.html:139 +msgid "Responsible User" +msgstr "" + +#: part/templates/part/detail.html:153 +msgid "Part is virtual (not a physical part)" +msgstr "" + +#: part/templates/part/detail.html:155 +msgid "Part is not a virtual part" +msgstr "" + +#: part/templates/part/detail.html:163 +msgid "Part is a template part (variants can be made from this part)" +msgstr "" + +#: part/templates/part/detail.html:165 +msgid "Part is not a template part" +msgstr "" + +#: part/templates/part/detail.html:173 +msgid "Part can be assembled from other parts" +msgstr "" + +#: part/templates/part/detail.html:175 +msgid "Part cannot be assembled from other parts" +msgstr "" + +#: part/templates/part/detail.html:183 +msgid "Part can be used in assemblies" +msgstr "" + +#: part/templates/part/detail.html:185 +msgid "Part cannot be used in assemblies" +msgstr "" + +#: part/templates/part/detail.html:193 +msgid "Part stock is tracked by serial number" +msgstr "" + +#: part/templates/part/detail.html:195 +msgid "Part stock is not tracked by serial number" +msgstr "" + +#: part/templates/part/detail.html:203 part/templates/part/detail.html:205 +msgid "Part can be purchased from external suppliers" +msgstr "" + +#: part/templates/part/detail.html:213 +msgid "Part can be sold to customers" +msgstr "" + +#: part/templates/part/detail.html:215 +msgid "Part cannot be sold to customers" +msgstr "" + +#: part/templates/part/detail.html:230 +msgid "Part is active" +msgstr "" + +#: part/templates/part/detail.html:232 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/manufacturer.html:11 +msgid "Part Manufacturers" +msgstr "" + +#: part/templates/part/manufacturer.html:24 +msgid "Delete manufacturer parts" +msgstr "" + +#: part/templates/part/manufacturer.html:53 +#: part/templates/part/supplier.html:57 +msgid "Create new manufacturer" +msgstr "" + +#: part/templates/part/navbar.html:26 part/templates/part/variants.html:11 +msgid "Part Variants" +msgstr "" + +#: part/templates/part/navbar.html:29 +msgid "Variants" +msgstr "" + +#: part/templates/part/navbar.html:40 +msgid "Allocated Stock" +msgstr "" + +#: part/templates/part/navbar.html:43 +msgid "Allocations" +msgstr "" + +#: part/templates/part/navbar.html:64 part/templates/part/navbar.html:67 +msgid "Used In" +msgstr "" + +#: part/templates/part/navbar.html:92 +msgid "Sales Price Information" +msgstr "" + +#: part/templates/part/navbar.html:95 +msgid "Sale Price" +msgstr "" + +#: part/templates/part/navbar.html:106 part/templates/part/part_tests.html:10 +msgid "Part Test Templates" +msgstr "" + +#: part/templates/part/navbar.html:109 stock/templates/stock/item_base.html:398 +msgid "Tests" +msgstr "" + +#: part/templates/part/navbar.html:113 part/templates/part/navbar.html:116 +#: part/templates/part/related.html:10 +msgid "Related Parts" +msgstr "" + +#: part/templates/part/navbar.html:125 part/templates/part/notes.html:12 +msgid "Part Notes" +msgstr "" + +#: part/templates/part/params.html:17 +msgid "Add new parameter" +msgstr "" + +#: part/templates/part/params.html:18 +#: templates/InvenTree/settings/category.html:29 +#: templates/InvenTree/settings/part.html:44 +msgid "New Parameter" +msgstr "" + +#: part/templates/part/params.html:28 +#: report/templates/report/inventree_test_report_base.html:90 +#: stock/models.py:1655 templates/InvenTree/settings/header.html:8 +#: templates/js/stock.js:124 +msgid "Value" +msgstr "" + +#: part/templates/part/params.html:41 templates/InvenTree/settings/user.html:19 +msgid "Edit" +msgstr "" + +#: part/templates/part/params.html:68 +msgid "New Template" +msgstr "" + +#: part/templates/part/params.html:69 +msgid "Create New Parameter Template" +msgstr "" + +#: part/templates/part/part_app_base.html:12 +msgid "Part List" +msgstr "" + +#: part/templates/part/part_base.html:18 +#, python-format +msgid "This part is a variant of %(link)s" +msgstr "" + +#: part/templates/part/part_base.html:33 templates/js/company.js:156 +#: templates/js/company.js:254 templates/js/part.js:76 templates/js/part.js:153 +msgid "Inactive" +msgstr "" + +#: part/templates/part/part_base.html:40 +msgid "Star this part" +msgstr "" + +#: part/templates/part/part_base.html:47 +#: stock/templates/stock/item_base.html:131 +#: stock/templates/stock/location.html:51 +msgid "Barcode actions" +msgstr "" + +#: part/templates/part/part_base.html:49 +#: stock/templates/stock/item_base.html:133 +#: stock/templates/stock/location.html:53 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: part/templates/part/part_base.html:50 +#: stock/templates/stock/item_base.html:149 +#: stock/templates/stock/location.html:54 +msgid "Print Label" +msgstr "" + +#: part/templates/part/part_base.html:55 +msgid "Show pricing information" +msgstr "" + +#: part/templates/part/part_base.html:59 +msgid "Count part stock" +msgstr "" + +#: part/templates/part/part_base.html:74 +msgid "Part actions" +msgstr "" + +#: part/templates/part/part_base.html:77 +msgid "Duplicate part" +msgstr "" + +#: part/templates/part/part_base.html:80 +msgid "Edit part" +msgstr "" + +#: part/templates/part/part_base.html:83 +msgid "Delete part" +msgstr "" + +#: part/templates/part/part_base.html:123 templates/js/table_filters.js:156 +msgid "In Stock" +msgstr "" + +#: part/templates/part/part_base.html:136 templates/InvenTree/index.html:131 +msgid "Required for Build Orders" +msgstr "" + +#: part/templates/part/part_base.html:143 +msgid "Required for Sales Orders" +msgstr "" + +#: part/templates/part/part_base.html:150 +msgid "Allocated to Orders" +msgstr "" + +#: part/templates/part/part_base.html:165 templates/js/bom.js:300 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:171 templates/js/part.js:418 +msgid "Building" +msgstr "" + +#: part/templates/part/part_base.html:250 +msgid "Calculate" +msgstr "" + +#: part/templates/part/part_pricing.html:8 +#, python-format +msgid "Pricing information for:
    %(part)s." +msgstr "" + +#: part/templates/part/part_pricing.html:23 +msgid "Supplier Pricing" +msgstr "" + +#: part/templates/part/part_pricing.html:27 +#: part/templates/part/part_pricing.html:53 +msgid "Unit Cost" +msgstr "" + +#: part/templates/part/part_pricing.html:33 +#: part/templates/part/part_pricing.html:59 +msgid "Total Cost" +msgstr "" + +#: part/templates/part/part_pricing.html:41 +msgid "No supplier pricing available" +msgstr "" + +#: part/templates/part/part_pricing.html:49 +msgid "BOM Pricing" +msgstr "" + +#: part/templates/part/part_pricing.html:67 +msgid "Note: BOM pricing is incomplete for this part" +msgstr "" + +#: part/templates/part/part_pricing.html:74 +msgid "No BOM pricing available" +msgstr "" + +#: part/templates/part/part_pricing.html:84 +msgid "No pricing information is available for this part." +msgstr "" + +#: part/templates/part/part_tests.html:17 +msgid "Add Test Template" +msgstr "" + +#: part/templates/part/part_thumb.html:20 +msgid "Select from existing images" +msgstr "" + +#: part/templates/part/partial_delete.html:7 +#, python-format +msgid "Are you sure you want to delete part '%(full_name)s'?" +msgstr "" + +#: part/templates/part/partial_delete.html:12 +#, python-format +msgid "" +"This part is used in BOMs for %(count)s other parts. If you delete this " +"part, the BOMs for the following parts will be updated" +msgstr "" + +#: part/templates/part/partial_delete.html:22 +#, python-format +msgid "" +"There are %(count)s stock entries defined for this part. If you delete this " +"part, the following stock entries will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:33 +#, python-format +msgid "" +"There are %(count)s manufacturers defined for this part. If you delete this " +"part, the following manufacturer parts will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:44 +#, python-format +msgid "" +"There are %(count)s suppliers defined for this part. If you delete this " +"part, the following supplier parts will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:55 +#, python-format +msgid "" +"There are %(count)s unique parts tracked for '%(full_name)s'. Deleting this " +"part will permanently remove this tracking information." +msgstr "" + +#: part/templates/part/related.html:18 +msgid "Add Related" +msgstr "" + +#: part/templates/part/sale_prices.html:10 +msgid "Sell Price Information" +msgstr "" + +#: part/templates/part/sales_orders.html:18 +msgid "New sales order" +msgstr "" + +#: part/templates/part/sales_orders.html:18 +msgid "New Order" +msgstr "" + +#: part/templates/part/set_category.html:9 +msgid "Set category for the following parts" +msgstr "" + +#: part/templates/part/stock.html:10 +msgid "Part Stock" +msgstr "" + +#: part/templates/part/stock.html:16 +#, python-format +msgid "Showing stock for all variants of %(full_name)s" +msgstr "" + +#: part/templates/part/stock_count.html:7 templates/js/bom.js:239 +#: templates/js/part.js:422 +msgid "No Stock" +msgstr "" + +#: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:130 +msgid "Low Stock" +msgstr "" + +#: part/templates/part/supplier.html:10 +msgid "Part Suppliers" +msgstr "" + +#: part/templates/part/track.html:10 +msgid "Part Tracking" +msgstr "" + +#: part/templates/part/used_in.html:9 +msgid "Assemblies" +msgstr "" + +#: part/templates/part/variant_part.html:9 +msgid "Create new part variant" +msgstr "" + +#: part/templates/part/variant_part.html:10 +#, python-format +msgid "Create a new variant of template '%(full_name)s'." +msgstr "" + +#: part/templates/part/variants.html:19 +msgid "Create new variant" +msgstr "" + +#: part/templates/part/variants.html:20 +msgid "New Variant" +msgstr "" + +#: part/views.py:89 +msgid "Add Related Part" +msgstr "" + +#: part/views.py:144 +msgid "Delete Related Part" +msgstr "" + +#: part/views.py:158 +msgid "Add part attachment" +msgstr "" + +#: part/views.py:211 templates/attachment_table.html:32 +msgid "Edit attachment" +msgstr "" + +#: part/views.py:215 +msgid "Part attachment updated" +msgstr "" + +#: part/views.py:230 +msgid "Delete Part Attachment" +msgstr "" + +#: part/views.py:238 +msgid "Deleted part attachment" +msgstr "" + +#: part/views.py:247 +msgid "Create Test Template" +msgstr "" + +#: part/views.py:274 +msgid "Edit Test Template" +msgstr "" + +#: part/views.py:288 +msgid "Delete Test Template" +msgstr "" + +#: part/views.py:295 +msgid "Set Part Category" +msgstr "" + +#: part/views.py:345 +#, python-brace-format +msgid "Set category for {n} parts" +msgstr "" + +#: part/views.py:380 +msgid "Create Variant" +msgstr "" + +#: part/views.py:465 +msgid "Copied part" +msgstr "" + +#: part/views.py:519 part/views.py:657 +msgid "Possible matches exist - confirm creation of new part" +msgstr "" + +#: part/views.py:589 +msgid "Created new part" +msgstr "" + +#: part/views.py:825 +msgid "Part QR Code" +msgstr "" + +#: part/views.py:927 +msgid "Upload Part Image" +msgstr "" + +#: part/views.py:933 part/views.py:968 +msgid "Updated part image" +msgstr "" + +#: part/views.py:942 +msgid "Select Part Image" +msgstr "" + +#: part/views.py:971 +msgid "Part image not found" +msgstr "" + +#: part/views.py:982 +msgid "Edit Part Properties" +msgstr "" + +#: part/views.py:1017 +msgid "Duplicate BOM" +msgstr "" + +#: part/views.py:1047 +msgid "Confirm duplication of BOM from parent" +msgstr "" + +#: part/views.py:1068 +msgid "Validate BOM" +msgstr "" + +#: part/views.py:1089 +msgid "Confirm that the BOM is valid" +msgstr "" + +#: part/views.py:1100 +msgid "Validated Bill of Materials" +msgstr "" + +#: part/views.py:1234 +msgid "No BOM file provided" +msgstr "" + +#: part/views.py:1595 +msgid "Enter a valid quantity" +msgstr "" + +#: part/views.py:1620 part/views.py:1623 +msgid "Select valid part" +msgstr "" + +#: part/views.py:1629 +msgid "Duplicate part selected" +msgstr "" + +#: part/views.py:1667 +msgid "Select a part" +msgstr "" + +#: part/views.py:1673 +msgid "Selected part creates a circular BOM" +msgstr "" + +#: part/views.py:1677 +msgid "Specify quantity" +msgstr "" + +#: part/views.py:1939 +msgid "Confirm Part Deletion" +msgstr "" + +#: part/views.py:1946 +msgid "Part was deleted" +msgstr "" + +#: part/views.py:1955 +msgid "Part Pricing" +msgstr "" + +#: part/views.py:2069 +msgid "Create Part Parameter Template" +msgstr "" + +#: part/views.py:2079 +msgid "Edit Part Parameter Template" +msgstr "" + +#: part/views.py:2086 +msgid "Delete Part Parameter Template" +msgstr "" + +#: part/views.py:2094 +msgid "Create Part Parameter" +msgstr "" + +#: part/views.py:2144 +msgid "Edit Part Parameter" +msgstr "" + +#: part/views.py:2158 +msgid "Delete Part Parameter" +msgstr "" + +#: part/views.py:2218 +msgid "Edit Part Category" +msgstr "" + +#: part/views.py:2256 +msgid "Delete Part Category" +msgstr "" + +#: part/views.py:2262 +msgid "Part category was deleted" +msgstr "" + +#: part/views.py:2314 +msgid "Create Category Parameter Template" +msgstr "" + +#: part/views.py:2415 +msgid "Edit Category Parameter Template" +msgstr "" + +#: part/views.py:2471 +msgid "Delete Category Parameter Template" +msgstr "" + +#: part/views.py:2490 +msgid "Create BOM Item" +msgstr "" + +#: part/views.py:2560 +msgid "Edit BOM item" +msgstr "" + +#: part/views.py:2616 +msgid "Confim BOM item deletion" +msgstr "" + +#: report/models.py:180 +msgid "Template name" +msgstr "" + +#: report/models.py:186 +msgid "Report template file" +msgstr "" + +#: report/models.py:193 +msgid "Report template description" +msgstr "" + +#: report/models.py:199 +msgid "Report revision number (auto-increments)" +msgstr "" + +#: report/models.py:275 +msgid "Report template is enabled" +msgstr "" + +#: report/models.py:295 +msgid "StockItem query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:303 +msgid "Include Installed Tests" +msgstr "" + +#: report/models.py:304 +msgid "Include test results for stock items installed inside assembled item" +msgstr "" + +#: report/models.py:347 +msgid "Build Filters" +msgstr "" + +#: report/models.py:348 +msgid "Build query filters (comma-separated list of key=value pairs" +msgstr "" + +#: report/models.py:385 +msgid "Part Filters" +msgstr "" + +#: report/models.py:386 +msgid "Part query filters (comma-separated list of key=value pairs" +msgstr "" + +#: report/models.py:416 +msgid "Purchase order query filters" +msgstr "" + +#: report/models.py:450 +msgid "Sales order query filters" +msgstr "" + +#: report/models.py:500 +msgid "Snippet" +msgstr "" + +#: report/models.py:501 +msgid "Report snippet file" +msgstr "" + +#: report/models.py:505 +msgid "Snippet file description" +msgstr "" + +#: report/models.py:540 +msgid "Asset" +msgstr "" + +#: report/models.py:541 +msgid "Report asset file" +msgstr "" + +#: report/models.py:544 +msgid "Asset file description" +msgstr "" + +#: report/templates/report/inventree_build_order_base.html:147 +msgid "Required For" +msgstr "" + +#: report/templates/report/inventree_po_report.html:85 +#: report/templates/report/inventree_so_report.html:85 +msgid "Line Items" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:21 +msgid "Stock Item Test Report" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:83 +msgid "Test Results" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:1643 +msgid "Test" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:89 +#: stock/models.py:1649 +msgid "Result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:92 +#: templates/js/order.js:195 templates/js/stock.js:986 +msgid "Date" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:103 +msgid "Pass" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:105 +msgid "Fail" +msgstr "" + +#: stock/api.py:199 +#, python-brace-format +msgid "Updated stock for {n} items" +msgstr "" + +#: stock/api.py:268 +#, python-brace-format +msgid "Moved {n} parts to {loc}" +msgstr "" + +#: stock/forms.py:114 stock/forms.py:406 stock/models.py:475 +#: stock/templates/stock/item_base.html:365 templates/js/stock.js:656 +msgid "Expiry Date" +msgstr "" + +#: stock/forms.py:115 stock/forms.py:407 +msgid "Expiration date for this stock item" +msgstr "" + +#: stock/forms.py:118 +msgid "Enter unique serial numbers (or leave blank)" +msgstr "" + +#: stock/forms.py:169 +msgid "" +"Destination for serialized stock (by default, will remain in current " +"location)" +msgstr "" + +#: stock/forms.py:171 +msgid "Serial numbers" +msgstr "" + +#: stock/forms.py:171 +msgid "Unique serial numbers (must match quantity)" +msgstr "" + +#: stock/forms.py:173 stock/forms.py:349 +msgid "Add transaction note (optional)" +msgstr "" + +#: stock/forms.py:203 stock/forms.py:259 +msgid "Select test report template" +msgstr "" + +#: stock/forms.py:267 templates/js/table_filters.js:70 +#: templates/js/table_filters.js:133 +msgid "Include sublocations" +msgstr "" + +#: stock/forms.py:267 +msgid "Include stock items in sub locations" +msgstr "" + +#: stock/forms.py:302 +msgid "Stock item to install" +msgstr "" + +#: stock/forms.py:309 +msgid "Stock quantity to assign" +msgstr "" + +#: stock/forms.py:337 +msgid "Must not exceed available quantity" +msgstr "" + +#: stock/forms.py:347 +msgid "Destination location for uninstalled items" +msgstr "" + +#: stock/forms.py:351 +msgid "Confirm uninstall" +msgstr "" + +#: stock/forms.py:351 +msgid "Confirm removal of installed stock items" +msgstr "" + +#: stock/forms.py:375 +msgid "Destination stock location" +msgstr "" + +#: stock/forms.py:377 +msgid "Add note (required)" +msgstr "" + +#: stock/forms.py:381 stock/views.py:852 stock/views.py:1051 +msgid "Confirm stock adjustment" +msgstr "" + +#: stock/forms.py:381 +msgid "Confirm movement of stock items" +msgstr "" + +#: stock/forms.py:383 +msgid "Set Default Location" +msgstr "" + +#: stock/forms.py:383 +msgid "Set the destination as the default location for selected parts" +msgstr "" + +#: stock/models.py:54 stock/models.py:513 +msgid "Owner" +msgstr "" + +#: stock/models.py:55 stock/models.py:514 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:205 +msgid "Created stock item" +msgstr "" + +#: stock/models.py:241 +msgid "StockItem with this serial number already exists" +msgstr "" + +#: stock/models.py:277 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:287 stock/models.py:296 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:288 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:310 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:316 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:323 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:365 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:374 +msgid "Base part" +msgstr "" + +#: stock/models.py:383 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:388 stock/templates/stock/stock_app_base.html:8 +msgid "Stock Location" +msgstr "" + +#: stock/models.py:391 +msgid "Where is this stock item located?" +msgstr "" + +#: stock/models.py:398 +msgid "Packaging this stock item is stored in" +msgstr "" + +#: stock/models.py:403 stock/templates/stock/item_base.html:259 +msgid "Installed In" +msgstr "" + +#: stock/models.py:406 +msgid "Is this item installed in another item?" +msgstr "" + +#: stock/models.py:422 +msgid "Serial number for this item" +msgstr "" + +#: stock/models.py:434 +msgid "Batch code for this stock item" +msgstr "" + +#: stock/models.py:438 +msgid "Stock Quantity" +msgstr "" + +#: stock/models.py:447 +msgid "Source Build" +msgstr "" + +#: stock/models.py:449 +msgid "Build for this stock item" +msgstr "" + +#: stock/models.py:460 +msgid "Source Purchase Order" +msgstr "" + +#: stock/models.py:463 +msgid "Purchase order for this stock item" +msgstr "" + +#: stock/models.py:469 +msgid "Destination Sales Order" +msgstr "" + +#: stock/models.py:476 +msgid "" +"Expiry date for stock item. Stock will be considered expired after this date" +msgstr "" + +#: stock/models.py:489 +msgid "Delete on deplete" +msgstr "" + +#: stock/models.py:489 +msgid "Delete this Stock Item when stock is depleted" +msgstr "" + +#: stock/models.py:499 stock/templates/stock/item_notes.html:13 +#: stock/templates/stock/navbar.html:54 +msgid "Stock Item Notes" +msgstr "" + +#: stock/models.py:509 +msgid "Single unit purchase price at time of purchase" +msgstr "" + +#: stock/models.py:614 +msgid "Assigned to Customer" +msgstr "" + +#: stock/models.py:616 +msgid "Manually assigned to customer" +msgstr "" + +#: stock/models.py:629 +msgid "Returned from customer" +msgstr "" + +#: stock/models.py:631 +msgid "Returned to location" +msgstr "" + +#: stock/models.py:792 +msgid "Installed into stock item" +msgstr "" + +#: stock/models.py:800 +msgid "Installed stock item" +msgstr "" + +#: stock/models.py:824 +msgid "Uninstalled stock item" +msgstr "" + +#: stock/models.py:843 +msgid "Uninstalled into location" +msgstr "" + +#: stock/models.py:944 +msgid "Part is not set as trackable" +msgstr "" + +#: stock/models.py:950 +msgid "Quantity must be integer" +msgstr "" + +#: stock/models.py:956 +#, python-brace-format +msgid "Quantity must not exceed available stock quantity ({n})" +msgstr "" + +#: stock/models.py:959 +msgid "Serial numbers must be a list of integers" +msgstr "" + +#: stock/models.py:962 +msgid "Quantity does not match serial numbers" +msgstr "" + +#: stock/models.py:994 +msgid "Add serial number" +msgstr "" + +#: stock/models.py:997 +#, python-brace-format +msgid "Serialized {n} items" +msgstr "" + +#: stock/models.py:1075 +msgid "Split from existing stock" +msgstr "" + +#: stock/models.py:1113 +msgid "StockItem cannot be moved as it is not in stock" +msgstr "" + +#: stock/models.py:1556 +msgid "Title" +msgstr "" + +#: stock/models.py:1556 +msgid "Tracking entry title" +msgstr "" + +#: stock/models.py:1558 +msgid "Entry notes" +msgstr "" + +#: stock/models.py:1560 +msgid "Link to external page for further information" +msgstr "" + +#: stock/models.py:1620 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:1626 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:1644 +msgid "Test name" +msgstr "" + +#: stock/models.py:1650 templates/js/table_filters.js:212 +msgid "Test result" +msgstr "" + +#: stock/models.py:1656 +msgid "Test output value" +msgstr "" + +#: stock/models.py:1663 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:1669 +msgid "Test notes" +msgstr "" + +#: stock/templates/stock/item.html:12 +msgid "Stock Tracking Information" +msgstr "" + +#: stock/templates/stock/item.html:30 +msgid "New Entry" +msgstr "" + +#: stock/templates/stock/item_attachments.html:11 +msgid "Stock Item Attachments" +msgstr "" + +#: stock/templates/stock/item_base.html:24 +msgid "" +"You are not in the list of owners of this item. This stock item cannot be " +"edited." +msgstr "" + +#: stock/templates/stock/item_base.html:31 +msgid "This stock item is in production and cannot be edited." +msgstr "" + +#: stock/templates/stock/item_base.html:32 +msgid "Edit the stock item from the build view." +msgstr "" + +#: stock/templates/stock/item_base.html:45 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:53 +#, python-format +msgid "" +"This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgstr "" + +#: stock/templates/stock/item_base.html:61 +#, python-format +msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgstr "" + +#: stock/templates/stock/item_base.html:67 +msgid "" +"This stock item is serialized - it has a unique serial number and the " +"quantity cannot be adjusted." +msgstr "" + +#: stock/templates/stock/item_base.html:71 +msgid "This stock item cannot be deleted as it has child items" +msgstr "" + +#: stock/templates/stock/item_base.html:75 +msgid "" +"This stock item will be automatically deleted when all stock is depleted." +msgstr "" + +#: stock/templates/stock/item_base.html:95 +#: stock/templates/stock/item_base.html:369 templates/js/table_filters.js:145 +msgid "Expired" +msgstr "" + +#: stock/templates/stock/item_base.html:99 +#: stock/templates/stock/item_base.html:371 templates/js/table_filters.js:150 +msgid "Stale" +msgstr "" + +#: stock/templates/stock/item_base.html:136 templates/js/barcode.js:309 +#: templates/js/barcode.js:314 +msgid "Unlink Barcode" +msgstr "" + +#: stock/templates/stock/item_base.html:138 +msgid "Link Barcode" +msgstr "" + +#: stock/templates/stock/item_base.html:140 templates/stock_table.html:31 +msgid "Scan to Location" +msgstr "" + +#: stock/templates/stock/item_base.html:147 +msgid "Printing actions" +msgstr "" + +#: stock/templates/stock/item_base.html:151 +#: stock/templates/stock/item_tests.html:27 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item_base.html:160 +msgid "Stock adjustment actions" +msgstr "" + +#: stock/templates/stock/item_base.html:164 +#: stock/templates/stock/location.html:65 templates/stock_table.html:56 +msgid "Count stock" +msgstr "" + +#: stock/templates/stock/item_base.html:167 templates/stock_table.html:54 +msgid "Add stock" +msgstr "" + +#: stock/templates/stock/item_base.html:170 templates/stock_table.html:55 +msgid "Remove stock" +msgstr "" + +#: stock/templates/stock/item_base.html:173 +msgid "Serialize stock" +msgstr "" + +#: stock/templates/stock/item_base.html:177 +msgid "Transfer stock" +msgstr "" + +#: stock/templates/stock/item_base.html:180 +msgid "Assign to customer" +msgstr "" + +#: stock/templates/stock/item_base.html:183 +msgid "Return to stock" +msgstr "" + +#: stock/templates/stock/item_base.html:187 templates/js/stock.js:1299 +msgid "Uninstall stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:187 +msgid "Uninstall" +msgstr "" + +#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/location.html:62 +msgid "Stock actions" +msgstr "" + +#: stock/templates/stock/item_base.html:199 +msgid "Convert to variant" +msgstr "" + +#: stock/templates/stock/item_base.html:202 +msgid "Duplicate stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:204 +msgid "Edit stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:207 +msgid "Delete stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:219 +msgid "Stock Item Details" +msgstr "" + +#: stock/templates/stock/item_base.html:278 templates/js/build.js:442 +msgid "No location set" +msgstr "" + +#: stock/templates/stock/item_base.html:285 +msgid "Barcode Identifier" +msgstr "" + +#: stock/templates/stock/item_base.html:327 +msgid "Parent Item" +msgstr "" + +#: stock/templates/stock/item_base.html:369 +#, python-format +msgid "This StockItem expired on %(item.expiry_date)s" +msgstr "" + +#: stock/templates/stock/item_base.html:371 +#, python-format +msgid "This StockItem expires on %(item.expiry_date)s" +msgstr "" + +#: stock/templates/stock/item_base.html:378 templates/js/stock.js:662 +msgid "Last Updated" +msgstr "" + +#: stock/templates/stock/item_base.html:383 +msgid "Last Stocktake" +msgstr "" + +#: stock/templates/stock/item_base.html:387 +msgid "No stocktake performed" +msgstr "" + +#: stock/templates/stock/item_childs.html:12 +msgid "Child Stock Items" +msgstr "" + +#: stock/templates/stock/item_childs.html:20 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item_delete.html:9 +msgid "Are you sure you want to delete this stock item?" +msgstr "" + +#: stock/templates/stock/item_delete.html:12 +#, python-format +msgid "" +"This will remove %(qty)s units of %(full_name)s from stock." +msgstr "" + +#: stock/templates/stock/item_install.html:7 +msgid "Install another StockItem into this item." +msgstr "" + +#: stock/templates/stock/item_install.html:10 +msgid "Stock items can only be installed if they meet the following criteria" +msgstr "" + +#: stock/templates/stock/item_install.html:13 +msgid "The StockItem links to a Part which is in the BOM for this StockItem" +msgstr "" + +#: stock/templates/stock/item_install.html:14 +msgid "The StockItem is currently in stock" +msgstr "" + +#: stock/templates/stock/item_installed.html:11 +#: stock/templates/stock/navbar.html:27 +msgid "Installed Stock Items" +msgstr "" + +#: stock/templates/stock/item_serialize.html:5 +msgid "Create serialized items from this stock item." +msgstr "" + +#: stock/templates/stock/item_serialize.html:7 +msgid "Select quantity to serialize, and unique serial numbers." +msgstr "" + +#: stock/templates/stock/item_tests.html:11 +#: stock/templates/stock/navbar.html:19 stock/templates/stock/navbar.html:22 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item_tests.html:20 +msgid "Delete Test Data" +msgstr "" + +#: stock/templates/stock/item_tests.html:24 +msgid "Add Test Data" +msgstr "" + +#: stock/templates/stock/location.html:20 +msgid "" +"You are not in the list of owners of this location. This stock location " +"cannot be edited." +msgstr "" + +#: stock/templates/stock/location.html:37 +msgid "All stock items" +msgstr "" + +#: stock/templates/stock/location.html:55 +msgid "Check-in Items" +msgstr "" + +#: stock/templates/stock/location.html:71 +msgid "Location actions" +msgstr "" + +#: stock/templates/stock/location.html:73 +msgid "Edit location" +msgstr "" + +#: stock/templates/stock/location.html:75 +msgid "Delete location" +msgstr "" + +#: stock/templates/stock/location.html:87 +msgid "Location Details" +msgstr "" + +#: stock/templates/stock/location.html:92 +msgid "Location Path" +msgstr "" + +#: stock/templates/stock/location.html:97 +msgid "Location Description" +msgstr "" + +#: stock/templates/stock/location.html:102 +#: stock/templates/stock/location_navbar.html:11 +#: stock/templates/stock/location_navbar.html:18 +#: stock/templates/stock/sublocation.html:16 +msgid "Sublocations" +msgstr "" + +#: stock/templates/stock/location.html:112 +msgid "Stock Details" +msgstr "" + +#: stock/templates/stock/location.html:117 templates/InvenTree/search.html:279 +#: templates/stats.html:76 users/models.py:39 +msgid "Stock Locations" +msgstr "" + +#: stock/templates/stock/location_delete.html:7 +msgid "Are you sure you want to delete this stock location?" +msgstr "" + +#: stock/templates/stock/navbar.html:11 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/templates/stock/navbar.html:14 +msgid "History" +msgstr "" + +#: stock/templates/stock/navbar.html:30 +msgid "Installed Items" +msgstr "" + +#: stock/templates/stock/navbar.html:38 +msgid "Child Items" +msgstr "" + +#: stock/templates/stock/navbar.html:41 +msgid "Children" +msgstr "" + +#: stock/templates/stock/stock_adjust.html:43 +msgid "Remove item" +msgstr "" + +#: stock/templates/stock/stock_app_base.html:16 +msgid "Loading..." +msgstr "" + +#: stock/templates/stock/stock_uninstall.html:8 +msgid "The following stock items will be uninstalled" +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1332 +msgid "Convert Stock Item" +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:8 +#, python-format +msgid "This stock item is current an instance of %(part)s" +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:9 +msgid "It can be converted to one of the part variants listed below." +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:14 +msgid "This action cannot be easily undone" +msgstr "" + +#: stock/templates/stock/sublocation.html:23 templates/stock_table.html:37 +msgid "Printing Actions" +msgstr "" + +#: stock/templates/stock/sublocation.html:27 templates/stock_table.html:41 +msgid "Print labels" +msgstr "" + +#: stock/templates/stock/tracking_delete.html:6 +msgid "Are you sure you want to delete this stock tracking entry?" +msgstr "" + +#: stock/views.py:123 +msgid "Edit Stock Location" +msgstr "" + +#: stock/views.py:230 stock/views.py:1322 stock/views.py:1433 +#: stock/views.py:1798 +msgid "Owner is required (ownership control is enabled)" +msgstr "" + +#: stock/views.py:245 +msgid "Stock Location QR code" +msgstr "" + +#: stock/views.py:265 +msgid "Add Stock Item Attachment" +msgstr "" + +#: stock/views.py:311 +msgid "Edit Stock Item Attachment" +msgstr "" + +#: stock/views.py:327 +msgid "Delete Stock Item Attachment" +msgstr "" + +#: stock/views.py:343 +msgid "Assign to Customer" +msgstr "" + +#: stock/views.py:352 +msgid "Customer must be specified" +msgstr "" + +#: stock/views.py:376 +msgid "Return to Stock" +msgstr "" + +#: stock/views.py:385 +msgid "Specify a valid location" +msgstr "" + +#: stock/views.py:396 +msgid "Stock item returned from customer" +msgstr "" + +#: stock/views.py:407 +msgid "Delete All Test Data" +msgstr "" + +#: stock/views.py:424 +msgid "Confirm test data deletion" +msgstr "" + +#: stock/views.py:444 +msgid "Add Test Result" +msgstr "" + +#: stock/views.py:484 +msgid "Edit Test Result" +msgstr "" + +#: stock/views.py:501 +msgid "Delete Test Result" +msgstr "" + +#: stock/views.py:509 +msgid "Stock Export Options" +msgstr "" + +#: stock/views.py:630 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/views.py:656 +msgid "Install Stock Item" +msgstr "" + +#: stock/views.py:755 +msgid "Uninstall Stock Items" +msgstr "" + +#: stock/views.py:863 +msgid "Uninstalled stock items" +msgstr "" + +#: stock/views.py:888 +msgid "Adjust Stock" +msgstr "" + +#: stock/views.py:998 +msgid "Move Stock Items" +msgstr "" + +#: stock/views.py:998 +msgid "Move" +msgstr "" + +#: stock/views.py:999 +msgid "Count Stock Items" +msgstr "" + +#: stock/views.py:999 +msgid "Count" +msgstr "" + +#: stock/views.py:1000 +msgid "Remove From Stock" +msgstr "" + +#: stock/views.py:1000 +msgid "Take" +msgstr "" + +#: stock/views.py:1001 +msgid "Add Stock Items" +msgstr "" + +#: stock/views.py:1001 users/models.py:180 +msgid "Add" +msgstr "" + +#: stock/views.py:1002 +msgid "Delete Stock Items" +msgstr "" + +#: stock/views.py:1031 +msgid "Must enter integer value" +msgstr "" + +#: stock/views.py:1036 +msgid "Quantity must be positive" +msgstr "" + +#: stock/views.py:1043 +#, python-brace-format +msgid "Quantity must not exceed {x}" +msgstr "" + +#: stock/views.py:1107 +msgid "No action performed" +msgstr "" + +#: stock/views.py:1122 +#, python-brace-format +msgid "Added stock to {n} items" +msgstr "" + +#: stock/views.py:1137 +#, python-brace-format +msgid "Removed stock from {n} items" +msgstr "" + +#: stock/views.py:1150 +#, python-brace-format +msgid "Counted stock for {n} items" +msgstr "" + +#: stock/views.py:1190 +msgid "No items were moved" +msgstr "" + +#: stock/views.py:1193 +#, python-brace-format +msgid "Moved {n} items to {dest}" +msgstr "" + +#: stock/views.py:1212 +#, python-brace-format +msgid "Deleted {n} stock items" +msgstr "" + +#: stock/views.py:1224 +msgid "Edit Stock Item" +msgstr "" + +#: stock/views.py:1450 +msgid "Serialize Stock" +msgstr "" + +#: stock/views.py:1543 templates/js/build.js:210 +msgid "Create new Stock Item" +msgstr "" + +#: stock/views.py:1685 +msgid "Duplicate Stock Item" +msgstr "" + +#: stock/views.py:1767 +msgid "Quantity cannot be negative" +msgstr "" + +#: stock/views.py:1867 +msgid "Delete Stock Location" +msgstr "" + +#: stock/views.py:1880 +msgid "Delete Stock Item" +msgstr "" + +#: stock/views.py:1891 +msgid "Delete Stock Tracking Entry" +msgstr "" + +#: stock/views.py:1898 +msgid "Edit Stock Tracking Entry" +msgstr "" + +#: stock/views.py:1907 +msgid "Add Stock Tracking Entry" +msgstr "" + +#: templates/403.html:5 templates/403.html:11 +msgid "Permission Denied" +msgstr "" + +#: templates/403.html:14 +msgid "You do not have permission to view this page." +msgstr "" + +#: templates/404.html:5 templates/404.html:11 +msgid "Page Not Found" +msgstr "" + +#: templates/404.html:14 +msgid "The requested page does not exist" +msgstr "" + +#: templates/InvenTree/index.html:7 +msgid "Index" +msgstr "" + +#: templates/InvenTree/index.html:98 +msgid "Starred Parts" +msgstr "" + +#: templates/InvenTree/index.html:99 +msgid "Latest Parts" +msgstr "" + +#: templates/InvenTree/index.html:100 +msgid "BOM Waiting Validation" +msgstr "" + +#: templates/InvenTree/index.html:129 +msgid "Recently Updated" +msgstr "" + +#: templates/InvenTree/index.html:145 +msgid "Expired Stock" +msgstr "" + +#: templates/InvenTree/index.html:146 +msgid "Stale Stock" +msgstr "" + +#: templates/InvenTree/index.html:184 +msgid "Build Orders In Progress" +msgstr "" + +#: templates/InvenTree/index.html:185 +msgid "Overdue Build Orders" +msgstr "" + +#: templates/InvenTree/index.html:206 +msgid "Outstanding Purchase Orders" +msgstr "" + +#: templates/InvenTree/index.html:207 +msgid "Overdue Purchase Orders" +msgstr "" + +#: templates/InvenTree/index.html:229 +msgid "Outstanding Sales Orders" +msgstr "" + +#: templates/InvenTree/index.html:230 +msgid "Overdue Sales Orders" +msgstr "" + +#: templates/InvenTree/search.html:8 templates/InvenTree/search.html:14 +msgid "Search Results" +msgstr "" + +#: templates/InvenTree/search.html:24 +msgid "Enter a search query" +msgstr "" + +#: templates/InvenTree/search.html:268 templates/js/stock.js:300 +msgid "Shipped to customer" +msgstr "" + +#: templates/InvenTree/search.html:271 templates/js/stock.js:310 +msgid "No stock location set" +msgstr "" + +#: templates/InvenTree/settings/build.html:10 +msgid "Build Order Settings" +msgstr "" + +#: templates/InvenTree/settings/category.html:9 +msgid "Category Settings" +msgstr "" + +#: templates/InvenTree/settings/category.html:25 +msgid "Category Parameter Templates" +msgstr "" + +#: templates/InvenTree/settings/category.html:52 +msgid "No category parameter templates found" +msgstr "" + +#: templates/InvenTree/settings/category.html:70 +#: templates/InvenTree/settings/part.html:81 +msgid "Edit Template" +msgstr "" + +#: templates/InvenTree/settings/category.html:71 +#: templates/InvenTree/settings/part.html:82 +msgid "Delete Template" +msgstr "" + +#: templates/InvenTree/settings/global.html:10 +msgid "Global InvenTree Settings" +msgstr "" + +#: templates/InvenTree/settings/global.html:27 +msgid "Barcode Settings" +msgstr "" + +#: templates/InvenTree/settings/header.html:7 +msgid "Setting" +msgstr "" + +#: templates/InvenTree/settings/part.html:9 +msgid "Part Settings" +msgstr "" + +#: templates/InvenTree/settings/part.html:14 +msgid "Part Options" +msgstr "" + +#: templates/InvenTree/settings/part.html:40 +msgid "Part Parameter Templates" +msgstr "" + +#: templates/InvenTree/settings/part.html:61 +msgid "No part parameter templates found" +msgstr "" + +#: templates/InvenTree/settings/po.html:9 +msgid "Purchase Order Settings" +msgstr "" + +#: templates/InvenTree/settings/report.html:10 +msgid "Report Settings" +msgstr "" + +#: templates/InvenTree/settings/setting.html:23 +msgid "No value set" +msgstr "" + +#: templates/InvenTree/settings/setting.html:31 +msgid "Edit setting" +msgstr "" + +#: templates/InvenTree/settings/settings.html:8 +#: templates/InvenTree/settings/settings.html:14 templates/navbar.html:84 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/so.html:9 +msgid "Sales Order Settings" +msgstr "" + +#: templates/InvenTree/settings/stock.html:9 +msgid "Stock Settings" +msgstr "" + +#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:49 +msgid "Stock Options" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:3 +#: templates/InvenTree/settings/user.html:10 +msgid "User Settings" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:6 +msgid "Account" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:9 +msgid "Theme" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:13 +msgid "InvenTree Settings" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:16 +msgid "Global" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:19 +msgid "Report" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:22 +msgid "Categories" +msgstr "" + +#: templates/InvenTree/settings/theme.html:10 +msgid "Theme Settings" +msgstr "" + +#: templates/InvenTree/settings/theme.html:17 +msgid "Color Themes" +msgstr "" + +#: templates/InvenTree/settings/theme.html:29 +#, python-format +msgid "" +"\n" +"\t\tThe CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected " +"color theme was not found.
    \n" +"\t\tPlease select another color theme :)\n" +"\t" +msgstr "" + +#: templates/InvenTree/settings/user.html:16 +msgid "User Information" +msgstr "" + +#: templates/InvenTree/settings/user.html:21 +msgid "Change Password" +msgstr "" + +#: templates/InvenTree/settings/user.html:28 +#: templates/registration/login.html:59 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:32 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:36 +msgid "Last Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:40 +msgid "Email Address" +msgstr "" + +#: templates/about.html:13 +msgid "InvenTree Version Information" +msgstr "" + +#: templates/about.html:22 +msgid "InvenTree Version" +msgstr "" + +#: templates/about.html:26 +msgid "Up to Date" +msgstr "" + +#: templates/about.html:28 +msgid "Update Available" +msgstr "" + +#: templates/about.html:34 +msgid "Django Version" +msgstr "" + +#: templates/about.html:41 +msgid "Commit Hash" +msgstr "" + +#: templates/about.html:48 +msgid "Commit Date" +msgstr "" + +#: templates/about.html:53 +msgid "InvenTree Documentation" +msgstr "" + +#: templates/about.html:58 +msgid "View Code on GitHub" +msgstr "" + +#: templates/about.html:63 +msgid "Get the App" +msgstr "" + +#: templates/about.html:68 +msgid "Submit Bug Report" +msgstr "" + +#: templates/attachment_table.html:6 +msgid "Add Attachment" +msgstr "" + +#: templates/attachment_table.html:15 +msgid "File" +msgstr "" + +#: templates/attachment_table.html:17 +msgid "Uploaded" +msgstr "" + +#: templates/attachment_table.html:35 +msgid "Delete attachment" +msgstr "" + +#: templates/image_download.html:8 +msgid "Specify URL for downloading image" +msgstr "" + +#: templates/image_download.html:11 +msgid "Must be a valid image URL" +msgstr "" + +#: templates/image_download.html:12 +msgid "Remote server must be accessible" +msgstr "" + +#: templates/image_download.html:13 +msgid "Remote image must not exceed maximum allowable file size" +msgstr "" + +#: templates/js/barcode.js:8 +msgid "Scan barcode data here using wedge scanner" +msgstr "" + +#: templates/js/barcode.js:10 +msgid "Enter barcode data" +msgstr "" + +#: templates/js/barcode.js:14 +msgid "Barcode" +msgstr "" + +#: templates/js/barcode.js:32 +msgid "Enter optional notes for stock transfer" +msgstr "" + +#: templates/js/barcode.js:33 +msgid "Enter notes" +msgstr "" + +#: templates/js/barcode.js:71 +msgid "Server error" +msgstr "" + +#: templates/js/barcode.js:92 +msgid "Unknown response from server" +msgstr "" + +#: templates/js/barcode.js:119 templates/js/modals.js:857 +msgid "Invalid server response" +msgstr "" + +#: templates/js/barcode.js:212 +msgid "Scan barcode data below" +msgstr "" + +#: templates/js/barcode.js:270 +msgid "No URL in response" +msgstr "" + +#: templates/js/barcode.js:288 +msgid "Link Barcode to Stock Item" +msgstr "" + +#: templates/js/barcode.js:311 +msgid "" +"This will remove the association between this stock item and the barcode" +msgstr "" + +#: templates/js/barcode.js:317 +msgid "Unlink" +msgstr "" + +#: templates/js/barcode.js:376 +msgid "Remove stock item" +msgstr "" + +#: templates/js/barcode.js:418 +msgid "Check Stock Items into Location" +msgstr "" + +#: templates/js/barcode.js:422 templates/js/barcode.js:547 +msgid "Check In" +msgstr "" + +#: templates/js/barcode.js:462 templates/js/barcode.js:586 +msgid "Error transferring stock" +msgstr "" + +#: templates/js/barcode.js:481 +msgid "Stock Item already scanned" +msgstr "" + +#: templates/js/barcode.js:485 +msgid "Stock Item already in this location" +msgstr "" + +#: templates/js/barcode.js:492 +msgid "Added stock item" +msgstr "" + +#: templates/js/barcode.js:499 +msgid "Barcode does not match Stock Item" +msgstr "" + +#: templates/js/barcode.js:542 +msgid "Check Into Location" +msgstr "" + +#: templates/js/barcode.js:605 +msgid "Barcode does not match a valid location" +msgstr "" + +#: templates/js/bom.js:175 templates/js/build.js:934 +msgid "Open subassembly" +msgstr "" + +#: templates/js/bom.js:261 +msgid "No pricing available" +msgstr "" + +#: templates/js/bom.js:272 templates/js/filters.js:167 +#: templates/js/filters.js:397 +msgid "true" +msgstr "" + +#: templates/js/bom.js:273 templates/js/filters.js:171 +#: templates/js/filters.js:398 +msgid "false" +msgstr "" + +#: templates/js/bom.js:290 templates/js/bom.js:376 +msgid "View BOM" +msgstr "" + +#: templates/js/bom.js:350 +msgid "Validate BOM Item" +msgstr "" + +#: templates/js/bom.js:352 +msgid "This line has been validated" +msgstr "" + +#: templates/js/bom.js:354 +msgid "Edit BOM Item" +msgstr "" + +#: templates/js/bom.js:356 +msgid "Delete BOM Item" +msgstr "" + +#: templates/js/bom.js:447 templates/js/build.js:305 templates/js/build.js:1032 +msgid "No BOM items found" +msgstr "" + +#: templates/js/build.js:56 +msgid "Auto-allocate stock items to this output" +msgstr "" + +#: templates/js/build.js:62 +msgid "Complete build output" +msgstr "" + +#: templates/js/build.js:71 +msgid "Unallocate stock from build output" +msgstr "" + +#: templates/js/build.js:77 +msgid "Delete build output" +msgstr "" + +#: templates/js/build.js:209 templates/stock_table.html:20 +msgid "New Stock Item" +msgstr "" + +#: templates/js/build.js:493 +msgid "Required Part" +msgstr "" + +#: templates/js/build.js:514 +msgid "Quantity Per" +msgstr "" + +#: templates/js/build.js:582 templates/js/build.js:996 +#: templates/stock_table.html:58 +msgid "Order stock" +msgstr "" + +#: templates/js/build.js:632 +msgid "No builds matching query" +msgstr "" + +#: templates/js/build.js:649 templates/js/part.js:324 templates/js/part.js:546 +#: templates/js/stock.js:511 templates/js/stock.js:938 +#: templates/js/stock.js:1331 +msgid "Select" +msgstr "" + +#: templates/js/build.js:669 +msgid "Build order is overdue" +msgstr "" + +#: templates/js/build.js:767 +msgid "No parts allocated for" +msgstr "" + +#: templates/js/company.js:74 +msgid "Parts Supplied" +msgstr "" + +#: templates/js/company.js:83 +msgid "Parts Manufactured" +msgstr "" + +#: templates/js/company.js:96 +msgid "No company information found" +msgstr "" + +#: templates/js/company.js:129 +msgid "No manufacturer parts found" +msgstr "" + +#: templates/js/company.js:148 templates/js/company.js:246 +#: templates/js/part.js:60 templates/js/part.js:145 +msgid "Template part" +msgstr "" + +#: templates/js/company.js:152 templates/js/company.js:250 +#: templates/js/part.js:64 templates/js/part.js:149 +msgid "Assembled part" +msgstr "" + +#: templates/js/company.js:227 +msgid "No supplier parts found" +msgstr "" + +#: templates/js/filters.js:193 +msgid "Select filter" +msgstr "" + +#: templates/js/filters.js:268 +msgid "Add new filter" +msgstr "" + +#: templates/js/filters.js:271 +msgid "Clear all filters" +msgstr "" + +#: templates/js/filters.js:296 +msgid "Create filter" +msgstr "" + +#: templates/js/label.js:10 templates/js/report.js:98 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/label.js:11 +msgid "Stock item(s) must be selected before printing labels" +msgstr "" + +#: templates/js/label.js:29 templates/js/label.js:79 +msgid "No Labels Found" +msgstr "" + +#: templates/js/label.js:30 +msgid "No labels found which match selected stock item(s)" +msgstr "" + +#: templates/js/label.js:61 +msgid "Select Stock Locations" +msgstr "" + +#: templates/js/label.js:62 +msgid "Stock location(s) must be selected before printing labels" +msgstr "" + +#: templates/js/label.js:80 +msgid "No labels found which match selected stock location(s)" +msgstr "" + +#: templates/js/label.js:154 +msgid "stock items selected" +msgstr "" + +#: templates/js/label.js:162 +msgid "Select Label" +msgstr "" + +#: templates/js/label.js:177 +msgid "Select Label Template" +msgstr "" + +#: templates/js/modals.js:256 +msgid "Waiting for server..." +msgstr "" + +#: templates/js/modals.js:406 +msgid "Show Error Information" +msgstr "" + +#: templates/js/modals.js:473 templates/modals.html:73 +msgid "Accept" +msgstr "" + +#: templates/js/modals.js:474 templates/modals.html:72 +msgid "Cancel" +msgstr "" + +#: templates/js/modals.js:538 +msgid "Loading Data" +msgstr "" + +#: templates/js/modals.js:549 templates/js/modals.js:808 +#: templates/modals.html:29 templates/modals.html:53 +msgid "Submit" +msgstr "" + +#: templates/js/modals.js:550 templates/js/modals.js:809 +#: templates/modals.html:28 templates/modals.html:52 templates/modals.html:93 +msgid "Close" +msgstr "" + +#: templates/js/modals.js:760 +msgid "Invalid response from server" +msgstr "" + +#: templates/js/modals.js:760 +msgid "Form data missing from server response" +msgstr "" + +#: templates/js/modals.js:773 +msgid "Error posting form data" +msgstr "" + +#: templates/js/modals.js:857 +msgid "JSON response missing form data" +msgstr "" + +#: templates/js/modals.js:867 +msgid "No Response" +msgstr "" + +#: templates/js/modals.js:868 +msgid "No response from the InvenTree server" +msgstr "" + +#: templates/js/modals.js:872 +msgid "Error 400: Bad Request" +msgstr "" + +#: templates/js/modals.js:873 +msgid "Server returned error code 400" +msgstr "" + +#: templates/js/modals.js:877 +msgid "Error 401: Not Authenticated" +msgstr "" + +#: templates/js/modals.js:878 +msgid "Authentication credentials not supplied" +msgstr "" + +#: templates/js/modals.js:882 +msgid "Error 403: Permission Denied" +msgstr "" + +#: templates/js/modals.js:883 +msgid "You do not have the required permissions to access this function" +msgstr "" + +#: templates/js/modals.js:887 +msgid "Error 404: Resource Not Found" +msgstr "" + +#: templates/js/modals.js:888 +msgid "The requested resource could not be located on the server" +msgstr "" + +#: templates/js/modals.js:892 +msgid "Error 408: Timeout" +msgstr "" + +#: templates/js/modals.js:893 +msgid "Connection timeout while requesting data from server" +msgstr "" + +#: templates/js/modals.js:896 +msgid "Error requesting form data" +msgstr "" + +#: templates/js/order.js:138 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/order.js:162 templates/js/order.js:257 +msgid "Order is overdue" +msgstr "" + +#: templates/js/order.js:234 +msgid "No sales orders found" +msgstr "" + +#: templates/js/part.js:52 templates/js/part.js:137 +msgid "Trackable part" +msgstr "" + +#: templates/js/part.js:56 templates/js/part.js:141 +msgid "Virtual part" +msgstr "" + +#: templates/js/part.js:68 +msgid "Starred part" +msgstr "" + +#: templates/js/part.js:72 +msgid "Salable part" +msgstr "" + +#: templates/js/part.js:186 +msgid "No variants found" +msgstr "" + +#: templates/js/part.js:272 templates/js/part.js:452 +msgid "No parts found" +msgstr "" + +#: templates/js/part.js:391 +msgid "No category" +msgstr "" + +#: templates/js/part.js:409 templates/js/table_filters.js:318 +msgid "Low stock" +msgstr "" + +#: templates/js/part.js:571 templates/js/stock.js:962 +msgid "Path" +msgstr "" + +#: templates/js/part.js:588 +msgid "YES" +msgstr "" + +#: templates/js/part.js:590 +msgid "NO" +msgstr "" + +#: templates/js/part.js:624 +msgid "No test templates matching query" +msgstr "" + +#: templates/js/part.js:675 templates/js/stock.js:75 +msgid "Edit test result" +msgstr "" + +#: templates/js/part.js:676 templates/js/stock.js:76 +msgid "Delete test result" +msgstr "" + +#: templates/js/part.js:682 +msgid "This test is defined for a parent part" +msgstr "" + +#: templates/js/report.js:47 +msgid "items selected" +msgstr "" + +#: templates/js/report.js:55 +msgid "Select Report Template" +msgstr "" + +#: templates/js/report.js:70 +msgid "Select Test Report Template" +msgstr "" + +#: templates/js/report.js:99 +msgid "Stock item(s) must be selected before printing reports" +msgstr "" + +#: templates/js/report.js:116 templates/js/report.js:169 +#: templates/js/report.js:223 templates/js/report.js:277 +#: templates/js/report.js:331 +msgid "No Reports Found" +msgstr "" + +#: templates/js/report.js:117 +msgid "No report templates found which match selected stock item(s)" +msgstr "" + +#: templates/js/report.js:152 +msgid "Select Builds" +msgstr "" + +#: templates/js/report.js:153 +msgid "Build(s) must be selected before printing reports" +msgstr "" + +#: templates/js/report.js:170 +msgid "No report templates found which match selected build(s)" +msgstr "" + +#: templates/js/report.js:205 +msgid "Select Parts" +msgstr "" + +#: templates/js/report.js:206 +msgid "Part(s) must be selected before printing reports" +msgstr "" + +#: templates/js/report.js:224 +msgid "No report templates found which match selected part(s)" +msgstr "" + +#: templates/js/report.js:259 +msgid "Select Purchase Orders" +msgstr "" + +#: templates/js/report.js:260 +msgid "Purchase Order(s) must be selected before printing report" +msgstr "" + +#: templates/js/report.js:278 templates/js/report.js:332 +msgid "No report templates found which match selected orders" +msgstr "" + +#: templates/js/report.js:313 +msgid "Select Sales Orders" +msgstr "" + +#: templates/js/report.js:314 +msgid "Sales Order(s) must be selected before printing report" +msgstr "" + +#: templates/js/stock.js:38 +msgid "PASS" +msgstr "" + +#: templates/js/stock.js:40 +msgid "FAIL" +msgstr "" + +#: templates/js/stock.js:45 +msgid "NO RESULT" +msgstr "" + +#: templates/js/stock.js:71 +msgid "Add test result" +msgstr "" + +#: templates/js/stock.js:90 +msgid "No test results found" +msgstr "" + +#: templates/js/stock.js:132 +msgid "Test Date" +msgstr "" + +#: templates/js/stock.js:292 +msgid "In production" +msgstr "" + +#: templates/js/stock.js:296 +msgid "Installed in Stock Item" +msgstr "" + +#: templates/js/stock.js:304 +msgid "Assigned to Sales Order" +msgstr "" + +#: templates/js/stock.js:336 +msgid "No stock items matching query" +msgstr "" + +#: templates/js/stock.js:357 +msgid "items" +msgstr "" + +#: templates/js/stock.js:449 +msgid "batches" +msgstr "" + +#: templates/js/stock.js:476 +msgid "locations" +msgstr "" + +#: templates/js/stock.js:478 +msgid "Undefined location" +msgstr "" + +#: templates/js/stock.js:579 +msgid "Stock item is in production" +msgstr "" + +#: templates/js/stock.js:584 +msgid "Stock item assigned to sales order" +msgstr "" + +#: templates/js/stock.js:587 +msgid "Stock item assigned to customer" +msgstr "" + +#: templates/js/stock.js:591 +msgid "Stock item has expired" +msgstr "" + +#: templates/js/stock.js:593 +msgid "Stock item will expire soon" +msgstr "" + +#: templates/js/stock.js:597 +msgid "Stock item has been allocated" +msgstr "" + +#: templates/js/stock.js:601 +msgid "Stock item has been installed in another item" +msgstr "" + +#: templates/js/stock.js:609 +msgid "Stock item has been rejected" +msgstr "" + +#: templates/js/stock.js:613 +msgid "Stock item is lost" +msgstr "" + +#: templates/js/stock.js:616 +msgid "Stock item is destroyed" +msgstr "" + +#: templates/js/stock.js:620 templates/js/table_filters.js:138 +msgid "Depleted" +msgstr "" + +#: templates/js/stock.js:649 +msgid "Stocktake" +msgstr "" + +#: templates/js/stock.js:825 +msgid "Stock Status" +msgstr "" + +#: templates/js/stock.js:840 +msgid "Set Stock Status" +msgstr "" + +#: templates/js/stock.js:854 +msgid "Select Status Code" +msgstr "" + +#: templates/js/stock.js:855 +msgid "Status code must be selected" +msgstr "" + +#: templates/js/stock.js:1050 +msgid "No user information" +msgstr "" + +#: templates/js/stock.js:1060 +msgid "Edit tracking entry" +msgstr "" + +#: templates/js/stock.js:1061 +msgid "Delete tracking entry" +msgstr "" + +#: templates/js/stock.js:1170 +msgid "Create New Location" +msgstr "" + +#: templates/js/stock.js:1269 +msgid "Serial" +msgstr "" + +#: templates/js/stock.js:1362 templates/js/table_filters.js:171 +msgid "Installed" +msgstr "" + +#: templates/js/stock.js:1387 +msgid "Install item" +msgstr "" + +#: templates/js/table_filters.js:42 +msgid "Trackable Part" +msgstr "" + +#: templates/js/table_filters.js:46 +msgid "Validated" +msgstr "" + +#: templates/js/table_filters.js:71 +msgid "Include locations" +msgstr "" + +#: templates/js/table_filters.js:81 templates/js/table_filters.js:82 +#: templates/js/table_filters.js:295 +msgid "Include subcategories" +msgstr "" + +#: templates/js/table_filters.js:92 templates/js/table_filters.js:181 +msgid "Is Serialized" +msgstr "" + +#: templates/js/table_filters.js:95 templates/js/table_filters.js:188 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/table_filters.js:96 templates/js/table_filters.js:189 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/table_filters.js:99 templates/js/table_filters.js:192 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/table_filters.js:100 templates/js/table_filters.js:193 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/table_filters.js:103 templates/js/table_filters.js:104 +#: templates/js/table_filters.js:184 templates/js/table_filters.js:185 +msgid "Serial number" +msgstr "" + +#: templates/js/table_filters.js:108 templates/js/table_filters.js:202 +msgid "Batch code" +msgstr "" + +#: templates/js/table_filters.js:118 templates/js/table_filters.js:285 +msgid "Active parts" +msgstr "" + +#: templates/js/table_filters.js:119 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/table_filters.js:124 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/table_filters.js:128 +msgid "Is allocated" +msgstr "" + +#: templates/js/table_filters.js:129 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/table_filters.js:134 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/table_filters.js:139 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/table_filters.js:146 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/table_filters.js:151 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/table_filters.js:157 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/table_filters.js:161 +msgid "In Production" +msgstr "" + +#: templates/js/table_filters.js:162 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/table_filters.js:166 +msgid "Include Variants" +msgstr "" + +#: templates/js/table_filters.js:167 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/table_filters.js:172 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/table_filters.js:176 +msgid "Sent to customer" +msgstr "" + +#: templates/js/table_filters.js:177 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/table_filters.js:197 templates/js/table_filters.js:198 +msgid "Stock status" +msgstr "" + +#: templates/js/table_filters.js:231 +msgid "Build status" +msgstr "" + +#: templates/js/table_filters.js:250 templates/js/table_filters.js:267 +msgid "Order status" +msgstr "" + +#: templates/js/table_filters.js:255 templates/js/table_filters.js:272 +msgid "Outstanding" +msgstr "" + +#: templates/js/table_filters.js:296 +msgid "Include parts in subcategories" +msgstr "" + +#: templates/js/table_filters.js:300 +msgid "Has IPN" +msgstr "" + +#: templates/js/table_filters.js:301 +msgid "Part has internal part number" +msgstr "" + +#: templates/js/table_filters.js:306 +msgid "Show active parts" +msgstr "" + +#: templates/js/table_filters.js:314 +msgid "Stock available" +msgstr "" + +#: templates/js/table_filters.js:330 +msgid "Starred" +msgstr "" + +#: templates/js/table_filters.js:342 +msgid "Purchasable" +msgstr "" + +#: templates/js/tables.js:321 +msgid "Loading data" +msgstr "" + +#: templates/js/tables.js:324 +msgid "rows per page" +msgstr "" + +#: templates/js/tables.js:327 +msgid "Showing" +msgstr "" + +#: templates/js/tables.js:327 +msgid "to" +msgstr "" + +#: templates/js/tables.js:327 +msgid "of" +msgstr "" + +#: templates/js/tables.js:327 +msgid "rows" +msgstr "" + +#: templates/js/tables.js:330 templates/search_form.html:6 +#: templates/search_form.html:8 +msgid "Search" +msgstr "" + +#: templates/js/tables.js:333 +msgid "No matching results" +msgstr "" + +#: templates/js/tables.js:336 +msgid "Hide/Show pagination" +msgstr "" + +#: templates/js/tables.js:339 +msgid "Refresh" +msgstr "" + +#: templates/js/tables.js:342 +msgid "Toggle" +msgstr "" + +#: templates/js/tables.js:345 +msgid "Columns" +msgstr "" + +#: templates/js/tables.js:348 +msgid "All" +msgstr "" + +#: templates/modals.html:21 templates/modals.html:46 +msgid "Form errors exist" +msgstr "" + +#: templates/navbar.html:33 +msgid "Buy" +msgstr "" + +#: templates/navbar.html:43 +msgid "Sell" +msgstr "" + +#: templates/navbar.html:55 +msgid "Scan Barcode" +msgstr "" + +#: templates/navbar.html:77 users/models.py:36 +msgid "Admin" +msgstr "" + +#: templates/navbar.html:79 +msgid "Logout" +msgstr "" + +#: templates/navbar.html:81 templates/registration/login.html:90 +msgid "Login" +msgstr "" + +#: templates/navbar.html:104 +msgid "About InvenTree" +msgstr "" + +#: templates/qr_code.html:11 +msgid "QR data not provided" +msgstr "" + +#: templates/registration/logged_out.html:51 +msgid "You have been logged out" +msgstr "" + +#: templates/registration/logged_out.html:52 +#: templates/registration/password_reset_complete.html:52 +#: templates/registration/password_reset_done.html:59 +msgid "Return to login screen" +msgstr "" + +#: templates/registration/login.html:65 +msgid "Enter username" +msgstr "" + +#: templates/registration/login.html:71 +msgid "Password" +msgstr "" + +#: templates/registration/login.html:84 +msgid "Username / password combination is incorrect" +msgstr "" + +#: templates/registration/login.html:96 +#: templates/registration/password_reset_form.html:52 +msgid "Forgotten your password?" +msgstr "" + +#: templates/registration/login.html:96 +msgid "Click here to reset" +msgstr "" + +#: templates/registration/password_reset_complete.html:51 +msgid "Password reset complete" +msgstr "" + +#: templates/registration/password_reset_confirm.html:53 +#: templates/registration/password_reset_confirm.html:57 +msgid "Change password" +msgstr "" + +#: templates/registration/password_reset_confirm.html:61 +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +#: templates/registration/password_reset_done.html:52 +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +#: templates/registration/password_reset_done.html:55 +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#: templates/registration/password_reset_form.html:53 +msgid "Enter your email address below." +msgstr "" + +#: templates/registration/password_reset_form.html:54 +msgid "An email will be sent with password reset instructions." +msgstr "" + +#: templates/registration/password_reset_form.html:59 +msgid "Send email" +msgstr "" + +#: templates/stats.html:9 +msgid "Server" +msgstr "" + +#: templates/stats.html:13 +msgid "Instance Name" +msgstr "" + +#: templates/stats.html:19 +msgid "Server status" +msgstr "" + +#: templates/stats.html:22 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:24 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:31 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:34 +msgid "Background worker not running" +msgstr "" + +#: templates/stats.html:42 +msgid "Email Settings" +msgstr "" + +#: templates/stats.html:45 +msgid "Email settings not configured" +msgstr "" + +#: templates/stock_table.html:14 +msgid "Export Stock Information" +msgstr "" + +#: templates/stock_table.html:27 +msgid "Barcode Actions" +msgstr "" + +#: templates/stock_table.html:43 +msgid "Print test reports" +msgstr "" + +#: templates/stock_table.html:54 +msgid "Add to selected stock items" +msgstr "" + +#: templates/stock_table.html:55 +msgid "Remove from selected stock items" +msgstr "" + +#: templates/stock_table.html:56 +msgid "Stocktake selected stock items" +msgstr "" + +#: templates/stock_table.html:57 +msgid "Move selected stock items" +msgstr "" + +#: templates/stock_table.html:57 +msgid "Move stock" +msgstr "" + +#: templates/stock_table.html:58 +msgid "Order selected items" +msgstr "" + +#: templates/stock_table.html:59 +msgid "Change status" +msgstr "" + +#: templates/stock_table.html:59 +msgid "Change stock status" +msgstr "" + +#: templates/stock_table.html:62 +msgid "Delete selected items" +msgstr "" + +#: templates/stock_table.html:62 +msgid "Delete Stock" +msgstr "" + +#: templates/yesnolabel.html:4 +msgid "Yes" +msgstr "" + +#: templates/yesnolabel.html:6 +msgid "No" +msgstr "" + +#: users/admin.py:64 +msgid "Users" +msgstr "" + +#: users/admin.py:65 +msgid "Select which users are assigned to this group" +msgstr "" + +#: users/admin.py:187 +msgid "The following users are members of multiple groups:" +msgstr "" + +#: users/admin.py:210 +msgid "Personal info" +msgstr "" + +#: users/admin.py:211 +msgid "Permissions" +msgstr "" + +#: users/admin.py:214 +msgid "Important dates" +msgstr "" + +#: users/models.py:167 +msgid "Permission set" +msgstr "" + +#: users/models.py:175 +msgid "Group" +msgstr "" + +#: users/models.py:178 +msgid "View" +msgstr "" + +#: users/models.py:178 +msgid "Permission to view items" +msgstr "" + +#: users/models.py:180 +msgid "Permission to add items" +msgstr "" + +#: users/models.py:182 +msgid "Change" +msgstr "" + +#: users/models.py:182 +msgid "Permissions to edit items" +msgstr "" + +#: users/models.py:184 +msgid "Permission to delete items" +msgstr "" diff --git a/InvenTree/locale/ru/LC_MESSAGES/django.po b/InvenTree/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000000..cd6e5258ad --- /dev/null +++ b/InvenTree/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,7236 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-21 12:28+1000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +#: InvenTree/api.py:64 +msgid "API endpoint not found" +msgstr "" + +#: InvenTree/api.py:110 +msgid "No action specified" +msgstr "" + +#: InvenTree/api.py:124 +msgid "No matching action found" +msgstr "" + +#: InvenTree/fields.py:44 +msgid "Enter date" +msgstr "" + +#: InvenTree/forms.py:110 build/forms.py:99 build/forms.py:120 +#: build/forms.py:142 build/forms.py:166 build/forms.py:188 build/forms.py:223 +#: order/forms.py:27 order/forms.py:38 order/forms.py:49 order/forms.py:60 +#: order/forms.py:71 part/forms.py:134 +msgid "Confirm" +msgstr "" + +#: InvenTree/forms.py:126 +msgid "Confirm delete" +msgstr "" + +#: InvenTree/forms.py:127 +msgid "Confirm item deletion" +msgstr "" + +#: InvenTree/forms.py:159 templates/registration/login.html:77 +msgid "Enter password" +msgstr "" + +#: InvenTree/forms.py:160 +msgid "Enter new password" +msgstr "" + +#: InvenTree/forms.py:167 +msgid "Confirm password" +msgstr "" + +#: InvenTree/forms.py:168 +msgid "Confirm new password" +msgstr "" + +#: InvenTree/forms.py:203 +msgid "Apply Theme" +msgstr "" + +#: InvenTree/forms.py:233 +msgid "Select Category" +msgstr "" + +#: InvenTree/helpers.py:375 order/models.py:245 order/models.py:344 +#: stock/views.py:1763 +msgid "Invalid quantity provided" +msgstr "" + +#: InvenTree/helpers.py:378 +msgid "Empty serial number string" +msgstr "" + +#: InvenTree/helpers.py:399 +#, python-brace-format +msgid "Duplicate serial: {n}" +msgstr "" + +#: InvenTree/helpers.py:403 InvenTree/helpers.py:406 InvenTree/helpers.py:409 +#, python-brace-format +msgid "Invalid group: {g}" +msgstr "" + +#: InvenTree/helpers.py:414 +#, python-brace-format +msgid "Duplicate serial: {g}" +msgstr "" + +#: InvenTree/helpers.py:422 +msgid "No serial numbers found" +msgstr "" + +#: InvenTree/helpers.py:426 +#, python-brace-format +msgid "Number of unique serial number ({s}) must match quantity ({q})" +msgstr "" + +#: InvenTree/models.py:59 stock/models.py:1662 +msgid "Attachment" +msgstr "" + +#: InvenTree/models.py:60 +msgid "Select file to attach" +msgstr "" + +#: InvenTree/models.py:62 templates/attachment_table.html:16 +msgid "Comment" +msgstr "" + +#: InvenTree/models.py:62 +msgid "File comment" +msgstr "" + +#: InvenTree/models.py:68 InvenTree/models.py:69 part/models.py:1908 +#: report/templates/report/inventree_test_report_base.html:91 +#: templates/js/stock.js:1041 +msgid "User" +msgstr "" + +#: InvenTree/models.py:72 +msgid "upload date" +msgstr "" + +#: InvenTree/models.py:107 InvenTree/models.py:108 label/models.py:101 +#: part/models.py:686 part/models.py:2049 part/templates/part/params.html:27 +#: report/models.py:179 templates/InvenTree/search.html:137 +#: templates/InvenTree/search.html:289 templates/js/part.js:110 +#: templates/js/part.js:553 templates/js/stock.js:944 +msgid "Name" +msgstr "" + +#: InvenTree/models.py:114 build/models.py:134 +#: build/templates/build/detail.html:21 company/models.py:342 +#: company/models.py:494 company/templates/company/detail.html:27 +#: company/templates/company/manufacturer_part_base.html:72 +#: company/templates/company/supplier_part_base.html:71 +#: company/templates/company/supplier_part_detail.html:31 label/models.py:108 +#: order/models.py:101 order/templates/order/purchase_order_detail.html:168 +#: part/models.py:710 part/templates/part/detail.html:54 +#: part/templates/part/set_category.html:14 report/models.py:192 +#: report/models.py:505 report/models.py:544 +#: report/templates/report/inventree_build_order_base.html:118 +#: templates/InvenTree/search.html:144 templates/InvenTree/search.html:224 +#: templates/InvenTree/search.html:296 +#: templates/InvenTree/settings/header.html:9 templates/js/bom.js:190 +#: templates/js/build.js:677 templates/js/build.js:944 +#: templates/js/company.js:56 templates/js/order.js:183 +#: templates/js/order.js:280 templates/js/part.js:169 templates/js/part.js:252 +#: templates/js/part.js:371 templates/js/part.js:565 templates/js/part.js:643 +#: templates/js/stock.js:554 templates/js/stock.js:956 +#: templates/js/stock.js:1015 +msgid "Description" +msgstr "" + +#: InvenTree/models.py:115 +msgid "Description (optional)" +msgstr "" + +#: InvenTree/models.py:123 +msgid "parent" +msgstr "" + +#: InvenTree/settings.py:493 +msgid "English" +msgstr "" + +#: InvenTree/settings.py:494 +msgid "French" +msgstr "" + +#: InvenTree/settings.py:495 +msgid "German" +msgstr "" + +#: InvenTree/settings.py:496 +msgid "Polish" +msgstr "" + +#: InvenTree/settings.py:497 +msgid "Turkish" +msgstr "" + +#: InvenTree/status.py:93 +msgid "Background worker check failed" +msgstr "" + +#: InvenTree/status.py:97 +msgid "Email backend not configured" +msgstr "" + +#: InvenTree/status.py:100 +msgid "InvenTree system health checks failed" +msgstr "" + +#: InvenTree/status_codes.py:94 InvenTree/status_codes.py:135 +#: InvenTree/status_codes.py:228 +msgid "Pending" +msgstr "" + +#: InvenTree/status_codes.py:95 +msgid "Placed" +msgstr "" + +#: InvenTree/status_codes.py:96 InvenTree/status_codes.py:231 +msgid "Complete" +msgstr "" + +#: InvenTree/status_codes.py:97 InvenTree/status_codes.py:137 +#: InvenTree/status_codes.py:230 +msgid "Cancelled" +msgstr "" + +#: InvenTree/status_codes.py:98 InvenTree/status_codes.py:138 +#: InvenTree/status_codes.py:180 +msgid "Lost" +msgstr "" + +#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:139 +#: InvenTree/status_codes.py:182 +msgid "Returned" +msgstr "" + +#: InvenTree/status_codes.py:136 +#: order/templates/order/sales_order_base.html:124 +msgid "Shipped" +msgstr "" + +#: InvenTree/status_codes.py:176 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:177 +msgid "Attention needed" +msgstr "" + +#: InvenTree/status_codes.py:178 +msgid "Damaged" +msgstr "" + +#: InvenTree/status_codes.py:179 +msgid "Destroyed" +msgstr "" + +#: InvenTree/status_codes.py:181 +msgid "Rejected" +msgstr "" + +#: InvenTree/status_codes.py:229 +msgid "Production" +msgstr "" + +#: InvenTree/validators.py:22 +msgid "Not a valid currency code" +msgstr "" + +#: InvenTree/validators.py:50 +msgid "Invalid character in part name" +msgstr "" + +#: InvenTree/validators.py:63 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "" + +#: InvenTree/validators.py:77 InvenTree/validators.py:91 +#: InvenTree/validators.py:105 +msgid "Reference must match pattern" +msgstr "" + +#: InvenTree/validators.py:113 +#, python-brace-format +msgid "Illegal character in name ({x})" +msgstr "" + +#: InvenTree/validators.py:132 InvenTree/validators.py:148 +msgid "Overage value must not be negative" +msgstr "" + +#: InvenTree/validators.py:150 +msgid "Overage must not exceed 100%" +msgstr "" + +#: InvenTree/validators.py:157 +msgid "Overage must be an integer value or a percentage" +msgstr "" + +#: InvenTree/views.py:587 +msgid "Delete Item" +msgstr "" + +#: InvenTree/views.py:636 +msgid "Check box to confirm item deletion" +msgstr "" + +#: InvenTree/views.py:651 templates/InvenTree/settings/user.html:18 +msgid "Edit User Information" +msgstr "" + +#: InvenTree/views.py:662 templates/InvenTree/settings/user.html:22 +msgid "Set Password" +msgstr "" + +#: InvenTree/views.py:681 +msgid "Password fields must match" +msgstr "" + +#: InvenTree/views.py:887 templates/navbar.html:95 +msgid "System Information" +msgstr "" + +#: barcodes/api.py:53 barcodes/api.py:150 +msgid "Must provide barcode_data parameter" +msgstr "" + +#: barcodes/api.py:126 +msgid "No match found for barcode data" +msgstr "" + +#: barcodes/api.py:128 +msgid "Match found for barcode data" +msgstr "" + +#: barcodes/api.py:153 +msgid "Must provide stockitem parameter" +msgstr "" + +#: barcodes/api.py:160 +msgid "No matching stock item found" +msgstr "" + +#: barcodes/api.py:190 +msgid "Barcode already matches StockItem object" +msgstr "" + +#: barcodes/api.py:194 +msgid "Barcode already matches StockLocation object" +msgstr "" + +#: barcodes/api.py:198 +msgid "Barcode already matches Part object" +msgstr "" + +#: barcodes/api.py:204 barcodes/api.py:216 +msgid "Barcode hash already matches StockItem object" +msgstr "" + +#: barcodes/api.py:222 +msgid "Barcode associated with StockItem" +msgstr "" + +#: build/forms.py:34 +msgid "Build Order reference" +msgstr "" + +#: build/forms.py:35 +msgid "Order target date" +msgstr "" + +#: build/forms.py:39 build/templates/build/build_base.html:107 +#: build/templates/build/detail.html:121 order/forms.py:109 order/forms.py:144 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:117 +#: report/templates/report/inventree_build_order_base.html:126 +#: templates/js/build.js:723 templates/js/order.js:200 +#: templates/js/order.js:298 +msgid "Target Date" +msgstr "" + +#: build/forms.py:40 build/models.py:224 +msgid "" +"Target date for build completion. Build will be overdue after this date." +msgstr "" + +#: build/forms.py:45 build/forms.py:87 build/forms.py:257 build/models.py:1109 +#: build/templates/build/auto_allocate.html:17 +#: build/templates/build/build_base.html:94 +#: build/templates/build/detail.html:31 common/models.py:703 +#: company/forms.py:176 company/templates/company/supplier_part_pricing.html:77 +#: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261 +#: order/forms.py:278 order/models.py:593 order/models.py:784 +#: order/templates/order/order_wizard/select_parts.html:32 +#: order/templates/order/purchase_order_detail.html:200 +#: order/templates/order/sales_order_detail.html:70 +#: order/templates/order/sales_order_detail.html:77 +#: order/templates/order/sales_order_detail.html:159 +#: order/templates/order/sales_order_detail.html:224 part/forms.py:342 +#: part/forms.py:371 part/forms.py:387 part/models.py:2178 +#: part/templates/part/allocation.html:19 +#: part/templates/part/allocation.html:53 +#: part/templates/part/part_pricing.html:11 +#: part/templates/part/part_pricing.html:18 +#: part/templates/part/sale_prices.html:85 +#: report/templates/report/inventree_build_order_base.html:114 +#: report/templates/report/inventree_po_report.html:91 +#: report/templates/report/inventree_so_report.html:91 +#: report/templates/report/inventree_test_report_base.html:77 +#: stock/forms.py:175 stock/forms.py:308 stock/models.py:1566 +#: stock/templates/stock/item_base.html:244 +#: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364 +#: templates/js/bom.js:205 templates/js/build.js:420 templates/js/build.js:954 +#: templates/js/stock.js:1033 templates/js/stock.js:1271 +msgid "Quantity" +msgstr "" + +#: build/forms.py:46 +msgid "Number of items to build" +msgstr "" + +#: build/forms.py:88 +msgid "Enter quantity for build output" +msgstr "" + +#: build/forms.py:92 order/forms.py:233 stock/forms.py:118 +msgid "Serial Numbers" +msgstr "" + +#: build/forms.py:94 +msgid "Enter serial numbers for build outputs" +msgstr "" + +#: build/forms.py:100 +msgid "Confirm creation of build output" +msgstr "" + +#: build/forms.py:121 +msgid "Confirm deletion of build output" +msgstr "" + +#: build/forms.py:142 +msgid "Confirm unallocation of stock" +msgstr "" + +#: build/forms.py:166 +msgid "Confirm stock allocation" +msgstr "" + +#: build/forms.py:189 +msgid "Mark build as complete" +msgstr "" + +#: build/forms.py:213 build/templates/build/auto_allocate.html:18 +#: order/forms.py:82 stock/forms.py:347 +#: stock/templates/stock/item_base.html:274 +#: stock/templates/stock/stock_adjust.html:17 +#: templates/InvenTree/search.html:260 templates/js/barcode.js:363 +#: templates/js/barcode.js:531 templates/js/build.js:434 +#: templates/js/stock.js:641 +msgid "Location" +msgstr "" + +#: build/forms.py:214 +msgid "Location of completed parts" +msgstr "" + +#: build/forms.py:219 +msgid "Confirm incomplete" +msgstr "" + +#: build/forms.py:220 +msgid "Confirm completion with incomplete stock allocation" +msgstr "" + +#: build/forms.py:223 +msgid "Confirm build completion" +msgstr "" + +#: build/forms.py:243 +msgid "Confirm cancel" +msgstr "" + +#: build/forms.py:243 build/views.py:66 +msgid "Confirm build cancellation" +msgstr "" + +#: build/forms.py:257 +msgid "Select quantity of stock to allocate" +msgstr "" + +#: build/models.py:65 build/templates/build/build_base.html:9 +#: build/templates/build/build_base.html:38 +#: part/templates/part/allocation.html:23 +#: report/templates/report/inventree_build_order_base.html:106 +msgid "Build Order" +msgstr "" + +#: build/models.py:66 build/templates/build/index.html:8 +#: build/templates/build/index.html:15 order/templates/order/so_builds.html:12 +#: order/templates/order/so_navbar.html:19 +#: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55 +#: part/templates/part/navbar.html:58 templates/InvenTree/index.html:183 +#: templates/InvenTree/search.html:185 +#: templates/InvenTree/settings/tabs.html:31 users/models.py:41 +msgid "Build Orders" +msgstr "" + +#: build/models.py:126 +msgid "Build Order Reference" +msgstr "" + +#: build/models.py:127 order/models.py:99 order/models.py:595 +#: order/templates/order/purchase_order_detail.html:195 +#: order/templates/order/sales_order_detail.html:219 part/models.py:2187 +#: report/templates/report/inventree_po_report.html:92 +#: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197 +#: templates/js/build.js:509 templates/js/build.js:948 +msgid "Reference" +msgstr "" + +#: build/models.py:137 +msgid "Brief description of the build" +msgstr "" + +#: build/models.py:146 build/templates/build/build_base.html:124 +#: build/templates/build/detail.html:77 +msgid "Parent Build" +msgstr "" + +#: build/models.py:147 +msgid "BuildOrder to which this build is allocated" +msgstr "" + +#: build/models.py:152 build/templates/build/auto_allocate.html:16 +#: build/templates/build/build_base.html:89 +#: build/templates/build/detail.html:26 company/models.py:669 +#: order/models.py:637 order/models.py:669 +#: order/templates/order/order_wizard/select_parts.html:30 +#: order/templates/order/purchase_order_detail.html:156 +#: order/templates/order/receive_parts.html:19 +#: order/templates/order/sales_order_detail.html:207 part/models.py:321 +#: part/models.py:1876 part/models.py:1888 part/models.py:1906 +#: part/models.py:1981 part/models.py:2077 part/models.py:2162 +#: part/templates/part/part_app_base.html:8 +#: part/templates/part/part_pricing.html:14 part/templates/part/related.html:29 +#: part/templates/part/set_category.html:13 +#: report/templates/report/inventree_build_order_base.html:110 +#: report/templates/report/inventree_po_report.html:90 +#: report/templates/report/inventree_so_report.html:90 +#: templates/InvenTree/search.html:112 templates/InvenTree/search.html:210 +#: templates/js/barcode.js:362 templates/js/bom.js:163 +#: templates/js/build.js:681 templates/js/build.js:921 +#: templates/js/company.js:140 templates/js/company.js:238 +#: templates/js/part.js:233 templates/js/part.js:338 templates/js/stock.js:523 +#: templates/js/stock.js:1343 +msgid "Part" +msgstr "" + +#: build/models.py:160 +msgid "Select part to build" +msgstr "" + +#: build/models.py:165 +msgid "Sales Order Reference" +msgstr "" + +#: build/models.py:169 +msgid "SalesOrder to which this build is allocated" +msgstr "" + +#: build/models.py:174 +msgid "Source Location" +msgstr "" + +#: build/models.py:178 +msgid "" +"Select location to take stock from for this build (leave blank to take from " +"any stock location)" +msgstr "" + +#: build/models.py:183 +msgid "Destination Location" +msgstr "" + +#: build/models.py:187 +msgid "Select location where the completed items will be stored" +msgstr "" + +#: build/models.py:191 +msgid "Build Quantity" +msgstr "" + +#: build/models.py:194 +msgid "Number of stock items to build" +msgstr "" + +#: build/models.py:198 +msgid "Completed items" +msgstr "" + +#: build/models.py:200 +msgid "Number of stock items which have been completed" +msgstr "" + +#: build/models.py:204 part/templates/part/part_base.html:160 +msgid "Build Status" +msgstr "" + +#: build/models.py:208 +msgid "Build status code" +msgstr "" + +#: build/models.py:212 stock/models.py:432 +msgid "Batch Code" +msgstr "" + +#: build/models.py:216 +msgid "Batch code for this build output" +msgstr "" + +#: build/models.py:219 order/models.py:105 part/models.py:882 +#: part/templates/part/detail.html:126 templates/js/order.js:293 +msgid "Creation Date" +msgstr "" + +#: build/models.py:223 order/models.py:451 +msgid "Target completion date" +msgstr "" + +#: build/models.py:227 order/models.py:218 +msgid "Completion Date" +msgstr "" + +#: build/models.py:233 +msgid "completed by" +msgstr "" + +#: build/models.py:241 +msgid "Issued by" +msgstr "" + +#: build/models.py:242 +msgid "User who issued this build order" +msgstr "" + +#: build/models.py:250 build/templates/build/build_base.html:145 +#: build/templates/build/detail.html:105 order/models.py:119 +#: order/templates/order/order_base.html:138 +#: order/templates/order/sales_order_base.html:138 part/models.py:886 +#: report/templates/report/inventree_build_order_base.html:159 +msgid "Responsible" +msgstr "" + +#: build/models.py:251 +msgid "User responsible for this build order" +msgstr "" + +#: build/models.py:256 build/templates/build/detail.html:91 +#: company/templates/company/manufacturer_part_base.html:79 +#: company/templates/company/manufacturer_part_detail.html:28 +#: company/templates/company/supplier_part_base.html:78 +#: company/templates/company/supplier_part_detail.html:28 +#: part/templates/part/detail.html:83 part/templates/part/part_base.html:101 +#: stock/models.py:426 stock/templates/stock/item_base.html:334 +msgid "External Link" +msgstr "" + +#: build/models.py:257 part/models.py:744 stock/models.py:428 +msgid "Link to external URL" +msgstr "" + +#: build/models.py:261 build/templates/build/navbar.html:59 +#: company/models.py:135 company/models.py:501 +#: company/templates/company/navbar.html:70 +#: company/templates/company/navbar.html:73 order/models.py:123 +#: order/models.py:597 order/templates/order/po_navbar.html:29 +#: order/templates/order/po_navbar.html:32 +#: order/templates/order/purchase_order_detail.html:234 +#: order/templates/order/sales_order_detail.html:264 +#: order/templates/order/so_navbar.html:33 +#: order/templates/order/so_navbar.html:36 part/models.py:871 +#: part/templates/part/navbar.html:128 +#: report/templates/report/inventree_build_order_base.html:173 +#: stock/forms.py:173 stock/forms.py:317 stock/forms.py:349 stock/forms.py:377 +#: stock/models.py:498 stock/models.py:1558 stock/models.py:1668 +#: stock/templates/stock/navbar.html:57 templates/js/barcode.js:37 +#: templates/js/bom.js:333 templates/js/stock.js:128 templates/js/stock.js:671 +msgid "Notes" +msgstr "" + +#: build/models.py:262 +msgid "Extra build notes" +msgstr "" + +#: build/models.py:673 +msgid "No build output specified" +msgstr "" + +#: build/models.py:676 +msgid "Build output is already completed" +msgstr "" + +#: build/models.py:679 +msgid "Build output does not match Build Order" +msgstr "" + +#: build/models.py:754 +msgid "Completed build output" +msgstr "" + +#: build/models.py:1002 +msgid "BuildItem must be unique for build, stock_item and install_into" +msgstr "" + +#: build/models.py:1024 +msgid "Build item must specify a build output" +msgstr "" + +#: build/models.py:1029 +#, python-brace-format +msgid "Selected stock item not found in BOM for part '{p}'" +msgstr "" + +#: build/models.py:1033 +#, python-brace-format +msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" +msgstr "" + +#: build/models.py:1040 order/models.py:758 +msgid "StockItem is over-allocated" +msgstr "" + +#: build/models.py:1044 order/models.py:761 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: build/models.py:1048 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1088 stock/templates/stock/item_base.html:306 +#: templates/InvenTree/search.html:183 templates/js/build.js:655 +#: templates/navbar.html:29 +msgid "Build" +msgstr "" + +#: build/models.py:1089 +msgid "Build to allocate parts" +msgstr "" + +#: build/models.py:1096 part/templates/part/allocation.html:18 +#: part/templates/part/allocation.html:24 +#: part/templates/part/allocation.html:31 +#: part/templates/part/allocation.html:49 +#: stock/templates/stock/item_base.html:8 +#: stock/templates/stock/item_base.html:93 +#: stock/templates/stock/item_base.html:328 +#: stock/templates/stock/stock_adjust.html:16 templates/js/build.js:771 +#: templates/js/stock.js:1004 templates/js/stock.js:1262 +msgid "Stock Item" +msgstr "" + +#: build/models.py:1097 +msgid "Source stock item" +msgstr "" + +#: build/models.py:1110 +msgid "Stock quantity to allocate to build" +msgstr "" + +#: build/models.py:1118 +msgid "Install into" +msgstr "" + +#: build/models.py:1119 +msgid "Destination stock item" +msgstr "" + +#: build/templates/build/allocate.html:7 +msgid "Allocate Parts" +msgstr "" + +#: build/templates/build/allocate.html:15 +msgid "Incomplete Build Ouputs" +msgstr "" + +#: build/templates/build/allocate.html:21 +msgid "Build order has been completed" +msgstr "" + +#: build/templates/build/allocate.html:26 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/allocate.html:27 +msgid "Create New Output" +msgstr "" + +#: build/templates/build/allocate.html:30 +msgid "Order required parts" +msgstr "" + +#: build/templates/build/allocate.html:31 +#: company/templates/company/detail_manufacturer_part.html:33 +#: company/templates/company/detail_supplier_part.html:32 order/views.py:794 +#: part/templates/part/category.html:127 +msgid "Order Parts" +msgstr "" + +#: build/templates/build/allocate.html:34 templates/js/build.js:590 +msgid "Unallocate stock" +msgstr "" + +#: build/templates/build/allocate.html:35 build/views.py:338 build/views.py:784 +msgid "Unallocate Stock" +msgstr "" + +#: build/templates/build/allocate.html:49 +msgid "Create a new build output" +msgstr "" + +#: build/templates/build/allocate.html:50 +msgid "No incomplete build outputs remain." +msgstr "" + +#: build/templates/build/allocate.html:51 +msgid "Create a new build output using the button above" +msgstr "" + +#: build/templates/build/attachments.html:12 +#: build/templates/build/navbar.html:49 build/templates/build/navbar.html:52 +#: order/templates/order/po_navbar.html:26 +#: order/templates/order/so_navbar.html:29 part/templates/part/navbar.html:119 +#: part/templates/part/navbar.html:122 stock/templates/stock/navbar.html:47 +#: stock/templates/stock/navbar.html:50 +msgid "Attachments" +msgstr "" + +#: build/templates/build/auto_allocate.html:9 +msgid "Automatically Allocate Stock" +msgstr "" + +#: build/templates/build/auto_allocate.html:10 +msgid "" +"The following stock items will be allocated to the specified build output" +msgstr "" + +#: build/templates/build/auto_allocate.html:37 +msgid "No stock items found that can be automatically allocated to this build" +msgstr "" + +#: build/templates/build/auto_allocate.html:39 +msgid "Stock items will have to be manually allocated" +msgstr "" + +#: build/templates/build/build_base.html:16 +#, python-format +msgid "This Build Order is allocated to Sales Order %(link)s" +msgstr "" + +#: build/templates/build/build_base.html:22 +#, python-format +msgid "This Build Order is a child of Build Order %(link)s" +msgstr "" + +#: build/templates/build/build_base.html:40 +#: company/templates/company/company_base.html:40 +#: company/templates/company/manufacturer_part_base.html:25 +#: company/templates/company/supplier_part_base.html:26 +#: order/templates/order/order_base.html:26 +#: order/templates/order/sales_order_base.html:35 +#: part/templates/part/category.html:18 part/templates/part/part_base.html:29 +#: stock/templates/stock/item_base.html:118 +#: stock/templates/stock/location.html:31 +msgid "Admin view" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: build/templates/build/build_base.html:111 +#: order/templates/order/order_base.html:32 +#: order/templates/order/order_base.html:86 +#: order/templates/order/sales_order_base.html:41 +#: order/templates/order/sales_order_base.html:86 +#: templates/js/table_filters.js:240 templates/js/table_filters.js:259 +#: templates/js/table_filters.js:276 +msgid "Overdue" +msgstr "" + +#: build/templates/build/build_base.html:55 +msgid "Print actions" +msgstr "" + +#: build/templates/build/build_base.html:59 +msgid "Print Build Order" +msgstr "" + +#: build/templates/build/build_base.html:65 +msgid "Build actions" +msgstr "" + +#: build/templates/build/build_base.html:69 +msgid "Edit Build" +msgstr "" + +#: build/templates/build/build_base.html:71 +#: build/templates/build/build_base.html:179 +msgid "Complete Build" +msgstr "" + +#: build/templates/build/build_base.html:72 +#: build/templates/build/build_base.html:170 build/views.py:57 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:85 +#: build/templates/build/detail.html:11 +msgid "Build Details" +msgstr "" + +#: build/templates/build/build_base.html:99 +#: build/templates/build/detail.html:59 order/models.py:445 +#: order/templates/order/receive_parts.html:24 +#: stock/templates/stock/item_base.html:392 templates/InvenTree/search.html:252 +#: templates/js/barcode.js:119 templates/js/build.js:710 +#: templates/js/order.js:187 templates/js/order.js:285 +#: templates/js/stock.js:628 templates/js/stock.js:1279 +msgid "Status" +msgstr "" + +#: build/templates/build/build_base.html:111 +#, python-format +msgid "This build was due on %(target)s" +msgstr "" + +#: build/templates/build/build_base.html:118 +#: build/templates/build/detail.html:64 +msgid "Progress" +msgstr "" + +#: build/templates/build/build_base.html:131 +#: build/templates/build/detail.html:84 order/models.py:667 +#: order/templates/order/sales_order_base.html:9 +#: order/templates/order/sales_order_base.html:33 +#: order/templates/order/sales_order_ship.html:25 +#: part/templates/part/allocation.html:30 +#: report/templates/report/inventree_build_order_base.html:136 +#: report/templates/report/inventree_so_report.html:77 +#: stock/templates/stock/item_base.html:268 templates/js/order.js:245 +msgid "Sales Order" +msgstr "" + +#: build/templates/build/build_base.html:138 +#: build/templates/build/detail.html:98 +#: report/templates/report/inventree_build_order_base.html:153 +msgid "Issued By" +msgstr "" + +#: build/templates/build/build_children.html:10 +#: build/templates/build/navbar.html:42 +msgid "Child Build Orders" +msgstr "" + +#: build/templates/build/build_output.html:10 +#: build/templates/build/navbar.html:35 build/templates/build/navbar.html:38 +msgid "Build Outputs" +msgstr "" + +#: build/templates/build/build_output_create.html:7 +msgid "The Bill of Materials contains trackable parts" +msgstr "" + +#: build/templates/build/build_output_create.html:8 +msgid "Build outputs must be generated individually." +msgstr "" + +#: build/templates/build/build_output_create.html:9 +msgid "Multiple build outputs will be created based on the quantity specified." +msgstr "" + +#: build/templates/build/build_output_create.html:15 +msgid "Trackable parts can have serial numbers specified" +msgstr "" + +#: build/templates/build/build_output_create.html:16 +msgid "Enter serial numbers to generate multiple single build outputs" +msgstr "" + +#: build/templates/build/cancel.html:5 +msgid "Are you sure you wish to cancel this build?" +msgstr "" + +#: build/templates/build/complete.html:8 +msgid "Build can be completed" +msgstr "" + +#: build/templates/build/complete.html:12 +msgid "Build cannot be completed" +msgstr "" + +#: build/templates/build/complete.html:15 +msgid "Incompleted build outputs remain" +msgstr "" + +#: build/templates/build/complete.html:18 +msgid "Required build quantity has not been completed" +msgstr "" + +#: build/templates/build/complete_output.html:9 +msgid "Stock allocation is complete" +msgstr "" + +#: build/templates/build/complete_output.html:13 +msgid "Stock allocation is incomplete" +msgstr "" + +#: build/templates/build/complete_output.html:19 +msgid "parts have not been fully allocated" +msgstr "" + +#: build/templates/build/complete_output.html:40 +msgid "The following items will be created" +msgstr "" + +#: build/templates/build/create_build_item.html:7 +msgid "Select a stock item to allocate to the selected build output" +msgstr "" + +#: build/templates/build/create_build_item.html:11 +#, python-format +msgid "" +"The allocated stock will be installed into the following build output:
    " +"%(output)s" +msgstr "" + +#: build/templates/build/create_build_item.html:17 +#, python-format +msgid "No stock available for %(part)s" +msgstr "" + +#: build/templates/build/delete_build_item.html:8 +msgid "Are you sure you want to unallocate this stock?" +msgstr "" + +#: build/templates/build/delete_build_item.html:11 +msgid "The selected stock will be unallocated from the build output" +msgstr "" + +#: build/templates/build/detail.html:35 +msgid "Stock Source" +msgstr "" + +#: build/templates/build/detail.html:40 +msgid "Stock can be taken from any available location." +msgstr "" + +#: build/templates/build/detail.html:46 stock/forms.py:169 stock/forms.py:375 +msgid "Destination" +msgstr "" + +#: build/templates/build/detail.html:53 +msgid "Destination location not specified" +msgstr "" + +#: build/templates/build/detail.html:70 +#: stock/templates/stock/item_base.html:292 templates/js/stock.js:636 +#: templates/js/stock.js:1286 templates/js/table_filters.js:107 +#: templates/js/table_filters.js:201 +msgid "Batch" +msgstr "" + +#: build/templates/build/detail.html:116 +#: order/templates/order/order_base.html:111 +#: order/templates/order/sales_order_base.html:111 templates/js/build.js:718 +msgid "Created" +msgstr "" + +#: build/templates/build/detail.html:127 +msgid "No target date set" +msgstr "" + +#: build/templates/build/detail.html:132 templates/js/build.js:696 +#: templates/js/build.js:728 +msgid "Completed" +msgstr "" + +#: build/templates/build/detail.html:136 +msgid "Build not complete" +msgstr "" + +#: build/templates/build/edit_build_item.html:7 +msgid "Alter the quantity of stock allocated to the build output" +msgstr "" + +#: build/templates/build/index.html:28 build/views.py:657 +msgid "New Build Order" +msgstr "" + +#: build/templates/build/index.html:37 build/templates/build/index.html:38 +msgid "Print Build Orders" +msgstr "" + +#: build/templates/build/index.html:43 +#: order/templates/order/purchase_orders.html:27 +#: order/templates/order/sales_orders.html:27 +msgid "Display calendar view" +msgstr "" + +#: build/templates/build/index.html:46 +#: order/templates/order/purchase_orders.html:30 +#: order/templates/order/sales_orders.html:30 +msgid "Display list view" +msgstr "" + +#: build/templates/build/navbar.html:12 +msgid "Build Order Details" +msgstr "" + +#: build/templates/build/navbar.html:15 +#: company/templates/company/navbar.html:15 +#: order/templates/order/po_navbar.html:14 +#: order/templates/order/so_navbar.html:15 part/templates/part/navbar.html:15 +msgid "Details" +msgstr "" + +#: build/templates/build/navbar.html:20 build/templates/build/navbar.html:23 +#: build/templates/build/parts.html:11 +msgid "Required Parts" +msgstr "" + +#: build/templates/build/navbar.html:27 build/templates/build/navbar.html:30 +msgid "In Progress" +msgstr "" + +#: build/templates/build/navbar.html:45 +msgid "Child Builds" +msgstr "" + +#: build/templates/build/navbar.html:56 +msgid "Build Order Notes" +msgstr "" + +#: build/templates/build/notes.html:12 +msgid "Build Notes" +msgstr "" + +#: build/templates/build/notes.html:14 company/templates/company/notes.html:13 +#: order/templates/order/order_notes.html:15 +#: order/templates/order/sales_order_notes.html:16 +#: part/templates/part/notes.html:14 stock/templates/stock/item_notes.html:15 +msgid "Edit notes" +msgstr "" + +#: build/templates/build/notes.html:26 company/templates/company/notes.html:24 +#: order/templates/order/order_notes.html:27 +#: order/templates/order/sales_order_notes.html:29 +#: part/templates/part/notes.html:27 stock/templates/stock/item_base.html:470 +#: stock/templates/stock/item_notes.html:26 +msgid "Save" +msgstr "" + +#: build/templates/build/unallocate.html:10 +msgid "Are you sure you wish to unallocate all stock for this build?" +msgstr "" + +#: build/templates/build/unallocate.html:12 +msgid "All incomplete stock allocations will be removed from the build" +msgstr "" + +#: build/views.py:77 +msgid "Build was cancelled" +msgstr "" + +#: build/views.py:91 +msgid "Allocate Stock" +msgstr "" + +#: build/views.py:154 build/views.py:314 build/views.py:485 +msgid "Build output must be specified" +msgstr "" + +#: build/views.py:168 +msgid "Allocated stock to build output" +msgstr "" + +#: build/views.py:180 +msgid "Create Build Output" +msgstr "" + +#: build/views.py:203 stock/models.py:969 stock/views.py:1789 +msgid "Serial numbers already exist" +msgstr "" + +#: build/views.py:212 +msgid "Serial numbers required for trackable build output" +msgstr "" + +#: build/views.py:278 +msgid "Delete Build Output" +msgstr "" + +#: build/views.py:299 build/views.py:383 +msgid "Confirm unallocation of build stock" +msgstr "" + +#: build/views.py:300 build/views.py:384 stock/views.py:425 +msgid "Check the confirmation box" +msgstr "" + +#: build/views.py:312 +msgid "Build output does not match build" +msgstr "" + +#: build/views.py:326 +msgid "Build output deleted" +msgstr "" + +#: build/views.py:408 +msgid "Complete Build Order" +msgstr "" + +#: build/views.py:414 +msgid "Build order cannot be completed" +msgstr "" + +#: build/views.py:425 +msgid "Completed build order" +msgstr "" + +#: build/views.py:441 +msgid "Complete Build Output" +msgstr "" + +#: build/views.py:476 +msgid "Quantity to complete cannot exceed build output quantity" +msgstr "" + +#: build/views.py:482 +msgid "Confirm completion of incomplete build" +msgstr "" + +#: build/views.py:573 +msgid "Build output completed" +msgstr "" + +#: build/views.py:711 +msgid "Created new build" +msgstr "" + +#: build/views.py:732 +msgid "Edit Build Order Details" +msgstr "" + +#: build/views.py:765 +msgid "Edited build" +msgstr "" + +#: build/views.py:774 +msgid "Delete Build Order" +msgstr "" + +#: build/views.py:789 +msgid "Removed parts from build allocation" +msgstr "" + +#: build/views.py:801 +msgid "Allocate stock to build output" +msgstr "" + +#: build/views.py:844 +msgid "Item must be currently in stock" +msgstr "" + +#: build/views.py:850 +msgid "Stock item is over-allocated" +msgstr "" + +#: build/views.py:851 templates/js/bom.js:230 templates/js/build.js:519 +#: templates/js/build.js:778 templates/js/build.js:961 +msgid "Available" +msgstr "" + +#: build/views.py:853 +msgid "Stock item must be selected" +msgstr "" + +#: build/views.py:1016 +msgid "Edit Stock Allocation" +msgstr "" + +#: build/views.py:1020 +msgid "Updated Build Item" +msgstr "" + +#: build/views.py:1049 +msgid "Add Build Order Attachment" +msgstr "" + +#: build/views.py:1062 order/views.py:110 order/views.py:162 part/views.py:172 +#: stock/views.py:277 +msgid "Added attachment" +msgstr "" + +#: build/views.py:1098 order/views.py:189 order/views.py:210 +msgid "Edit Attachment" +msgstr "" + +#: build/views.py:1108 order/views.py:193 order/views.py:214 +msgid "Attachment updated" +msgstr "" + +#: build/views.py:1118 order/views.py:229 order/views.py:243 +msgid "Delete Attachment" +msgstr "" + +#: build/views.py:1123 order/views.py:235 order/views.py:249 stock/views.py:333 +msgid "Deleted attachment" +msgstr "" + +#: common/models.py:56 +msgid "InvenTree Instance Name" +msgstr "" + +#: common/models.py:58 +msgid "String descriptor for the server instance" +msgstr "" + +#: common/models.py:62 +msgid "Use instance name" +msgstr "" + +#: common/models.py:63 +msgid "Use the instance name in the title-bar" +msgstr "" + +#: common/models.py:69 company/models.py:97 company/models.py:98 +msgid "Company name" +msgstr "" + +#: common/models.py:70 +msgid "Internal company name" +msgstr "" + +#: common/models.py:75 +msgid "Base URL" +msgstr "" + +#: common/models.py:76 +msgid "Base URL for server instance" +msgstr "" + +#: common/models.py:82 +msgid "Default Currency" +msgstr "" + +#: common/models.py:83 +msgid "Default currency" +msgstr "" + +#: common/models.py:89 +msgid "Download from URL" +msgstr "" + +#: common/models.py:90 +msgid "Allow download of remote images and files from external URL" +msgstr "" + +#: common/models.py:96 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:97 +msgid "Enable barcode scanner support" +msgstr "" + +#: common/models.py:103 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:104 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:108 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:109 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:115 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:116 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:122 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:123 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:129 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:130 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:136 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:137 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:143 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:144 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:150 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:151 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:157 part/models.py:2079 part/templates/part/detail.html:160 +#: report/models.py:185 stock/forms.py:259 templates/js/table_filters.js:24 +#: templates/js/table_filters.js:310 +msgid "Template" +msgstr "" + +#: common/models.py:158 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:164 part/models.py:834 part/templates/part/detail.html:170 +#: templates/js/table_filters.js:123 templates/js/table_filters.js:322 +msgid "Assembly" +msgstr "" + +#: common/models.py:165 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:171 part/models.py:840 part/templates/part/detail.html:180 +#: templates/js/table_filters.js:326 +msgid "Component" +msgstr "" + +#: common/models.py:172 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:178 part/models.py:851 part/templates/part/detail.html:200 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:179 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:185 part/models.py:856 part/templates/part/detail.html:210 +#: templates/js/table_filters.js:334 +msgid "Salable" +msgstr "" + +#: common/models.py:186 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:192 part/models.py:846 part/templates/part/detail.html:190 +#: templates/js/table_filters.js:32 templates/js/table_filters.js:338 +msgid "Trackable" +msgstr "" + +#: common/models.py:193 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:199 part/models.py:866 part/templates/part/detail.html:150 +#: templates/js/table_filters.js:28 +msgid "Virtual" +msgstr "" + +#: common/models.py:200 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:206 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:207 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:213 +msgid "Debug Mode" +msgstr "" + +#: common/models.py:214 +msgid "Generate reports in debug mode (HTML output)" +msgstr "" + +#: common/models.py:220 +msgid "Page Size" +msgstr "" + +#: common/models.py:221 +msgid "Default page size for PDF reports" +msgstr "" + +#: common/models.py:231 +msgid "Test Reports" +msgstr "" + +#: common/models.py:232 +msgid "Enable generation of test reports" +msgstr "" + +#: common/models.py:238 +msgid "Stock Expiry" +msgstr "" + +#: common/models.py:239 +msgid "Enable stock expiry functionality" +msgstr "" + +#: common/models.py:245 +msgid "Sell Expired Stock" +msgstr "" + +#: common/models.py:246 +msgid "Allow sale of expired stock" +msgstr "" + +#: common/models.py:252 +msgid "Stock Stale Time" +msgstr "" + +#: common/models.py:253 +msgid "Number of days stock items are considered stale before expiring" +msgstr "" + +#: common/models.py:255 part/templates/part/detail.html:121 +msgid "days" +msgstr "" + +#: common/models.py:260 +msgid "Build Expired Stock" +msgstr "" + +#: common/models.py:261 +msgid "Allow building with expired stock" +msgstr "" + +#: common/models.py:267 +msgid "Stock Ownership Control" +msgstr "" + +#: common/models.py:268 +msgid "Enable ownership control over stock locations and items" +msgstr "" + +#: common/models.py:274 +msgid "Group by Part" +msgstr "" + +#: common/models.py:275 +msgid "Group stock items by part reference in table views" +msgstr "" + +#: common/models.py:281 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:282 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:288 +msgid "Build Order Reference Prefix" +msgstr "" + +#: common/models.py:289 +msgid "Prefix value for build order reference" +msgstr "" + +#: common/models.py:294 +msgid "Build Order Reference Regex" +msgstr "" + +#: common/models.py:295 +msgid "Regular expression pattern for matching build order reference" +msgstr "" + +#: common/models.py:299 +msgid "Sales Order Reference Prefix" +msgstr "" + +#: common/models.py:300 +msgid "Prefix value for sales order reference" +msgstr "" + +#: common/models.py:305 +msgid "Purchase Order Reference Prefix" +msgstr "" + +#: common/models.py:306 +msgid "Prefix value for purchase order reference" +msgstr "" + +#: common/models.py:529 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:531 +msgid "Settings value" +msgstr "" + +#: common/models.py:566 +msgid "Must be an integer value" +msgstr "" + +#: common/models.py:589 +msgid "Value must be a boolean value" +msgstr "" + +#: common/models.py:600 +msgid "Value must be an integer value" +msgstr "" + +#: common/models.py:623 +msgid "Key string must be unique" +msgstr "" + +#: common/models.py:704 company/forms.py:177 +msgid "Price break quantity" +msgstr "" + +#: common/models.py:712 company/templates/company/supplier_part_pricing.html:82 +#: part/templates/part/sale_prices.html:90 templates/js/bom.js:255 +msgid "Price" +msgstr "" + +#: common/models.py:713 +msgid "Unit price at specified quantity" +msgstr "" + +#: common/models.py:736 +msgid "Default" +msgstr "" + +#: common/templates/common/edit_setting.html:11 +msgid "Current value" +msgstr "" + +#: common/views.py:25 +msgid "Change Setting" +msgstr "" + +#: common/views.py:94 +msgid "Supplied value is not allowed" +msgstr "" + +#: common/views.py:103 +msgid "Supplied value must be a boolean" +msgstr "" + +#: company/forms.py:38 company/models.py:145 +#: company/templates/company/detail.html:42 +msgid "Currency" +msgstr "" + +#: company/forms.py:39 company/models.py:147 +msgid "Default currency used for this company" +msgstr "" + +#: company/forms.py:77 part/forms.py:46 +msgid "URL" +msgstr "" + +#: company/forms.py:78 part/forms.py:47 +msgid "Image URL" +msgstr "" + +#: company/forms.py:118 +msgid "Single Price" +msgstr "" + +#: company/forms.py:120 +msgid "Single quantity price" +msgstr "" + +#: company/forms.py:128 company/models.py:324 +msgid "Select manufacturer" +msgstr "" + +#: company/forms.py:134 company/models.py:331 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/forms.py:136 company/models.py:330 +#: company/templates/company/manufacturer_part_base.html:89 +#: company/templates/company/manufacturer_part_detail.html:26 +#: company/templates/company/supplier_part_base.html:101 +#: company/templates/company/supplier_part_detail.html:35 +#: order/templates/order/purchase_order_detail.html:183 part/bom.py:171 +#: part/bom.py:242 templates/js/company.js:181 templates/js/company.js:307 +msgid "MPN" +msgstr "" + +#: company/models.py:102 +msgid "Company description" +msgstr "" + +#: company/models.py:103 +msgid "Description of the company" +msgstr "" + +#: company/models.py:107 company/templates/company/company_base.html:70 +#: company/templates/company/detail.html:33 templates/js/company.js:60 +msgid "Website" +msgstr "" + +#: company/models.py:107 +msgid "Company website URL" +msgstr "" + +#: company/models.py:110 company/templates/company/company_base.html:77 +msgid "Address" +msgstr "" + +#: company/models.py:111 +msgid "Company address" +msgstr "" + +#: company/models.py:114 +msgid "Phone number" +msgstr "" + +#: company/models.py:115 +msgid "Contact phone number" +msgstr "" + +#: company/models.py:118 company/templates/company/company_base.html:91 +msgid "Email" +msgstr "" + +#: company/models.py:118 +msgid "Contact email address" +msgstr "" + +#: company/models.py:121 company/templates/company/company_base.html:98 +msgid "Contact" +msgstr "" + +#: company/models.py:122 +msgid "Point of contact" +msgstr "" + +#: company/models.py:124 company/models.py:336 company/models.py:488 +#: order/models.py:103 part/models.py:743 +#: report/templates/report/inventree_build_order_base.html:165 +#: stock/models.py:1560 templates/js/company.js:188 templates/js/company.js:318 +#: templates/js/part.js:431 +msgid "Link" +msgstr "" + +#: company/models.py:124 +msgid "Link to external company information" +msgstr "" + +#: company/models.py:132 part/models.py:753 +msgid "Image" +msgstr "" + +#: company/models.py:137 +msgid "is customer" +msgstr "" + +#: company/models.py:137 +msgid "Do you sell items to this company?" +msgstr "" + +#: company/models.py:139 +msgid "is supplier" +msgstr "" + +#: company/models.py:139 +msgid "Do you purchase items from this company?" +msgstr "" + +#: company/models.py:141 +msgid "is manufacturer" +msgstr "" + +#: company/models.py:141 +msgid "Does this company manufacture parts?" +msgstr "" + +#: company/models.py:308 company/models.py:459 stock/models.py:373 +#: stock/templates/stock/item_base.html:224 +msgid "Base Part" +msgstr "" + +#: company/models.py:312 company/models.py:463 order/views.py:1372 +msgid "Select part" +msgstr "" + +#: company/models.py:323 company/templates/company/detail.html:57 +#: company/templates/company/manufacturer_part_base.html:85 +#: company/templates/company/manufacturer_part_detail.html:25 +#: company/templates/company/supplier_part_base.html:94 +#: company/templates/company/supplier_part_detail.html:34 part/bom.py:170 +#: part/bom.py:241 stock/templates/stock/item_base.html:341 +#: templates/js/company.js:44 templates/js/company.js:165 +#: templates/js/company.js:289 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:337 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:343 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:469 company/templates/company/detail.html:62 +#: company/templates/company/supplier_part_base.html:84 +#: company/templates/company/supplier_part_detail.html:25 order/models.py:190 +#: order/templates/order/order_base.html:92 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:175 +#: part/bom.py:286 stock/templates/stock/item_base.html:353 +#: templates/js/company.js:48 templates/js/company.js:263 +#: templates/js/order.js:170 +msgid "Supplier" +msgstr "" + +#: company/models.py:470 +msgid "Select supplier" +msgstr "" + +#: company/models.py:475 company/templates/company/supplier_part_base.html:88 +#: company/templates/company/supplier_part_detail.html:26 +#: order/templates/order/purchase_order_detail.html:174 part/bom.py:176 +#: part/bom.py:287 +msgid "SKU" +msgstr "" + +#: company/models.py:476 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:482 +#: company/templates/company/manufacturer_part_base.html:6 +#: company/templates/company/manufacturer_part_base.html:19 +#: stock/templates/stock/item_base.html:346 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:483 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:489 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:495 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:500 company/templates/company/supplier_part_base.html:115 +#: company/templates/company/supplier_part_detail.html:38 part/models.py:2190 +#: report/templates/report/inventree_po_report.html:93 +#: report/templates/report/inventree_so_report.html:93 +msgid "Note" +msgstr "" + +#: company/models.py:504 +msgid "base cost" +msgstr "" + +#: company/models.py:504 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:506 company/templates/company/supplier_part_base.html:108 +#: stock/models.py:397 stock/templates/stock/item_base.html:299 +#: templates/js/stock.js:667 +msgid "Packaging" +msgstr "" + +#: company/models.py:506 +msgid "Part packaging" +msgstr "" + +#: company/models.py:508 +msgid "multiple" +msgstr "" + +#: company/models.py:508 +msgid "Order multiple" +msgstr "" + +#: company/templates/company/assigned_stock.html:10 +#: company/templates/company/navbar.html:62 +#: company/templates/company/navbar.html:65 templates/js/build.js:411 +msgid "Assigned Stock" +msgstr "" + +#: company/templates/company/company_base.html:9 +#: company/templates/company/company_base.html:35 +#: templates/InvenTree/search.html:304 templates/js/company.js:33 +msgid "Company" +msgstr "" + +#: company/templates/company/company_base.html:25 +#: part/templates/part/part_thumb.html:21 +msgid "Upload new image" +msgstr "" + +#: company/templates/company/company_base.html:27 +#: part/templates/part/part_thumb.html:23 +msgid "Download image from URL" +msgstr "" + +#: company/templates/company/company_base.html:46 order/views.py:306 +msgid "Create Purchase Order" +msgstr "" + +#: company/templates/company/company_base.html:51 +msgid "Edit company information" +msgstr "" + +#: company/templates/company/company_base.html:56 company/views.py:326 +msgid "Delete Company" +msgstr "" + +#: company/templates/company/company_base.html:64 +#: company/templates/company/detail.html:10 +#: company/templates/company/navbar.html:12 +msgid "Company Details" +msgstr "" + +#: company/templates/company/company_base.html:84 +msgid "Phone" +msgstr "" + +#: company/templates/company/delete.html:7 +#, python-format +msgid "Are you sure you want to delete company '%(name)s'?" +msgstr "" + +#: company/templates/company/delete.html:12 +#, python-format +msgid "" +"There are %(count)s parts sourced from this company.
    \n" +"If this supplier is deleted, these supplier part entries will also be " +"deleted." +msgstr "" + +#: company/templates/company/detail.html:21 +msgid "Company Name" +msgstr "" + +#: company/templates/company/detail.html:36 +msgid "No website specified" +msgstr "" + +#: company/templates/company/detail.html:45 +msgid "Uses default currency" +msgstr "" + +#: company/templates/company/detail.html:67 order/models.py:440 +#: order/templates/order/sales_order_base.html:92 stock/models.py:415 +#: stock/models.py:416 stock/templates/stock/item_base.html:251 +#: templates/js/company.js:40 templates/js/order.js:267 +msgid "Customer" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:11 +#: templates/InvenTree/search.html:149 +msgid "Manufacturer Parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:22 +msgid "Create new manufacturer part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:23 +#: part/templates/part/manufacturer.html:19 +msgid "New Manufacturer Part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:28 +#: company/templates/company/detail_supplier_part.html:27 +#: company/templates/company/manufacturer_part_suppliers.html:20 +#: part/templates/part/category.html:122 +#: part/templates/part/manufacturer.html:22 +#: part/templates/part/supplier.html:20 +msgid "Options" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:33 +#: company/templates/company/detail_supplier_part.html:32 +#: part/templates/part/category.html:127 +msgid "Order parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:36 +#: company/templates/company/detail_supplier_part.html:35 +msgid "Delete parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:36 +#: company/templates/company/detail_supplier_part.html:35 +msgid "Delete Parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:66 +#: company/templates/company/detail_supplier_part.html:66 +#: part/templates/part/bom.html:159 part/templates/part/category.html:118 +#: templates/js/stock.js:1157 +msgid "New Part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:67 +#: company/templates/company/detail_supplier_part.html:67 +msgid "Create new Part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:72 +#: company/views.py:71 part/templates/part/manufacturer.html:52 +#: part/templates/part/supplier.html:56 +msgid "New Manufacturer" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:73 +#: company/views.py:284 +msgid "Create new Manufacturer" +msgstr "" + +#: company/templates/company/detail_stock.html:10 +msgid "Supplier Stock" +msgstr "" + +#: company/templates/company/detail_stock.html:37 +#: company/templates/company/supplier_part_stock.html:34 +#: part/templates/part/category.html:114 part/templates/part/category.html:128 +#: part/templates/part/stock.html:54 stock/templates/stock/location.html:163 +msgid "Export" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:11 +#: company/templates/company/manufacturer_part_navbar.html:11 +#: company/templates/company/manufacturer_part_suppliers.html:10 +#: templates/InvenTree/search.html:164 +msgid "Supplier Parts" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:21 +#: order/templates/order/order_wizard/select_parts.html:42 +#: order/templates/order/purchase_order_detail.html:75 +msgid "Create new supplier part" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:22 +#: company/templates/company/manufacturer_part_suppliers.html:17 +#: order/templates/order/purchase_order_detail.html:74 +#: part/templates/part/supplier.html:17 templates/js/stock.js:1163 +msgid "New Supplier Part" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:72 +#: company/templates/company/manufacturer_part_suppliers.html:47 +#: company/views.py:64 order/templates/order/purchase_orders.html:183 +#: part/templates/part/supplier.html:50 +msgid "New Supplier" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:73 company/views.py:281 +#: order/templates/order/purchase_orders.html:184 +msgid "Create new Supplier" +msgstr "" + +#: company/templates/company/index.html:8 +msgid "Supplier List" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:36 +#: company/templates/company/supplier_part_base.html:36 +#: company/templates/company/supplier_part_orders.html:17 +#: part/templates/part/orders.html:17 part/templates/part/part_base.html:65 +msgid "Order part" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:41 +msgid "Edit manufacturer part" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:45 +msgid "Delete manufacturer part" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:57 +#: company/templates/company/manufacturer_part_detail.html:10 +msgid "Manufacturer Part Details" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:62 +#: company/templates/company/manufacturer_part_detail.html:18 +#: company/templates/company/supplier_part_base.html:61 +#: company/templates/company/supplier_part_detail.html:18 +msgid "Internal Part" +msgstr "" + +#: company/templates/company/manufacturer_part_delete.html:6 +msgid "Are you sure you want to delete the following Manufacturer Parts?" +msgstr "" + +#: company/templates/company/manufacturer_part_delete.html:36 +#, python-format +msgid "" +"There are %(count)s suppliers defined for this manufacturer part. If you " +"delete it, the following supplier parts will also be deleted:" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:14 +#: company/views.py:63 part/templates/part/navbar.html:78 +#: part/templates/part/navbar.html:81 templates/InvenTree/search.html:316 +#: templates/navbar.html:35 +msgid "Suppliers" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:19 +msgid "Manufacturer Part Stock" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:22 +#: company/templates/company/navbar.html:41 +#: company/templates/company/supplier_part_navbar.html:15 +#: part/templates/part/navbar.html:36 stock/api.py:51 +#: stock/templates/stock/loc_link.html:7 stock/templates/stock/location.html:36 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/index.html:128 templates/InvenTree/search.html:196 +#: templates/InvenTree/search.html:232 +#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:173 +#: templates/js/part.js:398 templates/js/stock.js:563 templates/navbar.html:26 +msgid "Stock" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:26 +msgid "Manufacturer Part Orders" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:29 +#: company/templates/company/supplier_part_navbar.html:22 +msgid "Orders" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:22 +#: part/templates/part/supplier.html:22 +msgid "Delete supplier parts" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:22 +#: part/templates/part/manufacturer.html:24 part/templates/part/params.html:44 +#: part/templates/part/related.html:44 part/templates/part/supplier.html:22 +#: stock/views.py:1002 users/models.py:184 +msgid "Delete" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:48 +#: part/templates/part/supplier.html:51 +msgid "Create new supplier" +msgstr "" + +#: company/templates/company/navbar.html:20 +#: company/templates/company/navbar.html:23 +msgid "Manufactured Parts" +msgstr "" + +#: company/templates/company/navbar.html:29 +#: company/templates/company/navbar.html:32 +msgid "Supplied Parts" +msgstr "" + +#: company/templates/company/navbar.html:38 part/templates/part/navbar.html:33 +#: stock/templates/stock/location.html:107 +#: stock/templates/stock/location.html:122 +#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location_navbar.html:22 +#: stock/templates/stock/location_navbar.html:29 +#: templates/InvenTree/search.html:198 templates/js/stock.js:968 +#: templates/stats.html:72 templates/stats.html:81 users/models.py:40 +msgid "Stock Items" +msgstr "" + +#: company/templates/company/navbar.html:47 +#: company/templates/company/navbar.html:56 +#: company/templates/company/navbar.html:59 +#: company/templates/company/sales_orders.html:11 +#: order/templates/order/sales_orders.html:8 +#: order/templates/order/sales_orders.html:13 +#: part/templates/part/navbar.html:98 part/templates/part/navbar.html:101 +#: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:228 +#: templates/InvenTree/search.html:345 +#: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46 +#: users/models.py:43 +msgid "Sales Orders" +msgstr "" + +#: company/templates/company/navbar.html:50 +#: company/templates/company/purchase_orders.html:10 +#: order/templates/order/purchase_orders.html:8 +#: order/templates/order/purchase_orders.html:13 +#: part/templates/part/navbar.html:84 part/templates/part/navbar.html:87 +#: part/templates/part/orders.html:10 templates/InvenTree/index.html:205 +#: templates/InvenTree/search.html:325 +#: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37 +#: users/models.py:42 +msgid "Purchase Orders" +msgstr "" + +#: company/templates/company/notes.html:11 +msgid "Company Notes" +msgstr "" + +#: company/templates/company/purchase_orders.html:18 +#: order/templates/order/purchase_orders.html:20 +msgid "Create new purchase order" +msgstr "" + +#: company/templates/company/purchase_orders.html:19 +#: order/templates/order/purchase_orders.html:21 +msgid "New Purchase Order" +msgstr "" + +#: company/templates/company/sales_orders.html:19 +#: order/templates/order/sales_orders.html:20 +msgid "Create new sales order" +msgstr "" + +#: company/templates/company/sales_orders.html:20 +#: order/templates/order/sales_orders.html:21 +msgid "New Sales Order" +msgstr "" + +#: company/templates/company/supplier_part_base.html:7 +#: company/templates/company/supplier_part_base.html:20 stock/models.py:382 +#: stock/templates/stock/item_base.html:358 templates/js/company.js:279 +msgid "Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part_base.html:40 +msgid "Edit supplier part" +msgstr "" + +#: company/templates/company/supplier_part_base.html:44 +msgid "Delete supplier part" +msgstr "" + +#: company/templates/company/supplier_part_base.html:56 +#: company/templates/company/supplier_part_detail.html:10 +msgid "Supplier Part Details" +msgstr "" + +#: company/templates/company/supplier_part_delete.html:5 +msgid "Are you sure you want to delete the following Supplier Parts?" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part_stock.html:10 +msgid "Supplier Part Stock" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part_orders.html:10 +msgid "Supplier Part Orders" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:26 +msgid "Supplier Part Pricing" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:29 +msgid "Pricing" +msgstr "" + +#: company/templates/company/supplier_part_orders.html:18 +#: part/templates/part/orders.html:18 +msgid "Order Part" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:11 +msgid "Pricing Information" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:19 company/views.py:794 +#: part/templates/part/sale_prices.html:17 part/views.py:2624 +msgid "Add Price Break" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:38 +#: part/templates/part/sale_prices.html:46 +msgid "No price break information found" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:89 +#: part/templates/part/sale_prices.html:97 +msgid "Edit price break" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:90 +#: part/templates/part/sale_prices.html:98 +msgid "Delete price break" +msgstr "" + +#: company/views.py:70 part/templates/part/navbar.html:72 +#: part/templates/part/navbar.html:75 templates/InvenTree/search.html:306 +#: templates/navbar.html:36 +msgid "Manufacturers" +msgstr "" + +#: company/views.py:77 templates/InvenTree/search.html:336 +#: templates/navbar.html:45 +msgid "Customers" +msgstr "" + +#: company/views.py:78 order/templates/order/sales_orders.html:185 +msgid "New Customer" +msgstr "" + +#: company/views.py:86 +msgid "Companies" +msgstr "" + +#: company/views.py:87 +msgid "New Company" +msgstr "" + +#: company/views.py:169 part/views.py:848 +msgid "Download Image" +msgstr "" + +#: company/views.py:198 part/views.py:880 +msgid "Image size exceeds maximum allowable size for download" +msgstr "" + +#: company/views.py:214 part/views.py:896 +msgid "Supplied URL is not a valid image file" +msgstr "" + +#: company/views.py:243 +msgid "Update Company Image" +msgstr "" + +#: company/views.py:249 +msgid "Updated company image" +msgstr "" + +#: company/views.py:259 +msgid "Edit Company" +msgstr "" + +#: company/views.py:264 +msgid "Edited company information" +msgstr "" + +#: company/views.py:287 order/templates/order/sales_orders.html:186 +msgid "Create new Customer" +msgstr "" + +#: company/views.py:289 +msgid "Create new Company" +msgstr "" + +#: company/views.py:316 +msgid "Created new company" +msgstr "" + +#: company/views.py:332 +msgid "Company was deleted" +msgstr "" + +#: company/views.py:357 +msgid "Edit Manufacturer Part" +msgstr "" + +#: company/views.py:366 +msgid "Create New Manufacturer Part" +msgstr "" + +#: company/views.py:440 +msgid "Delete Manufacturer Part" +msgstr "" + +#: company/views.py:528 +msgid "Edit Supplier Part" +msgstr "" + +#: company/views.py:578 templates/js/stock.js:1164 +msgid "Create new Supplier Part" +msgstr "" + +#: company/views.py:722 +msgid "Delete Supplier Part" +msgstr "" + +#: company/views.py:799 part/views.py:2628 +msgid "Added new price break" +msgstr "" + +#: company/views.py:855 part/views.py:2672 +msgid "Edit Price Break" +msgstr "" + +#: company/views.py:870 part/views.py:2686 +msgid "Delete Price Break" +msgstr "" + +#: label/api.py:56 report/api.py:201 +msgid "No valid objects provided to template" +msgstr "" + +#: label/models.py:102 +msgid "Label name" +msgstr "" + +#: label/models.py:109 +msgid "Label description" +msgstr "" + +#: label/models.py:116 stock/forms.py:202 +msgid "Label" +msgstr "" + +#: label/models.py:117 +msgid "Label template file" +msgstr "" + +#: label/models.py:123 report/models.py:274 +msgid "Enabled" +msgstr "" + +#: label/models.py:124 +msgid "Label template is enabled" +msgstr "" + +#: label/models.py:129 +msgid "Width [mm]" +msgstr "" + +#: label/models.py:130 +msgid "Label width, specified in mm" +msgstr "" + +#: label/models.py:136 +msgid "Height [mm]" +msgstr "" + +#: label/models.py:137 +msgid "Label height, specified in mm" +msgstr "" + +#: label/models.py:222 label/models.py:275 +msgid "Query filters (comma-separated list of key=value pairs" +msgstr "" + +#: label/models.py:223 label/models.py:276 report/models.py:294 +#: report/models.py:415 report/models.py:449 +msgid "Filters" +msgstr "" + +#: order/forms.py:27 order/templates/order/order_base.html:47 +msgid "Place order" +msgstr "" + +#: order/forms.py:38 order/templates/order/order_base.html:54 +msgid "Mark order as complete" +msgstr "" + +#: order/forms.py:49 order/forms.py:60 order/templates/order/order_base.html:59 +#: order/templates/order/sales_order_base.html:59 +msgid "Cancel order" +msgstr "" + +#: order/forms.py:71 order/templates/order/sales_order_base.html:56 +msgid "Ship order" +msgstr "" + +#: order/forms.py:82 +msgid "Receive parts to this location" +msgstr "" + +#: order/forms.py:103 +msgid "Purchase Order reference" +msgstr "" + +#: order/forms.py:110 +msgid "Target date for order delivery. Order will be overdue after this date." +msgstr "" + +#: order/forms.py:138 +msgid "Enter sales order number" +msgstr "" + +#: order/forms.py:145 order/models.py:452 +msgid "" +"Target date for order completion. Order will be overdue after this date." +msgstr "" + +#: order/forms.py:235 +msgid "Enter stock item serial numbers" +msgstr "" + +#: order/forms.py:241 +msgid "Enter quantity of stock items" +msgstr "" + +#: order/models.py:99 +msgid "Order reference" +msgstr "" + +#: order/models.py:101 +msgid "Order description" +msgstr "" + +#: order/models.py:103 +msgid "Link to external page" +msgstr "" + +#: order/models.py:111 part/templates/part/detail.html:132 +msgid "Created By" +msgstr "" + +#: order/models.py:118 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:123 +msgid "Order notes" +msgstr "" + +#: order/models.py:182 order/models.py:445 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:191 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:194 order/templates/order/order_base.html:98 +#: templates/js/order.js:179 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:194 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:201 +msgid "received by" +msgstr "" + +#: order/models.py:206 +msgid "Issue Date" +msgstr "" + +#: order/models.py:207 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:212 +msgid "Target Delivery Date" +msgstr "" + +#: order/models.py:213 +msgid "" +"Expected date for order delivery. Order will be overdue after this date." +msgstr "" + +#: order/models.py:219 +msgid "Date order was completed" +msgstr "" + +#: order/models.py:243 order/models.py:342 part/views.py:1586 +#: stock/models.py:270 stock/models.py:953 +msgid "Quantity must be greater than zero" +msgstr "" + +#: order/models.py:248 +msgid "Part supplier must match PO supplier" +msgstr "" + +#: order/models.py:337 +msgid "Lines can only be received against an order marked as 'Placed'" +msgstr "" + +#: order/models.py:359 +msgid "Received items" +msgstr "" + +#: order/models.py:441 +msgid "Company to which the items are being sold" +msgstr "" + +#: order/models.py:447 +msgid "Customer Reference " +msgstr "" + +#: order/models.py:447 +msgid "Customer order reference code" +msgstr "" + +#: order/models.py:455 templates/js/order.js:303 +msgid "Shipment Date" +msgstr "" + +#: order/models.py:462 +msgid "shipped by" +msgstr "" + +#: order/models.py:506 +msgid "SalesOrder cannot be shipped as it is not currently pending" +msgstr "" + +#: order/models.py:593 +msgid "Item quantity" +msgstr "" + +#: order/models.py:595 +msgid "Line item reference" +msgstr "" + +#: order/models.py:597 +msgid "Line item notes" +msgstr "" + +#: order/models.py:623 order/models.py:667 +#: part/templates/part/allocation.html:17 +#: part/templates/part/allocation.html:45 +msgid "Order" +msgstr "" + +#: order/models.py:624 order/templates/order/order_base.html:9 +#: order/templates/order/order_base.html:24 +#: report/templates/report/inventree_po_report.html:77 +#: stock/templates/stock/item_base.html:313 templates/js/order.js:148 +msgid "Purchase Order" +msgstr "" + +#: order/models.py:638 +msgid "Supplier part" +msgstr "" + +#: order/models.py:641 order/templates/order/order_base.html:131 +#: order/templates/order/purchase_order_detail.html:214 +#: order/templates/order/receive_parts.html:22 +#: order/templates/order/sales_order_base.html:131 +msgid "Received" +msgstr "" + +#: order/models.py:641 +msgid "Number of items received" +msgstr "" + +#: order/models.py:648 stock/models.py:508 +#: stock/templates/stock/item_base.html:320 +msgid "Purchase Price" +msgstr "" + +#: order/models.py:649 +msgid "Unit purchase price" +msgstr "" + +#: order/models.py:743 order/models.py:745 +msgid "Stock item has not been assigned" +msgstr "" + +#: order/models.py:749 +msgid "Cannot allocate stock item to a line with a different part" +msgstr "" + +#: order/models.py:751 +msgid "Cannot allocate stock to a line without a part" +msgstr "" + +#: order/models.py:754 +msgid "Allocation quantity cannot exceed stock quantity" +msgstr "" + +#: order/models.py:764 +msgid "Quantity must be 1 for serialized stock item" +msgstr "" + +#: order/models.py:769 +msgid "Line" +msgstr "" + +#: order/models.py:780 +msgid "Item" +msgstr "" + +#: order/models.py:781 +msgid "Select stock item to allocate" +msgstr "" + +#: order/models.py:784 +msgid "Enter stock allocation quantity" +msgstr "" + +#: order/templates/order/delete_attachment.html:5 +#: stock/templates/stock/attachment_delete.html:5 +#: templates/attachment_delete.html:5 +msgid "Are you sure you want to delete this attachment?" +msgstr "" + +#: order/templates/order/order_base.html:39 +#: order/templates/order/sales_order_base.html:48 +msgid "Print" +msgstr "" + +#: order/templates/order/order_base.html:43 +#: order/templates/order/sales_order_base.html:52 +msgid "Edit order information" +msgstr "" + +#: order/templates/order/order_base.html:51 +msgid "Receive items" +msgstr "" + +#: order/templates/order/order_base.html:64 +msgid "Export order to file" +msgstr "" + +#: order/templates/order/order_base.html:72 +#: order/templates/order/po_navbar.html:11 +msgid "Purchase Order Details" +msgstr "" + +#: order/templates/order/order_base.html:77 +#: order/templates/order/sales_order_base.html:77 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:82 +#: order/templates/order/sales_order_base.html:82 +msgid "Order Status" +msgstr "" + +#: order/templates/order/order_base.html:117 +#: report/templates/report/inventree_build_order_base.html:122 +msgid "Issued" +msgstr "" + +#: order/templates/order/order_cancel.html:7 +#: order/templates/order/sales_order_cancel.html:9 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: order/templates/order/order_complete.html:7 +msgid "Mark this order as complete?" +msgstr "" + +#: order/templates/order/order_complete.html:10 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: order/templates/order/order_complete.html:11 +msgid "Marking this order as complete will remove these line items." +msgstr "" + +#: order/templates/order/order_issue.html:7 +msgid "" +"After placing this purchase order, line items will no longer be editable." +msgstr "" + +#: order/templates/order/order_notes.html:13 +msgid "Order Notes" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:9 +msgid "Step 1 of 2 - Select Part Suppliers" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:14 +msgid "Select suppliers" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:18 +msgid "No purchaseable parts selected" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:31 +msgid "Select Supplier" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:57 +#, python-format +msgid "Select a supplier for %(name)s" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:69 +#: part/templates/part/set_category.html:32 +msgid "Remove part" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:8 +msgid "Step 2 of 2 - Select Purchase Orders" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:12 +msgid "Select existing purchase orders, or create new orders." +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:31 +#: templates/js/order.js:205 templates/js/order.js:308 +msgid "Items" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:32 +msgid "Select Purchase Order" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:45 +#, python-format +msgid "Create new purchase order for %(name)s" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:68 +#, python-format +msgid "Select a purchase order for %(name)s" +msgstr "" + +#: order/templates/order/po_attachments.html:12 +#: order/templates/order/po_navbar.html:23 +msgid "Purchase Order Attachments" +msgstr "" + +#: order/templates/order/po_navbar.html:17 +msgid "Received Stock Items" +msgstr "" + +#: order/templates/order/po_navbar.html:20 +#: order/templates/order/po_received_items.html:12 +msgid "Received Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:14 +msgid "Purchase Order Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:24 +#: order/templates/order/sales_order_detail.html:22 order/views.py:1108 +#: order/views.py:1191 +msgid "Add Line Item" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:125 +#: part/templates/part/category.html:185 part/templates/part/category.html:227 +#: stock/templates/stock/location.html:191 templates/js/stock.js:708 +#: templates/js/stock.js:1169 +msgid "New Location" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:46 +#: order/templates/order/purchase_order_detail.html:126 +#: stock/templates/stock/location.html:42 +msgid "Create new stock location" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:139 +msgid "No line items found" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:205 +msgid "Unit Price" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:246 +#: order/templates/order/sales_order_detail.html:294 +msgid "Edit line item" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:247 +msgid "Delete line item" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:252 +msgid "Receive line item" +msgstr "" + +#: order/templates/order/purchase_orders.html:24 +#: order/templates/order/sales_orders.html:24 +msgid "Print Order Reports" +msgstr "" + +#: order/templates/order/receive_parts.html:8 +#, python-format +msgid "Receive outstanding parts for %(order)s - %(desc)s" +msgstr "" + +#: order/templates/order/receive_parts.html:14 part/api.py:40 +#: part/models.py:322 part/templates/part/cat_link.html:7 +#: part/templates/part/category.html:99 +#: part/templates/part/category_navbar.html:22 +#: part/templates/part/category_navbar.html:29 +#: part/templates/part/category_partlist.html:10 +#: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114 +#: templates/InvenTree/settings/tabs.html:25 templates/js/part.js:577 +#: templates/navbar.html:23 templates/stats.html:59 templates/stats.html:68 +#: users/models.py:38 +msgid "Parts" +msgstr "" + +#: order/templates/order/receive_parts.html:15 +msgid "Select parts to receive against this order" +msgstr "" + +#: order/templates/order/receive_parts.html:20 +msgid "Order Code" +msgstr "" + +#: order/templates/order/receive_parts.html:21 +#: part/templates/part/part_base.html:129 templates/js/part.js:414 +msgid "On Order" +msgstr "" + +#: order/templates/order/receive_parts.html:23 +msgid "Receive" +msgstr "" + +#: order/templates/order/receive_parts.html:36 +msgid "Error: Referenced part has been removed" +msgstr "" + +#: order/templates/order/receive_parts.html:57 +msgid "Remove line" +msgstr "" + +#: order/templates/order/sales_order_base.html:15 +msgid "This SalesOrder has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:64 +msgid "Packing List" +msgstr "" + +#: order/templates/order/sales_order_base.html:72 +#: order/templates/order/so_navbar.html:12 +msgid "Sales Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:98 templates/js/order.js:275 +msgid "Customer Reference" +msgstr "" + +#: order/templates/order/sales_order_cancel.html:8 +#: order/templates/order/sales_order_ship.html:9 +#: part/templates/part/bom_duplicate.html:12 +#: stock/templates/stock/stockitem_convert.html:13 +msgid "Warning" +msgstr "" + +#: order/templates/order/sales_order_detail.html:13 +msgid "Sales Order Items" +msgstr "" + +#: order/templates/order/sales_order_detail.html:75 +#: order/templates/order/sales_order_detail.html:157 +#: report/templates/report/inventree_test_report_base.html:75 +#: stock/models.py:420 stock/templates/stock/item_base.html:238 +#: templates/js/build.js:418 +msgid "Serial Number" +msgstr "" + +#: order/templates/order/sales_order_detail.html:92 templates/js/bom.js:342 +#: templates/js/build.js:571 templates/js/build.js:984 +msgid "Actions" +msgstr "" + +#: order/templates/order/sales_order_detail.html:99 templates/js/build.js:459 +#: templates/js/build.js:789 +msgid "Edit stock allocation" +msgstr "" + +#: order/templates/order/sales_order_detail.html:100 templates/js/build.js:461 +#: templates/js/build.js:790 +msgid "Delete stock allocation" +msgstr "" + +#: order/templates/order/sales_order_detail.html:170 +msgid "No matching line items" +msgstr "" + +#: order/templates/order/sales_order_detail.html:199 +msgid "ID" +msgstr "" + +#: order/templates/order/sales_order_detail.html:229 templates/js/build.js:523 +#: templates/js/build.js:785 +msgid "Allocated" +msgstr "" + +#: order/templates/order/sales_order_detail.html:231 +msgid "Fulfilled" +msgstr "" + +#: order/templates/order/sales_order_detail.html:279 +msgid "Allocate serial numbers" +msgstr "" + +#: order/templates/order/sales_order_detail.html:282 templates/js/build.js:585 +msgid "Allocate stock" +msgstr "" + +#: order/templates/order/sales_order_detail.html:285 +msgid "Purchase stock" +msgstr "" + +#: order/templates/order/sales_order_detail.html:289 templates/js/build.js:578 +#: templates/js/build.js:992 +msgid "Build stock" +msgstr "" + +#: order/templates/order/sales_order_detail.html:295 +msgid "Delete line item " +msgstr "" + +#: order/templates/order/sales_order_notes.html:14 +msgid "Sales Order Notes" +msgstr "" + +#: order/templates/order/sales_order_ship.html:10 +msgid "" +"This order has not been fully allocated. If the order is marked as shipped, " +"it can no longer be adjusted." +msgstr "" + +#: order/templates/order/sales_order_ship.html:12 +msgid "Ensure that the order allocation is correct before shipping the order." +msgstr "" + +#: order/templates/order/sales_order_ship.html:18 +msgid "Some line items in this order have been over-allocated" +msgstr "" + +#: order/templates/order/sales_order_ship.html:20 +msgid "Ensure that this is correct before shipping the order." +msgstr "" + +#: order/templates/order/sales_order_ship.html:27 +msgid "Shipping this order means that the order will no longer be editable." +msgstr "" + +#: order/templates/order/so_allocate_by_serial.html:9 +msgid "Allocate stock items by serial number" +msgstr "" + +#: order/templates/order/so_allocation_delete.html:7 +msgid "This action will unallocate the following stock from the Sales Order" +msgstr "" + +#: order/templates/order/so_attachments.html:12 +#: order/templates/order/so_navbar.html:26 +msgid "Sales Order Attachments" +msgstr "" + +#: order/templates/order/so_lineitem_delete.html:5 +msgid "Are you sure you wish to delete this line item?" +msgstr "" + +#: order/views.py:99 +msgid "Add Purchase Order Attachment" +msgstr "" + +#: order/views.py:149 +msgid "Add Sales Order Attachment" +msgstr "" + +#: order/views.py:341 +msgid "Create Sales Order" +msgstr "" + +#: order/views.py:376 +msgid "Edit Purchase Order" +msgstr "" + +#: order/views.py:396 +msgid "Edit Sales Order" +msgstr "" + +#: order/views.py:412 +msgid "Cancel Order" +msgstr "" + +#: order/views.py:421 order/views.py:447 +msgid "Confirm order cancellation" +msgstr "" + +#: order/views.py:424 order/views.py:450 +msgid "Order cannot be cancelled" +msgstr "" + +#: order/views.py:438 +msgid "Cancel sales order" +msgstr "" + +#: order/views.py:464 +msgid "Issue Order" +msgstr "" + +#: order/views.py:473 +msgid "Confirm order placement" +msgstr "" + +#: order/views.py:483 +msgid "Purchase order issued" +msgstr "" + +#: order/views.py:494 +msgid "Complete Order" +msgstr "" + +#: order/views.py:510 +msgid "Confirm order completion" +msgstr "" + +#: order/views.py:521 +msgid "Purchase order completed" +msgstr "" + +#: order/views.py:531 +msgid "Ship Order" +msgstr "" + +#: order/views.py:547 +msgid "Confirm order shipment" +msgstr "" + +#: order/views.py:553 +msgid "Could not ship order" +msgstr "" + +#: order/views.py:607 +msgid "Receive Parts" +msgstr "" + +#: order/views.py:677 +msgid "Items received" +msgstr "" + +#: order/views.py:691 +msgid "No destination set" +msgstr "" + +#: order/views.py:736 +msgid "Error converting quantity to number" +msgstr "" + +#: order/views.py:742 +msgid "Receive quantity less than zero" +msgstr "" + +#: order/views.py:748 +msgid "No lines specified" +msgstr "" + +#: order/views.py:1060 +#, python-brace-format +msgid "Ordered {n} parts" +msgstr "" + +#: order/views.py:1117 +msgid "Supplier part must be specified" +msgstr "" + +#: order/views.py:1123 +msgid "Supplier must match for Part and Order" +msgstr "" + +#: order/views.py:1242 order/views.py:1260 +msgid "Edit Line Item" +msgstr "" + +#: order/views.py:1276 order/views.py:1288 +msgid "Delete Line Item" +msgstr "" + +#: order/views.py:1281 order/views.py:1293 +msgid "Deleted line item" +msgstr "" + +#: order/views.py:1306 +msgid "Allocate Serial Numbers" +msgstr "" + +#: order/views.py:1351 +#, python-brace-format +msgid "Allocated {n} items" +msgstr "" + +#: order/views.py:1367 +msgid "Select line item" +msgstr "" + +#: order/views.py:1398 +msgid "No matching item for serial" +msgstr "" + +#: order/views.py:1408 +msgid "is not in stock" +msgstr "" + +#: order/views.py:1416 +msgid "already allocated to an order" +msgstr "" + +#: order/views.py:1470 +msgid "Allocate Stock to Order" +msgstr "" + +#: order/views.py:1544 +msgid "Edit Allocation Quantity" +msgstr "" + +#: order/views.py:1559 +msgid "Remove allocation" +msgstr "" + +#: part/bom.py:138 part/models.py:72 part/models.py:762 +#: part/templates/part/category.html:66 part/templates/part/detail.html:90 +msgid "Default Location" +msgstr "" + +#: part/bom.py:139 part/templates/part/part_base.html:117 +msgid "Available Stock" +msgstr "" + +#: part/bom.py:379 +#, python-brace-format +msgid "Unsupported file format: {f}" +msgstr "" + +#: part/bom.py:384 +msgid "Error reading BOM file (invalid data)" +msgstr "" + +#: part/bom.py:386 +msgid "Error reading BOM file (incorrect row size)" +msgstr "" + +#: part/forms.py:89 stock/forms.py:265 +msgid "File Format" +msgstr "" + +#: part/forms.py:89 stock/forms.py:265 +msgid "Select output file format" +msgstr "" + +#: part/forms.py:91 +msgid "Cascading" +msgstr "" + +#: part/forms.py:91 +msgid "Download cascading / multi-level BOM" +msgstr "" + +#: part/forms.py:93 +msgid "Levels" +msgstr "" + +#: part/forms.py:93 +msgid "Select maximum number of BOM levels to export (0 = all levels)" +msgstr "" + +#: part/forms.py:95 +msgid "Include Parameter Data" +msgstr "" + +#: part/forms.py:95 +msgid "Include part parameters data in exported BOM" +msgstr "" + +#: part/forms.py:97 +msgid "Include Stock Data" +msgstr "" + +#: part/forms.py:97 +msgid "Include part stock data in exported BOM" +msgstr "" + +#: part/forms.py:99 +msgid "Include Manufacturer Data" +msgstr "" + +#: part/forms.py:99 +msgid "Include part manufacturer data in exported BOM" +msgstr "" + +#: part/forms.py:101 +msgid "Include Supplier Data" +msgstr "" + +#: part/forms.py:101 +msgid "Include part supplier data in exported BOM" +msgstr "" + +#: part/forms.py:122 part/models.py:2077 +msgid "Parent Part" +msgstr "" + +#: part/forms.py:123 part/templates/part/bom_duplicate.html:7 +msgid "Select parent part to copy BOM from" +msgstr "" + +#: part/forms.py:129 +msgid "Clear existing BOM items" +msgstr "" + +#: part/forms.py:135 +msgid "Confirm BOM duplication" +msgstr "" + +#: part/forms.py:153 +msgid "validate" +msgstr "" + +#: part/forms.py:153 +msgid "Confirm that the BOM is correct" +msgstr "" + +#: part/forms.py:165 +msgid "BOM file" +msgstr "" + +#: part/forms.py:165 +msgid "Select BOM file to upload" +msgstr "" + +#: part/forms.py:184 +msgid "Related Part" +msgstr "" + +#: part/forms.py:203 +msgid "Select part category" +msgstr "" + +#: part/forms.py:220 +msgid "Duplicate all BOM data for this part" +msgstr "" + +#: part/forms.py:221 +msgid "Copy BOM" +msgstr "" + +#: part/forms.py:226 +msgid "Duplicate all parameter data for this part" +msgstr "" + +#: part/forms.py:227 +msgid "Copy Parameters" +msgstr "" + +#: part/forms.py:232 +msgid "Confirm part creation" +msgstr "" + +#: part/forms.py:237 +msgid "Include category parameter templates" +msgstr "" + +#: part/forms.py:242 +msgid "Include parent categories parameter templates" +msgstr "" + +#: part/forms.py:322 +msgid "Add parameter template to same level categories" +msgstr "" + +#: part/forms.py:326 +msgid "Add parameter template to all categories" +msgstr "" + +#: part/forms.py:344 part/models.py:2171 +msgid "Sub part" +msgstr "" + +#: part/forms.py:372 +msgid "Input quantity for price calculation" +msgstr "" + +#: part/models.py:73 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:76 +msgid "Default keywords" +msgstr "" + +#: part/models.py:76 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:82 part/models.py:2123 +#: part/templates/part/part_app_base.html:10 +msgid "Part Category" +msgstr "" + +#: part/models.py:83 part/templates/part/category.html:23 +#: part/templates/part/category.html:94 part/templates/part/category.html:141 +#: templates/InvenTree/search.html:127 templates/stats.html:63 +#: users/models.py:37 +msgid "Part Categories" +msgstr "" + +#: part/models.py:446 part/models.py:458 +#, python-brace-format +msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" +msgstr "" + +#: part/models.py:555 +msgid "Next available serial numbers are" +msgstr "" + +#: part/models.py:559 +msgid "Next available serial number is" +msgstr "" + +#: part/models.py:564 +msgid "Most recent serial number is" +msgstr "" + +#: part/models.py:643 +msgid "Duplicate IPN not allowed in part settings" +msgstr "" + +#: part/models.py:654 +msgid "Part must be unique for name, IPN and revision" +msgstr "" + +#: part/models.py:685 part/templates/part/detail.html:22 +msgid "Part name" +msgstr "" + +#: part/models.py:692 +msgid "Is Template" +msgstr "" + +#: part/models.py:693 +msgid "Is this part a template part?" +msgstr "" + +#: part/models.py:704 +msgid "Is this part a variant of another part?" +msgstr "" + +#: part/models.py:705 part/templates/part/detail.html:60 +msgid "Variant Of" +msgstr "" + +#: part/models.py:711 +msgid "Part description" +msgstr "" + +#: part/models.py:716 part/templates/part/category.html:73 +#: part/templates/part/detail.html:67 +msgid "Keywords" +msgstr "" + +#: part/models.py:717 +msgid "Part keywords to improve visibility in search results" +msgstr "" + +#: part/models.py:724 part/models.py:2122 part/templates/part/detail.html:73 +#: part/templates/part/set_category.html:15 templates/js/part.js:385 +msgid "Category" +msgstr "" + +#: part/models.py:725 +msgid "Part category" +msgstr "" + +#: part/models.py:730 part/templates/part/detail.html:28 +#: part/templates/part/part_base.html:94 templates/js/part.js:161 +msgid "IPN" +msgstr "" + +#: part/models.py:731 +msgid "Internal Part Number" +msgstr "" + +#: part/models.py:737 +msgid "Part revision or version number" +msgstr "" + +#: part/models.py:738 part/templates/part/detail.html:35 report/models.py:198 +#: templates/js/part.js:165 +msgid "Revision" +msgstr "" + +#: part/models.py:760 +msgid "Where is this item normally stored?" +msgstr "" + +#: part/models.py:807 part/templates/part/detail.html:97 +msgid "Default Supplier" +msgstr "" + +#: part/models.py:808 +msgid "Default supplier part" +msgstr "" + +#: part/models.py:815 +msgid "Default Expiry" +msgstr "" + +#: part/models.py:816 +msgid "Expiry time (in days) for stock items of this part" +msgstr "" + +#: part/models.py:821 part/templates/part/detail.html:113 +msgid "Minimum Stock" +msgstr "" + +#: part/models.py:822 +msgid "Minimum allowed stock level" +msgstr "" + +#: part/models.py:828 part/models.py:2051 part/templates/part/detail.html:106 +#: part/templates/part/params.html:29 +msgid "Units" +msgstr "" + +#: part/models.py:829 +msgid "Stock keeping units for this part" +msgstr "" + +#: part/models.py:835 +msgid "Can this part be built from other parts?" +msgstr "" + +#: part/models.py:841 +msgid "Can this part be used to build other parts?" +msgstr "" + +#: part/models.py:847 +msgid "Does this part have tracking for unique items?" +msgstr "" + +#: part/models.py:852 +msgid "Can this part be purchased from external suppliers?" +msgstr "" + +#: part/models.py:857 +msgid "Can this part be sold to customers?" +msgstr "" + +#: part/models.py:861 part/templates/part/detail.html:227 +#: templates/js/table_filters.js:20 templates/js/table_filters.js:60 +#: templates/js/table_filters.js:236 templates/js/table_filters.js:305 +msgid "Active" +msgstr "" + +#: part/models.py:862 +msgid "Is this part active?" +msgstr "" + +#: part/models.py:867 +msgid "Is this a virtual part, such as a software product or license?" +msgstr "" + +#: part/models.py:872 +msgid "Part notes - supports Markdown formatting" +msgstr "" + +#: part/models.py:875 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:875 +msgid "Stored BOM checksum" +msgstr "" + +#: part/models.py:878 +msgid "BOM checked by" +msgstr "" + +#: part/models.py:880 +msgid "BOM checked date" +msgstr "" + +#: part/models.py:884 +msgid "Creation User" +msgstr "" + +#: part/models.py:1949 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:1966 +msgid "Test with this name already exists for this part" +msgstr "" + +#: part/models.py:1986 templates/js/part.js:638 templates/js/stock.js:104 +msgid "Test Name" +msgstr "" + +#: part/models.py:1987 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:1992 +msgid "Test Description" +msgstr "" + +#: part/models.py:1993 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:1998 templates/js/part.js:647 +#: templates/js/table_filters.js:222 +msgid "Required" +msgstr "" + +#: part/models.py:1999 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:2004 templates/js/part.js:655 +msgid "Requires Value" +msgstr "" + +#: part/models.py:2005 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:2010 templates/js/part.js:662 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:2011 +msgid "Does this test require a file attachment when adding a test result?" +msgstr "" + +#: part/models.py:2044 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:2049 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:2051 +msgid "Parameter Units" +msgstr "" + +#: part/models.py:2079 part/models.py:2128 part/models.py:2129 +#: templates/InvenTree/settings/category.html:62 +msgid "Parameter Template" +msgstr "" + +#: part/models.py:2081 +msgid "Data" +msgstr "" + +#: part/models.py:2081 +msgid "Parameter Value" +msgstr "" + +#: part/models.py:2133 templates/InvenTree/settings/category.html:67 +msgid "Default Value" +msgstr "" + +#: part/models.py:2134 +msgid "Default Parameter Value" +msgstr "" + +#: part/models.py:2163 +msgid "Select parent part" +msgstr "" + +#: part/models.py:2172 +msgid "Select part to be used in BOM" +msgstr "" + +#: part/models.py:2178 +msgid "BOM quantity for this BOM item" +msgstr "" + +#: part/models.py:2180 templates/js/bom.js:216 templates/js/bom.js:269 +msgid "Optional" +msgstr "" + +#: part/models.py:2180 +msgid "This BOM item is optional" +msgstr "" + +#: part/models.py:2183 +msgid "Overage" +msgstr "" + +#: part/models.py:2184 +msgid "Estimated build wastage quantity (absolute or percentage)" +msgstr "" + +#: part/models.py:2187 +msgid "BOM item reference" +msgstr "" + +#: part/models.py:2190 +msgid "BOM item notes" +msgstr "" + +#: part/models.py:2192 +msgid "Checksum" +msgstr "" + +#: part/models.py:2192 +msgid "BOM line checksum" +msgstr "" + +#: part/models.py:2196 templates/js/bom.js:279 templates/js/bom.js:286 +#: templates/js/table_filters.js:50 +msgid "Inherited" +msgstr "" + +#: part/models.py:2197 +msgid "This BOM item is inherited by BOMs for variant parts" +msgstr "" + +#: part/models.py:2273 part/views.py:1592 part/views.py:1644 +#: stock/models.py:260 +msgid "Quantity must be integer value for trackable parts" +msgstr "" + +#: part/models.py:2282 part/models.py:2284 +msgid "Sub part must be specified" +msgstr "" + +#: part/models.py:2287 +msgid "BOM Item" +msgstr "" + +#: part/models.py:2404 +msgid "Part 1" +msgstr "" + +#: part/models.py:2408 +msgid "Part 2" +msgstr "" + +#: part/models.py:2408 +msgid "Select Related Part" +msgstr "" + +#: part/models.py:2440 +msgid "" +"Error creating relationship: check that the part is not related to itself " +"and that the relationship is unique" +msgstr "" + +#: part/templates/part/allocation.html:11 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/attachments.html:10 +msgid "Part Attachments" +msgstr "" + +#: part/templates/part/bom-delete.html:6 +msgid "Are you sure you want to delete this BOM item?" +msgstr "" + +#: part/templates/part/bom-delete.html:8 +msgid "Deleting this entry will remove the BOM row from the following part" +msgstr "" + +#: part/templates/part/bom.html:10 part/templates/part/navbar.html:48 +#: part/templates/part/navbar.html:51 +msgid "Bill of Materials" +msgstr "" + +#: part/templates/part/bom.html:19 +#, python-format +msgid "The BOM for %(part)s has changed, and must be validated.
    " +msgstr "" + +#: part/templates/part/bom.html:21 +#, python-format +msgid "" +"The BOM for %(part)s was last checked by %(checker)s on %(check_date)s" +msgstr "" + +#: part/templates/part/bom.html:25 +#, python-format +msgid "The BOM for %(part)s has not been validated." +msgstr "" + +#: part/templates/part/bom.html:32 +msgid "Remove selected BOM items" +msgstr "" + +#: part/templates/part/bom.html:35 +msgid "Import BOM data" +msgstr "" + +#: part/templates/part/bom.html:39 +msgid "Copy BOM from parent part" +msgstr "" + +#: part/templates/part/bom.html:43 +msgid "New BOM Item" +msgstr "" + +#: part/templates/part/bom.html:46 +msgid "Finish Editing" +msgstr "" + +#: part/templates/part/bom.html:51 +msgid "Edit BOM" +msgstr "" + +#: part/templates/part/bom.html:55 +msgid "Validate Bill of Materials" +msgstr "" + +#: part/templates/part/bom.html:61 part/views.py:1887 +msgid "Export Bill of Materials" +msgstr "" + +#: part/templates/part/bom.html:64 +msgid "Print BOM Report" +msgstr "" + +#: part/templates/part/bom.html:109 +msgid "Delete selected BOM items?" +msgstr "" + +#: part/templates/part/bom.html:110 +msgid "All selected BOM items will be deleted" +msgstr "" + +#: part/templates/part/bom.html:160 part/views.py:584 +#: templates/js/stock.js:1158 +msgid "Create New Part" +msgstr "" + +#: part/templates/part/bom_duplicate.html:13 +msgid "This part already has a Bill of Materials" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:11 +#: part/templates/part/bom_upload/select_parts.html:11 +#: part/templates/part/bom_upload/upload_file.html:11 +msgid "Upload Bill of Materials" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:16 +msgid "Step 2 - Select Fields" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:21 +msgid "Missing selections for the following required columns" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:32 +msgid "Submit Selections" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:41 +msgid "File Fields" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:47 +msgid "Remove column" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:58 +msgid "Match Fields" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:68 +msgid "Duplicate column selection" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:76 +#: part/templates/part/bom_upload/select_parts.html:58 +msgid "Remove row" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:16 +msgid "Step 3 - Select Parts" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:21 +msgid "Errors exist in the submitted data" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:27 +msgid "Submit BOM" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:39 +msgid "Row" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:40 +#: part/templates/part/bom_upload/select_parts.html:69 +msgid "Select Part" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:65 +#: part/templates/part/category.html:117 +msgid "Create new part" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:16 +msgid "Step 1 - Select BOM File" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:19 +msgid "Requirements for BOM upload" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:21 +msgid "" +"The BOM file must contain the required named columns as provided in the " +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:21 +msgid "BOM Upload Template" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:22 +msgid "Each part must already exist in the database" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:27 +msgid "Upload File" +msgstr "" + +#: part/templates/part/bom_validate.html:6 +#, python-format +msgid "" +"Confirm that the Bill of Materials (BOM) is valid for:
    %(part)s" +msgstr "" + +#: part/templates/part/bom_validate.html:9 +msgid "This will validate each line in the BOM." +msgstr "" + +#: part/templates/part/build.html:10 +msgid "Part Builds" +msgstr "" + +#: part/templates/part/build.html:18 +msgid "Start New Build" +msgstr "" + +#: part/templates/part/category.html:24 +msgid "All parts" +msgstr "" + +#: part/templates/part/category.html:29 part/views.py:2270 +msgid "Create new part category" +msgstr "" + +#: part/templates/part/category.html:35 +msgid "Edit part category" +msgstr "" + +#: part/templates/part/category.html:40 +msgid "Delete part category" +msgstr "" + +#: part/templates/part/category.html:50 part/templates/part/category.html:89 +msgid "Category Details" +msgstr "" + +#: part/templates/part/category.html:55 +msgid "Category Path" +msgstr "" + +#: part/templates/part/category.html:60 +msgid "Category Description" +msgstr "" + +#: part/templates/part/category.html:79 +#: part/templates/part/category_navbar.html:11 +#: part/templates/part/category_navbar.html:18 +#: part/templates/part/subcategory.html:16 +msgid "Subcategories" +msgstr "" + +#: part/templates/part/category.html:84 +msgid "Parts (Including subcategories)" +msgstr "" + +#: part/templates/part/category.html:113 +msgid "Export Part Data" +msgstr "" + +#: part/templates/part/category.html:125 +msgid "Set category" +msgstr "" + +#: part/templates/part/category.html:125 +msgid "Set Category" +msgstr "" + +#: part/templates/part/category.html:128 +msgid "Export Data" +msgstr "" + +#: part/templates/part/category.html:186 +#: stock/templates/stock/location.html:192 templates/js/stock.js:709 +msgid "Create new location" +msgstr "" + +#: part/templates/part/category.html:191 part/templates/part/category.html:221 +msgid "New Category" +msgstr "" + +#: part/templates/part/category.html:192 +msgid "Create new category" +msgstr "" + +#: part/templates/part/category.html:222 +msgid "Create new Part Category" +msgstr "" + +#: part/templates/part/category.html:228 stock/views.py:1359 +msgid "Create new Stock Location" +msgstr "" + +#: part/templates/part/category_delete.html:5 +msgid "Are you sure you want to delete category" +msgstr "" + +#: part/templates/part/category_delete.html:8 +#, python-format +msgid "This category contains %(count)s child categories" +msgstr "" + +#: part/templates/part/category_delete.html:9 +msgid "" +"If this category is deleted, these child categories will be moved to the" +msgstr "" + +#: part/templates/part/category_delete.html:11 +msgid "category" +msgstr "" + +#: part/templates/part/category_delete.html:13 +msgid "top level Parts category" +msgstr "" + +#: part/templates/part/category_delete.html:25 +#, python-format +msgid "This category contains %(count)s parts" +msgstr "" + +#: part/templates/part/category_delete.html:27 +#, python-format +msgid "" +"If this category is deleted, these parts will be moved to the parent " +"category %(path)s" +msgstr "" + +#: part/templates/part/category_delete.html:29 +msgid "" +"If this category is deleted, these parts will be moved to the top-level " +"category Teile" +msgstr "" + +#: part/templates/part/category_navbar.html:34 +#: part/templates/part/category_navbar.html:37 +#: part/templates/part/navbar.html:22 +msgid "Parameters" +msgstr "" + +#: part/templates/part/category_parametric.html:10 +#: part/templates/part/navbar.html:19 part/templates/part/params.html:10 +msgid "Part Parameters" +msgstr "" + +#: part/templates/part/copy_part.html:9 part/views.py:460 +msgid "Duplicate Part" +msgstr "" + +#: part/templates/part/copy_part.html:10 +#, python-format +msgid "Make a copy of part '%(full_name)s'." +msgstr "" + +#: part/templates/part/copy_part.html:14 +#: part/templates/part/create_part.html:11 +msgid "Possible Matching Parts" +msgstr "" + +#: part/templates/part/copy_part.html:15 +#: part/templates/part/create_part.html:12 +msgid "The new part may be a duplicate of these existing parts" +msgstr "" + +#: part/templates/part/create_part.html:17 +#, python-format +msgid "%(full_name)s - %(desc)s (%(match_per)s%% match)" +msgstr "" + +#: part/templates/part/detail.html:11 part/templates/part/navbar.html:11 +msgid "Part Details" +msgstr "" + +#: part/templates/part/detail.html:42 +msgid "Latest Serial Number" +msgstr "" + +#: part/templates/part/detail.html:47 +msgid "No serial numbers recorded" +msgstr "" + +#: part/templates/part/detail.html:120 +msgid "Stock Expiry Time" +msgstr "" + +#: part/templates/part/detail.html:139 +msgid "Responsible User" +msgstr "" + +#: part/templates/part/detail.html:153 +msgid "Part is virtual (not a physical part)" +msgstr "" + +#: part/templates/part/detail.html:155 +msgid "Part is not a virtual part" +msgstr "" + +#: part/templates/part/detail.html:163 +msgid "Part is a template part (variants can be made from this part)" +msgstr "" + +#: part/templates/part/detail.html:165 +msgid "Part is not a template part" +msgstr "" + +#: part/templates/part/detail.html:173 +msgid "Part can be assembled from other parts" +msgstr "" + +#: part/templates/part/detail.html:175 +msgid "Part cannot be assembled from other parts" +msgstr "" + +#: part/templates/part/detail.html:183 +msgid "Part can be used in assemblies" +msgstr "" + +#: part/templates/part/detail.html:185 +msgid "Part cannot be used in assemblies" +msgstr "" + +#: part/templates/part/detail.html:193 +msgid "Part stock is tracked by serial number" +msgstr "" + +#: part/templates/part/detail.html:195 +msgid "Part stock is not tracked by serial number" +msgstr "" + +#: part/templates/part/detail.html:203 part/templates/part/detail.html:205 +msgid "Part can be purchased from external suppliers" +msgstr "" + +#: part/templates/part/detail.html:213 +msgid "Part can be sold to customers" +msgstr "" + +#: part/templates/part/detail.html:215 +msgid "Part cannot be sold to customers" +msgstr "" + +#: part/templates/part/detail.html:230 +msgid "Part is active" +msgstr "" + +#: part/templates/part/detail.html:232 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/manufacturer.html:11 +msgid "Part Manufacturers" +msgstr "" + +#: part/templates/part/manufacturer.html:24 +msgid "Delete manufacturer parts" +msgstr "" + +#: part/templates/part/manufacturer.html:53 +#: part/templates/part/supplier.html:57 +msgid "Create new manufacturer" +msgstr "" + +#: part/templates/part/navbar.html:26 part/templates/part/variants.html:11 +msgid "Part Variants" +msgstr "" + +#: part/templates/part/navbar.html:29 +msgid "Variants" +msgstr "" + +#: part/templates/part/navbar.html:40 +msgid "Allocated Stock" +msgstr "" + +#: part/templates/part/navbar.html:43 +msgid "Allocations" +msgstr "" + +#: part/templates/part/navbar.html:64 part/templates/part/navbar.html:67 +msgid "Used In" +msgstr "" + +#: part/templates/part/navbar.html:92 +msgid "Sales Price Information" +msgstr "" + +#: part/templates/part/navbar.html:95 +msgid "Sale Price" +msgstr "" + +#: part/templates/part/navbar.html:106 part/templates/part/part_tests.html:10 +msgid "Part Test Templates" +msgstr "" + +#: part/templates/part/navbar.html:109 stock/templates/stock/item_base.html:398 +msgid "Tests" +msgstr "" + +#: part/templates/part/navbar.html:113 part/templates/part/navbar.html:116 +#: part/templates/part/related.html:10 +msgid "Related Parts" +msgstr "" + +#: part/templates/part/navbar.html:125 part/templates/part/notes.html:12 +msgid "Part Notes" +msgstr "" + +#: part/templates/part/params.html:17 +msgid "Add new parameter" +msgstr "" + +#: part/templates/part/params.html:18 +#: templates/InvenTree/settings/category.html:29 +#: templates/InvenTree/settings/part.html:44 +msgid "New Parameter" +msgstr "" + +#: part/templates/part/params.html:28 +#: report/templates/report/inventree_test_report_base.html:90 +#: stock/models.py:1655 templates/InvenTree/settings/header.html:8 +#: templates/js/stock.js:124 +msgid "Value" +msgstr "" + +#: part/templates/part/params.html:41 templates/InvenTree/settings/user.html:19 +msgid "Edit" +msgstr "" + +#: part/templates/part/params.html:68 +msgid "New Template" +msgstr "" + +#: part/templates/part/params.html:69 +msgid "Create New Parameter Template" +msgstr "" + +#: part/templates/part/part_app_base.html:12 +msgid "Part List" +msgstr "" + +#: part/templates/part/part_base.html:18 +#, python-format +msgid "This part is a variant of %(link)s" +msgstr "" + +#: part/templates/part/part_base.html:33 templates/js/company.js:156 +#: templates/js/company.js:254 templates/js/part.js:76 templates/js/part.js:153 +msgid "Inactive" +msgstr "" + +#: part/templates/part/part_base.html:40 +msgid "Star this part" +msgstr "" + +#: part/templates/part/part_base.html:47 +#: stock/templates/stock/item_base.html:131 +#: stock/templates/stock/location.html:51 +msgid "Barcode actions" +msgstr "" + +#: part/templates/part/part_base.html:49 +#: stock/templates/stock/item_base.html:133 +#: stock/templates/stock/location.html:53 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: part/templates/part/part_base.html:50 +#: stock/templates/stock/item_base.html:149 +#: stock/templates/stock/location.html:54 +msgid "Print Label" +msgstr "" + +#: part/templates/part/part_base.html:55 +msgid "Show pricing information" +msgstr "" + +#: part/templates/part/part_base.html:59 +msgid "Count part stock" +msgstr "" + +#: part/templates/part/part_base.html:74 +msgid "Part actions" +msgstr "" + +#: part/templates/part/part_base.html:77 +msgid "Duplicate part" +msgstr "" + +#: part/templates/part/part_base.html:80 +msgid "Edit part" +msgstr "" + +#: part/templates/part/part_base.html:83 +msgid "Delete part" +msgstr "" + +#: part/templates/part/part_base.html:123 templates/js/table_filters.js:156 +msgid "In Stock" +msgstr "" + +#: part/templates/part/part_base.html:136 templates/InvenTree/index.html:131 +msgid "Required for Build Orders" +msgstr "" + +#: part/templates/part/part_base.html:143 +msgid "Required for Sales Orders" +msgstr "" + +#: part/templates/part/part_base.html:150 +msgid "Allocated to Orders" +msgstr "" + +#: part/templates/part/part_base.html:165 templates/js/bom.js:300 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:171 templates/js/part.js:418 +msgid "Building" +msgstr "" + +#: part/templates/part/part_base.html:250 +msgid "Calculate" +msgstr "" + +#: part/templates/part/part_pricing.html:8 +#, python-format +msgid "Pricing information for:
    %(part)s." +msgstr "" + +#: part/templates/part/part_pricing.html:23 +msgid "Supplier Pricing" +msgstr "" + +#: part/templates/part/part_pricing.html:27 +#: part/templates/part/part_pricing.html:53 +msgid "Unit Cost" +msgstr "" + +#: part/templates/part/part_pricing.html:33 +#: part/templates/part/part_pricing.html:59 +msgid "Total Cost" +msgstr "" + +#: part/templates/part/part_pricing.html:41 +msgid "No supplier pricing available" +msgstr "" + +#: part/templates/part/part_pricing.html:49 +msgid "BOM Pricing" +msgstr "" + +#: part/templates/part/part_pricing.html:67 +msgid "Note: BOM pricing is incomplete for this part" +msgstr "" + +#: part/templates/part/part_pricing.html:74 +msgid "No BOM pricing available" +msgstr "" + +#: part/templates/part/part_pricing.html:84 +msgid "No pricing information is available for this part." +msgstr "" + +#: part/templates/part/part_tests.html:17 +msgid "Add Test Template" +msgstr "" + +#: part/templates/part/part_thumb.html:20 +msgid "Select from existing images" +msgstr "" + +#: part/templates/part/partial_delete.html:7 +#, python-format +msgid "Are you sure you want to delete part '%(full_name)s'?" +msgstr "" + +#: part/templates/part/partial_delete.html:12 +#, python-format +msgid "" +"This part is used in BOMs for %(count)s other parts. If you delete this " +"part, the BOMs for the following parts will be updated" +msgstr "" + +#: part/templates/part/partial_delete.html:22 +#, python-format +msgid "" +"There are %(count)s stock entries defined for this part. If you delete this " +"part, the following stock entries will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:33 +#, python-format +msgid "" +"There are %(count)s manufacturers defined for this part. If you delete this " +"part, the following manufacturer parts will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:44 +#, python-format +msgid "" +"There are %(count)s suppliers defined for this part. If you delete this " +"part, the following supplier parts will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:55 +#, python-format +msgid "" +"There are %(count)s unique parts tracked for '%(full_name)s'. Deleting this " +"part will permanently remove this tracking information." +msgstr "" + +#: part/templates/part/related.html:18 +msgid "Add Related" +msgstr "" + +#: part/templates/part/sale_prices.html:10 +msgid "Sell Price Information" +msgstr "" + +#: part/templates/part/sales_orders.html:18 +msgid "New sales order" +msgstr "" + +#: part/templates/part/sales_orders.html:18 +msgid "New Order" +msgstr "" + +#: part/templates/part/set_category.html:9 +msgid "Set category for the following parts" +msgstr "" + +#: part/templates/part/stock.html:10 +msgid "Part Stock" +msgstr "" + +#: part/templates/part/stock.html:16 +#, python-format +msgid "Showing stock for all variants of %(full_name)s" +msgstr "" + +#: part/templates/part/stock_count.html:7 templates/js/bom.js:239 +#: templates/js/part.js:422 +msgid "No Stock" +msgstr "" + +#: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:130 +msgid "Low Stock" +msgstr "" + +#: part/templates/part/supplier.html:10 +msgid "Part Suppliers" +msgstr "" + +#: part/templates/part/track.html:10 +msgid "Part Tracking" +msgstr "" + +#: part/templates/part/used_in.html:9 +msgid "Assemblies" +msgstr "" + +#: part/templates/part/variant_part.html:9 +msgid "Create new part variant" +msgstr "" + +#: part/templates/part/variant_part.html:10 +#, python-format +msgid "Create a new variant of template '%(full_name)s'." +msgstr "" + +#: part/templates/part/variants.html:19 +msgid "Create new variant" +msgstr "" + +#: part/templates/part/variants.html:20 +msgid "New Variant" +msgstr "" + +#: part/views.py:89 +msgid "Add Related Part" +msgstr "" + +#: part/views.py:144 +msgid "Delete Related Part" +msgstr "" + +#: part/views.py:158 +msgid "Add part attachment" +msgstr "" + +#: part/views.py:211 templates/attachment_table.html:32 +msgid "Edit attachment" +msgstr "" + +#: part/views.py:215 +msgid "Part attachment updated" +msgstr "" + +#: part/views.py:230 +msgid "Delete Part Attachment" +msgstr "" + +#: part/views.py:238 +msgid "Deleted part attachment" +msgstr "" + +#: part/views.py:247 +msgid "Create Test Template" +msgstr "" + +#: part/views.py:274 +msgid "Edit Test Template" +msgstr "" + +#: part/views.py:288 +msgid "Delete Test Template" +msgstr "" + +#: part/views.py:295 +msgid "Set Part Category" +msgstr "" + +#: part/views.py:345 +#, python-brace-format +msgid "Set category for {n} parts" +msgstr "" + +#: part/views.py:380 +msgid "Create Variant" +msgstr "" + +#: part/views.py:465 +msgid "Copied part" +msgstr "" + +#: part/views.py:519 part/views.py:657 +msgid "Possible matches exist - confirm creation of new part" +msgstr "" + +#: part/views.py:589 +msgid "Created new part" +msgstr "" + +#: part/views.py:825 +msgid "Part QR Code" +msgstr "" + +#: part/views.py:927 +msgid "Upload Part Image" +msgstr "" + +#: part/views.py:933 part/views.py:968 +msgid "Updated part image" +msgstr "" + +#: part/views.py:942 +msgid "Select Part Image" +msgstr "" + +#: part/views.py:971 +msgid "Part image not found" +msgstr "" + +#: part/views.py:982 +msgid "Edit Part Properties" +msgstr "" + +#: part/views.py:1017 +msgid "Duplicate BOM" +msgstr "" + +#: part/views.py:1047 +msgid "Confirm duplication of BOM from parent" +msgstr "" + +#: part/views.py:1068 +msgid "Validate BOM" +msgstr "" + +#: part/views.py:1089 +msgid "Confirm that the BOM is valid" +msgstr "" + +#: part/views.py:1100 +msgid "Validated Bill of Materials" +msgstr "" + +#: part/views.py:1234 +msgid "No BOM file provided" +msgstr "" + +#: part/views.py:1595 +msgid "Enter a valid quantity" +msgstr "" + +#: part/views.py:1620 part/views.py:1623 +msgid "Select valid part" +msgstr "" + +#: part/views.py:1629 +msgid "Duplicate part selected" +msgstr "" + +#: part/views.py:1667 +msgid "Select a part" +msgstr "" + +#: part/views.py:1673 +msgid "Selected part creates a circular BOM" +msgstr "" + +#: part/views.py:1677 +msgid "Specify quantity" +msgstr "" + +#: part/views.py:1939 +msgid "Confirm Part Deletion" +msgstr "" + +#: part/views.py:1946 +msgid "Part was deleted" +msgstr "" + +#: part/views.py:1955 +msgid "Part Pricing" +msgstr "" + +#: part/views.py:2069 +msgid "Create Part Parameter Template" +msgstr "" + +#: part/views.py:2079 +msgid "Edit Part Parameter Template" +msgstr "" + +#: part/views.py:2086 +msgid "Delete Part Parameter Template" +msgstr "" + +#: part/views.py:2094 +msgid "Create Part Parameter" +msgstr "" + +#: part/views.py:2144 +msgid "Edit Part Parameter" +msgstr "" + +#: part/views.py:2158 +msgid "Delete Part Parameter" +msgstr "" + +#: part/views.py:2218 +msgid "Edit Part Category" +msgstr "" + +#: part/views.py:2256 +msgid "Delete Part Category" +msgstr "" + +#: part/views.py:2262 +msgid "Part category was deleted" +msgstr "" + +#: part/views.py:2314 +msgid "Create Category Parameter Template" +msgstr "" + +#: part/views.py:2415 +msgid "Edit Category Parameter Template" +msgstr "" + +#: part/views.py:2471 +msgid "Delete Category Parameter Template" +msgstr "" + +#: part/views.py:2490 +msgid "Create BOM Item" +msgstr "" + +#: part/views.py:2560 +msgid "Edit BOM item" +msgstr "" + +#: part/views.py:2616 +msgid "Confim BOM item deletion" +msgstr "" + +#: report/models.py:180 +msgid "Template name" +msgstr "" + +#: report/models.py:186 +msgid "Report template file" +msgstr "" + +#: report/models.py:193 +msgid "Report template description" +msgstr "" + +#: report/models.py:199 +msgid "Report revision number (auto-increments)" +msgstr "" + +#: report/models.py:275 +msgid "Report template is enabled" +msgstr "" + +#: report/models.py:295 +msgid "StockItem query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:303 +msgid "Include Installed Tests" +msgstr "" + +#: report/models.py:304 +msgid "Include test results for stock items installed inside assembled item" +msgstr "" + +#: report/models.py:347 +msgid "Build Filters" +msgstr "" + +#: report/models.py:348 +msgid "Build query filters (comma-separated list of key=value pairs" +msgstr "" + +#: report/models.py:385 +msgid "Part Filters" +msgstr "" + +#: report/models.py:386 +msgid "Part query filters (comma-separated list of key=value pairs" +msgstr "" + +#: report/models.py:416 +msgid "Purchase order query filters" +msgstr "" + +#: report/models.py:450 +msgid "Sales order query filters" +msgstr "" + +#: report/models.py:500 +msgid "Snippet" +msgstr "" + +#: report/models.py:501 +msgid "Report snippet file" +msgstr "" + +#: report/models.py:505 +msgid "Snippet file description" +msgstr "" + +#: report/models.py:540 +msgid "Asset" +msgstr "" + +#: report/models.py:541 +msgid "Report asset file" +msgstr "" + +#: report/models.py:544 +msgid "Asset file description" +msgstr "" + +#: report/templates/report/inventree_build_order_base.html:147 +msgid "Required For" +msgstr "" + +#: report/templates/report/inventree_po_report.html:85 +#: report/templates/report/inventree_so_report.html:85 +msgid "Line Items" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:21 +msgid "Stock Item Test Report" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:83 +msgid "Test Results" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:1643 +msgid "Test" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:89 +#: stock/models.py:1649 +msgid "Result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:92 +#: templates/js/order.js:195 templates/js/stock.js:986 +msgid "Date" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:103 +msgid "Pass" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:105 +msgid "Fail" +msgstr "" + +#: stock/api.py:199 +#, python-brace-format +msgid "Updated stock for {n} items" +msgstr "" + +#: stock/api.py:268 +#, python-brace-format +msgid "Moved {n} parts to {loc}" +msgstr "" + +#: stock/forms.py:114 stock/forms.py:406 stock/models.py:475 +#: stock/templates/stock/item_base.html:365 templates/js/stock.js:656 +msgid "Expiry Date" +msgstr "" + +#: stock/forms.py:115 stock/forms.py:407 +msgid "Expiration date for this stock item" +msgstr "" + +#: stock/forms.py:118 +msgid "Enter unique serial numbers (or leave blank)" +msgstr "" + +#: stock/forms.py:169 +msgid "" +"Destination for serialized stock (by default, will remain in current " +"location)" +msgstr "" + +#: stock/forms.py:171 +msgid "Serial numbers" +msgstr "" + +#: stock/forms.py:171 +msgid "Unique serial numbers (must match quantity)" +msgstr "" + +#: stock/forms.py:173 stock/forms.py:349 +msgid "Add transaction note (optional)" +msgstr "" + +#: stock/forms.py:203 stock/forms.py:259 +msgid "Select test report template" +msgstr "" + +#: stock/forms.py:267 templates/js/table_filters.js:70 +#: templates/js/table_filters.js:133 +msgid "Include sublocations" +msgstr "" + +#: stock/forms.py:267 +msgid "Include stock items in sub locations" +msgstr "" + +#: stock/forms.py:302 +msgid "Stock item to install" +msgstr "" + +#: stock/forms.py:309 +msgid "Stock quantity to assign" +msgstr "" + +#: stock/forms.py:337 +msgid "Must not exceed available quantity" +msgstr "" + +#: stock/forms.py:347 +msgid "Destination location for uninstalled items" +msgstr "" + +#: stock/forms.py:351 +msgid "Confirm uninstall" +msgstr "" + +#: stock/forms.py:351 +msgid "Confirm removal of installed stock items" +msgstr "" + +#: stock/forms.py:375 +msgid "Destination stock location" +msgstr "" + +#: stock/forms.py:377 +msgid "Add note (required)" +msgstr "" + +#: stock/forms.py:381 stock/views.py:852 stock/views.py:1051 +msgid "Confirm stock adjustment" +msgstr "" + +#: stock/forms.py:381 +msgid "Confirm movement of stock items" +msgstr "" + +#: stock/forms.py:383 +msgid "Set Default Location" +msgstr "" + +#: stock/forms.py:383 +msgid "Set the destination as the default location for selected parts" +msgstr "" + +#: stock/models.py:54 stock/models.py:513 +msgid "Owner" +msgstr "" + +#: stock/models.py:55 stock/models.py:514 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:205 +msgid "Created stock item" +msgstr "" + +#: stock/models.py:241 +msgid "StockItem with this serial number already exists" +msgstr "" + +#: stock/models.py:277 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:287 stock/models.py:296 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:288 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:310 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:316 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:323 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:365 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:374 +msgid "Base part" +msgstr "" + +#: stock/models.py:383 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:388 stock/templates/stock/stock_app_base.html:8 +msgid "Stock Location" +msgstr "" + +#: stock/models.py:391 +msgid "Where is this stock item located?" +msgstr "" + +#: stock/models.py:398 +msgid "Packaging this stock item is stored in" +msgstr "" + +#: stock/models.py:403 stock/templates/stock/item_base.html:259 +msgid "Installed In" +msgstr "" + +#: stock/models.py:406 +msgid "Is this item installed in another item?" +msgstr "" + +#: stock/models.py:422 +msgid "Serial number for this item" +msgstr "" + +#: stock/models.py:434 +msgid "Batch code for this stock item" +msgstr "" + +#: stock/models.py:438 +msgid "Stock Quantity" +msgstr "" + +#: stock/models.py:447 +msgid "Source Build" +msgstr "" + +#: stock/models.py:449 +msgid "Build for this stock item" +msgstr "" + +#: stock/models.py:460 +msgid "Source Purchase Order" +msgstr "" + +#: stock/models.py:463 +msgid "Purchase order for this stock item" +msgstr "" + +#: stock/models.py:469 +msgid "Destination Sales Order" +msgstr "" + +#: stock/models.py:476 +msgid "" +"Expiry date for stock item. Stock will be considered expired after this date" +msgstr "" + +#: stock/models.py:489 +msgid "Delete on deplete" +msgstr "" + +#: stock/models.py:489 +msgid "Delete this Stock Item when stock is depleted" +msgstr "" + +#: stock/models.py:499 stock/templates/stock/item_notes.html:13 +#: stock/templates/stock/navbar.html:54 +msgid "Stock Item Notes" +msgstr "" + +#: stock/models.py:509 +msgid "Single unit purchase price at time of purchase" +msgstr "" + +#: stock/models.py:614 +msgid "Assigned to Customer" +msgstr "" + +#: stock/models.py:616 +msgid "Manually assigned to customer" +msgstr "" + +#: stock/models.py:629 +msgid "Returned from customer" +msgstr "" + +#: stock/models.py:631 +msgid "Returned to location" +msgstr "" + +#: stock/models.py:792 +msgid "Installed into stock item" +msgstr "" + +#: stock/models.py:800 +msgid "Installed stock item" +msgstr "" + +#: stock/models.py:824 +msgid "Uninstalled stock item" +msgstr "" + +#: stock/models.py:843 +msgid "Uninstalled into location" +msgstr "" + +#: stock/models.py:944 +msgid "Part is not set as trackable" +msgstr "" + +#: stock/models.py:950 +msgid "Quantity must be integer" +msgstr "" + +#: stock/models.py:956 +#, python-brace-format +msgid "Quantity must not exceed available stock quantity ({n})" +msgstr "" + +#: stock/models.py:959 +msgid "Serial numbers must be a list of integers" +msgstr "" + +#: stock/models.py:962 +msgid "Quantity does not match serial numbers" +msgstr "" + +#: stock/models.py:994 +msgid "Add serial number" +msgstr "" + +#: stock/models.py:997 +#, python-brace-format +msgid "Serialized {n} items" +msgstr "" + +#: stock/models.py:1075 +msgid "Split from existing stock" +msgstr "" + +#: stock/models.py:1113 +msgid "StockItem cannot be moved as it is not in stock" +msgstr "" + +#: stock/models.py:1556 +msgid "Title" +msgstr "" + +#: stock/models.py:1556 +msgid "Tracking entry title" +msgstr "" + +#: stock/models.py:1558 +msgid "Entry notes" +msgstr "" + +#: stock/models.py:1560 +msgid "Link to external page for further information" +msgstr "" + +#: stock/models.py:1620 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:1626 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:1644 +msgid "Test name" +msgstr "" + +#: stock/models.py:1650 templates/js/table_filters.js:212 +msgid "Test result" +msgstr "" + +#: stock/models.py:1656 +msgid "Test output value" +msgstr "" + +#: stock/models.py:1663 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:1669 +msgid "Test notes" +msgstr "" + +#: stock/templates/stock/item.html:12 +msgid "Stock Tracking Information" +msgstr "" + +#: stock/templates/stock/item.html:30 +msgid "New Entry" +msgstr "" + +#: stock/templates/stock/item_attachments.html:11 +msgid "Stock Item Attachments" +msgstr "" + +#: stock/templates/stock/item_base.html:24 +msgid "" +"You are not in the list of owners of this item. This stock item cannot be " +"edited." +msgstr "" + +#: stock/templates/stock/item_base.html:31 +msgid "This stock item is in production and cannot be edited." +msgstr "" + +#: stock/templates/stock/item_base.html:32 +msgid "Edit the stock item from the build view." +msgstr "" + +#: stock/templates/stock/item_base.html:45 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:53 +#, python-format +msgid "" +"This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgstr "" + +#: stock/templates/stock/item_base.html:61 +#, python-format +msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgstr "" + +#: stock/templates/stock/item_base.html:67 +msgid "" +"This stock item is serialized - it has a unique serial number and the " +"quantity cannot be adjusted." +msgstr "" + +#: stock/templates/stock/item_base.html:71 +msgid "This stock item cannot be deleted as it has child items" +msgstr "" + +#: stock/templates/stock/item_base.html:75 +msgid "" +"This stock item will be automatically deleted when all stock is depleted." +msgstr "" + +#: stock/templates/stock/item_base.html:95 +#: stock/templates/stock/item_base.html:369 templates/js/table_filters.js:145 +msgid "Expired" +msgstr "" + +#: stock/templates/stock/item_base.html:99 +#: stock/templates/stock/item_base.html:371 templates/js/table_filters.js:150 +msgid "Stale" +msgstr "" + +#: stock/templates/stock/item_base.html:136 templates/js/barcode.js:309 +#: templates/js/barcode.js:314 +msgid "Unlink Barcode" +msgstr "" + +#: stock/templates/stock/item_base.html:138 +msgid "Link Barcode" +msgstr "" + +#: stock/templates/stock/item_base.html:140 templates/stock_table.html:31 +msgid "Scan to Location" +msgstr "" + +#: stock/templates/stock/item_base.html:147 +msgid "Printing actions" +msgstr "" + +#: stock/templates/stock/item_base.html:151 +#: stock/templates/stock/item_tests.html:27 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item_base.html:160 +msgid "Stock adjustment actions" +msgstr "" + +#: stock/templates/stock/item_base.html:164 +#: stock/templates/stock/location.html:65 templates/stock_table.html:56 +msgid "Count stock" +msgstr "" + +#: stock/templates/stock/item_base.html:167 templates/stock_table.html:54 +msgid "Add stock" +msgstr "" + +#: stock/templates/stock/item_base.html:170 templates/stock_table.html:55 +msgid "Remove stock" +msgstr "" + +#: stock/templates/stock/item_base.html:173 +msgid "Serialize stock" +msgstr "" + +#: stock/templates/stock/item_base.html:177 +msgid "Transfer stock" +msgstr "" + +#: stock/templates/stock/item_base.html:180 +msgid "Assign to customer" +msgstr "" + +#: stock/templates/stock/item_base.html:183 +msgid "Return to stock" +msgstr "" + +#: stock/templates/stock/item_base.html:187 templates/js/stock.js:1299 +msgid "Uninstall stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:187 +msgid "Uninstall" +msgstr "" + +#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/location.html:62 +msgid "Stock actions" +msgstr "" + +#: stock/templates/stock/item_base.html:199 +msgid "Convert to variant" +msgstr "" + +#: stock/templates/stock/item_base.html:202 +msgid "Duplicate stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:204 +msgid "Edit stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:207 +msgid "Delete stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:219 +msgid "Stock Item Details" +msgstr "" + +#: stock/templates/stock/item_base.html:278 templates/js/build.js:442 +msgid "No location set" +msgstr "" + +#: stock/templates/stock/item_base.html:285 +msgid "Barcode Identifier" +msgstr "" + +#: stock/templates/stock/item_base.html:327 +msgid "Parent Item" +msgstr "" + +#: stock/templates/stock/item_base.html:369 +#, python-format +msgid "This StockItem expired on %(item.expiry_date)s" +msgstr "" + +#: stock/templates/stock/item_base.html:371 +#, python-format +msgid "This StockItem expires on %(item.expiry_date)s" +msgstr "" + +#: stock/templates/stock/item_base.html:378 templates/js/stock.js:662 +msgid "Last Updated" +msgstr "" + +#: stock/templates/stock/item_base.html:383 +msgid "Last Stocktake" +msgstr "" + +#: stock/templates/stock/item_base.html:387 +msgid "No stocktake performed" +msgstr "" + +#: stock/templates/stock/item_childs.html:12 +msgid "Child Stock Items" +msgstr "" + +#: stock/templates/stock/item_childs.html:20 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item_delete.html:9 +msgid "Are you sure you want to delete this stock item?" +msgstr "" + +#: stock/templates/stock/item_delete.html:12 +#, python-format +msgid "" +"This will remove %(qty)s units of %(full_name)s from stock." +msgstr "" + +#: stock/templates/stock/item_install.html:7 +msgid "Install another StockItem into this item." +msgstr "" + +#: stock/templates/stock/item_install.html:10 +msgid "Stock items can only be installed if they meet the following criteria" +msgstr "" + +#: stock/templates/stock/item_install.html:13 +msgid "The StockItem links to a Part which is in the BOM for this StockItem" +msgstr "" + +#: stock/templates/stock/item_install.html:14 +msgid "The StockItem is currently in stock" +msgstr "" + +#: stock/templates/stock/item_installed.html:11 +#: stock/templates/stock/navbar.html:27 +msgid "Installed Stock Items" +msgstr "" + +#: stock/templates/stock/item_serialize.html:5 +msgid "Create serialized items from this stock item." +msgstr "" + +#: stock/templates/stock/item_serialize.html:7 +msgid "Select quantity to serialize, and unique serial numbers." +msgstr "" + +#: stock/templates/stock/item_tests.html:11 +#: stock/templates/stock/navbar.html:19 stock/templates/stock/navbar.html:22 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item_tests.html:20 +msgid "Delete Test Data" +msgstr "" + +#: stock/templates/stock/item_tests.html:24 +msgid "Add Test Data" +msgstr "" + +#: stock/templates/stock/location.html:20 +msgid "" +"You are not in the list of owners of this location. This stock location " +"cannot be edited." +msgstr "" + +#: stock/templates/stock/location.html:37 +msgid "All stock items" +msgstr "" + +#: stock/templates/stock/location.html:55 +msgid "Check-in Items" +msgstr "" + +#: stock/templates/stock/location.html:71 +msgid "Location actions" +msgstr "" + +#: stock/templates/stock/location.html:73 +msgid "Edit location" +msgstr "" + +#: stock/templates/stock/location.html:75 +msgid "Delete location" +msgstr "" + +#: stock/templates/stock/location.html:87 +msgid "Location Details" +msgstr "" + +#: stock/templates/stock/location.html:92 +msgid "Location Path" +msgstr "" + +#: stock/templates/stock/location.html:97 +msgid "Location Description" +msgstr "" + +#: stock/templates/stock/location.html:102 +#: stock/templates/stock/location_navbar.html:11 +#: stock/templates/stock/location_navbar.html:18 +#: stock/templates/stock/sublocation.html:16 +msgid "Sublocations" +msgstr "" + +#: stock/templates/stock/location.html:112 +msgid "Stock Details" +msgstr "" + +#: stock/templates/stock/location.html:117 templates/InvenTree/search.html:279 +#: templates/stats.html:76 users/models.py:39 +msgid "Stock Locations" +msgstr "" + +#: stock/templates/stock/location_delete.html:7 +msgid "Are you sure you want to delete this stock location?" +msgstr "" + +#: stock/templates/stock/navbar.html:11 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/templates/stock/navbar.html:14 +msgid "History" +msgstr "" + +#: stock/templates/stock/navbar.html:30 +msgid "Installed Items" +msgstr "" + +#: stock/templates/stock/navbar.html:38 +msgid "Child Items" +msgstr "" + +#: stock/templates/stock/navbar.html:41 +msgid "Children" +msgstr "" + +#: stock/templates/stock/stock_adjust.html:43 +msgid "Remove item" +msgstr "" + +#: stock/templates/stock/stock_app_base.html:16 +msgid "Loading..." +msgstr "" + +#: stock/templates/stock/stock_uninstall.html:8 +msgid "The following stock items will be uninstalled" +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1332 +msgid "Convert Stock Item" +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:8 +#, python-format +msgid "This stock item is current an instance of %(part)s" +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:9 +msgid "It can be converted to one of the part variants listed below." +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:14 +msgid "This action cannot be easily undone" +msgstr "" + +#: stock/templates/stock/sublocation.html:23 templates/stock_table.html:37 +msgid "Printing Actions" +msgstr "" + +#: stock/templates/stock/sublocation.html:27 templates/stock_table.html:41 +msgid "Print labels" +msgstr "" + +#: stock/templates/stock/tracking_delete.html:6 +msgid "Are you sure you want to delete this stock tracking entry?" +msgstr "" + +#: stock/views.py:123 +msgid "Edit Stock Location" +msgstr "" + +#: stock/views.py:230 stock/views.py:1322 stock/views.py:1433 +#: stock/views.py:1798 +msgid "Owner is required (ownership control is enabled)" +msgstr "" + +#: stock/views.py:245 +msgid "Stock Location QR code" +msgstr "" + +#: stock/views.py:265 +msgid "Add Stock Item Attachment" +msgstr "" + +#: stock/views.py:311 +msgid "Edit Stock Item Attachment" +msgstr "" + +#: stock/views.py:327 +msgid "Delete Stock Item Attachment" +msgstr "" + +#: stock/views.py:343 +msgid "Assign to Customer" +msgstr "" + +#: stock/views.py:352 +msgid "Customer must be specified" +msgstr "" + +#: stock/views.py:376 +msgid "Return to Stock" +msgstr "" + +#: stock/views.py:385 +msgid "Specify a valid location" +msgstr "" + +#: stock/views.py:396 +msgid "Stock item returned from customer" +msgstr "" + +#: stock/views.py:407 +msgid "Delete All Test Data" +msgstr "" + +#: stock/views.py:424 +msgid "Confirm test data deletion" +msgstr "" + +#: stock/views.py:444 +msgid "Add Test Result" +msgstr "" + +#: stock/views.py:484 +msgid "Edit Test Result" +msgstr "" + +#: stock/views.py:501 +msgid "Delete Test Result" +msgstr "" + +#: stock/views.py:509 +msgid "Stock Export Options" +msgstr "" + +#: stock/views.py:630 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/views.py:656 +msgid "Install Stock Item" +msgstr "" + +#: stock/views.py:755 +msgid "Uninstall Stock Items" +msgstr "" + +#: stock/views.py:863 +msgid "Uninstalled stock items" +msgstr "" + +#: stock/views.py:888 +msgid "Adjust Stock" +msgstr "" + +#: stock/views.py:998 +msgid "Move Stock Items" +msgstr "" + +#: stock/views.py:998 +msgid "Move" +msgstr "" + +#: stock/views.py:999 +msgid "Count Stock Items" +msgstr "" + +#: stock/views.py:999 +msgid "Count" +msgstr "" + +#: stock/views.py:1000 +msgid "Remove From Stock" +msgstr "" + +#: stock/views.py:1000 +msgid "Take" +msgstr "" + +#: stock/views.py:1001 +msgid "Add Stock Items" +msgstr "" + +#: stock/views.py:1001 users/models.py:180 +msgid "Add" +msgstr "" + +#: stock/views.py:1002 +msgid "Delete Stock Items" +msgstr "" + +#: stock/views.py:1031 +msgid "Must enter integer value" +msgstr "" + +#: stock/views.py:1036 +msgid "Quantity must be positive" +msgstr "" + +#: stock/views.py:1043 +#, python-brace-format +msgid "Quantity must not exceed {x}" +msgstr "" + +#: stock/views.py:1107 +msgid "No action performed" +msgstr "" + +#: stock/views.py:1122 +#, python-brace-format +msgid "Added stock to {n} items" +msgstr "" + +#: stock/views.py:1137 +#, python-brace-format +msgid "Removed stock from {n} items" +msgstr "" + +#: stock/views.py:1150 +#, python-brace-format +msgid "Counted stock for {n} items" +msgstr "" + +#: stock/views.py:1190 +msgid "No items were moved" +msgstr "" + +#: stock/views.py:1193 +#, python-brace-format +msgid "Moved {n} items to {dest}" +msgstr "" + +#: stock/views.py:1212 +#, python-brace-format +msgid "Deleted {n} stock items" +msgstr "" + +#: stock/views.py:1224 +msgid "Edit Stock Item" +msgstr "" + +#: stock/views.py:1450 +msgid "Serialize Stock" +msgstr "" + +#: stock/views.py:1543 templates/js/build.js:210 +msgid "Create new Stock Item" +msgstr "" + +#: stock/views.py:1685 +msgid "Duplicate Stock Item" +msgstr "" + +#: stock/views.py:1767 +msgid "Quantity cannot be negative" +msgstr "" + +#: stock/views.py:1867 +msgid "Delete Stock Location" +msgstr "" + +#: stock/views.py:1880 +msgid "Delete Stock Item" +msgstr "" + +#: stock/views.py:1891 +msgid "Delete Stock Tracking Entry" +msgstr "" + +#: stock/views.py:1898 +msgid "Edit Stock Tracking Entry" +msgstr "" + +#: stock/views.py:1907 +msgid "Add Stock Tracking Entry" +msgstr "" + +#: templates/403.html:5 templates/403.html:11 +msgid "Permission Denied" +msgstr "" + +#: templates/403.html:14 +msgid "You do not have permission to view this page." +msgstr "" + +#: templates/404.html:5 templates/404.html:11 +msgid "Page Not Found" +msgstr "" + +#: templates/404.html:14 +msgid "The requested page does not exist" +msgstr "" + +#: templates/InvenTree/index.html:7 +msgid "Index" +msgstr "" + +#: templates/InvenTree/index.html:98 +msgid "Starred Parts" +msgstr "" + +#: templates/InvenTree/index.html:99 +msgid "Latest Parts" +msgstr "" + +#: templates/InvenTree/index.html:100 +msgid "BOM Waiting Validation" +msgstr "" + +#: templates/InvenTree/index.html:129 +msgid "Recently Updated" +msgstr "" + +#: templates/InvenTree/index.html:145 +msgid "Expired Stock" +msgstr "" + +#: templates/InvenTree/index.html:146 +msgid "Stale Stock" +msgstr "" + +#: templates/InvenTree/index.html:184 +msgid "Build Orders In Progress" +msgstr "" + +#: templates/InvenTree/index.html:185 +msgid "Overdue Build Orders" +msgstr "" + +#: templates/InvenTree/index.html:206 +msgid "Outstanding Purchase Orders" +msgstr "" + +#: templates/InvenTree/index.html:207 +msgid "Overdue Purchase Orders" +msgstr "" + +#: templates/InvenTree/index.html:229 +msgid "Outstanding Sales Orders" +msgstr "" + +#: templates/InvenTree/index.html:230 +msgid "Overdue Sales Orders" +msgstr "" + +#: templates/InvenTree/search.html:8 templates/InvenTree/search.html:14 +msgid "Search Results" +msgstr "" + +#: templates/InvenTree/search.html:24 +msgid "Enter a search query" +msgstr "" + +#: templates/InvenTree/search.html:268 templates/js/stock.js:300 +msgid "Shipped to customer" +msgstr "" + +#: templates/InvenTree/search.html:271 templates/js/stock.js:310 +msgid "No stock location set" +msgstr "" + +#: templates/InvenTree/settings/build.html:10 +msgid "Build Order Settings" +msgstr "" + +#: templates/InvenTree/settings/category.html:9 +msgid "Category Settings" +msgstr "" + +#: templates/InvenTree/settings/category.html:25 +msgid "Category Parameter Templates" +msgstr "" + +#: templates/InvenTree/settings/category.html:52 +msgid "No category parameter templates found" +msgstr "" + +#: templates/InvenTree/settings/category.html:70 +#: templates/InvenTree/settings/part.html:81 +msgid "Edit Template" +msgstr "" + +#: templates/InvenTree/settings/category.html:71 +#: templates/InvenTree/settings/part.html:82 +msgid "Delete Template" +msgstr "" + +#: templates/InvenTree/settings/global.html:10 +msgid "Global InvenTree Settings" +msgstr "" + +#: templates/InvenTree/settings/global.html:27 +msgid "Barcode Settings" +msgstr "" + +#: templates/InvenTree/settings/header.html:7 +msgid "Setting" +msgstr "" + +#: templates/InvenTree/settings/part.html:9 +msgid "Part Settings" +msgstr "" + +#: templates/InvenTree/settings/part.html:14 +msgid "Part Options" +msgstr "" + +#: templates/InvenTree/settings/part.html:40 +msgid "Part Parameter Templates" +msgstr "" + +#: templates/InvenTree/settings/part.html:61 +msgid "No part parameter templates found" +msgstr "" + +#: templates/InvenTree/settings/po.html:9 +msgid "Purchase Order Settings" +msgstr "" + +#: templates/InvenTree/settings/report.html:10 +msgid "Report Settings" +msgstr "" + +#: templates/InvenTree/settings/setting.html:23 +msgid "No value set" +msgstr "" + +#: templates/InvenTree/settings/setting.html:31 +msgid "Edit setting" +msgstr "" + +#: templates/InvenTree/settings/settings.html:8 +#: templates/InvenTree/settings/settings.html:14 templates/navbar.html:84 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/so.html:9 +msgid "Sales Order Settings" +msgstr "" + +#: templates/InvenTree/settings/stock.html:9 +msgid "Stock Settings" +msgstr "" + +#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:49 +msgid "Stock Options" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:3 +#: templates/InvenTree/settings/user.html:10 +msgid "User Settings" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:6 +msgid "Account" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:9 +msgid "Theme" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:13 +msgid "InvenTree Settings" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:16 +msgid "Global" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:19 +msgid "Report" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:22 +msgid "Categories" +msgstr "" + +#: templates/InvenTree/settings/theme.html:10 +msgid "Theme Settings" +msgstr "" + +#: templates/InvenTree/settings/theme.html:17 +msgid "Color Themes" +msgstr "" + +#: templates/InvenTree/settings/theme.html:29 +#, python-format +msgid "" +"\n" +"\t\tThe CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected " +"color theme was not found.
    \n" +"\t\tPlease select another color theme :)\n" +"\t" +msgstr "" + +#: templates/InvenTree/settings/user.html:16 +msgid "User Information" +msgstr "" + +#: templates/InvenTree/settings/user.html:21 +msgid "Change Password" +msgstr "" + +#: templates/InvenTree/settings/user.html:28 +#: templates/registration/login.html:59 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:32 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:36 +msgid "Last Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:40 +msgid "Email Address" +msgstr "" + +#: templates/about.html:13 +msgid "InvenTree Version Information" +msgstr "" + +#: templates/about.html:22 +msgid "InvenTree Version" +msgstr "" + +#: templates/about.html:26 +msgid "Up to Date" +msgstr "" + +#: templates/about.html:28 +msgid "Update Available" +msgstr "" + +#: templates/about.html:34 +msgid "Django Version" +msgstr "" + +#: templates/about.html:41 +msgid "Commit Hash" +msgstr "" + +#: templates/about.html:48 +msgid "Commit Date" +msgstr "" + +#: templates/about.html:53 +msgid "InvenTree Documentation" +msgstr "" + +#: templates/about.html:58 +msgid "View Code on GitHub" +msgstr "" + +#: templates/about.html:63 +msgid "Get the App" +msgstr "" + +#: templates/about.html:68 +msgid "Submit Bug Report" +msgstr "" + +#: templates/attachment_table.html:6 +msgid "Add Attachment" +msgstr "" + +#: templates/attachment_table.html:15 +msgid "File" +msgstr "" + +#: templates/attachment_table.html:17 +msgid "Uploaded" +msgstr "" + +#: templates/attachment_table.html:35 +msgid "Delete attachment" +msgstr "" + +#: templates/image_download.html:8 +msgid "Specify URL for downloading image" +msgstr "" + +#: templates/image_download.html:11 +msgid "Must be a valid image URL" +msgstr "" + +#: templates/image_download.html:12 +msgid "Remote server must be accessible" +msgstr "" + +#: templates/image_download.html:13 +msgid "Remote image must not exceed maximum allowable file size" +msgstr "" + +#: templates/js/barcode.js:8 +msgid "Scan barcode data here using wedge scanner" +msgstr "" + +#: templates/js/barcode.js:10 +msgid "Enter barcode data" +msgstr "" + +#: templates/js/barcode.js:14 +msgid "Barcode" +msgstr "" + +#: templates/js/barcode.js:32 +msgid "Enter optional notes for stock transfer" +msgstr "" + +#: templates/js/barcode.js:33 +msgid "Enter notes" +msgstr "" + +#: templates/js/barcode.js:71 +msgid "Server error" +msgstr "" + +#: templates/js/barcode.js:92 +msgid "Unknown response from server" +msgstr "" + +#: templates/js/barcode.js:119 templates/js/modals.js:857 +msgid "Invalid server response" +msgstr "" + +#: templates/js/barcode.js:212 +msgid "Scan barcode data below" +msgstr "" + +#: templates/js/barcode.js:270 +msgid "No URL in response" +msgstr "" + +#: templates/js/barcode.js:288 +msgid "Link Barcode to Stock Item" +msgstr "" + +#: templates/js/barcode.js:311 +msgid "" +"This will remove the association between this stock item and the barcode" +msgstr "" + +#: templates/js/barcode.js:317 +msgid "Unlink" +msgstr "" + +#: templates/js/barcode.js:376 +msgid "Remove stock item" +msgstr "" + +#: templates/js/barcode.js:418 +msgid "Check Stock Items into Location" +msgstr "" + +#: templates/js/barcode.js:422 templates/js/barcode.js:547 +msgid "Check In" +msgstr "" + +#: templates/js/barcode.js:462 templates/js/barcode.js:586 +msgid "Error transferring stock" +msgstr "" + +#: templates/js/barcode.js:481 +msgid "Stock Item already scanned" +msgstr "" + +#: templates/js/barcode.js:485 +msgid "Stock Item already in this location" +msgstr "" + +#: templates/js/barcode.js:492 +msgid "Added stock item" +msgstr "" + +#: templates/js/barcode.js:499 +msgid "Barcode does not match Stock Item" +msgstr "" + +#: templates/js/barcode.js:542 +msgid "Check Into Location" +msgstr "" + +#: templates/js/barcode.js:605 +msgid "Barcode does not match a valid location" +msgstr "" + +#: templates/js/bom.js:175 templates/js/build.js:934 +msgid "Open subassembly" +msgstr "" + +#: templates/js/bom.js:261 +msgid "No pricing available" +msgstr "" + +#: templates/js/bom.js:272 templates/js/filters.js:167 +#: templates/js/filters.js:397 +msgid "true" +msgstr "" + +#: templates/js/bom.js:273 templates/js/filters.js:171 +#: templates/js/filters.js:398 +msgid "false" +msgstr "" + +#: templates/js/bom.js:290 templates/js/bom.js:376 +msgid "View BOM" +msgstr "" + +#: templates/js/bom.js:350 +msgid "Validate BOM Item" +msgstr "" + +#: templates/js/bom.js:352 +msgid "This line has been validated" +msgstr "" + +#: templates/js/bom.js:354 +msgid "Edit BOM Item" +msgstr "" + +#: templates/js/bom.js:356 +msgid "Delete BOM Item" +msgstr "" + +#: templates/js/bom.js:447 templates/js/build.js:305 templates/js/build.js:1032 +msgid "No BOM items found" +msgstr "" + +#: templates/js/build.js:56 +msgid "Auto-allocate stock items to this output" +msgstr "" + +#: templates/js/build.js:62 +msgid "Complete build output" +msgstr "" + +#: templates/js/build.js:71 +msgid "Unallocate stock from build output" +msgstr "" + +#: templates/js/build.js:77 +msgid "Delete build output" +msgstr "" + +#: templates/js/build.js:209 templates/stock_table.html:20 +msgid "New Stock Item" +msgstr "" + +#: templates/js/build.js:493 +msgid "Required Part" +msgstr "" + +#: templates/js/build.js:514 +msgid "Quantity Per" +msgstr "" + +#: templates/js/build.js:582 templates/js/build.js:996 +#: templates/stock_table.html:58 +msgid "Order stock" +msgstr "" + +#: templates/js/build.js:632 +msgid "No builds matching query" +msgstr "" + +#: templates/js/build.js:649 templates/js/part.js:324 templates/js/part.js:546 +#: templates/js/stock.js:511 templates/js/stock.js:938 +#: templates/js/stock.js:1331 +msgid "Select" +msgstr "" + +#: templates/js/build.js:669 +msgid "Build order is overdue" +msgstr "" + +#: templates/js/build.js:767 +msgid "No parts allocated for" +msgstr "" + +#: templates/js/company.js:74 +msgid "Parts Supplied" +msgstr "" + +#: templates/js/company.js:83 +msgid "Parts Manufactured" +msgstr "" + +#: templates/js/company.js:96 +msgid "No company information found" +msgstr "" + +#: templates/js/company.js:129 +msgid "No manufacturer parts found" +msgstr "" + +#: templates/js/company.js:148 templates/js/company.js:246 +#: templates/js/part.js:60 templates/js/part.js:145 +msgid "Template part" +msgstr "" + +#: templates/js/company.js:152 templates/js/company.js:250 +#: templates/js/part.js:64 templates/js/part.js:149 +msgid "Assembled part" +msgstr "" + +#: templates/js/company.js:227 +msgid "No supplier parts found" +msgstr "" + +#: templates/js/filters.js:193 +msgid "Select filter" +msgstr "" + +#: templates/js/filters.js:268 +msgid "Add new filter" +msgstr "" + +#: templates/js/filters.js:271 +msgid "Clear all filters" +msgstr "" + +#: templates/js/filters.js:296 +msgid "Create filter" +msgstr "" + +#: templates/js/label.js:10 templates/js/report.js:98 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/label.js:11 +msgid "Stock item(s) must be selected before printing labels" +msgstr "" + +#: templates/js/label.js:29 templates/js/label.js:79 +msgid "No Labels Found" +msgstr "" + +#: templates/js/label.js:30 +msgid "No labels found which match selected stock item(s)" +msgstr "" + +#: templates/js/label.js:61 +msgid "Select Stock Locations" +msgstr "" + +#: templates/js/label.js:62 +msgid "Stock location(s) must be selected before printing labels" +msgstr "" + +#: templates/js/label.js:80 +msgid "No labels found which match selected stock location(s)" +msgstr "" + +#: templates/js/label.js:154 +msgid "stock items selected" +msgstr "" + +#: templates/js/label.js:162 +msgid "Select Label" +msgstr "" + +#: templates/js/label.js:177 +msgid "Select Label Template" +msgstr "" + +#: templates/js/modals.js:256 +msgid "Waiting for server..." +msgstr "" + +#: templates/js/modals.js:406 +msgid "Show Error Information" +msgstr "" + +#: templates/js/modals.js:473 templates/modals.html:73 +msgid "Accept" +msgstr "" + +#: templates/js/modals.js:474 templates/modals.html:72 +msgid "Cancel" +msgstr "" + +#: templates/js/modals.js:538 +msgid "Loading Data" +msgstr "" + +#: templates/js/modals.js:549 templates/js/modals.js:808 +#: templates/modals.html:29 templates/modals.html:53 +msgid "Submit" +msgstr "" + +#: templates/js/modals.js:550 templates/js/modals.js:809 +#: templates/modals.html:28 templates/modals.html:52 templates/modals.html:93 +msgid "Close" +msgstr "" + +#: templates/js/modals.js:760 +msgid "Invalid response from server" +msgstr "" + +#: templates/js/modals.js:760 +msgid "Form data missing from server response" +msgstr "" + +#: templates/js/modals.js:773 +msgid "Error posting form data" +msgstr "" + +#: templates/js/modals.js:857 +msgid "JSON response missing form data" +msgstr "" + +#: templates/js/modals.js:867 +msgid "No Response" +msgstr "" + +#: templates/js/modals.js:868 +msgid "No response from the InvenTree server" +msgstr "" + +#: templates/js/modals.js:872 +msgid "Error 400: Bad Request" +msgstr "" + +#: templates/js/modals.js:873 +msgid "Server returned error code 400" +msgstr "" + +#: templates/js/modals.js:877 +msgid "Error 401: Not Authenticated" +msgstr "" + +#: templates/js/modals.js:878 +msgid "Authentication credentials not supplied" +msgstr "" + +#: templates/js/modals.js:882 +msgid "Error 403: Permission Denied" +msgstr "" + +#: templates/js/modals.js:883 +msgid "You do not have the required permissions to access this function" +msgstr "" + +#: templates/js/modals.js:887 +msgid "Error 404: Resource Not Found" +msgstr "" + +#: templates/js/modals.js:888 +msgid "The requested resource could not be located on the server" +msgstr "" + +#: templates/js/modals.js:892 +msgid "Error 408: Timeout" +msgstr "" + +#: templates/js/modals.js:893 +msgid "Connection timeout while requesting data from server" +msgstr "" + +#: templates/js/modals.js:896 +msgid "Error requesting form data" +msgstr "" + +#: templates/js/order.js:138 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/order.js:162 templates/js/order.js:257 +msgid "Order is overdue" +msgstr "" + +#: templates/js/order.js:234 +msgid "No sales orders found" +msgstr "" + +#: templates/js/part.js:52 templates/js/part.js:137 +msgid "Trackable part" +msgstr "" + +#: templates/js/part.js:56 templates/js/part.js:141 +msgid "Virtual part" +msgstr "" + +#: templates/js/part.js:68 +msgid "Starred part" +msgstr "" + +#: templates/js/part.js:72 +msgid "Salable part" +msgstr "" + +#: templates/js/part.js:186 +msgid "No variants found" +msgstr "" + +#: templates/js/part.js:272 templates/js/part.js:452 +msgid "No parts found" +msgstr "" + +#: templates/js/part.js:391 +msgid "No category" +msgstr "" + +#: templates/js/part.js:409 templates/js/table_filters.js:318 +msgid "Low stock" +msgstr "" + +#: templates/js/part.js:571 templates/js/stock.js:962 +msgid "Path" +msgstr "" + +#: templates/js/part.js:588 +msgid "YES" +msgstr "" + +#: templates/js/part.js:590 +msgid "NO" +msgstr "" + +#: templates/js/part.js:624 +msgid "No test templates matching query" +msgstr "" + +#: templates/js/part.js:675 templates/js/stock.js:75 +msgid "Edit test result" +msgstr "" + +#: templates/js/part.js:676 templates/js/stock.js:76 +msgid "Delete test result" +msgstr "" + +#: templates/js/part.js:682 +msgid "This test is defined for a parent part" +msgstr "" + +#: templates/js/report.js:47 +msgid "items selected" +msgstr "" + +#: templates/js/report.js:55 +msgid "Select Report Template" +msgstr "" + +#: templates/js/report.js:70 +msgid "Select Test Report Template" +msgstr "" + +#: templates/js/report.js:99 +msgid "Stock item(s) must be selected before printing reports" +msgstr "" + +#: templates/js/report.js:116 templates/js/report.js:169 +#: templates/js/report.js:223 templates/js/report.js:277 +#: templates/js/report.js:331 +msgid "No Reports Found" +msgstr "" + +#: templates/js/report.js:117 +msgid "No report templates found which match selected stock item(s)" +msgstr "" + +#: templates/js/report.js:152 +msgid "Select Builds" +msgstr "" + +#: templates/js/report.js:153 +msgid "Build(s) must be selected before printing reports" +msgstr "" + +#: templates/js/report.js:170 +msgid "No report templates found which match selected build(s)" +msgstr "" + +#: templates/js/report.js:205 +msgid "Select Parts" +msgstr "" + +#: templates/js/report.js:206 +msgid "Part(s) must be selected before printing reports" +msgstr "" + +#: templates/js/report.js:224 +msgid "No report templates found which match selected part(s)" +msgstr "" + +#: templates/js/report.js:259 +msgid "Select Purchase Orders" +msgstr "" + +#: templates/js/report.js:260 +msgid "Purchase Order(s) must be selected before printing report" +msgstr "" + +#: templates/js/report.js:278 templates/js/report.js:332 +msgid "No report templates found which match selected orders" +msgstr "" + +#: templates/js/report.js:313 +msgid "Select Sales Orders" +msgstr "" + +#: templates/js/report.js:314 +msgid "Sales Order(s) must be selected before printing report" +msgstr "" + +#: templates/js/stock.js:38 +msgid "PASS" +msgstr "" + +#: templates/js/stock.js:40 +msgid "FAIL" +msgstr "" + +#: templates/js/stock.js:45 +msgid "NO RESULT" +msgstr "" + +#: templates/js/stock.js:71 +msgid "Add test result" +msgstr "" + +#: templates/js/stock.js:90 +msgid "No test results found" +msgstr "" + +#: templates/js/stock.js:132 +msgid "Test Date" +msgstr "" + +#: templates/js/stock.js:292 +msgid "In production" +msgstr "" + +#: templates/js/stock.js:296 +msgid "Installed in Stock Item" +msgstr "" + +#: templates/js/stock.js:304 +msgid "Assigned to Sales Order" +msgstr "" + +#: templates/js/stock.js:336 +msgid "No stock items matching query" +msgstr "" + +#: templates/js/stock.js:357 +msgid "items" +msgstr "" + +#: templates/js/stock.js:449 +msgid "batches" +msgstr "" + +#: templates/js/stock.js:476 +msgid "locations" +msgstr "" + +#: templates/js/stock.js:478 +msgid "Undefined location" +msgstr "" + +#: templates/js/stock.js:579 +msgid "Stock item is in production" +msgstr "" + +#: templates/js/stock.js:584 +msgid "Stock item assigned to sales order" +msgstr "" + +#: templates/js/stock.js:587 +msgid "Stock item assigned to customer" +msgstr "" + +#: templates/js/stock.js:591 +msgid "Stock item has expired" +msgstr "" + +#: templates/js/stock.js:593 +msgid "Stock item will expire soon" +msgstr "" + +#: templates/js/stock.js:597 +msgid "Stock item has been allocated" +msgstr "" + +#: templates/js/stock.js:601 +msgid "Stock item has been installed in another item" +msgstr "" + +#: templates/js/stock.js:609 +msgid "Stock item has been rejected" +msgstr "" + +#: templates/js/stock.js:613 +msgid "Stock item is lost" +msgstr "" + +#: templates/js/stock.js:616 +msgid "Stock item is destroyed" +msgstr "" + +#: templates/js/stock.js:620 templates/js/table_filters.js:138 +msgid "Depleted" +msgstr "" + +#: templates/js/stock.js:649 +msgid "Stocktake" +msgstr "" + +#: templates/js/stock.js:825 +msgid "Stock Status" +msgstr "" + +#: templates/js/stock.js:840 +msgid "Set Stock Status" +msgstr "" + +#: templates/js/stock.js:854 +msgid "Select Status Code" +msgstr "" + +#: templates/js/stock.js:855 +msgid "Status code must be selected" +msgstr "" + +#: templates/js/stock.js:1050 +msgid "No user information" +msgstr "" + +#: templates/js/stock.js:1060 +msgid "Edit tracking entry" +msgstr "" + +#: templates/js/stock.js:1061 +msgid "Delete tracking entry" +msgstr "" + +#: templates/js/stock.js:1170 +msgid "Create New Location" +msgstr "" + +#: templates/js/stock.js:1269 +msgid "Serial" +msgstr "" + +#: templates/js/stock.js:1362 templates/js/table_filters.js:171 +msgid "Installed" +msgstr "" + +#: templates/js/stock.js:1387 +msgid "Install item" +msgstr "" + +#: templates/js/table_filters.js:42 +msgid "Trackable Part" +msgstr "" + +#: templates/js/table_filters.js:46 +msgid "Validated" +msgstr "" + +#: templates/js/table_filters.js:71 +msgid "Include locations" +msgstr "" + +#: templates/js/table_filters.js:81 templates/js/table_filters.js:82 +#: templates/js/table_filters.js:295 +msgid "Include subcategories" +msgstr "" + +#: templates/js/table_filters.js:92 templates/js/table_filters.js:181 +msgid "Is Serialized" +msgstr "" + +#: templates/js/table_filters.js:95 templates/js/table_filters.js:188 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/table_filters.js:96 templates/js/table_filters.js:189 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/table_filters.js:99 templates/js/table_filters.js:192 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/table_filters.js:100 templates/js/table_filters.js:193 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/table_filters.js:103 templates/js/table_filters.js:104 +#: templates/js/table_filters.js:184 templates/js/table_filters.js:185 +msgid "Serial number" +msgstr "" + +#: templates/js/table_filters.js:108 templates/js/table_filters.js:202 +msgid "Batch code" +msgstr "" + +#: templates/js/table_filters.js:118 templates/js/table_filters.js:285 +msgid "Active parts" +msgstr "" + +#: templates/js/table_filters.js:119 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/table_filters.js:124 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/table_filters.js:128 +msgid "Is allocated" +msgstr "" + +#: templates/js/table_filters.js:129 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/table_filters.js:134 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/table_filters.js:139 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/table_filters.js:146 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/table_filters.js:151 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/table_filters.js:157 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/table_filters.js:161 +msgid "In Production" +msgstr "" + +#: templates/js/table_filters.js:162 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/table_filters.js:166 +msgid "Include Variants" +msgstr "" + +#: templates/js/table_filters.js:167 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/table_filters.js:172 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/table_filters.js:176 +msgid "Sent to customer" +msgstr "" + +#: templates/js/table_filters.js:177 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/table_filters.js:197 templates/js/table_filters.js:198 +msgid "Stock status" +msgstr "" + +#: templates/js/table_filters.js:231 +msgid "Build status" +msgstr "" + +#: templates/js/table_filters.js:250 templates/js/table_filters.js:267 +msgid "Order status" +msgstr "" + +#: templates/js/table_filters.js:255 templates/js/table_filters.js:272 +msgid "Outstanding" +msgstr "" + +#: templates/js/table_filters.js:296 +msgid "Include parts in subcategories" +msgstr "" + +#: templates/js/table_filters.js:300 +msgid "Has IPN" +msgstr "" + +#: templates/js/table_filters.js:301 +msgid "Part has internal part number" +msgstr "" + +#: templates/js/table_filters.js:306 +msgid "Show active parts" +msgstr "" + +#: templates/js/table_filters.js:314 +msgid "Stock available" +msgstr "" + +#: templates/js/table_filters.js:330 +msgid "Starred" +msgstr "" + +#: templates/js/table_filters.js:342 +msgid "Purchasable" +msgstr "" + +#: templates/js/tables.js:321 +msgid "Loading data" +msgstr "" + +#: templates/js/tables.js:324 +msgid "rows per page" +msgstr "" + +#: templates/js/tables.js:327 +msgid "Showing" +msgstr "" + +#: templates/js/tables.js:327 +msgid "to" +msgstr "" + +#: templates/js/tables.js:327 +msgid "of" +msgstr "" + +#: templates/js/tables.js:327 +msgid "rows" +msgstr "" + +#: templates/js/tables.js:330 templates/search_form.html:6 +#: templates/search_form.html:8 +msgid "Search" +msgstr "" + +#: templates/js/tables.js:333 +msgid "No matching results" +msgstr "" + +#: templates/js/tables.js:336 +msgid "Hide/Show pagination" +msgstr "" + +#: templates/js/tables.js:339 +msgid "Refresh" +msgstr "" + +#: templates/js/tables.js:342 +msgid "Toggle" +msgstr "" + +#: templates/js/tables.js:345 +msgid "Columns" +msgstr "" + +#: templates/js/tables.js:348 +msgid "All" +msgstr "" + +#: templates/modals.html:21 templates/modals.html:46 +msgid "Form errors exist" +msgstr "" + +#: templates/navbar.html:33 +msgid "Buy" +msgstr "" + +#: templates/navbar.html:43 +msgid "Sell" +msgstr "" + +#: templates/navbar.html:55 +msgid "Scan Barcode" +msgstr "" + +#: templates/navbar.html:77 users/models.py:36 +msgid "Admin" +msgstr "" + +#: templates/navbar.html:79 +msgid "Logout" +msgstr "" + +#: templates/navbar.html:81 templates/registration/login.html:90 +msgid "Login" +msgstr "" + +#: templates/navbar.html:104 +msgid "About InvenTree" +msgstr "" + +#: templates/qr_code.html:11 +msgid "QR data not provided" +msgstr "" + +#: templates/registration/logged_out.html:51 +msgid "You have been logged out" +msgstr "" + +#: templates/registration/logged_out.html:52 +#: templates/registration/password_reset_complete.html:52 +#: templates/registration/password_reset_done.html:59 +msgid "Return to login screen" +msgstr "" + +#: templates/registration/login.html:65 +msgid "Enter username" +msgstr "" + +#: templates/registration/login.html:71 +msgid "Password" +msgstr "" + +#: templates/registration/login.html:84 +msgid "Username / password combination is incorrect" +msgstr "" + +#: templates/registration/login.html:96 +#: templates/registration/password_reset_form.html:52 +msgid "Forgotten your password?" +msgstr "" + +#: templates/registration/login.html:96 +msgid "Click here to reset" +msgstr "" + +#: templates/registration/password_reset_complete.html:51 +msgid "Password reset complete" +msgstr "" + +#: templates/registration/password_reset_confirm.html:53 +#: templates/registration/password_reset_confirm.html:57 +msgid "Change password" +msgstr "" + +#: templates/registration/password_reset_confirm.html:61 +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +#: templates/registration/password_reset_done.html:52 +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +#: templates/registration/password_reset_done.html:55 +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#: templates/registration/password_reset_form.html:53 +msgid "Enter your email address below." +msgstr "" + +#: templates/registration/password_reset_form.html:54 +msgid "An email will be sent with password reset instructions." +msgstr "" + +#: templates/registration/password_reset_form.html:59 +msgid "Send email" +msgstr "" + +#: templates/stats.html:9 +msgid "Server" +msgstr "" + +#: templates/stats.html:13 +msgid "Instance Name" +msgstr "" + +#: templates/stats.html:19 +msgid "Server status" +msgstr "" + +#: templates/stats.html:22 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:24 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:31 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:34 +msgid "Background worker not running" +msgstr "" + +#: templates/stats.html:42 +msgid "Email Settings" +msgstr "" + +#: templates/stats.html:45 +msgid "Email settings not configured" +msgstr "" + +#: templates/stock_table.html:14 +msgid "Export Stock Information" +msgstr "" + +#: templates/stock_table.html:27 +msgid "Barcode Actions" +msgstr "" + +#: templates/stock_table.html:43 +msgid "Print test reports" +msgstr "" + +#: templates/stock_table.html:54 +msgid "Add to selected stock items" +msgstr "" + +#: templates/stock_table.html:55 +msgid "Remove from selected stock items" +msgstr "" + +#: templates/stock_table.html:56 +msgid "Stocktake selected stock items" +msgstr "" + +#: templates/stock_table.html:57 +msgid "Move selected stock items" +msgstr "" + +#: templates/stock_table.html:57 +msgid "Move stock" +msgstr "" + +#: templates/stock_table.html:58 +msgid "Order selected items" +msgstr "" + +#: templates/stock_table.html:59 +msgid "Change status" +msgstr "" + +#: templates/stock_table.html:59 +msgid "Change stock status" +msgstr "" + +#: templates/stock_table.html:62 +msgid "Delete selected items" +msgstr "" + +#: templates/stock_table.html:62 +msgid "Delete Stock" +msgstr "" + +#: templates/yesnolabel.html:4 +msgid "Yes" +msgstr "" + +#: templates/yesnolabel.html:6 +msgid "No" +msgstr "" + +#: users/admin.py:64 +msgid "Users" +msgstr "" + +#: users/admin.py:65 +msgid "Select which users are assigned to this group" +msgstr "" + +#: users/admin.py:187 +msgid "The following users are members of multiple groups:" +msgstr "" + +#: users/admin.py:210 +msgid "Personal info" +msgstr "" + +#: users/admin.py:211 +msgid "Permissions" +msgstr "" + +#: users/admin.py:214 +msgid "Important dates" +msgstr "" + +#: users/models.py:167 +msgid "Permission set" +msgstr "" + +#: users/models.py:175 +msgid "Group" +msgstr "" + +#: users/models.py:178 +msgid "View" +msgstr "" + +#: users/models.py:178 +msgid "Permission to view items" +msgstr "" + +#: users/models.py:180 +msgid "Permission to add items" +msgstr "" + +#: users/models.py:182 +msgid "Change" +msgstr "" + +#: users/models.py:182 +msgid "Permissions to edit items" +msgstr "" + +#: users/models.py:184 +msgid "Permission to delete items" +msgstr "" diff --git a/InvenTree/locale/zh/LC_MESSAGES/django.po b/InvenTree/locale/zh/LC_MESSAGES/django.po new file mode 100644 index 0000000000..9a86c89cfe --- /dev/null +++ b/InvenTree/locale/zh/LC_MESSAGES/django.po @@ -0,0 +1,7233 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-04-21 12:28+1000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: InvenTree/api.py:64 +msgid "API endpoint not found" +msgstr "" + +#: InvenTree/api.py:110 +msgid "No action specified" +msgstr "" + +#: InvenTree/api.py:124 +msgid "No matching action found" +msgstr "" + +#: InvenTree/fields.py:44 +msgid "Enter date" +msgstr "" + +#: InvenTree/forms.py:110 build/forms.py:99 build/forms.py:120 +#: build/forms.py:142 build/forms.py:166 build/forms.py:188 build/forms.py:223 +#: order/forms.py:27 order/forms.py:38 order/forms.py:49 order/forms.py:60 +#: order/forms.py:71 part/forms.py:134 +msgid "Confirm" +msgstr "" + +#: InvenTree/forms.py:126 +msgid "Confirm delete" +msgstr "" + +#: InvenTree/forms.py:127 +msgid "Confirm item deletion" +msgstr "" + +#: InvenTree/forms.py:159 templates/registration/login.html:77 +msgid "Enter password" +msgstr "" + +#: InvenTree/forms.py:160 +msgid "Enter new password" +msgstr "" + +#: InvenTree/forms.py:167 +msgid "Confirm password" +msgstr "" + +#: InvenTree/forms.py:168 +msgid "Confirm new password" +msgstr "" + +#: InvenTree/forms.py:203 +msgid "Apply Theme" +msgstr "" + +#: InvenTree/forms.py:233 +msgid "Select Category" +msgstr "" + +#: InvenTree/helpers.py:375 order/models.py:245 order/models.py:344 +#: stock/views.py:1763 +msgid "Invalid quantity provided" +msgstr "" + +#: InvenTree/helpers.py:378 +msgid "Empty serial number string" +msgstr "" + +#: InvenTree/helpers.py:399 +#, python-brace-format +msgid "Duplicate serial: {n}" +msgstr "" + +#: InvenTree/helpers.py:403 InvenTree/helpers.py:406 InvenTree/helpers.py:409 +#, python-brace-format +msgid "Invalid group: {g}" +msgstr "" + +#: InvenTree/helpers.py:414 +#, python-brace-format +msgid "Duplicate serial: {g}" +msgstr "" + +#: InvenTree/helpers.py:422 +msgid "No serial numbers found" +msgstr "" + +#: InvenTree/helpers.py:426 +#, python-brace-format +msgid "Number of unique serial number ({s}) must match quantity ({q})" +msgstr "" + +#: InvenTree/models.py:59 stock/models.py:1662 +msgid "Attachment" +msgstr "" + +#: InvenTree/models.py:60 +msgid "Select file to attach" +msgstr "" + +#: InvenTree/models.py:62 templates/attachment_table.html:16 +msgid "Comment" +msgstr "" + +#: InvenTree/models.py:62 +msgid "File comment" +msgstr "" + +#: InvenTree/models.py:68 InvenTree/models.py:69 part/models.py:1908 +#: report/templates/report/inventree_test_report_base.html:91 +#: templates/js/stock.js:1041 +msgid "User" +msgstr "" + +#: InvenTree/models.py:72 +msgid "upload date" +msgstr "" + +#: InvenTree/models.py:107 InvenTree/models.py:108 label/models.py:101 +#: part/models.py:686 part/models.py:2049 part/templates/part/params.html:27 +#: report/models.py:179 templates/InvenTree/search.html:137 +#: templates/InvenTree/search.html:289 templates/js/part.js:110 +#: templates/js/part.js:553 templates/js/stock.js:944 +msgid "Name" +msgstr "" + +#: InvenTree/models.py:114 build/models.py:134 +#: build/templates/build/detail.html:21 company/models.py:342 +#: company/models.py:494 company/templates/company/detail.html:27 +#: company/templates/company/manufacturer_part_base.html:72 +#: company/templates/company/supplier_part_base.html:71 +#: company/templates/company/supplier_part_detail.html:31 label/models.py:108 +#: order/models.py:101 order/templates/order/purchase_order_detail.html:168 +#: part/models.py:710 part/templates/part/detail.html:54 +#: part/templates/part/set_category.html:14 report/models.py:192 +#: report/models.py:505 report/models.py:544 +#: report/templates/report/inventree_build_order_base.html:118 +#: templates/InvenTree/search.html:144 templates/InvenTree/search.html:224 +#: templates/InvenTree/search.html:296 +#: templates/InvenTree/settings/header.html:9 templates/js/bom.js:190 +#: templates/js/build.js:677 templates/js/build.js:944 +#: templates/js/company.js:56 templates/js/order.js:183 +#: templates/js/order.js:280 templates/js/part.js:169 templates/js/part.js:252 +#: templates/js/part.js:371 templates/js/part.js:565 templates/js/part.js:643 +#: templates/js/stock.js:554 templates/js/stock.js:956 +#: templates/js/stock.js:1015 +msgid "Description" +msgstr "" + +#: InvenTree/models.py:115 +msgid "Description (optional)" +msgstr "" + +#: InvenTree/models.py:123 +msgid "parent" +msgstr "" + +#: InvenTree/settings.py:493 +msgid "English" +msgstr "" + +#: InvenTree/settings.py:494 +msgid "French" +msgstr "" + +#: InvenTree/settings.py:495 +msgid "German" +msgstr "" + +#: InvenTree/settings.py:496 +msgid "Polish" +msgstr "" + +#: InvenTree/settings.py:497 +msgid "Turkish" +msgstr "" + +#: InvenTree/status.py:93 +msgid "Background worker check failed" +msgstr "" + +#: InvenTree/status.py:97 +msgid "Email backend not configured" +msgstr "" + +#: InvenTree/status.py:100 +msgid "InvenTree system health checks failed" +msgstr "" + +#: InvenTree/status_codes.py:94 InvenTree/status_codes.py:135 +#: InvenTree/status_codes.py:228 +msgid "Pending" +msgstr "" + +#: InvenTree/status_codes.py:95 +msgid "Placed" +msgstr "" + +#: InvenTree/status_codes.py:96 InvenTree/status_codes.py:231 +msgid "Complete" +msgstr "" + +#: InvenTree/status_codes.py:97 InvenTree/status_codes.py:137 +#: InvenTree/status_codes.py:230 +msgid "Cancelled" +msgstr "" + +#: InvenTree/status_codes.py:98 InvenTree/status_codes.py:138 +#: InvenTree/status_codes.py:180 +msgid "Lost" +msgstr "" + +#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:139 +#: InvenTree/status_codes.py:182 +msgid "Returned" +msgstr "" + +#: InvenTree/status_codes.py:136 +#: order/templates/order/sales_order_base.html:124 +msgid "Shipped" +msgstr "" + +#: InvenTree/status_codes.py:176 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:177 +msgid "Attention needed" +msgstr "" + +#: InvenTree/status_codes.py:178 +msgid "Damaged" +msgstr "" + +#: InvenTree/status_codes.py:179 +msgid "Destroyed" +msgstr "" + +#: InvenTree/status_codes.py:181 +msgid "Rejected" +msgstr "" + +#: InvenTree/status_codes.py:229 +msgid "Production" +msgstr "" + +#: InvenTree/validators.py:22 +msgid "Not a valid currency code" +msgstr "" + +#: InvenTree/validators.py:50 +msgid "Invalid character in part name" +msgstr "" + +#: InvenTree/validators.py:63 +#, python-brace-format +msgid "IPN must match regex pattern {pat}" +msgstr "" + +#: InvenTree/validators.py:77 InvenTree/validators.py:91 +#: InvenTree/validators.py:105 +msgid "Reference must match pattern" +msgstr "" + +#: InvenTree/validators.py:113 +#, python-brace-format +msgid "Illegal character in name ({x})" +msgstr "" + +#: InvenTree/validators.py:132 InvenTree/validators.py:148 +msgid "Overage value must not be negative" +msgstr "" + +#: InvenTree/validators.py:150 +msgid "Overage must not exceed 100%" +msgstr "" + +#: InvenTree/validators.py:157 +msgid "Overage must be an integer value or a percentage" +msgstr "" + +#: InvenTree/views.py:587 +msgid "Delete Item" +msgstr "" + +#: InvenTree/views.py:636 +msgid "Check box to confirm item deletion" +msgstr "" + +#: InvenTree/views.py:651 templates/InvenTree/settings/user.html:18 +msgid "Edit User Information" +msgstr "" + +#: InvenTree/views.py:662 templates/InvenTree/settings/user.html:22 +msgid "Set Password" +msgstr "" + +#: InvenTree/views.py:681 +msgid "Password fields must match" +msgstr "" + +#: InvenTree/views.py:887 templates/navbar.html:95 +msgid "System Information" +msgstr "" + +#: barcodes/api.py:53 barcodes/api.py:150 +msgid "Must provide barcode_data parameter" +msgstr "" + +#: barcodes/api.py:126 +msgid "No match found for barcode data" +msgstr "" + +#: barcodes/api.py:128 +msgid "Match found for barcode data" +msgstr "" + +#: barcodes/api.py:153 +msgid "Must provide stockitem parameter" +msgstr "" + +#: barcodes/api.py:160 +msgid "No matching stock item found" +msgstr "" + +#: barcodes/api.py:190 +msgid "Barcode already matches StockItem object" +msgstr "" + +#: barcodes/api.py:194 +msgid "Barcode already matches StockLocation object" +msgstr "" + +#: barcodes/api.py:198 +msgid "Barcode already matches Part object" +msgstr "" + +#: barcodes/api.py:204 barcodes/api.py:216 +msgid "Barcode hash already matches StockItem object" +msgstr "" + +#: barcodes/api.py:222 +msgid "Barcode associated with StockItem" +msgstr "" + +#: build/forms.py:34 +msgid "Build Order reference" +msgstr "" + +#: build/forms.py:35 +msgid "Order target date" +msgstr "" + +#: build/forms.py:39 build/templates/build/build_base.html:107 +#: build/templates/build/detail.html:121 order/forms.py:109 order/forms.py:144 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:117 +#: report/templates/report/inventree_build_order_base.html:126 +#: templates/js/build.js:723 templates/js/order.js:200 +#: templates/js/order.js:298 +msgid "Target Date" +msgstr "" + +#: build/forms.py:40 build/models.py:224 +msgid "" +"Target date for build completion. Build will be overdue after this date." +msgstr "" + +#: build/forms.py:45 build/forms.py:87 build/forms.py:257 build/models.py:1109 +#: build/templates/build/auto_allocate.html:17 +#: build/templates/build/build_base.html:94 +#: build/templates/build/detail.html:31 common/models.py:703 +#: company/forms.py:176 company/templates/company/supplier_part_pricing.html:77 +#: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261 +#: order/forms.py:278 order/models.py:593 order/models.py:784 +#: order/templates/order/order_wizard/select_parts.html:32 +#: order/templates/order/purchase_order_detail.html:200 +#: order/templates/order/sales_order_detail.html:70 +#: order/templates/order/sales_order_detail.html:77 +#: order/templates/order/sales_order_detail.html:159 +#: order/templates/order/sales_order_detail.html:224 part/forms.py:342 +#: part/forms.py:371 part/forms.py:387 part/models.py:2178 +#: part/templates/part/allocation.html:19 +#: part/templates/part/allocation.html:53 +#: part/templates/part/part_pricing.html:11 +#: part/templates/part/part_pricing.html:18 +#: part/templates/part/sale_prices.html:85 +#: report/templates/report/inventree_build_order_base.html:114 +#: report/templates/report/inventree_po_report.html:91 +#: report/templates/report/inventree_so_report.html:91 +#: report/templates/report/inventree_test_report_base.html:77 +#: stock/forms.py:175 stock/forms.py:308 stock/models.py:1566 +#: stock/templates/stock/item_base.html:244 +#: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364 +#: templates/js/bom.js:205 templates/js/build.js:420 templates/js/build.js:954 +#: templates/js/stock.js:1033 templates/js/stock.js:1271 +msgid "Quantity" +msgstr "" + +#: build/forms.py:46 +msgid "Number of items to build" +msgstr "" + +#: build/forms.py:88 +msgid "Enter quantity for build output" +msgstr "" + +#: build/forms.py:92 order/forms.py:233 stock/forms.py:118 +msgid "Serial Numbers" +msgstr "" + +#: build/forms.py:94 +msgid "Enter serial numbers for build outputs" +msgstr "" + +#: build/forms.py:100 +msgid "Confirm creation of build output" +msgstr "" + +#: build/forms.py:121 +msgid "Confirm deletion of build output" +msgstr "" + +#: build/forms.py:142 +msgid "Confirm unallocation of stock" +msgstr "" + +#: build/forms.py:166 +msgid "Confirm stock allocation" +msgstr "" + +#: build/forms.py:189 +msgid "Mark build as complete" +msgstr "" + +#: build/forms.py:213 build/templates/build/auto_allocate.html:18 +#: order/forms.py:82 stock/forms.py:347 +#: stock/templates/stock/item_base.html:274 +#: stock/templates/stock/stock_adjust.html:17 +#: templates/InvenTree/search.html:260 templates/js/barcode.js:363 +#: templates/js/barcode.js:531 templates/js/build.js:434 +#: templates/js/stock.js:641 +msgid "Location" +msgstr "" + +#: build/forms.py:214 +msgid "Location of completed parts" +msgstr "" + +#: build/forms.py:219 +msgid "Confirm incomplete" +msgstr "" + +#: build/forms.py:220 +msgid "Confirm completion with incomplete stock allocation" +msgstr "" + +#: build/forms.py:223 +msgid "Confirm build completion" +msgstr "" + +#: build/forms.py:243 +msgid "Confirm cancel" +msgstr "" + +#: build/forms.py:243 build/views.py:66 +msgid "Confirm build cancellation" +msgstr "" + +#: build/forms.py:257 +msgid "Select quantity of stock to allocate" +msgstr "" + +#: build/models.py:65 build/templates/build/build_base.html:9 +#: build/templates/build/build_base.html:38 +#: part/templates/part/allocation.html:23 +#: report/templates/report/inventree_build_order_base.html:106 +msgid "Build Order" +msgstr "" + +#: build/models.py:66 build/templates/build/index.html:8 +#: build/templates/build/index.html:15 order/templates/order/so_builds.html:12 +#: order/templates/order/so_navbar.html:19 +#: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55 +#: part/templates/part/navbar.html:58 templates/InvenTree/index.html:183 +#: templates/InvenTree/search.html:185 +#: templates/InvenTree/settings/tabs.html:31 users/models.py:41 +msgid "Build Orders" +msgstr "" + +#: build/models.py:126 +msgid "Build Order Reference" +msgstr "" + +#: build/models.py:127 order/models.py:99 order/models.py:595 +#: order/templates/order/purchase_order_detail.html:195 +#: order/templates/order/sales_order_detail.html:219 part/models.py:2187 +#: report/templates/report/inventree_po_report.html:92 +#: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197 +#: templates/js/build.js:509 templates/js/build.js:948 +msgid "Reference" +msgstr "" + +#: build/models.py:137 +msgid "Brief description of the build" +msgstr "" + +#: build/models.py:146 build/templates/build/build_base.html:124 +#: build/templates/build/detail.html:77 +msgid "Parent Build" +msgstr "" + +#: build/models.py:147 +msgid "BuildOrder to which this build is allocated" +msgstr "" + +#: build/models.py:152 build/templates/build/auto_allocate.html:16 +#: build/templates/build/build_base.html:89 +#: build/templates/build/detail.html:26 company/models.py:669 +#: order/models.py:637 order/models.py:669 +#: order/templates/order/order_wizard/select_parts.html:30 +#: order/templates/order/purchase_order_detail.html:156 +#: order/templates/order/receive_parts.html:19 +#: order/templates/order/sales_order_detail.html:207 part/models.py:321 +#: part/models.py:1876 part/models.py:1888 part/models.py:1906 +#: part/models.py:1981 part/models.py:2077 part/models.py:2162 +#: part/templates/part/part_app_base.html:8 +#: part/templates/part/part_pricing.html:14 part/templates/part/related.html:29 +#: part/templates/part/set_category.html:13 +#: report/templates/report/inventree_build_order_base.html:110 +#: report/templates/report/inventree_po_report.html:90 +#: report/templates/report/inventree_so_report.html:90 +#: templates/InvenTree/search.html:112 templates/InvenTree/search.html:210 +#: templates/js/barcode.js:362 templates/js/bom.js:163 +#: templates/js/build.js:681 templates/js/build.js:921 +#: templates/js/company.js:140 templates/js/company.js:238 +#: templates/js/part.js:233 templates/js/part.js:338 templates/js/stock.js:523 +#: templates/js/stock.js:1343 +msgid "Part" +msgstr "" + +#: build/models.py:160 +msgid "Select part to build" +msgstr "" + +#: build/models.py:165 +msgid "Sales Order Reference" +msgstr "" + +#: build/models.py:169 +msgid "SalesOrder to which this build is allocated" +msgstr "" + +#: build/models.py:174 +msgid "Source Location" +msgstr "" + +#: build/models.py:178 +msgid "" +"Select location to take stock from for this build (leave blank to take from " +"any stock location)" +msgstr "" + +#: build/models.py:183 +msgid "Destination Location" +msgstr "" + +#: build/models.py:187 +msgid "Select location where the completed items will be stored" +msgstr "" + +#: build/models.py:191 +msgid "Build Quantity" +msgstr "" + +#: build/models.py:194 +msgid "Number of stock items to build" +msgstr "" + +#: build/models.py:198 +msgid "Completed items" +msgstr "" + +#: build/models.py:200 +msgid "Number of stock items which have been completed" +msgstr "" + +#: build/models.py:204 part/templates/part/part_base.html:160 +msgid "Build Status" +msgstr "" + +#: build/models.py:208 +msgid "Build status code" +msgstr "" + +#: build/models.py:212 stock/models.py:432 +msgid "Batch Code" +msgstr "" + +#: build/models.py:216 +msgid "Batch code for this build output" +msgstr "" + +#: build/models.py:219 order/models.py:105 part/models.py:882 +#: part/templates/part/detail.html:126 templates/js/order.js:293 +msgid "Creation Date" +msgstr "" + +#: build/models.py:223 order/models.py:451 +msgid "Target completion date" +msgstr "" + +#: build/models.py:227 order/models.py:218 +msgid "Completion Date" +msgstr "" + +#: build/models.py:233 +msgid "completed by" +msgstr "" + +#: build/models.py:241 +msgid "Issued by" +msgstr "" + +#: build/models.py:242 +msgid "User who issued this build order" +msgstr "" + +#: build/models.py:250 build/templates/build/build_base.html:145 +#: build/templates/build/detail.html:105 order/models.py:119 +#: order/templates/order/order_base.html:138 +#: order/templates/order/sales_order_base.html:138 part/models.py:886 +#: report/templates/report/inventree_build_order_base.html:159 +msgid "Responsible" +msgstr "" + +#: build/models.py:251 +msgid "User responsible for this build order" +msgstr "" + +#: build/models.py:256 build/templates/build/detail.html:91 +#: company/templates/company/manufacturer_part_base.html:79 +#: company/templates/company/manufacturer_part_detail.html:28 +#: company/templates/company/supplier_part_base.html:78 +#: company/templates/company/supplier_part_detail.html:28 +#: part/templates/part/detail.html:83 part/templates/part/part_base.html:101 +#: stock/models.py:426 stock/templates/stock/item_base.html:334 +msgid "External Link" +msgstr "" + +#: build/models.py:257 part/models.py:744 stock/models.py:428 +msgid "Link to external URL" +msgstr "" + +#: build/models.py:261 build/templates/build/navbar.html:59 +#: company/models.py:135 company/models.py:501 +#: company/templates/company/navbar.html:70 +#: company/templates/company/navbar.html:73 order/models.py:123 +#: order/models.py:597 order/templates/order/po_navbar.html:29 +#: order/templates/order/po_navbar.html:32 +#: order/templates/order/purchase_order_detail.html:234 +#: order/templates/order/sales_order_detail.html:264 +#: order/templates/order/so_navbar.html:33 +#: order/templates/order/so_navbar.html:36 part/models.py:871 +#: part/templates/part/navbar.html:128 +#: report/templates/report/inventree_build_order_base.html:173 +#: stock/forms.py:173 stock/forms.py:317 stock/forms.py:349 stock/forms.py:377 +#: stock/models.py:498 stock/models.py:1558 stock/models.py:1668 +#: stock/templates/stock/navbar.html:57 templates/js/barcode.js:37 +#: templates/js/bom.js:333 templates/js/stock.js:128 templates/js/stock.js:671 +msgid "Notes" +msgstr "" + +#: build/models.py:262 +msgid "Extra build notes" +msgstr "" + +#: build/models.py:673 +msgid "No build output specified" +msgstr "" + +#: build/models.py:676 +msgid "Build output is already completed" +msgstr "" + +#: build/models.py:679 +msgid "Build output does not match Build Order" +msgstr "" + +#: build/models.py:754 +msgid "Completed build output" +msgstr "" + +#: build/models.py:1002 +msgid "BuildItem must be unique for build, stock_item and install_into" +msgstr "" + +#: build/models.py:1024 +msgid "Build item must specify a build output" +msgstr "" + +#: build/models.py:1029 +#, python-brace-format +msgid "Selected stock item not found in BOM for part '{p}'" +msgstr "" + +#: build/models.py:1033 +#, python-brace-format +msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" +msgstr "" + +#: build/models.py:1040 order/models.py:758 +msgid "StockItem is over-allocated" +msgstr "" + +#: build/models.py:1044 order/models.py:761 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: build/models.py:1048 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1088 stock/templates/stock/item_base.html:306 +#: templates/InvenTree/search.html:183 templates/js/build.js:655 +#: templates/navbar.html:29 +msgid "Build" +msgstr "" + +#: build/models.py:1089 +msgid "Build to allocate parts" +msgstr "" + +#: build/models.py:1096 part/templates/part/allocation.html:18 +#: part/templates/part/allocation.html:24 +#: part/templates/part/allocation.html:31 +#: part/templates/part/allocation.html:49 +#: stock/templates/stock/item_base.html:8 +#: stock/templates/stock/item_base.html:93 +#: stock/templates/stock/item_base.html:328 +#: stock/templates/stock/stock_adjust.html:16 templates/js/build.js:771 +#: templates/js/stock.js:1004 templates/js/stock.js:1262 +msgid "Stock Item" +msgstr "" + +#: build/models.py:1097 +msgid "Source stock item" +msgstr "" + +#: build/models.py:1110 +msgid "Stock quantity to allocate to build" +msgstr "" + +#: build/models.py:1118 +msgid "Install into" +msgstr "" + +#: build/models.py:1119 +msgid "Destination stock item" +msgstr "" + +#: build/templates/build/allocate.html:7 +msgid "Allocate Parts" +msgstr "" + +#: build/templates/build/allocate.html:15 +msgid "Incomplete Build Ouputs" +msgstr "" + +#: build/templates/build/allocate.html:21 +msgid "Build order has been completed" +msgstr "" + +#: build/templates/build/allocate.html:26 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/allocate.html:27 +msgid "Create New Output" +msgstr "" + +#: build/templates/build/allocate.html:30 +msgid "Order required parts" +msgstr "" + +#: build/templates/build/allocate.html:31 +#: company/templates/company/detail_manufacturer_part.html:33 +#: company/templates/company/detail_supplier_part.html:32 order/views.py:794 +#: part/templates/part/category.html:127 +msgid "Order Parts" +msgstr "" + +#: build/templates/build/allocate.html:34 templates/js/build.js:590 +msgid "Unallocate stock" +msgstr "" + +#: build/templates/build/allocate.html:35 build/views.py:338 build/views.py:784 +msgid "Unallocate Stock" +msgstr "" + +#: build/templates/build/allocate.html:49 +msgid "Create a new build output" +msgstr "" + +#: build/templates/build/allocate.html:50 +msgid "No incomplete build outputs remain." +msgstr "" + +#: build/templates/build/allocate.html:51 +msgid "Create a new build output using the button above" +msgstr "" + +#: build/templates/build/attachments.html:12 +#: build/templates/build/navbar.html:49 build/templates/build/navbar.html:52 +#: order/templates/order/po_navbar.html:26 +#: order/templates/order/so_navbar.html:29 part/templates/part/navbar.html:119 +#: part/templates/part/navbar.html:122 stock/templates/stock/navbar.html:47 +#: stock/templates/stock/navbar.html:50 +msgid "Attachments" +msgstr "" + +#: build/templates/build/auto_allocate.html:9 +msgid "Automatically Allocate Stock" +msgstr "" + +#: build/templates/build/auto_allocate.html:10 +msgid "" +"The following stock items will be allocated to the specified build output" +msgstr "" + +#: build/templates/build/auto_allocate.html:37 +msgid "No stock items found that can be automatically allocated to this build" +msgstr "" + +#: build/templates/build/auto_allocate.html:39 +msgid "Stock items will have to be manually allocated" +msgstr "" + +#: build/templates/build/build_base.html:16 +#, python-format +msgid "This Build Order is allocated to Sales Order %(link)s" +msgstr "" + +#: build/templates/build/build_base.html:22 +#, python-format +msgid "This Build Order is a child of Build Order %(link)s" +msgstr "" + +#: build/templates/build/build_base.html:40 +#: company/templates/company/company_base.html:40 +#: company/templates/company/manufacturer_part_base.html:25 +#: company/templates/company/supplier_part_base.html:26 +#: order/templates/order/order_base.html:26 +#: order/templates/order/sales_order_base.html:35 +#: part/templates/part/category.html:18 part/templates/part/part_base.html:29 +#: stock/templates/stock/item_base.html:118 +#: stock/templates/stock/location.html:31 +msgid "Admin view" +msgstr "" + +#: build/templates/build/build_base.html:46 +#: build/templates/build/build_base.html:111 +#: order/templates/order/order_base.html:32 +#: order/templates/order/order_base.html:86 +#: order/templates/order/sales_order_base.html:41 +#: order/templates/order/sales_order_base.html:86 +#: templates/js/table_filters.js:240 templates/js/table_filters.js:259 +#: templates/js/table_filters.js:276 +msgid "Overdue" +msgstr "" + +#: build/templates/build/build_base.html:55 +msgid "Print actions" +msgstr "" + +#: build/templates/build/build_base.html:59 +msgid "Print Build Order" +msgstr "" + +#: build/templates/build/build_base.html:65 +msgid "Build actions" +msgstr "" + +#: build/templates/build/build_base.html:69 +msgid "Edit Build" +msgstr "" + +#: build/templates/build/build_base.html:71 +#: build/templates/build/build_base.html:179 +msgid "Complete Build" +msgstr "" + +#: build/templates/build/build_base.html:72 +#: build/templates/build/build_base.html:170 build/views.py:57 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:85 +#: build/templates/build/detail.html:11 +msgid "Build Details" +msgstr "" + +#: build/templates/build/build_base.html:99 +#: build/templates/build/detail.html:59 order/models.py:445 +#: order/templates/order/receive_parts.html:24 +#: stock/templates/stock/item_base.html:392 templates/InvenTree/search.html:252 +#: templates/js/barcode.js:119 templates/js/build.js:710 +#: templates/js/order.js:187 templates/js/order.js:285 +#: templates/js/stock.js:628 templates/js/stock.js:1279 +msgid "Status" +msgstr "" + +#: build/templates/build/build_base.html:111 +#, python-format +msgid "This build was due on %(target)s" +msgstr "" + +#: build/templates/build/build_base.html:118 +#: build/templates/build/detail.html:64 +msgid "Progress" +msgstr "" + +#: build/templates/build/build_base.html:131 +#: build/templates/build/detail.html:84 order/models.py:667 +#: order/templates/order/sales_order_base.html:9 +#: order/templates/order/sales_order_base.html:33 +#: order/templates/order/sales_order_ship.html:25 +#: part/templates/part/allocation.html:30 +#: report/templates/report/inventree_build_order_base.html:136 +#: report/templates/report/inventree_so_report.html:77 +#: stock/templates/stock/item_base.html:268 templates/js/order.js:245 +msgid "Sales Order" +msgstr "" + +#: build/templates/build/build_base.html:138 +#: build/templates/build/detail.html:98 +#: report/templates/report/inventree_build_order_base.html:153 +msgid "Issued By" +msgstr "" + +#: build/templates/build/build_children.html:10 +#: build/templates/build/navbar.html:42 +msgid "Child Build Orders" +msgstr "" + +#: build/templates/build/build_output.html:10 +#: build/templates/build/navbar.html:35 build/templates/build/navbar.html:38 +msgid "Build Outputs" +msgstr "" + +#: build/templates/build/build_output_create.html:7 +msgid "The Bill of Materials contains trackable parts" +msgstr "" + +#: build/templates/build/build_output_create.html:8 +msgid "Build outputs must be generated individually." +msgstr "" + +#: build/templates/build/build_output_create.html:9 +msgid "Multiple build outputs will be created based on the quantity specified." +msgstr "" + +#: build/templates/build/build_output_create.html:15 +msgid "Trackable parts can have serial numbers specified" +msgstr "" + +#: build/templates/build/build_output_create.html:16 +msgid "Enter serial numbers to generate multiple single build outputs" +msgstr "" + +#: build/templates/build/cancel.html:5 +msgid "Are you sure you wish to cancel this build?" +msgstr "" + +#: build/templates/build/complete.html:8 +msgid "Build can be completed" +msgstr "" + +#: build/templates/build/complete.html:12 +msgid "Build cannot be completed" +msgstr "" + +#: build/templates/build/complete.html:15 +msgid "Incompleted build outputs remain" +msgstr "" + +#: build/templates/build/complete.html:18 +msgid "Required build quantity has not been completed" +msgstr "" + +#: build/templates/build/complete_output.html:9 +msgid "Stock allocation is complete" +msgstr "" + +#: build/templates/build/complete_output.html:13 +msgid "Stock allocation is incomplete" +msgstr "" + +#: build/templates/build/complete_output.html:19 +msgid "parts have not been fully allocated" +msgstr "" + +#: build/templates/build/complete_output.html:40 +msgid "The following items will be created" +msgstr "" + +#: build/templates/build/create_build_item.html:7 +msgid "Select a stock item to allocate to the selected build output" +msgstr "" + +#: build/templates/build/create_build_item.html:11 +#, python-format +msgid "" +"The allocated stock will be installed into the following build output:
    " +"%(output)s" +msgstr "" + +#: build/templates/build/create_build_item.html:17 +#, python-format +msgid "No stock available for %(part)s" +msgstr "" + +#: build/templates/build/delete_build_item.html:8 +msgid "Are you sure you want to unallocate this stock?" +msgstr "" + +#: build/templates/build/delete_build_item.html:11 +msgid "The selected stock will be unallocated from the build output" +msgstr "" + +#: build/templates/build/detail.html:35 +msgid "Stock Source" +msgstr "" + +#: build/templates/build/detail.html:40 +msgid "Stock can be taken from any available location." +msgstr "" + +#: build/templates/build/detail.html:46 stock/forms.py:169 stock/forms.py:375 +msgid "Destination" +msgstr "" + +#: build/templates/build/detail.html:53 +msgid "Destination location not specified" +msgstr "" + +#: build/templates/build/detail.html:70 +#: stock/templates/stock/item_base.html:292 templates/js/stock.js:636 +#: templates/js/stock.js:1286 templates/js/table_filters.js:107 +#: templates/js/table_filters.js:201 +msgid "Batch" +msgstr "" + +#: build/templates/build/detail.html:116 +#: order/templates/order/order_base.html:111 +#: order/templates/order/sales_order_base.html:111 templates/js/build.js:718 +msgid "Created" +msgstr "" + +#: build/templates/build/detail.html:127 +msgid "No target date set" +msgstr "" + +#: build/templates/build/detail.html:132 templates/js/build.js:696 +#: templates/js/build.js:728 +msgid "Completed" +msgstr "" + +#: build/templates/build/detail.html:136 +msgid "Build not complete" +msgstr "" + +#: build/templates/build/edit_build_item.html:7 +msgid "Alter the quantity of stock allocated to the build output" +msgstr "" + +#: build/templates/build/index.html:28 build/views.py:657 +msgid "New Build Order" +msgstr "" + +#: build/templates/build/index.html:37 build/templates/build/index.html:38 +msgid "Print Build Orders" +msgstr "" + +#: build/templates/build/index.html:43 +#: order/templates/order/purchase_orders.html:27 +#: order/templates/order/sales_orders.html:27 +msgid "Display calendar view" +msgstr "" + +#: build/templates/build/index.html:46 +#: order/templates/order/purchase_orders.html:30 +#: order/templates/order/sales_orders.html:30 +msgid "Display list view" +msgstr "" + +#: build/templates/build/navbar.html:12 +msgid "Build Order Details" +msgstr "" + +#: build/templates/build/navbar.html:15 +#: company/templates/company/navbar.html:15 +#: order/templates/order/po_navbar.html:14 +#: order/templates/order/so_navbar.html:15 part/templates/part/navbar.html:15 +msgid "Details" +msgstr "" + +#: build/templates/build/navbar.html:20 build/templates/build/navbar.html:23 +#: build/templates/build/parts.html:11 +msgid "Required Parts" +msgstr "" + +#: build/templates/build/navbar.html:27 build/templates/build/navbar.html:30 +msgid "In Progress" +msgstr "" + +#: build/templates/build/navbar.html:45 +msgid "Child Builds" +msgstr "" + +#: build/templates/build/navbar.html:56 +msgid "Build Order Notes" +msgstr "" + +#: build/templates/build/notes.html:12 +msgid "Build Notes" +msgstr "" + +#: build/templates/build/notes.html:14 company/templates/company/notes.html:13 +#: order/templates/order/order_notes.html:15 +#: order/templates/order/sales_order_notes.html:16 +#: part/templates/part/notes.html:14 stock/templates/stock/item_notes.html:15 +msgid "Edit notes" +msgstr "" + +#: build/templates/build/notes.html:26 company/templates/company/notes.html:24 +#: order/templates/order/order_notes.html:27 +#: order/templates/order/sales_order_notes.html:29 +#: part/templates/part/notes.html:27 stock/templates/stock/item_base.html:470 +#: stock/templates/stock/item_notes.html:26 +msgid "Save" +msgstr "" + +#: build/templates/build/unallocate.html:10 +msgid "Are you sure you wish to unallocate all stock for this build?" +msgstr "" + +#: build/templates/build/unallocate.html:12 +msgid "All incomplete stock allocations will be removed from the build" +msgstr "" + +#: build/views.py:77 +msgid "Build was cancelled" +msgstr "" + +#: build/views.py:91 +msgid "Allocate Stock" +msgstr "" + +#: build/views.py:154 build/views.py:314 build/views.py:485 +msgid "Build output must be specified" +msgstr "" + +#: build/views.py:168 +msgid "Allocated stock to build output" +msgstr "" + +#: build/views.py:180 +msgid "Create Build Output" +msgstr "" + +#: build/views.py:203 stock/models.py:969 stock/views.py:1789 +msgid "Serial numbers already exist" +msgstr "" + +#: build/views.py:212 +msgid "Serial numbers required for trackable build output" +msgstr "" + +#: build/views.py:278 +msgid "Delete Build Output" +msgstr "" + +#: build/views.py:299 build/views.py:383 +msgid "Confirm unallocation of build stock" +msgstr "" + +#: build/views.py:300 build/views.py:384 stock/views.py:425 +msgid "Check the confirmation box" +msgstr "" + +#: build/views.py:312 +msgid "Build output does not match build" +msgstr "" + +#: build/views.py:326 +msgid "Build output deleted" +msgstr "" + +#: build/views.py:408 +msgid "Complete Build Order" +msgstr "" + +#: build/views.py:414 +msgid "Build order cannot be completed" +msgstr "" + +#: build/views.py:425 +msgid "Completed build order" +msgstr "" + +#: build/views.py:441 +msgid "Complete Build Output" +msgstr "" + +#: build/views.py:476 +msgid "Quantity to complete cannot exceed build output quantity" +msgstr "" + +#: build/views.py:482 +msgid "Confirm completion of incomplete build" +msgstr "" + +#: build/views.py:573 +msgid "Build output completed" +msgstr "" + +#: build/views.py:711 +msgid "Created new build" +msgstr "" + +#: build/views.py:732 +msgid "Edit Build Order Details" +msgstr "" + +#: build/views.py:765 +msgid "Edited build" +msgstr "" + +#: build/views.py:774 +msgid "Delete Build Order" +msgstr "" + +#: build/views.py:789 +msgid "Removed parts from build allocation" +msgstr "" + +#: build/views.py:801 +msgid "Allocate stock to build output" +msgstr "" + +#: build/views.py:844 +msgid "Item must be currently in stock" +msgstr "" + +#: build/views.py:850 +msgid "Stock item is over-allocated" +msgstr "" + +#: build/views.py:851 templates/js/bom.js:230 templates/js/build.js:519 +#: templates/js/build.js:778 templates/js/build.js:961 +msgid "Available" +msgstr "" + +#: build/views.py:853 +msgid "Stock item must be selected" +msgstr "" + +#: build/views.py:1016 +msgid "Edit Stock Allocation" +msgstr "" + +#: build/views.py:1020 +msgid "Updated Build Item" +msgstr "" + +#: build/views.py:1049 +msgid "Add Build Order Attachment" +msgstr "" + +#: build/views.py:1062 order/views.py:110 order/views.py:162 part/views.py:172 +#: stock/views.py:277 +msgid "Added attachment" +msgstr "" + +#: build/views.py:1098 order/views.py:189 order/views.py:210 +msgid "Edit Attachment" +msgstr "" + +#: build/views.py:1108 order/views.py:193 order/views.py:214 +msgid "Attachment updated" +msgstr "" + +#: build/views.py:1118 order/views.py:229 order/views.py:243 +msgid "Delete Attachment" +msgstr "" + +#: build/views.py:1123 order/views.py:235 order/views.py:249 stock/views.py:333 +msgid "Deleted attachment" +msgstr "" + +#: common/models.py:56 +msgid "InvenTree Instance Name" +msgstr "" + +#: common/models.py:58 +msgid "String descriptor for the server instance" +msgstr "" + +#: common/models.py:62 +msgid "Use instance name" +msgstr "" + +#: common/models.py:63 +msgid "Use the instance name in the title-bar" +msgstr "" + +#: common/models.py:69 company/models.py:97 company/models.py:98 +msgid "Company name" +msgstr "" + +#: common/models.py:70 +msgid "Internal company name" +msgstr "" + +#: common/models.py:75 +msgid "Base URL" +msgstr "" + +#: common/models.py:76 +msgid "Base URL for server instance" +msgstr "" + +#: common/models.py:82 +msgid "Default Currency" +msgstr "" + +#: common/models.py:83 +msgid "Default currency" +msgstr "" + +#: common/models.py:89 +msgid "Download from URL" +msgstr "" + +#: common/models.py:90 +msgid "Allow download of remote images and files from external URL" +msgstr "" + +#: common/models.py:96 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:97 +msgid "Enable barcode scanner support" +msgstr "" + +#: common/models.py:103 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:104 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:108 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:109 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:115 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:116 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:122 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:123 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:129 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:130 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:136 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:137 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:143 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:144 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:150 +msgid "Recent Part Count" +msgstr "" + +#: common/models.py:151 +msgid "Number of recent parts to display on index page" +msgstr "" + +#: common/models.py:157 part/models.py:2079 part/templates/part/detail.html:160 +#: report/models.py:185 stock/forms.py:259 templates/js/table_filters.js:24 +#: templates/js/table_filters.js:310 +msgid "Template" +msgstr "" + +#: common/models.py:158 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:164 part/models.py:834 part/templates/part/detail.html:170 +#: templates/js/table_filters.js:123 templates/js/table_filters.js:322 +msgid "Assembly" +msgstr "" + +#: common/models.py:165 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:171 part/models.py:840 part/templates/part/detail.html:180 +#: templates/js/table_filters.js:326 +msgid "Component" +msgstr "" + +#: common/models.py:172 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:178 part/models.py:851 part/templates/part/detail.html:200 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:179 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:185 part/models.py:856 part/templates/part/detail.html:210 +#: templates/js/table_filters.js:334 +msgid "Salable" +msgstr "" + +#: common/models.py:186 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:192 part/models.py:846 part/templates/part/detail.html:190 +#: templates/js/table_filters.js:32 templates/js/table_filters.js:338 +msgid "Trackable" +msgstr "" + +#: common/models.py:193 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:199 part/models.py:866 part/templates/part/detail.html:150 +#: templates/js/table_filters.js:28 +msgid "Virtual" +msgstr "" + +#: common/models.py:200 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:206 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:207 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:213 +msgid "Debug Mode" +msgstr "" + +#: common/models.py:214 +msgid "Generate reports in debug mode (HTML output)" +msgstr "" + +#: common/models.py:220 +msgid "Page Size" +msgstr "" + +#: common/models.py:221 +msgid "Default page size for PDF reports" +msgstr "" + +#: common/models.py:231 +msgid "Test Reports" +msgstr "" + +#: common/models.py:232 +msgid "Enable generation of test reports" +msgstr "" + +#: common/models.py:238 +msgid "Stock Expiry" +msgstr "" + +#: common/models.py:239 +msgid "Enable stock expiry functionality" +msgstr "" + +#: common/models.py:245 +msgid "Sell Expired Stock" +msgstr "" + +#: common/models.py:246 +msgid "Allow sale of expired stock" +msgstr "" + +#: common/models.py:252 +msgid "Stock Stale Time" +msgstr "" + +#: common/models.py:253 +msgid "Number of days stock items are considered stale before expiring" +msgstr "" + +#: common/models.py:255 part/templates/part/detail.html:121 +msgid "days" +msgstr "" + +#: common/models.py:260 +msgid "Build Expired Stock" +msgstr "" + +#: common/models.py:261 +msgid "Allow building with expired stock" +msgstr "" + +#: common/models.py:267 +msgid "Stock Ownership Control" +msgstr "" + +#: common/models.py:268 +msgid "Enable ownership control over stock locations and items" +msgstr "" + +#: common/models.py:274 +msgid "Group by Part" +msgstr "" + +#: common/models.py:275 +msgid "Group stock items by part reference in table views" +msgstr "" + +#: common/models.py:281 +msgid "Recent Stock Count" +msgstr "" + +#: common/models.py:282 +msgid "Number of recent stock items to display on index page" +msgstr "" + +#: common/models.py:288 +msgid "Build Order Reference Prefix" +msgstr "" + +#: common/models.py:289 +msgid "Prefix value for build order reference" +msgstr "" + +#: common/models.py:294 +msgid "Build Order Reference Regex" +msgstr "" + +#: common/models.py:295 +msgid "Regular expression pattern for matching build order reference" +msgstr "" + +#: common/models.py:299 +msgid "Sales Order Reference Prefix" +msgstr "" + +#: common/models.py:300 +msgid "Prefix value for sales order reference" +msgstr "" + +#: common/models.py:305 +msgid "Purchase Order Reference Prefix" +msgstr "" + +#: common/models.py:306 +msgid "Prefix value for purchase order reference" +msgstr "" + +#: common/models.py:529 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:531 +msgid "Settings value" +msgstr "" + +#: common/models.py:566 +msgid "Must be an integer value" +msgstr "" + +#: common/models.py:589 +msgid "Value must be a boolean value" +msgstr "" + +#: common/models.py:600 +msgid "Value must be an integer value" +msgstr "" + +#: common/models.py:623 +msgid "Key string must be unique" +msgstr "" + +#: common/models.py:704 company/forms.py:177 +msgid "Price break quantity" +msgstr "" + +#: common/models.py:712 company/templates/company/supplier_part_pricing.html:82 +#: part/templates/part/sale_prices.html:90 templates/js/bom.js:255 +msgid "Price" +msgstr "" + +#: common/models.py:713 +msgid "Unit price at specified quantity" +msgstr "" + +#: common/models.py:736 +msgid "Default" +msgstr "" + +#: common/templates/common/edit_setting.html:11 +msgid "Current value" +msgstr "" + +#: common/views.py:25 +msgid "Change Setting" +msgstr "" + +#: common/views.py:94 +msgid "Supplied value is not allowed" +msgstr "" + +#: common/views.py:103 +msgid "Supplied value must be a boolean" +msgstr "" + +#: company/forms.py:38 company/models.py:145 +#: company/templates/company/detail.html:42 +msgid "Currency" +msgstr "" + +#: company/forms.py:39 company/models.py:147 +msgid "Default currency used for this company" +msgstr "" + +#: company/forms.py:77 part/forms.py:46 +msgid "URL" +msgstr "" + +#: company/forms.py:78 part/forms.py:47 +msgid "Image URL" +msgstr "" + +#: company/forms.py:118 +msgid "Single Price" +msgstr "" + +#: company/forms.py:120 +msgid "Single quantity price" +msgstr "" + +#: company/forms.py:128 company/models.py:324 +msgid "Select manufacturer" +msgstr "" + +#: company/forms.py:134 company/models.py:331 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/forms.py:136 company/models.py:330 +#: company/templates/company/manufacturer_part_base.html:89 +#: company/templates/company/manufacturer_part_detail.html:26 +#: company/templates/company/supplier_part_base.html:101 +#: company/templates/company/supplier_part_detail.html:35 +#: order/templates/order/purchase_order_detail.html:183 part/bom.py:171 +#: part/bom.py:242 templates/js/company.js:181 templates/js/company.js:307 +msgid "MPN" +msgstr "" + +#: company/models.py:102 +msgid "Company description" +msgstr "" + +#: company/models.py:103 +msgid "Description of the company" +msgstr "" + +#: company/models.py:107 company/templates/company/company_base.html:70 +#: company/templates/company/detail.html:33 templates/js/company.js:60 +msgid "Website" +msgstr "" + +#: company/models.py:107 +msgid "Company website URL" +msgstr "" + +#: company/models.py:110 company/templates/company/company_base.html:77 +msgid "Address" +msgstr "" + +#: company/models.py:111 +msgid "Company address" +msgstr "" + +#: company/models.py:114 +msgid "Phone number" +msgstr "" + +#: company/models.py:115 +msgid "Contact phone number" +msgstr "" + +#: company/models.py:118 company/templates/company/company_base.html:91 +msgid "Email" +msgstr "" + +#: company/models.py:118 +msgid "Contact email address" +msgstr "" + +#: company/models.py:121 company/templates/company/company_base.html:98 +msgid "Contact" +msgstr "" + +#: company/models.py:122 +msgid "Point of contact" +msgstr "" + +#: company/models.py:124 company/models.py:336 company/models.py:488 +#: order/models.py:103 part/models.py:743 +#: report/templates/report/inventree_build_order_base.html:165 +#: stock/models.py:1560 templates/js/company.js:188 templates/js/company.js:318 +#: templates/js/part.js:431 +msgid "Link" +msgstr "" + +#: company/models.py:124 +msgid "Link to external company information" +msgstr "" + +#: company/models.py:132 part/models.py:753 +msgid "Image" +msgstr "" + +#: company/models.py:137 +msgid "is customer" +msgstr "" + +#: company/models.py:137 +msgid "Do you sell items to this company?" +msgstr "" + +#: company/models.py:139 +msgid "is supplier" +msgstr "" + +#: company/models.py:139 +msgid "Do you purchase items from this company?" +msgstr "" + +#: company/models.py:141 +msgid "is manufacturer" +msgstr "" + +#: company/models.py:141 +msgid "Does this company manufacture parts?" +msgstr "" + +#: company/models.py:308 company/models.py:459 stock/models.py:373 +#: stock/templates/stock/item_base.html:224 +msgid "Base Part" +msgstr "" + +#: company/models.py:312 company/models.py:463 order/views.py:1372 +msgid "Select part" +msgstr "" + +#: company/models.py:323 company/templates/company/detail.html:57 +#: company/templates/company/manufacturer_part_base.html:85 +#: company/templates/company/manufacturer_part_detail.html:25 +#: company/templates/company/supplier_part_base.html:94 +#: company/templates/company/supplier_part_detail.html:34 part/bom.py:170 +#: part/bom.py:241 stock/templates/stock/item_base.html:341 +#: templates/js/company.js:44 templates/js/company.js:165 +#: templates/js/company.js:289 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:337 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:343 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:469 company/templates/company/detail.html:62 +#: company/templates/company/supplier_part_base.html:84 +#: company/templates/company/supplier_part_detail.html:25 order/models.py:190 +#: order/templates/order/order_base.html:92 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:175 +#: part/bom.py:286 stock/templates/stock/item_base.html:353 +#: templates/js/company.js:48 templates/js/company.js:263 +#: templates/js/order.js:170 +msgid "Supplier" +msgstr "" + +#: company/models.py:470 +msgid "Select supplier" +msgstr "" + +#: company/models.py:475 company/templates/company/supplier_part_base.html:88 +#: company/templates/company/supplier_part_detail.html:26 +#: order/templates/order/purchase_order_detail.html:174 part/bom.py:176 +#: part/bom.py:287 +msgid "SKU" +msgstr "" + +#: company/models.py:476 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:482 +#: company/templates/company/manufacturer_part_base.html:6 +#: company/templates/company/manufacturer_part_base.html:19 +#: stock/templates/stock/item_base.html:346 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:483 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:489 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:495 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:500 company/templates/company/supplier_part_base.html:115 +#: company/templates/company/supplier_part_detail.html:38 part/models.py:2190 +#: report/templates/report/inventree_po_report.html:93 +#: report/templates/report/inventree_so_report.html:93 +msgid "Note" +msgstr "" + +#: company/models.py:504 +msgid "base cost" +msgstr "" + +#: company/models.py:504 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:506 company/templates/company/supplier_part_base.html:108 +#: stock/models.py:397 stock/templates/stock/item_base.html:299 +#: templates/js/stock.js:667 +msgid "Packaging" +msgstr "" + +#: company/models.py:506 +msgid "Part packaging" +msgstr "" + +#: company/models.py:508 +msgid "multiple" +msgstr "" + +#: company/models.py:508 +msgid "Order multiple" +msgstr "" + +#: company/templates/company/assigned_stock.html:10 +#: company/templates/company/navbar.html:62 +#: company/templates/company/navbar.html:65 templates/js/build.js:411 +msgid "Assigned Stock" +msgstr "" + +#: company/templates/company/company_base.html:9 +#: company/templates/company/company_base.html:35 +#: templates/InvenTree/search.html:304 templates/js/company.js:33 +msgid "Company" +msgstr "" + +#: company/templates/company/company_base.html:25 +#: part/templates/part/part_thumb.html:21 +msgid "Upload new image" +msgstr "" + +#: company/templates/company/company_base.html:27 +#: part/templates/part/part_thumb.html:23 +msgid "Download image from URL" +msgstr "" + +#: company/templates/company/company_base.html:46 order/views.py:306 +msgid "Create Purchase Order" +msgstr "" + +#: company/templates/company/company_base.html:51 +msgid "Edit company information" +msgstr "" + +#: company/templates/company/company_base.html:56 company/views.py:326 +msgid "Delete Company" +msgstr "" + +#: company/templates/company/company_base.html:64 +#: company/templates/company/detail.html:10 +#: company/templates/company/navbar.html:12 +msgid "Company Details" +msgstr "" + +#: company/templates/company/company_base.html:84 +msgid "Phone" +msgstr "" + +#: company/templates/company/delete.html:7 +#, python-format +msgid "Are you sure you want to delete company '%(name)s'?" +msgstr "" + +#: company/templates/company/delete.html:12 +#, python-format +msgid "" +"There are %(count)s parts sourced from this company.
    \n" +"If this supplier is deleted, these supplier part entries will also be " +"deleted." +msgstr "" + +#: company/templates/company/detail.html:21 +msgid "Company Name" +msgstr "" + +#: company/templates/company/detail.html:36 +msgid "No website specified" +msgstr "" + +#: company/templates/company/detail.html:45 +msgid "Uses default currency" +msgstr "" + +#: company/templates/company/detail.html:67 order/models.py:440 +#: order/templates/order/sales_order_base.html:92 stock/models.py:415 +#: stock/models.py:416 stock/templates/stock/item_base.html:251 +#: templates/js/company.js:40 templates/js/order.js:267 +msgid "Customer" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:11 +#: templates/InvenTree/search.html:149 +msgid "Manufacturer Parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:22 +msgid "Create new manufacturer part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:23 +#: part/templates/part/manufacturer.html:19 +msgid "New Manufacturer Part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:28 +#: company/templates/company/detail_supplier_part.html:27 +#: company/templates/company/manufacturer_part_suppliers.html:20 +#: part/templates/part/category.html:122 +#: part/templates/part/manufacturer.html:22 +#: part/templates/part/supplier.html:20 +msgid "Options" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:33 +#: company/templates/company/detail_supplier_part.html:32 +#: part/templates/part/category.html:127 +msgid "Order parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:36 +#: company/templates/company/detail_supplier_part.html:35 +msgid "Delete parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:36 +#: company/templates/company/detail_supplier_part.html:35 +msgid "Delete Parts" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:66 +#: company/templates/company/detail_supplier_part.html:66 +#: part/templates/part/bom.html:159 part/templates/part/category.html:118 +#: templates/js/stock.js:1157 +msgid "New Part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:67 +#: company/templates/company/detail_supplier_part.html:67 +msgid "Create new Part" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:72 +#: company/views.py:71 part/templates/part/manufacturer.html:52 +#: part/templates/part/supplier.html:56 +msgid "New Manufacturer" +msgstr "" + +#: company/templates/company/detail_manufacturer_part.html:73 +#: company/views.py:284 +msgid "Create new Manufacturer" +msgstr "" + +#: company/templates/company/detail_stock.html:10 +msgid "Supplier Stock" +msgstr "" + +#: company/templates/company/detail_stock.html:37 +#: company/templates/company/supplier_part_stock.html:34 +#: part/templates/part/category.html:114 part/templates/part/category.html:128 +#: part/templates/part/stock.html:54 stock/templates/stock/location.html:163 +msgid "Export" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:11 +#: company/templates/company/manufacturer_part_navbar.html:11 +#: company/templates/company/manufacturer_part_suppliers.html:10 +#: templates/InvenTree/search.html:164 +msgid "Supplier Parts" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:21 +#: order/templates/order/order_wizard/select_parts.html:42 +#: order/templates/order/purchase_order_detail.html:75 +msgid "Create new supplier part" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:22 +#: company/templates/company/manufacturer_part_suppliers.html:17 +#: order/templates/order/purchase_order_detail.html:74 +#: part/templates/part/supplier.html:17 templates/js/stock.js:1163 +msgid "New Supplier Part" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:72 +#: company/templates/company/manufacturer_part_suppliers.html:47 +#: company/views.py:64 order/templates/order/purchase_orders.html:183 +#: part/templates/part/supplier.html:50 +msgid "New Supplier" +msgstr "" + +#: company/templates/company/detail_supplier_part.html:73 company/views.py:281 +#: order/templates/order/purchase_orders.html:184 +msgid "Create new Supplier" +msgstr "" + +#: company/templates/company/index.html:8 +msgid "Supplier List" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:36 +#: company/templates/company/supplier_part_base.html:36 +#: company/templates/company/supplier_part_orders.html:17 +#: part/templates/part/orders.html:17 part/templates/part/part_base.html:65 +msgid "Order part" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:41 +msgid "Edit manufacturer part" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:45 +msgid "Delete manufacturer part" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:57 +#: company/templates/company/manufacturer_part_detail.html:10 +msgid "Manufacturer Part Details" +msgstr "" + +#: company/templates/company/manufacturer_part_base.html:62 +#: company/templates/company/manufacturer_part_detail.html:18 +#: company/templates/company/supplier_part_base.html:61 +#: company/templates/company/supplier_part_detail.html:18 +msgid "Internal Part" +msgstr "" + +#: company/templates/company/manufacturer_part_delete.html:6 +msgid "Are you sure you want to delete the following Manufacturer Parts?" +msgstr "" + +#: company/templates/company/manufacturer_part_delete.html:36 +#, python-format +msgid "" +"There are %(count)s suppliers defined for this manufacturer part. If you " +"delete it, the following supplier parts will also be deleted:" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:14 +#: company/views.py:63 part/templates/part/navbar.html:78 +#: part/templates/part/navbar.html:81 templates/InvenTree/search.html:316 +#: templates/navbar.html:35 +msgid "Suppliers" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:19 +msgid "Manufacturer Part Stock" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:22 +#: company/templates/company/navbar.html:41 +#: company/templates/company/supplier_part_navbar.html:15 +#: part/templates/part/navbar.html:36 stock/api.py:51 +#: stock/templates/stock/loc_link.html:7 stock/templates/stock/location.html:36 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/index.html:128 templates/InvenTree/search.html:196 +#: templates/InvenTree/search.html:232 +#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:173 +#: templates/js/part.js:398 templates/js/stock.js:563 templates/navbar.html:26 +msgid "Stock" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:26 +msgid "Manufacturer Part Orders" +msgstr "" + +#: company/templates/company/manufacturer_part_navbar.html:29 +#: company/templates/company/supplier_part_navbar.html:22 +msgid "Orders" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:22 +#: part/templates/part/supplier.html:22 +msgid "Delete supplier parts" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:22 +#: part/templates/part/manufacturer.html:24 part/templates/part/params.html:44 +#: part/templates/part/related.html:44 part/templates/part/supplier.html:22 +#: stock/views.py:1002 users/models.py:184 +msgid "Delete" +msgstr "" + +#: company/templates/company/manufacturer_part_suppliers.html:48 +#: part/templates/part/supplier.html:51 +msgid "Create new supplier" +msgstr "" + +#: company/templates/company/navbar.html:20 +#: company/templates/company/navbar.html:23 +msgid "Manufactured Parts" +msgstr "" + +#: company/templates/company/navbar.html:29 +#: company/templates/company/navbar.html:32 +msgid "Supplied Parts" +msgstr "" + +#: company/templates/company/navbar.html:38 part/templates/part/navbar.html:33 +#: stock/templates/stock/location.html:107 +#: stock/templates/stock/location.html:122 +#: stock/templates/stock/location.html:136 +#: stock/templates/stock/location_navbar.html:22 +#: stock/templates/stock/location_navbar.html:29 +#: templates/InvenTree/search.html:198 templates/js/stock.js:968 +#: templates/stats.html:72 templates/stats.html:81 users/models.py:40 +msgid "Stock Items" +msgstr "" + +#: company/templates/company/navbar.html:47 +#: company/templates/company/navbar.html:56 +#: company/templates/company/navbar.html:59 +#: company/templates/company/sales_orders.html:11 +#: order/templates/order/sales_orders.html:8 +#: order/templates/order/sales_orders.html:13 +#: part/templates/part/navbar.html:98 part/templates/part/navbar.html:101 +#: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:228 +#: templates/InvenTree/search.html:345 +#: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46 +#: users/models.py:43 +msgid "Sales Orders" +msgstr "" + +#: company/templates/company/navbar.html:50 +#: company/templates/company/purchase_orders.html:10 +#: order/templates/order/purchase_orders.html:8 +#: order/templates/order/purchase_orders.html:13 +#: part/templates/part/navbar.html:84 part/templates/part/navbar.html:87 +#: part/templates/part/orders.html:10 templates/InvenTree/index.html:205 +#: templates/InvenTree/search.html:325 +#: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37 +#: users/models.py:42 +msgid "Purchase Orders" +msgstr "" + +#: company/templates/company/notes.html:11 +msgid "Company Notes" +msgstr "" + +#: company/templates/company/purchase_orders.html:18 +#: order/templates/order/purchase_orders.html:20 +msgid "Create new purchase order" +msgstr "" + +#: company/templates/company/purchase_orders.html:19 +#: order/templates/order/purchase_orders.html:21 +msgid "New Purchase Order" +msgstr "" + +#: company/templates/company/sales_orders.html:19 +#: order/templates/order/sales_orders.html:20 +msgid "Create new sales order" +msgstr "" + +#: company/templates/company/sales_orders.html:20 +#: order/templates/order/sales_orders.html:21 +msgid "New Sales Order" +msgstr "" + +#: company/templates/company/supplier_part_base.html:7 +#: company/templates/company/supplier_part_base.html:20 stock/models.py:382 +#: stock/templates/stock/item_base.html:358 templates/js/company.js:279 +msgid "Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part_base.html:40 +msgid "Edit supplier part" +msgstr "" + +#: company/templates/company/supplier_part_base.html:44 +msgid "Delete supplier part" +msgstr "" + +#: company/templates/company/supplier_part_base.html:56 +#: company/templates/company/supplier_part_detail.html:10 +msgid "Supplier Part Details" +msgstr "" + +#: company/templates/company/supplier_part_delete.html:5 +msgid "Are you sure you want to delete the following Supplier Parts?" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:12 +#: company/templates/company/supplier_part_stock.html:10 +msgid "Supplier Part Stock" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:19 +#: company/templates/company/supplier_part_orders.html:10 +msgid "Supplier Part Orders" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:26 +msgid "Supplier Part Pricing" +msgstr "" + +#: company/templates/company/supplier_part_navbar.html:29 +msgid "Pricing" +msgstr "" + +#: company/templates/company/supplier_part_orders.html:18 +#: part/templates/part/orders.html:18 +msgid "Order Part" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:11 +msgid "Pricing Information" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:19 company/views.py:794 +#: part/templates/part/sale_prices.html:17 part/views.py:2624 +msgid "Add Price Break" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:38 +#: part/templates/part/sale_prices.html:46 +msgid "No price break information found" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:89 +#: part/templates/part/sale_prices.html:97 +msgid "Edit price break" +msgstr "" + +#: company/templates/company/supplier_part_pricing.html:90 +#: part/templates/part/sale_prices.html:98 +msgid "Delete price break" +msgstr "" + +#: company/views.py:70 part/templates/part/navbar.html:72 +#: part/templates/part/navbar.html:75 templates/InvenTree/search.html:306 +#: templates/navbar.html:36 +msgid "Manufacturers" +msgstr "" + +#: company/views.py:77 templates/InvenTree/search.html:336 +#: templates/navbar.html:45 +msgid "Customers" +msgstr "" + +#: company/views.py:78 order/templates/order/sales_orders.html:185 +msgid "New Customer" +msgstr "" + +#: company/views.py:86 +msgid "Companies" +msgstr "" + +#: company/views.py:87 +msgid "New Company" +msgstr "" + +#: company/views.py:169 part/views.py:848 +msgid "Download Image" +msgstr "" + +#: company/views.py:198 part/views.py:880 +msgid "Image size exceeds maximum allowable size for download" +msgstr "" + +#: company/views.py:214 part/views.py:896 +msgid "Supplied URL is not a valid image file" +msgstr "" + +#: company/views.py:243 +msgid "Update Company Image" +msgstr "" + +#: company/views.py:249 +msgid "Updated company image" +msgstr "" + +#: company/views.py:259 +msgid "Edit Company" +msgstr "" + +#: company/views.py:264 +msgid "Edited company information" +msgstr "" + +#: company/views.py:287 order/templates/order/sales_orders.html:186 +msgid "Create new Customer" +msgstr "" + +#: company/views.py:289 +msgid "Create new Company" +msgstr "" + +#: company/views.py:316 +msgid "Created new company" +msgstr "" + +#: company/views.py:332 +msgid "Company was deleted" +msgstr "" + +#: company/views.py:357 +msgid "Edit Manufacturer Part" +msgstr "" + +#: company/views.py:366 +msgid "Create New Manufacturer Part" +msgstr "" + +#: company/views.py:440 +msgid "Delete Manufacturer Part" +msgstr "" + +#: company/views.py:528 +msgid "Edit Supplier Part" +msgstr "" + +#: company/views.py:578 templates/js/stock.js:1164 +msgid "Create new Supplier Part" +msgstr "" + +#: company/views.py:722 +msgid "Delete Supplier Part" +msgstr "" + +#: company/views.py:799 part/views.py:2628 +msgid "Added new price break" +msgstr "" + +#: company/views.py:855 part/views.py:2672 +msgid "Edit Price Break" +msgstr "" + +#: company/views.py:870 part/views.py:2686 +msgid "Delete Price Break" +msgstr "" + +#: label/api.py:56 report/api.py:201 +msgid "No valid objects provided to template" +msgstr "" + +#: label/models.py:102 +msgid "Label name" +msgstr "" + +#: label/models.py:109 +msgid "Label description" +msgstr "" + +#: label/models.py:116 stock/forms.py:202 +msgid "Label" +msgstr "" + +#: label/models.py:117 +msgid "Label template file" +msgstr "" + +#: label/models.py:123 report/models.py:274 +msgid "Enabled" +msgstr "" + +#: label/models.py:124 +msgid "Label template is enabled" +msgstr "" + +#: label/models.py:129 +msgid "Width [mm]" +msgstr "" + +#: label/models.py:130 +msgid "Label width, specified in mm" +msgstr "" + +#: label/models.py:136 +msgid "Height [mm]" +msgstr "" + +#: label/models.py:137 +msgid "Label height, specified in mm" +msgstr "" + +#: label/models.py:222 label/models.py:275 +msgid "Query filters (comma-separated list of key=value pairs" +msgstr "" + +#: label/models.py:223 label/models.py:276 report/models.py:294 +#: report/models.py:415 report/models.py:449 +msgid "Filters" +msgstr "" + +#: order/forms.py:27 order/templates/order/order_base.html:47 +msgid "Place order" +msgstr "" + +#: order/forms.py:38 order/templates/order/order_base.html:54 +msgid "Mark order as complete" +msgstr "" + +#: order/forms.py:49 order/forms.py:60 order/templates/order/order_base.html:59 +#: order/templates/order/sales_order_base.html:59 +msgid "Cancel order" +msgstr "" + +#: order/forms.py:71 order/templates/order/sales_order_base.html:56 +msgid "Ship order" +msgstr "" + +#: order/forms.py:82 +msgid "Receive parts to this location" +msgstr "" + +#: order/forms.py:103 +msgid "Purchase Order reference" +msgstr "" + +#: order/forms.py:110 +msgid "Target date for order delivery. Order will be overdue after this date." +msgstr "" + +#: order/forms.py:138 +msgid "Enter sales order number" +msgstr "" + +#: order/forms.py:145 order/models.py:452 +msgid "" +"Target date for order completion. Order will be overdue after this date." +msgstr "" + +#: order/forms.py:235 +msgid "Enter stock item serial numbers" +msgstr "" + +#: order/forms.py:241 +msgid "Enter quantity of stock items" +msgstr "" + +#: order/models.py:99 +msgid "Order reference" +msgstr "" + +#: order/models.py:101 +msgid "Order description" +msgstr "" + +#: order/models.py:103 +msgid "Link to external page" +msgstr "" + +#: order/models.py:111 part/templates/part/detail.html:132 +msgid "Created By" +msgstr "" + +#: order/models.py:118 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:123 +msgid "Order notes" +msgstr "" + +#: order/models.py:182 order/models.py:445 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:191 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:194 order/templates/order/order_base.html:98 +#: templates/js/order.js:179 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:194 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:201 +msgid "received by" +msgstr "" + +#: order/models.py:206 +msgid "Issue Date" +msgstr "" + +#: order/models.py:207 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:212 +msgid "Target Delivery Date" +msgstr "" + +#: order/models.py:213 +msgid "" +"Expected date for order delivery. Order will be overdue after this date." +msgstr "" + +#: order/models.py:219 +msgid "Date order was completed" +msgstr "" + +#: order/models.py:243 order/models.py:342 part/views.py:1586 +#: stock/models.py:270 stock/models.py:953 +msgid "Quantity must be greater than zero" +msgstr "" + +#: order/models.py:248 +msgid "Part supplier must match PO supplier" +msgstr "" + +#: order/models.py:337 +msgid "Lines can only be received against an order marked as 'Placed'" +msgstr "" + +#: order/models.py:359 +msgid "Received items" +msgstr "" + +#: order/models.py:441 +msgid "Company to which the items are being sold" +msgstr "" + +#: order/models.py:447 +msgid "Customer Reference " +msgstr "" + +#: order/models.py:447 +msgid "Customer order reference code" +msgstr "" + +#: order/models.py:455 templates/js/order.js:303 +msgid "Shipment Date" +msgstr "" + +#: order/models.py:462 +msgid "shipped by" +msgstr "" + +#: order/models.py:506 +msgid "SalesOrder cannot be shipped as it is not currently pending" +msgstr "" + +#: order/models.py:593 +msgid "Item quantity" +msgstr "" + +#: order/models.py:595 +msgid "Line item reference" +msgstr "" + +#: order/models.py:597 +msgid "Line item notes" +msgstr "" + +#: order/models.py:623 order/models.py:667 +#: part/templates/part/allocation.html:17 +#: part/templates/part/allocation.html:45 +msgid "Order" +msgstr "" + +#: order/models.py:624 order/templates/order/order_base.html:9 +#: order/templates/order/order_base.html:24 +#: report/templates/report/inventree_po_report.html:77 +#: stock/templates/stock/item_base.html:313 templates/js/order.js:148 +msgid "Purchase Order" +msgstr "" + +#: order/models.py:638 +msgid "Supplier part" +msgstr "" + +#: order/models.py:641 order/templates/order/order_base.html:131 +#: order/templates/order/purchase_order_detail.html:214 +#: order/templates/order/receive_parts.html:22 +#: order/templates/order/sales_order_base.html:131 +msgid "Received" +msgstr "" + +#: order/models.py:641 +msgid "Number of items received" +msgstr "" + +#: order/models.py:648 stock/models.py:508 +#: stock/templates/stock/item_base.html:320 +msgid "Purchase Price" +msgstr "" + +#: order/models.py:649 +msgid "Unit purchase price" +msgstr "" + +#: order/models.py:743 order/models.py:745 +msgid "Stock item has not been assigned" +msgstr "" + +#: order/models.py:749 +msgid "Cannot allocate stock item to a line with a different part" +msgstr "" + +#: order/models.py:751 +msgid "Cannot allocate stock to a line without a part" +msgstr "" + +#: order/models.py:754 +msgid "Allocation quantity cannot exceed stock quantity" +msgstr "" + +#: order/models.py:764 +msgid "Quantity must be 1 for serialized stock item" +msgstr "" + +#: order/models.py:769 +msgid "Line" +msgstr "" + +#: order/models.py:780 +msgid "Item" +msgstr "" + +#: order/models.py:781 +msgid "Select stock item to allocate" +msgstr "" + +#: order/models.py:784 +msgid "Enter stock allocation quantity" +msgstr "" + +#: order/templates/order/delete_attachment.html:5 +#: stock/templates/stock/attachment_delete.html:5 +#: templates/attachment_delete.html:5 +msgid "Are you sure you want to delete this attachment?" +msgstr "" + +#: order/templates/order/order_base.html:39 +#: order/templates/order/sales_order_base.html:48 +msgid "Print" +msgstr "" + +#: order/templates/order/order_base.html:43 +#: order/templates/order/sales_order_base.html:52 +msgid "Edit order information" +msgstr "" + +#: order/templates/order/order_base.html:51 +msgid "Receive items" +msgstr "" + +#: order/templates/order/order_base.html:64 +msgid "Export order to file" +msgstr "" + +#: order/templates/order/order_base.html:72 +#: order/templates/order/po_navbar.html:11 +msgid "Purchase Order Details" +msgstr "" + +#: order/templates/order/order_base.html:77 +#: order/templates/order/sales_order_base.html:77 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:82 +#: order/templates/order/sales_order_base.html:82 +msgid "Order Status" +msgstr "" + +#: order/templates/order/order_base.html:117 +#: report/templates/report/inventree_build_order_base.html:122 +msgid "Issued" +msgstr "" + +#: order/templates/order/order_cancel.html:7 +#: order/templates/order/sales_order_cancel.html:9 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: order/templates/order/order_complete.html:7 +msgid "Mark this order as complete?" +msgstr "" + +#: order/templates/order/order_complete.html:10 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: order/templates/order/order_complete.html:11 +msgid "Marking this order as complete will remove these line items." +msgstr "" + +#: order/templates/order/order_issue.html:7 +msgid "" +"After placing this purchase order, line items will no longer be editable." +msgstr "" + +#: order/templates/order/order_notes.html:13 +msgid "Order Notes" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:9 +msgid "Step 1 of 2 - Select Part Suppliers" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:14 +msgid "Select suppliers" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:18 +msgid "No purchaseable parts selected" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:31 +msgid "Select Supplier" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:57 +#, python-format +msgid "Select a supplier for %(name)s" +msgstr "" + +#: order/templates/order/order_wizard/select_parts.html:69 +#: part/templates/part/set_category.html:32 +msgid "Remove part" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:8 +msgid "Step 2 of 2 - Select Purchase Orders" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:12 +msgid "Select existing purchase orders, or create new orders." +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:31 +#: templates/js/order.js:205 templates/js/order.js:308 +msgid "Items" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:32 +msgid "Select Purchase Order" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:45 +#, python-format +msgid "Create new purchase order for %(name)s" +msgstr "" + +#: order/templates/order/order_wizard/select_pos.html:68 +#, python-format +msgid "Select a purchase order for %(name)s" +msgstr "" + +#: order/templates/order/po_attachments.html:12 +#: order/templates/order/po_navbar.html:23 +msgid "Purchase Order Attachments" +msgstr "" + +#: order/templates/order/po_navbar.html:17 +msgid "Received Stock Items" +msgstr "" + +#: order/templates/order/po_navbar.html:20 +#: order/templates/order/po_received_items.html:12 +msgid "Received Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:14 +msgid "Purchase Order Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:24 +#: order/templates/order/sales_order_detail.html:22 order/views.py:1108 +#: order/views.py:1191 +msgid "Add Line Item" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:45 +#: order/templates/order/purchase_order_detail.html:125 +#: part/templates/part/category.html:185 part/templates/part/category.html:227 +#: stock/templates/stock/location.html:191 templates/js/stock.js:708 +#: templates/js/stock.js:1169 +msgid "New Location" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:46 +#: order/templates/order/purchase_order_detail.html:126 +#: stock/templates/stock/location.html:42 +msgid "Create new stock location" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:139 +msgid "No line items found" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:205 +msgid "Unit Price" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:246 +#: order/templates/order/sales_order_detail.html:294 +msgid "Edit line item" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:247 +msgid "Delete line item" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:252 +msgid "Receive line item" +msgstr "" + +#: order/templates/order/purchase_orders.html:24 +#: order/templates/order/sales_orders.html:24 +msgid "Print Order Reports" +msgstr "" + +#: order/templates/order/receive_parts.html:8 +#, python-format +msgid "Receive outstanding parts for %(order)s - %(desc)s" +msgstr "" + +#: order/templates/order/receive_parts.html:14 part/api.py:40 +#: part/models.py:322 part/templates/part/cat_link.html:7 +#: part/templates/part/category.html:99 +#: part/templates/part/category_navbar.html:22 +#: part/templates/part/category_navbar.html:29 +#: part/templates/part/category_partlist.html:10 +#: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114 +#: templates/InvenTree/settings/tabs.html:25 templates/js/part.js:577 +#: templates/navbar.html:23 templates/stats.html:59 templates/stats.html:68 +#: users/models.py:38 +msgid "Parts" +msgstr "" + +#: order/templates/order/receive_parts.html:15 +msgid "Select parts to receive against this order" +msgstr "" + +#: order/templates/order/receive_parts.html:20 +msgid "Order Code" +msgstr "" + +#: order/templates/order/receive_parts.html:21 +#: part/templates/part/part_base.html:129 templates/js/part.js:414 +msgid "On Order" +msgstr "" + +#: order/templates/order/receive_parts.html:23 +msgid "Receive" +msgstr "" + +#: order/templates/order/receive_parts.html:36 +msgid "Error: Referenced part has been removed" +msgstr "" + +#: order/templates/order/receive_parts.html:57 +msgid "Remove line" +msgstr "" + +#: order/templates/order/sales_order_base.html:15 +msgid "This SalesOrder has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:64 +msgid "Packing List" +msgstr "" + +#: order/templates/order/sales_order_base.html:72 +#: order/templates/order/so_navbar.html:12 +msgid "Sales Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:98 templates/js/order.js:275 +msgid "Customer Reference" +msgstr "" + +#: order/templates/order/sales_order_cancel.html:8 +#: order/templates/order/sales_order_ship.html:9 +#: part/templates/part/bom_duplicate.html:12 +#: stock/templates/stock/stockitem_convert.html:13 +msgid "Warning" +msgstr "" + +#: order/templates/order/sales_order_detail.html:13 +msgid "Sales Order Items" +msgstr "" + +#: order/templates/order/sales_order_detail.html:75 +#: order/templates/order/sales_order_detail.html:157 +#: report/templates/report/inventree_test_report_base.html:75 +#: stock/models.py:420 stock/templates/stock/item_base.html:238 +#: templates/js/build.js:418 +msgid "Serial Number" +msgstr "" + +#: order/templates/order/sales_order_detail.html:92 templates/js/bom.js:342 +#: templates/js/build.js:571 templates/js/build.js:984 +msgid "Actions" +msgstr "" + +#: order/templates/order/sales_order_detail.html:99 templates/js/build.js:459 +#: templates/js/build.js:789 +msgid "Edit stock allocation" +msgstr "" + +#: order/templates/order/sales_order_detail.html:100 templates/js/build.js:461 +#: templates/js/build.js:790 +msgid "Delete stock allocation" +msgstr "" + +#: order/templates/order/sales_order_detail.html:170 +msgid "No matching line items" +msgstr "" + +#: order/templates/order/sales_order_detail.html:199 +msgid "ID" +msgstr "" + +#: order/templates/order/sales_order_detail.html:229 templates/js/build.js:523 +#: templates/js/build.js:785 +msgid "Allocated" +msgstr "" + +#: order/templates/order/sales_order_detail.html:231 +msgid "Fulfilled" +msgstr "" + +#: order/templates/order/sales_order_detail.html:279 +msgid "Allocate serial numbers" +msgstr "" + +#: order/templates/order/sales_order_detail.html:282 templates/js/build.js:585 +msgid "Allocate stock" +msgstr "" + +#: order/templates/order/sales_order_detail.html:285 +msgid "Purchase stock" +msgstr "" + +#: order/templates/order/sales_order_detail.html:289 templates/js/build.js:578 +#: templates/js/build.js:992 +msgid "Build stock" +msgstr "" + +#: order/templates/order/sales_order_detail.html:295 +msgid "Delete line item " +msgstr "" + +#: order/templates/order/sales_order_notes.html:14 +msgid "Sales Order Notes" +msgstr "" + +#: order/templates/order/sales_order_ship.html:10 +msgid "" +"This order has not been fully allocated. If the order is marked as shipped, " +"it can no longer be adjusted." +msgstr "" + +#: order/templates/order/sales_order_ship.html:12 +msgid "Ensure that the order allocation is correct before shipping the order." +msgstr "" + +#: order/templates/order/sales_order_ship.html:18 +msgid "Some line items in this order have been over-allocated" +msgstr "" + +#: order/templates/order/sales_order_ship.html:20 +msgid "Ensure that this is correct before shipping the order." +msgstr "" + +#: order/templates/order/sales_order_ship.html:27 +msgid "Shipping this order means that the order will no longer be editable." +msgstr "" + +#: order/templates/order/so_allocate_by_serial.html:9 +msgid "Allocate stock items by serial number" +msgstr "" + +#: order/templates/order/so_allocation_delete.html:7 +msgid "This action will unallocate the following stock from the Sales Order" +msgstr "" + +#: order/templates/order/so_attachments.html:12 +#: order/templates/order/so_navbar.html:26 +msgid "Sales Order Attachments" +msgstr "" + +#: order/templates/order/so_lineitem_delete.html:5 +msgid "Are you sure you wish to delete this line item?" +msgstr "" + +#: order/views.py:99 +msgid "Add Purchase Order Attachment" +msgstr "" + +#: order/views.py:149 +msgid "Add Sales Order Attachment" +msgstr "" + +#: order/views.py:341 +msgid "Create Sales Order" +msgstr "" + +#: order/views.py:376 +msgid "Edit Purchase Order" +msgstr "" + +#: order/views.py:396 +msgid "Edit Sales Order" +msgstr "" + +#: order/views.py:412 +msgid "Cancel Order" +msgstr "" + +#: order/views.py:421 order/views.py:447 +msgid "Confirm order cancellation" +msgstr "" + +#: order/views.py:424 order/views.py:450 +msgid "Order cannot be cancelled" +msgstr "" + +#: order/views.py:438 +msgid "Cancel sales order" +msgstr "" + +#: order/views.py:464 +msgid "Issue Order" +msgstr "" + +#: order/views.py:473 +msgid "Confirm order placement" +msgstr "" + +#: order/views.py:483 +msgid "Purchase order issued" +msgstr "" + +#: order/views.py:494 +msgid "Complete Order" +msgstr "" + +#: order/views.py:510 +msgid "Confirm order completion" +msgstr "" + +#: order/views.py:521 +msgid "Purchase order completed" +msgstr "" + +#: order/views.py:531 +msgid "Ship Order" +msgstr "" + +#: order/views.py:547 +msgid "Confirm order shipment" +msgstr "" + +#: order/views.py:553 +msgid "Could not ship order" +msgstr "" + +#: order/views.py:607 +msgid "Receive Parts" +msgstr "" + +#: order/views.py:677 +msgid "Items received" +msgstr "" + +#: order/views.py:691 +msgid "No destination set" +msgstr "" + +#: order/views.py:736 +msgid "Error converting quantity to number" +msgstr "" + +#: order/views.py:742 +msgid "Receive quantity less than zero" +msgstr "" + +#: order/views.py:748 +msgid "No lines specified" +msgstr "" + +#: order/views.py:1060 +#, python-brace-format +msgid "Ordered {n} parts" +msgstr "" + +#: order/views.py:1117 +msgid "Supplier part must be specified" +msgstr "" + +#: order/views.py:1123 +msgid "Supplier must match for Part and Order" +msgstr "" + +#: order/views.py:1242 order/views.py:1260 +msgid "Edit Line Item" +msgstr "" + +#: order/views.py:1276 order/views.py:1288 +msgid "Delete Line Item" +msgstr "" + +#: order/views.py:1281 order/views.py:1293 +msgid "Deleted line item" +msgstr "" + +#: order/views.py:1306 +msgid "Allocate Serial Numbers" +msgstr "" + +#: order/views.py:1351 +#, python-brace-format +msgid "Allocated {n} items" +msgstr "" + +#: order/views.py:1367 +msgid "Select line item" +msgstr "" + +#: order/views.py:1398 +msgid "No matching item for serial" +msgstr "" + +#: order/views.py:1408 +msgid "is not in stock" +msgstr "" + +#: order/views.py:1416 +msgid "already allocated to an order" +msgstr "" + +#: order/views.py:1470 +msgid "Allocate Stock to Order" +msgstr "" + +#: order/views.py:1544 +msgid "Edit Allocation Quantity" +msgstr "" + +#: order/views.py:1559 +msgid "Remove allocation" +msgstr "" + +#: part/bom.py:138 part/models.py:72 part/models.py:762 +#: part/templates/part/category.html:66 part/templates/part/detail.html:90 +msgid "Default Location" +msgstr "" + +#: part/bom.py:139 part/templates/part/part_base.html:117 +msgid "Available Stock" +msgstr "" + +#: part/bom.py:379 +#, python-brace-format +msgid "Unsupported file format: {f}" +msgstr "" + +#: part/bom.py:384 +msgid "Error reading BOM file (invalid data)" +msgstr "" + +#: part/bom.py:386 +msgid "Error reading BOM file (incorrect row size)" +msgstr "" + +#: part/forms.py:89 stock/forms.py:265 +msgid "File Format" +msgstr "" + +#: part/forms.py:89 stock/forms.py:265 +msgid "Select output file format" +msgstr "" + +#: part/forms.py:91 +msgid "Cascading" +msgstr "" + +#: part/forms.py:91 +msgid "Download cascading / multi-level BOM" +msgstr "" + +#: part/forms.py:93 +msgid "Levels" +msgstr "" + +#: part/forms.py:93 +msgid "Select maximum number of BOM levels to export (0 = all levels)" +msgstr "" + +#: part/forms.py:95 +msgid "Include Parameter Data" +msgstr "" + +#: part/forms.py:95 +msgid "Include part parameters data in exported BOM" +msgstr "" + +#: part/forms.py:97 +msgid "Include Stock Data" +msgstr "" + +#: part/forms.py:97 +msgid "Include part stock data in exported BOM" +msgstr "" + +#: part/forms.py:99 +msgid "Include Manufacturer Data" +msgstr "" + +#: part/forms.py:99 +msgid "Include part manufacturer data in exported BOM" +msgstr "" + +#: part/forms.py:101 +msgid "Include Supplier Data" +msgstr "" + +#: part/forms.py:101 +msgid "Include part supplier data in exported BOM" +msgstr "" + +#: part/forms.py:122 part/models.py:2077 +msgid "Parent Part" +msgstr "" + +#: part/forms.py:123 part/templates/part/bom_duplicate.html:7 +msgid "Select parent part to copy BOM from" +msgstr "" + +#: part/forms.py:129 +msgid "Clear existing BOM items" +msgstr "" + +#: part/forms.py:135 +msgid "Confirm BOM duplication" +msgstr "" + +#: part/forms.py:153 +msgid "validate" +msgstr "" + +#: part/forms.py:153 +msgid "Confirm that the BOM is correct" +msgstr "" + +#: part/forms.py:165 +msgid "BOM file" +msgstr "" + +#: part/forms.py:165 +msgid "Select BOM file to upload" +msgstr "" + +#: part/forms.py:184 +msgid "Related Part" +msgstr "" + +#: part/forms.py:203 +msgid "Select part category" +msgstr "" + +#: part/forms.py:220 +msgid "Duplicate all BOM data for this part" +msgstr "" + +#: part/forms.py:221 +msgid "Copy BOM" +msgstr "" + +#: part/forms.py:226 +msgid "Duplicate all parameter data for this part" +msgstr "" + +#: part/forms.py:227 +msgid "Copy Parameters" +msgstr "" + +#: part/forms.py:232 +msgid "Confirm part creation" +msgstr "" + +#: part/forms.py:237 +msgid "Include category parameter templates" +msgstr "" + +#: part/forms.py:242 +msgid "Include parent categories parameter templates" +msgstr "" + +#: part/forms.py:322 +msgid "Add parameter template to same level categories" +msgstr "" + +#: part/forms.py:326 +msgid "Add parameter template to all categories" +msgstr "" + +#: part/forms.py:344 part/models.py:2171 +msgid "Sub part" +msgstr "" + +#: part/forms.py:372 +msgid "Input quantity for price calculation" +msgstr "" + +#: part/models.py:73 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:76 +msgid "Default keywords" +msgstr "" + +#: part/models.py:76 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:82 part/models.py:2123 +#: part/templates/part/part_app_base.html:10 +msgid "Part Category" +msgstr "" + +#: part/models.py:83 part/templates/part/category.html:23 +#: part/templates/part/category.html:94 part/templates/part/category.html:141 +#: templates/InvenTree/search.html:127 templates/stats.html:63 +#: users/models.py:37 +msgid "Part Categories" +msgstr "" + +#: part/models.py:446 part/models.py:458 +#, python-brace-format +msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" +msgstr "" + +#: part/models.py:555 +msgid "Next available serial numbers are" +msgstr "" + +#: part/models.py:559 +msgid "Next available serial number is" +msgstr "" + +#: part/models.py:564 +msgid "Most recent serial number is" +msgstr "" + +#: part/models.py:643 +msgid "Duplicate IPN not allowed in part settings" +msgstr "" + +#: part/models.py:654 +msgid "Part must be unique for name, IPN and revision" +msgstr "" + +#: part/models.py:685 part/templates/part/detail.html:22 +msgid "Part name" +msgstr "" + +#: part/models.py:692 +msgid "Is Template" +msgstr "" + +#: part/models.py:693 +msgid "Is this part a template part?" +msgstr "" + +#: part/models.py:704 +msgid "Is this part a variant of another part?" +msgstr "" + +#: part/models.py:705 part/templates/part/detail.html:60 +msgid "Variant Of" +msgstr "" + +#: part/models.py:711 +msgid "Part description" +msgstr "" + +#: part/models.py:716 part/templates/part/category.html:73 +#: part/templates/part/detail.html:67 +msgid "Keywords" +msgstr "" + +#: part/models.py:717 +msgid "Part keywords to improve visibility in search results" +msgstr "" + +#: part/models.py:724 part/models.py:2122 part/templates/part/detail.html:73 +#: part/templates/part/set_category.html:15 templates/js/part.js:385 +msgid "Category" +msgstr "" + +#: part/models.py:725 +msgid "Part category" +msgstr "" + +#: part/models.py:730 part/templates/part/detail.html:28 +#: part/templates/part/part_base.html:94 templates/js/part.js:161 +msgid "IPN" +msgstr "" + +#: part/models.py:731 +msgid "Internal Part Number" +msgstr "" + +#: part/models.py:737 +msgid "Part revision or version number" +msgstr "" + +#: part/models.py:738 part/templates/part/detail.html:35 report/models.py:198 +#: templates/js/part.js:165 +msgid "Revision" +msgstr "" + +#: part/models.py:760 +msgid "Where is this item normally stored?" +msgstr "" + +#: part/models.py:807 part/templates/part/detail.html:97 +msgid "Default Supplier" +msgstr "" + +#: part/models.py:808 +msgid "Default supplier part" +msgstr "" + +#: part/models.py:815 +msgid "Default Expiry" +msgstr "" + +#: part/models.py:816 +msgid "Expiry time (in days) for stock items of this part" +msgstr "" + +#: part/models.py:821 part/templates/part/detail.html:113 +msgid "Minimum Stock" +msgstr "" + +#: part/models.py:822 +msgid "Minimum allowed stock level" +msgstr "" + +#: part/models.py:828 part/models.py:2051 part/templates/part/detail.html:106 +#: part/templates/part/params.html:29 +msgid "Units" +msgstr "" + +#: part/models.py:829 +msgid "Stock keeping units for this part" +msgstr "" + +#: part/models.py:835 +msgid "Can this part be built from other parts?" +msgstr "" + +#: part/models.py:841 +msgid "Can this part be used to build other parts?" +msgstr "" + +#: part/models.py:847 +msgid "Does this part have tracking for unique items?" +msgstr "" + +#: part/models.py:852 +msgid "Can this part be purchased from external suppliers?" +msgstr "" + +#: part/models.py:857 +msgid "Can this part be sold to customers?" +msgstr "" + +#: part/models.py:861 part/templates/part/detail.html:227 +#: templates/js/table_filters.js:20 templates/js/table_filters.js:60 +#: templates/js/table_filters.js:236 templates/js/table_filters.js:305 +msgid "Active" +msgstr "" + +#: part/models.py:862 +msgid "Is this part active?" +msgstr "" + +#: part/models.py:867 +msgid "Is this a virtual part, such as a software product or license?" +msgstr "" + +#: part/models.py:872 +msgid "Part notes - supports Markdown formatting" +msgstr "" + +#: part/models.py:875 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:875 +msgid "Stored BOM checksum" +msgstr "" + +#: part/models.py:878 +msgid "BOM checked by" +msgstr "" + +#: part/models.py:880 +msgid "BOM checked date" +msgstr "" + +#: part/models.py:884 +msgid "Creation User" +msgstr "" + +#: part/models.py:1949 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:1966 +msgid "Test with this name already exists for this part" +msgstr "" + +#: part/models.py:1986 templates/js/part.js:638 templates/js/stock.js:104 +msgid "Test Name" +msgstr "" + +#: part/models.py:1987 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:1992 +msgid "Test Description" +msgstr "" + +#: part/models.py:1993 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:1998 templates/js/part.js:647 +#: templates/js/table_filters.js:222 +msgid "Required" +msgstr "" + +#: part/models.py:1999 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:2004 templates/js/part.js:655 +msgid "Requires Value" +msgstr "" + +#: part/models.py:2005 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:2010 templates/js/part.js:662 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:2011 +msgid "Does this test require a file attachment when adding a test result?" +msgstr "" + +#: part/models.py:2044 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:2049 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:2051 +msgid "Parameter Units" +msgstr "" + +#: part/models.py:2079 part/models.py:2128 part/models.py:2129 +#: templates/InvenTree/settings/category.html:62 +msgid "Parameter Template" +msgstr "" + +#: part/models.py:2081 +msgid "Data" +msgstr "" + +#: part/models.py:2081 +msgid "Parameter Value" +msgstr "" + +#: part/models.py:2133 templates/InvenTree/settings/category.html:67 +msgid "Default Value" +msgstr "" + +#: part/models.py:2134 +msgid "Default Parameter Value" +msgstr "" + +#: part/models.py:2163 +msgid "Select parent part" +msgstr "" + +#: part/models.py:2172 +msgid "Select part to be used in BOM" +msgstr "" + +#: part/models.py:2178 +msgid "BOM quantity for this BOM item" +msgstr "" + +#: part/models.py:2180 templates/js/bom.js:216 templates/js/bom.js:269 +msgid "Optional" +msgstr "" + +#: part/models.py:2180 +msgid "This BOM item is optional" +msgstr "" + +#: part/models.py:2183 +msgid "Overage" +msgstr "" + +#: part/models.py:2184 +msgid "Estimated build wastage quantity (absolute or percentage)" +msgstr "" + +#: part/models.py:2187 +msgid "BOM item reference" +msgstr "" + +#: part/models.py:2190 +msgid "BOM item notes" +msgstr "" + +#: part/models.py:2192 +msgid "Checksum" +msgstr "" + +#: part/models.py:2192 +msgid "BOM line checksum" +msgstr "" + +#: part/models.py:2196 templates/js/bom.js:279 templates/js/bom.js:286 +#: templates/js/table_filters.js:50 +msgid "Inherited" +msgstr "" + +#: part/models.py:2197 +msgid "This BOM item is inherited by BOMs for variant parts" +msgstr "" + +#: part/models.py:2273 part/views.py:1592 part/views.py:1644 +#: stock/models.py:260 +msgid "Quantity must be integer value for trackable parts" +msgstr "" + +#: part/models.py:2282 part/models.py:2284 +msgid "Sub part must be specified" +msgstr "" + +#: part/models.py:2287 +msgid "BOM Item" +msgstr "" + +#: part/models.py:2404 +msgid "Part 1" +msgstr "" + +#: part/models.py:2408 +msgid "Part 2" +msgstr "" + +#: part/models.py:2408 +msgid "Select Related Part" +msgstr "" + +#: part/models.py:2440 +msgid "" +"Error creating relationship: check that the part is not related to itself " +"and that the relationship is unique" +msgstr "" + +#: part/templates/part/allocation.html:11 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/attachments.html:10 +msgid "Part Attachments" +msgstr "" + +#: part/templates/part/bom-delete.html:6 +msgid "Are you sure you want to delete this BOM item?" +msgstr "" + +#: part/templates/part/bom-delete.html:8 +msgid "Deleting this entry will remove the BOM row from the following part" +msgstr "" + +#: part/templates/part/bom.html:10 part/templates/part/navbar.html:48 +#: part/templates/part/navbar.html:51 +msgid "Bill of Materials" +msgstr "" + +#: part/templates/part/bom.html:19 +#, python-format +msgid "The BOM for %(part)s has changed, and must be validated.
    " +msgstr "" + +#: part/templates/part/bom.html:21 +#, python-format +msgid "" +"The BOM for %(part)s was last checked by %(checker)s on %(check_date)s" +msgstr "" + +#: part/templates/part/bom.html:25 +#, python-format +msgid "The BOM for %(part)s has not been validated." +msgstr "" + +#: part/templates/part/bom.html:32 +msgid "Remove selected BOM items" +msgstr "" + +#: part/templates/part/bom.html:35 +msgid "Import BOM data" +msgstr "" + +#: part/templates/part/bom.html:39 +msgid "Copy BOM from parent part" +msgstr "" + +#: part/templates/part/bom.html:43 +msgid "New BOM Item" +msgstr "" + +#: part/templates/part/bom.html:46 +msgid "Finish Editing" +msgstr "" + +#: part/templates/part/bom.html:51 +msgid "Edit BOM" +msgstr "" + +#: part/templates/part/bom.html:55 +msgid "Validate Bill of Materials" +msgstr "" + +#: part/templates/part/bom.html:61 part/views.py:1887 +msgid "Export Bill of Materials" +msgstr "" + +#: part/templates/part/bom.html:64 +msgid "Print BOM Report" +msgstr "" + +#: part/templates/part/bom.html:109 +msgid "Delete selected BOM items?" +msgstr "" + +#: part/templates/part/bom.html:110 +msgid "All selected BOM items will be deleted" +msgstr "" + +#: part/templates/part/bom.html:160 part/views.py:584 +#: templates/js/stock.js:1158 +msgid "Create New Part" +msgstr "" + +#: part/templates/part/bom_duplicate.html:13 +msgid "This part already has a Bill of Materials" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:11 +#: part/templates/part/bom_upload/select_parts.html:11 +#: part/templates/part/bom_upload/upload_file.html:11 +msgid "Upload Bill of Materials" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:16 +msgid "Step 2 - Select Fields" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:21 +msgid "Missing selections for the following required columns" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:32 +msgid "Submit Selections" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:41 +msgid "File Fields" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:47 +msgid "Remove column" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:58 +msgid "Match Fields" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:68 +msgid "Duplicate column selection" +msgstr "" + +#: part/templates/part/bom_upload/select_fields.html:76 +#: part/templates/part/bom_upload/select_parts.html:58 +msgid "Remove row" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:16 +msgid "Step 3 - Select Parts" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:21 +msgid "Errors exist in the submitted data" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:27 +msgid "Submit BOM" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:39 +msgid "Row" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:40 +#: part/templates/part/bom_upload/select_parts.html:69 +msgid "Select Part" +msgstr "" + +#: part/templates/part/bom_upload/select_parts.html:65 +#: part/templates/part/category.html:117 +msgid "Create new part" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:16 +msgid "Step 1 - Select BOM File" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:19 +msgid "Requirements for BOM upload" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:21 +msgid "" +"The BOM file must contain the required named columns as provided in the " +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:21 +msgid "BOM Upload Template" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:22 +msgid "Each part must already exist in the database" +msgstr "" + +#: part/templates/part/bom_upload/upload_file.html:27 +msgid "Upload File" +msgstr "" + +#: part/templates/part/bom_validate.html:6 +#, python-format +msgid "" +"Confirm that the Bill of Materials (BOM) is valid for:
    %(part)s" +msgstr "" + +#: part/templates/part/bom_validate.html:9 +msgid "This will validate each line in the BOM." +msgstr "" + +#: part/templates/part/build.html:10 +msgid "Part Builds" +msgstr "" + +#: part/templates/part/build.html:18 +msgid "Start New Build" +msgstr "" + +#: part/templates/part/category.html:24 +msgid "All parts" +msgstr "" + +#: part/templates/part/category.html:29 part/views.py:2270 +msgid "Create new part category" +msgstr "" + +#: part/templates/part/category.html:35 +msgid "Edit part category" +msgstr "" + +#: part/templates/part/category.html:40 +msgid "Delete part category" +msgstr "" + +#: part/templates/part/category.html:50 part/templates/part/category.html:89 +msgid "Category Details" +msgstr "" + +#: part/templates/part/category.html:55 +msgid "Category Path" +msgstr "" + +#: part/templates/part/category.html:60 +msgid "Category Description" +msgstr "" + +#: part/templates/part/category.html:79 +#: part/templates/part/category_navbar.html:11 +#: part/templates/part/category_navbar.html:18 +#: part/templates/part/subcategory.html:16 +msgid "Subcategories" +msgstr "" + +#: part/templates/part/category.html:84 +msgid "Parts (Including subcategories)" +msgstr "" + +#: part/templates/part/category.html:113 +msgid "Export Part Data" +msgstr "" + +#: part/templates/part/category.html:125 +msgid "Set category" +msgstr "" + +#: part/templates/part/category.html:125 +msgid "Set Category" +msgstr "" + +#: part/templates/part/category.html:128 +msgid "Export Data" +msgstr "" + +#: part/templates/part/category.html:186 +#: stock/templates/stock/location.html:192 templates/js/stock.js:709 +msgid "Create new location" +msgstr "" + +#: part/templates/part/category.html:191 part/templates/part/category.html:221 +msgid "New Category" +msgstr "" + +#: part/templates/part/category.html:192 +msgid "Create new category" +msgstr "" + +#: part/templates/part/category.html:222 +msgid "Create new Part Category" +msgstr "" + +#: part/templates/part/category.html:228 stock/views.py:1359 +msgid "Create new Stock Location" +msgstr "" + +#: part/templates/part/category_delete.html:5 +msgid "Are you sure you want to delete category" +msgstr "" + +#: part/templates/part/category_delete.html:8 +#, python-format +msgid "This category contains %(count)s child categories" +msgstr "" + +#: part/templates/part/category_delete.html:9 +msgid "" +"If this category is deleted, these child categories will be moved to the" +msgstr "" + +#: part/templates/part/category_delete.html:11 +msgid "category" +msgstr "" + +#: part/templates/part/category_delete.html:13 +msgid "top level Parts category" +msgstr "" + +#: part/templates/part/category_delete.html:25 +#, python-format +msgid "This category contains %(count)s parts" +msgstr "" + +#: part/templates/part/category_delete.html:27 +#, python-format +msgid "" +"If this category is deleted, these parts will be moved to the parent " +"category %(path)s" +msgstr "" + +#: part/templates/part/category_delete.html:29 +msgid "" +"If this category is deleted, these parts will be moved to the top-level " +"category Teile" +msgstr "" + +#: part/templates/part/category_navbar.html:34 +#: part/templates/part/category_navbar.html:37 +#: part/templates/part/navbar.html:22 +msgid "Parameters" +msgstr "" + +#: part/templates/part/category_parametric.html:10 +#: part/templates/part/navbar.html:19 part/templates/part/params.html:10 +msgid "Part Parameters" +msgstr "" + +#: part/templates/part/copy_part.html:9 part/views.py:460 +msgid "Duplicate Part" +msgstr "" + +#: part/templates/part/copy_part.html:10 +#, python-format +msgid "Make a copy of part '%(full_name)s'." +msgstr "" + +#: part/templates/part/copy_part.html:14 +#: part/templates/part/create_part.html:11 +msgid "Possible Matching Parts" +msgstr "" + +#: part/templates/part/copy_part.html:15 +#: part/templates/part/create_part.html:12 +msgid "The new part may be a duplicate of these existing parts" +msgstr "" + +#: part/templates/part/create_part.html:17 +#, python-format +msgid "%(full_name)s - %(desc)s (%(match_per)s%% match)" +msgstr "" + +#: part/templates/part/detail.html:11 part/templates/part/navbar.html:11 +msgid "Part Details" +msgstr "" + +#: part/templates/part/detail.html:42 +msgid "Latest Serial Number" +msgstr "" + +#: part/templates/part/detail.html:47 +msgid "No serial numbers recorded" +msgstr "" + +#: part/templates/part/detail.html:120 +msgid "Stock Expiry Time" +msgstr "" + +#: part/templates/part/detail.html:139 +msgid "Responsible User" +msgstr "" + +#: part/templates/part/detail.html:153 +msgid "Part is virtual (not a physical part)" +msgstr "" + +#: part/templates/part/detail.html:155 +msgid "Part is not a virtual part" +msgstr "" + +#: part/templates/part/detail.html:163 +msgid "Part is a template part (variants can be made from this part)" +msgstr "" + +#: part/templates/part/detail.html:165 +msgid "Part is not a template part" +msgstr "" + +#: part/templates/part/detail.html:173 +msgid "Part can be assembled from other parts" +msgstr "" + +#: part/templates/part/detail.html:175 +msgid "Part cannot be assembled from other parts" +msgstr "" + +#: part/templates/part/detail.html:183 +msgid "Part can be used in assemblies" +msgstr "" + +#: part/templates/part/detail.html:185 +msgid "Part cannot be used in assemblies" +msgstr "" + +#: part/templates/part/detail.html:193 +msgid "Part stock is tracked by serial number" +msgstr "" + +#: part/templates/part/detail.html:195 +msgid "Part stock is not tracked by serial number" +msgstr "" + +#: part/templates/part/detail.html:203 part/templates/part/detail.html:205 +msgid "Part can be purchased from external suppliers" +msgstr "" + +#: part/templates/part/detail.html:213 +msgid "Part can be sold to customers" +msgstr "" + +#: part/templates/part/detail.html:215 +msgid "Part cannot be sold to customers" +msgstr "" + +#: part/templates/part/detail.html:230 +msgid "Part is active" +msgstr "" + +#: part/templates/part/detail.html:232 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/manufacturer.html:11 +msgid "Part Manufacturers" +msgstr "" + +#: part/templates/part/manufacturer.html:24 +msgid "Delete manufacturer parts" +msgstr "" + +#: part/templates/part/manufacturer.html:53 +#: part/templates/part/supplier.html:57 +msgid "Create new manufacturer" +msgstr "" + +#: part/templates/part/navbar.html:26 part/templates/part/variants.html:11 +msgid "Part Variants" +msgstr "" + +#: part/templates/part/navbar.html:29 +msgid "Variants" +msgstr "" + +#: part/templates/part/navbar.html:40 +msgid "Allocated Stock" +msgstr "" + +#: part/templates/part/navbar.html:43 +msgid "Allocations" +msgstr "" + +#: part/templates/part/navbar.html:64 part/templates/part/navbar.html:67 +msgid "Used In" +msgstr "" + +#: part/templates/part/navbar.html:92 +msgid "Sales Price Information" +msgstr "" + +#: part/templates/part/navbar.html:95 +msgid "Sale Price" +msgstr "" + +#: part/templates/part/navbar.html:106 part/templates/part/part_tests.html:10 +msgid "Part Test Templates" +msgstr "" + +#: part/templates/part/navbar.html:109 stock/templates/stock/item_base.html:398 +msgid "Tests" +msgstr "" + +#: part/templates/part/navbar.html:113 part/templates/part/navbar.html:116 +#: part/templates/part/related.html:10 +msgid "Related Parts" +msgstr "" + +#: part/templates/part/navbar.html:125 part/templates/part/notes.html:12 +msgid "Part Notes" +msgstr "" + +#: part/templates/part/params.html:17 +msgid "Add new parameter" +msgstr "" + +#: part/templates/part/params.html:18 +#: templates/InvenTree/settings/category.html:29 +#: templates/InvenTree/settings/part.html:44 +msgid "New Parameter" +msgstr "" + +#: part/templates/part/params.html:28 +#: report/templates/report/inventree_test_report_base.html:90 +#: stock/models.py:1655 templates/InvenTree/settings/header.html:8 +#: templates/js/stock.js:124 +msgid "Value" +msgstr "" + +#: part/templates/part/params.html:41 templates/InvenTree/settings/user.html:19 +msgid "Edit" +msgstr "" + +#: part/templates/part/params.html:68 +msgid "New Template" +msgstr "" + +#: part/templates/part/params.html:69 +msgid "Create New Parameter Template" +msgstr "" + +#: part/templates/part/part_app_base.html:12 +msgid "Part List" +msgstr "" + +#: part/templates/part/part_base.html:18 +#, python-format +msgid "This part is a variant of %(link)s" +msgstr "" + +#: part/templates/part/part_base.html:33 templates/js/company.js:156 +#: templates/js/company.js:254 templates/js/part.js:76 templates/js/part.js:153 +msgid "Inactive" +msgstr "" + +#: part/templates/part/part_base.html:40 +msgid "Star this part" +msgstr "" + +#: part/templates/part/part_base.html:47 +#: stock/templates/stock/item_base.html:131 +#: stock/templates/stock/location.html:51 +msgid "Barcode actions" +msgstr "" + +#: part/templates/part/part_base.html:49 +#: stock/templates/stock/item_base.html:133 +#: stock/templates/stock/location.html:53 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: part/templates/part/part_base.html:50 +#: stock/templates/stock/item_base.html:149 +#: stock/templates/stock/location.html:54 +msgid "Print Label" +msgstr "" + +#: part/templates/part/part_base.html:55 +msgid "Show pricing information" +msgstr "" + +#: part/templates/part/part_base.html:59 +msgid "Count part stock" +msgstr "" + +#: part/templates/part/part_base.html:74 +msgid "Part actions" +msgstr "" + +#: part/templates/part/part_base.html:77 +msgid "Duplicate part" +msgstr "" + +#: part/templates/part/part_base.html:80 +msgid "Edit part" +msgstr "" + +#: part/templates/part/part_base.html:83 +msgid "Delete part" +msgstr "" + +#: part/templates/part/part_base.html:123 templates/js/table_filters.js:156 +msgid "In Stock" +msgstr "" + +#: part/templates/part/part_base.html:136 templates/InvenTree/index.html:131 +msgid "Required for Build Orders" +msgstr "" + +#: part/templates/part/part_base.html:143 +msgid "Required for Sales Orders" +msgstr "" + +#: part/templates/part/part_base.html:150 +msgid "Allocated to Orders" +msgstr "" + +#: part/templates/part/part_base.html:165 templates/js/bom.js:300 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:171 templates/js/part.js:418 +msgid "Building" +msgstr "" + +#: part/templates/part/part_base.html:250 +msgid "Calculate" +msgstr "" + +#: part/templates/part/part_pricing.html:8 +#, python-format +msgid "Pricing information for:
    %(part)s." +msgstr "" + +#: part/templates/part/part_pricing.html:23 +msgid "Supplier Pricing" +msgstr "" + +#: part/templates/part/part_pricing.html:27 +#: part/templates/part/part_pricing.html:53 +msgid "Unit Cost" +msgstr "" + +#: part/templates/part/part_pricing.html:33 +#: part/templates/part/part_pricing.html:59 +msgid "Total Cost" +msgstr "" + +#: part/templates/part/part_pricing.html:41 +msgid "No supplier pricing available" +msgstr "" + +#: part/templates/part/part_pricing.html:49 +msgid "BOM Pricing" +msgstr "" + +#: part/templates/part/part_pricing.html:67 +msgid "Note: BOM pricing is incomplete for this part" +msgstr "" + +#: part/templates/part/part_pricing.html:74 +msgid "No BOM pricing available" +msgstr "" + +#: part/templates/part/part_pricing.html:84 +msgid "No pricing information is available for this part." +msgstr "" + +#: part/templates/part/part_tests.html:17 +msgid "Add Test Template" +msgstr "" + +#: part/templates/part/part_thumb.html:20 +msgid "Select from existing images" +msgstr "" + +#: part/templates/part/partial_delete.html:7 +#, python-format +msgid "Are you sure you want to delete part '%(full_name)s'?" +msgstr "" + +#: part/templates/part/partial_delete.html:12 +#, python-format +msgid "" +"This part is used in BOMs for %(count)s other parts. If you delete this " +"part, the BOMs for the following parts will be updated" +msgstr "" + +#: part/templates/part/partial_delete.html:22 +#, python-format +msgid "" +"There are %(count)s stock entries defined for this part. If you delete this " +"part, the following stock entries will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:33 +#, python-format +msgid "" +"There are %(count)s manufacturers defined for this part. If you delete this " +"part, the following manufacturer parts will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:44 +#, python-format +msgid "" +"There are %(count)s suppliers defined for this part. If you delete this " +"part, the following supplier parts will also be deleted:" +msgstr "" + +#: part/templates/part/partial_delete.html:55 +#, python-format +msgid "" +"There are %(count)s unique parts tracked for '%(full_name)s'. Deleting this " +"part will permanently remove this tracking information." +msgstr "" + +#: part/templates/part/related.html:18 +msgid "Add Related" +msgstr "" + +#: part/templates/part/sale_prices.html:10 +msgid "Sell Price Information" +msgstr "" + +#: part/templates/part/sales_orders.html:18 +msgid "New sales order" +msgstr "" + +#: part/templates/part/sales_orders.html:18 +msgid "New Order" +msgstr "" + +#: part/templates/part/set_category.html:9 +msgid "Set category for the following parts" +msgstr "" + +#: part/templates/part/stock.html:10 +msgid "Part Stock" +msgstr "" + +#: part/templates/part/stock.html:16 +#, python-format +msgid "Showing stock for all variants of %(full_name)s" +msgstr "" + +#: part/templates/part/stock_count.html:7 templates/js/bom.js:239 +#: templates/js/part.js:422 +msgid "No Stock" +msgstr "" + +#: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:130 +msgid "Low Stock" +msgstr "" + +#: part/templates/part/supplier.html:10 +msgid "Part Suppliers" +msgstr "" + +#: part/templates/part/track.html:10 +msgid "Part Tracking" +msgstr "" + +#: part/templates/part/used_in.html:9 +msgid "Assemblies" +msgstr "" + +#: part/templates/part/variant_part.html:9 +msgid "Create new part variant" +msgstr "" + +#: part/templates/part/variant_part.html:10 +#, python-format +msgid "Create a new variant of template '%(full_name)s'." +msgstr "" + +#: part/templates/part/variants.html:19 +msgid "Create new variant" +msgstr "" + +#: part/templates/part/variants.html:20 +msgid "New Variant" +msgstr "" + +#: part/views.py:89 +msgid "Add Related Part" +msgstr "" + +#: part/views.py:144 +msgid "Delete Related Part" +msgstr "" + +#: part/views.py:158 +msgid "Add part attachment" +msgstr "" + +#: part/views.py:211 templates/attachment_table.html:32 +msgid "Edit attachment" +msgstr "" + +#: part/views.py:215 +msgid "Part attachment updated" +msgstr "" + +#: part/views.py:230 +msgid "Delete Part Attachment" +msgstr "" + +#: part/views.py:238 +msgid "Deleted part attachment" +msgstr "" + +#: part/views.py:247 +msgid "Create Test Template" +msgstr "" + +#: part/views.py:274 +msgid "Edit Test Template" +msgstr "" + +#: part/views.py:288 +msgid "Delete Test Template" +msgstr "" + +#: part/views.py:295 +msgid "Set Part Category" +msgstr "" + +#: part/views.py:345 +#, python-brace-format +msgid "Set category for {n} parts" +msgstr "" + +#: part/views.py:380 +msgid "Create Variant" +msgstr "" + +#: part/views.py:465 +msgid "Copied part" +msgstr "" + +#: part/views.py:519 part/views.py:657 +msgid "Possible matches exist - confirm creation of new part" +msgstr "" + +#: part/views.py:589 +msgid "Created new part" +msgstr "" + +#: part/views.py:825 +msgid "Part QR Code" +msgstr "" + +#: part/views.py:927 +msgid "Upload Part Image" +msgstr "" + +#: part/views.py:933 part/views.py:968 +msgid "Updated part image" +msgstr "" + +#: part/views.py:942 +msgid "Select Part Image" +msgstr "" + +#: part/views.py:971 +msgid "Part image not found" +msgstr "" + +#: part/views.py:982 +msgid "Edit Part Properties" +msgstr "" + +#: part/views.py:1017 +msgid "Duplicate BOM" +msgstr "" + +#: part/views.py:1047 +msgid "Confirm duplication of BOM from parent" +msgstr "" + +#: part/views.py:1068 +msgid "Validate BOM" +msgstr "" + +#: part/views.py:1089 +msgid "Confirm that the BOM is valid" +msgstr "" + +#: part/views.py:1100 +msgid "Validated Bill of Materials" +msgstr "" + +#: part/views.py:1234 +msgid "No BOM file provided" +msgstr "" + +#: part/views.py:1595 +msgid "Enter a valid quantity" +msgstr "" + +#: part/views.py:1620 part/views.py:1623 +msgid "Select valid part" +msgstr "" + +#: part/views.py:1629 +msgid "Duplicate part selected" +msgstr "" + +#: part/views.py:1667 +msgid "Select a part" +msgstr "" + +#: part/views.py:1673 +msgid "Selected part creates a circular BOM" +msgstr "" + +#: part/views.py:1677 +msgid "Specify quantity" +msgstr "" + +#: part/views.py:1939 +msgid "Confirm Part Deletion" +msgstr "" + +#: part/views.py:1946 +msgid "Part was deleted" +msgstr "" + +#: part/views.py:1955 +msgid "Part Pricing" +msgstr "" + +#: part/views.py:2069 +msgid "Create Part Parameter Template" +msgstr "" + +#: part/views.py:2079 +msgid "Edit Part Parameter Template" +msgstr "" + +#: part/views.py:2086 +msgid "Delete Part Parameter Template" +msgstr "" + +#: part/views.py:2094 +msgid "Create Part Parameter" +msgstr "" + +#: part/views.py:2144 +msgid "Edit Part Parameter" +msgstr "" + +#: part/views.py:2158 +msgid "Delete Part Parameter" +msgstr "" + +#: part/views.py:2218 +msgid "Edit Part Category" +msgstr "" + +#: part/views.py:2256 +msgid "Delete Part Category" +msgstr "" + +#: part/views.py:2262 +msgid "Part category was deleted" +msgstr "" + +#: part/views.py:2314 +msgid "Create Category Parameter Template" +msgstr "" + +#: part/views.py:2415 +msgid "Edit Category Parameter Template" +msgstr "" + +#: part/views.py:2471 +msgid "Delete Category Parameter Template" +msgstr "" + +#: part/views.py:2490 +msgid "Create BOM Item" +msgstr "" + +#: part/views.py:2560 +msgid "Edit BOM item" +msgstr "" + +#: part/views.py:2616 +msgid "Confim BOM item deletion" +msgstr "" + +#: report/models.py:180 +msgid "Template name" +msgstr "" + +#: report/models.py:186 +msgid "Report template file" +msgstr "" + +#: report/models.py:193 +msgid "Report template description" +msgstr "" + +#: report/models.py:199 +msgid "Report revision number (auto-increments)" +msgstr "" + +#: report/models.py:275 +msgid "Report template is enabled" +msgstr "" + +#: report/models.py:295 +msgid "StockItem query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:303 +msgid "Include Installed Tests" +msgstr "" + +#: report/models.py:304 +msgid "Include test results for stock items installed inside assembled item" +msgstr "" + +#: report/models.py:347 +msgid "Build Filters" +msgstr "" + +#: report/models.py:348 +msgid "Build query filters (comma-separated list of key=value pairs" +msgstr "" + +#: report/models.py:385 +msgid "Part Filters" +msgstr "" + +#: report/models.py:386 +msgid "Part query filters (comma-separated list of key=value pairs" +msgstr "" + +#: report/models.py:416 +msgid "Purchase order query filters" +msgstr "" + +#: report/models.py:450 +msgid "Sales order query filters" +msgstr "" + +#: report/models.py:500 +msgid "Snippet" +msgstr "" + +#: report/models.py:501 +msgid "Report snippet file" +msgstr "" + +#: report/models.py:505 +msgid "Snippet file description" +msgstr "" + +#: report/models.py:540 +msgid "Asset" +msgstr "" + +#: report/models.py:541 +msgid "Report asset file" +msgstr "" + +#: report/models.py:544 +msgid "Asset file description" +msgstr "" + +#: report/templates/report/inventree_build_order_base.html:147 +msgid "Required For" +msgstr "" + +#: report/templates/report/inventree_po_report.html:85 +#: report/templates/report/inventree_so_report.html:85 +msgid "Line Items" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:21 +msgid "Stock Item Test Report" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:83 +msgid "Test Results" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:1643 +msgid "Test" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:89 +#: stock/models.py:1649 +msgid "Result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:92 +#: templates/js/order.js:195 templates/js/stock.js:986 +msgid "Date" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:103 +msgid "Pass" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:105 +msgid "Fail" +msgstr "" + +#: stock/api.py:199 +#, python-brace-format +msgid "Updated stock for {n} items" +msgstr "" + +#: stock/api.py:268 +#, python-brace-format +msgid "Moved {n} parts to {loc}" +msgstr "" + +#: stock/forms.py:114 stock/forms.py:406 stock/models.py:475 +#: stock/templates/stock/item_base.html:365 templates/js/stock.js:656 +msgid "Expiry Date" +msgstr "" + +#: stock/forms.py:115 stock/forms.py:407 +msgid "Expiration date for this stock item" +msgstr "" + +#: stock/forms.py:118 +msgid "Enter unique serial numbers (or leave blank)" +msgstr "" + +#: stock/forms.py:169 +msgid "" +"Destination for serialized stock (by default, will remain in current " +"location)" +msgstr "" + +#: stock/forms.py:171 +msgid "Serial numbers" +msgstr "" + +#: stock/forms.py:171 +msgid "Unique serial numbers (must match quantity)" +msgstr "" + +#: stock/forms.py:173 stock/forms.py:349 +msgid "Add transaction note (optional)" +msgstr "" + +#: stock/forms.py:203 stock/forms.py:259 +msgid "Select test report template" +msgstr "" + +#: stock/forms.py:267 templates/js/table_filters.js:70 +#: templates/js/table_filters.js:133 +msgid "Include sublocations" +msgstr "" + +#: stock/forms.py:267 +msgid "Include stock items in sub locations" +msgstr "" + +#: stock/forms.py:302 +msgid "Stock item to install" +msgstr "" + +#: stock/forms.py:309 +msgid "Stock quantity to assign" +msgstr "" + +#: stock/forms.py:337 +msgid "Must not exceed available quantity" +msgstr "" + +#: stock/forms.py:347 +msgid "Destination location for uninstalled items" +msgstr "" + +#: stock/forms.py:351 +msgid "Confirm uninstall" +msgstr "" + +#: stock/forms.py:351 +msgid "Confirm removal of installed stock items" +msgstr "" + +#: stock/forms.py:375 +msgid "Destination stock location" +msgstr "" + +#: stock/forms.py:377 +msgid "Add note (required)" +msgstr "" + +#: stock/forms.py:381 stock/views.py:852 stock/views.py:1051 +msgid "Confirm stock adjustment" +msgstr "" + +#: stock/forms.py:381 +msgid "Confirm movement of stock items" +msgstr "" + +#: stock/forms.py:383 +msgid "Set Default Location" +msgstr "" + +#: stock/forms.py:383 +msgid "Set the destination as the default location for selected parts" +msgstr "" + +#: stock/models.py:54 stock/models.py:513 +msgid "Owner" +msgstr "" + +#: stock/models.py:55 stock/models.py:514 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:205 +msgid "Created stock item" +msgstr "" + +#: stock/models.py:241 +msgid "StockItem with this serial number already exists" +msgstr "" + +#: stock/models.py:277 +#, python-brace-format +msgid "Part type ('{pf}') must be {pe}" +msgstr "" + +#: stock/models.py:287 stock/models.py:296 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:288 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:310 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:316 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:323 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:365 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:374 +msgid "Base part" +msgstr "" + +#: stock/models.py:383 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:388 stock/templates/stock/stock_app_base.html:8 +msgid "Stock Location" +msgstr "" + +#: stock/models.py:391 +msgid "Where is this stock item located?" +msgstr "" + +#: stock/models.py:398 +msgid "Packaging this stock item is stored in" +msgstr "" + +#: stock/models.py:403 stock/templates/stock/item_base.html:259 +msgid "Installed In" +msgstr "" + +#: stock/models.py:406 +msgid "Is this item installed in another item?" +msgstr "" + +#: stock/models.py:422 +msgid "Serial number for this item" +msgstr "" + +#: stock/models.py:434 +msgid "Batch code for this stock item" +msgstr "" + +#: stock/models.py:438 +msgid "Stock Quantity" +msgstr "" + +#: stock/models.py:447 +msgid "Source Build" +msgstr "" + +#: stock/models.py:449 +msgid "Build for this stock item" +msgstr "" + +#: stock/models.py:460 +msgid "Source Purchase Order" +msgstr "" + +#: stock/models.py:463 +msgid "Purchase order for this stock item" +msgstr "" + +#: stock/models.py:469 +msgid "Destination Sales Order" +msgstr "" + +#: stock/models.py:476 +msgid "" +"Expiry date for stock item. Stock will be considered expired after this date" +msgstr "" + +#: stock/models.py:489 +msgid "Delete on deplete" +msgstr "" + +#: stock/models.py:489 +msgid "Delete this Stock Item when stock is depleted" +msgstr "" + +#: stock/models.py:499 stock/templates/stock/item_notes.html:13 +#: stock/templates/stock/navbar.html:54 +msgid "Stock Item Notes" +msgstr "" + +#: stock/models.py:509 +msgid "Single unit purchase price at time of purchase" +msgstr "" + +#: stock/models.py:614 +msgid "Assigned to Customer" +msgstr "" + +#: stock/models.py:616 +msgid "Manually assigned to customer" +msgstr "" + +#: stock/models.py:629 +msgid "Returned from customer" +msgstr "" + +#: stock/models.py:631 +msgid "Returned to location" +msgstr "" + +#: stock/models.py:792 +msgid "Installed into stock item" +msgstr "" + +#: stock/models.py:800 +msgid "Installed stock item" +msgstr "" + +#: stock/models.py:824 +msgid "Uninstalled stock item" +msgstr "" + +#: stock/models.py:843 +msgid "Uninstalled into location" +msgstr "" + +#: stock/models.py:944 +msgid "Part is not set as trackable" +msgstr "" + +#: stock/models.py:950 +msgid "Quantity must be integer" +msgstr "" + +#: stock/models.py:956 +#, python-brace-format +msgid "Quantity must not exceed available stock quantity ({n})" +msgstr "" + +#: stock/models.py:959 +msgid "Serial numbers must be a list of integers" +msgstr "" + +#: stock/models.py:962 +msgid "Quantity does not match serial numbers" +msgstr "" + +#: stock/models.py:994 +msgid "Add serial number" +msgstr "" + +#: stock/models.py:997 +#, python-brace-format +msgid "Serialized {n} items" +msgstr "" + +#: stock/models.py:1075 +msgid "Split from existing stock" +msgstr "" + +#: stock/models.py:1113 +msgid "StockItem cannot be moved as it is not in stock" +msgstr "" + +#: stock/models.py:1556 +msgid "Title" +msgstr "" + +#: stock/models.py:1556 +msgid "Tracking entry title" +msgstr "" + +#: stock/models.py:1558 +msgid "Entry notes" +msgstr "" + +#: stock/models.py:1560 +msgid "Link to external page for further information" +msgstr "" + +#: stock/models.py:1620 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:1626 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:1644 +msgid "Test name" +msgstr "" + +#: stock/models.py:1650 templates/js/table_filters.js:212 +msgid "Test result" +msgstr "" + +#: stock/models.py:1656 +msgid "Test output value" +msgstr "" + +#: stock/models.py:1663 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:1669 +msgid "Test notes" +msgstr "" + +#: stock/templates/stock/item.html:12 +msgid "Stock Tracking Information" +msgstr "" + +#: stock/templates/stock/item.html:30 +msgid "New Entry" +msgstr "" + +#: stock/templates/stock/item_attachments.html:11 +msgid "Stock Item Attachments" +msgstr "" + +#: stock/templates/stock/item_base.html:24 +msgid "" +"You are not in the list of owners of this item. This stock item cannot be " +"edited." +msgstr "" + +#: stock/templates/stock/item_base.html:31 +msgid "This stock item is in production and cannot be edited." +msgstr "" + +#: stock/templates/stock/item_base.html:32 +msgid "Edit the stock item from the build view." +msgstr "" + +#: stock/templates/stock/item_base.html:45 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:53 +#, python-format +msgid "" +"This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)" +msgstr "" + +#: stock/templates/stock/item_base.html:61 +#, python-format +msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)" +msgstr "" + +#: stock/templates/stock/item_base.html:67 +msgid "" +"This stock item is serialized - it has a unique serial number and the " +"quantity cannot be adjusted." +msgstr "" + +#: stock/templates/stock/item_base.html:71 +msgid "This stock item cannot be deleted as it has child items" +msgstr "" + +#: stock/templates/stock/item_base.html:75 +msgid "" +"This stock item will be automatically deleted when all stock is depleted." +msgstr "" + +#: stock/templates/stock/item_base.html:95 +#: stock/templates/stock/item_base.html:369 templates/js/table_filters.js:145 +msgid "Expired" +msgstr "" + +#: stock/templates/stock/item_base.html:99 +#: stock/templates/stock/item_base.html:371 templates/js/table_filters.js:150 +msgid "Stale" +msgstr "" + +#: stock/templates/stock/item_base.html:136 templates/js/barcode.js:309 +#: templates/js/barcode.js:314 +msgid "Unlink Barcode" +msgstr "" + +#: stock/templates/stock/item_base.html:138 +msgid "Link Barcode" +msgstr "" + +#: stock/templates/stock/item_base.html:140 templates/stock_table.html:31 +msgid "Scan to Location" +msgstr "" + +#: stock/templates/stock/item_base.html:147 +msgid "Printing actions" +msgstr "" + +#: stock/templates/stock/item_base.html:151 +#: stock/templates/stock/item_tests.html:27 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item_base.html:160 +msgid "Stock adjustment actions" +msgstr "" + +#: stock/templates/stock/item_base.html:164 +#: stock/templates/stock/location.html:65 templates/stock_table.html:56 +msgid "Count stock" +msgstr "" + +#: stock/templates/stock/item_base.html:167 templates/stock_table.html:54 +msgid "Add stock" +msgstr "" + +#: stock/templates/stock/item_base.html:170 templates/stock_table.html:55 +msgid "Remove stock" +msgstr "" + +#: stock/templates/stock/item_base.html:173 +msgid "Serialize stock" +msgstr "" + +#: stock/templates/stock/item_base.html:177 +msgid "Transfer stock" +msgstr "" + +#: stock/templates/stock/item_base.html:180 +msgid "Assign to customer" +msgstr "" + +#: stock/templates/stock/item_base.html:183 +msgid "Return to stock" +msgstr "" + +#: stock/templates/stock/item_base.html:187 templates/js/stock.js:1299 +msgid "Uninstall stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:187 +msgid "Uninstall" +msgstr "" + +#: stock/templates/stock/item_base.html:196 +#: stock/templates/stock/location.html:62 +msgid "Stock actions" +msgstr "" + +#: stock/templates/stock/item_base.html:199 +msgid "Convert to variant" +msgstr "" + +#: stock/templates/stock/item_base.html:202 +msgid "Duplicate stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:204 +msgid "Edit stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:207 +msgid "Delete stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:219 +msgid "Stock Item Details" +msgstr "" + +#: stock/templates/stock/item_base.html:278 templates/js/build.js:442 +msgid "No location set" +msgstr "" + +#: stock/templates/stock/item_base.html:285 +msgid "Barcode Identifier" +msgstr "" + +#: stock/templates/stock/item_base.html:327 +msgid "Parent Item" +msgstr "" + +#: stock/templates/stock/item_base.html:369 +#, python-format +msgid "This StockItem expired on %(item.expiry_date)s" +msgstr "" + +#: stock/templates/stock/item_base.html:371 +#, python-format +msgid "This StockItem expires on %(item.expiry_date)s" +msgstr "" + +#: stock/templates/stock/item_base.html:378 templates/js/stock.js:662 +msgid "Last Updated" +msgstr "" + +#: stock/templates/stock/item_base.html:383 +msgid "Last Stocktake" +msgstr "" + +#: stock/templates/stock/item_base.html:387 +msgid "No stocktake performed" +msgstr "" + +#: stock/templates/stock/item_childs.html:12 +msgid "Child Stock Items" +msgstr "" + +#: stock/templates/stock/item_childs.html:20 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item_delete.html:9 +msgid "Are you sure you want to delete this stock item?" +msgstr "" + +#: stock/templates/stock/item_delete.html:12 +#, python-format +msgid "" +"This will remove %(qty)s units of %(full_name)s from stock." +msgstr "" + +#: stock/templates/stock/item_install.html:7 +msgid "Install another StockItem into this item." +msgstr "" + +#: stock/templates/stock/item_install.html:10 +msgid "Stock items can only be installed if they meet the following criteria" +msgstr "" + +#: stock/templates/stock/item_install.html:13 +msgid "The StockItem links to a Part which is in the BOM for this StockItem" +msgstr "" + +#: stock/templates/stock/item_install.html:14 +msgid "The StockItem is currently in stock" +msgstr "" + +#: stock/templates/stock/item_installed.html:11 +#: stock/templates/stock/navbar.html:27 +msgid "Installed Stock Items" +msgstr "" + +#: stock/templates/stock/item_serialize.html:5 +msgid "Create serialized items from this stock item." +msgstr "" + +#: stock/templates/stock/item_serialize.html:7 +msgid "Select quantity to serialize, and unique serial numbers." +msgstr "" + +#: stock/templates/stock/item_tests.html:11 +#: stock/templates/stock/navbar.html:19 stock/templates/stock/navbar.html:22 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item_tests.html:20 +msgid "Delete Test Data" +msgstr "" + +#: stock/templates/stock/item_tests.html:24 +msgid "Add Test Data" +msgstr "" + +#: stock/templates/stock/location.html:20 +msgid "" +"You are not in the list of owners of this location. This stock location " +"cannot be edited." +msgstr "" + +#: stock/templates/stock/location.html:37 +msgid "All stock items" +msgstr "" + +#: stock/templates/stock/location.html:55 +msgid "Check-in Items" +msgstr "" + +#: stock/templates/stock/location.html:71 +msgid "Location actions" +msgstr "" + +#: stock/templates/stock/location.html:73 +msgid "Edit location" +msgstr "" + +#: stock/templates/stock/location.html:75 +msgid "Delete location" +msgstr "" + +#: stock/templates/stock/location.html:87 +msgid "Location Details" +msgstr "" + +#: stock/templates/stock/location.html:92 +msgid "Location Path" +msgstr "" + +#: stock/templates/stock/location.html:97 +msgid "Location Description" +msgstr "" + +#: stock/templates/stock/location.html:102 +#: stock/templates/stock/location_navbar.html:11 +#: stock/templates/stock/location_navbar.html:18 +#: stock/templates/stock/sublocation.html:16 +msgid "Sublocations" +msgstr "" + +#: stock/templates/stock/location.html:112 +msgid "Stock Details" +msgstr "" + +#: stock/templates/stock/location.html:117 templates/InvenTree/search.html:279 +#: templates/stats.html:76 users/models.py:39 +msgid "Stock Locations" +msgstr "" + +#: stock/templates/stock/location_delete.html:7 +msgid "Are you sure you want to delete this stock location?" +msgstr "" + +#: stock/templates/stock/navbar.html:11 +msgid "Stock Item Tracking" +msgstr "" + +#: stock/templates/stock/navbar.html:14 +msgid "History" +msgstr "" + +#: stock/templates/stock/navbar.html:30 +msgid "Installed Items" +msgstr "" + +#: stock/templates/stock/navbar.html:38 +msgid "Child Items" +msgstr "" + +#: stock/templates/stock/navbar.html:41 +msgid "Children" +msgstr "" + +#: stock/templates/stock/stock_adjust.html:43 +msgid "Remove item" +msgstr "" + +#: stock/templates/stock/stock_app_base.html:16 +msgid "Loading..." +msgstr "" + +#: stock/templates/stock/stock_uninstall.html:8 +msgid "The following stock items will be uninstalled" +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1332 +msgid "Convert Stock Item" +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:8 +#, python-format +msgid "This stock item is current an instance of %(part)s" +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:9 +msgid "It can be converted to one of the part variants listed below." +msgstr "" + +#: stock/templates/stock/stockitem_convert.html:14 +msgid "This action cannot be easily undone" +msgstr "" + +#: stock/templates/stock/sublocation.html:23 templates/stock_table.html:37 +msgid "Printing Actions" +msgstr "" + +#: stock/templates/stock/sublocation.html:27 templates/stock_table.html:41 +msgid "Print labels" +msgstr "" + +#: stock/templates/stock/tracking_delete.html:6 +msgid "Are you sure you want to delete this stock tracking entry?" +msgstr "" + +#: stock/views.py:123 +msgid "Edit Stock Location" +msgstr "" + +#: stock/views.py:230 stock/views.py:1322 stock/views.py:1433 +#: stock/views.py:1798 +msgid "Owner is required (ownership control is enabled)" +msgstr "" + +#: stock/views.py:245 +msgid "Stock Location QR code" +msgstr "" + +#: stock/views.py:265 +msgid "Add Stock Item Attachment" +msgstr "" + +#: stock/views.py:311 +msgid "Edit Stock Item Attachment" +msgstr "" + +#: stock/views.py:327 +msgid "Delete Stock Item Attachment" +msgstr "" + +#: stock/views.py:343 +msgid "Assign to Customer" +msgstr "" + +#: stock/views.py:352 +msgid "Customer must be specified" +msgstr "" + +#: stock/views.py:376 +msgid "Return to Stock" +msgstr "" + +#: stock/views.py:385 +msgid "Specify a valid location" +msgstr "" + +#: stock/views.py:396 +msgid "Stock item returned from customer" +msgstr "" + +#: stock/views.py:407 +msgid "Delete All Test Data" +msgstr "" + +#: stock/views.py:424 +msgid "Confirm test data deletion" +msgstr "" + +#: stock/views.py:444 +msgid "Add Test Result" +msgstr "" + +#: stock/views.py:484 +msgid "Edit Test Result" +msgstr "" + +#: stock/views.py:501 +msgid "Delete Test Result" +msgstr "" + +#: stock/views.py:509 +msgid "Stock Export Options" +msgstr "" + +#: stock/views.py:630 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/views.py:656 +msgid "Install Stock Item" +msgstr "" + +#: stock/views.py:755 +msgid "Uninstall Stock Items" +msgstr "" + +#: stock/views.py:863 +msgid "Uninstalled stock items" +msgstr "" + +#: stock/views.py:888 +msgid "Adjust Stock" +msgstr "" + +#: stock/views.py:998 +msgid "Move Stock Items" +msgstr "" + +#: stock/views.py:998 +msgid "Move" +msgstr "" + +#: stock/views.py:999 +msgid "Count Stock Items" +msgstr "" + +#: stock/views.py:999 +msgid "Count" +msgstr "" + +#: stock/views.py:1000 +msgid "Remove From Stock" +msgstr "" + +#: stock/views.py:1000 +msgid "Take" +msgstr "" + +#: stock/views.py:1001 +msgid "Add Stock Items" +msgstr "" + +#: stock/views.py:1001 users/models.py:180 +msgid "Add" +msgstr "" + +#: stock/views.py:1002 +msgid "Delete Stock Items" +msgstr "" + +#: stock/views.py:1031 +msgid "Must enter integer value" +msgstr "" + +#: stock/views.py:1036 +msgid "Quantity must be positive" +msgstr "" + +#: stock/views.py:1043 +#, python-brace-format +msgid "Quantity must not exceed {x}" +msgstr "" + +#: stock/views.py:1107 +msgid "No action performed" +msgstr "" + +#: stock/views.py:1122 +#, python-brace-format +msgid "Added stock to {n} items" +msgstr "" + +#: stock/views.py:1137 +#, python-brace-format +msgid "Removed stock from {n} items" +msgstr "" + +#: stock/views.py:1150 +#, python-brace-format +msgid "Counted stock for {n} items" +msgstr "" + +#: stock/views.py:1190 +msgid "No items were moved" +msgstr "" + +#: stock/views.py:1193 +#, python-brace-format +msgid "Moved {n} items to {dest}" +msgstr "" + +#: stock/views.py:1212 +#, python-brace-format +msgid "Deleted {n} stock items" +msgstr "" + +#: stock/views.py:1224 +msgid "Edit Stock Item" +msgstr "" + +#: stock/views.py:1450 +msgid "Serialize Stock" +msgstr "" + +#: stock/views.py:1543 templates/js/build.js:210 +msgid "Create new Stock Item" +msgstr "" + +#: stock/views.py:1685 +msgid "Duplicate Stock Item" +msgstr "" + +#: stock/views.py:1767 +msgid "Quantity cannot be negative" +msgstr "" + +#: stock/views.py:1867 +msgid "Delete Stock Location" +msgstr "" + +#: stock/views.py:1880 +msgid "Delete Stock Item" +msgstr "" + +#: stock/views.py:1891 +msgid "Delete Stock Tracking Entry" +msgstr "" + +#: stock/views.py:1898 +msgid "Edit Stock Tracking Entry" +msgstr "" + +#: stock/views.py:1907 +msgid "Add Stock Tracking Entry" +msgstr "" + +#: templates/403.html:5 templates/403.html:11 +msgid "Permission Denied" +msgstr "" + +#: templates/403.html:14 +msgid "You do not have permission to view this page." +msgstr "" + +#: templates/404.html:5 templates/404.html:11 +msgid "Page Not Found" +msgstr "" + +#: templates/404.html:14 +msgid "The requested page does not exist" +msgstr "" + +#: templates/InvenTree/index.html:7 +msgid "Index" +msgstr "" + +#: templates/InvenTree/index.html:98 +msgid "Starred Parts" +msgstr "" + +#: templates/InvenTree/index.html:99 +msgid "Latest Parts" +msgstr "" + +#: templates/InvenTree/index.html:100 +msgid "BOM Waiting Validation" +msgstr "" + +#: templates/InvenTree/index.html:129 +msgid "Recently Updated" +msgstr "" + +#: templates/InvenTree/index.html:145 +msgid "Expired Stock" +msgstr "" + +#: templates/InvenTree/index.html:146 +msgid "Stale Stock" +msgstr "" + +#: templates/InvenTree/index.html:184 +msgid "Build Orders In Progress" +msgstr "" + +#: templates/InvenTree/index.html:185 +msgid "Overdue Build Orders" +msgstr "" + +#: templates/InvenTree/index.html:206 +msgid "Outstanding Purchase Orders" +msgstr "" + +#: templates/InvenTree/index.html:207 +msgid "Overdue Purchase Orders" +msgstr "" + +#: templates/InvenTree/index.html:229 +msgid "Outstanding Sales Orders" +msgstr "" + +#: templates/InvenTree/index.html:230 +msgid "Overdue Sales Orders" +msgstr "" + +#: templates/InvenTree/search.html:8 templates/InvenTree/search.html:14 +msgid "Search Results" +msgstr "" + +#: templates/InvenTree/search.html:24 +msgid "Enter a search query" +msgstr "" + +#: templates/InvenTree/search.html:268 templates/js/stock.js:300 +msgid "Shipped to customer" +msgstr "" + +#: templates/InvenTree/search.html:271 templates/js/stock.js:310 +msgid "No stock location set" +msgstr "" + +#: templates/InvenTree/settings/build.html:10 +msgid "Build Order Settings" +msgstr "" + +#: templates/InvenTree/settings/category.html:9 +msgid "Category Settings" +msgstr "" + +#: templates/InvenTree/settings/category.html:25 +msgid "Category Parameter Templates" +msgstr "" + +#: templates/InvenTree/settings/category.html:52 +msgid "No category parameter templates found" +msgstr "" + +#: templates/InvenTree/settings/category.html:70 +#: templates/InvenTree/settings/part.html:81 +msgid "Edit Template" +msgstr "" + +#: templates/InvenTree/settings/category.html:71 +#: templates/InvenTree/settings/part.html:82 +msgid "Delete Template" +msgstr "" + +#: templates/InvenTree/settings/global.html:10 +msgid "Global InvenTree Settings" +msgstr "" + +#: templates/InvenTree/settings/global.html:27 +msgid "Barcode Settings" +msgstr "" + +#: templates/InvenTree/settings/header.html:7 +msgid "Setting" +msgstr "" + +#: templates/InvenTree/settings/part.html:9 +msgid "Part Settings" +msgstr "" + +#: templates/InvenTree/settings/part.html:14 +msgid "Part Options" +msgstr "" + +#: templates/InvenTree/settings/part.html:40 +msgid "Part Parameter Templates" +msgstr "" + +#: templates/InvenTree/settings/part.html:61 +msgid "No part parameter templates found" +msgstr "" + +#: templates/InvenTree/settings/po.html:9 +msgid "Purchase Order Settings" +msgstr "" + +#: templates/InvenTree/settings/report.html:10 +msgid "Report Settings" +msgstr "" + +#: templates/InvenTree/settings/setting.html:23 +msgid "No value set" +msgstr "" + +#: templates/InvenTree/settings/setting.html:31 +msgid "Edit setting" +msgstr "" + +#: templates/InvenTree/settings/settings.html:8 +#: templates/InvenTree/settings/settings.html:14 templates/navbar.html:84 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/so.html:9 +msgid "Sales Order Settings" +msgstr "" + +#: templates/InvenTree/settings/stock.html:9 +msgid "Stock Settings" +msgstr "" + +#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:49 +msgid "Stock Options" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:3 +#: templates/InvenTree/settings/user.html:10 +msgid "User Settings" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:6 +msgid "Account" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:9 +msgid "Theme" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:13 +msgid "InvenTree Settings" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:16 +msgid "Global" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:19 +msgid "Report" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:22 +msgid "Categories" +msgstr "" + +#: templates/InvenTree/settings/theme.html:10 +msgid "Theme Settings" +msgstr "" + +#: templates/InvenTree/settings/theme.html:17 +msgid "Color Themes" +msgstr "" + +#: templates/InvenTree/settings/theme.html:29 +#, python-format +msgid "" +"\n" +"\t\tThe CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected " +"color theme was not found.
    \n" +"\t\tPlease select another color theme :)\n" +"\t" +msgstr "" + +#: templates/InvenTree/settings/user.html:16 +msgid "User Information" +msgstr "" + +#: templates/InvenTree/settings/user.html:21 +msgid "Change Password" +msgstr "" + +#: templates/InvenTree/settings/user.html:28 +#: templates/registration/login.html:59 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:32 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:36 +msgid "Last Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:40 +msgid "Email Address" +msgstr "" + +#: templates/about.html:13 +msgid "InvenTree Version Information" +msgstr "" + +#: templates/about.html:22 +msgid "InvenTree Version" +msgstr "" + +#: templates/about.html:26 +msgid "Up to Date" +msgstr "" + +#: templates/about.html:28 +msgid "Update Available" +msgstr "" + +#: templates/about.html:34 +msgid "Django Version" +msgstr "" + +#: templates/about.html:41 +msgid "Commit Hash" +msgstr "" + +#: templates/about.html:48 +msgid "Commit Date" +msgstr "" + +#: templates/about.html:53 +msgid "InvenTree Documentation" +msgstr "" + +#: templates/about.html:58 +msgid "View Code on GitHub" +msgstr "" + +#: templates/about.html:63 +msgid "Get the App" +msgstr "" + +#: templates/about.html:68 +msgid "Submit Bug Report" +msgstr "" + +#: templates/attachment_table.html:6 +msgid "Add Attachment" +msgstr "" + +#: templates/attachment_table.html:15 +msgid "File" +msgstr "" + +#: templates/attachment_table.html:17 +msgid "Uploaded" +msgstr "" + +#: templates/attachment_table.html:35 +msgid "Delete attachment" +msgstr "" + +#: templates/image_download.html:8 +msgid "Specify URL for downloading image" +msgstr "" + +#: templates/image_download.html:11 +msgid "Must be a valid image URL" +msgstr "" + +#: templates/image_download.html:12 +msgid "Remote server must be accessible" +msgstr "" + +#: templates/image_download.html:13 +msgid "Remote image must not exceed maximum allowable file size" +msgstr "" + +#: templates/js/barcode.js:8 +msgid "Scan barcode data here using wedge scanner" +msgstr "" + +#: templates/js/barcode.js:10 +msgid "Enter barcode data" +msgstr "" + +#: templates/js/barcode.js:14 +msgid "Barcode" +msgstr "" + +#: templates/js/barcode.js:32 +msgid "Enter optional notes for stock transfer" +msgstr "" + +#: templates/js/barcode.js:33 +msgid "Enter notes" +msgstr "" + +#: templates/js/barcode.js:71 +msgid "Server error" +msgstr "" + +#: templates/js/barcode.js:92 +msgid "Unknown response from server" +msgstr "" + +#: templates/js/barcode.js:119 templates/js/modals.js:857 +msgid "Invalid server response" +msgstr "" + +#: templates/js/barcode.js:212 +msgid "Scan barcode data below" +msgstr "" + +#: templates/js/barcode.js:270 +msgid "No URL in response" +msgstr "" + +#: templates/js/barcode.js:288 +msgid "Link Barcode to Stock Item" +msgstr "" + +#: templates/js/barcode.js:311 +msgid "" +"This will remove the association between this stock item and the barcode" +msgstr "" + +#: templates/js/barcode.js:317 +msgid "Unlink" +msgstr "" + +#: templates/js/barcode.js:376 +msgid "Remove stock item" +msgstr "" + +#: templates/js/barcode.js:418 +msgid "Check Stock Items into Location" +msgstr "" + +#: templates/js/barcode.js:422 templates/js/barcode.js:547 +msgid "Check In" +msgstr "" + +#: templates/js/barcode.js:462 templates/js/barcode.js:586 +msgid "Error transferring stock" +msgstr "" + +#: templates/js/barcode.js:481 +msgid "Stock Item already scanned" +msgstr "" + +#: templates/js/barcode.js:485 +msgid "Stock Item already in this location" +msgstr "" + +#: templates/js/barcode.js:492 +msgid "Added stock item" +msgstr "" + +#: templates/js/barcode.js:499 +msgid "Barcode does not match Stock Item" +msgstr "" + +#: templates/js/barcode.js:542 +msgid "Check Into Location" +msgstr "" + +#: templates/js/barcode.js:605 +msgid "Barcode does not match a valid location" +msgstr "" + +#: templates/js/bom.js:175 templates/js/build.js:934 +msgid "Open subassembly" +msgstr "" + +#: templates/js/bom.js:261 +msgid "No pricing available" +msgstr "" + +#: templates/js/bom.js:272 templates/js/filters.js:167 +#: templates/js/filters.js:397 +msgid "true" +msgstr "" + +#: templates/js/bom.js:273 templates/js/filters.js:171 +#: templates/js/filters.js:398 +msgid "false" +msgstr "" + +#: templates/js/bom.js:290 templates/js/bom.js:376 +msgid "View BOM" +msgstr "" + +#: templates/js/bom.js:350 +msgid "Validate BOM Item" +msgstr "" + +#: templates/js/bom.js:352 +msgid "This line has been validated" +msgstr "" + +#: templates/js/bom.js:354 +msgid "Edit BOM Item" +msgstr "" + +#: templates/js/bom.js:356 +msgid "Delete BOM Item" +msgstr "" + +#: templates/js/bom.js:447 templates/js/build.js:305 templates/js/build.js:1032 +msgid "No BOM items found" +msgstr "" + +#: templates/js/build.js:56 +msgid "Auto-allocate stock items to this output" +msgstr "" + +#: templates/js/build.js:62 +msgid "Complete build output" +msgstr "" + +#: templates/js/build.js:71 +msgid "Unallocate stock from build output" +msgstr "" + +#: templates/js/build.js:77 +msgid "Delete build output" +msgstr "" + +#: templates/js/build.js:209 templates/stock_table.html:20 +msgid "New Stock Item" +msgstr "" + +#: templates/js/build.js:493 +msgid "Required Part" +msgstr "" + +#: templates/js/build.js:514 +msgid "Quantity Per" +msgstr "" + +#: templates/js/build.js:582 templates/js/build.js:996 +#: templates/stock_table.html:58 +msgid "Order stock" +msgstr "" + +#: templates/js/build.js:632 +msgid "No builds matching query" +msgstr "" + +#: templates/js/build.js:649 templates/js/part.js:324 templates/js/part.js:546 +#: templates/js/stock.js:511 templates/js/stock.js:938 +#: templates/js/stock.js:1331 +msgid "Select" +msgstr "" + +#: templates/js/build.js:669 +msgid "Build order is overdue" +msgstr "" + +#: templates/js/build.js:767 +msgid "No parts allocated for" +msgstr "" + +#: templates/js/company.js:74 +msgid "Parts Supplied" +msgstr "" + +#: templates/js/company.js:83 +msgid "Parts Manufactured" +msgstr "" + +#: templates/js/company.js:96 +msgid "No company information found" +msgstr "" + +#: templates/js/company.js:129 +msgid "No manufacturer parts found" +msgstr "" + +#: templates/js/company.js:148 templates/js/company.js:246 +#: templates/js/part.js:60 templates/js/part.js:145 +msgid "Template part" +msgstr "" + +#: templates/js/company.js:152 templates/js/company.js:250 +#: templates/js/part.js:64 templates/js/part.js:149 +msgid "Assembled part" +msgstr "" + +#: templates/js/company.js:227 +msgid "No supplier parts found" +msgstr "" + +#: templates/js/filters.js:193 +msgid "Select filter" +msgstr "" + +#: templates/js/filters.js:268 +msgid "Add new filter" +msgstr "" + +#: templates/js/filters.js:271 +msgid "Clear all filters" +msgstr "" + +#: templates/js/filters.js:296 +msgid "Create filter" +msgstr "" + +#: templates/js/label.js:10 templates/js/report.js:98 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/label.js:11 +msgid "Stock item(s) must be selected before printing labels" +msgstr "" + +#: templates/js/label.js:29 templates/js/label.js:79 +msgid "No Labels Found" +msgstr "" + +#: templates/js/label.js:30 +msgid "No labels found which match selected stock item(s)" +msgstr "" + +#: templates/js/label.js:61 +msgid "Select Stock Locations" +msgstr "" + +#: templates/js/label.js:62 +msgid "Stock location(s) must be selected before printing labels" +msgstr "" + +#: templates/js/label.js:80 +msgid "No labels found which match selected stock location(s)" +msgstr "" + +#: templates/js/label.js:154 +msgid "stock items selected" +msgstr "" + +#: templates/js/label.js:162 +msgid "Select Label" +msgstr "" + +#: templates/js/label.js:177 +msgid "Select Label Template" +msgstr "" + +#: templates/js/modals.js:256 +msgid "Waiting for server..." +msgstr "" + +#: templates/js/modals.js:406 +msgid "Show Error Information" +msgstr "" + +#: templates/js/modals.js:473 templates/modals.html:73 +msgid "Accept" +msgstr "" + +#: templates/js/modals.js:474 templates/modals.html:72 +msgid "Cancel" +msgstr "" + +#: templates/js/modals.js:538 +msgid "Loading Data" +msgstr "" + +#: templates/js/modals.js:549 templates/js/modals.js:808 +#: templates/modals.html:29 templates/modals.html:53 +msgid "Submit" +msgstr "" + +#: templates/js/modals.js:550 templates/js/modals.js:809 +#: templates/modals.html:28 templates/modals.html:52 templates/modals.html:93 +msgid "Close" +msgstr "" + +#: templates/js/modals.js:760 +msgid "Invalid response from server" +msgstr "" + +#: templates/js/modals.js:760 +msgid "Form data missing from server response" +msgstr "" + +#: templates/js/modals.js:773 +msgid "Error posting form data" +msgstr "" + +#: templates/js/modals.js:857 +msgid "JSON response missing form data" +msgstr "" + +#: templates/js/modals.js:867 +msgid "No Response" +msgstr "" + +#: templates/js/modals.js:868 +msgid "No response from the InvenTree server" +msgstr "" + +#: templates/js/modals.js:872 +msgid "Error 400: Bad Request" +msgstr "" + +#: templates/js/modals.js:873 +msgid "Server returned error code 400" +msgstr "" + +#: templates/js/modals.js:877 +msgid "Error 401: Not Authenticated" +msgstr "" + +#: templates/js/modals.js:878 +msgid "Authentication credentials not supplied" +msgstr "" + +#: templates/js/modals.js:882 +msgid "Error 403: Permission Denied" +msgstr "" + +#: templates/js/modals.js:883 +msgid "You do not have the required permissions to access this function" +msgstr "" + +#: templates/js/modals.js:887 +msgid "Error 404: Resource Not Found" +msgstr "" + +#: templates/js/modals.js:888 +msgid "The requested resource could not be located on the server" +msgstr "" + +#: templates/js/modals.js:892 +msgid "Error 408: Timeout" +msgstr "" + +#: templates/js/modals.js:893 +msgid "Connection timeout while requesting data from server" +msgstr "" + +#: templates/js/modals.js:896 +msgid "Error requesting form data" +msgstr "" + +#: templates/js/order.js:138 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/order.js:162 templates/js/order.js:257 +msgid "Order is overdue" +msgstr "" + +#: templates/js/order.js:234 +msgid "No sales orders found" +msgstr "" + +#: templates/js/part.js:52 templates/js/part.js:137 +msgid "Trackable part" +msgstr "" + +#: templates/js/part.js:56 templates/js/part.js:141 +msgid "Virtual part" +msgstr "" + +#: templates/js/part.js:68 +msgid "Starred part" +msgstr "" + +#: templates/js/part.js:72 +msgid "Salable part" +msgstr "" + +#: templates/js/part.js:186 +msgid "No variants found" +msgstr "" + +#: templates/js/part.js:272 templates/js/part.js:452 +msgid "No parts found" +msgstr "" + +#: templates/js/part.js:391 +msgid "No category" +msgstr "" + +#: templates/js/part.js:409 templates/js/table_filters.js:318 +msgid "Low stock" +msgstr "" + +#: templates/js/part.js:571 templates/js/stock.js:962 +msgid "Path" +msgstr "" + +#: templates/js/part.js:588 +msgid "YES" +msgstr "" + +#: templates/js/part.js:590 +msgid "NO" +msgstr "" + +#: templates/js/part.js:624 +msgid "No test templates matching query" +msgstr "" + +#: templates/js/part.js:675 templates/js/stock.js:75 +msgid "Edit test result" +msgstr "" + +#: templates/js/part.js:676 templates/js/stock.js:76 +msgid "Delete test result" +msgstr "" + +#: templates/js/part.js:682 +msgid "This test is defined for a parent part" +msgstr "" + +#: templates/js/report.js:47 +msgid "items selected" +msgstr "" + +#: templates/js/report.js:55 +msgid "Select Report Template" +msgstr "" + +#: templates/js/report.js:70 +msgid "Select Test Report Template" +msgstr "" + +#: templates/js/report.js:99 +msgid "Stock item(s) must be selected before printing reports" +msgstr "" + +#: templates/js/report.js:116 templates/js/report.js:169 +#: templates/js/report.js:223 templates/js/report.js:277 +#: templates/js/report.js:331 +msgid "No Reports Found" +msgstr "" + +#: templates/js/report.js:117 +msgid "No report templates found which match selected stock item(s)" +msgstr "" + +#: templates/js/report.js:152 +msgid "Select Builds" +msgstr "" + +#: templates/js/report.js:153 +msgid "Build(s) must be selected before printing reports" +msgstr "" + +#: templates/js/report.js:170 +msgid "No report templates found which match selected build(s)" +msgstr "" + +#: templates/js/report.js:205 +msgid "Select Parts" +msgstr "" + +#: templates/js/report.js:206 +msgid "Part(s) must be selected before printing reports" +msgstr "" + +#: templates/js/report.js:224 +msgid "No report templates found which match selected part(s)" +msgstr "" + +#: templates/js/report.js:259 +msgid "Select Purchase Orders" +msgstr "" + +#: templates/js/report.js:260 +msgid "Purchase Order(s) must be selected before printing report" +msgstr "" + +#: templates/js/report.js:278 templates/js/report.js:332 +msgid "No report templates found which match selected orders" +msgstr "" + +#: templates/js/report.js:313 +msgid "Select Sales Orders" +msgstr "" + +#: templates/js/report.js:314 +msgid "Sales Order(s) must be selected before printing report" +msgstr "" + +#: templates/js/stock.js:38 +msgid "PASS" +msgstr "" + +#: templates/js/stock.js:40 +msgid "FAIL" +msgstr "" + +#: templates/js/stock.js:45 +msgid "NO RESULT" +msgstr "" + +#: templates/js/stock.js:71 +msgid "Add test result" +msgstr "" + +#: templates/js/stock.js:90 +msgid "No test results found" +msgstr "" + +#: templates/js/stock.js:132 +msgid "Test Date" +msgstr "" + +#: templates/js/stock.js:292 +msgid "In production" +msgstr "" + +#: templates/js/stock.js:296 +msgid "Installed in Stock Item" +msgstr "" + +#: templates/js/stock.js:304 +msgid "Assigned to Sales Order" +msgstr "" + +#: templates/js/stock.js:336 +msgid "No stock items matching query" +msgstr "" + +#: templates/js/stock.js:357 +msgid "items" +msgstr "" + +#: templates/js/stock.js:449 +msgid "batches" +msgstr "" + +#: templates/js/stock.js:476 +msgid "locations" +msgstr "" + +#: templates/js/stock.js:478 +msgid "Undefined location" +msgstr "" + +#: templates/js/stock.js:579 +msgid "Stock item is in production" +msgstr "" + +#: templates/js/stock.js:584 +msgid "Stock item assigned to sales order" +msgstr "" + +#: templates/js/stock.js:587 +msgid "Stock item assigned to customer" +msgstr "" + +#: templates/js/stock.js:591 +msgid "Stock item has expired" +msgstr "" + +#: templates/js/stock.js:593 +msgid "Stock item will expire soon" +msgstr "" + +#: templates/js/stock.js:597 +msgid "Stock item has been allocated" +msgstr "" + +#: templates/js/stock.js:601 +msgid "Stock item has been installed in another item" +msgstr "" + +#: templates/js/stock.js:609 +msgid "Stock item has been rejected" +msgstr "" + +#: templates/js/stock.js:613 +msgid "Stock item is lost" +msgstr "" + +#: templates/js/stock.js:616 +msgid "Stock item is destroyed" +msgstr "" + +#: templates/js/stock.js:620 templates/js/table_filters.js:138 +msgid "Depleted" +msgstr "" + +#: templates/js/stock.js:649 +msgid "Stocktake" +msgstr "" + +#: templates/js/stock.js:825 +msgid "Stock Status" +msgstr "" + +#: templates/js/stock.js:840 +msgid "Set Stock Status" +msgstr "" + +#: templates/js/stock.js:854 +msgid "Select Status Code" +msgstr "" + +#: templates/js/stock.js:855 +msgid "Status code must be selected" +msgstr "" + +#: templates/js/stock.js:1050 +msgid "No user information" +msgstr "" + +#: templates/js/stock.js:1060 +msgid "Edit tracking entry" +msgstr "" + +#: templates/js/stock.js:1061 +msgid "Delete tracking entry" +msgstr "" + +#: templates/js/stock.js:1170 +msgid "Create New Location" +msgstr "" + +#: templates/js/stock.js:1269 +msgid "Serial" +msgstr "" + +#: templates/js/stock.js:1362 templates/js/table_filters.js:171 +msgid "Installed" +msgstr "" + +#: templates/js/stock.js:1387 +msgid "Install item" +msgstr "" + +#: templates/js/table_filters.js:42 +msgid "Trackable Part" +msgstr "" + +#: templates/js/table_filters.js:46 +msgid "Validated" +msgstr "" + +#: templates/js/table_filters.js:71 +msgid "Include locations" +msgstr "" + +#: templates/js/table_filters.js:81 templates/js/table_filters.js:82 +#: templates/js/table_filters.js:295 +msgid "Include subcategories" +msgstr "" + +#: templates/js/table_filters.js:92 templates/js/table_filters.js:181 +msgid "Is Serialized" +msgstr "" + +#: templates/js/table_filters.js:95 templates/js/table_filters.js:188 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/table_filters.js:96 templates/js/table_filters.js:189 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/table_filters.js:99 templates/js/table_filters.js:192 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/table_filters.js:100 templates/js/table_filters.js:193 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/table_filters.js:103 templates/js/table_filters.js:104 +#: templates/js/table_filters.js:184 templates/js/table_filters.js:185 +msgid "Serial number" +msgstr "" + +#: templates/js/table_filters.js:108 templates/js/table_filters.js:202 +msgid "Batch code" +msgstr "" + +#: templates/js/table_filters.js:118 templates/js/table_filters.js:285 +msgid "Active parts" +msgstr "" + +#: templates/js/table_filters.js:119 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/table_filters.js:124 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/table_filters.js:128 +msgid "Is allocated" +msgstr "" + +#: templates/js/table_filters.js:129 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/table_filters.js:134 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/table_filters.js:139 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/table_filters.js:146 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/table_filters.js:151 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/table_filters.js:157 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/table_filters.js:161 +msgid "In Production" +msgstr "" + +#: templates/js/table_filters.js:162 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/table_filters.js:166 +msgid "Include Variants" +msgstr "" + +#: templates/js/table_filters.js:167 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/table_filters.js:172 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/table_filters.js:176 +msgid "Sent to customer" +msgstr "" + +#: templates/js/table_filters.js:177 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/table_filters.js:197 templates/js/table_filters.js:198 +msgid "Stock status" +msgstr "" + +#: templates/js/table_filters.js:231 +msgid "Build status" +msgstr "" + +#: templates/js/table_filters.js:250 templates/js/table_filters.js:267 +msgid "Order status" +msgstr "" + +#: templates/js/table_filters.js:255 templates/js/table_filters.js:272 +msgid "Outstanding" +msgstr "" + +#: templates/js/table_filters.js:296 +msgid "Include parts in subcategories" +msgstr "" + +#: templates/js/table_filters.js:300 +msgid "Has IPN" +msgstr "" + +#: templates/js/table_filters.js:301 +msgid "Part has internal part number" +msgstr "" + +#: templates/js/table_filters.js:306 +msgid "Show active parts" +msgstr "" + +#: templates/js/table_filters.js:314 +msgid "Stock available" +msgstr "" + +#: templates/js/table_filters.js:330 +msgid "Starred" +msgstr "" + +#: templates/js/table_filters.js:342 +msgid "Purchasable" +msgstr "" + +#: templates/js/tables.js:321 +msgid "Loading data" +msgstr "" + +#: templates/js/tables.js:324 +msgid "rows per page" +msgstr "" + +#: templates/js/tables.js:327 +msgid "Showing" +msgstr "" + +#: templates/js/tables.js:327 +msgid "to" +msgstr "" + +#: templates/js/tables.js:327 +msgid "of" +msgstr "" + +#: templates/js/tables.js:327 +msgid "rows" +msgstr "" + +#: templates/js/tables.js:330 templates/search_form.html:6 +#: templates/search_form.html:8 +msgid "Search" +msgstr "" + +#: templates/js/tables.js:333 +msgid "No matching results" +msgstr "" + +#: templates/js/tables.js:336 +msgid "Hide/Show pagination" +msgstr "" + +#: templates/js/tables.js:339 +msgid "Refresh" +msgstr "" + +#: templates/js/tables.js:342 +msgid "Toggle" +msgstr "" + +#: templates/js/tables.js:345 +msgid "Columns" +msgstr "" + +#: templates/js/tables.js:348 +msgid "All" +msgstr "" + +#: templates/modals.html:21 templates/modals.html:46 +msgid "Form errors exist" +msgstr "" + +#: templates/navbar.html:33 +msgid "Buy" +msgstr "" + +#: templates/navbar.html:43 +msgid "Sell" +msgstr "" + +#: templates/navbar.html:55 +msgid "Scan Barcode" +msgstr "" + +#: templates/navbar.html:77 users/models.py:36 +msgid "Admin" +msgstr "" + +#: templates/navbar.html:79 +msgid "Logout" +msgstr "" + +#: templates/navbar.html:81 templates/registration/login.html:90 +msgid "Login" +msgstr "" + +#: templates/navbar.html:104 +msgid "About InvenTree" +msgstr "" + +#: templates/qr_code.html:11 +msgid "QR data not provided" +msgstr "" + +#: templates/registration/logged_out.html:51 +msgid "You have been logged out" +msgstr "" + +#: templates/registration/logged_out.html:52 +#: templates/registration/password_reset_complete.html:52 +#: templates/registration/password_reset_done.html:59 +msgid "Return to login screen" +msgstr "" + +#: templates/registration/login.html:65 +msgid "Enter username" +msgstr "" + +#: templates/registration/login.html:71 +msgid "Password" +msgstr "" + +#: templates/registration/login.html:84 +msgid "Username / password combination is incorrect" +msgstr "" + +#: templates/registration/login.html:96 +#: templates/registration/password_reset_form.html:52 +msgid "Forgotten your password?" +msgstr "" + +#: templates/registration/login.html:96 +msgid "Click here to reset" +msgstr "" + +#: templates/registration/password_reset_complete.html:51 +msgid "Password reset complete" +msgstr "" + +#: templates/registration/password_reset_confirm.html:53 +#: templates/registration/password_reset_confirm.html:57 +msgid "Change password" +msgstr "" + +#: templates/registration/password_reset_confirm.html:61 +msgid "" +"The password reset link was invalid, possibly because it has already been " +"used. Please request a new password reset." +msgstr "" + +#: templates/registration/password_reset_done.html:52 +msgid "" +"We've emailed you instructions for setting your password, if an account " +"exists with the email you entered. You should receive them shortly." +msgstr "" + +#: templates/registration/password_reset_done.html:55 +msgid "" +"If you don't receive an email, please make sure you've entered the address " +"you registered with, and check your spam folder." +msgstr "" + +#: templates/registration/password_reset_form.html:53 +msgid "Enter your email address below." +msgstr "" + +#: templates/registration/password_reset_form.html:54 +msgid "An email will be sent with password reset instructions." +msgstr "" + +#: templates/registration/password_reset_form.html:59 +msgid "Send email" +msgstr "" + +#: templates/stats.html:9 +msgid "Server" +msgstr "" + +#: templates/stats.html:13 +msgid "Instance Name" +msgstr "" + +#: templates/stats.html:19 +msgid "Server status" +msgstr "" + +#: templates/stats.html:22 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:24 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:31 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:34 +msgid "Background worker not running" +msgstr "" + +#: templates/stats.html:42 +msgid "Email Settings" +msgstr "" + +#: templates/stats.html:45 +msgid "Email settings not configured" +msgstr "" + +#: templates/stock_table.html:14 +msgid "Export Stock Information" +msgstr "" + +#: templates/stock_table.html:27 +msgid "Barcode Actions" +msgstr "" + +#: templates/stock_table.html:43 +msgid "Print test reports" +msgstr "" + +#: templates/stock_table.html:54 +msgid "Add to selected stock items" +msgstr "" + +#: templates/stock_table.html:55 +msgid "Remove from selected stock items" +msgstr "" + +#: templates/stock_table.html:56 +msgid "Stocktake selected stock items" +msgstr "" + +#: templates/stock_table.html:57 +msgid "Move selected stock items" +msgstr "" + +#: templates/stock_table.html:57 +msgid "Move stock" +msgstr "" + +#: templates/stock_table.html:58 +msgid "Order selected items" +msgstr "" + +#: templates/stock_table.html:59 +msgid "Change status" +msgstr "" + +#: templates/stock_table.html:59 +msgid "Change stock status" +msgstr "" + +#: templates/stock_table.html:62 +msgid "Delete selected items" +msgstr "" + +#: templates/stock_table.html:62 +msgid "Delete Stock" +msgstr "" + +#: templates/yesnolabel.html:4 +msgid "Yes" +msgstr "" + +#: templates/yesnolabel.html:6 +msgid "No" +msgstr "" + +#: users/admin.py:64 +msgid "Users" +msgstr "" + +#: users/admin.py:65 +msgid "Select which users are assigned to this group" +msgstr "" + +#: users/admin.py:187 +msgid "The following users are members of multiple groups:" +msgstr "" + +#: users/admin.py:210 +msgid "Personal info" +msgstr "" + +#: users/admin.py:211 +msgid "Permissions" +msgstr "" + +#: users/admin.py:214 +msgid "Important dates" +msgstr "" + +#: users/models.py:167 +msgid "Permission set" +msgstr "" + +#: users/models.py:175 +msgid "Group" +msgstr "" + +#: users/models.py:178 +msgid "View" +msgstr "" + +#: users/models.py:178 +msgid "Permission to view items" +msgstr "" + +#: users/models.py:180 +msgid "Permission to add items" +msgstr "" + +#: users/models.py:182 +msgid "Change" +msgstr "" + +#: users/models.py:182 +msgid "Permissions to edit items" +msgstr "" + +#: users/models.py:184 +msgid "Permission to delete items" +msgstr "" diff --git a/tasks.py b/tasks.py index d775b943a0..316e9b4bfb 100644 --- a/tasks.py +++ b/tasks.py @@ -174,7 +174,7 @@ def update(c): """ pass -@task +@task(post=[static]) def translate(c): """ Regenerate translation files. @@ -184,7 +184,7 @@ def translate(c): """ # Translate applicable .py / .html / .js files - manage(c, "makemessages -e py -e html -e js") + manage(c, "makemessages --all -e py,html,js") manage(c, "compilemessages") path = os.path.join('InvenTree', 'script', 'translation_stats.py') From 096403b429228e3f67340cc2966f3c344e59a5f1 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Wed, 21 Apr 2021 12:37:20 +1000 Subject: [PATCH 096/116] CI file fixes --- .github/workflows/coverage.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/coverage.yaml b/.github/workflows/coverage.yaml index 17a8369822..f42c3ad7fa 100644 --- a/.github/workflows/coverage.yaml +++ b/.github/workflows/coverage.yaml @@ -43,7 +43,6 @@ jobs: invoke migrate invoke import-records -f data.json - name: Test Translations - # This will test both the translation and collectstatic functions run: invoke translate - name: Check Migration Files run: python3 ci/check_migration_files.py From 043d929dbbda01412f59fc232cfe039689833cfc Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Wed, 21 Apr 2021 12:57:54 +1000 Subject: [PATCH 097/116] Fix proper good --- .github/workflows/coverage.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/coverage.yaml b/.github/workflows/coverage.yaml index f42c3ad7fa..236f222117 100644 --- a/.github/workflows/coverage.yaml +++ b/.github/workflows/coverage.yaml @@ -42,8 +42,8 @@ jobs: rm test_db.sqlite invoke migrate invoke import-records -f data.json - - name: Test Translations - run: invoke translate + - name: Test Translations + run: invoke translate - name: Check Migration Files run: python3 ci/check_migration_files.py - name: Upload Coverage Report From 64c29d73cc0809a6687ac17e29dda74c1867ba34 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Wed, 21 Apr 2021 13:11:57 +1000 Subject: [PATCH 098/116] gettext required for translation --- .github/workflows/coverage.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/coverage.yaml b/.github/workflows/coverage.yaml index 236f222117..eb588e25c9 100644 --- a/.github/workflows/coverage.yaml +++ b/.github/workflows/coverage.yaml @@ -29,6 +29,7 @@ jobs: - name: Install Dependencies run: | sudo apt-get update + sudo apt-get install gettext pip3 install invoke invoke install - name: Coverage Tests From 9e470d4064084b96730a4006321203f635be508a Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 18 Apr 2021 21:41:34 +1000 Subject: [PATCH 099/116] Add separate section for "untracked" part allocation --- InvenTree/build/api.py | 8 +- InvenTree/build/forms.py | 6 - InvenTree/build/models.py | 72 ++++++++---- InvenTree/build/templates/build/allocate.html | 38 +++++++ InvenTree/build/templates/build/navbar.html | 2 +- InvenTree/build/views.py | 62 +++++------ InvenTree/templates/js/build.js | 104 ++++++++++++------ 7 files changed, 191 insertions(+), 101 deletions(-) diff --git a/InvenTree/build/api.py b/InvenTree/build/api.py index e6331f2b6a..10cc7e2024 100644 --- a/InvenTree/build/api.py +++ b/InvenTree/build/api.py @@ -11,7 +11,7 @@ from rest_framework import generics from django.conf.urls import url, include -from InvenTree.helpers import str2bool +from InvenTree.helpers import str2bool, isNull from InvenTree.status_codes import BuildStatus from .models import Build, BuildItem @@ -194,7 +194,11 @@ class BuildItemList(generics.ListCreateAPIView): output = params.get('output', None) if output: - queryset = queryset.filter(install_into=output) + + if isNull(output): + queryset = queryset.filter(install_into=None) + else: + queryset = queryset.filter(install_into=output) return queryset diff --git a/InvenTree/build/forms.py b/InvenTree/build/forms.py index 0726779b87..d4f5e23ce7 100644 --- a/InvenTree/build/forms.py +++ b/InvenTree/build/forms.py @@ -165,16 +165,10 @@ class AutoAllocateForm(HelperForm): confirm = forms.BooleanField(required=True, label=_('Confirm'), help_text=_('Confirm stock allocation')) - # Keep track of which build output we are interested in - output = forms.ModelChoiceField( - queryset=StockItem.objects.all(), - ) - class Meta: model = Build fields = [ 'confirm', - 'output', ] diff --git a/InvenTree/build/models.py b/InvenTree/build/models.py index 5a23752071..0fc92ce045 100644 --- a/InvenTree/build/models.py +++ b/InvenTree/build/models.py @@ -489,7 +489,7 @@ class Build(MPTTModel): self.status = BuildStatus.CANCELLED self.save() - def getAutoAllocations(self, output): + def getAutoAllocations(self): """ Return a list of StockItem objects which will be allocated using the 'AutoAllocate' function. @@ -521,15 +521,19 @@ class Build(MPTTModel): part = bom_item.sub_part + # If the part is "trackable" it cannot be auto-allocated + if part.trackable: + continue + # Skip any parts which are already fully allocated - if self.isPartFullyAllocated(part, output): + if self.isPartFullyAllocated(part, None): continue # How many parts are required to complete the output? - required = self.unallocatedQuantity(part, output) + required = self.unallocatedQuantity(part, None) # Grab a list of stock items which are available - stock_items = self.availableStockItems(part, output) + stock_items = self.availableStockItems(part, None) # Ensure that the available stock items are in the correct location if self.take_from is not None: @@ -544,7 +548,6 @@ class Build(MPTTModel): build_items = BuildItem.objects.filter( build=self, stock_item=stock_item, - install_into=output ) if len(build_items) > 0: @@ -567,24 +570,45 @@ class Build(MPTTModel): return allocations @transaction.atomic - def unallocateStock(self, output=None, part=None): + def unallocateOutput(self, output, part=None): """ - Deletes all stock allocations for this build. - - Args: - output: Specify which build output to delete allocations (optional) - + Unallocate all stock which are allocated against the provided "output" (StockItem) """ - allocations = BuildItem.objects.filter(build=self.pk) - - if output: - allocations = allocations.filter(install_into=output.pk) + allocations = BuildItem.objects.filter( + build=self, + install_into=output + ) if part: allocations = allocations.filter(stock_item__part=part) - # Remove all the allocations + allocations.delete() + + @transaction.atomic + def unallocateUntracked(self, part=None): + """ + Unallocate all "untracked" stock + """ + + allocations = BuildItem.objects.filter( + build=self, + install_into=None + ) + + if part: + allocations = allocations.filter(stock_item__part=part) + + allocations.delete() + + @transaction.atomic + def unallocateAll(self): + """ + Deletes all stock allocations for this build. + """ + + allocations = BuildItem.objects.filter(build=self) + allocations.delete() @transaction.atomic @@ -685,7 +709,7 @@ class Build(MPTTModel): output.delete() @transaction.atomic - def autoAllocate(self, output): + def autoAllocate(self): """ Run auto-allocation routine to allocate StockItems to this Build. @@ -702,7 +726,7 @@ class Build(MPTTModel): See: getAutoAllocations() """ - allocations = self.getAutoAllocations(output) + allocations = self.getAutoAllocations() for item in allocations: # Create a new allocation @@ -710,7 +734,7 @@ class Build(MPTTModel): build=self, stock_item=item['stock_item'], quantity=item['quantity'], - install_into=output, + install_into=None ) build_item.save() @@ -779,7 +803,7 @@ class Build(MPTTModel): if output: quantity *= output.quantity else: - quantity *= self.remaining + quantity *= self.quantity return quantity @@ -1020,10 +1044,12 @@ class BuildItem(models.Model): errors = {} - if not self.install_into: - raise ValidationError(_('Build item must specify a build output')) - try: + + # If the 'part' is trackable, then the 'install_into' field must be set! + if self.stock_item.part and self.stock_item.part.trackable and not self.install_into: + raise ValidationError(_('Build item must specify a build output, as master part is marked as trackable')) + # Allocated part must be in the BOM for the master part if self.stock_item.part not in self.build.part.getRequiredParts(recursive=False): errors['stock_item'] = [_("Selected stock item not found in BOM for part '{p}'").format(p=self.build.part.full_name)] diff --git a/InvenTree/build/templates/build/allocate.html b/InvenTree/build/templates/build/allocate.html index 1b66f17d0d..fb4a8200e7 100644 --- a/InvenTree/build/templates/build/allocate.html +++ b/InvenTree/build/templates/build/allocate.html @@ -38,6 +38,41 @@
    + +
    + +
    +
    +
    +
    +
    +
    + +
    + {% if build.incomplete_outputs %}
    {% for item in build.incomplete_outputs %} @@ -66,6 +101,9 @@ part: {{ build.part.pk }}, }; + // Load allocation table for un-tracked parts + loadBuildOutputAllocationTable(buildInfo, null); + {% for item in build.incomplete_outputs %} // Get the build output as a javascript object inventreeGet('{% url 'api-stock-detail' item.pk %}', {}, diff --git a/InvenTree/build/templates/build/navbar.html b/InvenTree/build/templates/build/navbar.html index 5e27010861..383f3c843f 100644 --- a/InvenTree/build/templates/build/navbar.html +++ b/InvenTree/build/templates/build/navbar.html @@ -27,7 +27,7 @@
  • - {% trans "In Progress" %} + {% trans "Allocate Stock" %}
  • {% endif %} diff --git a/InvenTree/build/views.py b/InvenTree/build/views.py index 15ced77130..c467d374ba 100644 --- a/InvenTree/build/views.py +++ b/InvenTree/build/views.py @@ -18,7 +18,7 @@ from stock.models import StockLocation, StockItem from InvenTree.views import AjaxUpdateView, AjaxCreateView, AjaxDeleteView from InvenTree.views import InvenTreeRoleMixin -from InvenTree.helpers import str2bool, extract_serial_numbers, normalize +from InvenTree.helpers import str2bool, extract_serial_numbers, normalize, isNull from InvenTree.status_codes import BuildStatus @@ -98,16 +98,6 @@ class BuildAutoAllocate(AjaxUpdateView): initials = super().get_initial() - # Pointing to a particular build output? - output = self.get_param('output') - - if output: - try: - output = StockItem.objects.get(pk=output) - initials['output'] = output - except (ValueError, StockItem.DoesNotExist): - pass - return initials def get_context_data(self, *args, **kwargs): @@ -121,16 +111,7 @@ class BuildAutoAllocate(AjaxUpdateView): form = self.get_form() - output_id = form['output'].value() - - try: - output = StockItem.objects.get(pk=output_id) - except (ValueError, StockItem.DoesNotExist): - output = None - - if output: - context['output'] = output - context['allocations'] = build.getAutoAllocations(output) + context['allocations'] = build.getAutoAllocations() context['build'] = build @@ -140,18 +121,11 @@ class BuildAutoAllocate(AjaxUpdateView): form = super().get_form() - if form['output'].value(): - # Hide the 'output' field - form.fields['output'].widget = HiddenInput() - return form def validate(self, build, form, **kwargs): - output = form.cleaned_data.get('output', None) - - if not output: - form.add_error(None, _('Build output must be specified')) + pass def save(self, build, form, **kwargs): """ @@ -159,9 +133,7 @@ class BuildAutoAllocate(AjaxUpdateView): perform auto-allocations """ - output = form.cleaned_data.get('output', None) - - build.autoAllocate(output) + build.autoAllocate() def get_data(self): return { @@ -365,10 +337,16 @@ class BuildUnallocate(AjaxUpdateView): output_id = request.POST.get('output_id', None) - try: - output = StockItem.objects.get(pk=output_id) - except (ValueError, StockItem.DoesNotExist): - output = None + if output_id: + + # If a "null" output is provided, we are trying to unallocate "untracked" stock + if isNull(output_id): + output = None + else: + try: + output = StockItem.objects.get(pk=output_id) + except (ValueError, StockItem.DoesNotExist): + output = None part_id = request.POST.get('part_id', None) @@ -383,9 +361,19 @@ class BuildUnallocate(AjaxUpdateView): form.add_error('confirm', _('Confirm unallocation of build stock')) form.add_error(None, _('Check the confirmation box')) else: - build.unallocateStock(output=output, part=part) + valid = True + # Unallocate the entire build + if not output_id: + build.unallocateAll() + # Unallocate a single output + elif output: + build.unallocateOutput(output, part=part) + # Unallocate "untracked" parts + else: + build.unallocateUntracked(part=part) + data = { 'form_valid': valid, } diff --git a/InvenTree/templates/js/build.js b/InvenTree/templates/js/build.js index 539d1565aa..cdfd6756aa 100644 --- a/InvenTree/templates/js/build.js +++ b/InvenTree/templates/js/build.js @@ -37,7 +37,12 @@ function makeBuildOutputActionButtons(output, buildInfo) { */ var buildId = buildInfo.pk; - var outputId = output.pk; + + if (output) { + outputId = output.pk; + } else { + outputId = 'untracked'; + } var panel = `#allocation-panel-${outputId}`; @@ -50,35 +55,40 @@ function makeBuildOutputActionButtons(output, buildInfo) { var html = `
    `; - // Add a button to "auto allocate" against the build - html += makeIconButton( - 'fa-magic icon-blue', 'button-output-auto', outputId, - '{% trans "Auto-allocate stock items to this output" %}', - ); - - // Add a button to "complete" the particular build output - html += makeIconButton( - 'fa-check icon-green', 'button-output-complete', outputId, - '{% trans "Complete build output" %}', - { - //disabled: true - } - ); + // "Auto" allocation only works for untracked stock items + if (!output) { + html += makeIconButton( + 'fa-magic icon-blue', 'button-output-auto', outputId, + '{% trans "Auto-allocate stock items to this output" %}', + ); + } // Add a button to "cancel" the particular build output (unallocate) html += makeIconButton( 'fa-minus-circle icon-red', 'button-output-unallocate', outputId, '{% trans "Unallocate stock from build output" %}', - ); + ); - // Add a button to "delete" the particular build output - html += makeIconButton( - 'fa-trash-alt icon-red', 'button-output-delete', outputId, - '{% trans "Delete build output" %}', - ); - // Add a button to "destroy" the particular build output (mark as damaged, scrap) - // TODO + if (output) { + + // Add a button to "complete" the particular build output + html += makeIconButton( + 'fa-check icon-green', 'button-output-complete', outputId, + '{% trans "Complete build output" %}', + { + //disabled: true + } + ); + + // Add a button to "delete" the particular build output + html += makeIconButton( + 'fa-trash-alt icon-red', 'button-output-delete', outputId, + '{% trans "Delete build output" %}', + ); + + // TODO - Add a button to "destroy" the particular build output (mark as damaged, scrap) + } html += '
    '; @@ -90,7 +100,6 @@ function makeBuildOutputActionButtons(output, buildInfo) { launchModalForm(`/build/${buildId}/auto-allocate/`, { data: { - output: outputId, }, success: reloadTable, } @@ -115,7 +124,7 @@ function makeBuildOutputActionButtons(output, buildInfo) { { success: reloadTable, data: { - output: outputId, + output: output ? outputId : 'null', } } ); @@ -152,13 +161,21 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) { var outputId = null; - outputId = output.pk; + if (output) { + outputId = output.pk; + } else { + outputId = 'untracked'; + } var table = options.table; if (options.table == null) { table = `#allocation-table-${outputId}`; } + + // If an "output" is specified, then only "trackable" parts are allocated + // Otherwise, only "untrackable" parts are allowed + var trackable = ! !output; function reloadTable() { // Reload the entire build allocation table @@ -168,7 +185,13 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) { function requiredQuantity(row) { // Return the requied quantity for a given row - return row.quantity * output.quantity; + if (output) { + // "Tracked" parts are calculated against individual build outputs + return row.quantity * output.quantity; + } else { + // "Untracked" parts are specified against the build itself + return row.quantity * buildInfo.quantity; + } } function sumAllocations(row) { @@ -300,6 +323,7 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) { queryParams: { part: partId, sub_part_detail: true, + sub_part_trackable: trackable, }, formatNoMatches: function() { return '{% trans "No BOM items found" %}'; @@ -310,11 +334,19 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) { onLoadSuccess: function(tableData) { // Once the BOM data are loaded, request allocation data for this build output + var params = { + build: buildId, + } + + if (output) { + params.sub_part_trackable = true; + params.output = outputId; + } else { + params.sub_part_trackable = false; + } + inventreeGet('/api/build/item/', - { - build: buildId, - output: outputId, - }, + params, { success: function(data) { // Iterate through the returned data, and group by the part they point to @@ -355,8 +387,16 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) { // Calculate the total allocated quantity var allocatedQuantity = sumAllocations(tableRow); + var requiredQuantity = 0; + + if (output) { + requiredQuantity = tableRow.quantity * output.quantity; + } else { + requiredQuantity = tableRow.quantity * buildInfo.quantity; + } + // Is this line item fully allocated? - if (allocatedQuantity >= (tableRow.quantity * output.quantity)) { + if (allocatedQuantity >= requiredQuantity) { allocatedLines += 1; } From f0595cc05202b8391bc78f056e51c06278907f41 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 18 Apr 2021 21:44:57 +1000 Subject: [PATCH 100/116] Fix for display of "outstanding" allocations --- InvenTree/build/models.py | 8 ++++++++ InvenTree/build/templates/build/complete_output.html | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/InvenTree/build/models.py b/InvenTree/build/models.py index 0fc92ce045..b9167b2eb0 100644 --- a/InvenTree/build/models.py +++ b/InvenTree/build/models.py @@ -897,6 +897,14 @@ class Build(MPTTModel): for bom_item in self.bom_items: part = bom_item.sub_part + # Ignore "trackable" when output is specified + if output and not part.trackable: + continue + + # Ignore "untrackable" parts when output is not specified + if not output and part.trackable: + continue + if not self.isPartFullyAllocated(part, output): unallocated.append(part) diff --git a/InvenTree/build/templates/build/complete_output.html b/InvenTree/build/templates/build/complete_output.html index 54c3fc6763..806677c50c 100644 --- a/InvenTree/build/templates/build/complete_output.html +++ b/InvenTree/build/templates/build/complete_output.html @@ -16,7 +16,7 @@
    From 16b01ed772e3cd97bfba3509dc87dba05e845f2a Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 20 Apr 2021 13:21:23 +1000 Subject: [PATCH 101/116] significant rework of the build allocation tables / views --- InvenTree/build/models.py | 36 ++++++ InvenTree/build/templates/build/allocate.html | 112 ++++-------------- .../templates/build/allocation_card.html | 12 +- .../build/templates/build/build_output.html | 78 +++++++++++- InvenTree/build/templates/build/navbar.html | 8 +- InvenTree/build/templates/build/parts.html | 30 ----- InvenTree/build/urls.py | 1 - InvenTree/build/views.py | 4 +- InvenTree/templates/js/build.js | 39 +++--- InvenTree/templates/two_column.html | 4 + 10 files changed, 176 insertions(+), 148 deletions(-) delete mode 100644 InvenTree/build/templates/build/parts.html diff --git a/InvenTree/build/models.py b/InvenTree/build/models.py index b9167b2eb0..963401a543 100644 --- a/InvenTree/build/models.py +++ b/InvenTree/build/models.py @@ -314,6 +314,42 @@ class Build(MPTTModel): 'sub_part' ) + @property + def tracked_bom_items(self): + """ + Returns the "trackable" BOM items for this BuildOrder + """ + + items = self.bom_items + items = items.filter(sub_part__trackable=True) + + return items + + def has_tracked_bom_items(self): + """ + Returns True if this BuildOrder has trackable BomItems + """ + + return self.tracked_bom_items.count() > 0 + + @property + def untracked_bom_items(self): + """ + Returns the "non trackable" BOM items for this BuildOrder + """ + + items = self.bom_items + items = items.filter(sub_part__trackable=False) + + return items + + def has_untracked_bom_items(self): + """ + Returns True if this BuildOrder has non trackable BomItems + """ + + return self.untracked_bom_items.count() > 0 + @property def remaining(self): """ diff --git a/InvenTree/build/templates/build/allocate.html b/InvenTree/build/templates/build/allocate.html index fb4a8200e7..a1e1ff2f8e 100644 --- a/InvenTree/build/templates/build/allocate.html +++ b/InvenTree/build/templates/build/allocate.html @@ -12,83 +12,32 @@ {% endblock %} {% block heading %} -{% trans "Incomplete Build Ouputs" %} +{% trans "Allocate Stock to Build" %} {% endblock %} {% block details %} -{% if build.is_complete %} -
    - {% trans "Build order has been completed" %} -
    -{% else %} +{% if build.has_untracked_bom_items %} +{% if build.active %}
    - {% if build.active %} - - - {% endif %} -
    - -
    - -
    - -
    -
    -
    -
    -
    -
    - -
    - -{% if build.incomplete_outputs %} -
    - {% for item in build.incomplete_outputs %} - {% include "build/allocation_card.html" with item=item %} - {% endfor %} -
    -{% else %} -
    - {% trans "Create a new build output" %}
    - {% trans "No incomplete build outputs remain." %}
    - {% trans "Create a new build output using the button above" %} + +
    +{% endif %} +
    +{% else %} +
    + {% trans "This Build Order does not have any associated untracked BOM items" %}
    {% endif %} - -{% endif %} - {% endblock %} {% block js_ready %} @@ -101,22 +50,17 @@ part: {{ build.part.pk }}, }; + {% if build.has_untracked_bom_items %} // Load allocation table for un-tracked parts loadBuildOutputAllocationTable(buildInfo, null); + {% endif %} - {% for item in build.incomplete_outputs %} - // Get the build output as a javascript object - inventreeGet('{% url 'api-stock-detail' item.pk %}', {}, - { - success: function(response) { - loadBuildOutputAllocationTable(buildInfo, response); - } - } - ); - {% endfor %} + function reloadTable() { + $('#allocation-table-untracked').bootstrapTable('refresh'); + } {% if build.active %} - $("#btn-allocate").on('click', function() { + $("#btn-auto-allocate").on('click', function() { launchModalForm( "{% url 'build-auto-allocate' build.id %}", { @@ -124,20 +68,12 @@ } ); }); - + $('#btn-unallocate').on('click', function() { launchModalForm( "{% url 'build-unallocate' build.id %}", { - reload: true, - } - ); - }); - - $('#btn-create-output').click(function() { - launchModalForm('{% url "build-output-create" build.id %}', - { - reload: true, + success: reloadTable, } ); }); diff --git a/InvenTree/build/templates/build/allocation_card.html b/InvenTree/build/templates/build/allocation_card.html index 650257bb0d..3ce4a52aeb 100644 --- a/InvenTree/build/templates/build/allocation_card.html +++ b/InvenTree/build/templates/build/allocation_card.html @@ -7,23 +7,31 @@