From b3d031c473e24a7560cc7d21c7830e81774b6acf Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 21 Jan 2022 02:12:40 +0100 Subject: [PATCH 01/92] make expression simpler --- InvenTree/part/bom.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InvenTree/part/bom.py b/InvenTree/part/bom.py index 71bcf4889b..c60b9a7a77 100644 --- a/InvenTree/part/bom.py +++ b/InvenTree/part/bom.py @@ -205,7 +205,7 @@ def ExportBom(part, fmt='csv', cascade=False, max_levels=None, parameter_data=Fa supplier_parts_used.add(sp_part) - if sp_part.supplier and sp_part.supplier: + if sp_part.supplier: supplier_name = sp_part.supplier.name else: supplier_name = '' From 02058389b2b0845bdc5802129f57b3486ca8b3e1 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 21 Jan 2022 02:13:41 +0100 Subject: [PATCH 02/92] remove unneeded pass --- InvenTree/InvenTree/middleware.py | 1 - 1 file changed, 1 deletion(-) diff --git a/InvenTree/InvenTree/middleware.py b/InvenTree/InvenTree/middleware.py index 0d7a4f46f7..a9c43c71b6 100644 --- a/InvenTree/InvenTree/middleware.py +++ b/InvenTree/InvenTree/middleware.py @@ -65,7 +65,6 @@ class AuthRequiredMiddleware(object): except Token.DoesNotExist: logger.warning(f"Access denied for unknown token {token_key}") - pass # No authorization was found for the request if not authorized: From 3ab93dcdd50bb094c34cc3d6ba7fe8492ddca8a0 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 21 Jan 2022 02:17:30 +0100 Subject: [PATCH 03/92] only one exception type needed --- InvenTree/InvenTree/exchange.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InvenTree/InvenTree/exchange.py b/InvenTree/InvenTree/exchange.py index 936dd7a76e..d3ffcfb8cd 100644 --- a/InvenTree/InvenTree/exchange.py +++ b/InvenTree/InvenTree/exchange.py @@ -31,7 +31,7 @@ class InvenTreeExchange(SimpleExchangeBackend): try: super().update_rates(base=base_currency, symbols=symbols) # catch connection errors - except (HTTPError, URLError): + except URLError: print('Encountered connection error while updating') except OperationalError as e: if 'SerializationFailure' in e.__cause__.__class__.__name__: From 6bfb17f2ab2aed69107d0568a00ce898a74d7166 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 24 Jan 2022 23:38:12 +0100 Subject: [PATCH 04/92] pep fix --- InvenTree/InvenTree/exchange.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InvenTree/InvenTree/exchange.py b/InvenTree/InvenTree/exchange.py index d3ffcfb8cd..4b99953382 100644 --- a/InvenTree/InvenTree/exchange.py +++ b/InvenTree/InvenTree/exchange.py @@ -1,5 +1,5 @@ from common.settings import currency_code_default, currency_codes -from urllib.error import HTTPError, URLError +from urllib.error import URLError from djmoney.contrib.exchange.backends.base import SimpleExchangeBackend from django.db.utils import OperationalError From 681e0070924c60e45b50b81a85da723d59bcbaef Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Wed, 26 Jan 2022 22:56:00 +1100 Subject: [PATCH 05/92] Add clean() function for PurchaseOrderLineItem Also adds renderer for purchaseorder model --- InvenTree/order/models.py | 18 ++++++-- InvenTree/templates/js/translated/forms.js | 3 ++ .../js/translated/model_renderers.js | 44 ++++++++++++++++--- 3 files changed, 56 insertions(+), 9 deletions(-) diff --git a/InvenTree/order/models.py b/InvenTree/order/models.py index 684d2b76b4..5443a6ce9f 100644 --- a/InvenTree/order/models.py +++ b/InvenTree/order/models.py @@ -822,14 +822,24 @@ class PurchaseOrderLineItem(OrderLineItem): """ - @staticmethod - def get_api_url(): - return reverse('api-po-line-list') - class Meta: unique_together = ( ('order', 'part', 'quantity', 'purchase_price') ) + + + @staticmethod + def get_api_url(): + return reverse('api-po-line-list') + + def clean(self): + + if self.order.supplier and self.part: + # Supplier part *must* point to the same supplier! + if self.part.supplier != self.order.supplier: + raise ValidationError({ + 'part': _('Supplier part must match supplier') + }) def __str__(self): return "{n} x {part} from {supplier} (for {po})".format( diff --git a/InvenTree/templates/js/translated/forms.js b/InvenTree/templates/js/translated/forms.js index 50ae39df2f..2f2d1f8ae4 100644 --- a/InvenTree/templates/js/translated/forms.js +++ b/InvenTree/templates/js/translated/forms.js @@ -1734,6 +1734,9 @@ function renderModelData(name, model, data, parameters, options) { case 'partparametertemplate': renderer = renderPartParameterTemplate; break; + case 'purchaseorder': + renderer = renderPurchaseOrder; + break; case 'salesorder': renderer = renderSalesOrder; break; diff --git a/InvenTree/templates/js/translated/model_renderers.js b/InvenTree/templates/js/translated/model_renderers.js index 710f67ad67..ee4c4cb5ef 100644 --- a/InvenTree/templates/js/translated/model_renderers.js +++ b/InvenTree/templates/js/translated/model_renderers.js @@ -221,20 +221,54 @@ function renderOwner(name, data, parameters, options) { } -// Renderer for "SalesOrder" model +// Renderer for "PurchaseOrder" model // eslint-disable-next-line no-unused-vars -function renderSalesOrder(name, data, parameters, options) { - var html = `${data.reference}`; +function renderPurchaseOrder(name, data, parameters, options) { + var html = ''; + + var prefix = global_settings.PURCHASEORDER_REFERENCE_PREFIX; + + var thumbnail = null; + + html += `${prefix}${data.reference}`; + + if (data.supplier_detail) { + thumbnail = data.supplier_detail.thumbnail || data.supplier_detail.image; + + html += ' - ' + select2Thumbnail(thumbnail); + html += `${data.supplier_detail.name}`; + } if (data.description) { - html += ` - ${data.description}`; + html += ` - ${data.description}`; } html += ` {% trans "Order ID" %}: ${data.pk} - + + + `; + + return html; +} + + +// Renderer for "SalesOrder" model +// eslint-disable-next-line no-unused-vars +function renderSalesOrder(name, data, parameters, options) { + var html = `${data.reference}`; + + if (data.description) { + html += ` - ${data.description}`; + } + + html += ` + + + {% trans "Order ID" %}: ${data.pk} + `; return html; From 9a2d47cd53bcaae7dca53ffe51c5175b7245b516 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Wed, 26 Jan 2022 23:17:58 +1100 Subject: [PATCH 06/92] style fixes --- InvenTree/order/models.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/InvenTree/order/models.py b/InvenTree/order/models.py index 5443a6ce9f..7f6192dfcd 100644 --- a/InvenTree/order/models.py +++ b/InvenTree/order/models.py @@ -826,7 +826,6 @@ class PurchaseOrderLineItem(OrderLineItem): unique_together = ( ('order', 'part', 'quantity', 'purchase_price') ) - @staticmethod def get_api_url(): @@ -834,6 +833,8 @@ class PurchaseOrderLineItem(OrderLineItem): def clean(self): + super().clean() + if self.order.supplier and self.part: # Supplier part *must* point to the same supplier! if self.part.supplier != self.order.supplier: From 9153b62ea0e931f28f9bc6ce821b639d8a7617c3 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 27 Jan 2022 10:49:30 +1100 Subject: [PATCH 07/92] Handle case when aggregation returns None --- InvenTree/stock/models.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/InvenTree/stock/models.py b/InvenTree/stock/models.py index 8a68eb5940..158d0a2640 100644 --- a/InvenTree/stock/models.py +++ b/InvenTree/stock/models.py @@ -788,7 +788,12 @@ class StockItem(MPTTModel): query = self.allocations.aggregate(q=Coalesce(Sum('quantity'), Decimal(0))) - return query['q'] + total = query['q'] + + if total is None: + total = Decimal(0) + + return total def sales_order_allocation_count(self): """ @@ -797,14 +802,22 @@ class StockItem(MPTTModel): query = self.sales_order_allocations.aggregate(q=Coalesce(Sum('quantity'), Decimal(0))) - return query['q'] + total = query['q'] + + if total is None: + total = Decimal(0) + + return total def allocation_count(self): """ Return the total quantity allocated to builds or orders """ - return self.build_allocation_count() + self.sales_order_allocation_count() + bo = self.build_allocation_count() + so = self.sales_order_allocation_count() + + return bo + so def unallocated_quantity(self): """ From d0aa09337ad85ac01816468d8d1b736c3901acf1 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 27 Jan 2022 12:08:50 +1100 Subject: [PATCH 08/92] Simplify creation of serialized stock via the API - Fixes atomicity issues - Don't create-then-delete stock items --- InvenTree/stock/api.py | 127 ++++++++++++++++++------------------ InvenTree/stock/test_api.py | 61 +++++++++++++++++ 2 files changed, 125 insertions(+), 63 deletions(-) diff --git a/InvenTree/stock/api.py b/InvenTree/stock/api.py index cfd0b45d89..da43d8a5ca 100644 --- a/InvenTree/stock/api.py +++ b/InvenTree/stock/api.py @@ -465,12 +465,6 @@ class StockList(generics.ListCreateAPIView): user = request.user data = request.data - serializer = self.get_serializer(data=data) - serializer.is_valid(raise_exception=True) - - # Check if a set of serial numbers was provided - serial_numbers = data.get('serial_numbers', '') - quantity = data.get('quantity', None) if quantity is None: @@ -478,77 +472,84 @@ class StockList(generics.ListCreateAPIView): 'quantity': _('Quantity is required'), }) - notes = data.get('notes', '') + try: + part = Part.objects.get(pk=data.get('part', None)) + except (ValueError, Part.DoesNotExist): + raise ValidationError({ + 'part': _('Valid part ID must be supplied'), + }) + + # Set default location (if not provided) + if 'location' not in data: + location = part.get_default_location() + + if location: + data['location'] = location.pk + + # An expiry date was *not* specified - try to infer it! + if 'expiry_date' not in data: + + if part.default_expiry > 0: + data['expiry_date'] = datetime.now().date() + timedelta(days=part.default_expiry) + + # Attempt to extract serial numbers from submitted data + serials = None + + # Check if a set of serial numbers was provided + serial_numbers = data.get('serial_numbers', '') + + # Assign serial numbers for a trackable part + if serial_numbers and part.trackable: + + # If serial numbers are specified, check that they match! + try: + serials = extract_serial_numbers(serial_numbers, quantity, part.getLatestSerialNumberInt()) + except DjangoValidationError as e: + raise ValidationError({ + 'quantity': e.messages, + 'serial_numbers': e.messages, + }) + + if serials is not None: + """ + If the stock item is going to be serialized, set the quantity to 1 + """ + data['quantity'] = 1 + + # De-serialize the provided data + serializer = self.get_serializer(data=data) + serializer.is_valid(raise_exception=True) with transaction.atomic(): - # Create an initial stock item + # Create an initial StockItem object item = serializer.save() - # A location was *not* specified - try to infer it - if 'location' not in data: - item.location = item.part.get_default_location() + if serials: + # Assign the first serial number to the "master" item + item.serial = serials[0] - # An expiry date was *not* specified - try to infer it! - if 'expiry_date' not in data: - - if item.part.default_expiry > 0: - item.expiry_date = datetime.now().date() + timedelta(days=item.part.default_expiry) - - # fetch serial numbers - serials = None - - if serial_numbers: - # If serial numbers are specified, check that they match! - try: - serials = extract_serial_numbers(serial_numbers, quantity, item.part.getLatestSerialNumberInt()) - except DjangoValidationError as e: - raise ValidationError({ - 'quantity': e.messages, - 'serial_numbers': e.messages, - }) - - # Finally, save the item (with user information) + # Save the item (with user information) item.save(user=user) if serials: - """ - Serialize the stock, if required + for serial in serials[1:]: - - Note that the "original" stock item needs to be created first, so it can be serialized - - It is then immediately deleted - """ + # Create a duplicate stock item with the next serial number + item.pk = None + item.serial = serial - try: - item.serializeStock( - quantity, - serials, - user, - notes=notes, - location=item.location, - ) + item.save() - headers = self.get_success_headers(serializer.data) + response_data = { + 'quantity': quantity, + 'serial_numbers': serials, + } - # Delete the original item - item.delete() + else: + response_data = serializer.data - response_data = { - 'quantity': quantity, - 'serial_numbers': serials, - } - - return Response(response_data, status=status.HTTP_201_CREATED, headers=headers) - - except DjangoValidationError as e: - raise ValidationError({ - 'quantity': e.messages, - 'serial_numbers': e.messages, - }) - - # Return a response - headers = self.get_success_headers(serializer.data) - return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) + return Response(response_data, status=status.HTTP_201_CREATED, headers=self.get_success_headers(serializer.data)) def list(self, request, *args, **kwargs): """ diff --git a/InvenTree/stock/test_api.py b/InvenTree/stock/test_api.py index bd02646a81..9369a6a881 100644 --- a/InvenTree/stock/test_api.py +++ b/InvenTree/stock/test_api.py @@ -380,6 +380,67 @@ class StockItemTest(StockAPITestCase): expected_code=201 ) + def test_creation_with_serials(self): + """ + Test that serialized stock items can be created via the API, + """ + + trackable_part = part.models.Part.objects.create( + name='My part', + description='A trackable part', + trackable=True, + default_location=StockLocation.objects.get(pk=1), + ) + + self.assertEqual(trackable_part.stock_entries().count(), 0) + self.assertEqual(trackable_part.get_stock_count(), 0) + + # This should fail, incorrect serial number count + response = self.post( + self.list_url, + data={ + 'part': trackable_part.pk, + 'quantity': 10, + 'serial_numbers': '1-20', + }, + expected_code=400, + ) + + response = self.post( + self.list_url, + data={ + 'part': trackable_part.pk, + 'quantity': 10, + 'serial_numbers': '1-10', + }, + expected_code=201, + ) + + data = response.data + + self.assertEqual(data['quantity'], 10) + sn = data['serial_numbers'] + + # Check that each serial number was created + for i in range(1, 11): + self.assertTrue(i in sn) + + # Check the unique stock item has been created + + item = StockItem.objects.get( + part=trackable_part, + serial=str(i), + ) + + # Item location should have been set automatically + self.assertIsNotNone(item.location) + + self.assertEqual(str(i), item.serial) + + # There now should be 10 unique stock entries for this part + self.assertEqual(trackable_part.stock_entries().count(), 10) + self.assertEqual(trackable_part.get_stock_count(), 10) + def test_default_expiry(self): """ Test that the "default_expiry" functionality works via the API. From 4a45ba3a44e6c31042200a282c5ca82df1a4681d Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 27 Jan 2022 13:37:42 +1100 Subject: [PATCH 09/92] Fix data mutability issues --- InvenTree/stock/api.py | 8 +++++++- InvenTree/stock/test_api.py | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/InvenTree/stock/api.py b/InvenTree/stock/api.py index da43d8a5ca..42a9316c54 100644 --- a/InvenTree/stock/api.py +++ b/InvenTree/stock/api.py @@ -5,6 +5,7 @@ JSON API for the Stock app # -*- coding: utf-8 -*- from __future__ import unicode_literals +from collections import OrderedDict from datetime import datetime, timedelta from django.core.exceptions import ValidationError as DjangoValidationError @@ -463,6 +464,11 @@ class StockList(generics.ListCreateAPIView): """ user = request.user + + # Copy the request data, to side-step "mutability" issues + data = OrderedDict() + data.update(request.data) + data = request.data quantity = data.get('quantity', None) @@ -476,7 +482,7 @@ class StockList(generics.ListCreateAPIView): part = Part.objects.get(pk=data.get('part', None)) except (ValueError, Part.DoesNotExist): raise ValidationError({ - 'part': _('Valid part ID must be supplied'), + 'part': _('Valid part must be supplied'), }) # Set default location (if not provided) diff --git a/InvenTree/stock/test_api.py b/InvenTree/stock/test_api.py index 9369a6a881..a6e0520062 100644 --- a/InvenTree/stock/test_api.py +++ b/InvenTree/stock/test_api.py @@ -342,7 +342,7 @@ class StockItemTest(StockAPITestCase): } ) - self.assertContains(response, 'This field is required', status_code=status.HTTP_400_BAD_REQUEST) + self.assertContains(response, 'Valid part must be supplied', status_code=status.HTTP_400_BAD_REQUEST) # POST with an invalid part reference @@ -355,7 +355,7 @@ class StockItemTest(StockAPITestCase): } ) - self.assertContains(response, 'does not exist', status_code=status.HTTP_400_BAD_REQUEST) + self.assertContains(response, 'Valid part must be supplied', status_code=status.HTTP_400_BAD_REQUEST) # POST without quantity response = self.post( From 3127b1b34a374fe33877f8231202137b22ce8f80 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 27 Jan 2022 13:48:16 +1100 Subject: [PATCH 10/92] Remove incorrect line --- InvenTree/stock/api.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/InvenTree/stock/api.py b/InvenTree/stock/api.py index 42a9316c54..08924cc52d 100644 --- a/InvenTree/stock/api.py +++ b/InvenTree/stock/api.py @@ -469,8 +469,6 @@ class StockList(generics.ListCreateAPIView): data = OrderedDict() data.update(request.data) - data = request.data - quantity = data.get('quantity', None) if quantity is None: From b027f126e8735c060c127d4dc164c9882b3a3684 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 27 Jan 2022 13:59:13 +1100 Subject: [PATCH 11/92] Expand available stock information when exporting Bill of Materials --- InvenTree/part/bom.py | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/InvenTree/part/bom.py b/InvenTree/part/bom.py index c60b9a7a77..4010d542bb 100644 --- a/InvenTree/part/bom.py +++ b/InvenTree/part/bom.py @@ -123,16 +123,22 @@ def ExportBom(part, fmt='csv', cascade=False, max_levels=None, parameter_data=Fa stock_headers = [ _('Default Location'), + _('Total Stock'), _('Available Stock'), + _('On Order'), ] stock_cols = {} for b_idx, bom_item in enumerate(bom_items): + stock_data = [] + + sub_part = bom_item.sub_part + # Get part default location try: - loc = bom_item.sub_part.get_default_location() + loc = sub_part.get_default_location() if loc is not None: stock_data.append(str(loc.name)) @@ -141,8 +147,20 @@ def ExportBom(part, fmt='csv', cascade=False, max_levels=None, parameter_data=Fa except AttributeError: stock_data.append('') - # Get part current stock - stock_data.append(str(normalize(bom_item.sub_part.available_stock))) + # Total "in stock" quantity for this part + stock_data.append( + str(normalize(sub_part.total_stock)) + ) + + # Total "available stock" quantity for this part + stock_data.append( + str(normalize(sub_part.available_stock)) + ) + + # Total "on order" quantity for this part + stock_data.append( + str(normalize(sub_part.on_order)) + ) for s_idx, header in enumerate(stock_headers): try: From 11125e9f608794984841ca1aefe9da73b49d955a Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 27 Jan 2022 14:19:42 +1100 Subject: [PATCH 12/92] Fixes for unit tests --- InvenTree/part/test_bom_export.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/InvenTree/part/test_bom_export.py b/InvenTree/part/test_bom_export.py index f8ed5ee305..e6b2a7c255 100644 --- a/InvenTree/part/test_bom_export.py +++ b/InvenTree/part/test_bom_export.py @@ -154,7 +154,9 @@ class BomExportTest(TestCase): 'inherited', 'allow_variants', 'Default Location', + 'Total Stock', 'Available Stock', + 'On Order', ] for header in expected: From 3889baf37ab8b21cdd11997f3661d6ef5b4c33f1 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 27 Jan 2022 14:25:57 +1100 Subject: [PATCH 13/92] Adds a tab for "allocations" --- InvenTree/part/templates/part/detail.html | 12 ++++++++++++ InvenTree/part/templates/part/part_sidebar.html | 4 ++++ 2 files changed, 16 insertions(+) diff --git a/InvenTree/part/templates/part/detail.html b/InvenTree/part/templates/part/detail.html index fb92293b3b..9d13f46545 100644 --- a/InvenTree/part/templates/part/detail.html +++ b/InvenTree/part/templates/part/detail.html @@ -37,6 +37,18 @@ +
+
+
+

{% trans "Part Allocations" %}

+ {% include "spacer.html" %} +
+
+
+
+
+
+
diff --git a/InvenTree/part/templates/part/part_sidebar.html b/InvenTree/part/templates/part/part_sidebar.html index f4e59af865..a8f57aa7b0 100644 --- a/InvenTree/part/templates/part/part_sidebar.html +++ b/InvenTree/part/templates/part/part_sidebar.html @@ -27,6 +27,10 @@ {% endif %} {% trans "Pricing" as text %} {% include "sidebar_item.html" with label="pricing" text=text icon="fa-dollar-sign" %} +{% if part.salable or part.component %} +{% trans "Allocations" as text %} +{% include "sidebar_item.html" with label="allocations" text=text icon="fa-bookmark" %} +{% endif %} {% if part.purchaseable and roles.purchase_order.view %} {% trans "Suppliers" as text %} {% include "sidebar_item.html" with label="suppliers" text=text icon="fa-building" %} From c43d1840eaab7dbede0f5497c22bed9516bdb621 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 27 Jan 2022 14:55:19 +1100 Subject: [PATCH 14/92] Load table of build order allocations --- InvenTree/part/templates/part/detail.html | 22 ++++- InvenTree/templates/js/translated/stock.js | 107 ++++++++++++++++++++- 2 files changed, 126 insertions(+), 3 deletions(-) diff --git a/InvenTree/part/templates/part/detail.html b/InvenTree/part/templates/part/detail.html index 9d13f46545..9082285bdb 100644 --- a/InvenTree/part/templates/part/detail.html +++ b/InvenTree/part/templates/part/detail.html @@ -40,12 +40,17 @@
-

{% trans "Part Allocations" %}

+

{% trans "Part Stock Allocations" %}

{% include "spacer.html" %}
-
+
+
+ {% include "filter_list.html" with id="allocations" %} +
+
+
@@ -643,6 +648,19 @@ {% endif %} }); + // Load the "allocations" tab + onPanelLoad('allocations', function() { + + loadStockAllocationTable( + $("#part-allocation-table"), + { + params: { + part: {{ part.pk }}, + }, + } + ); + }); + // Load the "related parts" tab onPanelLoad("related-parts", function() { diff --git a/InvenTree/templates/js/translated/stock.js b/InvenTree/templates/js/translated/stock.js index ded4c48883..f0819908dc 100644 --- a/InvenTree/templates/js/translated/stock.js +++ b/InvenTree/templates/js/translated/stock.js @@ -47,6 +47,7 @@ exportStock, findStockItemBySerialNumber, loadInstalledInTable, + loadStockAllocationTable, loadStockLocationTable, loadStockTable, loadStockTestResultsTable, @@ -2203,6 +2204,111 @@ function loadStockTable(table, options) { } +/* + * Display a table of allocated stock, for either a part or stock item + * Allocations are displayed for: + * + * a) Sales Orders + * b) Build Orders + */ +function loadStockAllocationTable(table, options={}) { + + var params = options.params || {}; + + params.build_detail = true; + + var filterListElement = options.filterList || '#filter-list-allocations'; + + var filters = {}; + + var filterKey = options.filterKey || options.name || 'allocations'; + + var original = {}; + + for (var k in params) { + original[k] = params[k]; + filters[k] = params[k]; + } + + setupFilterList(filterKey, table, filterListElement); + + /* + * We have two separate API queries to make here: + * a) Build Order Allocations + * b) Sales Order Allocations + * + * We will let the call to inventreeTable take care of build orders, + * and then load sales orders after that. + */ + table.inventreeTable({ + url: '{% url "api-build-item-list" %}', + name: 'allocations', + original: original, + method: 'get', + queryParams: filters, + sidePagination: 'client', + showColumns: false, + onLoadSuccess: function(tableData) { + // TODO + console.log("onLoadSuccess"); + }, + columns: [ + { + field: 'order', + title: '{% trans "Order" %}', + formatter: function(value, row) { + + var html = ''; + + if (row.build) { + html = renderLink( + global_settings.BUILDORDER_REFERENCE_PREFIX + row.build_detail.reference, + `/build/${row.build}/` + ); + + html += makeIconBadge('fa-tools', '{% trans "Build Order" %}'); + } else if (row.order) { + html += renderLink( + global_settings.SALESORDER_REFERENCE_PREFIX + row.order, + `/order/so/${row.order}/` + ); + + html += makeIconBadge('fa-truck', '{% trans "Sales Order" %}'); + } else { + return '-'; + } + + return html; + } + }, + { + field: 'status', + title: '{% trans "Order Status" %}', + formatter: function(value, row) { + if (row.build) { + return buildStatusDisplay(row.build_detail.status); + } else if (row.order) { + return 'order status'; + } else { + return '-'; + } + } + }, + { + field: 'quantity', + title: '{% trans "Allocated Quantity" %}', + formatter: function(value, row) { + var text = value; + var url = `/stock/item/${row.stock_item}/`; + + return renderLink(text, url); + } + }, + ] + }); +} + + /* * Display a table of stock locations */ @@ -2252,7 +2358,6 @@ function loadStockLocationTable(table, options) { method: 'get', url: options.url || '{% url "api-location-list" %}', queryParams: filters, - sidePagination: 'server', name: 'location', original: original, showColumns: true, From 60cde7fe131bb64238c0fc2fa985a401419a1cc5 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 27 Jan 2022 15:01:26 +1100 Subject: [PATCH 15/92] Includes sales order allocation data --- InvenTree/templates/js/translated/stock.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/InvenTree/templates/js/translated/stock.js b/InvenTree/templates/js/translated/stock.js index f0819908dc..d37bb25e26 100644 --- a/InvenTree/templates/js/translated/stock.js +++ b/InvenTree/templates/js/translated/stock.js @@ -2249,8 +2249,17 @@ function loadStockAllocationTable(table, options={}) { sidePagination: 'client', showColumns: false, onLoadSuccess: function(tableData) { - // TODO - console.log("onLoadSuccess"); + + var query_params = params; + query_params.order_detail = true; + + // Load sales order allocation data + inventreeGet('{% url "api-so-allocation-list" %}', query_params, { + success: function(data) { + // Update table to include sales order data + $(table).bootstrapTable('append', data); + } + }); }, columns: [ { @@ -2288,7 +2297,7 @@ function loadStockAllocationTable(table, options={}) { if (row.build) { return buildStatusDisplay(row.build_detail.status); } else if (row.order) { - return 'order status'; + return salesOrderStatusDisplay(row.order_detail.status); } else { return '-'; } From 5ec1d5aab80a01194c5ccff95b07dbf8b076918b Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 27 Jan 2022 15:21:04 +1100 Subject: [PATCH 16/92] Display allocations for individual stock items --- InvenTree/order/api.py | 7 ++++- InvenTree/stock/templates/stock/item.html | 30 +++++++++++++++++++ .../stock/templates/stock/stock_sidebar.html | 4 +++ InvenTree/templates/js/translated/stock.js | 9 ++++-- 4 files changed, 47 insertions(+), 3 deletions(-) diff --git a/InvenTree/order/api.py b/InvenTree/order/api.py index 96b886e15c..b2e7145d52 100644 --- a/InvenTree/order/api.py +++ b/InvenTree/order/api.py @@ -846,6 +846,12 @@ class SOAllocationList(generics.ListAPIView): if order is not None: queryset = queryset.filter(line__order=order) + # Filter by "stock item" + item = params.get('item', params.get('stock_item', None)) + + if item is not None: + queryset = queryset.filter(item=item) + # Filter by "outstanding" order status outstanding = params.get('outstanding', None) @@ -865,7 +871,6 @@ class SOAllocationList(generics.ListAPIView): # Default filterable fields filter_fields = [ - 'item', ] diff --git a/InvenTree/stock/templates/stock/item.html b/InvenTree/stock/templates/stock/item.html index 9cc6d85aeb..5c3f94f72f 100644 --- a/InvenTree/stock/templates/stock/item.html +++ b/InvenTree/stock/templates/stock/item.html @@ -43,9 +43,26 @@
+
+
+

{% trans "Stock Item Allocations" %}

+ {% include "spacer.html" %} +
+
+
+
+ {% include "filter_list.html" with id="allocations" %} +
+
+
+
+ +
+

{% trans "Child Stock Items" %}

+ {% include "spacer.html" %}
{% if item.child_count > 0 %} @@ -151,6 +168,19 @@ {% block js_ready %} {{ block.super }} + // Load the "allocations" tab + onPanelLoad('allocations', function() { + + loadStockAllocationTable( + $("#stock-allocation-table"), + { + params: { + stock_item: {{ item.pk }}, + }, + } + ); + }); + $('#stock-item-install').click(function() { launchModalForm( diff --git a/InvenTree/stock/templates/stock/stock_sidebar.html b/InvenTree/stock/templates/stock/stock_sidebar.html index 8161251ad7..3032bab5bf 100644 --- a/InvenTree/stock/templates/stock/stock_sidebar.html +++ b/InvenTree/stock/templates/stock/stock_sidebar.html @@ -4,6 +4,10 @@ {% trans "Stock Tracking" as text %} {% include "sidebar_item.html" with label='history' text=text icon="fa-history" %} +{% if item.part.salable or item.part.component %} +{% trans "Allocations" as text %} +{% include "sidebar_item.html" with label="allocations" text=text icon="fa-bookmark" %} +{% endif %} {% if item.part.trackable %} {% trans "Test Data" as text %} {% include "sidebar_item.html" with label='test-data' text=text icon="fa-vial" %} diff --git a/InvenTree/templates/js/translated/stock.js b/InvenTree/templates/js/translated/stock.js index d37bb25e26..d9fee44297 100644 --- a/InvenTree/templates/js/translated/stock.js +++ b/InvenTree/templates/js/translated/stock.js @@ -2308,9 +2308,14 @@ function loadStockAllocationTable(table, options={}) { title: '{% trans "Allocated Quantity" %}', formatter: function(value, row) { var text = value; - var url = `/stock/item/${row.stock_item}/`; + var pk = row.stock_item || row.item; - return renderLink(text, url); + if (pk) { + var url = `/stock/item/${pk}/`; + return renderLink(text, url); + } else { + return value; + } } }, ] From f6ffef66e0f16b0b80609f69b422931dd336724f Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 27 Jan 2022 16:25:26 +1100 Subject: [PATCH 17/92] Fixes for new "allocation" tab - Fix broken link - Add "description" column - Add thumbnail images --- InvenTree/order/api.py | 1 + InvenTree/order/serializers.py | 6 +++ InvenTree/templates/js/translated/helpers.js | 5 ++- InvenTree/templates/js/translated/stock.js | 43 +++++++++++++++++--- 4 files changed, 48 insertions(+), 7 deletions(-) diff --git a/InvenTree/order/api.py b/InvenTree/order/api.py index b2e7145d52..b5622d7ce8 100644 --- a/InvenTree/order/api.py +++ b/InvenTree/order/api.py @@ -822,6 +822,7 @@ class SOAllocationList(generics.ListAPIView): kwargs['item_detail'] = str2bool(params.get('item_detail', False)) kwargs['order_detail'] = str2bool(params.get('order_detail', False)) kwargs['location_detail'] = str2bool(params.get('location_detail', False)) + kwargs['customer_detail'] = str2bool(params.get('customer_detail', False)) except AttributeError: pass diff --git a/InvenTree/order/serializers.py b/InvenTree/order/serializers.py index 6097a707c7..5e78b3e3a3 100644 --- a/InvenTree/order/serializers.py +++ b/InvenTree/order/serializers.py @@ -495,6 +495,7 @@ class SalesOrderAllocationSerializer(InvenTreeModelSerializer): part_detail = PartBriefSerializer(source='item.part', many=False, read_only=True) item_detail = stock.serializers.StockItemSerializer(source='item', many=False, read_only=True) location_detail = stock.serializers.LocationSerializer(source='item.location', many=False, read_only=True) + customer_detail = CompanyBriefSerializer(source='line.order.customer', many=False, read_only=True) shipment_date = serializers.DateField(source='shipment.shipment_date', read_only=True) @@ -504,6 +505,7 @@ class SalesOrderAllocationSerializer(InvenTreeModelSerializer): part_detail = kwargs.pop('part_detail', True) item_detail = kwargs.pop('item_detail', False) location_detail = kwargs.pop('location_detail', False) + customer_detail = kwargs.pop('customer_detail', False) super().__init__(*args, **kwargs) @@ -519,12 +521,16 @@ class SalesOrderAllocationSerializer(InvenTreeModelSerializer): if not location_detail: self.fields.pop('location_detail') + if not customer_detail: + self.fields.pop('customer_detail') + class Meta: model = order.models.SalesOrderAllocation fields = [ 'pk', 'line', + 'customer_detail', 'serial', 'quantity', 'location', diff --git a/InvenTree/templates/js/translated/helpers.js b/InvenTree/templates/js/translated/helpers.js index a1679a25b9..2d35513e78 100644 --- a/InvenTree/templates/js/translated/helpers.js +++ b/InvenTree/templates/js/translated/helpers.js @@ -62,15 +62,16 @@ function imageHoverIcon(url) { * @param {String} url is the image URL * @returns html tag */ -function thumbnailImage(url) { +function thumbnailImage(url, options={}) { if (!url) { url = blankImage(); } // TODO: Support insertion of custom classes + var title = options.title || ''; - var html = ``; + var html = ``; return html; diff --git a/InvenTree/templates/js/translated/stock.js b/InvenTree/templates/js/translated/stock.js index d9fee44297..9be480fd31 100644 --- a/InvenTree/templates/js/translated/stock.js +++ b/InvenTree/templates/js/translated/stock.js @@ -2251,8 +2251,12 @@ function loadStockAllocationTable(table, options={}) { onLoadSuccess: function(tableData) { var query_params = params; + + query_params.customer_detail = true; query_params.order_detail = true; + delete query_params.build_detail; + // Load sales order allocation data inventreeGet('{% url "api-so-allocation-list" %}', query_params, { success: function(data) { @@ -2270,18 +2274,34 @@ function loadStockAllocationTable(table, options={}) { var html = ''; if (row.build) { - html = renderLink( + + // Add an icon for the part being built + html += thumbnailImage(row.build_detail.part_detail.thumbnail, { + title: row.build_detail.part_detail.full_name + }); + + html += ' '; + + html += renderLink( global_settings.BUILDORDER_REFERENCE_PREFIX + row.build_detail.reference, `/build/${row.build}/` ); html += makeIconBadge('fa-tools', '{% trans "Build Order" %}'); } else if (row.order) { - html += renderLink( - global_settings.SALESORDER_REFERENCE_PREFIX + row.order, - `/order/so/${row.order}/` - ); + // Add an icon for the customer + html += thumbnailImage( + row.customer_detail.thumbnail || row.customer_detail.image, { + title: row.customer_detail.name, + }); + + html += ' '; + + html += renderLink( + global_settings.SALESORDER_REFERENCE_PREFIX + row.order_detail.reference, + `/order/sales-order/${row.order}/` + ); html += makeIconBadge('fa-truck', '{% trans "Sales Order" %}'); } else { return '-'; @@ -2290,6 +2310,19 @@ function loadStockAllocationTable(table, options={}) { return html; } }, + { + field: 'description', + title: '{% trans "Description" %}', + formatter: function(value, row) { + if (row.order_detail) { + return row.order_detail.description; + } else if (row.build_detail) { + return row.build_detail.title; + } else { + return '-'; + } + } + }, { field: 'status', title: '{% trans "Order Status" %}', From 22892565edaa94a0d8798785b9e2395bc4193e50 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 28 Jan 2022 08:28:52 +1100 Subject: [PATCH 18/92] JS linting fixes --- InvenTree/stock/api.py | 2 +- InvenTree/templates/js/translated/stock.js | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/InvenTree/stock/api.py b/InvenTree/stock/api.py index 08924cc52d..a13c7f37c3 100644 --- a/InvenTree/stock/api.py +++ b/InvenTree/stock/api.py @@ -543,7 +543,7 @@ class StockList(generics.ListCreateAPIView): item.pk = None item.serial = serial - item.save() + item.save(user=user) response_data = { 'quantity': quantity, diff --git a/InvenTree/templates/js/translated/stock.js b/InvenTree/templates/js/translated/stock.js index 9be480fd31..809cd6fa8c 100644 --- a/InvenTree/templates/js/translated/stock.js +++ b/InvenTree/templates/js/translated/stock.js @@ -2291,8 +2291,7 @@ function loadStockAllocationTable(table, options={}) { } else if (row.order) { // Add an icon for the customer - html += thumbnailImage( - row.customer_detail.thumbnail || row.customer_detail.image, { + html += thumbnailImage(row.customer_detail.thumbnail || row.customer_detail.image, { title: row.customer_detail.name, }); From 90474af76de4e4236f6d3bab7e06254050ad7a3c Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 28 Jan 2022 08:47:03 +1100 Subject: [PATCH 19/92] Fix message --- InvenTree/templates/js/translated/bom.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InvenTree/templates/js/translated/bom.js b/InvenTree/templates/js/translated/bom.js index aa44931a88..cb7727a7c0 100644 --- a/InvenTree/templates/js/translated/bom.js +++ b/InvenTree/templates/js/translated/bom.js @@ -337,7 +337,7 @@ function bomSubstitutesDialog(bom_item_id, substitutes, options={}) { html += `
- {% trans "Select and add a new variant item using the input below" %} + {% trans "Select and add a new substitute part using the input below" %}
`; From e879c97e1ecbc325ec882770c5ad975ee12f19b0 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 28 Jan 2022 13:23:44 +1100 Subject: [PATCH 20/92] Display "base" part when selecting substitutes --- InvenTree/templates/js/translated/bom.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/InvenTree/templates/js/translated/bom.js b/InvenTree/templates/js/translated/bom.js index cb7727a7c0..23b9a8cd50 100644 --- a/InvenTree/templates/js/translated/bom.js +++ b/InvenTree/templates/js/translated/bom.js @@ -319,7 +319,19 @@ function bomSubstitutesDialog(bom_item_id, substitutes, options={}) { rows += renderSubstituteRow(sub); }); + var part_thumb = thumbnailImage(options.sub_part_detail.thumbnail || options.sub_part_detail.image); + var part_name = options.sub_part_detail.full_name; + var part_desc = options.sub_part_detail.description; + var html = ` +
+ {% trans "Base Part" %}
+ ${part_thumb} ${part_name} - ${part_desc} +
+ `; + + // Add a table of individual rows + html += ` @@ -945,7 +957,9 @@ function loadBomTable(table, options={}) { subs, { table: table, + part: row.part, sub_part: row.sub_part, + sub_part_detail: row.sub_part_detail, } ); }); From 18e0a7b7e62a27c7c4c9df16bf7482ce6a592ee0 Mon Sep 17 00:00:00 2001 From: Matthias Mair <66015116+matmair@users.noreply.github.com> Date: Fri, 28 Jan 2022 20:19:38 +0100 Subject: [PATCH 21/92] fix spelling Thanks @Stephano120 Good catch! --- InvenTree/common/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InvenTree/common/models.py b/InvenTree/common/models.py index 261f6edaff..ba475e75b8 100644 --- a/InvenTree/common/models.py +++ b/InvenTree/common/models.py @@ -349,7 +349,7 @@ class BaseInvenTreeSetting(models.Model): setting.value = str(value) setting.save() - key = models.CharField(max_length=50, blank=False, unique=False, help_text=_('Settings key (must be unique - case insensitive')) + key = models.CharField(max_length=50, blank=False, unique=False, help_text=_('Settings key (must be unique - case insensitive)')) value = models.CharField(max_length=200, blank=True, unique=False, help_text=_('Settings value')) From ae667df14aabca4c9329b96e69ab1c82196308fc Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 28 Jan 2022 23:58:12 +0100 Subject: [PATCH 22/92] add migration --- .../migrations/0004_alter_pluginsetting_key.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 InvenTree/plugin/migrations/0004_alter_pluginsetting_key.py diff --git a/InvenTree/plugin/migrations/0004_alter_pluginsetting_key.py b/InvenTree/plugin/migrations/0004_alter_pluginsetting_key.py new file mode 100644 index 0000000000..193da8c340 --- /dev/null +++ b/InvenTree/plugin/migrations/0004_alter_pluginsetting_key.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.5 on 2022-01-28 22:54 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('plugin', '0003_pluginsetting'), + ] + + operations = [ + migrations.AlterField( + model_name='pluginsetting', + name='key', + field=models.CharField(help_text='Settings key (must be unique - case insensitive)', max_length=50), + ), + ] From 3462cf796baf70a1fc678827cb9d1c66868e53f7 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 30 Jan 2022 21:44:23 +1100 Subject: [PATCH 23/92] I18n merge (#2582) * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin * Fix: New translations django.po from Crowdin --- InvenTree/locale/de/LC_MESSAGES/django.po | 2572 ++++++++-------- InvenTree/locale/el/LC_MESSAGES/django.po | 2426 ++++++++------- InvenTree/locale/es/LC_MESSAGES/django.po | 2426 ++++++++------- InvenTree/locale/fr/LC_MESSAGES/django.po | 3334 +++++++++++---------- InvenTree/locale/he/LC_MESSAGES/django.po | 2614 ++++++++-------- InvenTree/locale/id/LC_MESSAGES/django.po | 2426 ++++++++------- InvenTree/locale/it/LC_MESSAGES/django.po | 2428 ++++++++------- InvenTree/locale/ja/LC_MESSAGES/django.po | 2426 ++++++++------- InvenTree/locale/ko/LC_MESSAGES/django.po | 2672 +++++++++-------- InvenTree/locale/nl/LC_MESSAGES/django.po | 2428 ++++++++------- InvenTree/locale/no/LC_MESSAGES/django.po | 2600 ++++++++-------- InvenTree/locale/pl/LC_MESSAGES/django.po | 2426 ++++++++------- InvenTree/locale/pt/LC_MESSAGES/django.po | 2426 ++++++++------- InvenTree/locale/ru/LC_MESSAGES/django.po | 2430 ++++++++------- InvenTree/locale/sv/LC_MESSAGES/django.po | 2426 ++++++++------- InvenTree/locale/th/LC_MESSAGES/django.po | 2426 ++++++++------- InvenTree/locale/tr/LC_MESSAGES/django.po | 2426 ++++++++------- InvenTree/locale/vi/LC_MESSAGES/django.po | 2426 ++++++++------- InvenTree/locale/zh/LC_MESSAGES/django.po | 2434 ++++++++------- 19 files changed, 24969 insertions(+), 22803 deletions(-) diff --git a/InvenTree/locale/de/LC_MESSAGES/django.po b/InvenTree/locale/de/LC_MESSAGES/django.po index 13c23e65e3..5561686714 100644 --- a/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/InvenTree/locale/de/LC_MESSAGES/django.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-10 03:54+0000\n" -"PO-Revision-Date: 2022-01-10 03:58\n" +"POT-Creation-Date: 2022-01-29 00:17+0000\n" +"PO-Revision-Date: 2022-01-29 01:11\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -18,15 +18,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 138\n" -#: InvenTree/api.py:64 +#: InvenTree/api.py:55 msgid "API endpoint not found" msgstr "API-Endpunkt nicht gefunden" -#: InvenTree/api.py:110 +#: InvenTree/api.py:101 msgid "No action specified" msgstr "Keine Aktion angegeben" -#: InvenTree/api.py:124 +#: InvenTree/api.py:116 msgid "No matching action found" msgstr "Keine passende Aktion gefunden" @@ -80,41 +80,41 @@ msgstr "Bestätigung der E-Mail Adresse" msgid "You must type the same email each time." msgstr "E-Mail Adressen müssen übereinstimmen." -#: InvenTree/helpers.py:437 +#: InvenTree/helpers.py:439 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "Doppelte Seriennummer: {n}" -#: InvenTree/helpers.py:444 order/models.py:279 order/models.py:420 +#: InvenTree/helpers.py:446 order/models.py:282 order/models.py:425 #: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "Keine gültige Menge" -#: InvenTree/helpers.py:447 +#: InvenTree/helpers.py:449 msgid "Empty serial number string" msgstr "Keine Seriennummer angegeben" -#: InvenTree/helpers.py:469 InvenTree/helpers.py:472 InvenTree/helpers.py:475 -#: InvenTree/helpers.py:500 +#: InvenTree/helpers.py:471 InvenTree/helpers.py:474 InvenTree/helpers.py:477 +#: InvenTree/helpers.py:502 #, python-brace-format msgid "Invalid group: {g}" msgstr "Ungültige Gruppe: {g}" -#: InvenTree/helpers.py:510 +#: InvenTree/helpers.py:512 #, python-brace-format msgid "Invalid group {group}" msgstr "Ungültige Gruppe {group}" -#: InvenTree/helpers.py:516 +#: InvenTree/helpers.py:518 #, python-brace-format msgid "Invalid/no group {group}" msgstr "Ungültige/Keine Gruppe {group}" -#: InvenTree/helpers.py:522 +#: InvenTree/helpers.py:524 msgid "No serial numbers found" msgstr "Keine Seriennummern gefunden" -#: InvenTree/helpers.py:526 +#: InvenTree/helpers.py:528 #, 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" @@ -127,7 +127,7 @@ msgstr "Fehlende Datei" msgid "Missing external link" msgstr "Fehlender externer Link" -#: InvenTree/models.py:132 stock/models.py:1967 +#: InvenTree/models.py:132 stock/models.py:1995 #: templates/js/translated/attachment.js:119 msgid "Attachment" msgstr "Anhang" @@ -137,15 +137,15 @@ msgid "Select file to attach" msgstr "Datei zum Anhängen auswählen" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:124 part/models.py:828 +#: company/models.py:564 order/models.py:127 part/models.py:830 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:540 -#: templates/js/translated/company.js:829 templates/js/translated/part.js:1317 +#: templates/js/translated/company.js:829 templates/js/translated/part.js:1324 msgid "Link" msgstr "Link" -#: InvenTree/models.py:140 build/models.py:330 part/models.py:829 -#: stock/models.py:527 +#: InvenTree/models.py:140 build/models.py:332 part/models.py:831 +#: stock/models.py:529 msgid "Link to external URL" msgstr "Link zu einer externen URL" @@ -157,10 +157,11 @@ msgstr "Kommentar" msgid "File comment" msgstr "Datei-Kommentar" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 -#: common/models.py:1214 part/models.py:2258 part/models.py:2278 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1223 +#: common/models.py:1224 common/models.py:1452 common/models.py:1453 +#: part/models.py:2265 part/models.py:2285 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2534 +#: templates/js/translated/stock.js:2692 msgid "User" msgstr "Benutzer" @@ -197,42 +198,42 @@ msgstr "Fehler beim Umbenennen" msgid "Invalid choice" msgstr "Ungültige Auswahl" -#: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 -#: label/models.py:112 part/models.py:772 part/models.py:2442 -#: plugin/models.py:40 report/models.py:181 +#: InvenTree/models.py:277 InvenTree/models.py:278 common/models.py:1438 +#: company/models.py:415 label/models.py:112 part/models.py:774 +#: part/models.py:2449 plugin/models.py:40 report/models.py:181 #: templates/InvenTree/settings/mixins/urls.html:13 -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:125 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:279 -#: templates/js/translated/company.js:641 templates/js/translated/part.js:561 -#: templates/js/translated/part.js:700 templates/js/translated/part.js:1624 -#: templates/js/translated/stock.js:2327 +#: templates/InvenTree/settings/settings.html:282 +#: templates/js/translated/company.js:641 templates/js/translated/part.js:567 +#: templates/js/translated/part.js:706 templates/js/translated/part.js:1631 +#: templates/js/translated/stock.js:2485 msgid "Name" msgstr "Name" -#: InvenTree/models.py:284 build/models.py:207 +#: InvenTree/models.py:284 build/models.py:209 #: build/templates/build/detail.html:25 company/models.py:354 #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:122 part/models.py:795 part/templates/part/category.html:74 +#: order/models.py:125 part/models.py:797 part/templates/part/category.html:74 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 #: stock/templates/stock/location.html:93 #: templates/InvenTree/settings/plugin_settings.html:33 -#: templates/js/translated/bom.js:327 templates/js/translated/bom.js:540 +#: templates/js/translated/bom.js:339 templates/js/translated/bom.js:552 #: templates/js/translated/build.js:1682 templates/js/translated/company.js:345 #: templates/js/translated/company.js:551 #: templates/js/translated/company.js:840 templates/js/translated/order.js:836 #: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 -#: templates/js/translated/part.js:620 templates/js/translated/part.js:992 -#: templates/js/translated/part.js:1077 templates/js/translated/part.js:1247 -#: templates/js/translated/part.js:1643 templates/js/translated/part.js:1712 -#: templates/js/translated/stock.js:1569 templates/js/translated/stock.js:2339 -#: templates/js/translated/stock.js:2384 +#: templates/js/translated/part.js:626 templates/js/translated/part.js:999 +#: templates/js/translated/part.js:1084 templates/js/translated/part.js:1254 +#: templates/js/translated/part.js:1650 templates/js/translated/part.js:1719 +#: templates/js/translated/stock.js:1577 templates/js/translated/stock.js:2314 +#: templates/js/translated/stock.js:2497 templates/js/translated/stock.js:2542 msgid "Description" msgstr "Beschreibung" @@ -244,7 +245,7 @@ msgstr "Beschreibung (optional)" msgid "parent" msgstr "Eltern" -#: InvenTree/serializers.py:65 part/models.py:2727 +#: InvenTree/serializers.py:65 part/models.py:2734 msgid "Must be a valid number" msgstr "Muss eine gültige Nummer sein" @@ -252,83 +253,83 @@ msgstr "Muss eine gültige Nummer sein" msgid "Filename" msgstr "Dateiname" -#: InvenTree/settings.py:663 +#: InvenTree/settings.py:661 msgid "German" msgstr "Deutsch" -#: InvenTree/settings.py:664 +#: InvenTree/settings.py:662 msgid "Greek" msgstr "Griechisch" -#: InvenTree/settings.py:665 +#: InvenTree/settings.py:663 msgid "English" msgstr "Englisch" -#: InvenTree/settings.py:666 +#: InvenTree/settings.py:664 msgid "Spanish" msgstr "Spanisch" -#: InvenTree/settings.py:667 +#: InvenTree/settings.py:665 msgid "Spanish (Mexican)" msgstr "Spanisch (Mexikanisch)" -#: InvenTree/settings.py:668 +#: InvenTree/settings.py:666 msgid "French" msgstr "Französisch" -#: InvenTree/settings.py:669 +#: InvenTree/settings.py:667 msgid "Hebrew" msgstr "Hebräisch" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:668 msgid "Italian" msgstr "Italienisch" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:669 msgid "Japanese" msgstr "Japanisch" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:670 msgid "Korean" msgstr "Koreanisch" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:671 msgid "Dutch" msgstr "Niederländisch" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:672 msgid "Norwegian" msgstr "Norwegisch" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:673 msgid "Polish" msgstr "Polnisch" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:674 msgid "Portugese" msgstr "Portugiesisch" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:675 msgid "Russian" msgstr "Russisch" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:676 msgid "Swedish" msgstr "Schwedisch" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:677 msgid "Thai" msgstr "Thailändisch" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:678 msgid "Turkish" msgstr "Türkisch" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:679 msgid "Vietnamese" msgstr "Vietnamesisch" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:680 msgid "Chinese" msgstr "Chinesisch" @@ -374,7 +375,7 @@ msgstr "Verloren" msgid "Returned" msgstr "Zurückgegeben" -#: InvenTree/status_codes.py:143 order/models.py:941 +#: InvenTree/status_codes.py:143 order/models.py:961 #: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "Versendet" @@ -455,7 +456,7 @@ msgstr "Vom übergeordneten Element geteilt" msgid "Split child item" msgstr "Unterobjekt geteilt" -#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2064 +#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2072 msgid "Merged stock items" msgstr "Lagerartikel zusammengeführt" @@ -543,56 +544,56 @@ msgstr "Passwörter stimmen nicht überein" msgid "System Information" msgstr "Systeminformationen" -#: barcodes/api.py:54 barcodes/api.py:151 +#: barcodes/api.py:54 barcodes/api.py:152 msgid "Must provide barcode_data parameter" msgstr "barcode_data Parameter angeben" -#: barcodes/api.py:127 +#: barcodes/api.py:128 msgid "No match found for barcode data" msgstr "Keine Treffer für Barcode" -#: barcodes/api.py:129 +#: barcodes/api.py:130 msgid "Match found for barcode data" msgstr "Treffer für Barcode gefunden" -#: barcodes/api.py:154 +#: barcodes/api.py:155 msgid "Must provide stockitem parameter" msgstr "Lagerartikel-Parameter muss angegeben werden" -#: barcodes/api.py:161 +#: barcodes/api.py:162 msgid "No matching stock item found" msgstr "Keine passende Lagerartikel gefunden" -#: barcodes/api.py:191 +#: barcodes/api.py:193 msgid "Barcode already matches Stock Item" msgstr "Barcode entspricht bereits einem Lagerartikel" -#: barcodes/api.py:195 +#: barcodes/api.py:197 msgid "Barcode already matches Stock Location" msgstr "Barcode entspricht bereits Lagerort" -#: barcodes/api.py:199 +#: barcodes/api.py:201 msgid "Barcode already matches Part" msgstr "Barcode entspricht bereits Teil" -#: barcodes/api.py:205 barcodes/api.py:217 +#: barcodes/api.py:207 barcodes/api.py:219 msgid "Barcode hash already matches Stock Item" msgstr "Barcode-Hash entspricht bereits einem Lagerartikel" -#: barcodes/api.py:223 +#: barcodes/api.py:225 msgid "Barcode associated with Stock Item" msgstr "Barcode Lagerartikel zugeordnet" -#: build/forms.py:36 build/models.py:1286 +#: build/forms.py:36 build/models.py:1293 #: build/templates/build/build_base.html:82 -#: build/templates/build/detail.html:35 common/models.py:1253 +#: build/templates/build/detail.html:35 common/models.py:1263 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/models.py:796 order/models.py:1207 order/serializers.py:810 +#: order/models.py:805 order/models.py:1229 order/serializers.py:816 #: order/templates/order/order_wizard/match_parts.html:30 -#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:145 -#: part/forms.py:161 part/forms.py:177 part/models.py:2629 +#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:144 +#: part/forms.py:160 part/forms.py:176 part/models.py:2636 #: part/templates/part/bom_upload/match_parts.html:31 -#: part/templates/part/detail.html:962 part/templates/part/detail.html:1048 +#: part/templates/part/detail.html:992 part/templates/part/detail.html:1078 #: part/templates/part/part_pricing.html:16 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 @@ -603,7 +604,7 @@ msgstr "Barcode Lagerartikel zugeordnet" #: stock/templates/stock/item_base.html:181 #: stock/templates/stock/item_base.html:262 #: stock/templates/stock/item_base.html:270 -#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:555 +#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:567 #: templates/js/translated/build.js:295 templates/js/translated/build.js:495 #: templates/js/translated/build.js:689 templates/js/translated/build.js:699 #: templates/js/translated/build.js:1075 templates/js/translated/build.js:1422 @@ -611,11 +612,11 @@ msgstr "Barcode Lagerartikel zugeordnet" #: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 #: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 #: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 -#: templates/js/translated/order.js:2150 templates/js/translated/part.js:900 -#: templates/js/translated/part.js:1855 templates/js/translated/part.js:1978 -#: templates/js/translated/part.js:2056 templates/js/translated/stock.js:383 -#: templates/js/translated/stock.js:580 templates/js/translated/stock.js:750 -#: templates/js/translated/stock.js:2519 templates/js/translated/stock.js:2621 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:906 +#: templates/js/translated/part.js:1862 templates/js/translated/part.js:1985 +#: templates/js/translated/part.js:2063 templates/js/translated/stock.js:391 +#: templates/js/translated/stock.js:588 templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2779 msgid "Quantity" msgstr "Anzahl" @@ -623,9 +624,9 @@ msgstr "Anzahl" msgid "Enter quantity for build output" msgstr "Menge der Endprodukte angeben" -#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 -#: stock/serializers.py:314 templates/js/translated/stock.js:230 -#: templates/js/translated/stock.js:384 +#: build/forms.py:41 order/serializers.py:820 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:238 +#: templates/js/translated/stock.js:392 msgid "Serial Numbers" msgstr "Seriennummer" @@ -649,18 +650,18 @@ msgstr "Abbruch bestätigen" msgid "Confirm build cancellation" msgstr "Bauabbruch bestätigen" -#: build/models.py:133 +#: build/models.py:135 msgid "Invalid choice for parent build" msgstr "Ungültige Wahl für übergeordneten Bauauftrag" -#: build/models.py:137 build/templates/build/build_base.html:9 +#: build/models.py:139 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:457 +#: templates/js/translated/build.js:457 templates/js/translated/stock.js:2290 msgid "Build Order" msgstr "Bauauftrag" -#: build/models.py:138 build/templates/build/build_base.html:13 +#: build/models.py:140 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:92 #: order/templates/order/so_sidebar.html:13 @@ -670,40 +671,40 @@ msgstr "Bauauftrag" msgid "Build Orders" msgstr "Bauaufträge" -#: build/models.py:198 +#: build/models.py:200 msgid "Build Order Reference" msgstr "Bauauftragsreferenz" -#: build/models.py:199 order/models.py:210 order/models.py:536 -#: order/models.py:803 part/models.py:2638 +#: build/models.py:201 order/models.py:213 order/models.py:541 +#: order/models.py:812 part/models.py:2645 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:547 templates/js/translated/build.js:1179 +#: templates/js/translated/bom.js:559 templates/js/translated/build.js:1179 #: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "Referenz" -#: build/models.py:210 +#: build/models.py:212 msgid "Brief description of the build" msgstr "Kurze Beschreibung des Baus" -#: build/models.py:219 build/templates/build/build_base.html:164 +#: build/models.py:221 build/templates/build/build_base.html:164 #: build/templates/build/detail.html:88 msgid "Parent Build" msgstr "Eltern-Bauauftrag" -#: build/models.py:220 +#: build/models.py:222 msgid "BuildOrder to which this build is allocated" msgstr "Bauauftrag, zu dem dieser Bauauftrag zugwiesen ist" -#: build/models.py:225 build/templates/build/build_base.html:77 +#: build/models.py:227 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:856 order/models.py:930 -#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 -#: part/models.py:2204 part/models.py:2220 part/models.py:2239 -#: part/models.py:2256 part/models.py:2358 part/models.py:2480 -#: part/models.py:2613 part/models.py:2920 part/serializers.py:658 +#: order/models.py:876 order/models.py:950 +#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:359 +#: part/models.py:2211 part/models.py:2227 part/models.py:2246 +#: part/models.py:2263 part/models.py:2365 part/models.py:2487 +#: part/models.py:2620 part/models.py:2927 part/serializers.py:658 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/set_category.html:13 @@ -713,205 +714,205 @@ msgstr "Bauauftrag, zu dem dieser Bauauftrag zugwiesen ist" #: templates/InvenTree/search.html:80 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 -#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:326 -#: templates/js/translated/bom.js:505 templates/js/translated/build.js:680 +#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:338 +#: templates/js/translated/bom.js:517 templates/js/translated/build.js:680 #: templates/js/translated/build.js:1048 templates/js/translated/build.js:1419 #: templates/js/translated/build.js:1687 templates/js/translated/company.js:492 #: templates/js/translated/company.js:749 templates/js/translated/order.js:84 #: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 #: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 -#: templates/js/translated/order.js:2128 templates/js/translated/part.js:977 -#: templates/js/translated/part.js:1058 templates/js/translated/part.js:1225 -#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:719 -#: templates/js/translated/stock.js:926 templates/js/translated/stock.js:1526 -#: templates/js/translated/stock.js:2609 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:984 +#: templates/js/translated/part.js:1065 templates/js/translated/part.js:1232 +#: templates/js/translated/stock.js:562 templates/js/translated/stock.js:727 +#: templates/js/translated/stock.js:934 templates/js/translated/stock.js:1534 +#: templates/js/translated/stock.js:2767 msgid "Part" msgstr "Teil" -#: build/models.py:233 +#: build/models.py:235 msgid "Select part to build" msgstr "Teil für den Bauauftrag wählen" -#: build/models.py:238 +#: build/models.py:240 msgid "Sales Order Reference" msgstr "Auftrag Referenz" -#: build/models.py:242 +#: build/models.py:244 msgid "SalesOrder to which this build is allocated" msgstr "Bestellung, die diesem Bauauftrag zugewiesen ist" -#: build/models.py:247 templates/js/translated/build.js:1407 +#: build/models.py:249 templates/js/translated/build.js:1407 #: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "Quell-Lagerort" -#: build/models.py:251 +#: build/models.py:253 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Entnahme-Lagerort für diesen Bauauftrag wählen (oder leer lassen für einen beliebigen Lagerort)" -#: build/models.py:256 +#: build/models.py:258 msgid "Destination Location" msgstr "Ziel-Lagerort" -#: build/models.py:260 +#: build/models.py:262 msgid "Select location where the completed items will be stored" msgstr "Lagerort an dem fertige Objekte gelagert werden auswählen" -#: build/models.py:264 +#: build/models.py:266 msgid "Build Quantity" msgstr "Bau-Anzahl" -#: build/models.py:267 +#: build/models.py:269 msgid "Number of stock items to build" msgstr "Anzahl der zu bauenden Lagerartikel" -#: build/models.py:271 +#: build/models.py:273 msgid "Completed items" msgstr "Fertiggestellte Teile" -#: build/models.py:273 +#: build/models.py:275 msgid "Number of stock items which have been completed" msgstr "Anzahl der fertigen Lagerartikel" -#: build/models.py:277 part/templates/part/part_base.html:234 +#: build/models.py:279 part/templates/part/part_base.html:234 msgid "Build Status" msgstr "Bauauftrags-Status" -#: build/models.py:281 +#: build/models.py:283 msgid "Build status code" msgstr "Bau-Statuscode" -#: build/models.py:285 stock/models.py:531 +#: build/models.py:287 stock/models.py:533 msgid "Batch Code" msgstr "Losnummer" -#: build/models.py:289 +#: build/models.py:291 msgid "Batch code for this build output" msgstr "Losnummer für dieses Endprodukt" -#: build/models.py:292 order/models.py:126 part/models.py:967 +#: build/models.py:294 order/models.py:129 part/models.py:969 #: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "Erstelldatum" -#: build/models.py:296 order/models.py:558 +#: build/models.py:298 order/models.py:563 msgid "Target completion date" msgstr "geplantes Fertigstellungsdatum" -#: build/models.py:297 +#: build/models.py:299 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Zieldatum für Bauauftrag-Fertigstellung." -#: build/models.py:300 order/models.py:252 +#: build/models.py:302 order/models.py:255 #: templates/js/translated/build.js:1758 msgid "Completion Date" msgstr "Fertigstellungsdatum" -#: build/models.py:306 +#: build/models.py:308 msgid "completed by" msgstr "Fertiggestellt von" -#: build/models.py:314 templates/js/translated/build.js:1729 +#: build/models.py:316 templates/js/translated/build.js:1729 msgid "Issued by" msgstr "Aufgegeben von" -#: build/models.py:315 +#: build/models.py:317 msgid "User who issued this build order" msgstr "Nutzer der diesen Bauauftrag erstellt hat" -#: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:140 +#: build/models.py:325 build/templates/build/build_base.html:185 +#: build/templates/build/detail.html:116 order/models.py:143 #: order/templates/order/order_base.html:170 -#: order/templates/order/sales_order_base.html:182 part/models.py:971 +#: order/templates/order/sales_order_base.html:182 part/models.py:973 #: report/templates/report/inventree_build_order_base.html:159 #: templates/js/translated/build.js:1741 templates/js/translated/order.js:864 msgid "Responsible" msgstr "Verantwortlicher Benutzer" -#: build/models.py:324 +#: build/models.py:326 msgid "User responsible for this build order" msgstr "Nutzer der für diesen Bauauftrag zuständig ist" -#: build/models.py:329 build/templates/build/detail.html:102 +#: build/models.py:331 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:525 +#: part/templates/part/part_base.html:354 stock/models.py:527 #: stock/templates/stock/item_base.html:373 msgid "External Link" msgstr "Externer Link" -#: build/models.py:334 build/serializers.py:201 +#: build/models.py:336 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:144 order/models.py:805 order/models.py:1051 +#: order/models.py:147 order/models.py:814 order/models.py:1071 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/models.py:956 -#: part/templates/part/detail.html:120 part/templates/part/part_sidebar.html:50 +#: order/templates/order/so_sidebar.html:17 part/models.py:958 +#: part/templates/part/detail.html:137 part/templates/part/part_sidebar.html:54 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:597 -#: stock/models.py:1867 stock/models.py:1973 stock/serializers.py:332 -#: stock/serializers.py:639 stock/serializers.py:737 stock/serializers.py:869 -#: stock/templates/stock/stock_sidebar.html:21 -#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:711 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:599 +#: stock/models.py:1895 stock/models.py:2001 stock/serializers.py:332 +#: stock/serializers.py:640 stock/serializers.py:738 stock/serializers.py:870 +#: stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:723 #: templates/js/translated/company.js:845 templates/js/translated/order.js:1149 #: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 -#: templates/js/translated/stock.js:1309 templates/js/translated/stock.js:1795 +#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1803 msgid "Notes" msgstr "Notizen" -#: build/models.py:335 +#: build/models.py:337 msgid "Extra build notes" msgstr "Extranotizen für den Bauauftrag" -#: build/models.py:710 +#: build/models.py:717 msgid "No build output specified" msgstr "kein Endprodukt angegeben" -#: build/models.py:713 +#: build/models.py:720 msgid "Build output is already completed" msgstr "Endprodukt bereits hergstellt" -#: build/models.py:716 +#: build/models.py:723 msgid "Build output does not match Build Order" msgstr "Endprodukt stimmt nicht mit dem Bauauftrag überein" -#: build/models.py:1108 +#: build/models.py:1115 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Bauauftragsposition muss ein Endprodukt festlegen, da der übergeordnete Teil verfolgbar ist" -#: build/models.py:1117 +#: build/models.py:1124 #, python-brace-format msgid "Allocated quantity ({q}) must not execed available stock quantity ({a})" msgstr "Zugewiesene Menge ({q}) darf nicht verfügbare Menge ({a}) übersteigen" -#: build/models.py:1127 +#: build/models.py:1134 msgid "Stock item is over-allocated" msgstr "BestandObjekt ist zu oft zugewiesen" -#: build/models.py:1133 order/models.py:1167 +#: build/models.py:1140 order/models.py:1189 msgid "Allocation quantity must be greater than zero" msgstr "Reserviermenge muss größer null sein" -#: build/models.py:1139 +#: build/models.py:1146 msgid "Quantity must be 1 for serialized stock" msgstr "Anzahl muss 1 für Objekte mit Seriennummer sein" -#: build/models.py:1196 +#: build/models.py:1203 msgid "Selected stock item not found in BOM" msgstr "Ausgewähltes Bestands-Objekt nicht in Stückliste für Teil '{p}' gefunden" -#: build/models.py:1256 stock/templates/stock/item_base.html:345 +#: build/models.py:1263 stock/templates/stock/item_base.html:345 #: templates/InvenTree/search.html:137 templates/js/translated/build.js:1660 #: templates/navbar.html:35 msgid "Build" msgstr "Bauauftrag" -#: build/models.py:1257 +#: build/models.py:1264 msgid "Build to allocate parts" msgstr "Bauauftrag starten um Teile zuzuweisen" -#: build/models.py:1273 build/serializers.py:388 order/serializers.py:690 -#: order/serializers.py:708 stock/serializers.py:577 stock/serializers.py:695 +#: build/models.py:1280 build/serializers.py:388 order/serializers.py:696 +#: order/serializers.py:714 stock/serializers.py:578 stock/serializers.py:696 #: stock/templates/stock/item_base.html:9 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:367 @@ -920,24 +921,24 @@ msgstr "Bauauftrag starten um Teile zuzuweisen" #: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 #: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 #: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 -#: templates/js/translated/stock.js:555 templates/js/translated/stock.js:720 -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:563 templates/js/translated/stock.js:728 +#: templates/js/translated/stock.js:2628 msgid "Stock Item" msgstr "Lagerartikel" -#: build/models.py:1274 +#: build/models.py:1281 msgid "Source stock item" msgstr "Quell-Lagerartikel" -#: build/models.py:1287 +#: build/models.py:1294 msgid "Stock quantity to allocate to build" msgstr "Anzahl an Lagerartikel dem Bauauftrag zuweisen" -#: build/models.py:1295 +#: build/models.py:1302 msgid "Install into" msgstr "Installiere in" -#: build/models.py:1296 +#: build/models.py:1303 msgid "Destination stock item" msgstr "Ziel-Lagerartikel" @@ -962,16 +963,16 @@ msgid "This build output is not fully allocated" msgstr "Dieses Endprodukt ist nicht vollständig zugewiesen" #: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 -#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:730 -#: stock/serializers.py:971 stock/templates/stock/item_base.html:313 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:731 +#: stock/serializers.py:972 stock/templates/stock/item_base.html:313 #: templates/js/translated/barcode.js:384 #: templates/js/translated/barcode.js:557 templates/js/translated/build.js:480 #: templates/js/translated/build.js:1087 templates/js/translated/order.js:508 #: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 #: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 -#: templates/js/translated/part.js:179 templates/js/translated/stock.js:556 -#: templates/js/translated/stock.js:721 templates/js/translated/stock.js:928 -#: templates/js/translated/stock.js:1676 templates/js/translated/stock.js:2411 +#: templates/js/translated/part.js:179 templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:729 templates/js/translated/stock.js:936 +#: templates/js/translated/stock.js:1684 templates/js/translated/stock.js:2569 msgid "Location" msgstr "Lagerort" @@ -980,12 +981,12 @@ msgid "Location for completed build outputs" msgstr "Lagerort für fertige Endprodukte" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:552 +#: build/templates/build/detail.html:63 order/models.py:557 #: order/serializers.py:247 stock/templates/stock/item_base.html:187 #: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1716 #: templates/js/translated/order.js:591 templates/js/translated/order.js:840 -#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1651 -#: templates/js/translated/stock.js:2488 templates/js/translated/stock.js:2637 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1659 +#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2795 msgid "Status" msgstr "Status" @@ -1021,8 +1022,8 @@ msgstr "Benötigte Teil-Anzahl wurde noch nicht fertiggestellt" msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:313 build/serializers.py:362 part/models.py:2753 -#: part/models.py:2912 +#: build/serializers.py:313 build/serializers.py:362 part/models.py:2760 +#: part/models.py:2919 msgid "BOM Item" msgstr "Stücklisten-Position" @@ -1038,16 +1039,16 @@ msgstr "Endprodukt muss auf den gleichen Bauauftrag verweisen" msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part muss auf dasselbe Teil verweisen wie der Bauauftrag" -#: build/serializers.py:394 stock/serializers.py:584 +#: build/serializers.py:394 stock/serializers.py:585 msgid "Item must be in stock" msgstr "Teil muss auf Lager sein" -#: build/serializers.py:408 order/models.py:277 order/serializers.py:240 -#: stock/models.py:365 stock/models.py:1077 stock/serializers.py:305 +#: build/serializers.py:408 order/models.py:280 order/serializers.py:240 +#: stock/models.py:367 stock/models.py:1105 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "Anzahl muss größer Null sein" -#: build/serializers.py:450 order/serializers.py:741 +#: build/serializers.py:450 order/serializers.py:747 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Verfügbare Menge ({q}) überschritten" @@ -1060,7 +1061,7 @@ msgstr "Für Zuweisung von verfolgten Teilen muss ein Endprodukt angegeben sein" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Endprodukt kann bei Zuweisung nicht-verfolgter Teile nicht angegeben werden" -#: build/serializers.py:491 order/serializers.py:984 +#: build/serializers.py:491 order/serializers.py:990 msgid "Allocation items must be provided" msgstr "Zuweisungen müssen angegeben werden" @@ -1164,13 +1165,13 @@ msgid "Completed" msgstr "Fertig" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:927 -#: order/models.py:1023 order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:947 +#: order/models.py:1043 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:307 -#: templates/js/translated/order.js:1218 +#: templates/js/translated/order.js:1218 templates/js/translated/stock.js:2304 msgid "Sales Order" msgstr "Auftrag" @@ -1224,7 +1225,7 @@ msgstr "Ausgangs-Lager" msgid "Stock can be taken from any available location." msgstr "Bestand kann jedem verfügbaren Lagerort entnommen werden." -#: build/templates/build/detail.html:50 order/models.py:878 stock/forms.py:136 +#: build/templates/build/detail.html:50 order/models.py:898 stock/forms.py:136 #: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "Ziel-Lager" @@ -1239,7 +1240,7 @@ msgstr "Zugewiesene Teile" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:331 -#: templates/js/translated/stock.js:1665 templates/js/translated/stock.js:2644 +#: templates/js/translated/stock.js:1673 templates/js/translated/stock.js:2802 #: templates/js/translated/table_filters.js:151 #: templates/js/translated/table_filters.js:238 msgid "Batch" @@ -1343,9 +1344,9 @@ msgstr "Fertiggestellte Endprodukte" #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 #: order/templates/order/sales_order_detail.html:107 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:196 -#: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 -#: stock/templates/stock/stock_sidebar.html:19 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:213 +#: part/templates/part/part_sidebar.html:52 stock/templates/stock/item.html:112 +#: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Anhänge" @@ -1360,8 +1361,8 @@ msgstr "Bauauftrags-Notizen" #: order/templates/order/purchase_order_detail.html:108 #: order/templates/order/sales_order_detail.html:127 #: order/templates/order/sales_order_detail.html:186 -#: part/templates/part/detail.html:124 stock/templates/stock/item.html:115 -#: stock/templates/stock/item.html:205 +#: part/templates/part/detail.html:141 stock/templates/stock/item.html:132 +#: stock/templates/stock/item.html:235 msgid "Edit Notes" msgstr "Anmerkungen bearbeiten" @@ -1373,7 +1374,7 @@ msgstr "Zuordnung abgeschlossen" msgid "All untracked stock items have been allocated" msgstr "Alle nicht verfolgten Lagerartikel wurden zugewiesen" -#: build/templates/build/index.html:18 part/templates/part/detail.html:303 +#: build/templates/build/index.html:18 part/templates/part/detail.html:320 msgid "New Build Order" msgstr "Neuer Bauauftrag" @@ -1453,23 +1454,23 @@ msgstr "Endprodukt gelöscht" msgid "Delete Build Order" msgstr "Bauauftrag löschen" -#: common/files.py:67 +#: common/files.py:65 msgid "Unsupported file format: {ext.upper()}" msgstr "Dateiformat nicht unterstützt: {ext.upper()}" -#: common/files.py:69 +#: common/files.py:67 msgid "Error reading file (invalid encoding)" msgstr "Fehler beim Lesen der Datei (ungültige Kodierung)" -#: common/files.py:74 +#: common/files.py:72 msgid "Error reading file (invalid format)" msgstr "Fehler beim Lesen der Datei (ungültiges Format)" -#: common/files.py:76 +#: common/files.py:74 msgid "Error reading file (incorrect dimension)" msgstr "Fehler beim Lesen der Datei (falsche Größe)" -#: common/files.py:78 +#: common/files.py:76 msgid "Error reading file (data could be corrupted)" msgstr "Fehler beim Lesen der Datei (Daten könnten beschädigt sein)" @@ -1490,740 +1491,828 @@ msgstr "{name.title()} Datei" msgid "Select {name} file to upload" msgstr "{name} Datei zum Hochladen auswählen" -#: common/models.py:344 common/models.py:998 common/models.py:1206 -msgid "Settings key (must be unique - case insensitive" -msgstr "Einstellungs-Schlüssel (muss einzigartig sein, Groß-/ Kleinschreibung wird nicht beachtet)" +#: common/models.py:352 +msgid "Settings key (must be unique - case insensitive)" +msgstr "" -#: common/models.py:346 +#: common/models.py:354 msgid "Settings value" msgstr "Einstellungs-Wert" -#: common/models.py:380 +#: common/models.py:388 msgid "Chosen value is not a valid option" msgstr "Wert ist keine gültige Option" -#: common/models.py:400 +#: common/models.py:408 msgid "Value must be a boolean value" msgstr "Wahrheitswert erforderlich" -#: common/models.py:411 +#: common/models.py:419 msgid "Value must be an integer value" msgstr "Nur Ganzzahl eingeben" -#: common/models.py:434 +#: common/models.py:442 msgid "Key string must be unique" msgstr "Schlüsseltext muss eindeutig sein" -#: common/models.py:553 +#: common/models.py:561 msgid "No group" msgstr "Keine Gruppe" -#: common/models.py:595 +#: common/models.py:603 msgid "Restart required" msgstr "Neustart erforderlich" -#: common/models.py:596 +#: common/models.py:604 msgid "A setting has been changed which requires a server restart" msgstr "Eine Einstellung wurde geändert, die einen Neustart des Servers erfordert" -#: common/models.py:603 +#: common/models.py:611 msgid "InvenTree Instance Name" msgstr "InvenTree Instanzname" -#: common/models.py:605 +#: common/models.py:613 msgid "String descriptor for the server instance" msgstr "Kurze Beschreibung der Instanz" -#: common/models.py:609 +#: common/models.py:617 msgid "Use instance name" msgstr "Name der Instanz verwenden" -#: common/models.py:610 +#: common/models.py:618 msgid "Use the instance name in the title-bar" msgstr "Den Namen der Instanz in der Titelleiste verwenden" -#: common/models.py:616 company/models.py:100 company/models.py:101 +#: common/models.py:624 company/models.py:100 company/models.py:101 msgid "Company name" msgstr "Firmenname" -#: common/models.py:617 +#: common/models.py:625 msgid "Internal company name" msgstr "interner Firmenname" -#: common/models.py:622 +#: common/models.py:630 msgid "Base URL" msgstr "Basis-URL" -#: common/models.py:623 +#: common/models.py:631 msgid "Base URL for server instance" msgstr "Basis-URL für dieses Instanz" -#: common/models.py:629 +#: common/models.py:637 msgid "Default Currency" msgstr "Standardwährung" -#: common/models.py:630 +#: common/models.py:638 msgid "Default currency" msgstr "Standardwährung" -#: common/models.py:636 +#: common/models.py:644 msgid "Download from URL" msgstr "Von URL herunterladen" -#: common/models.py:637 +#: common/models.py:645 msgid "Allow download of remote images and files from external URL" msgstr "Herunterladen von externen Bildern und Dateien von URLs erlaubt" -#: common/models.py:643 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:651 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Bacode-Feature verwenden" -#: common/models.py:644 +#: common/models.py:652 msgid "Enable barcode scanner support" msgstr "Barcode-Scanner Unterstützung" -#: common/models.py:650 +#: common/models.py:658 msgid "IPN Regex" msgstr "IPN Regex" -#: common/models.py:651 +#: common/models.py:659 msgid "Regular expression pattern for matching Part IPN" msgstr "RegEx Muster für die Zuordnung von Teil-IPN" -#: common/models.py:655 +#: common/models.py:663 msgid "Allow Duplicate IPN" msgstr "Mehrere Artikel mit gleicher IPN erlaubt" -#: common/models.py:656 +#: common/models.py:664 msgid "Allow multiple parts to share the same IPN" msgstr "Mehrere Artikel mit gleicher IPN erlaubt" -#: common/models.py:662 +#: common/models.py:670 msgid "Allow Editing IPN" msgstr "Ändern von IPN erlaubt" -#: common/models.py:663 +#: common/models.py:671 msgid "Allow changing the IPN value while editing a part" msgstr "Ändern der IPN während des Bearbeiten eines Teils erlaubt" -#: common/models.py:669 +#: common/models.py:677 msgid "Copy Part BOM Data" msgstr "Teil-Stückliste kopieren" -#: common/models.py:670 +#: common/models.py:678 msgid "Copy BOM data by default when duplicating a part" msgstr "Stückliste von Teil kopieren wenn das Teil dupliziert wird " -#: common/models.py:676 +#: common/models.py:684 msgid "Copy Part Parameter Data" msgstr "Teil-Parameter kopieren" -#: common/models.py:677 +#: common/models.py:685 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:683 +#: common/models.py:691 msgid "Copy Part Test Data" msgstr "Teil-Testdaten kopieren" -#: common/models.py:684 +#: common/models.py:692 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:690 +#: common/models.py:698 msgid "Copy Category Parameter Templates" msgstr "Kategorie-Parametervorlage kopieren" -#: common/models.py:691 +#: common/models.py:699 msgid "Copy category parameter templates when creating a part" msgstr "Kategorie-Parameter Vorlagen kopieren wenn ein Teil angelegt wird" -#: common/models.py:697 part/models.py:2482 report/models.py:187 +#: common/models.py:705 part/models.py:2489 report/models.py:187 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:422 msgid "Template" msgstr "Vorlage" -#: common/models.py:698 +#: common/models.py:706 msgid "Parts are templates by default" msgstr "Teile sind standardmäßig Vorlagen" -#: common/models.py:704 part/models.py:919 templates/js/translated/bom.js:1068 +#: common/models.py:712 part/models.py:921 templates/js/translated/bom.js:1082 #: templates/js/translated/table_filters.js:168 #: templates/js/translated/table_filters.js:434 msgid "Assembly" msgstr "Baugruppe" -#: common/models.py:705 +#: common/models.py:713 msgid "Parts can be assembled from other components by default" msgstr "Teile können standardmäßig aus anderen Teilen angefertigt werden" -#: common/models.py:711 part/models.py:925 +#: common/models.py:719 part/models.py:927 #: templates/js/translated/table_filters.js:438 msgid "Component" msgstr "Komponente" -#: common/models.py:712 +#: common/models.py:720 msgid "Parts can be used as sub-components by default" msgstr "Teile können standardmäßig in Baugruppen benutzt werden" -#: common/models.py:718 part/models.py:936 +#: common/models.py:726 part/models.py:938 msgid "Purchaseable" msgstr "Kaufbar" -#: common/models.py:719 +#: common/models.py:727 msgid "Parts are purchaseable by default" msgstr "Artikel sind grundsätzlich kaufbar" -#: common/models.py:725 part/models.py:941 +#: common/models.py:733 part/models.py:943 #: templates/js/translated/table_filters.js:446 msgid "Salable" msgstr "Verkäuflich" -#: common/models.py:726 +#: common/models.py:734 msgid "Parts are salable by default" msgstr "Artikel sind grundsätzlich verkaufbar" -#: common/models.py:732 part/models.py:931 +#: common/models.py:740 part/models.py:933 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 #: templates/js/translated/table_filters.js:450 msgid "Trackable" msgstr "Nachverfolgbar" -#: common/models.py:733 +#: common/models.py:741 msgid "Parts are trackable by default" msgstr "Artikel sind grundsätzlich verfolgbar" -#: common/models.py:739 part/models.py:951 +#: common/models.py:747 part/models.py:953 #: part/templates/part/part_base.html:147 #: templates/js/translated/table_filters.js:42 msgid "Virtual" msgstr "Virtuell" -#: common/models.py:740 +#: common/models.py:748 msgid "Parts are virtual by default" msgstr "Teile sind grundsätzlich virtuell" -#: common/models.py:746 +#: common/models.py:754 msgid "Show Import in Views" msgstr "Import in Ansichten anzeigen" -#: common/models.py:747 +#: common/models.py:755 msgid "Display the import wizard in some part views" msgstr "Importassistent in einigen Teil-Ansichten anzeigen" -#: common/models.py:753 +#: common/models.py:761 msgid "Show Price in Forms" msgstr "Preis in Formularen anzeigen" -#: common/models.py:754 +#: common/models.py:762 msgid "Display part price in some forms" msgstr "Teilpreis in einigen Formularen anzeigen" -#: common/models.py:765 +#: common/models.py:773 msgid "Show Price in BOM" msgstr "Preis in Stückliste anzeigen" -#: common/models.py:766 +#: common/models.py:774 msgid "Include pricing information in BOM tables" msgstr "Preisinformationen in Stücklisten Tabellen einbeziehen" -#: common/models.py:772 +#: common/models.py:780 msgid "Show related parts" msgstr "Verwandte Teile anzeigen" -#: common/models.py:773 +#: common/models.py:781 msgid "Display related parts for a part" msgstr "Verwandte Teile eines Teils anzeigen" -#: common/models.py:779 +#: common/models.py:787 msgid "Create initial stock" msgstr "Ausgangsbestand erstellen" -#: common/models.py:780 +#: common/models.py:788 msgid "Create initial stock on part creation" msgstr "Ausgangsbestand beim Erstellen von Teilen erstellen" -#: common/models.py:786 +#: common/models.py:794 msgid "Internal Prices" msgstr "Interne Preise" -#: common/models.py:787 +#: common/models.py:795 msgid "Enable internal prices for parts" msgstr "Interne Preise für Teile aktivieren" -#: common/models.py:793 +#: common/models.py:801 msgid "Internal Price as BOM-Price" msgstr "Interner Preis als Stückliste-Preis" -#: common/models.py:794 +#: common/models.py:802 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "Interner Preis (falls vorhanden) in Stücklisten-Preisberechnungen verwenden" -#: common/models.py:800 +#: common/models.py:808 msgid "Part Name Display Format" msgstr "Anzeigeformat für Teilenamen" -#: common/models.py:801 +#: common/models.py:809 msgid "Format to display the part name" msgstr "Format für den Namen eines Teiles" -#: common/models.py:808 +#: common/models.py:816 msgid "Enable Reports" msgstr "Berichte aktivieren" -#: common/models.py:809 +#: common/models.py:817 msgid "Enable generation of reports" msgstr "Berichterstellung aktivieren" -#: common/models.py:815 templates/stats.html:25 +#: common/models.py:823 templates/stats.html:25 msgid "Debug Mode" msgstr "Entwickler-Modus" -#: common/models.py:816 +#: common/models.py:824 msgid "Generate reports in debug mode (HTML output)" msgstr "Berichte im Entwickler-Modus generieren (als HTML)" -#: common/models.py:822 +#: common/models.py:830 msgid "Page Size" msgstr "Seitengröße" -#: common/models.py:823 +#: common/models.py:831 msgid "Default page size for PDF reports" msgstr "Standardseitenformat für PDF-Bericht" -#: common/models.py:833 +#: common/models.py:841 msgid "Test Reports" msgstr "Test-Berichte" -#: common/models.py:834 +#: common/models.py:842 msgid "Enable generation of test reports" msgstr "Erstellung von Test-Berichten aktivieren" -#: common/models.py:840 +#: common/models.py:848 msgid "Stock Expiry" msgstr "Bestands-Ablauf" -#: common/models.py:841 +#: common/models.py:849 msgid "Enable stock expiry functionality" msgstr "Ablaufen von Bestand ermöglichen" -#: common/models.py:847 +#: common/models.py:855 msgid "Sell Expired Stock" msgstr "Abgelaufenen Bestand verkaufen" -#: common/models.py:848 +#: common/models.py:856 msgid "Allow sale of expired stock" msgstr "Verkauf von abgelaufenem Bestand erlaubt" -#: common/models.py:854 +#: common/models.py:862 msgid "Stock Stale Time" msgstr "Bestands-Stehzeit" -#: common/models.py:855 +#: common/models.py:863 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:857 +#: common/models.py:865 msgid "days" msgstr "Tage" -#: common/models.py:862 +#: common/models.py:870 msgid "Build Expired Stock" msgstr "Abgelaufenen Bestand verbauen" -#: common/models.py:863 +#: common/models.py:871 msgid "Allow building with expired stock" msgstr "Verbauen von abgelaufenen Bestand erlaubt" -#: common/models.py:869 +#: common/models.py:877 msgid "Stock Ownership Control" msgstr "Bestands-Eigentümerkontrolle" -#: common/models.py:870 +#: common/models.py:878 msgid "Enable ownership control over stock locations and items" msgstr "Eigentümerkontrolle für Lagerorte und Teile aktivieren" -#: common/models.py:876 -msgid "Group by Part" -msgstr "Gruppieren nach Teil" - -#: common/models.py:877 -msgid "Group stock items by part reference in table views" -msgstr "Bestand in Tabellen anhand von Teil-Referenz gruppieren" - -#: common/models.py:883 +#: common/models.py:884 msgid "Build Order Reference Prefix" msgstr "Bauauftrag-Referenz Präfix" -#: common/models.py:884 +#: common/models.py:885 msgid "Prefix value for build order reference" msgstr "Präfix für Bauauftrag-Referenz" -#: common/models.py:889 +#: common/models.py:890 msgid "Build Order Reference Regex" msgstr "Bauauftrag-Referenz RegEx" -#: common/models.py:890 +#: common/models.py:891 msgid "Regular expression pattern for matching build order reference" msgstr "RegEx Muster für die Zuordnung von Bauauftrag-Referenzen" -#: common/models.py:894 +#: common/models.py:895 msgid "Sales Order Reference Prefix" msgstr "Auftrags-Referenz Präfix" -#: common/models.py:895 +#: common/models.py:896 msgid "Prefix value for sales order reference" msgstr "Präfix für Auftrags-Referenz" -#: common/models.py:900 +#: common/models.py:901 msgid "Purchase Order Reference Prefix" msgstr "Bestellungs-Referenz Präfix" -#: common/models.py:901 +#: common/models.py:902 msgid "Prefix value for purchase order reference" msgstr "Präfix für Bestellungs-Referenz" -#: common/models.py:907 +#: common/models.py:908 msgid "Enable password forgot" msgstr "Passwort vergessen aktivieren" -#: common/models.py:908 +#: common/models.py:909 msgid "Enable password forgot function on the login pages" msgstr "Passwort-vergessen-Funktion auf den Anmeldeseiten aktivieren" -#: common/models.py:913 +#: common/models.py:914 msgid "Enable registration" msgstr "Anmeldung erlauben" -#: common/models.py:914 +#: common/models.py:915 msgid "Enable self-registration for users on the login pages" msgstr "Selbstregistrierung für Benutzer auf den Anmeldeseiten aktivieren" -#: common/models.py:919 +#: common/models.py:920 msgid "Enable SSO" msgstr "SSO aktivieren" -#: common/models.py:920 +#: common/models.py:921 msgid "Enable SSO on the login pages" msgstr "SSO auf den Anmeldeseiten aktivieren" -#: common/models.py:925 +#: common/models.py:926 msgid "Email required" msgstr "Email-Adresse erforderlich" -#: common/models.py:926 +#: common/models.py:927 msgid "Require user to supply mail on signup" msgstr "Benutzer müssen bei der Registrierung eine E-Mail angeben" -#: common/models.py:931 +#: common/models.py:932 msgid "Auto-fill SSO users" msgstr "SSO-Benutzer automatisch ausfüllen" -#: common/models.py:932 +#: common/models.py:933 msgid "Automatically fill out user-details from SSO account-data" msgstr "Benutzer-Details automatisch aus SSO-Konto ausfüllen" -#: common/models.py:937 +#: common/models.py:938 msgid "Mail twice" msgstr "E-Mail zweimal" -#: common/models.py:938 +#: common/models.py:939 msgid "On signup ask users twice for their mail" msgstr "Bei der Registrierung den Benutzer zweimal nach der E-Mail-Adresse fragen" -#: common/models.py:943 +#: common/models.py:944 msgid "Password twice" msgstr "Passwort zweimal" -#: common/models.py:944 +#: common/models.py:945 msgid "On signup ask users twice for their password" msgstr "Bei der Registrierung den Benutzer zweimal nach dem Passwort fragen" -#: common/models.py:949 +#: common/models.py:950 msgid "Group on signup" msgstr "Gruppe bei Registrierung" -#: common/models.py:950 +#: common/models.py:951 msgid "Group to which new users are assigned on registration" msgstr "Gruppe der neue Benutzer bei der Registrierung zugewiesen werden" -#: common/models.py:955 +#: common/models.py:956 msgid "Enforce MFA" msgstr "MFA erzwingen" -#: common/models.py:956 +#: common/models.py:957 msgid "Users must use multifactor security." msgstr "Benutzer müssen Multifaktor-Authentifizierung verwenden." -#: common/models.py:961 +#: common/models.py:964 msgid "Enable URL integration" msgstr "URL-Integration aktivieren" -#: common/models.py:962 +#: common/models.py:965 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:968 +#: common/models.py:971 msgid "Enable navigation integration" msgstr "" -#: common/models.py:969 +#: common/models.py:972 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:975 +#: common/models.py:978 msgid "Enable app integration" msgstr "" -#: common/models.py:976 +#: common/models.py:979 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:982 +#: common/models.py:985 msgid "Enable schedule integration" msgstr "" -#: common/models.py:983 +#: common/models.py:986 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1029 +#: common/models.py:992 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:993 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:1008 common/models.py:1216 +msgid "Settings key (must be unique - case insensitive" +msgstr "Einstellungs-Schlüssel (muss einzigartig sein, Groß-/ Kleinschreibung wird nicht beachtet)" + +#: common/models.py:1039 msgid "Show subscribed parts" msgstr "Abonnierte Teile anzeigen" -#: common/models.py:1030 +#: common/models.py:1040 msgid "Show subscribed parts on the homepage" msgstr "Zeige abonnierte Teile auf der Startseite" -#: common/models.py:1035 +#: common/models.py:1045 msgid "Show subscribed categories" msgstr "Abonnierte Kategorien anzeigen" -#: common/models.py:1036 +#: common/models.py:1046 msgid "Show subscribed part categories on the homepage" msgstr "Zeige abonnierte Teilkategorien auf der Startseite" -#: common/models.py:1041 +#: common/models.py:1051 msgid "Show latest parts" msgstr "Neueste Teile anzeigen" -#: common/models.py:1042 +#: common/models.py:1052 msgid "Show latest parts on the homepage" msgstr "Zeige neueste Teile auf der Startseite" -#: common/models.py:1047 +#: common/models.py:1057 msgid "Recent Part Count" msgstr "Aktuelle Teile-Stände" -#: common/models.py:1048 +#: common/models.py:1058 msgid "Number of recent parts to display on index page" msgstr "Anzahl der neusten Teile auf der Startseite" -#: common/models.py:1054 +#: common/models.py:1064 msgid "Show unvalidated BOMs" msgstr "Nicht validierte Stücklisten anzeigen" -#: common/models.py:1055 +#: common/models.py:1065 msgid "Show BOMs that await validation on the homepage" msgstr "Zeige Stücklisten, die noch nicht validiert sind, auf der Startseite" -#: common/models.py:1060 +#: common/models.py:1070 msgid "Show recent stock changes" msgstr "Neueste Bestandänderungen anzeigen" -#: common/models.py:1061 +#: common/models.py:1071 msgid "Show recently changed stock items on the homepage" msgstr "Zeige zuletzt geänderte Lagerbestände auf der Startseite" -#: common/models.py:1066 +#: common/models.py:1076 msgid "Recent Stock Count" msgstr "aktueller Bestand" -#: common/models.py:1067 +#: common/models.py:1077 msgid "Number of recent stock items to display on index page" msgstr "Anzahl des geänderten Bestands auf der Startseite" -#: common/models.py:1072 +#: common/models.py:1082 msgid "Show low stock" msgstr "Niedrigen Bestand anzeigen" -#: common/models.py:1073 +#: common/models.py:1083 msgid "Show low stock items on the homepage" msgstr "Zeige geringen Bestand auf der Startseite" -#: common/models.py:1078 +#: common/models.py:1088 msgid "Show depleted stock" msgstr "Lerren Bestand anzeigen" -#: common/models.py:1079 +#: common/models.py:1089 msgid "Show depleted stock items on the homepage" msgstr "Zeige aufgebrauchte Lagerartikel auf der Startseite" -#: common/models.py:1084 +#: common/models.py:1094 msgid "Show needed stock" msgstr "Benötigten Bestand anzeigen" -#: common/models.py:1085 +#: common/models.py:1095 msgid "Show stock items needed for builds on the homepage" msgstr "Zeige Bestand für Bauaufträge auf der Startseite" -#: common/models.py:1090 +#: common/models.py:1100 msgid "Show expired stock" msgstr "Abgelaufenen Bestand anzeigen" -#: common/models.py:1091 +#: common/models.py:1101 msgid "Show expired stock items on the homepage" msgstr "Zeige abgelaufene Lagerbestände auf der Startseite" -#: common/models.py:1096 +#: common/models.py:1106 msgid "Show stale stock" msgstr "Alten Bestand anzeigen" -#: common/models.py:1097 +#: common/models.py:1107 msgid "Show stale stock items on the homepage" msgstr "Zeige überfällige Lagerartikel auf der Startseite" -#: common/models.py:1102 +#: common/models.py:1112 msgid "Show pending builds" msgstr "Ausstehende Bauaufträge anzeigen" -#: common/models.py:1103 +#: common/models.py:1113 msgid "Show pending builds on the homepage" msgstr "Zeige ausstehende Bauaufträge auf der Startseite" -#: common/models.py:1108 +#: common/models.py:1118 msgid "Show overdue builds" msgstr "Zeige überfällige Bauaufträge" -#: common/models.py:1109 +#: common/models.py:1119 msgid "Show overdue builds on the homepage" msgstr "Zeige überfällige Bauaufträge auf der Startseite" -#: common/models.py:1114 +#: common/models.py:1124 msgid "Show outstanding POs" msgstr "Ausstehende POs anzeigen" -#: common/models.py:1115 +#: common/models.py:1125 msgid "Show outstanding POs on the homepage" msgstr "Zeige ausstehende POs auf der Startseite" -#: common/models.py:1120 +#: common/models.py:1130 msgid "Show overdue POs" msgstr "Überfällige POs anzeigen" -#: common/models.py:1121 +#: common/models.py:1131 msgid "Show overdue POs on the homepage" msgstr "Zeige überfällige POs auf der Startseite" -#: common/models.py:1126 +#: common/models.py:1136 msgid "Show outstanding SOs" msgstr "Ausstehende SOs anzeigen" -#: common/models.py:1127 +#: common/models.py:1137 msgid "Show outstanding SOs on the homepage" msgstr "Zeige ausstehende SOs auf der Startseite" -#: common/models.py:1132 +#: common/models.py:1142 msgid "Show overdue SOs" msgstr "Überfällige SOs anzeigen" -#: common/models.py:1133 +#: common/models.py:1143 msgid "Show overdue SOs on the homepage" msgstr "Zeige überfällige SOs auf der Startseite" -#: common/models.py:1139 +#: common/models.py:1149 msgid "Inline label display" msgstr "Label inline anzeigen" -#: common/models.py:1140 +#: common/models.py:1150 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "PDF-Labels im Browser anzeigen, anstatt als Datei herunterzuladen" -#: common/models.py:1146 +#: common/models.py:1156 msgid "Inline report display" msgstr "Berichte inline anzeigen" -#: common/models.py:1147 +#: common/models.py:1157 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "PDF-Berichte im Browser anzeigen, anstatt als Datei herunterzuladen" -#: common/models.py:1153 +#: common/models.py:1163 msgid "Search Preview Results" msgstr "Anzahl Suchergebnisse" -#: common/models.py:1154 +#: common/models.py:1164 msgid "Number of results to show in search preview window" msgstr "Anzahl der Ergebnisse, die in der Vorschau angezeigt werden sollen" -#: common/models.py:1160 +#: common/models.py:1170 msgid "Search Show Stock" msgstr "Suche Bestand anzeigen" -#: common/models.py:1161 +#: common/models.py:1171 msgid "Display stock levels in search preview window" msgstr "Bestand in Suchvorschau anzeigen" -#: common/models.py:1167 +#: common/models.py:1177 msgid "Hide Inactive Parts" msgstr "Inaktive Teile ausblenden" -#: common/models.py:1168 +#: common/models.py:1178 msgid "Hide inactive parts in search preview window" msgstr "Inaktive Teile in der Suchvorschau ausblenden" -#: common/models.py:1174 +#: common/models.py:1184 msgid "Show Quantity in Forms" msgstr "zeige Bestand in Eingabemasken" -#: common/models.py:1175 +#: common/models.py:1185 msgid "Display available part quantity in some forms" msgstr "Zeige den verfügbaren Bestand in einigen Eingabemasken" -#: common/models.py:1181 +#: common/models.py:1191 msgid "Escape Key Closes Forms" msgstr "Esc-Taste schließt Formulare" -#: common/models.py:1182 +#: common/models.py:1192 msgid "Use the escape key to close modal forms" msgstr "Benutze die Esc-Taste, um Formulare zu schließen" -#: common/models.py:1188 +#: common/models.py:1198 msgid "Fixed Navbar" msgstr "Fixierter Navigationsleiste" -#: common/models.py:1189 +#: common/models.py:1199 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "Position der InvenTree Navigationsleiste am oberen Bildschirmrand fixieren" -#: common/models.py:1254 company/forms.py:43 +#: common/models.py:1264 company/forms.py:43 msgid "Price break quantity" msgstr "Preisstaffelungs Anzahl" -#: common/models.py:1261 company/serializers.py:264 +#: common/models.py:1271 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 -#: templates/js/translated/part.js:909 templates/js/translated/part.js:1860 +#: templates/js/translated/part.js:915 templates/js/translated/part.js:1867 msgid "Price" msgstr "Preis" -#: common/models.py:1262 +#: common/models.py:1272 msgid "Unit price at specified quantity" msgstr "Stückpreis für die angegebene Anzahl" +#: common/models.py:1429 common/models.py:1568 +msgid "Endpoint" +msgstr "Endpunkt" + +#: common/models.py:1430 +msgid "Endpoint at which this webhook is received" +msgstr "Endpunkt, an dem dieser Webhook empfangen wird" + +#: common/models.py:1439 +msgid "Name for this webhook" +msgstr "Name für diesen Webhook" + +#: common/models.py:1444 part/models.py:948 plugin/models.py:46 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:96 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:417 +msgid "Active" +msgstr "Aktiv" + +#: common/models.py:1445 +msgid "Is this webhook active" +msgstr "Ist dieser Webhook aktiv" + +#: common/models.py:1459 +msgid "Token" +msgstr "Token" + +#: common/models.py:1460 +msgid "Token for access" +msgstr "Token für Zugang" + +#: common/models.py:1467 +msgid "Secret" +msgstr "" + +#: common/models.py:1468 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:1535 +msgid "Message ID" +msgstr "" + +#: common/models.py:1536 +msgid "Unique identifier for this message" +msgstr "Eindeutige Kennung für diese Nachricht" + +#: common/models.py:1544 +msgid "Host" +msgstr "Host" + +#: common/models.py:1545 +msgid "Host from which this message was received" +msgstr "Host von dem diese Nachricht empfangen wurde" + +#: common/models.py:1552 +msgid "Header" +msgstr "Header" + +#: common/models.py:1553 +msgid "Header of this message" +msgstr "Header dieser Nachricht" + +#: common/models.py:1559 +msgid "Body" +msgstr "Body" + +#: common/models.py:1560 +msgid "Body of this message" +msgstr "Body dieser Nachricht" + +#: common/models.py:1569 +msgid "Endpoint on which this message was received" +msgstr "Endpunkt, über den diese Nachricht empfangen wurde" + +#: common/models.py:1574 +msgid "Worked on" +msgstr "" + +#: common/models.py:1575 +msgid "Was the work on this message finished?" +msgstr "" + #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 #: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 -#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 -#: part/views.py:764 +#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:213 +#: part/views.py:773 msgid "Upload File" msgstr "Datei hochgeladen" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 #: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 -#: part/views.py:765 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:214 +#: part/views.py:774 msgid "Match Fields" msgstr "Übereinstimmende Felder" @@ -2315,7 +2404,7 @@ msgstr "Anlaufstelle" msgid "Link to external company information" msgstr "Link auf externe Firmeninformation" -#: company/models.py:139 part/models.py:838 +#: company/models.py:139 part/models.py:840 msgid "Image" msgstr "Bild" @@ -2352,8 +2441,8 @@ msgstr "Währung" msgid "Default currency used for this company" msgstr "Standard-Währung für diese Firma" -#: company/models.py:320 company/models.py:535 stock/models.py:469 -#: stock/templates/stock/item_base.html:142 +#: company/models.py:320 company/models.py:535 stock/models.py:471 +#: stock/templates/stock/item_base.html:142 templates/js/translated/bom.js:328 msgid "Base Part" msgstr "Basisteil" @@ -2380,7 +2469,7 @@ msgstr "Hersteller auswählen" #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:533 #: templates/js/translated/company.js:818 templates/js/translated/order.js:1038 -#: templates/js/translated/part.js:245 templates/js/translated/part.js:889 +#: templates/js/translated/part.js:245 templates/js/translated/part.js:895 msgid "MPN" msgstr "MPN" @@ -2409,8 +2498,8 @@ msgstr "Parametername" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1960 templates/js/translated/company.js:647 -#: templates/js/translated/part.js:709 templates/js/translated/stock.js:1296 +#: stock/models.py:1988 templates/js/translated/company.js:647 +#: templates/js/translated/part.js:715 templates/js/translated/stock.js:1304 msgid "Value" msgstr "Wert" @@ -2418,10 +2507,10 @@ msgstr "Wert" msgid "Parameter value" msgstr "Parameterwert" -#: company/models.py:429 part/models.py:913 part/models.py:2450 +#: company/models.py:429 part/models.py:915 part/models.py:2457 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:284 -#: templates/js/translated/company.js:653 templates/js/translated/part.js:715 +#: templates/InvenTree/settings/settings.html:287 +#: templates/js/translated/company.js:653 templates/js/translated/part.js:721 msgid "Units" msgstr "Einheiten" @@ -2434,13 +2523,13 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "Verlinktes Herstellerteil muss dasselbe Basisteil referenzieren" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:224 +#: company/templates/company/supplier_part.html:87 order/models.py:227 #: order/templates/order/order_base.html:112 -#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 -#: part/bom.py:247 stock/templates/stock/item_base.html:397 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:237 +#: part/bom.py:265 stock/templates/stock/item_base.html:397 #: templates/js/translated/company.js:337 #: templates/js/translated/company.js:774 templates/js/translated/order.js:823 -#: templates/js/translated/part.js:215 templates/js/translated/part.js:857 +#: templates/js/translated/part.js:215 templates/js/translated/part.js:863 #: templates/js/translated/table_filters.js:393 msgid "Supplier" msgstr "Zulieferer" @@ -2450,8 +2539,8 @@ msgid "Select supplier" msgstr "Zulieferer auswählen" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 -#: templates/js/translated/part.js:226 templates/js/translated/part.js:875 +#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1025 +#: templates/js/translated/part.js:226 templates/js/translated/part.js:881 msgid "SKU" msgstr "SKU (Lagerbestandseinheit)" @@ -2472,22 +2561,22 @@ msgid "Supplier part description" msgstr "Zuliefererbeschreibung des Teils" #: company/models.py:576 company/templates/company/supplier_part.html:119 -#: part/models.py:2641 report/templates/report/inventree_po_report.html:93 +#: part/models.py:2648 report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" msgstr "Notiz" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "base cost" msgstr "Basiskosten" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "Minimum charge (e.g. stocking fee)" msgstr "Mindestpreis" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:493 stock/templates/stock/item_base.html:338 -#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1791 +#: stock/models.py:495 stock/templates/stock/item_base.html:338 +#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1799 msgid "Packaging" msgstr "Verpackungen" @@ -2495,7 +2584,7 @@ msgstr "Verpackungen" msgid "Part packaging" msgstr "Teile-Verpackungen" -#: company/models.py:584 part/models.py:1781 +#: company/models.py:584 part/models.py:1783 msgid "multiple" msgstr "Vielfache" @@ -2554,12 +2643,12 @@ msgstr "Neues Bild hochladen" msgid "Download image from URL" msgstr "Bild von URL herunterladen" -#: company/templates/company/company_base.html:83 order/models.py:547 -#: order/templates/order/sales_order_base.html:115 stock/models.py:512 -#: stock/models.py:513 stock/serializers.py:625 +#: company/templates/company/company_base.html:83 order/models.py:552 +#: order/templates/order/sales_order_base.html:115 stock/models.py:514 +#: stock/models.py:515 stock/serializers.py:626 #: stock/templates/stock/item_base.html:290 #: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 -#: templates/js/translated/stock.js:2452 +#: templates/js/translated/stock.js:2610 #: templates/js/translated/table_filters.js:397 msgid "Customer" msgstr "Kunde" @@ -2590,7 +2679,7 @@ msgstr "Neues Zuliefererteil anlegen" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:118 -#: part/templates/part/detail.html:336 +#: part/templates/part/detail.html:353 msgid "New Supplier Part" msgstr "Neues Zuliefererteil" @@ -2598,8 +2687,8 @@ msgstr "Neues Zuliefererteil" #: company/templates/company/detail.html:79 #: company/templates/company/manufacturer_part.html:127 #: company/templates/company/manufacturer_part.html:156 -#: part/templates/part/category.html:171 part/templates/part/detail.html:345 -#: part/templates/part/detail.html:374 +#: part/templates/part/category.html:171 part/templates/part/detail.html:362 +#: part/templates/part/detail.html:391 msgid "Options" msgstr "Optionen" @@ -2627,7 +2716,7 @@ msgstr "Herstellerteile" msgid "Create new manufacturer part" msgstr "Neues Herstellerteil anlegen" -#: company/templates/company/detail.html:67 part/templates/part/detail.html:364 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:381 msgid "New Manufacturer Part" msgstr "Neues Herstellerteil" @@ -2641,7 +2730,7 @@ msgstr "Zulieferer-Bestand" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:68 part/templates/part/part_sidebar.html:33 +#: part/templates/part/detail.html:85 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197 #: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 @@ -2663,7 +2752,7 @@ msgstr "Neue Bestellung" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:91 part/templates/part/part_sidebar.html:37 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:41 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217 #: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 @@ -2691,13 +2780,13 @@ msgstr "Firmenbemerkungen" #: company/templates/company/detail.html:384 #: company/templates/company/manufacturer_part.html:215 -#: part/templates/part/detail.html:418 +#: part/templates/part/detail.html:435 msgid "Delete Supplier Parts?" msgstr "Zuliefererteil entfernen?" #: company/templates/company/detail.html:385 #: company/templates/company/manufacturer_part.html:216 -#: part/templates/part/detail.html:419 +#: part/templates/part/detail.html:436 msgid "All selected supplier parts will be deleted" msgstr "Alle ausgewählten Zulieferteile werden gelöscht" @@ -2714,7 +2803,7 @@ msgstr "Hersteller" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:34 #: company/templates/company/supplier_part.html:159 -#: part/templates/part/detail.html:71 part/templates/part/part_base.html:76 +#: part/templates/part/detail.html:88 part/templates/part/part_base.html:76 msgid "Order part" msgstr "Teil bestellen" @@ -2735,34 +2824,34 @@ msgstr "Internes Teil" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 -#: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 +#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:163 #: templates/InvenTree/search.html:188 templates/navbar.html:45 msgid "Suppliers" msgstr "Zulieferer" #: company/templates/company/manufacturer_part.html:129 -#: part/templates/part/detail.html:347 +#: part/templates/part/detail.html:364 msgid "Delete supplier parts" msgstr "Zuliefererteil entfernen" #: company/templates/company/manufacturer_part.html:129 #: company/templates/company/manufacturer_part.html:158 #: company/templates/company/manufacturer_part.html:254 -#: part/templates/part/detail.html:347 part/templates/part/detail.html:376 +#: part/templates/part/detail.html:364 part/templates/part/detail.html:393 #: templates/js/translated/company.js:426 templates/js/translated/helpers.js:31 -#: users/models.py:210 +#: users/models.py:212 msgid "Delete" msgstr "Löschen" #: company/templates/company/manufacturer_part.html:143 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:17 -#: part/templates/part/detail.html:170 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:187 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Parameter" #: company/templates/company/manufacturer_part.html:147 -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:192 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part.html:65 msgid "New Parameter" @@ -2773,7 +2862,7 @@ msgid "Delete parameters" msgstr "Parameter löschen" #: company/templates/company/manufacturer_part.html:191 -#: part/templates/part/detail.html:862 +#: part/templates/part/detail.html:892 msgid "Add Parameter" msgstr "Parameter hinzufügen" @@ -2802,9 +2891,9 @@ msgid "Assigned Stock Items" msgstr "Zugewiesene Lagerartikel" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:477 +#: company/templates/company/supplier_part.html:24 stock/models.py:479 #: stock/templates/stock/item_base.html:402 -#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1748 +#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1756 msgid "Supplier Part" msgstr "Zuliefererteil" @@ -2830,7 +2919,7 @@ msgstr "Neuen Lagerartikel hinzufügen" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:167 -#: templates/js/translated/stock.js:360 +#: templates/js/translated/stock.js:368 msgid "New Stock Item" msgstr "Neuer Lagerartikel" @@ -2840,7 +2929,7 @@ msgid "Supplier Part Orders" msgstr "Zulieferer-Bestellungen" #: company/templates/company/supplier_part.html:160 -#: part/templates/part/detail.html:72 +#: part/templates/part/detail.html:89 msgid "Order Part" msgstr "Teil bestellen" @@ -2851,7 +2940,7 @@ msgstr "Preisinformationen ansehen" #: company/templates/company/supplier_part.html:184 #: company/templates/company/supplier_part.html:290 -#: part/templates/part/prices.html:271 part/views.py:1619 +#: part/templates/part/prices.html:271 part/views.py:1628 msgid "Add Price Break" msgstr "Preisstaffel hinzufügen" @@ -2859,11 +2948,11 @@ msgstr "Preisstaffel hinzufügen" msgid "No price break information found" msgstr "Keine Informationen zur Preisstaffel gefunden" -#: company/templates/company/supplier_part.html:224 part/views.py:1681 +#: company/templates/company/supplier_part.html:224 part/views.py:1690 msgid "Delete Price Break" msgstr "Preisstaffel löschen" -#: company/templates/company/supplier_part.html:238 part/views.py:1667 +#: company/templates/company/supplier_part.html:238 part/views.py:1676 msgid "Edit Price Break" msgstr "Preisstaffel bearbeiten" @@ -2881,10 +2970,10 @@ msgstr "Preisstaffel löschen" #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:150 #: templates/InvenTree/settings/sidebar.html:41 -#: templates/js/translated/bom.js:328 templates/js/translated/part.js:489 -#: templates/js/translated/part.js:624 templates/js/translated/part.js:1118 -#: templates/js/translated/part.js:1279 templates/js/translated/stock.js:927 -#: templates/js/translated/stock.js:1580 templates/navbar.html:28 +#: templates/js/translated/bom.js:340 templates/js/translated/part.js:495 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1125 +#: templates/js/translated/part.js:1286 templates/js/translated/stock.js:935 +#: templates/js/translated/stock.js:1588 templates/navbar.html:28 msgid "Stock" msgstr "Bestand" @@ -2907,8 +2996,8 @@ msgstr "Bepreisung" #: stock/templates/stock/location.html:151 #: stock/templates/stock/location.html:163 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2351 -#: templates/stats.html:93 templates/stats.html:102 users/models.py:43 +#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2509 +#: templates/stats.html:105 templates/stats.html:114 users/models.py:43 msgid "Stock Items" msgstr "Lagerartikel" @@ -2937,20 +3026,20 @@ msgstr "Firmen" msgid "New Company" msgstr "Neue Firma" -#: company/views.py:129 part/views.py:584 +#: company/views.py:129 part/views.py:593 msgid "Download Image" msgstr "Bild herunterladen" -#: company/views.py:158 part/views.py:616 +#: company/views.py:158 part/views.py:625 msgid "Image size exceeds maximum allowable size for download" msgstr "Bildgröße überschreitet maximal-erlaubte Größe für Downloads" -#: company/views.py:165 part/views.py:623 +#: company/views.py:165 part/views.py:632 #, python-brace-format msgid "Invalid response: {code}" msgstr "Ungültige Antwort {code}" -#: company/views.py:174 part/views.py:632 +#: company/views.py:174 part/views.py:641 msgid "Supplied URL is not a valid image file" msgstr "Angegebene URL ist kein gültiges Bild" @@ -3036,282 +3125,282 @@ msgstr "Bestellung als vollständig markieren" msgid "Cancel order" msgstr "Bestellung stornieren" -#: order/models.py:122 +#: order/models.py:125 msgid "Order description" msgstr "Bestellungs-Beschreibung" -#: order/models.py:124 +#: order/models.py:127 msgid "Link to external page" msgstr "Link auf externe Seite" -#: order/models.py:132 +#: order/models.py:135 msgid "Created By" msgstr "Erstellt von" -#: order/models.py:139 +#: order/models.py:142 msgid "User or group responsible for this order" msgstr "Nutzer oder Gruppe der/die für diesen Auftrag zuständig ist/sind" -#: order/models.py:144 +#: order/models.py:147 msgid "Order notes" msgstr "Bestell-Notizen" -#: order/models.py:211 order/models.py:537 +#: order/models.py:214 order/models.py:542 msgid "Order reference" msgstr "Bestell-Referenz" -#: order/models.py:216 order/models.py:552 +#: order/models.py:219 order/models.py:557 msgid "Purchase order status" msgstr "Bestellungs-Status" -#: order/models.py:225 +#: order/models.py:228 msgid "Company from which the items are being ordered" msgstr "Firma bei der die Teile bestellt werden" -#: order/models.py:228 order/templates/order/order_base.html:118 +#: order/models.py:231 order/templates/order/order_base.html:118 #: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "Zulieferer-Referenz" -#: order/models.py:228 +#: order/models.py:231 msgid "Supplier order reference code" msgstr "Zulieferer Bestellreferenz" -#: order/models.py:235 +#: order/models.py:238 msgid "received by" msgstr "Empfangen von" -#: order/models.py:240 +#: order/models.py:243 msgid "Issue Date" msgstr "Aufgabedatum" -#: order/models.py:241 +#: order/models.py:244 msgid "Date order was issued" msgstr "Datum an dem die Bestellung aufgegeben wurde" -#: order/models.py:246 +#: order/models.py:249 msgid "Target Delivery Date" msgstr "Ziel-Versanddatum" -#: order/models.py:247 +#: order/models.py:250 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Geplantes Lieferdatum für Auftrag." -#: order/models.py:253 +#: order/models.py:256 msgid "Date order was completed" msgstr "Datum an dem der Auftrag fertigstellt wurde" -#: order/models.py:282 +#: order/models.py:285 msgid "Part supplier must match PO supplier" msgstr "Teile-Zulieferer muss dem Zulieferer der Bestellung entsprechen" -#: order/models.py:411 -msgid "Quantity must be an integer" -msgstr "Anzahl muss eine Ganzzahl sein" - -#: order/models.py:415 +#: order/models.py:420 msgid "Quantity must be a positive number" msgstr "Anzahl muss eine positive Zahl sein" -#: order/models.py:548 +#: order/models.py:553 msgid "Company to which the items are being sold" msgstr "Firma an die die Teile verkauft werden" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer Reference " msgstr "Kundenreferenz" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer order reference code" msgstr "Bestellreferenz" -#: order/models.py:559 +#: order/models.py:564 msgid "Target date for order completion. Order will be overdue after this date." msgstr "Zieldatum für Auftrags-Fertigstellung." -#: order/models.py:562 order/models.py:1028 +#: order/models.py:567 order/models.py:1048 #: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "Versanddatum" -#: order/models.py:569 +#: order/models.py:574 msgid "shipped by" msgstr "Versand von" -#: order/models.py:635 +#: order/models.py:640 msgid "Order cannot be completed as no parts have been assigned" msgstr "Auftrag kann nicht abgeschlossen werden, da keine Teile zugewiesen wurden" -#: order/models.py:639 +#: order/models.py:644 msgid "Only a pending order can be marked as complete" msgstr "Nur ein ausstehender Auftrag kann als abgeschlossen markiert werden" -#: order/models.py:642 +#: order/models.py:647 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Auftrag kann nicht abgeschlossen werden, da unvollständige Sendungen vorhanden sind" -#: order/models.py:645 +#: order/models.py:650 msgid "Order cannot be completed as there are incomplete line items" msgstr "Auftrag kann nicht abgeschlossen werden, da es unvollständige Positionen gibt" -#: order/models.py:797 +#: order/models.py:806 msgid "Item quantity" msgstr "Anzahl" -#: order/models.py:803 +#: order/models.py:812 msgid "Line item reference" msgstr "Position - Referenz" -#: order/models.py:805 +#: order/models.py:814 msgid "Line item notes" msgstr "Position - Notizen" -#: order/models.py:835 order/models.py:926 order/models.py:1022 -#: templates/js/translated/order.js:1820 +#: order/models.py:842 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:855 order/models.py:946 order/models.py:1042 +#: templates/js/translated/order.js:1820 templates/js/translated/stock.js:2271 msgid "Order" msgstr "Bestellung" -#: order/models.py:836 order/templates/order/order_base.html:9 +#: order/models.py:856 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:352 -#: templates/js/translated/order.js:801 templates/js/translated/part.js:832 -#: templates/js/translated/stock.js:1725 templates/js/translated/stock.js:2433 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:838 +#: templates/js/translated/stock.js:1733 templates/js/translated/stock.js:2591 msgid "Purchase Order" msgstr "Bestellung" -#: order/models.py:857 +#: order/models.py:877 msgid "Supplier part" msgstr "Zuliefererteil" -#: order/models.py:864 order/templates/order/order_base.html:163 +#: order/models.py:884 order/templates/order/order_base.html:163 #: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 -#: templates/js/translated/part.js:904 templates/js/translated/part.js:930 +#: templates/js/translated/part.js:910 templates/js/translated/part.js:937 #: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "Empfangen" -#: order/models.py:865 +#: order/models.py:885 msgid "Number of items received" msgstr "Empfangene Objekt-Anzahl" -#: order/models.py:872 part/templates/part/prices.html:176 stock/models.py:606 +#: order/models.py:892 part/templates/part/prices.html:176 stock/models.py:608 #: stock/serializers.py:170 stock/templates/stock/item_base.html:359 -#: templates/js/translated/stock.js:1779 +#: templates/js/translated/stock.js:1787 msgid "Purchase Price" msgstr "Preis" -#: order/models.py:873 +#: order/models.py:893 msgid "Unit purchase price" msgstr "Preis pro Einheit" -#: order/models.py:881 +#: order/models.py:901 msgid "Where does the Purchaser want this item to be stored?" msgstr "Wo möchte der Käufer diesen Artikel gelagert haben?" -#: order/models.py:936 part/templates/part/part_pricing.html:112 +#: order/models.py:956 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "Verkaufspreis" -#: order/models.py:937 +#: order/models.py:957 msgid "Unit sale price" msgstr "Stückverkaufspreis" -#: order/models.py:942 +#: order/models.py:962 msgid "Shipped quantity" msgstr "Versendete Menge" -#: order/models.py:1029 +#: order/models.py:1049 msgid "Date of shipment" msgstr "Versanddatum" -#: order/models.py:1036 +#: order/models.py:1056 msgid "Checked By" msgstr "Kontrolliert von" -#: order/models.py:1037 +#: order/models.py:1057 msgid "User who checked this shipment" msgstr "Benutzer, der diese Sendung kontrolliert hat" -#: order/models.py:1045 +#: order/models.py:1065 msgid "Shipment number" msgstr "Sendungsnummer" -#: order/models.py:1052 +#: order/models.py:1072 msgid "Shipment notes" msgstr "Versandhinweise" -#: order/models.py:1059 +#: order/models.py:1079 msgid "Tracking Number" msgstr "Sendungsverfolgungsnummer" -#: order/models.py:1060 +#: order/models.py:1080 msgid "Shipment tracking information" msgstr "Informationen zur Sendungsverfolgung" -#: order/models.py:1070 +#: order/models.py:1090 msgid "Shipment has already been sent" msgstr "Sendung wurde bereits versandt" -#: order/models.py:1073 +#: order/models.py:1093 msgid "Shipment has no allocated stock items" msgstr "Sendung hat keine zugewiesene Lagerartikel" -#: order/models.py:1149 order/models.py:1151 +#: order/models.py:1171 order/models.py:1173 msgid "Stock item has not been assigned" msgstr "Lagerartikel wurde nicht zugewiesen" -#: order/models.py:1155 +#: order/models.py:1177 msgid "Cannot allocate stock item to a line with a different part" msgstr "Kann Lagerartikel keiner Zeile mit einem anderen Teil hinzufügen" -#: order/models.py:1157 +#: order/models.py:1179 msgid "Cannot allocate stock to a line without a part" msgstr "Kann Lagerartikel keiner Zeile ohne Teil hinzufügen" -#: order/models.py:1160 +#: order/models.py:1182 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Die zugeordnete Anzahl darf nicht die verfügbare Anzahl überschreiten" -#: order/models.py:1164 +#: order/models.py:1186 msgid "StockItem is over-allocated" msgstr "Zu viele Lagerartikel zugewiesen" -#: order/models.py:1170 order/serializers.py:734 +#: order/models.py:1192 order/serializers.py:740 msgid "Quantity must be 1 for serialized stock item" msgstr "Anzahl für serialisierte Lagerartikel muss 1 sein" -#: order/models.py:1173 +#: order/models.py:1195 msgid "Sales order does not match shipment" msgstr "Auftrag gehört nicht zu Sendung" -#: order/models.py:1174 +#: order/models.py:1196 msgid "Shipment does not match sales order" msgstr "Sendung gehört nicht zu Auftrag" -#: order/models.py:1182 +#: order/models.py:1204 msgid "Line" msgstr "Position" -#: order/models.py:1190 order/serializers.py:825 order/serializers.py:953 -#: templates/js/translated/model_renderers.js:251 +#: order/models.py:1212 order/serializers.py:831 order/serializers.py:959 +#: templates/js/translated/model_renderers.js:285 msgid "Shipment" msgstr "Sendung" -#: order/models.py:1191 +#: order/models.py:1213 msgid "Sales order shipment reference" msgstr "Sendungsnummer-Referenz" -#: order/models.py:1203 +#: order/models.py:1225 msgid "Item" msgstr "Position" -#: order/models.py:1204 +#: order/models.py:1226 msgid "Select stock item to allocate" msgstr "Lagerartikel für Zuordnung auswählen" -#: order/models.py:1207 +#: order/models.py:1229 msgid "Enter stock allocation quantity" msgstr "Anzahl für Bestandszuordnung eingeben" @@ -3319,7 +3408,7 @@ msgstr "Anzahl für Bestandszuordnung eingeben" msgid "Purchase price currency" msgstr "Kaufpreiswährung" -#: order/serializers.py:211 order/serializers.py:790 +#: order/serializers.py:211 order/serializers.py:796 msgid "Line Item" msgstr "Position" @@ -3355,39 +3444,39 @@ msgstr "Ziel-Lagerort muss angegeben werden" msgid "Supplied barcode values must be unique" msgstr "Barcode muss eindeutig sein" -#: order/serializers.py:581 +#: order/serializers.py:587 msgid "Sale price currency" msgstr "Verkaufspreis-Währung" -#: order/serializers.py:649 +#: order/serializers.py:655 msgid "No shipment details provided" msgstr "Keine Sendungsdetails angegeben" -#: order/serializers.py:699 order/serializers.py:802 +#: order/serializers.py:705 order/serializers.py:808 msgid "Line item is not associated with this order" msgstr "Position ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:721 +#: order/serializers.py:727 msgid "Quantity must be positive" msgstr "Anzahl muss positiv sein" -#: order/serializers.py:815 +#: order/serializers.py:821 msgid "Enter serial numbers to allocate" msgstr "Seriennummern zum Zuweisen eingeben" -#: order/serializers.py:839 order/serializers.py:964 +#: order/serializers.py:845 order/serializers.py:970 msgid "Shipment has already been shipped" msgstr "Sendung wurde bereits versandt" -#: order/serializers.py:842 order/serializers.py:967 +#: order/serializers.py:848 order/serializers.py:973 msgid "Shipment is not associated with this order" msgstr "Sendung ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:894 +#: order/serializers.py:900 msgid "No match found for the following serial numbers" msgstr "Folgende Serienummern konnten nicht gefunden werden" -#: order/serializers.py:904 +#: order/serializers.py:910 msgid "The following serial numbers are already allocated" msgstr "Folgende Seriennummern sind bereits zugewiesen" @@ -3441,6 +3530,7 @@ msgstr "Bestellungsbeschreibung" #: order/templates/order/order_base.html:94 #: order/templates/order/sales_order_base.html:89 +#: templates/js/translated/stock.js:2327 msgid "Order Status" msgstr "Bestellstatus" @@ -3538,7 +3628,7 @@ msgstr "Auswahl duplizieren" #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/build.js:300 templates/js/translated/build.js:1311 #: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 -#: templates/js/translated/stock.js:593 templates/js/translated/stock.js:761 +#: templates/js/translated/stock.js:601 templates/js/translated/stock.js:769 msgid "Remove row" msgstr "Zeile entfernen" @@ -3729,7 +3819,7 @@ msgid "Pending Shipments" msgstr "Ausstehende Sendungen" #: order/templates/order/sales_order_detail.html:48 -#: templates/js/translated/bom.js:720 templates/js/translated/build.js:1243 +#: templates/js/translated/bom.js:732 templates/js/translated/build.js:1243 msgid "Actions" msgstr "Aktionen" @@ -3814,7 +3904,7 @@ msgstr "" #: part/api.py:505 msgid "This option must be selected" -msgstr "" +msgstr "Diese Option muss ausgewählt werden" #: part/api.py:847 msgid "Must be greater than zero" @@ -3832,447 +3922,448 @@ msgstr "Standort für anfänglichen Bestand angeben" msgid "This field is required" msgstr "Dieses Feld ist erforderlich" -#: part/bom.py:125 part/models.py:81 part/models.py:847 +#: part/bom.py:125 part/models.py:83 part/models.py:849 #: part/templates/part/category.html:108 part/templates/part/part_base.html:338 msgid "Default Location" msgstr "Standard-Lagerort" -#: part/bom.py:126 part/templates/part/part_base.html:185 +#: part/bom.py:126 templates/email/low_stock_notification.html:17 +msgid "Total Stock" +msgstr "Gesamtbestand" + +#: part/bom.py:127 part/templates/part/part_base.html:185 msgid "Available Stock" msgstr "Verfügbarer Bestand" -#: part/forms.py:85 +#: part/bom.py:128 part/templates/part/part_base.html:203 +#: templates/js/translated/part.js:1301 +msgid "On Order" +msgstr "Bestellt" + +#: part/forms.py:84 msgid "Select part category" msgstr "Teil-Kategorie wählen" -#: part/forms.py:122 +#: part/forms.py:121 msgid "Add parameter template to same level categories" msgstr "Parameter-Vorlage zu Kategorien dieser Ebene hinzufügen" -#: part/forms.py:126 +#: part/forms.py:125 msgid "Add parameter template to all categories" msgstr "Parameter-Vorlage zu allen Kategorien hinzufügen" -#: part/forms.py:146 +#: part/forms.py:145 msgid "Input quantity for price calculation" msgstr "Menge für die Preisberechnung" -#: part/models.py:82 +#: part/models.py:84 msgid "Default location for parts in this category" msgstr "Standard-Lagerort für Teile dieser Kategorie" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords" msgstr "Standard Stichwörter" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords for parts in this category" msgstr "Standard-Stichworte für Teile dieser Kategorie" -#: part/models.py:95 part/models.py:2526 part/templates/part/category.html:15 +#: part/models.py:97 part/models.py:2533 part/templates/part/category.html:15 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Teil-Kategorie" -#: part/models.py:96 part/templates/part/category.html:128 -#: templates/InvenTree/search.html:95 templates/stats.html:84 +#: part/models.py:98 part/templates/part/category.html:128 +#: templates/InvenTree/search.html:95 templates/stats.html:96 #: users/models.py:40 msgid "Part Categories" msgstr "Teil-Kategorien" -#: part/models.py:358 part/templates/part/cat_link.html:3 +#: part/models.py:360 part/templates/part/cat_link.html:3 #: part/templates/part/category.html:17 part/templates/part/category.html:133 #: part/templates/part/category.html:153 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82 #: templates/InvenTree/settings/sidebar.html:37 -#: templates/js/translated/part.js:1656 templates/navbar.html:21 -#: templates/stats.html:80 templates/stats.html:89 users/models.py:41 +#: templates/js/translated/part.js:1663 templates/navbar.html:21 +#: templates/stats.html:92 templates/stats.html:101 users/models.py:41 msgid "Parts" msgstr "Teile" -#: part/models.py:450 +#: part/models.py:452 msgid "Invalid choice for parent part" msgstr "Ungültige Auswahl für übergeordnetes Teil" -#: part/models.py:500 part/models.py:512 +#: part/models.py:502 part/models.py:514 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "Teil '{p1}' wird in Stückliste für Teil '{p2}' benutzt (rekursiv)" -#: part/models.py:642 +#: part/models.py:644 msgid "Next available serial numbers are" msgstr "Nächste verfügbare Seriennummern wären" -#: part/models.py:646 +#: part/models.py:648 msgid "Next available serial number is" msgstr "Nächste verfügbare Seriennummer ist" -#: part/models.py:651 +#: part/models.py:653 msgid "Most recent serial number is" msgstr "Die neuste Seriennummer ist" -#: part/models.py:746 +#: part/models.py:748 msgid "Duplicate IPN not allowed in part settings" msgstr "Doppelte IPN in den Teil-Einstellungen nicht erlaubt" -#: part/models.py:771 +#: part/models.py:773 msgid "Part name" msgstr "Name des Teils" -#: part/models.py:778 +#: part/models.py:780 msgid "Is Template" msgstr "Ist eine Vorlage" -#: part/models.py:779 +#: part/models.py:781 msgid "Is this part a template part?" msgstr "Ist dieses Teil eine Vorlage?" -#: part/models.py:789 +#: part/models.py:791 msgid "Is this part a variant of another part?" msgstr "Ist dieses Teil eine Variante eines anderen Teils?" -#: part/models.py:790 +#: part/models.py:792 msgid "Variant Of" msgstr "Variante von" -#: part/models.py:796 +#: part/models.py:798 msgid "Part description" msgstr "Beschreibung des Teils" -#: part/models.py:801 part/templates/part/category.html:86 +#: part/models.py:803 part/templates/part/category.html:86 #: part/templates/part/part_base.html:302 msgid "Keywords" msgstr "Schlüsselwörter" -#: part/models.py:802 +#: part/models.py:804 msgid "Part keywords to improve visibility in search results" msgstr "Schlüsselworte um die Sichtbarkeit in Suchergebnissen zu verbessern" -#: part/models.py:809 part/models.py:2276 part/models.py:2525 +#: part/models.py:811 part/models.py:2283 part/models.py:2532 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:183 -#: templates/js/translated/part.js:1261 +#: templates/InvenTree/settings/settings.html:186 +#: templates/js/translated/part.js:1268 msgid "Category" msgstr "Kategorie" -#: part/models.py:810 +#: part/models.py:812 msgid "Part category" msgstr "Teile-Kategorie" -#: part/models.py:815 part/templates/part/part_base.html:274 -#: templates/js/translated/part.js:612 templates/js/translated/part.js:1214 -#: templates/js/translated/stock.js:1552 +#: part/models.py:817 part/templates/part/part_base.html:274 +#: templates/js/translated/part.js:618 templates/js/translated/part.js:1221 +#: templates/js/translated/stock.js:1560 msgid "IPN" msgstr "IPN (Interne Produktnummer)" -#: part/models.py:816 +#: part/models.py:818 msgid "Internal Part Number" msgstr "Interne Teilenummer" -#: part/models.py:822 +#: part/models.py:824 msgid "Part revision or version number" msgstr "Revisions- oder Versionsnummer" -#: part/models.py:823 part/templates/part/part_base.html:281 -#: report/models.py:200 templates/js/translated/part.js:616 +#: part/models.py:825 part/templates/part/part_base.html:281 +#: report/models.py:200 templates/js/translated/part.js:622 msgid "Revision" msgstr "Revision" -#: part/models.py:845 +#: part/models.py:847 msgid "Where is this item normally stored?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: part/models.py:892 part/templates/part/part_base.html:347 +#: part/models.py:894 part/templates/part/part_base.html:347 msgid "Default Supplier" msgstr "Standard Zulieferer" -#: part/models.py:893 +#: part/models.py:895 msgid "Default supplier part" msgstr "Standard Zuliefererteil" -#: part/models.py:900 +#: part/models.py:902 msgid "Default Expiry" msgstr "Standard Ablaufzeit" -#: part/models.py:901 +#: part/models.py:903 msgid "Expiry time (in days) for stock items of this part" msgstr "Ablauf-Zeit (in Tagen) für Bestand dieses Teils" -#: part/models.py:906 part/templates/part/part_base.html:196 +#: part/models.py:908 part/templates/part/part_base.html:196 msgid "Minimum Stock" msgstr "Minimaler Bestand" -#: part/models.py:907 +#: part/models.py:909 msgid "Minimum allowed stock level" msgstr "Minimal zulässiger Bestand" -#: part/models.py:914 +#: part/models.py:916 msgid "Stock keeping units for this part" msgstr "Stock Keeping Units (SKU) für dieses Teil" -#: part/models.py:920 +#: part/models.py:922 msgid "Can this part be built from other parts?" msgstr "Kann dieses Teil aus anderen Teilen angefertigt werden?" -#: part/models.py:926 +#: part/models.py:928 msgid "Can this part be used to build other parts?" msgstr "Kann dieses Teil zum Bauauftrag von anderen genutzt werden?" -#: part/models.py:932 +#: part/models.py:934 msgid "Does this part have tracking for unique items?" msgstr "Hat dieses Teil Tracking für einzelne Objekte?" -#: part/models.py:937 +#: part/models.py:939 msgid "Can this part be purchased from external suppliers?" msgstr "Kann dieses Teil von externen Zulieferern gekauft werden?" -#: part/models.py:942 +#: part/models.py:944 msgid "Can this part be sold to customers?" msgstr "Kann dieses Teil an Kunden verkauft werden?" -#: part/models.py:946 plugin/models.py:46 -#: templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:295 -#: templates/js/translated/table_filters.js:417 -msgid "Active" -msgstr "Aktiv" - -#: part/models.py:947 +#: part/models.py:949 msgid "Is this part active?" msgstr "Ist dieses Teil aktiv?" -#: part/models.py:952 +#: part/models.py:954 msgid "Is this a virtual part, such as a software product or license?" msgstr "Ist dieses Teil virtuell, wie zum Beispiel eine Software oder Lizenz?" -#: part/models.py:957 +#: part/models.py:959 msgid "Part notes - supports Markdown formatting" msgstr "Bemerkungen - unterstüzt Markdown-Formatierung" -#: part/models.py:960 +#: part/models.py:962 msgid "BOM checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:960 +#: part/models.py:962 msgid "Stored BOM checksum" msgstr "Prüfsumme der Stückliste gespeichert" -#: part/models.py:963 +#: part/models.py:965 msgid "BOM checked by" msgstr "Stückliste kontrolliert von" -#: part/models.py:965 +#: part/models.py:967 msgid "BOM checked date" msgstr "BOM Kontrolldatum" -#: part/models.py:969 +#: part/models.py:971 msgid "Creation User" msgstr "Erstellungs-Nutzer" -#: part/models.py:1781 +#: part/models.py:1783 msgid "Sell multiple" msgstr "Mehrere verkaufen" -#: part/models.py:2326 +#: part/models.py:2333 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:2343 +#: part/models.py:2350 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:2363 templates/js/translated/part.js:1707 -#: templates/js/translated/stock.js:1276 +#: part/models.py:2370 templates/js/translated/part.js:1714 +#: templates/js/translated/stock.js:1284 msgid "Test Name" msgstr "Test-Name" -#: part/models.py:2364 +#: part/models.py:2371 msgid "Enter a name for the test" msgstr "Namen für diesen Test eingeben" -#: part/models.py:2369 +#: part/models.py:2376 msgid "Test Description" msgstr "Test-Beschreibung" -#: part/models.py:2370 +#: part/models.py:2377 msgid "Enter description for this test" msgstr "Beschreibung für diesen Test eingeben" -#: part/models.py:2375 templates/js/translated/part.js:1716 +#: part/models.py:2382 templates/js/translated/part.js:1723 #: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "Benötigt" -#: part/models.py:2376 +#: part/models.py:2383 msgid "Is this test required to pass?" msgstr "Muss dieser Test erfolgreich sein?" -#: part/models.py:2381 templates/js/translated/part.js:1724 +#: part/models.py:2388 templates/js/translated/part.js:1731 msgid "Requires Value" msgstr "Erfordert Wert" -#: part/models.py:2382 +#: part/models.py:2389 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:2387 templates/js/translated/part.js:1731 +#: part/models.py:2394 templates/js/translated/part.js:1738 msgid "Requires Attachment" msgstr "Anhang muss eingegeben werden" -#: part/models.py:2388 +#: part/models.py:2395 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:2399 +#: part/models.py:2406 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "Ungültiges Zeichen im Vorlagename ({c})" -#: part/models.py:2435 +#: part/models.py:2442 msgid "Parameter template name must be unique" msgstr "Vorlagen-Name des Parameters muss eindeutig sein" -#: part/models.py:2443 +#: part/models.py:2450 msgid "Parameter Name" msgstr "Name des Parameters" -#: part/models.py:2450 +#: part/models.py:2457 msgid "Parameter Units" msgstr "Einheit des Parameters" -#: part/models.py:2480 +#: part/models.py:2487 msgid "Parent Part" msgstr "Ausgangsteil" -#: part/models.py:2482 part/models.py:2531 part/models.py:2532 -#: templates/InvenTree/settings/settings.html:178 +#: part/models.py:2489 part/models.py:2538 part/models.py:2539 +#: templates/InvenTree/settings/settings.html:181 msgid "Parameter Template" msgstr "Parameter Vorlage" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Data" msgstr "Wert" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Parameter Value" msgstr "Parameter Wert" -#: part/models.py:2536 templates/InvenTree/settings/settings.html:187 +#: part/models.py:2543 templates/InvenTree/settings/settings.html:190 msgid "Default Value" msgstr "Standard-Wert" -#: part/models.py:2537 +#: part/models.py:2544 msgid "Default Parameter Value" msgstr "Standard Parameter Wert" -#: part/models.py:2614 +#: part/models.py:2621 msgid "Select parent part" msgstr "Ausgangsteil auswählen" -#: part/models.py:2622 +#: part/models.py:2629 msgid "Sub part" msgstr "Untergeordnetes Teil" -#: part/models.py:2623 +#: part/models.py:2630 msgid "Select part to be used in BOM" msgstr "Teil für die Nutzung in der Stückliste auswählen" -#: part/models.py:2629 +#: part/models.py:2636 msgid "BOM quantity for this BOM item" msgstr "Stücklisten-Anzahl für dieses Stücklisten-Teil" -#: part/models.py:2631 templates/js/translated/bom.js:566 -#: templates/js/translated/bom.js:640 +#: part/models.py:2638 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:652 #: templates/js/translated/table_filters.js:92 msgid "Optional" msgstr "Optional" -#: part/models.py:2631 +#: part/models.py:2638 msgid "This BOM item is optional" msgstr "Diese Stücklisten-Position ist optional" -#: part/models.py:2634 +#: part/models.py:2641 msgid "Overage" msgstr "Überschuss" -#: part/models.py:2635 +#: part/models.py:2642 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Geschätzter Ausschuss (absolut oder prozentual)" -#: part/models.py:2638 +#: part/models.py:2645 msgid "BOM item reference" msgstr "Referenz der Postion auf der Stückliste" -#: part/models.py:2641 +#: part/models.py:2648 msgid "BOM item notes" msgstr "Notizen zur Stücklisten-Position" -#: part/models.py:2643 +#: part/models.py:2650 msgid "Checksum" msgstr "Prüfsumme" -#: part/models.py:2643 +#: part/models.py:2650 msgid "BOM line checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:2647 templates/js/translated/bom.js:657 +#: part/models.py:2654 templates/js/translated/bom.js:669 #: templates/js/translated/table_filters.js:68 #: templates/js/translated/table_filters.js:88 msgid "Inherited" msgstr "Geerbt" -#: part/models.py:2648 +#: part/models.py:2655 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:2653 templates/js/translated/bom.js:649 +#: part/models.py:2660 templates/js/translated/bom.js:661 msgid "Allow Variants" msgstr "Varianten zulassen" -#: part/models.py:2654 +#: part/models.py:2661 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Bestand von Varianten kann für diese Stücklisten-Position verwendet werden" -#: part/models.py:2739 stock/models.py:355 +#: part/models.py:2746 stock/models.py:357 msgid "Quantity must be integer value for trackable parts" msgstr "Menge muss eine Ganzzahl sein" -#: part/models.py:2748 part/models.py:2750 +#: part/models.py:2755 part/models.py:2757 msgid "Sub part must be specified" msgstr "Zuliefererteil muss festgelegt sein" -#: part/models.py:2879 +#: part/models.py:2886 msgid "BOM Item Substitute" msgstr "Stücklisten Ersatzteile" -#: part/models.py:2901 +#: part/models.py:2908 msgid "Substitute part cannot be the same as the master part" msgstr "Ersatzteil kann nicht identisch mit dem Hauptteil sein" -#: part/models.py:2913 +#: part/models.py:2920 msgid "Parent BOM item" msgstr "Übergeordnete Stücklisten Position" -#: part/models.py:2921 +#: part/models.py:2928 msgid "Substitute part" msgstr "Ersatzteil" -#: part/models.py:2932 +#: part/models.py:2939 msgid "Part 1" msgstr "Teil 1" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Part 2" msgstr "Teil 2" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Select Related Part" msgstr "verknüpftes Teil auswählen" -#: part/models.py:2968 +#: part/models.py:2975 msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique" msgstr "Fehler bei Verwandschaft: Ist das Teil mit sich selbst verwandt oder ist das die Verwandtschaft nicht eindeutig?" @@ -4282,7 +4373,7 @@ msgstr "" #: part/serializers.py:670 msgid "Remove Existing Data" -msgstr "" +msgstr "Bestehende Daten entfernen" #: part/serializers.py:671 msgid "Remove existing BOM items before copying" @@ -4290,7 +4381,7 @@ msgstr "" #: part/serializers.py:676 msgid "Include Inherited" -msgstr "" +msgstr "Vererbtes einschließen" #: part/serializers.py:677 msgid "Include BOM items which are inherited from templated parts" @@ -4298,11 +4389,11 @@ msgstr "" #: part/serializers.py:682 msgid "Skip Invalid Rows" -msgstr "" +msgstr "Ungültige Zeilen überspringen" #: part/serializers.py:683 msgid "Enable this option to skip invalid rows" -msgstr "" +msgstr "Aktiviere diese Option, um ungültige Zeilen zu überspringen" #: part/tasks.py:53 msgid "Low stock notification" @@ -4327,7 +4418,7 @@ msgstr "Die Stückliste für %(part)s wurde zuletzt von %(checker)s am msgid "The BOM for %(part)s has not been validated." msgstr "Die Stückliste für %(part)s wurde noch nicht kontrolliert." -#: part/templates/part/bom.html:30 part/templates/part/detail.html:253 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:270 msgid "BOM actions" msgstr "Stücklisten-Aktionen" @@ -4499,7 +4590,7 @@ msgstr "Wenn diese Kat. gelöscht wird, werden diese Teile in die oberste Kat. v msgid "Import Parts" msgstr "Teile importieren" -#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:375 +#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:348 msgid "Duplicate Part" msgstr "Teil duplizieren" @@ -4533,145 +4624,149 @@ msgid "Showing stock for all variants of %(full_name)s" msgstr "Bestand aller Varianten von %(full_name)s" #: part/templates/part/detail.html:43 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/detail.html:60 msgid "Part Test Templates" msgstr "Teil Test-Vorlagen" -#: part/templates/part/detail.html:48 +#: part/templates/part/detail.html:65 msgid "Add Test Template" msgstr "Test Vorlage hinzufügen" -#: part/templates/part/detail.html:105 +#: part/templates/part/detail.html:122 msgid "Sales Order Allocations" msgstr "Verkaufsauftragszuweisungen" -#: part/templates/part/detail.html:142 +#: part/templates/part/detail.html:159 msgid "Part Variants" msgstr "Teil Varianten" -#: part/templates/part/detail.html:146 +#: part/templates/part/detail.html:163 msgid "Create new variant" msgstr "Neue Variante anlegen" -#: part/templates/part/detail.html:147 +#: part/templates/part/detail.html:164 msgid "New Variant" msgstr "neue Variante anlegen" -#: part/templates/part/detail.html:174 +#: part/templates/part/detail.html:191 msgid "Add new parameter" msgstr "Parameter hinzufügen" -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:45 +#: part/templates/part/detail.html:228 part/templates/part/part_sidebar.html:49 msgid "Related Parts" msgstr "Verknüpfte Teile" -#: part/templates/part/detail.html:215 part/templates/part/detail.html:216 +#: part/templates/part/detail.html:232 part/templates/part/detail.html:233 msgid "Add Related" msgstr "Verknüpftes Teil hinzufügen" -#: part/templates/part/detail.html:236 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:253 part/templates/part/part_sidebar.html:17 msgid "Bill of Materials" msgstr "Stückliste" -#: part/templates/part/detail.html:241 +#: part/templates/part/detail.html:258 msgid "Export actions" msgstr "Export-Aktionen" -#: part/templates/part/detail.html:245 templates/js/translated/bom.js:70 +#: part/templates/part/detail.html:262 templates/js/translated/bom.js:70 msgid "Export BOM" msgstr "Stückliste exportieren" -#: part/templates/part/detail.html:247 +#: part/templates/part/detail.html:264 msgid "Print BOM Report" msgstr "Stücklisten-Bericht drucken" -#: part/templates/part/detail.html:257 +#: part/templates/part/detail.html:274 msgid "Upload BOM" msgstr "Stückliste hochladen" -#: part/templates/part/detail.html:259 templates/js/translated/part.js:272 +#: part/templates/part/detail.html:276 templates/js/translated/part.js:272 msgid "Copy BOM" msgstr "Stückliste kopieren" -#: part/templates/part/detail.html:261 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "Stückliste überprüfen" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:283 msgid "New BOM Item" msgstr "Neue Stücklisten-Position" -#: part/templates/part/detail.html:267 +#: part/templates/part/detail.html:284 msgid "Add BOM Item" msgstr "Stücklisten-Position hinzufügen" -#: part/templates/part/detail.html:280 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "Baugruppen" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:314 msgid "Part Builds" msgstr "Gefertigte Teile" -#: part/templates/part/detail.html:322 +#: part/templates/part/detail.html:339 msgid "Build Order Allocations" msgstr "Bauauftragszuweisungen" -#: part/templates/part/detail.html:332 +#: part/templates/part/detail.html:349 msgid "Part Suppliers" msgstr "Zulieferer" -#: part/templates/part/detail.html:360 +#: part/templates/part/detail.html:377 msgid "Part Manufacturers" msgstr "Teil-Hersteller" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:393 msgid "Delete manufacturer parts" msgstr "Herstellerteile löschen" -#: part/templates/part/detail.html:558 +#: part/templates/part/detail.html:575 msgid "Delete selected BOM items?" msgstr "Ausgewählte Stücklistenpositionen löschen?" -#: part/templates/part/detail.html:559 +#: part/templates/part/detail.html:576 msgid "All selected BOM items will be deleted" msgstr "Alle ausgewählte Stücklistenpositionen werden gelöscht" -#: part/templates/part/detail.html:608 +#: part/templates/part/detail.html:625 msgid "Create BOM Item" msgstr "Stücklisten-Position anlegen" -#: part/templates/part/detail.html:652 +#: part/templates/part/detail.html:682 msgid "Related Part" msgstr "verknüpftes Teil" -#: part/templates/part/detail.html:660 +#: part/templates/part/detail.html:690 msgid "Add Related Part" msgstr "verknüpftes Teil hinzufügen" -#: part/templates/part/detail.html:755 +#: part/templates/part/detail.html:785 msgid "Add Test Result Template" msgstr "Testergebnis-Vorlage hinzufügen" -#: part/templates/part/detail.html:812 +#: part/templates/part/detail.html:842 msgid "Edit Part Notes" msgstr "Teilenotizen bearbeiten" -#: part/templates/part/detail.html:925 +#: part/templates/part/detail.html:955 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "Stückpreis Einkauf - %(currency)s" -#: part/templates/part/detail.html:937 +#: part/templates/part/detail.html:967 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "Stückpreis Differenz - %(currency)s" -#: part/templates/part/detail.html:949 +#: part/templates/part/detail.html:979 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "Stückpreis Zulieferer - %(currency)s" -#: part/templates/part/detail.html:1038 +#: part/templates/part/detail.html:1068 #, python-format msgid "Unit Price - %(currency)s" msgstr "Stückpreis - %(currency)s" @@ -4786,7 +4881,7 @@ msgstr "Teil ist virtuell (kein physisches Teil)" #: templates/js/translated/company.js:508 #: templates/js/translated/company.js:765 #: templates/js/translated/model_renderers.js:175 -#: templates/js/translated/part.js:527 templates/js/translated/part.js:604 +#: templates/js/translated/part.js:533 templates/js/translated/part.js:610 msgid "Inactive" msgstr "Inaktiv" @@ -4805,10 +4900,6 @@ msgstr "Dieses Teil ist eine Variante von %(link)s" msgid "In Stock" msgstr "Auf Lager" -#: part/templates/part/part_base.html:203 templates/js/translated/part.js:1294 -msgid "On Order" -msgstr "Bestellt" - #: part/templates/part/part_base.html:210 templates/InvenTree/index.html:178 msgid "Required for Build Orders" msgstr "Für Bauaufträge benötigt" @@ -4821,12 +4912,12 @@ msgstr "Benötigt für Aufträge" msgid "Allocated to Orders" msgstr "Zu Bauaufträgen zugeordnet" -#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:678 +#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:690 msgid "Can Build" msgstr "Herstellbar" -#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1125 -#: templates/js/translated/part.js:1298 +#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1132 +#: templates/js/translated/part.js:1305 msgid "Building" msgstr "Im Bau" @@ -4878,7 +4969,7 @@ msgid "Total Cost" msgstr "Gesamtkosten" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:40 -#: templates/js/translated/bom.js:632 +#: templates/js/translated/bom.js:644 msgid "No supplier pricing available" msgstr "Keine Zulieferer-Preise verfügbar" @@ -4920,7 +5011,12 @@ msgstr "Varianten" msgid "Used In" msgstr "Benutzt in" -#: part/templates/part/part_sidebar.html:41 +#: part/templates/part/part_sidebar.html:31 +#: stock/templates/stock/stock_sidebar.html:8 +msgid "Allocations" +msgstr "" + +#: part/templates/part/part_sidebar.html:45 msgid "Test Templates" msgstr "Testvorlagen" @@ -4995,7 +5091,7 @@ msgstr "Verkaufspreis anzeigen" msgid "Calculation parameters" msgstr "Berechnungsparameter" -#: part/templates/part/prices.html:155 templates/js/translated/bom.js:626 +#: part/templates/part/prices.html:155 templates/js/translated/bom.js:638 msgid "Supplier Cost" msgstr "Zuliefererkosten" @@ -5017,7 +5113,7 @@ msgstr "Für dieses Teil sind keine Bestandspreise verfügbar." msgid "Internal Cost" msgstr "Interne Kosten" -#: part/templates/part/prices.html:215 part/views.py:1690 +#: part/templates/part/prices.html:215 part/views.py:1699 msgid "Add Internal Price Break" msgstr "Interne Preisspanne hinzufügen" @@ -5037,9 +5133,9 @@ msgstr "Keine Verkaufsgeschichte für diesen Teil verfügbar." msgid "Set category for the following parts" msgstr "Kategorie für Teile setzen" -#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:588 -#: templates/js/translated/part.js:491 templates/js/translated/part.js:1115 -#: templates/js/translated/part.js:1302 +#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:600 +#: templates/js/translated/part.js:497 templates/js/translated/part.js:1122 +#: templates/js/translated/part.js:1309 msgid "No Stock" msgstr "Kein Bestand" @@ -5056,126 +5152,126 @@ msgstr "Neue Teilevariante anlegen" msgid "Create a new variant of template '%(full_name)s'." msgstr "Neue Variante von Vorlage anlegen '%(full_name)s'." -#: part/templatetags/inventree_extras.py:116 +#: part/templatetags/inventree_extras.py:125 msgid "Unknown database" msgstr "Unbekannte Datenbank" -#: part/views.py:92 +#: part/views.py:93 msgid "Set Part Category" msgstr "Teil-Kategorie auswählen" -#: part/views.py:142 +#: part/views.py:143 #, python-brace-format msgid "Set category for {n} parts" msgstr "Kategorie für {n} Teile setzen" -#: part/views.py:214 +#: part/views.py:215 msgid "Match References" msgstr "Referenzen zuteilen" -#: part/views.py:502 +#: part/views.py:511 msgid "None" msgstr "Kein(e)" -#: part/views.py:561 +#: part/views.py:570 msgid "Part QR Code" msgstr "Teil-QR-Code" -#: part/views.py:663 +#: part/views.py:672 msgid "Select Part Image" msgstr "Teilbild auswählen" -#: part/views.py:689 +#: part/views.py:698 msgid "Updated part image" msgstr "Teilbild aktualisiert" -#: part/views.py:692 +#: part/views.py:701 msgid "Part image not found" msgstr "Teilbild nicht gefunden" -#: part/views.py:766 +#: part/views.py:775 msgid "Match Parts" msgstr "Teile zuordnen" -#: part/views.py:1101 +#: part/views.py:1110 msgid "Export Bill of Materials" msgstr "Stückliste exportieren" -#: part/views.py:1150 +#: part/views.py:1159 msgid "Confirm Part Deletion" msgstr "Löschen des Teils bestätigen" -#: part/views.py:1157 +#: part/views.py:1166 msgid "Part was deleted" msgstr "Teil wurde gelöscht" -#: part/views.py:1166 +#: part/views.py:1175 msgid "Part Pricing" msgstr "Teilbepreisung" -#: part/views.py:1315 +#: part/views.py:1324 msgid "Create Part Parameter Template" msgstr "Teilparametervorlage anlegen" -#: part/views.py:1325 +#: part/views.py:1334 msgid "Edit Part Parameter Template" msgstr "Teilparametervorlage bearbeiten" -#: part/views.py:1332 +#: part/views.py:1341 msgid "Delete Part Parameter Template" msgstr "Teilparametervorlage löschen" -#: part/views.py:1391 templates/js/translated/part.js:315 +#: part/views.py:1400 templates/js/translated/part.js:315 msgid "Edit Part Category" msgstr "Teil-Kategorie bearbeiten" -#: part/views.py:1429 +#: part/views.py:1438 msgid "Delete Part Category" msgstr "Teil-Kategorie löschen" -#: part/views.py:1435 +#: part/views.py:1444 msgid "Part category was deleted" msgstr "Teil-Kategorie wurde gelöscht" -#: part/views.py:1444 +#: part/views.py:1453 msgid "Create Category Parameter Template" msgstr "Kategorieparametervorlage anlegen" -#: part/views.py:1545 +#: part/views.py:1554 msgid "Edit Category Parameter Template" msgstr "Kategorieparametervorlage bearbeiten" -#: part/views.py:1601 +#: part/views.py:1610 msgid "Delete Category Parameter Template" msgstr "Kategorieparametervorlage löschen" -#: part/views.py:1623 +#: part/views.py:1632 msgid "Added new price break" msgstr "neue Preisstaffel hinzufügt" -#: part/views.py:1699 +#: part/views.py:1708 msgid "Edit Internal Price Break" msgstr "Interne Preisspanne bearbeiten" -#: part/views.py:1707 +#: part/views.py:1716 msgid "Delete Internal Price Break" msgstr "Interne Preisspanne löschen" -#: plugin/integration.py:124 +#: plugin/integration.py:138 msgid "No author found" msgstr "" -#: plugin/integration.py:136 +#: plugin/integration.py:152 msgid "No date found" -msgstr "" +msgstr "Kein Datum gefunden" #: plugin/models.py:26 msgid "Plugin Configuration" -msgstr "" +msgstr "Plugin-Konfiguration" #: plugin/models.py:27 msgid "Plugin Configurations" -msgstr "" +msgstr "Plugin-Konfigurationen" #: plugin/models.py:32 msgid "Key" @@ -5193,7 +5289,7 @@ msgstr "" msgid "Is the plugin active" msgstr "" -#: plugin/models.py:195 +#: plugin/models.py:199 msgid "Plugin" msgstr "" @@ -5215,23 +5311,23 @@ msgstr "" #: plugin/samples/integration/sample.py:52 msgid "Numerical" -msgstr "" +msgstr "Numerisch" #: plugin/samples/integration/sample.py:53 msgid "A numerical setting" -msgstr "" +msgstr "Eine numerische Einstellung" #: plugin/samples/integration/sample.py:58 msgid "Choice Setting" -msgstr "" +msgstr "Auswahleinstellungen" #: plugin/samples/integration/sample.py:59 msgid "A setting with multiple choices" -msgstr "" +msgstr "Eine Einstellung mit mehreren Optionen" #: plugin/serializers.py:50 msgid "Source URL" -msgstr "" +msgstr "Quell-URL" #: plugin/serializers.py:51 msgid "Source for the package - this can be a custom registry or a VCS path" @@ -5239,7 +5335,7 @@ msgstr "" #: plugin/serializers.py:56 msgid "Package Name" -msgstr "" +msgstr "Paket-Name" #: plugin/serializers.py:57 msgid "Name for the Plugin Package - can also contain a version indicator" @@ -5247,7 +5343,7 @@ msgstr "" #: plugin/serializers.py:60 msgid "Confirm plugin installation" -msgstr "" +msgstr "Plugin-Installation bestätigen" #: plugin/serializers.py:61 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." @@ -5359,12 +5455,12 @@ msgid "Stock Item Test Report" msgstr "Lagerartikel Test-Bericht" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:517 stock/templates/stock/item_base.html:156 +#: stock/models.py:519 stock/templates/stock/item_base.html:156 #: templates/js/translated/build.js:293 templates/js/translated/build.js:697 #: templates/js/translated/build.js:1073 #: templates/js/translated/model_renderers.js:95 #: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 -#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:415 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:423 msgid "Serial Number" msgstr "Seriennummer" @@ -5373,19 +5469,19 @@ msgid "Test Results" msgstr "Testergebnisse" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1948 +#: stock/models.py:1976 msgid "Test" msgstr "Test" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1954 +#: stock/models.py:1982 msgid "Result" msgstr "Ergebnis" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin.html:50 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2367 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2525 msgid "Date" msgstr "Datum" @@ -5398,23 +5494,27 @@ msgid "Fail" msgstr "fehlgeschlagen" #: report/templates/report/inventree_test_report_base.html:123 -#: stock/templates/stock/stock_sidebar.html:12 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Verbaute Objekte" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:578 templates/js/translated/stock.js:748 -#: templates/js/translated/stock.js:2627 +#: templates/js/translated/stock.js:586 templates/js/translated/stock.js:756 +#: templates/js/translated/stock.js:2785 msgid "Serial" msgstr "Seriennummer" -#: stock/api.py:478 +#: stock/api.py:476 msgid "Quantity is required" msgstr "Menge ist erforderlich" -#: stock/forms.py:77 stock/forms.py:251 stock/models.py:574 +#: stock/api.py:483 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:576 #: stock/templates/stock/item_base.html:193 -#: templates/js/translated/stock.js:1701 +#: templates/js/translated/stock.js:1709 msgid "Expiry Date" msgstr "Ablaufdatum" @@ -5462,228 +5562,228 @@ msgstr "nicht mehr verbauen bestätigen" msgid "Confirm removal of installed stock items" msgstr "Entfernen der verbauten Lagerartikel bestätigen" -#: stock/models.py:60 stock/models.py:611 +#: stock/models.py:62 stock/models.py:613 #: stock/templates/stock/item_base.html:416 msgid "Owner" msgstr "Besitzer" -#: stock/models.py:61 stock/models.py:612 +#: stock/models.py:63 stock/models.py:614 msgid "Select Owner" msgstr "Besitzer auswählen" -#: stock/models.py:336 +#: stock/models.py:338 msgid "StockItem with this serial number already exists" msgstr "Ein Lagerartikel mit dieser Seriennummer existiert bereits" -#: stock/models.py:372 +#: stock/models.py:374 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "Teile-Typ ('{pf}') muss {pe} sein" -#: stock/models.py:382 stock/models.py:391 +#: stock/models.py:384 stock/models.py:393 msgid "Quantity must be 1 for item with a serial number" msgstr "Anzahl muss für Objekte mit Seriennummer 1 sein" -#: stock/models.py:383 +#: stock/models.py:385 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Seriennummer kann nicht gesetzt werden wenn die Anzahl größer als 1 ist" -#: stock/models.py:405 +#: stock/models.py:407 msgid "Item cannot belong to itself" msgstr "Teil kann nicht zu sich selbst gehören" -#: stock/models.py:411 +#: stock/models.py:413 msgid "Item must have a build reference if is_building=True" msgstr "Teil muss eine Referenz haben wenn is_building wahr ist" -#: stock/models.py:418 +#: stock/models.py:420 msgid "Build reference does not point to the same part object" msgstr "Referenz verweist nicht auf das gleiche Teil" -#: stock/models.py:461 +#: stock/models.py:463 msgid "Parent Stock Item" msgstr "Eltern-Lagerartikel" -#: stock/models.py:470 +#: stock/models.py:472 msgid "Base part" msgstr "Basis-Teil" -#: stock/models.py:478 +#: stock/models.py:480 msgid "Select a matching supplier part for this stock item" msgstr "Passendes Zuliefererteil für diesen Lagerartikel auswählen" -#: stock/models.py:484 stock/templates/stock/location.html:16 +#: stock/models.py:486 stock/templates/stock/location.html:16 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Bestand-Lagerort" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Where is this stock item located?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: stock/models.py:494 +#: stock/models.py:496 msgid "Packaging this stock item is stored in" msgstr "Die Verpackung dieses Lagerartikel ist gelagert in" -#: stock/models.py:500 stock/templates/stock/item_base.html:298 +#: stock/models.py:502 stock/templates/stock/item_base.html:298 msgid "Installed In" msgstr "verbaut in" -#: stock/models.py:503 +#: stock/models.py:505 msgid "Is this item installed in another item?" msgstr "Ist dieses Teil in einem anderen verbaut?" -#: stock/models.py:519 +#: stock/models.py:521 msgid "Serial number for this item" msgstr "Seriennummer für dieses Teil" -#: stock/models.py:533 +#: stock/models.py:535 msgid "Batch code for this stock item" msgstr "Losnummer für diesen Lagerartikel" -#: stock/models.py:537 +#: stock/models.py:539 msgid "Stock Quantity" msgstr "Bestand" -#: stock/models.py:546 +#: stock/models.py:548 msgid "Source Build" msgstr "Quellbau" -#: stock/models.py:548 +#: stock/models.py:550 msgid "Build for this stock item" msgstr "Bauauftrag für diesen Lagerartikel" -#: stock/models.py:559 +#: stock/models.py:561 msgid "Source Purchase Order" msgstr "Quelle Bestellung" -#: stock/models.py:562 +#: stock/models.py:564 msgid "Purchase order for this stock item" msgstr "Bestellung für diesen Lagerartikel" -#: stock/models.py:568 +#: stock/models.py:570 msgid "Destination Sales Order" msgstr "Ziel-Auftrag" -#: stock/models.py:575 +#: stock/models.py:577 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Ablaufdatum für Lagerartikel. Bestand wird danach als abgelaufen gekennzeichnet" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete on deplete" msgstr "Löschen wenn leer" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete this Stock Item when stock is depleted" msgstr "Diesen Lagerartikel löschen wenn der Bestand aufgebraucht ist" -#: stock/models.py:598 stock/templates/stock/item.html:111 +#: stock/models.py:600 stock/templates/stock/item.html:128 msgid "Stock Item Notes" msgstr "Lagerartikel-Notizen" -#: stock/models.py:607 +#: stock/models.py:609 msgid "Single unit purchase price at time of purchase" msgstr "Preis für eine Einheit bei Einkauf" -#: stock/models.py:1068 +#: stock/models.py:1096 msgid "Part is not set as trackable" msgstr "Teil ist nicht verfolgbar" -#: stock/models.py:1074 +#: stock/models.py:1102 msgid "Quantity must be integer" msgstr "Anzahl muss eine Ganzzahl sein" -#: stock/models.py:1080 +#: stock/models.py:1108 #, 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:1083 +#: stock/models.py:1111 msgid "Serial numbers must be a list of integers" msgstr "Seriennummern muss eine Liste von Ganzzahlen sein" -#: stock/models.py:1086 +#: stock/models.py:1114 msgid "Quantity does not match serial numbers" msgstr "Anzahl stimmt nicht mit den Seriennummern überein" -#: stock/models.py:1093 +#: stock/models.py:1121 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "Seriennummern {exists} existieren bereits" -#: stock/models.py:1164 +#: stock/models.py:1192 msgid "Stock item has been assigned to a sales order" -msgstr "" +msgstr "Artikel wurde einem Kundenauftrag zugewiesen" -#: stock/models.py:1167 +#: stock/models.py:1195 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1170 +#: stock/models.py:1198 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1173 +#: stock/models.py:1201 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1176 +#: stock/models.py:1204 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1179 +#: stock/models.py:1207 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1186 stock/serializers.py:774 +#: stock/models.py:1214 stock/serializers.py:775 msgid "Duplicate stock items" -msgstr "" +msgstr "Artikel duplizeren" -#: stock/models.py:1190 +#: stock/models.py:1218 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1222 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1198 +#: stock/models.py:1226 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1369 +#: stock/models.py:1397 msgid "StockItem cannot be moved as it is not in stock" msgstr "Lagerartikel kann nicht bewegt werden, da kein Bestand vorhanden ist" -#: stock/models.py:1868 +#: stock/models.py:1896 msgid "Entry notes" msgstr "Eintrags-Notizen" -#: stock/models.py:1925 +#: stock/models.py:1953 msgid "Value must be provided for this test" msgstr "Wert muss für diesen Test angegeben werden" -#: stock/models.py:1931 +#: stock/models.py:1959 msgid "Attachment must be uploaded for this test" msgstr "Anhang muss für diesen Test hochgeladen werden" -#: stock/models.py:1949 +#: stock/models.py:1977 msgid "Test name" msgstr "Name des Tests" -#: stock/models.py:1955 templates/js/translated/table_filters.js:271 +#: stock/models.py:1983 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "Testergebnis" -#: stock/models.py:1961 +#: stock/models.py:1989 msgid "Test output value" msgstr "Test Ausgabe Wert" -#: stock/models.py:1968 +#: stock/models.py:1996 msgid "Test result attachment" msgstr "Test Ergebnis Anhang" -#: stock/models.py:1974 +#: stock/models.py:2002 msgid "Test notes" msgstr "Test Notizen" @@ -5708,7 +5808,7 @@ msgstr "Anzahl darf nicht die verfügbare Menge überschreiten ({q})" msgid "Enter serial numbers for new items" msgstr "Seriennummern für neue Teile eingeben" -#: stock/serializers.py:326 stock/serializers.py:731 stock/serializers.py:972 +#: stock/serializers.py:326 stock/serializers.py:732 stock/serializers.py:973 msgid "Destination stock location" msgstr "Ziel-Bestand" @@ -5720,63 +5820,63 @@ msgstr "Optionales Notizfeld" msgid "Serial numbers cannot be assigned to this part" msgstr "Seriennummern können diesem Teil nicht zugewiesen werden" -#: stock/serializers.py:588 +#: stock/serializers.py:589 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:592 +#: stock/serializers.py:593 msgid "Item is allocated to a sales order" -msgstr "" +msgstr "Artikel ist einem Kundenauftrag zugeordnet" -#: stock/serializers.py:596 +#: stock/serializers.py:597 msgid "Item is allocated to a build order" -msgstr "" +msgstr "Artikel ist einem Fertigungsauftrag zugeordnet" -#: stock/serializers.py:626 +#: stock/serializers.py:627 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:632 +#: stock/serializers.py:633 msgid "Selected company is not a customer" -msgstr "" +msgstr "Ausgewählte Firma ist kein Kunde" -#: stock/serializers.py:640 +#: stock/serializers.py:641 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:650 stock/serializers.py:880 +#: stock/serializers.py:651 stock/serializers.py:881 msgid "A list of stock items must be provided" msgstr "Eine Liste der Lagerbestände muss angegeben werden" -#: stock/serializers.py:738 +#: stock/serializers.py:739 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:743 +#: stock/serializers.py:744 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:744 +#: stock/serializers.py:745 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:749 +#: stock/serializers.py:750 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:750 +#: stock/serializers.py:751 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:760 +#: stock/serializers.py:761 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:842 +#: stock/serializers.py:843 msgid "StockItem primary key value" msgstr "Primärschlüssel Lagerelement" -#: stock/serializers.py:870 +#: stock/serializers.py:871 msgid "Stock transaction notes" msgstr "Bestandsbewegungsnotizen" @@ -5789,47 +5889,51 @@ msgid "New Entry" msgstr "neuer Eintrag" #: stock/templates/stock/item.html:48 +msgid "Stock Item Allocations" +msgstr "" + +#: stock/templates/stock/item.html:64 msgid "Child Stock Items" msgstr "Kind-Lagerartikel" -#: stock/templates/stock/item.html:55 +#: stock/templates/stock/item.html:72 msgid "This stock item does not have any child items" msgstr "Dieser Lagerartikel hat keine Kinder" -#: stock/templates/stock/item.html:64 -#: stock/templates/stock/stock_sidebar.html:8 +#: stock/templates/stock/item.html:81 +#: stock/templates/stock/stock_sidebar.html:12 msgid "Test Data" msgstr "Testdaten" -#: stock/templates/stock/item.html:68 stock/templates/stock/item_base.html:57 +#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:57 msgid "Test Report" msgstr "Test-Bericht" -#: stock/templates/stock/item.html:72 +#: stock/templates/stock/item.html:89 msgid "Delete Test Data" msgstr "Testdaten löschen" -#: stock/templates/stock/item.html:76 +#: stock/templates/stock/item.html:93 msgid "Add Test Data" msgstr "Testdaten hinzufügen" -#: stock/templates/stock/item.html:133 +#: stock/templates/stock/item.html:150 msgid "Installed Stock Items" msgstr "Installierte Lagerartikel" -#: stock/templates/stock/item.html:137 stock/views.py:482 +#: stock/templates/stock/item.html:154 stock/views.py:482 msgid "Install Stock Item" msgstr "Lagerartikel installieren" -#: stock/templates/stock/item.html:279 stock/templates/stock/item.html:304 +#: stock/templates/stock/item.html:309 stock/templates/stock/item.html:334 msgid "Add Test Result" msgstr "Testergebnis hinzufügen" -#: stock/templates/stock/item.html:324 +#: stock/templates/stock/item.html:354 msgid "Edit Test Result" msgstr "Testergebnis bearbeiten" -#: stock/templates/stock/item.html:338 +#: stock/templates/stock/item.html:368 msgid "Delete Test Result" msgstr "Testergebnis löschen" @@ -5954,7 +6058,7 @@ msgid "Stale" msgstr "überfällig" #: stock/templates/stock/item_base.html:206 -#: templates/js/translated/stock.js:1714 +#: templates/js/translated/stock.js:1722 msgid "Last Updated" msgstr "Zuletzt aktualisiert" @@ -6113,7 +6217,7 @@ msgid "Sublocations" msgstr "Unter-Lagerorte" #: stock/templates/stock/location.html:146 templates/InvenTree/search.html:164 -#: templates/stats.html:97 users/models.py:42 +#: templates/stats.html:109 users/models.py:42 msgid "Stock Locations" msgstr "Bestand-Lagerorte" @@ -6137,7 +6241,7 @@ msgstr "Lade..." msgid "Stock Tracking" msgstr "Lagerartikel-Verfolgung" -#: stock/templates/stock/stock_sidebar.html:16 +#: stock/templates/stock/stock_sidebar.html:20 msgid "Child Items" msgstr "Untergeordnete Objekte" @@ -6166,7 +6270,7 @@ msgstr "Diese Aktion kann nicht einfach rückgängig gemacht werden" msgid "Are you sure you want to delete this stock tracking entry?" msgstr "Sind Sie sicher, dass Sie diesen Lagerartikel-Verfolgungs-Eintrag löschen wollen?" -#: stock/views.py:162 +#: stock/views.py:162 templates/js/translated/stock.js:139 msgid "Edit Stock Location" msgstr "Lagerartikel-Ort bearbeiten" @@ -6206,7 +6310,7 @@ msgstr "Lagerartikel-QR-Code" msgid "Uninstall Stock Items" msgstr "Lagerartikel deinstallieren" -#: stock/views.py:727 templates/js/translated/stock.js:1066 +#: stock/views.py:727 templates/js/translated/stock.js:1074 msgid "Confirm stock adjustment" msgstr "Bestands-Anpassung bestätigen" @@ -6214,7 +6318,7 @@ msgstr "Bestands-Anpassung bestätigen" msgid "Uninstalled stock items" msgstr "Lagerartikel deinstalliert" -#: stock/views.py:760 templates/js/translated/stock.js:324 +#: stock/views.py:760 templates/js/translated/stock.js:332 msgid "Edit Stock Item" msgstr "Lagerartikel bearbeiten" @@ -6226,7 +6330,7 @@ msgstr "Neuen Lagerort erstellen" msgid "Create new Stock Item" msgstr "Neuen Lagerartikel hinzufügen" -#: stock/views.py:1153 templates/js/translated/stock.js:304 +#: stock/views.py:1153 templates/js/translated/stock.js:312 msgid "Duplicate Stock Item" msgstr "Bestand duplizieren" @@ -6270,13 +6374,25 @@ msgstr "Seite nicht gefunden" msgid "The requested page does not exist" msgstr "Seite existiert nicht" +#: templates/500.html:5 templates/500.html:11 +msgid "Internal Server Error" +msgstr "Interner Serverfehler" + +#: templates/500.html:14 +msgid "The InvenTree server raised an internal error" +msgstr "Der InvenTree-Server hat einen internen Fehler geworfen" + +#: templates/500.html:15 +msgid "Refer to the error log in the admin interface for further details" +msgstr "Weitere Details finden Sie im Fehlerlog im Admin-Interface" + #: templates/503.html:10 templates/503.html:35 msgid "Site is in Maintenance" -msgstr "" +msgstr "System wird gewartet" #: templates/503.html:41 msgid "The site is currently in maintenance and should be up again soon!" -msgstr "" +msgstr "Die Seite ist derzeit in Wartung und sollte bald wieder verfügbar sein!" #: templates/InvenTree/index.html:7 msgid "Index" @@ -6392,22 +6508,22 @@ msgid "Signup" msgstr "Anmelden" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:113 msgid "Settings" msgstr "Einstellungen" #: templates/InvenTree/settings/mixins/urls.html:5 msgid "URLs" -msgstr "" +msgstr "URLs" #: templates/InvenTree/settings/mixins/urls.html:8 #, python-format msgid "The Base-URL for this plugin is %(base)s." -msgstr "" +msgstr "Die Basis-URL für dieses Plugin ist %(base)s." #: templates/InvenTree/settings/mixins/urls.html:23 msgid "Open in new tab" -msgstr "" +msgstr "In neuem Tab öffnen" #: templates/InvenTree/settings/part.html:7 msgid "Part Settings" @@ -6427,68 +6543,68 @@ msgstr "Teil-Parametervorlage" #: templates/InvenTree/settings/plugin.html:10 msgid "Plugin Settings" -msgstr "" +msgstr "Plugin-Einstellungen" #: templates/InvenTree/settings/plugin.html:16 msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." -msgstr "" +msgstr "Wenn Sie die folgenden Einstellungen ändern, müssen Sie InvenTree sofort neu starten. Ändern Sie dies nicht während der aktiven Nutzung." -#: templates/InvenTree/settings/plugin.html:32 +#: templates/InvenTree/settings/plugin.html:33 msgid "Plugins" -msgstr "" +msgstr "Plugins" -#: templates/InvenTree/settings/plugin.html:37 +#: templates/InvenTree/settings/plugin.html:38 #: templates/js/translated/plugin.js:15 msgid "Install Plugin" -msgstr "" +msgstr "Plugin installieren" -#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: templates/InvenTree/settings/plugin.html:47 templates/navbar.html:111 #: users/models.py:39 msgid "Admin" msgstr "Admin" -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:49 #: templates/InvenTree/settings/plugin_settings.html:28 msgid "Author" msgstr "" -#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin_settings.html:43 msgid "Version" -msgstr "" +msgstr "Version" -#: templates/InvenTree/settings/plugin.html:91 +#: templates/InvenTree/settings/plugin.html:92 msgid "Inactive plugins" -msgstr "" +msgstr "Inaktive Plugins" -#: templates/InvenTree/settings/plugin.html:114 +#: templates/InvenTree/settings/plugin.html:115 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:123 +#: templates/InvenTree/settings/plugin.html:124 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:125 +#: templates/InvenTree/settings/plugin.html:126 msgid "Message" msgstr "" #: templates/InvenTree/settings/plugin_settings.html:10 #, python-format msgid "Plugin details for %(name)s" -msgstr "" +msgstr "Plugin-Details für %(name)s" #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" -msgstr "" +msgstr "Plugin-Informationen" #: templates/InvenTree/settings/plugin_settings.html:48 msgid "no version information supplied" -msgstr "" +msgstr "keine Versionsinformation angegeben" #: templates/InvenTree/settings/plugin_settings.html:62 msgid "License" -msgstr "" +msgstr "Lizenz" #: templates/InvenTree/settings/plugin_settings.html:71 msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." @@ -6500,23 +6616,23 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:83 msgid "Installation method" -msgstr "" +msgstr "Installationsmethode" #: templates/InvenTree/settings/plugin_settings.html:86 msgid "This plugin was installed as a package" -msgstr "" +msgstr "Dieses Plugin wurde als Paket installiert" #: templates/InvenTree/settings/plugin_settings.html:88 msgid "This plugin was found in a local InvenTree path" -msgstr "" +msgstr "Dieses Plugin wurde in einem lokalen InvenTree Pfad gefunden" #: templates/InvenTree/settings/plugin_settings.html:94 msgid "Installation path" -msgstr "" +msgstr "Installationspfad" #: templates/InvenTree/settings/plugin_settings.html:100 msgid "Commit Author" -msgstr "" +msgstr "Commit-Autor" #: templates/InvenTree/settings/plugin_settings.html:104 #: templates/about.html:47 @@ -6530,7 +6646,7 @@ msgstr "Commit-Hash" #: templates/InvenTree/settings/plugin_settings.html:112 msgid "Commit Message" -msgstr "" +msgstr "Commit-Nachricht" #: templates/InvenTree/settings/plugin_settings.html:117 msgid "Sign Status" @@ -6557,37 +6673,37 @@ msgstr "Kein Wert angegeben" msgid "Edit setting" msgstr "Einstellungen ändern" -#: templates/InvenTree/settings/settings.html:75 +#: templates/InvenTree/settings/settings.html:78 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:77 +#: templates/InvenTree/settings/settings.html:80 msgid "Edit Global Setting" msgstr "Allgemeine Einstellungen bearbeiten" -#: templates/InvenTree/settings/settings.html:79 +#: templates/InvenTree/settings/settings.html:82 msgid "Edit User Setting" msgstr "Benutzereinstellungen bearbeiten" -#: templates/InvenTree/settings/settings.html:168 +#: templates/InvenTree/settings/settings.html:171 msgid "No category parameter templates found" msgstr "Keine Kategorie-Parametervorlagen gefunden" -#: templates/InvenTree/settings/settings.html:190 -#: templates/InvenTree/settings/settings.html:289 +#: templates/InvenTree/settings/settings.html:193 +#: templates/InvenTree/settings/settings.html:292 msgid "Edit Template" msgstr "Vorlage bearbeiten" -#: templates/InvenTree/settings/settings.html:191 -#: templates/InvenTree/settings/settings.html:290 +#: templates/InvenTree/settings/settings.html:194 +#: templates/InvenTree/settings/settings.html:293 msgid "Delete Template" msgstr "Vorlage löschen" -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:272 msgid "No part parameter templates found" msgstr "Keine Teilparametervorlagen gefunden" -#: templates/InvenTree/settings/settings.html:273 +#: templates/InvenTree/settings/settings.html:276 msgid "ID" msgstr "ID" @@ -6765,124 +6881,105 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:219 +#: templates/InvenTree/settings/user.html:220 +msgid "Active Sessions" +msgstr "Aktive Sitzungen" + +#: templates/InvenTree/settings/user.html:226 +msgid "Log out active sessions (except this one)" +msgstr "Aktive Sitzungen abmelden (ausgenommen diese)" + +#: templates/InvenTree/settings/user.html:227 +msgid "Log Out Active Sessions" +msgstr "Aktive Sitzungen abmelden" + +#: templates/InvenTree/settings/user.html:236 +msgid "unknown on unknown" +msgstr "unbekannt auf unbekanntem" + +#: templates/InvenTree/settings/user.html:237 +msgid "unknown" +msgstr "unbekannt" + +#: templates/InvenTree/settings/user.html:241 +msgid "IP Address" +msgstr "IP Adresse" + +#: templates/InvenTree/settings/user.html:242 +msgid "Device" +msgstr "Gerät" + +#: templates/InvenTree/settings/user.html:243 +msgid "Last Activity" +msgstr "Letzte Aktivität" + +#: templates/InvenTree/settings/user.html:252 +#, python-format +msgid "%(time)s ago (this session)" +msgstr "%(time)s vor (diese Sitzung)" + +#: templates/InvenTree/settings/user.html:254 +#, python-format +msgid "%(time)s ago" +msgstr "%(time)s vor" + +#: templates/InvenTree/settings/user.html:266 +msgid "Do you really want to remove the selected email address?" +msgstr "Möchten Sie die ausgewählte E-Mail-Adresse wirklich entfernen?" + #: templates/InvenTree/settings/user_display.html:25 msgid "Theme Settings" msgstr "Anzeige-Einstellungen" -#: templates/InvenTree/settings/user.html:227 #: templates/InvenTree/settings/user_display.html:35 msgid "Select theme" msgstr "Stil auswählen" -#: templates/InvenTree/settings/user.html:237 #: templates/InvenTree/settings/user_display.html:46 msgid "Set Theme" msgstr "Design auswählen" -#: templates/InvenTree/settings/user.html:246 #: templates/InvenTree/settings/user_display.html:54 msgid "Language Settings" msgstr "Spracheinstellung" -#: templates/InvenTree/settings/user.html:254 #: templates/InvenTree/settings/user_display.html:63 msgid "Select language" msgstr "Sprache festlegen" -#: templates/InvenTree/settings/user.html:270 #: templates/InvenTree/settings/user_display.html:79 #, python-format msgid "%(lang_translated)s%% translated" msgstr "%(lang_translated)s%% übersetzt" -#: templates/InvenTree/settings/user.html:272 #: templates/InvenTree/settings/user_display.html:81 msgid "No translations available" msgstr "Keine Übersetzungen verfügbar" -#: templates/InvenTree/settings/user.html:279 #: templates/InvenTree/settings/user_display.html:88 msgid "Set Language" msgstr "Sprache festlegen" -#: templates/InvenTree/settings/user.html:281 #: templates/InvenTree/settings/user_display.html:91 msgid "Some languages are not complete" msgstr "Einige Sprachen sind nicht vollständig übersetzt" -#: templates/InvenTree/settings/user.html:283 #: templates/InvenTree/settings/user_display.html:93 msgid "Show only sufficent" msgstr "Zeige nur ausreichende" -#: templates/InvenTree/settings/user.html:285 +#: templates/InvenTree/settings/user_display.html:95 +msgid "and hidden." +msgstr "und versteckt." + #: templates/InvenTree/settings/user_display.html:95 msgid "Show them too" msgstr "Auch unvollständige anzeigen" -#: templates/InvenTree/settings/user.html:292 #: templates/InvenTree/settings/user_display.html:101 msgid "Help the translation efforts!" msgstr "Hilf bei der Übersetzung!" -#: templates/InvenTree/settings/user.html:293 -#, python-format -msgid "Native language translation of the\n" -" InvenTree web application is community contributed via crowdin. Contributions are\n" -" welcomed and encouraged." -msgstr "" - -#: templates/InvenTree/settings/user.html:302 -msgid "Active Sessions" -msgstr "Aktive Sitzungen" - -#: templates/InvenTree/settings/user.html:308 -msgid "Log out active sessions (except this one)" -msgstr "Aktive Sitzungen abmelden (ausgenommen diese)" - -#: templates/InvenTree/settings/user.html:309 -msgid "Log Out Active Sessions" -msgstr "Aktive Sitzungen abmelden" - -#: templates/InvenTree/settings/user.html:318 -msgid "unknown on unknown" -msgstr "unbekannt auf unbekanntem" - -#: templates/InvenTree/settings/user.html:319 -msgid "unknown" -msgstr "unbekannt" - -#: templates/InvenTree/settings/user.html:323 -msgid "IP Address" -msgstr "IP Adresse" - -#: templates/InvenTree/settings/user.html:324 -msgid "Device" -msgstr "Gerät" - -#: templates/InvenTree/settings/user.html:325 -msgid "Last Activity" -msgstr "Letzte Aktivität" - -#: templates/InvenTree/settings/user.html:334 -#, python-format -msgid "%(time)s ago (this session)" -msgstr "%(time)s vor (diese Sitzung)" - -#: templates/InvenTree/settings/user.html:336 -#, python-format -msgid "%(time)s ago" -msgstr "%(time)s vor" - -#: templates/InvenTree/settings/user.html:348 -msgid "Do you really want to remove the selected email address?" -msgstr "Möchten Sie die ausgewählte E-Mail-Adresse wirklich entfernen?" - -#: templates/InvenTree/settings/user_display.html:95 -msgid "and hidden." -msgstr "und versteckt." - #: templates/InvenTree/settings/user_display.html:102 #, python-format msgid "Native language translation of the InvenTree web application is community contributed via crowdin. Contributions are welcomed and encouraged." @@ -6901,9 +6998,9 @@ msgid "InvenTree Version Information" msgstr "InvenTree-Versionsinformationen" #: templates/about.html:11 templates/about.html:105 -#: templates/js/translated/bom.js:395 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:573 templates/js/translated/modals.js:667 -#: templates/js/translated/modals.js:970 templates/modals.html:15 +#: templates/js/translated/bom.js:407 templates/js/translated/modals.js:53 +#: templates/js/translated/modals.js:584 templates/js/translated/modals.js:678 +#: templates/js/translated/modals.js:983 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "Schliessen" @@ -7112,7 +7209,7 @@ msgstr "" #: templates/allauth_2fa/remove.html:9 msgid "Are you sure?" -msgstr "" +msgstr "Bist du sicher?" #: templates/allauth_2fa/remove.html:14 msgid "Disable Two-Factor" @@ -7120,23 +7217,23 @@ msgstr "" #: templates/allauth_2fa/setup.html:6 msgid "Setup Two-Factor Authentication" -msgstr "" +msgstr "Zwei-Faktor-Authentifizierung einrichten" #: templates/allauth_2fa/setup.html:10 msgid "Step 1" -msgstr "" +msgstr "Schritt 1" #: templates/allauth_2fa/setup.html:14 msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." -msgstr "" +msgstr "Scannen Sie den QR-Code unten mit einem Token-Generator Ihrer Wahl (z.B. Google Authenticator)." #: templates/allauth_2fa/setup.html:23 msgid "Step 2" -msgstr "" +msgstr "Schritt 2" #: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" -msgstr "" +msgstr "Geben Sie das von der App generierte Token ein:" #: templates/allauth_2fa/setup.html:35 msgid "Verify" @@ -7180,13 +7277,13 @@ msgid "The following parts are low on required stock" msgstr "Bei den folgenden Teilen gibt es wenige Lagerartikel" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1103 +#: templates/js/translated/bom.js:1117 msgid "Required Quantity" msgstr "Benötigte Menge" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:579 templates/js/translated/build.js:1189 +#: templates/js/translated/bom.js:591 templates/js/translated/build.js:1189 #: templates/js/translated/build.js:1810 #: templates/js/translated/table_filters.js:178 msgid "Available" @@ -7210,10 +7307,6 @@ msgstr " Der verfügbare Bestand für %(part)s ist unter das konfigurierte Minde msgid "Click on the following link to view this part" msgstr "Klicken Sie auf den folgenden Link, um diesen Teil anzuzeigen" -#: templates/email/low_stock_notification.html:17 -msgid "Total Stock" -msgstr "Gesamtbestand" - #: templates/email/low_stock_notification.html:19 msgid "Minimum Quantity" msgstr "Mindestmenge" @@ -7234,11 +7327,11 @@ msgstr "Der angegebene Server muss erreichbar sein" msgid "Remote image must not exceed maximum allowable file size" msgstr "Das Bild darf nicht größer als die maximal-erlaubte Größe sein" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1040 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1053 msgid "No Response" msgstr "Keine Antwort" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1041 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1054 msgid "No response from the InvenTree server" msgstr "keine Antwort vom InvenTree Server" @@ -7250,43 +7343,43 @@ msgstr "Fehler 400: Fehlerhafte Anfrage" msgid "API request returned error code 400" msgstr "Fehler-Code 400 zurückgegeben" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1063 msgid "Error 401: Not Authenticated" msgstr "Fehler 401: Nicht Angemeldet" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1051 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1064 msgid "Authentication credentials not supplied" msgstr "Authentication Kredentials nicht angegeben" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1068 msgid "Error 403: Permission Denied" msgstr "Fehler 403: keine Berechtigung" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1056 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1069 msgid "You do not have the required permissions to access this function" msgstr "Fehlende Berechtigung für diese Aktion" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1073 msgid "Error 404: Resource Not Found" msgstr "Fehler 404: Ressource nicht gefunden" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1061 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1074 msgid "The requested resource could not be located on the server" msgstr "Die angefragte Ressource kann auf diesem Server nicht gefunden werden" #: templates/js/translated/api.js:212 msgid "Error 405: Method Not Allowed" -msgstr "" +msgstr "Fehler 405: Methode nicht erlaubt" #: templates/js/translated/api.js:213 msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1065 +#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1078 msgid "Error 408: Timeout" msgstr "Fehler 408: Zeitüberschreitung" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1066 +#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1079 msgid "Connection timeout while requesting data from server" msgstr "Verbindungszeitüberschreitung bei der Datenanforderung" @@ -7355,7 +7448,7 @@ msgid "Unknown response from server" msgstr "Unbekannte Antwort von Server erhalten" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "Invalid server response" msgstr "Ungültige Antwort von Server" @@ -7383,7 +7476,7 @@ msgstr "Dadurch wird die Verknüpfung zwischen diesem Lagerartikel und dem Barco msgid "Unlink" msgstr "Entfernen" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1018 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1026 msgid "Remove stock item" msgstr "Lagerartikel entfernen" @@ -7427,15 +7520,15 @@ msgstr "Barcode entspricht keinem Lagerort" #: templates/js/translated/bom.js:36 msgid "Download BOM Template" -msgstr "" +msgstr "Vorlage einer Stückliste herunterladen" #: templates/js/translated/bom.js:39 templates/js/translated/bom.js:73 -#: templates/js/translated/order.js:369 templates/js/translated/stock.js:510 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:518 msgid "Format" msgstr "Format" #: templates/js/translated/bom.js:40 templates/js/translated/bom.js:74 -#: templates/js/translated/order.js:370 templates/js/translated/stock.js:511 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:519 msgid "Select file format" msgstr "Dateiformat auswählen" @@ -7491,87 +7584,87 @@ msgstr "Zulieferer-Daten in Stückliste-Export einschließen" msgid "Remove substitute part" msgstr "Ersatzteil entfernen" -#: templates/js/translated/bom.js:340 -msgid "Select and add a new variant item using the input below" -msgstr "Wählen Sie eine neue Variante aus und fügen Sie sie mit den folgenden Eingaben hinzu" +#: templates/js/translated/bom.js:352 +msgid "Select and add a new substitute part using the input below" +msgstr "" -#: templates/js/translated/bom.js:351 +#: templates/js/translated/bom.js:363 msgid "Are you sure you wish to remove this substitute part link?" msgstr "Sind Sie sicher, dass Sie dieses Ersatzteil entfernen möchten?" -#: templates/js/translated/bom.js:357 +#: templates/js/translated/bom.js:369 msgid "Remove Substitute Part" msgstr "Ersatzteil entfernen" -#: templates/js/translated/bom.js:396 +#: templates/js/translated/bom.js:408 msgid "Add Substitute" msgstr "Ersatzteil hinzufügen" -#: templates/js/translated/bom.js:397 +#: templates/js/translated/bom.js:409 msgid "Edit BOM Item Substitutes" msgstr "Stücklisten Ersatzteile bearbeiten" -#: templates/js/translated/bom.js:516 +#: templates/js/translated/bom.js:528 msgid "Substitutes Available" msgstr "Ersatzteile verfügbar" -#: templates/js/translated/bom.js:520 templates/js/translated/build.js:1171 +#: templates/js/translated/bom.js:532 templates/js/translated/build.js:1171 msgid "Variant stock allowed" msgstr "Varianten erlaubt" -#: templates/js/translated/bom.js:525 +#: templates/js/translated/bom.js:537 msgid "Open subassembly" msgstr "Unterbaugruppe öffnen" -#: templates/js/translated/bom.js:597 +#: templates/js/translated/bom.js:609 msgid "Substitutes" msgstr "Ersatzteile" -#: templates/js/translated/bom.js:612 +#: templates/js/translated/bom.js:624 msgid "Purchase Price Range" msgstr "Kaufpreisspanne" -#: templates/js/translated/bom.js:619 +#: templates/js/translated/bom.js:631 msgid "Purchase Price Average" msgstr "Durchschnittlicher Kaufpreis" -#: templates/js/translated/bom.js:668 templates/js/translated/bom.js:757 +#: templates/js/translated/bom.js:680 templates/js/translated/bom.js:769 msgid "View BOM" msgstr "Stückliste anzeigen" -#: templates/js/translated/bom.js:728 +#: templates/js/translated/bom.js:740 msgid "Validate BOM Item" msgstr "Stücklisten-Position kontrollieren" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:742 msgid "This line has been validated" msgstr "Diese Position wurde kontrolliert" -#: templates/js/translated/bom.js:732 +#: templates/js/translated/bom.js:744 msgid "Edit substitute parts" msgstr "Ersatzteile bearbeiten" -#: templates/js/translated/bom.js:734 templates/js/translated/bom.js:908 +#: templates/js/translated/bom.js:746 templates/js/translated/bom.js:920 msgid "Edit BOM Item" msgstr "Stücklisten-Position bearbeiten" -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:891 +#: templates/js/translated/bom.js:748 templates/js/translated/bom.js:903 msgid "Delete BOM Item" msgstr "Stücklisten-Position löschen" -#: templates/js/translated/bom.js:830 templates/js/translated/build.js:915 +#: templates/js/translated/bom.js:842 templates/js/translated/build.js:915 msgid "No BOM items found" msgstr "Keine Stücklisten-Position(en) gefunden" -#: templates/js/translated/bom.js:886 +#: templates/js/translated/bom.js:898 msgid "Are you sure you want to delete this BOM item?" msgstr "Sind Sie sicher, dass Sie diese Stücklisten-Position löschen wollen?" -#: templates/js/translated/bom.js:1086 templates/js/translated/build.js:1155 +#: templates/js/translated/bom.js:1100 templates/js/translated/build.js:1155 msgid "Required Part" msgstr "benötigtes Teil" -#: templates/js/translated/bom.js:1108 +#: templates/js/translated/bom.js:1122 msgid "Inherited from parent BOM" msgstr "Geerbt von übergeordneter Stückliste" @@ -7727,9 +7820,9 @@ msgstr "Keine passenden Lagerbestände" msgid "No builds matching query" msgstr "Keine Bauaufträge passen zur Anfrage" -#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1206 -#: templates/js/translated/part.js:1617 templates/js/translated/stock.js:1512 -#: templates/js/translated/stock.js:2321 +#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:1624 templates/js/translated/stock.js:1520 +#: templates/js/translated/stock.js:2479 msgid "Select" msgstr "Auswählen" @@ -7737,7 +7830,7 @@ msgstr "Auswählen" msgid "Build order is overdue" msgstr "Bauauftrag ist überfällig" -#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2540 +#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2698 msgid "No user information" msgstr "Keine Benutzerinformation" @@ -7810,34 +7903,34 @@ msgid "No manufacturer parts found" msgstr "Keine Herstellerteile gefunden" #: templates/js/translated/company.js:500 -#: templates/js/translated/company.js:757 templates/js/translated/part.js:511 -#: templates/js/translated/part.js:596 +#: templates/js/translated/company.js:757 templates/js/translated/part.js:517 +#: templates/js/translated/part.js:602 msgid "Template part" msgstr "Vorlagenteil" #: templates/js/translated/company.js:504 -#: templates/js/translated/company.js:761 templates/js/translated/part.js:515 -#: templates/js/translated/part.js:600 +#: templates/js/translated/company.js:761 templates/js/translated/part.js:521 +#: templates/js/translated/part.js:606 msgid "Assembled part" msgstr "Baugruppe" -#: templates/js/translated/company.js:631 templates/js/translated/part.js:690 +#: templates/js/translated/company.js:631 templates/js/translated/part.js:696 msgid "No parameters found" msgstr "Keine Parameter gefunden" -#: templates/js/translated/company.js:668 templates/js/translated/part.js:732 +#: templates/js/translated/company.js:668 templates/js/translated/part.js:738 msgid "Edit parameter" msgstr "Parameter bearbeiten" -#: templates/js/translated/company.js:669 templates/js/translated/part.js:733 +#: templates/js/translated/company.js:669 templates/js/translated/part.js:739 msgid "Delete parameter" msgstr "Parameter löschen" -#: templates/js/translated/company.js:688 templates/js/translated/part.js:750 +#: templates/js/translated/company.js:688 templates/js/translated/part.js:756 msgid "Edit Parameter" msgstr "Parameter bearbeiten" -#: templates/js/translated/company.js:699 templates/js/translated/part.js:762 +#: templates/js/translated/company.js:699 templates/js/translated/part.js:768 msgid "Delete Parameter" msgstr "Parameter löschen" @@ -7846,12 +7939,12 @@ msgid "No supplier parts found" msgstr "Keine Zuliefererteile gefunden" #: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:420 +#: templates/js/translated/filters.js:429 msgid "true" msgstr "ja" #: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:421 +#: templates/js/translated/filters.js:430 msgid "false" msgstr "nein" @@ -7871,7 +7964,7 @@ msgstr "Filter hinzufügen" msgid "Clear all filters" msgstr "Filter entfernen" -#: templates/js/translated/filters.js:329 +#: templates/js/translated/filters.js:338 msgid "Create filter" msgstr "Filter anlegen" @@ -7900,20 +7993,20 @@ msgstr "Anzeigevorgang nicht erlaubt" msgid "Enter a valid number" msgstr "Gib eine gültige Nummer ein" -#: templates/js/translated/forms.js:1080 templates/modals.html:19 +#: templates/js/translated/forms.js:1082 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Fehler in Formular" -#: templates/js/translated/forms.js:1471 +#: templates/js/translated/forms.js:1487 msgid "No results found" msgstr "Keine Ergebnisse gefunden" -#: templates/js/translated/forms.js:1675 +#: templates/js/translated/forms.js:1691 msgid "Searching" msgstr "Suche" -#: templates/js/translated/forms.js:1895 +#: templates/js/translated/forms.js:1930 msgid "Clear input" msgstr "Eingabe leeren" @@ -7926,7 +8019,7 @@ msgid "NO" msgstr "NEIN" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1042 +#: templates/js/translated/stock.js:1050 msgid "Select Stock Items" msgstr "Lagerartikel auswählen" @@ -7976,12 +8069,12 @@ msgid "Select Label Template" msgstr "Label-Vorlage auswählen" #: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 -#: templates/js/translated/modals.js:599 +#: templates/js/translated/modals.js:610 msgid "Cancel" msgstr "Abbrechen" #: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:666 templates/js/translated/modals.js:969 +#: templates/js/translated/modals.js:677 templates/js/translated/modals.js:982 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Abschicken" @@ -7990,47 +8083,47 @@ msgstr "Abschicken" msgid "Form Title" msgstr "Formulartitel" -#: templates/js/translated/modals.js:381 +#: templates/js/translated/modals.js:392 msgid "Waiting for server..." msgstr "Warte auf Server..." -#: templates/js/translated/modals.js:540 +#: templates/js/translated/modals.js:551 msgid "Show Error Information" msgstr "Fehler-Informationen anzeigen" -#: templates/js/translated/modals.js:598 +#: templates/js/translated/modals.js:609 msgid "Accept" msgstr "Akzeptieren" -#: templates/js/translated/modals.js:655 +#: templates/js/translated/modals.js:666 msgid "Loading Data" msgstr "Lade Daten" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Invalid response from server" msgstr "ungültige Antwort vom Server" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Form data missing from server response" msgstr "Formulardaten fehlen bei Serverantwort" -#: templates/js/translated/modals.js:933 +#: templates/js/translated/modals.js:946 msgid "Error posting form data" msgstr "Formulardaten fehlerhaft" -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "JSON response missing form data" msgstr "JSON Antwort enthält keine Formulardaten" -#: templates/js/translated/modals.js:1045 +#: templates/js/translated/modals.js:1058 msgid "Error 400: Bad Request" msgstr "Fehler 400: Ungültige Anfrage" -#: templates/js/translated/modals.js:1046 +#: templates/js/translated/modals.js:1059 msgid "Server returned error code 400" msgstr "Fehler 400 von Server erhalten" -#: templates/js/translated/modals.js:1069 +#: templates/js/translated/modals.js:1082 msgid "Error requesting form data" msgstr "Fehler bei Formulardaten-Anfrage" @@ -8054,45 +8147,46 @@ msgstr "Bauauftrag-ID" msgid "Part ID" msgstr "Teil-ID" -#: templates/js/translated/model_renderers.js:236 +#: templates/js/translated/model_renderers.js:249 +#: templates/js/translated/model_renderers.js:270 msgid "Order ID" msgstr "Bestell-ID" -#: templates/js/translated/model_renderers.js:253 +#: templates/js/translated/model_renderers.js:287 msgid "Shipment ID" -msgstr "" +msgstr "Sendungs-ID" -#: templates/js/translated/model_renderers.js:273 +#: templates/js/translated/model_renderers.js:307 msgid "Category ID" msgstr "Kategorie-ID" -#: templates/js/translated/model_renderers.js:310 +#: templates/js/translated/model_renderers.js:344 msgid "Manufacturer Part ID" msgstr "Herstellerteil-ID" -#: templates/js/translated/model_renderers.js:339 +#: templates/js/translated/model_renderers.js:373 msgid "Supplier Part ID" msgstr "Zuliefererteil-ID" #: templates/js/translated/order.js:75 msgid "No stock items have been allocated to this shipment" -msgstr "" +msgstr "Dieser Sendung wurden keine Artikel zugewiesen" #: templates/js/translated/order.js:80 msgid "The following stock items will be shipped" -msgstr "" +msgstr "Die folgenden Artikel werden verschickt" #: templates/js/translated/order.js:120 msgid "Complete Shipment" -msgstr "" +msgstr "Sendung fertigstellen" #: templates/js/translated/order.js:126 msgid "Confirm Shipment" -msgstr "" +msgstr "Sendung bestätigen" #: templates/js/translated/order.js:181 msgid "Create New Shipment" -msgstr "" +msgstr "Sendung anlegen" #: templates/js/translated/order.js:206 msgid "Add Customer" @@ -8118,7 +8212,7 @@ msgstr "Mindestens eine Position muss ausgewählt werden" msgid "Quantity to receive" msgstr "Zu erhaltende Menge" -#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2123 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2131 msgid "Stock Status" msgstr "Status" @@ -8142,7 +8236,7 @@ msgstr "Empfang der Teile bestätigen" msgid "Receive Purchase Order Items" msgstr "Bestellpositionen erhalten" -#: templates/js/translated/order.js:790 templates/js/translated/part.js:803 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:809 msgid "No purchase orders found" msgstr "Keine Bestellungen gefunden" @@ -8167,7 +8261,7 @@ msgid "Total" msgstr "Summe" #: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 -#: templates/js/translated/part.js:1834 templates/js/translated/part.js:2045 +#: templates/js/translated/part.js:1841 templates/js/translated/part.js:2052 msgid "Unit Price" msgstr "Stück-Preis" @@ -8183,7 +8277,7 @@ msgstr "Position bearbeiten" msgid "Delete line item" msgstr "Position löschen" -#: templates/js/translated/order.js:1166 templates/js/translated/part.js:935 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:942 msgid "Receive line item" msgstr "Position empfangen" @@ -8197,43 +8291,43 @@ msgstr "Ungültiger Kunde" #: templates/js/translated/order.js:1322 msgid "Edit shipment" -msgstr "" +msgstr "Sendung bearbeiten" #: templates/js/translated/order.js:1325 msgid "Complete shipment" -msgstr "" +msgstr "Sendung fertigstellen" #: templates/js/translated/order.js:1330 msgid "Delete shipment" -msgstr "" +msgstr "Sendung löschen" #: templates/js/translated/order.js:1350 msgid "Edit Shipment" -msgstr "" +msgstr "Sendung bearbeiten" #: templates/js/translated/order.js:1367 msgid "Delete Shipment" -msgstr "" +msgstr "Sendung löschen" #: templates/js/translated/order.js:1401 msgid "No matching shipments found" -msgstr "" +msgstr "Keine passenden Sendungen gefunden" #: templates/js/translated/order.js:1411 msgid "Shipment Reference" -msgstr "" +msgstr "Sendungsreferenz" #: templates/js/translated/order.js:1435 msgid "Not shipped" -msgstr "" +msgstr "Nicht versandt" #: templates/js/translated/order.js:1441 msgid "Tracking" -msgstr "" +msgstr "Nachverfolgen" #: templates/js/translated/order.js:1601 msgid "Allocate Stock Items to Sales Order" -msgstr "" +msgstr "Artikel zu Kundenauftrag zuweisen" #: templates/js/translated/order.js:1809 msgid "No sales order allocations found" @@ -8252,7 +8346,7 @@ msgid "Delete Stock Allocation" msgstr "Bestands-Zuordnung löschen" #: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 -#: templates/js/translated/stock.js:1428 +#: templates/js/translated/stock.js:1436 msgid "Shipped to customer" msgstr "an Kunde versand" @@ -8274,11 +8368,11 @@ msgstr "Preis berechnen" #: templates/js/translated/order.js:2321 msgid "Cannot be deleted as items have been shipped" -msgstr "" +msgstr "Kann nicht gelöscht werden, da Artikel versandt wurden" #: templates/js/translated/order.js:2324 msgid "Cannot be deleted as items have been allocated" -msgstr "" +msgstr "Kann nicht gelöscht werden, da Artikel zugewiesen sind" #: templates/js/translated/order.js:2382 msgid "Allocate Serial Numbers" @@ -8380,150 +8474,154 @@ msgstr "Teil bearbeiten" msgid "Part edited" msgstr "Teil bearbeitet" -#: templates/js/translated/part.js:412 +#: templates/js/translated/part.js:351 +msgid "Create Part Variant" +msgstr "Teil-Variante anlegen" + +#: templates/js/translated/part.js:418 msgid "You are subscribed to notifications for this item" msgstr "Sie haben Benachrichtigungen für dieses Teil abonniert" -#: templates/js/translated/part.js:414 +#: templates/js/translated/part.js:420 msgid "You have subscribed to notifications for this item" msgstr "Sie haben Benachrichtigungen für dieses Teil abonniert" -#: templates/js/translated/part.js:419 +#: templates/js/translated/part.js:425 msgid "Subscribe to notifications for this item" msgstr "Benachrichtigungen für dieses Teil abonnieren" -#: templates/js/translated/part.js:421 +#: templates/js/translated/part.js:427 msgid "You have unsubscribed to notifications for this item" msgstr "Sie haben Benachrichtigungen für dieses Teil abgemeldet" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:444 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:448 +#: templates/js/translated/part.js:454 msgid "Validate Bill of Materials" -msgstr "" +msgstr "Stückliste prüfen" -#: templates/js/translated/part.js:451 +#: templates/js/translated/part.js:457 msgid "Validated Bill of Materials" msgstr "überprüfte Stückliste" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:481 msgid "Copy Bill of Materials" -msgstr "" +msgstr "Stückliste kopieren" -#: templates/js/translated/part.js:503 templates/js/translated/part.js:588 +#: templates/js/translated/part.js:509 templates/js/translated/part.js:594 msgid "Trackable part" msgstr "Nachverfolgbares Teil" -#: templates/js/translated/part.js:507 templates/js/translated/part.js:592 +#: templates/js/translated/part.js:513 templates/js/translated/part.js:598 msgid "Virtual part" msgstr "virtuelles Teil" -#: templates/js/translated/part.js:519 +#: templates/js/translated/part.js:525 msgid "Subscribed part" msgstr "Abonnierter Teil" -#: templates/js/translated/part.js:523 +#: templates/js/translated/part.js:529 msgid "Salable part" msgstr "Verkäufliches Teil" -#: templates/js/translated/part.js:638 +#: templates/js/translated/part.js:644 msgid "No variants found" msgstr "Keine Varianten gefunden" -#: templates/js/translated/part.js:1005 +#: templates/js/translated/part.js:1012 msgid "Delete part relationship" msgstr "Teile-Beziehung löschen" -#: templates/js/translated/part.js:1029 +#: templates/js/translated/part.js:1036 msgid "Delete Part Relationship" msgstr "Teile-Beziehung löschen" -#: templates/js/translated/part.js:1096 templates/js/translated/part.js:1356 +#: templates/js/translated/part.js:1103 templates/js/translated/part.js:1363 msgid "No parts found" msgstr "Keine Teile gefunden" -#: templates/js/translated/part.js:1266 +#: templates/js/translated/part.js:1273 msgid "No category" msgstr "Keine Kategorie" -#: templates/js/translated/part.js:1289 +#: templates/js/translated/part.js:1296 #: templates/js/translated/table_filters.js:430 msgid "Low stock" msgstr "Bestand niedrig" -#: templates/js/translated/part.js:1380 templates/js/translated/part.js:1552 -#: templates/js/translated/stock.js:2282 +#: templates/js/translated/part.js:1387 templates/js/translated/part.js:1559 +#: templates/js/translated/stock.js:2440 msgid "Display as list" msgstr "Listenansicht" -#: templates/js/translated/part.js:1396 +#: templates/js/translated/part.js:1403 msgid "Display as grid" msgstr "Rasteransicht" -#: templates/js/translated/part.js:1571 templates/js/translated/stock.js:2301 +#: templates/js/translated/part.js:1578 templates/js/translated/stock.js:2459 msgid "Display as tree" msgstr "Baumansicht" -#: templates/js/translated/part.js:1635 +#: templates/js/translated/part.js:1642 msgid "Subscribed category" msgstr "Abonnierte Kategorie" -#: templates/js/translated/part.js:1649 templates/js/translated/stock.js:2345 +#: templates/js/translated/part.js:1656 templates/js/translated/stock.js:2503 msgid "Path" msgstr "Pfad" -#: templates/js/translated/part.js:1693 +#: templates/js/translated/part.js:1700 msgid "No test templates matching query" msgstr "Keine zur Anfrage passenden Testvorlagen" -#: templates/js/translated/part.js:1744 templates/js/translated/stock.js:1234 +#: templates/js/translated/part.js:1751 templates/js/translated/stock.js:1242 msgid "Edit test result" msgstr "Testergebnis bearbeiten" -#: templates/js/translated/part.js:1745 templates/js/translated/stock.js:1235 +#: templates/js/translated/part.js:1752 templates/js/translated/stock.js:1243 msgid "Delete test result" msgstr "Testergebnis löschen" -#: templates/js/translated/part.js:1751 +#: templates/js/translated/part.js:1758 msgid "This test is defined for a parent part" msgstr "Dieses Testergebnis ist für ein Hauptteil" -#: templates/js/translated/part.js:1773 +#: templates/js/translated/part.js:1780 msgid "Edit Test Result Template" msgstr "Testergebnis-Vorlage bearbeiten" -#: templates/js/translated/part.js:1787 +#: templates/js/translated/part.js:1794 msgid "Delete Test Result Template" msgstr "Testergebnis-Vorlage löschen" -#: templates/js/translated/part.js:1812 +#: templates/js/translated/part.js:1819 #, python-brace-format msgid "No ${human_name} information found" msgstr "Keine ${human_name} Informationen gefunden" -#: templates/js/translated/part.js:1867 +#: templates/js/translated/part.js:1874 #, python-brace-format msgid "Edit ${human_name}" msgstr "${human_name} bearbeiten" -#: templates/js/translated/part.js:1868 +#: templates/js/translated/part.js:1875 #, python-brace-format msgid "Delete ${human_name}" msgstr "${human_name} löschen" -#: templates/js/translated/part.js:1969 +#: templates/js/translated/part.js:1976 msgid "Single Price" msgstr "Einzelpreis" -#: templates/js/translated/part.js:1988 +#: templates/js/translated/part.js:1995 msgid "Single Price Difference" msgstr "Einzelpreisdifferenz" #: templates/js/translated/plugin.js:22 msgid "The Plugin was installed" -msgstr "" +msgstr "Das Plugin wurde installiert" #: templates/js/translated/report.js:67 msgid "items selected" @@ -8591,340 +8689,344 @@ msgstr "Aufträge auswählen" msgid "Sales Order(s) must be selected before printing report" msgstr "Auftrag muss vor dem Berichtsdruck ausgewählt werden" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:74 msgid "Serialize Stock Item" msgstr "Lagerartikel serialisieren" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:181 msgid "Next available serial number" msgstr "Nächste verfügbare Seriennummer" -#: templates/js/translated/stock.js:93 templates/js/translated/stock.js:175 +#: templates/js/translated/stock.js:94 templates/js/translated/stock.js:183 msgid "Latest serial number" msgstr "Letzte Seriennummer" -#: templates/js/translated/stock.js:101 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "Lager-Serialisierung bestätigen" -#: templates/js/translated/stock.js:110 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "Übergeordneter Lagerort" -#: templates/js/translated/stock.js:146 +#: templates/js/translated/stock.js:154 msgid "New Stock Location" msgstr "Neuer Lagerstandort" -#: templates/js/translated/stock.js:186 +#: templates/js/translated/stock.js:194 msgid "This part cannot be serialized" msgstr "Dieser Teil kann nicht serialisiert werden" -#: templates/js/translated/stock.js:225 +#: templates/js/translated/stock.js:233 msgid "Enter initial quantity for this stock item" msgstr "Ausgangsmenge für diesen Lagerartikel eingeben" -#: templates/js/translated/stock.js:231 +#: templates/js/translated/stock.js:239 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "Seriennummern für neue Lagerartikel eingeben (oder leer lassen)" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:382 msgid "Created new stock item" msgstr "Neuer Lagerartikel erstellt" -#: templates/js/translated/stock.js:387 +#: templates/js/translated/stock.js:395 msgid "Created multiple stock items" msgstr "Mehrere Lagerartikel erstellt" -#: templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:420 msgid "Find Serial Number" msgstr "Seriennummer finden" -#: templates/js/translated/stock.js:416 templates/js/translated/stock.js:417 +#: templates/js/translated/stock.js:424 templates/js/translated/stock.js:425 msgid "Enter serial number" msgstr "Seriennummer eingeben" -#: templates/js/translated/stock.js:433 +#: templates/js/translated/stock.js:441 msgid "Enter a serial number" msgstr "Eine Seriennummer eingeben" -#: templates/js/translated/stock.js:453 +#: templates/js/translated/stock.js:461 msgid "No matching serial number" msgstr "Keine passende Seriennummer" -#: templates/js/translated/stock.js:462 +#: templates/js/translated/stock.js:470 msgid "More than one matching result found" msgstr "Mehrere Ergebnisse gefunden" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:515 msgid "Export Stock" msgstr "Bestand exportieren" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:526 msgid "Include Sublocations" msgstr "Einschließlich Unterstandorte" -#: templates/js/translated/stock.js:519 +#: templates/js/translated/stock.js:527 msgid "Include stock items in sublocations" msgstr "Lagerartikel in untergeordneten Lagerorten einschließen" -#: templates/js/translated/stock.js:628 +#: templates/js/translated/stock.js:636 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:629 +#: templates/js/translated/stock.js:637 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:714 msgid "Warning: Merge operation cannot be reversed" -msgstr "" +msgstr "Achtung: Das Zusammenführen kann nicht rückgängig gemacht werden" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:715 msgid "Some information will be lost when merging stock items" -msgstr "" +msgstr "Einige Informationen gehen verloren, wenn Artikel zusammengeführt werden" -#: templates/js/translated/stock.js:709 +#: templates/js/translated/stock.js:717 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:710 +#: templates/js/translated/stock.js:718 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:796 +#: templates/js/translated/stock.js:804 msgid "Confirm stock item merge" -msgstr "" +msgstr "Zusammenführung der Artikel bestätigen" -#: templates/js/translated/stock.js:797 +#: templates/js/translated/stock.js:805 msgid "Merge Stock Items" -msgstr "" +msgstr "Artikel zusammenführen" -#: templates/js/translated/stock.js:892 +#: templates/js/translated/stock.js:900 msgid "Transfer Stock" msgstr "Bestand verschieben" -#: templates/js/translated/stock.js:893 +#: templates/js/translated/stock.js:901 msgid "Move" msgstr "Verschieben" -#: templates/js/translated/stock.js:899 +#: templates/js/translated/stock.js:907 msgid "Count Stock" msgstr "Bestand zählen" -#: templates/js/translated/stock.js:900 +#: templates/js/translated/stock.js:908 msgid "Count" msgstr "Anzahl" -#: templates/js/translated/stock.js:904 +#: templates/js/translated/stock.js:912 msgid "Remove Stock" msgstr "Bestand entfernen" -#: templates/js/translated/stock.js:905 +#: templates/js/translated/stock.js:913 msgid "Take" msgstr "Entfernen" -#: templates/js/translated/stock.js:909 +#: templates/js/translated/stock.js:917 msgid "Add Stock" msgstr "Bestand hinzufügen" -#: templates/js/translated/stock.js:910 users/models.py:206 +#: templates/js/translated/stock.js:918 users/models.py:208 msgid "Add" msgstr "Hinzufügen" -#: templates/js/translated/stock.js:914 templates/stock_table.html:58 +#: templates/js/translated/stock.js:922 templates/stock_table.html:58 msgid "Delete Stock" msgstr "Bestand löschen" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Quantity cannot be adjusted for serialized stock" msgstr "Menge von serialisiertem Bestand kann nicht bearbeitet werden" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Specify stock quantity" msgstr "Bestandsanzahl angeben" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1051 msgid "You must select at least one available stock item" msgstr "Sie müssen mindestens einen Lagerartikel auswählen" -#: templates/js/translated/stock.js:1201 +#: templates/js/translated/stock.js:1209 msgid "PASS" msgstr "ERFOLGREICH" -#: templates/js/translated/stock.js:1203 +#: templates/js/translated/stock.js:1211 msgid "FAIL" msgstr "FEHLGESCHLAGEN" -#: templates/js/translated/stock.js:1208 +#: templates/js/translated/stock.js:1216 msgid "NO RESULT" msgstr "KEIN ERGEBNIS" -#: templates/js/translated/stock.js:1230 +#: templates/js/translated/stock.js:1238 msgid "Add test result" msgstr "Testergebnis hinzufügen" -#: templates/js/translated/stock.js:1256 +#: templates/js/translated/stock.js:1264 msgid "No test results found" msgstr "Keine Testergebnisse gefunden" -#: templates/js/translated/stock.js:1313 +#: templates/js/translated/stock.js:1321 msgid "Test Date" msgstr "Testdatum" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1428 msgid "In production" msgstr "In Arbeit" -#: templates/js/translated/stock.js:1424 +#: templates/js/translated/stock.js:1432 msgid "Installed in Stock Item" msgstr "In Lagerartikel installiert" -#: templates/js/translated/stock.js:1432 +#: templates/js/translated/stock.js:1440 msgid "Assigned to Sales Order" msgstr "Auftrag zugewiesen" -#: templates/js/translated/stock.js:1438 +#: templates/js/translated/stock.js:1446 msgid "No stock location set" msgstr "Kein Lagerort gesetzt" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1604 msgid "Stock item is in production" msgstr "Lagerartikel wird produziert" -#: templates/js/translated/stock.js:1601 +#: templates/js/translated/stock.js:1609 msgid "Stock item assigned to sales order" msgstr "Lagerartikel wurde Auftrag zugewiesen" -#: templates/js/translated/stock.js:1604 +#: templates/js/translated/stock.js:1612 msgid "Stock item assigned to customer" msgstr "Lagerartikel wurde Kunden zugewiesen" -#: templates/js/translated/stock.js:1608 +#: templates/js/translated/stock.js:1616 msgid "Stock item has expired" msgstr "Lagerartikel ist abgelaufen" -#: templates/js/translated/stock.js:1610 +#: templates/js/translated/stock.js:1618 msgid "Stock item will expire soon" msgstr "Lagerartikel läuft demnächst ab" -#: templates/js/translated/stock.js:1616 +#: templates/js/translated/stock.js:1624 msgid "Serialized stock item has been allocated" msgstr "Serialisierter Lagerartikel wurde zugewiesen" -#: templates/js/translated/stock.js:1618 +#: templates/js/translated/stock.js:1626 msgid "Stock item has been fully allocated" msgstr "Lagerartikel wurde vollständig zugewiesen" -#: templates/js/translated/stock.js:1620 +#: templates/js/translated/stock.js:1628 msgid "Stock item has been partially allocated" msgstr "Lagerartikel wurde teilweise zugewiesen" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1633 msgid "Stock item has been installed in another item" msgstr "Lagerartikel in anderem Element verbaut" -#: templates/js/translated/stock.js:1632 +#: templates/js/translated/stock.js:1640 msgid "Stock item has been rejected" msgstr "Lagerartikel abgewiesen" -#: templates/js/translated/stock.js:1634 +#: templates/js/translated/stock.js:1642 msgid "Stock item is lost" msgstr "Lagerartikel verloren" -#: templates/js/translated/stock.js:1636 +#: templates/js/translated/stock.js:1644 msgid "Stock item is destroyed" msgstr "Lagerartikel zerstört" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1648 #: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "gelöscht" -#: templates/js/translated/stock.js:1690 +#: templates/js/translated/stock.js:1698 msgid "Stocktake" msgstr "Inventur" -#: templates/js/translated/stock.js:1763 +#: templates/js/translated/stock.js:1771 msgid "Supplier part not specified" msgstr "Zuliefererteil nicht angegeben" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1809 msgid "No stock items matching query" msgstr "Keine zur Anfrage passenden Lagerartikel" -#: templates/js/translated/stock.js:1822 templates/js/translated/stock.js:1870 +#: templates/js/translated/stock.js:1830 templates/js/translated/stock.js:1878 msgid "items" msgstr "Teile" -#: templates/js/translated/stock.js:1910 +#: templates/js/translated/stock.js:1918 msgid "batches" msgstr "lose" -#: templates/js/translated/stock.js:1937 +#: templates/js/translated/stock.js:1945 msgid "locations" msgstr "Lagerorte" -#: templates/js/translated/stock.js:1939 +#: templates/js/translated/stock.js:1947 msgid "Undefined location" msgstr "unbekannter Lagerort" -#: templates/js/translated/stock.js:2138 +#: templates/js/translated/stock.js:2146 msgid "Set Stock Status" msgstr "Status setzen" -#: templates/js/translated/stock.js:2152 +#: templates/js/translated/stock.js:2160 msgid "Select Status Code" msgstr "Status Code setzen" -#: templates/js/translated/stock.js:2153 +#: templates/js/translated/stock.js:2161 msgid "Status code must be selected" msgstr "Status Code muss ausgewählt werden" -#: templates/js/translated/stock.js:2377 +#: templates/js/translated/stock.js:2340 +msgid "Allocated Quantity" +msgstr "" + +#: templates/js/translated/stock.js:2535 msgid "Invalid date" msgstr "Ungültiges Datum" -#: templates/js/translated/stock.js:2399 +#: templates/js/translated/stock.js:2557 msgid "Details" msgstr "Details" -#: templates/js/translated/stock.js:2424 +#: templates/js/translated/stock.js:2582 msgid "Location no longer exists" msgstr "Standort nicht mehr vorhanden" -#: templates/js/translated/stock.js:2443 +#: templates/js/translated/stock.js:2601 msgid "Purchase order no longer exists" msgstr "Bestellung existiert nicht mehr" -#: templates/js/translated/stock.js:2462 +#: templates/js/translated/stock.js:2620 msgid "Customer no longer exists" msgstr "Kunde existiert nicht mehr" -#: templates/js/translated/stock.js:2480 +#: templates/js/translated/stock.js:2638 msgid "Stock item no longer exists" msgstr "Lagerartikel existiert nicht mehr" -#: templates/js/translated/stock.js:2503 +#: templates/js/translated/stock.js:2661 msgid "Added" msgstr "Hinzugefügt" -#: templates/js/translated/stock.js:2511 +#: templates/js/translated/stock.js:2669 msgid "Removed" msgstr "Entfernt" -#: templates/js/translated/stock.js:2552 +#: templates/js/translated/stock.js:2710 msgid "Edit tracking entry" msgstr "Tracking-Eintrag bearbeiten" -#: templates/js/translated/stock.js:2553 +#: templates/js/translated/stock.js:2711 msgid "Delete tracking entry" msgstr "Tracking-Eintrag löschen" -#: templates/js/translated/stock.js:2604 +#: templates/js/translated/stock.js:2762 msgid "No installed items" msgstr "Keine installierten Elemente" -#: templates/js/translated/stock.js:2655 +#: templates/js/translated/stock.js:2813 msgid "Uninstall Stock Item" msgstr "Lagerartikel entfernen" @@ -9141,7 +9243,7 @@ msgstr "Zeilen pro Seite" #: templates/js/translated/tables.js:376 msgid "Showing all rows" -msgstr "" +msgstr "Alle Zeilen anzeigen" #: templates/js/translated/tables.js:378 msgid "Showing" @@ -9196,11 +9298,11 @@ msgstr "Kaufen" msgid "Sell" msgstr "Verkaufen" -#: templates/navbar.html:113 +#: templates/navbar.html:114 msgid "Logout" msgstr "Ausloggen" -#: templates/navbar.html:115 +#: templates/navbar.html:116 msgid "Login" msgstr "Einloggen" @@ -9248,31 +9350,43 @@ msgstr "Docker-Modus" msgid "Server is deployed using docker" msgstr "Server wird mit Docker bereitgestellt" -#: templates/stats.html:40 +#: templates/stats.html:39 +msgid "Plugin Support" +msgstr "Plugin-Unterstützung" + +#: templates/stats.html:43 +msgid "Plugin support enabled" +msgstr "Plugin-Unterstützung aktiviert" + +#: templates/stats.html:45 +msgid "Plugin support disabled" +msgstr "Plugin-Unterstützung deaktiviert" + +#: templates/stats.html:52 msgid "Server status" msgstr "Serverstatus" -#: templates/stats.html:43 +#: templates/stats.html:55 msgid "Healthy" msgstr "Gesund" -#: templates/stats.html:45 +#: templates/stats.html:57 msgid "Issues detected" msgstr "Probleme erkannt" -#: templates/stats.html:52 +#: templates/stats.html:64 msgid "Background Worker" msgstr "Hintergrund-Prozess" -#: templates/stats.html:55 +#: templates/stats.html:67 msgid "Background worker not running" msgstr "Hintergrund-Prozess läuft nicht" -#: templates/stats.html:63 +#: templates/stats.html:75 msgid "Email Settings" msgstr "E-Mail-Einstellungen" -#: templates/stats.html:66 +#: templates/stats.html:78 msgid "Email settings not configured" msgstr "E-Mail-Einstellungen nicht konfiguriert" @@ -9314,11 +9428,11 @@ msgstr "Bestand verschieben" #: templates/stock_table.html:52 msgid "Merge selected stock items" -msgstr "" +msgstr "Ausgewählte Artikel zusammenführen" #: templates/stock_table.html:52 msgid "Merge stock" -msgstr "" +msgstr "Bestand zusammenführen" #: templates/stock_table.html:53 msgid "Order selected items" @@ -9368,35 +9482,35 @@ msgstr "Berechtigungen" msgid "Important dates" msgstr "wichtige Daten" -#: users/models.py:193 +#: users/models.py:195 msgid "Permission set" msgstr "Berechtigung geändert" -#: users/models.py:201 +#: users/models.py:203 msgid "Group" msgstr "Gruppe" -#: users/models.py:204 +#: users/models.py:206 msgid "View" msgstr "Ansicht" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to view items" msgstr "Berechtigung Einträge anzuzeigen" -#: users/models.py:206 +#: users/models.py:208 msgid "Permission to add items" msgstr "Berechtigung Einträge zu erstellen" -#: users/models.py:208 +#: users/models.py:210 msgid "Change" msgstr "Ändern" -#: users/models.py:208 +#: users/models.py:210 msgid "Permissions to edit items" msgstr "Berechtigungen Einträge zu ändern" -#: users/models.py:210 +#: users/models.py:212 msgid "Permission to delete items" msgstr "Berechtigung Einträge zu löschen" diff --git a/InvenTree/locale/el/LC_MESSAGES/django.po b/InvenTree/locale/el/LC_MESSAGES/django.po index f036c87833..8caeacf059 100644 --- a/InvenTree/locale/el/LC_MESSAGES/django.po +++ b/InvenTree/locale/el/LC_MESSAGES/django.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-10 03:54+0000\n" -"PO-Revision-Date: 2022-01-10 03:57\n" +"POT-Creation-Date: 2022-01-29 00:17+0000\n" +"PO-Revision-Date: 2022-01-29 01:11\n" "Last-Translator: \n" "Language-Team: Greek\n" "Language: el_GR\n" @@ -18,15 +18,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 138\n" -#: InvenTree/api.py:64 +#: InvenTree/api.py:55 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:110 +#: InvenTree/api.py:101 msgid "No action specified" msgstr "" -#: InvenTree/api.py:124 +#: InvenTree/api.py:116 msgid "No matching action found" msgstr "" @@ -80,41 +80,41 @@ msgstr "" msgid "You must type the same email each time." msgstr "" -#: InvenTree/helpers.py:437 +#: InvenTree/helpers.py:439 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:444 order/models.py:279 order/models.py:420 +#: InvenTree/helpers.py:446 order/models.py:282 order/models.py:425 #: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:447 +#: InvenTree/helpers.py:449 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:469 InvenTree/helpers.py:472 InvenTree/helpers.py:475 -#: InvenTree/helpers.py:500 +#: InvenTree/helpers.py:471 InvenTree/helpers.py:474 InvenTree/helpers.py:477 +#: InvenTree/helpers.py:502 #, python-brace-format msgid "Invalid group: {g}" msgstr "" -#: InvenTree/helpers.py:510 +#: InvenTree/helpers.py:512 #, python-brace-format msgid "Invalid group {group}" msgstr "" -#: InvenTree/helpers.py:516 +#: InvenTree/helpers.py:518 #, python-brace-format msgid "Invalid/no group {group}" msgstr "" -#: InvenTree/helpers.py:522 +#: InvenTree/helpers.py:524 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:526 +#: InvenTree/helpers.py:528 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" @@ -127,7 +127,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1967 +#: InvenTree/models.py:132 stock/models.py:1995 #: templates/js/translated/attachment.js:119 msgid "Attachment" msgstr "" @@ -137,15 +137,15 @@ msgid "Select file to attach" msgstr "" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:124 part/models.py:828 +#: company/models.py:564 order/models.py:127 part/models.py:830 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:540 -#: templates/js/translated/company.js:829 templates/js/translated/part.js:1317 +#: templates/js/translated/company.js:829 templates/js/translated/part.js:1324 msgid "Link" msgstr "" -#: InvenTree/models.py:140 build/models.py:330 part/models.py:829 -#: stock/models.py:527 +#: InvenTree/models.py:140 build/models.py:332 part/models.py:831 +#: stock/models.py:529 msgid "Link to external URL" msgstr "" @@ -157,10 +157,11 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 -#: common/models.py:1214 part/models.py:2258 part/models.py:2278 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1223 +#: common/models.py:1224 common/models.py:1452 common/models.py:1453 +#: part/models.py:2265 part/models.py:2285 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2534 +#: templates/js/translated/stock.js:2692 msgid "User" msgstr "" @@ -197,42 +198,42 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 -#: label/models.py:112 part/models.py:772 part/models.py:2442 -#: plugin/models.py:40 report/models.py:181 +#: InvenTree/models.py:277 InvenTree/models.py:278 common/models.py:1438 +#: company/models.py:415 label/models.py:112 part/models.py:774 +#: part/models.py:2449 plugin/models.py:40 report/models.py:181 #: templates/InvenTree/settings/mixins/urls.html:13 -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:125 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:279 -#: templates/js/translated/company.js:641 templates/js/translated/part.js:561 -#: templates/js/translated/part.js:700 templates/js/translated/part.js:1624 -#: templates/js/translated/stock.js:2327 +#: templates/InvenTree/settings/settings.html:282 +#: templates/js/translated/company.js:641 templates/js/translated/part.js:567 +#: templates/js/translated/part.js:706 templates/js/translated/part.js:1631 +#: templates/js/translated/stock.js:2485 msgid "Name" msgstr "" -#: InvenTree/models.py:284 build/models.py:207 +#: InvenTree/models.py:284 build/models.py:209 #: build/templates/build/detail.html:25 company/models.py:354 #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:122 part/models.py:795 part/templates/part/category.html:74 +#: order/models.py:125 part/models.py:797 part/templates/part/category.html:74 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 #: stock/templates/stock/location.html:93 #: templates/InvenTree/settings/plugin_settings.html:33 -#: templates/js/translated/bom.js:327 templates/js/translated/bom.js:540 +#: templates/js/translated/bom.js:339 templates/js/translated/bom.js:552 #: templates/js/translated/build.js:1682 templates/js/translated/company.js:345 #: templates/js/translated/company.js:551 #: templates/js/translated/company.js:840 templates/js/translated/order.js:836 #: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 -#: templates/js/translated/part.js:620 templates/js/translated/part.js:992 -#: templates/js/translated/part.js:1077 templates/js/translated/part.js:1247 -#: templates/js/translated/part.js:1643 templates/js/translated/part.js:1712 -#: templates/js/translated/stock.js:1569 templates/js/translated/stock.js:2339 -#: templates/js/translated/stock.js:2384 +#: templates/js/translated/part.js:626 templates/js/translated/part.js:999 +#: templates/js/translated/part.js:1084 templates/js/translated/part.js:1254 +#: templates/js/translated/part.js:1650 templates/js/translated/part.js:1719 +#: templates/js/translated/stock.js:1577 templates/js/translated/stock.js:2314 +#: templates/js/translated/stock.js:2497 templates/js/translated/stock.js:2542 msgid "Description" msgstr "" @@ -244,7 +245,7 @@ msgstr "" msgid "parent" msgstr "" -#: InvenTree/serializers.py:65 part/models.py:2727 +#: InvenTree/serializers.py:65 part/models.py:2734 msgid "Must be a valid number" msgstr "" @@ -252,83 +253,83 @@ msgstr "" msgid "Filename" msgstr "" -#: InvenTree/settings.py:663 +#: InvenTree/settings.py:661 msgid "German" msgstr "" -#: InvenTree/settings.py:664 +#: InvenTree/settings.py:662 msgid "Greek" msgstr "" -#: InvenTree/settings.py:665 +#: InvenTree/settings.py:663 msgid "English" msgstr "" -#: InvenTree/settings.py:666 +#: InvenTree/settings.py:664 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:667 +#: InvenTree/settings.py:665 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:668 +#: InvenTree/settings.py:666 msgid "French" msgstr "" -#: InvenTree/settings.py:669 +#: InvenTree/settings.py:667 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:668 msgid "Italian" msgstr "" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:669 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:670 msgid "Korean" msgstr "" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:671 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:672 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:673 msgid "Polish" msgstr "" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:674 msgid "Portugese" msgstr "" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:675 msgid "Russian" msgstr "" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:676 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:677 msgid "Thai" msgstr "" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:678 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:679 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:680 msgid "Chinese" msgstr "" @@ -374,7 +375,7 @@ msgstr "" msgid "Returned" msgstr "" -#: InvenTree/status_codes.py:143 order/models.py:941 +#: InvenTree/status_codes.py:143 order/models.py:961 #: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "" @@ -455,7 +456,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2064 +#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2072 msgid "Merged stock items" msgstr "" @@ -543,56 +544,56 @@ msgstr "" msgid "System Information" msgstr "" -#: barcodes/api.py:54 barcodes/api.py:151 +#: barcodes/api.py:54 barcodes/api.py:152 msgid "Must provide barcode_data parameter" msgstr "" -#: barcodes/api.py:127 +#: barcodes/api.py:128 msgid "No match found for barcode data" msgstr "" -#: barcodes/api.py:129 +#: barcodes/api.py:130 msgid "Match found for barcode data" msgstr "" -#: barcodes/api.py:154 +#: barcodes/api.py:155 msgid "Must provide stockitem parameter" msgstr "" -#: barcodes/api.py:161 +#: barcodes/api.py:162 msgid "No matching stock item found" msgstr "" -#: barcodes/api.py:191 +#: barcodes/api.py:193 msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:195 +#: barcodes/api.py:197 msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:199 +#: barcodes/api.py:201 msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:205 barcodes/api.py:217 +#: barcodes/api.py:207 barcodes/api.py:219 msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:223 +#: barcodes/api.py:225 msgid "Barcode associated with Stock Item" msgstr "" -#: build/forms.py:36 build/models.py:1286 +#: build/forms.py:36 build/models.py:1293 #: build/templates/build/build_base.html:82 -#: build/templates/build/detail.html:35 common/models.py:1253 +#: build/templates/build/detail.html:35 common/models.py:1263 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/models.py:796 order/models.py:1207 order/serializers.py:810 +#: order/models.py:805 order/models.py:1229 order/serializers.py:816 #: order/templates/order/order_wizard/match_parts.html:30 -#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:145 -#: part/forms.py:161 part/forms.py:177 part/models.py:2629 +#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:144 +#: part/forms.py:160 part/forms.py:176 part/models.py:2636 #: part/templates/part/bom_upload/match_parts.html:31 -#: part/templates/part/detail.html:962 part/templates/part/detail.html:1048 +#: part/templates/part/detail.html:992 part/templates/part/detail.html:1078 #: part/templates/part/part_pricing.html:16 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 @@ -603,7 +604,7 @@ msgstr "" #: stock/templates/stock/item_base.html:181 #: stock/templates/stock/item_base.html:262 #: stock/templates/stock/item_base.html:270 -#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:555 +#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:567 #: templates/js/translated/build.js:295 templates/js/translated/build.js:495 #: templates/js/translated/build.js:689 templates/js/translated/build.js:699 #: templates/js/translated/build.js:1075 templates/js/translated/build.js:1422 @@ -611,11 +612,11 @@ msgstr "" #: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 #: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 #: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 -#: templates/js/translated/order.js:2150 templates/js/translated/part.js:900 -#: templates/js/translated/part.js:1855 templates/js/translated/part.js:1978 -#: templates/js/translated/part.js:2056 templates/js/translated/stock.js:383 -#: templates/js/translated/stock.js:580 templates/js/translated/stock.js:750 -#: templates/js/translated/stock.js:2519 templates/js/translated/stock.js:2621 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:906 +#: templates/js/translated/part.js:1862 templates/js/translated/part.js:1985 +#: templates/js/translated/part.js:2063 templates/js/translated/stock.js:391 +#: templates/js/translated/stock.js:588 templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2779 msgid "Quantity" msgstr "" @@ -623,9 +624,9 @@ msgstr "" msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 -#: stock/serializers.py:314 templates/js/translated/stock.js:230 -#: templates/js/translated/stock.js:384 +#: build/forms.py:41 order/serializers.py:820 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:238 +#: templates/js/translated/stock.js:392 msgid "Serial Numbers" msgstr "" @@ -649,18 +650,18 @@ msgstr "" msgid "Confirm build cancellation" msgstr "" -#: build/models.py:133 +#: build/models.py:135 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:137 build/templates/build/build_base.html:9 +#: build/models.py:139 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:457 +#: templates/js/translated/build.js:457 templates/js/translated/stock.js:2290 msgid "Build Order" msgstr "" -#: build/models.py:138 build/templates/build/build_base.html:13 +#: build/models.py:140 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:92 #: order/templates/order/so_sidebar.html:13 @@ -670,40 +671,40 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:198 +#: build/models.py:200 msgid "Build Order Reference" msgstr "" -#: build/models.py:199 order/models.py:210 order/models.py:536 -#: order/models.py:803 part/models.py:2638 +#: build/models.py:201 order/models.py:213 order/models.py:541 +#: order/models.py:812 part/models.py:2645 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:547 templates/js/translated/build.js:1179 +#: templates/js/translated/bom.js:559 templates/js/translated/build.js:1179 #: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "" -#: build/models.py:210 +#: build/models.py:212 msgid "Brief description of the build" msgstr "" -#: build/models.py:219 build/templates/build/build_base.html:164 +#: build/models.py:221 build/templates/build/build_base.html:164 #: build/templates/build/detail.html:88 msgid "Parent Build" msgstr "" -#: build/models.py:220 +#: build/models.py:222 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:225 build/templates/build/build_base.html:77 +#: build/models.py:227 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:856 order/models.py:930 -#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 -#: part/models.py:2204 part/models.py:2220 part/models.py:2239 -#: part/models.py:2256 part/models.py:2358 part/models.py:2480 -#: part/models.py:2613 part/models.py:2920 part/serializers.py:658 +#: order/models.py:876 order/models.py:950 +#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:359 +#: part/models.py:2211 part/models.py:2227 part/models.py:2246 +#: part/models.py:2263 part/models.py:2365 part/models.py:2487 +#: part/models.py:2620 part/models.py:2927 part/serializers.py:658 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/set_category.html:13 @@ -713,205 +714,205 @@ msgstr "" #: templates/InvenTree/search.html:80 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 -#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:326 -#: templates/js/translated/bom.js:505 templates/js/translated/build.js:680 +#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:338 +#: templates/js/translated/bom.js:517 templates/js/translated/build.js:680 #: templates/js/translated/build.js:1048 templates/js/translated/build.js:1419 #: templates/js/translated/build.js:1687 templates/js/translated/company.js:492 #: templates/js/translated/company.js:749 templates/js/translated/order.js:84 #: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 #: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 -#: templates/js/translated/order.js:2128 templates/js/translated/part.js:977 -#: templates/js/translated/part.js:1058 templates/js/translated/part.js:1225 -#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:719 -#: templates/js/translated/stock.js:926 templates/js/translated/stock.js:1526 -#: templates/js/translated/stock.js:2609 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:984 +#: templates/js/translated/part.js:1065 templates/js/translated/part.js:1232 +#: templates/js/translated/stock.js:562 templates/js/translated/stock.js:727 +#: templates/js/translated/stock.js:934 templates/js/translated/stock.js:1534 +#: templates/js/translated/stock.js:2767 msgid "Part" msgstr "" -#: build/models.py:233 +#: build/models.py:235 msgid "Select part to build" msgstr "" -#: build/models.py:238 +#: build/models.py:240 msgid "Sales Order Reference" msgstr "" -#: build/models.py:242 +#: build/models.py:244 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1407 +#: build/models.py:249 templates/js/translated/build.js:1407 #: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "" -#: build/models.py:251 +#: build/models.py:253 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:256 +#: build/models.py:258 msgid "Destination Location" msgstr "" -#: build/models.py:260 +#: build/models.py:262 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:264 +#: build/models.py:266 msgid "Build Quantity" msgstr "" -#: build/models.py:267 +#: build/models.py:269 msgid "Number of stock items to build" msgstr "" -#: build/models.py:271 +#: build/models.py:273 msgid "Completed items" msgstr "" -#: build/models.py:273 +#: build/models.py:275 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:277 part/templates/part/part_base.html:234 +#: build/models.py:279 part/templates/part/part_base.html:234 msgid "Build Status" msgstr "" -#: build/models.py:281 +#: build/models.py:283 msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:531 +#: build/models.py:287 stock/models.py:533 msgid "Batch Code" msgstr "" -#: build/models.py:289 +#: build/models.py:291 msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:126 part/models.py:967 +#: build/models.py:294 order/models.py:129 part/models.py:969 #: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "" -#: build/models.py:296 order/models.py:558 +#: build/models.py:298 order/models.py:563 msgid "Target completion date" msgstr "" -#: build/models.py:297 +#: build/models.py:299 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:252 +#: build/models.py:302 order/models.py:255 #: templates/js/translated/build.js:1758 msgid "Completion Date" msgstr "" -#: build/models.py:306 +#: build/models.py:308 msgid "completed by" msgstr "" -#: build/models.py:314 templates/js/translated/build.js:1729 +#: build/models.py:316 templates/js/translated/build.js:1729 msgid "Issued by" msgstr "" -#: build/models.py:315 +#: build/models.py:317 msgid "User who issued this build order" msgstr "" -#: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:140 +#: build/models.py:325 build/templates/build/build_base.html:185 +#: build/templates/build/detail.html:116 order/models.py:143 #: order/templates/order/order_base.html:170 -#: order/templates/order/sales_order_base.html:182 part/models.py:971 +#: order/templates/order/sales_order_base.html:182 part/models.py:973 #: report/templates/report/inventree_build_order_base.html:159 #: templates/js/translated/build.js:1741 templates/js/translated/order.js:864 msgid "Responsible" msgstr "" -#: build/models.py:324 +#: build/models.py:326 msgid "User responsible for this build order" msgstr "" -#: build/models.py:329 build/templates/build/detail.html:102 +#: build/models.py:331 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:525 +#: part/templates/part/part_base.html:354 stock/models.py:527 #: stock/templates/stock/item_base.html:373 msgid "External Link" msgstr "" -#: build/models.py:334 build/serializers.py:201 +#: build/models.py:336 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:144 order/models.py:805 order/models.py:1051 +#: order/models.py:147 order/models.py:814 order/models.py:1071 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/models.py:956 -#: part/templates/part/detail.html:120 part/templates/part/part_sidebar.html:50 +#: order/templates/order/so_sidebar.html:17 part/models.py:958 +#: part/templates/part/detail.html:137 part/templates/part/part_sidebar.html:54 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:597 -#: stock/models.py:1867 stock/models.py:1973 stock/serializers.py:332 -#: stock/serializers.py:639 stock/serializers.py:737 stock/serializers.py:869 -#: stock/templates/stock/stock_sidebar.html:21 -#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:711 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:599 +#: stock/models.py:1895 stock/models.py:2001 stock/serializers.py:332 +#: stock/serializers.py:640 stock/serializers.py:738 stock/serializers.py:870 +#: stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:723 #: templates/js/translated/company.js:845 templates/js/translated/order.js:1149 #: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 -#: templates/js/translated/stock.js:1309 templates/js/translated/stock.js:1795 +#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1803 msgid "Notes" msgstr "" -#: build/models.py:335 +#: build/models.py:337 msgid "Extra build notes" msgstr "" -#: build/models.py:710 +#: build/models.py:717 msgid "No build output specified" msgstr "" -#: build/models.py:713 +#: build/models.py:720 msgid "Build output is already completed" msgstr "" -#: build/models.py:716 +#: build/models.py:723 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1108 +#: build/models.py:1115 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1117 +#: build/models.py:1124 #, python-brace-format msgid "Allocated quantity ({q}) must not execed available stock quantity ({a})" msgstr "" -#: build/models.py:1127 +#: build/models.py:1134 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:1167 +#: build/models.py:1140 order/models.py:1189 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1139 +#: build/models.py:1146 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1196 +#: build/models.py:1203 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1256 stock/templates/stock/item_base.html:345 +#: build/models.py:1263 stock/templates/stock/item_base.html:345 #: templates/InvenTree/search.html:137 templates/js/translated/build.js:1660 #: templates/navbar.html:35 msgid "Build" msgstr "" -#: build/models.py:1257 +#: build/models.py:1264 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1273 build/serializers.py:388 order/serializers.py:690 -#: order/serializers.py:708 stock/serializers.py:577 stock/serializers.py:695 +#: build/models.py:1280 build/serializers.py:388 order/serializers.py:696 +#: order/serializers.py:714 stock/serializers.py:578 stock/serializers.py:696 #: stock/templates/stock/item_base.html:9 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:367 @@ -920,24 +921,24 @@ msgstr "" #: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 #: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 #: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 -#: templates/js/translated/stock.js:555 templates/js/translated/stock.js:720 -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:563 templates/js/translated/stock.js:728 +#: templates/js/translated/stock.js:2628 msgid "Stock Item" msgstr "" -#: build/models.py:1274 +#: build/models.py:1281 msgid "Source stock item" msgstr "" -#: build/models.py:1287 +#: build/models.py:1294 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1295 +#: build/models.py:1302 msgid "Install into" msgstr "" -#: build/models.py:1296 +#: build/models.py:1303 msgid "Destination stock item" msgstr "" @@ -962,16 +963,16 @@ msgid "This build output is not fully allocated" msgstr "" #: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 -#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:730 -#: stock/serializers.py:971 stock/templates/stock/item_base.html:313 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:731 +#: stock/serializers.py:972 stock/templates/stock/item_base.html:313 #: templates/js/translated/barcode.js:384 #: templates/js/translated/barcode.js:557 templates/js/translated/build.js:480 #: templates/js/translated/build.js:1087 templates/js/translated/order.js:508 #: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 #: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 -#: templates/js/translated/part.js:179 templates/js/translated/stock.js:556 -#: templates/js/translated/stock.js:721 templates/js/translated/stock.js:928 -#: templates/js/translated/stock.js:1676 templates/js/translated/stock.js:2411 +#: templates/js/translated/part.js:179 templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:729 templates/js/translated/stock.js:936 +#: templates/js/translated/stock.js:1684 templates/js/translated/stock.js:2569 msgid "Location" msgstr "" @@ -980,12 +981,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:552 +#: build/templates/build/detail.html:63 order/models.py:557 #: order/serializers.py:247 stock/templates/stock/item_base.html:187 #: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1716 #: templates/js/translated/order.js:591 templates/js/translated/order.js:840 -#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1651 -#: templates/js/translated/stock.js:2488 templates/js/translated/stock.js:2637 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1659 +#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2795 msgid "Status" msgstr "" @@ -1021,8 +1022,8 @@ msgstr "" msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:313 build/serializers.py:362 part/models.py:2753 -#: part/models.py:2912 +#: build/serializers.py:313 build/serializers.py:362 part/models.py:2760 +#: part/models.py:2919 msgid "BOM Item" msgstr "" @@ -1038,16 +1039,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:394 stock/serializers.py:584 +#: build/serializers.py:394 stock/serializers.py:585 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:408 order/models.py:277 order/serializers.py:240 -#: stock/models.py:365 stock/models.py:1077 stock/serializers.py:305 +#: build/serializers.py:408 order/models.py:280 order/serializers.py:240 +#: stock/models.py:367 stock/models.py:1105 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:450 order/serializers.py:741 +#: build/serializers.py:450 order/serializers.py:747 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1060,7 +1061,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:491 order/serializers.py:984 +#: build/serializers.py:491 order/serializers.py:990 msgid "Allocation items must be provided" msgstr "" @@ -1164,13 +1165,13 @@ msgid "Completed" msgstr "" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:927 -#: order/models.py:1023 order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:947 +#: order/models.py:1043 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:307 -#: templates/js/translated/order.js:1218 +#: templates/js/translated/order.js:1218 templates/js/translated/stock.js:2304 msgid "Sales Order" msgstr "" @@ -1224,7 +1225,7 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:878 stock/forms.py:136 +#: build/templates/build/detail.html:50 order/models.py:898 stock/forms.py:136 #: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1239,7 +1240,7 @@ msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:331 -#: templates/js/translated/stock.js:1665 templates/js/translated/stock.js:2644 +#: templates/js/translated/stock.js:1673 templates/js/translated/stock.js:2802 #: templates/js/translated/table_filters.js:151 #: templates/js/translated/table_filters.js:238 msgid "Batch" @@ -1343,9 +1344,9 @@ msgstr "" #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 #: order/templates/order/sales_order_detail.html:107 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:196 -#: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 -#: stock/templates/stock/stock_sidebar.html:19 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:213 +#: part/templates/part/part_sidebar.html:52 stock/templates/stock/item.html:112 +#: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" @@ -1360,8 +1361,8 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:108 #: order/templates/order/sales_order_detail.html:127 #: order/templates/order/sales_order_detail.html:186 -#: part/templates/part/detail.html:124 stock/templates/stock/item.html:115 -#: stock/templates/stock/item.html:205 +#: part/templates/part/detail.html:141 stock/templates/stock/item.html:132 +#: stock/templates/stock/item.html:235 msgid "Edit Notes" msgstr "" @@ -1373,7 +1374,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:303 +#: build/templates/build/index.html:18 part/templates/part/detail.html:320 msgid "New Build Order" msgstr "" @@ -1453,23 +1454,23 @@ msgstr "" msgid "Delete Build Order" msgstr "" -#: common/files.py:67 +#: common/files.py:65 msgid "Unsupported file format: {ext.upper()}" msgstr "" -#: common/files.py:69 +#: common/files.py:67 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:74 +#: common/files.py:72 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:76 +#: common/files.py:74 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:78 +#: common/files.py:76 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1490,740 +1491,828 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:344 common/models.py:998 common/models.py:1206 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:352 +msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:346 +#: common/models.py:354 msgid "Settings value" msgstr "" -#: common/models.py:380 +#: common/models.py:388 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:400 +#: common/models.py:408 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:411 +#: common/models.py:419 msgid "Value must be an integer value" msgstr "" -#: common/models.py:434 +#: common/models.py:442 msgid "Key string must be unique" msgstr "" -#: common/models.py:553 +#: common/models.py:561 msgid "No group" msgstr "" -#: common/models.py:595 +#: common/models.py:603 msgid "Restart required" msgstr "" -#: common/models.py:596 +#: common/models.py:604 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:603 +#: common/models.py:611 msgid "InvenTree Instance Name" msgstr "" -#: common/models.py:605 +#: common/models.py:613 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:609 +#: common/models.py:617 msgid "Use instance name" msgstr "" -#: common/models.py:610 +#: common/models.py:618 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:616 company/models.py:100 company/models.py:101 +#: common/models.py:624 company/models.py:100 company/models.py:101 msgid "Company name" msgstr "" -#: common/models.py:617 +#: common/models.py:625 msgid "Internal company name" msgstr "" -#: common/models.py:622 +#: common/models.py:630 msgid "Base URL" msgstr "" -#: common/models.py:623 +#: common/models.py:631 msgid "Base URL for server instance" msgstr "" -#: common/models.py:629 +#: common/models.py:637 msgid "Default Currency" msgstr "" -#: common/models.py:630 +#: common/models.py:638 msgid "Default currency" msgstr "" -#: common/models.py:636 +#: common/models.py:644 msgid "Download from URL" msgstr "" -#: common/models.py:637 +#: common/models.py:645 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:643 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:651 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:644 +#: common/models.py:652 msgid "Enable barcode scanner support" msgstr "" -#: common/models.py:650 +#: common/models.py:658 msgid "IPN Regex" msgstr "" -#: common/models.py:651 +#: common/models.py:659 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:655 +#: common/models.py:663 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:656 +#: common/models.py:664 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:662 +#: common/models.py:670 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:663 +#: common/models.py:671 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:669 +#: common/models.py:677 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:670 +#: common/models.py:678 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:676 +#: common/models.py:684 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:677 +#: common/models.py:685 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:683 +#: common/models.py:691 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:684 +#: common/models.py:692 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:690 +#: common/models.py:698 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:691 +#: common/models.py:699 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:697 part/models.py:2482 report/models.py:187 +#: common/models.py:705 part/models.py:2489 report/models.py:187 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:422 msgid "Template" msgstr "" -#: common/models.py:698 +#: common/models.py:706 msgid "Parts are templates by default" msgstr "" -#: common/models.py:704 part/models.py:919 templates/js/translated/bom.js:1068 +#: common/models.py:712 part/models.py:921 templates/js/translated/bom.js:1082 #: templates/js/translated/table_filters.js:168 #: templates/js/translated/table_filters.js:434 msgid "Assembly" msgstr "" -#: common/models.py:705 +#: common/models.py:713 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:711 part/models.py:925 +#: common/models.py:719 part/models.py:927 #: templates/js/translated/table_filters.js:438 msgid "Component" msgstr "" -#: common/models.py:712 +#: common/models.py:720 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:718 part/models.py:936 +#: common/models.py:726 part/models.py:938 msgid "Purchaseable" msgstr "" -#: common/models.py:719 +#: common/models.py:727 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:725 part/models.py:941 +#: common/models.py:733 part/models.py:943 #: templates/js/translated/table_filters.js:446 msgid "Salable" msgstr "" -#: common/models.py:726 +#: common/models.py:734 msgid "Parts are salable by default" msgstr "" -#: common/models.py:732 part/models.py:931 +#: common/models.py:740 part/models.py:933 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 #: templates/js/translated/table_filters.js:450 msgid "Trackable" msgstr "" -#: common/models.py:733 +#: common/models.py:741 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:739 part/models.py:951 +#: common/models.py:747 part/models.py:953 #: part/templates/part/part_base.html:147 #: templates/js/translated/table_filters.js:42 msgid "Virtual" msgstr "" -#: common/models.py:740 +#: common/models.py:748 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:746 +#: common/models.py:754 msgid "Show Import in Views" msgstr "" -#: common/models.py:747 +#: common/models.py:755 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:753 +#: common/models.py:761 msgid "Show Price in Forms" msgstr "" -#: common/models.py:754 +#: common/models.py:762 msgid "Display part price in some forms" msgstr "" -#: common/models.py:765 +#: common/models.py:773 msgid "Show Price in BOM" msgstr "" -#: common/models.py:766 +#: common/models.py:774 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:772 +#: common/models.py:780 msgid "Show related parts" msgstr "" -#: common/models.py:773 +#: common/models.py:781 msgid "Display related parts for a part" msgstr "" -#: common/models.py:779 +#: common/models.py:787 msgid "Create initial stock" msgstr "" -#: common/models.py:780 +#: common/models.py:788 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:786 +#: common/models.py:794 msgid "Internal Prices" msgstr "" -#: common/models.py:787 +#: common/models.py:795 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:793 +#: common/models.py:801 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:794 +#: common/models.py:802 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:800 +#: common/models.py:808 msgid "Part Name Display Format" msgstr "" -#: common/models.py:801 +#: common/models.py:809 msgid "Format to display the part name" msgstr "" -#: common/models.py:808 +#: common/models.py:816 msgid "Enable Reports" msgstr "" -#: common/models.py:809 +#: common/models.py:817 msgid "Enable generation of reports" msgstr "" -#: common/models.py:815 templates/stats.html:25 +#: common/models.py:823 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:816 +#: common/models.py:824 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:822 +#: common/models.py:830 msgid "Page Size" msgstr "" -#: common/models.py:823 +#: common/models.py:831 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:833 +#: common/models.py:841 msgid "Test Reports" msgstr "" -#: common/models.py:834 +#: common/models.py:842 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:840 +#: common/models.py:848 msgid "Stock Expiry" msgstr "" -#: common/models.py:841 +#: common/models.py:849 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:847 +#: common/models.py:855 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:848 +#: common/models.py:856 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:854 +#: common/models.py:862 msgid "Stock Stale Time" msgstr "" -#: common/models.py:855 +#: common/models.py:863 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:857 +#: common/models.py:865 msgid "days" msgstr "" -#: common/models.py:862 +#: common/models.py:870 msgid "Build Expired Stock" msgstr "" -#: common/models.py:863 +#: common/models.py:871 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:869 +#: common/models.py:877 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:870 +#: common/models.py:878 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:876 -msgid "Group by Part" -msgstr "" - -#: common/models.py:877 -msgid "Group stock items by part reference in table views" -msgstr "" - -#: common/models.py:883 +#: common/models.py:884 msgid "Build Order Reference Prefix" msgstr "" -#: common/models.py:884 +#: common/models.py:885 msgid "Prefix value for build order reference" msgstr "" -#: common/models.py:889 +#: common/models.py:890 msgid "Build Order Reference Regex" msgstr "" -#: common/models.py:890 +#: common/models.py:891 msgid "Regular expression pattern for matching build order reference" msgstr "" -#: common/models.py:894 +#: common/models.py:895 msgid "Sales Order Reference Prefix" msgstr "" -#: common/models.py:895 +#: common/models.py:896 msgid "Prefix value for sales order reference" msgstr "" -#: common/models.py:900 +#: common/models.py:901 msgid "Purchase Order Reference Prefix" msgstr "" -#: common/models.py:901 +#: common/models.py:902 msgid "Prefix value for purchase order reference" msgstr "" -#: common/models.py:907 +#: common/models.py:908 msgid "Enable password forgot" msgstr "" -#: common/models.py:908 +#: common/models.py:909 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:913 +#: common/models.py:914 msgid "Enable registration" msgstr "" -#: common/models.py:914 +#: common/models.py:915 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:919 +#: common/models.py:920 msgid "Enable SSO" msgstr "" -#: common/models.py:920 +#: common/models.py:921 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:925 +#: common/models.py:926 msgid "Email required" msgstr "" -#: common/models.py:926 +#: common/models.py:927 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:931 +#: common/models.py:932 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:932 +#: common/models.py:933 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:937 +#: common/models.py:938 msgid "Mail twice" msgstr "" -#: common/models.py:938 +#: common/models.py:939 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:943 +#: common/models.py:944 msgid "Password twice" msgstr "" -#: common/models.py:944 +#: common/models.py:945 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:949 +#: common/models.py:950 msgid "Group on signup" msgstr "" -#: common/models.py:950 +#: common/models.py:951 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:955 +#: common/models.py:956 msgid "Enforce MFA" msgstr "" -#: common/models.py:956 +#: common/models.py:957 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:961 +#: common/models.py:964 msgid "Enable URL integration" msgstr "" -#: common/models.py:962 +#: common/models.py:965 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:968 +#: common/models.py:971 msgid "Enable navigation integration" msgstr "" -#: common/models.py:969 +#: common/models.py:972 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:975 +#: common/models.py:978 msgid "Enable app integration" msgstr "" -#: common/models.py:976 +#: common/models.py:979 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:982 +#: common/models.py:985 msgid "Enable schedule integration" msgstr "" -#: common/models.py:983 +#: common/models.py:986 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1029 +#: common/models.py:992 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:993 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:1008 common/models.py:1216 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1039 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1030 +#: common/models.py:1040 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1035 +#: common/models.py:1045 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1036 +#: common/models.py:1046 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1041 +#: common/models.py:1051 msgid "Show latest parts" msgstr "" -#: common/models.py:1042 +#: common/models.py:1052 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1047 +#: common/models.py:1057 msgid "Recent Part Count" msgstr "" -#: common/models.py:1048 +#: common/models.py:1058 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1054 +#: common/models.py:1064 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1055 +#: common/models.py:1065 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1060 +#: common/models.py:1070 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1061 +#: common/models.py:1071 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1066 +#: common/models.py:1076 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1067 +#: common/models.py:1077 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1072 +#: common/models.py:1082 msgid "Show low stock" msgstr "" -#: common/models.py:1073 +#: common/models.py:1083 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1078 +#: common/models.py:1088 msgid "Show depleted stock" msgstr "" -#: common/models.py:1079 +#: common/models.py:1089 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1084 +#: common/models.py:1094 msgid "Show needed stock" msgstr "" -#: common/models.py:1085 +#: common/models.py:1095 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1090 +#: common/models.py:1100 msgid "Show expired stock" msgstr "" -#: common/models.py:1091 +#: common/models.py:1101 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1096 +#: common/models.py:1106 msgid "Show stale stock" msgstr "" -#: common/models.py:1097 +#: common/models.py:1107 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1102 +#: common/models.py:1112 msgid "Show pending builds" msgstr "" -#: common/models.py:1103 +#: common/models.py:1113 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1108 +#: common/models.py:1118 msgid "Show overdue builds" msgstr "" -#: common/models.py:1109 +#: common/models.py:1119 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1114 +#: common/models.py:1124 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1115 +#: common/models.py:1125 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1120 +#: common/models.py:1130 msgid "Show overdue POs" msgstr "" -#: common/models.py:1121 +#: common/models.py:1131 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1126 +#: common/models.py:1136 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1127 +#: common/models.py:1137 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1132 +#: common/models.py:1142 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1133 +#: common/models.py:1143 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1139 +#: common/models.py:1149 msgid "Inline label display" msgstr "" -#: common/models.py:1140 +#: common/models.py:1150 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1146 +#: common/models.py:1156 msgid "Inline report display" msgstr "" -#: common/models.py:1147 +#: common/models.py:1157 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1153 +#: common/models.py:1163 msgid "Search Preview Results" msgstr "" -#: common/models.py:1154 +#: common/models.py:1164 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1160 +#: common/models.py:1170 msgid "Search Show Stock" msgstr "" -#: common/models.py:1161 +#: common/models.py:1171 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1167 +#: common/models.py:1177 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1168 +#: common/models.py:1178 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1174 +#: common/models.py:1184 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1175 +#: common/models.py:1185 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1181 +#: common/models.py:1191 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1182 +#: common/models.py:1192 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1188 +#: common/models.py:1198 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1189 +#: common/models.py:1199 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1254 company/forms.py:43 +#: common/models.py:1264 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1261 company/serializers.py:264 +#: common/models.py:1271 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 -#: templates/js/translated/part.js:909 templates/js/translated/part.js:1860 +#: templates/js/translated/part.js:915 templates/js/translated/part.js:1867 msgid "Price" msgstr "" -#: common/models.py:1262 +#: common/models.py:1272 msgid "Unit price at specified quantity" msgstr "" +#: common/models.py:1429 common/models.py:1568 +msgid "Endpoint" +msgstr "" + +#: common/models.py:1430 +msgid "Endpoint at which this webhook is received" +msgstr "" + +#: common/models.py:1439 +msgid "Name for this webhook" +msgstr "" + +#: common/models.py:1444 part/models.py:948 plugin/models.py:46 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:96 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:417 +msgid "Active" +msgstr "" + +#: common/models.py:1445 +msgid "Is this webhook active" +msgstr "" + +#: common/models.py:1459 +msgid "Token" +msgstr "" + +#: common/models.py:1460 +msgid "Token for access" +msgstr "" + +#: common/models.py:1467 +msgid "Secret" +msgstr "" + +#: common/models.py:1468 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:1535 +msgid "Message ID" +msgstr "" + +#: common/models.py:1536 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:1544 +msgid "Host" +msgstr "" + +#: common/models.py:1545 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:1552 +msgid "Header" +msgstr "" + +#: common/models.py:1553 +msgid "Header of this message" +msgstr "" + +#: common/models.py:1559 +msgid "Body" +msgstr "" + +#: common/models.py:1560 +msgid "Body of this message" +msgstr "" + +#: common/models.py:1569 +msgid "Endpoint on which this message was received" +msgstr "" + +#: common/models.py:1574 +msgid "Worked on" +msgstr "" + +#: common/models.py:1575 +msgid "Was the work on this message finished?" +msgstr "" + #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 #: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 -#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 -#: part/views.py:764 +#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:213 +#: part/views.py:773 msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 #: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 -#: part/views.py:765 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:214 +#: part/views.py:774 msgid "Match Fields" msgstr "" @@ -2315,7 +2404,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:139 part/models.py:838 +#: company/models.py:139 part/models.py:840 msgid "Image" msgstr "" @@ -2352,8 +2441,8 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:469 -#: stock/templates/stock/item_base.html:142 +#: company/models.py:320 company/models.py:535 stock/models.py:471 +#: stock/templates/stock/item_base.html:142 templates/js/translated/bom.js:328 msgid "Base Part" msgstr "" @@ -2380,7 +2469,7 @@ msgstr "" #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:533 #: templates/js/translated/company.js:818 templates/js/translated/order.js:1038 -#: templates/js/translated/part.js:245 templates/js/translated/part.js:889 +#: templates/js/translated/part.js:245 templates/js/translated/part.js:895 msgid "MPN" msgstr "" @@ -2409,8 +2498,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1960 templates/js/translated/company.js:647 -#: templates/js/translated/part.js:709 templates/js/translated/stock.js:1296 +#: stock/models.py:1988 templates/js/translated/company.js:647 +#: templates/js/translated/part.js:715 templates/js/translated/stock.js:1304 msgid "Value" msgstr "" @@ -2418,10 +2507,10 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:429 part/models.py:913 part/models.py:2450 +#: company/models.py:429 part/models.py:915 part/models.py:2457 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:284 -#: templates/js/translated/company.js:653 templates/js/translated/part.js:715 +#: templates/InvenTree/settings/settings.html:287 +#: templates/js/translated/company.js:653 templates/js/translated/part.js:721 msgid "Units" msgstr "" @@ -2434,13 +2523,13 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:224 +#: company/templates/company/supplier_part.html:87 order/models.py:227 #: order/templates/order/order_base.html:112 -#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 -#: part/bom.py:247 stock/templates/stock/item_base.html:397 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:237 +#: part/bom.py:265 stock/templates/stock/item_base.html:397 #: templates/js/translated/company.js:337 #: templates/js/translated/company.js:774 templates/js/translated/order.js:823 -#: templates/js/translated/part.js:215 templates/js/translated/part.js:857 +#: templates/js/translated/part.js:215 templates/js/translated/part.js:863 #: templates/js/translated/table_filters.js:393 msgid "Supplier" msgstr "" @@ -2450,8 +2539,8 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 -#: templates/js/translated/part.js:226 templates/js/translated/part.js:875 +#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1025 +#: templates/js/translated/part.js:226 templates/js/translated/part.js:881 msgid "SKU" msgstr "" @@ -2472,22 +2561,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:576 company/templates/company/supplier_part.html:119 -#: part/models.py:2641 report/templates/report/inventree_po_report.html:93 +#: part/models.py:2648 report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "base cost" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:493 stock/templates/stock/item_base.html:338 -#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1791 +#: stock/models.py:495 stock/templates/stock/item_base.html:338 +#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1799 msgid "Packaging" msgstr "" @@ -2495,7 +2584,7 @@ msgstr "" msgid "Part packaging" msgstr "" -#: company/models.py:584 part/models.py:1781 +#: company/models.py:584 part/models.py:1783 msgid "multiple" msgstr "" @@ -2554,12 +2643,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:547 -#: order/templates/order/sales_order_base.html:115 stock/models.py:512 -#: stock/models.py:513 stock/serializers.py:625 +#: company/templates/company/company_base.html:83 order/models.py:552 +#: order/templates/order/sales_order_base.html:115 stock/models.py:514 +#: stock/models.py:515 stock/serializers.py:626 #: stock/templates/stock/item_base.html:290 #: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 -#: templates/js/translated/stock.js:2452 +#: templates/js/translated/stock.js:2610 #: templates/js/translated/table_filters.js:397 msgid "Customer" msgstr "" @@ -2590,7 +2679,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:118 -#: part/templates/part/detail.html:336 +#: part/templates/part/detail.html:353 msgid "New Supplier Part" msgstr "" @@ -2598,8 +2687,8 @@ msgstr "" #: company/templates/company/detail.html:79 #: company/templates/company/manufacturer_part.html:127 #: company/templates/company/manufacturer_part.html:156 -#: part/templates/part/category.html:171 part/templates/part/detail.html:345 -#: part/templates/part/detail.html:374 +#: part/templates/part/category.html:171 part/templates/part/detail.html:362 +#: part/templates/part/detail.html:391 msgid "Options" msgstr "" @@ -2627,7 +2716,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:67 part/templates/part/detail.html:364 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:381 msgid "New Manufacturer Part" msgstr "" @@ -2641,7 +2730,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:68 part/templates/part/part_sidebar.html:33 +#: part/templates/part/detail.html:85 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197 #: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 @@ -2663,7 +2752,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:91 part/templates/part/part_sidebar.html:37 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:41 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217 #: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 @@ -2691,13 +2780,13 @@ msgstr "" #: company/templates/company/detail.html:384 #: company/templates/company/manufacturer_part.html:215 -#: part/templates/part/detail.html:418 +#: part/templates/part/detail.html:435 msgid "Delete Supplier Parts?" msgstr "" #: company/templates/company/detail.html:385 #: company/templates/company/manufacturer_part.html:216 -#: part/templates/part/detail.html:419 +#: part/templates/part/detail.html:436 msgid "All selected supplier parts will be deleted" msgstr "" @@ -2714,7 +2803,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:34 #: company/templates/company/supplier_part.html:159 -#: part/templates/part/detail.html:71 part/templates/part/part_base.html:76 +#: part/templates/part/detail.html:88 part/templates/part/part_base.html:76 msgid "Order part" msgstr "" @@ -2735,34 +2824,34 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 -#: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 +#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:163 #: templates/InvenTree/search.html:188 templates/navbar.html:45 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:129 -#: part/templates/part/detail.html:347 +#: part/templates/part/detail.html:364 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:129 #: company/templates/company/manufacturer_part.html:158 #: company/templates/company/manufacturer_part.html:254 -#: part/templates/part/detail.html:347 part/templates/part/detail.html:376 +#: part/templates/part/detail.html:364 part/templates/part/detail.html:393 #: templates/js/translated/company.js:426 templates/js/translated/helpers.js:31 -#: users/models.py:210 +#: users/models.py:212 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:143 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:17 -#: part/templates/part/detail.html:170 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:187 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:147 -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:192 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part.html:65 msgid "New Parameter" @@ -2773,7 +2862,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:191 -#: part/templates/part/detail.html:862 +#: part/templates/part/detail.html:892 msgid "Add Parameter" msgstr "" @@ -2802,9 +2891,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:477 +#: company/templates/company/supplier_part.html:24 stock/models.py:479 #: stock/templates/stock/item_base.html:402 -#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1748 +#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1756 msgid "Supplier Part" msgstr "" @@ -2830,7 +2919,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:167 -#: templates/js/translated/stock.js:360 +#: templates/js/translated/stock.js:368 msgid "New Stock Item" msgstr "" @@ -2840,7 +2929,7 @@ msgid "Supplier Part Orders" msgstr "" #: company/templates/company/supplier_part.html:160 -#: part/templates/part/detail.html:72 +#: part/templates/part/detail.html:89 msgid "Order Part" msgstr "" @@ -2851,7 +2940,7 @@ msgstr "" #: company/templates/company/supplier_part.html:184 #: company/templates/company/supplier_part.html:290 -#: part/templates/part/prices.html:271 part/views.py:1619 +#: part/templates/part/prices.html:271 part/views.py:1628 msgid "Add Price Break" msgstr "" @@ -2859,11 +2948,11 @@ msgstr "" msgid "No price break information found" msgstr "" -#: company/templates/company/supplier_part.html:224 part/views.py:1681 +#: company/templates/company/supplier_part.html:224 part/views.py:1690 msgid "Delete Price Break" msgstr "" -#: company/templates/company/supplier_part.html:238 part/views.py:1667 +#: company/templates/company/supplier_part.html:238 part/views.py:1676 msgid "Edit Price Break" msgstr "" @@ -2881,10 +2970,10 @@ msgstr "" #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:150 #: templates/InvenTree/settings/sidebar.html:41 -#: templates/js/translated/bom.js:328 templates/js/translated/part.js:489 -#: templates/js/translated/part.js:624 templates/js/translated/part.js:1118 -#: templates/js/translated/part.js:1279 templates/js/translated/stock.js:927 -#: templates/js/translated/stock.js:1580 templates/navbar.html:28 +#: templates/js/translated/bom.js:340 templates/js/translated/part.js:495 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1125 +#: templates/js/translated/part.js:1286 templates/js/translated/stock.js:935 +#: templates/js/translated/stock.js:1588 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2907,8 +2996,8 @@ msgstr "" #: stock/templates/stock/location.html:151 #: stock/templates/stock/location.html:163 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2351 -#: templates/stats.html:93 templates/stats.html:102 users/models.py:43 +#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2509 +#: templates/stats.html:105 templates/stats.html:114 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2937,20 +3026,20 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:129 part/views.py:584 +#: company/views.py:129 part/views.py:593 msgid "Download Image" msgstr "" -#: company/views.py:158 part/views.py:616 +#: company/views.py:158 part/views.py:625 msgid "Image size exceeds maximum allowable size for download" msgstr "" -#: company/views.py:165 part/views.py:623 +#: company/views.py:165 part/views.py:632 #, python-brace-format msgid "Invalid response: {code}" msgstr "" -#: company/views.py:174 part/views.py:632 +#: company/views.py:174 part/views.py:641 msgid "Supplied URL is not a valid image file" msgstr "" @@ -3036,282 +3125,282 @@ msgstr "" msgid "Cancel order" msgstr "" -#: order/models.py:122 +#: order/models.py:125 msgid "Order description" msgstr "" -#: order/models.py:124 +#: order/models.py:127 msgid "Link to external page" msgstr "" -#: order/models.py:132 +#: order/models.py:135 msgid "Created By" msgstr "" -#: order/models.py:139 +#: order/models.py:142 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:144 +#: order/models.py:147 msgid "Order notes" msgstr "" -#: order/models.py:211 order/models.py:537 +#: order/models.py:214 order/models.py:542 msgid "Order reference" msgstr "" -#: order/models.py:216 order/models.py:552 +#: order/models.py:219 order/models.py:557 msgid "Purchase order status" msgstr "" -#: order/models.py:225 +#: order/models.py:228 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:228 order/templates/order/order_base.html:118 +#: order/models.py:231 order/templates/order/order_base.html:118 #: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:228 +#: order/models.py:231 msgid "Supplier order reference code" msgstr "" -#: order/models.py:235 +#: order/models.py:238 msgid "received by" msgstr "" -#: order/models.py:240 +#: order/models.py:243 msgid "Issue Date" msgstr "" -#: order/models.py:241 +#: order/models.py:244 msgid "Date order was issued" msgstr "" -#: order/models.py:246 +#: order/models.py:249 msgid "Target Delivery Date" msgstr "" -#: order/models.py:247 +#: order/models.py:250 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:253 +#: order/models.py:256 msgid "Date order was completed" msgstr "" -#: order/models.py:282 +#: order/models.py:285 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:411 -msgid "Quantity must be an integer" -msgstr "" - -#: order/models.py:415 +#: order/models.py:420 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:548 +#: order/models.py:553 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer Reference " msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer order reference code" msgstr "" -#: order/models.py:559 +#: order/models.py:564 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:562 order/models.py:1028 +#: order/models.py:567 order/models.py:1048 #: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:569 +#: order/models.py:574 msgid "shipped by" msgstr "" -#: order/models.py:635 +#: order/models.py:640 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:639 +#: order/models.py:644 msgid "Only a pending order can be marked as complete" msgstr "" -#: order/models.py:642 +#: order/models.py:647 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:645 +#: order/models.py:650 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:797 +#: order/models.py:806 msgid "Item quantity" msgstr "" -#: order/models.py:803 +#: order/models.py:812 msgid "Line item reference" msgstr "" -#: order/models.py:805 +#: order/models.py:814 msgid "Line item notes" msgstr "" -#: order/models.py:835 order/models.py:926 order/models.py:1022 -#: templates/js/translated/order.js:1820 +#: order/models.py:842 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:855 order/models.py:946 order/models.py:1042 +#: templates/js/translated/order.js:1820 templates/js/translated/stock.js:2271 msgid "Order" msgstr "" -#: order/models.py:836 order/templates/order/order_base.html:9 +#: order/models.py:856 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:352 -#: templates/js/translated/order.js:801 templates/js/translated/part.js:832 -#: templates/js/translated/stock.js:1725 templates/js/translated/stock.js:2433 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:838 +#: templates/js/translated/stock.js:1733 templates/js/translated/stock.js:2591 msgid "Purchase Order" msgstr "" -#: order/models.py:857 +#: order/models.py:877 msgid "Supplier part" msgstr "" -#: order/models.py:864 order/templates/order/order_base.html:163 +#: order/models.py:884 order/templates/order/order_base.html:163 #: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 -#: templates/js/translated/part.js:904 templates/js/translated/part.js:930 +#: templates/js/translated/part.js:910 templates/js/translated/part.js:937 #: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:865 +#: order/models.py:885 msgid "Number of items received" msgstr "" -#: order/models.py:872 part/templates/part/prices.html:176 stock/models.py:606 +#: order/models.py:892 part/templates/part/prices.html:176 stock/models.py:608 #: stock/serializers.py:170 stock/templates/stock/item_base.html:359 -#: templates/js/translated/stock.js:1779 +#: templates/js/translated/stock.js:1787 msgid "Purchase Price" msgstr "" -#: order/models.py:873 +#: order/models.py:893 msgid "Unit purchase price" msgstr "" -#: order/models.py:881 +#: order/models.py:901 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:936 part/templates/part/part_pricing.html:112 +#: order/models.py:956 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:937 +#: order/models.py:957 msgid "Unit sale price" msgstr "" -#: order/models.py:942 +#: order/models.py:962 msgid "Shipped quantity" msgstr "" -#: order/models.py:1029 +#: order/models.py:1049 msgid "Date of shipment" msgstr "" -#: order/models.py:1036 +#: order/models.py:1056 msgid "Checked By" msgstr "" -#: order/models.py:1037 +#: order/models.py:1057 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1045 +#: order/models.py:1065 msgid "Shipment number" msgstr "" -#: order/models.py:1052 +#: order/models.py:1072 msgid "Shipment notes" msgstr "" -#: order/models.py:1059 +#: order/models.py:1079 msgid "Tracking Number" msgstr "" -#: order/models.py:1060 +#: order/models.py:1080 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1070 +#: order/models.py:1090 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1073 +#: order/models.py:1093 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1149 order/models.py:1151 +#: order/models.py:1171 order/models.py:1173 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1155 +#: order/models.py:1177 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1157 +#: order/models.py:1179 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1160 +#: order/models.py:1182 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1164 +#: order/models.py:1186 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:1170 order/serializers.py:734 +#: order/models.py:1192 order/serializers.py:740 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1173 +#: order/models.py:1195 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1174 +#: order/models.py:1196 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1182 +#: order/models.py:1204 msgid "Line" msgstr "" -#: order/models.py:1190 order/serializers.py:825 order/serializers.py:953 -#: templates/js/translated/model_renderers.js:251 +#: order/models.py:1212 order/serializers.py:831 order/serializers.py:959 +#: templates/js/translated/model_renderers.js:285 msgid "Shipment" msgstr "" -#: order/models.py:1191 +#: order/models.py:1213 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1203 +#: order/models.py:1225 msgid "Item" msgstr "" -#: order/models.py:1204 +#: order/models.py:1226 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1207 +#: order/models.py:1229 msgid "Enter stock allocation quantity" msgstr "" @@ -3319,7 +3408,7 @@ msgstr "" msgid "Purchase price currency" msgstr "" -#: order/serializers.py:211 order/serializers.py:790 +#: order/serializers.py:211 order/serializers.py:796 msgid "Line Item" msgstr "" @@ -3355,39 +3444,39 @@ msgstr "" msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:587 msgid "Sale price currency" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:655 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:699 order/serializers.py:802 +#: order/serializers.py:705 order/serializers.py:808 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:721 +#: order/serializers.py:727 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:815 +#: order/serializers.py:821 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:839 order/serializers.py:964 +#: order/serializers.py:845 order/serializers.py:970 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:842 order/serializers.py:967 +#: order/serializers.py:848 order/serializers.py:973 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:894 +#: order/serializers.py:900 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:910 msgid "The following serial numbers are already allocated" msgstr "" @@ -3441,6 +3530,7 @@ msgstr "" #: order/templates/order/order_base.html:94 #: order/templates/order/sales_order_base.html:89 +#: templates/js/translated/stock.js:2327 msgid "Order Status" msgstr "" @@ -3538,7 +3628,7 @@ msgstr "" #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/build.js:300 templates/js/translated/build.js:1311 #: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 -#: templates/js/translated/stock.js:593 templates/js/translated/stock.js:761 +#: templates/js/translated/stock.js:601 templates/js/translated/stock.js:769 msgid "Remove row" msgstr "" @@ -3729,7 +3819,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:48 -#: templates/js/translated/bom.js:720 templates/js/translated/build.js:1243 +#: templates/js/translated/bom.js:732 templates/js/translated/build.js:1243 msgid "Actions" msgstr "" @@ -3832,447 +3922,448 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:125 part/models.py:81 part/models.py:847 +#: part/bom.py:125 part/models.py:83 part/models.py:849 #: part/templates/part/category.html:108 part/templates/part/part_base.html:338 msgid "Default Location" msgstr "" -#: part/bom.py:126 part/templates/part/part_base.html:185 +#: part/bom.py:126 templates/email/low_stock_notification.html:17 +msgid "Total Stock" +msgstr "" + +#: part/bom.py:127 part/templates/part/part_base.html:185 msgid "Available Stock" msgstr "" -#: part/forms.py:85 +#: part/bom.py:128 part/templates/part/part_base.html:203 +#: templates/js/translated/part.js:1301 +msgid "On Order" +msgstr "" + +#: part/forms.py:84 msgid "Select part category" msgstr "" -#: part/forms.py:122 +#: part/forms.py:121 msgid "Add parameter template to same level categories" msgstr "" -#: part/forms.py:126 +#: part/forms.py:125 msgid "Add parameter template to all categories" msgstr "" -#: part/forms.py:146 +#: part/forms.py:145 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 +#: part/models.py:84 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:95 part/models.py:2526 part/templates/part/category.html:15 +#: part/models.py:97 part/models.py:2533 part/templates/part/category.html:15 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:96 part/templates/part/category.html:128 -#: templates/InvenTree/search.html:95 templates/stats.html:84 +#: part/models.py:98 part/templates/part/category.html:128 +#: templates/InvenTree/search.html:95 templates/stats.html:96 #: users/models.py:40 msgid "Part Categories" msgstr "" -#: part/models.py:358 part/templates/part/cat_link.html:3 +#: part/models.py:360 part/templates/part/cat_link.html:3 #: part/templates/part/category.html:17 part/templates/part/category.html:133 #: part/templates/part/category.html:153 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82 #: templates/InvenTree/settings/sidebar.html:37 -#: templates/js/translated/part.js:1656 templates/navbar.html:21 -#: templates/stats.html:80 templates/stats.html:89 users/models.py:41 +#: templates/js/translated/part.js:1663 templates/navbar.html:21 +#: templates/stats.html:92 templates/stats.html:101 users/models.py:41 msgid "Parts" msgstr "" -#: part/models.py:450 +#: part/models.py:452 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:500 part/models.py:512 +#: part/models.py:502 part/models.py:514 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:642 +#: part/models.py:644 msgid "Next available serial numbers are" msgstr "" -#: part/models.py:646 +#: part/models.py:648 msgid "Next available serial number is" msgstr "" -#: part/models.py:651 +#: part/models.py:653 msgid "Most recent serial number is" msgstr "" -#: part/models.py:746 +#: part/models.py:748 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:771 +#: part/models.py:773 msgid "Part name" msgstr "" -#: part/models.py:778 +#: part/models.py:780 msgid "Is Template" msgstr "" -#: part/models.py:779 +#: part/models.py:781 msgid "Is this part a template part?" msgstr "" -#: part/models.py:789 +#: part/models.py:791 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:790 +#: part/models.py:792 msgid "Variant Of" msgstr "" -#: part/models.py:796 +#: part/models.py:798 msgid "Part description" msgstr "" -#: part/models.py:801 part/templates/part/category.html:86 +#: part/models.py:803 part/templates/part/category.html:86 #: part/templates/part/part_base.html:302 msgid "Keywords" msgstr "" -#: part/models.py:802 +#: part/models.py:804 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:809 part/models.py:2276 part/models.py:2525 +#: part/models.py:811 part/models.py:2283 part/models.py:2532 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:183 -#: templates/js/translated/part.js:1261 +#: templates/InvenTree/settings/settings.html:186 +#: templates/js/translated/part.js:1268 msgid "Category" msgstr "" -#: part/models.py:810 +#: part/models.py:812 msgid "Part category" msgstr "" -#: part/models.py:815 part/templates/part/part_base.html:274 -#: templates/js/translated/part.js:612 templates/js/translated/part.js:1214 -#: templates/js/translated/stock.js:1552 +#: part/models.py:817 part/templates/part/part_base.html:274 +#: templates/js/translated/part.js:618 templates/js/translated/part.js:1221 +#: templates/js/translated/stock.js:1560 msgid "IPN" msgstr "" -#: part/models.py:816 +#: part/models.py:818 msgid "Internal Part Number" msgstr "" -#: part/models.py:822 +#: part/models.py:824 msgid "Part revision or version number" msgstr "" -#: part/models.py:823 part/templates/part/part_base.html:281 -#: report/models.py:200 templates/js/translated/part.js:616 +#: part/models.py:825 part/templates/part/part_base.html:281 +#: report/models.py:200 templates/js/translated/part.js:622 msgid "Revision" msgstr "" -#: part/models.py:845 +#: part/models.py:847 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:892 part/templates/part/part_base.html:347 +#: part/models.py:894 part/templates/part/part_base.html:347 msgid "Default Supplier" msgstr "" -#: part/models.py:893 +#: part/models.py:895 msgid "Default supplier part" msgstr "" -#: part/models.py:900 +#: part/models.py:902 msgid "Default Expiry" msgstr "" -#: part/models.py:901 +#: part/models.py:903 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:906 part/templates/part/part_base.html:196 +#: part/models.py:908 part/templates/part/part_base.html:196 msgid "Minimum Stock" msgstr "" -#: part/models.py:907 +#: part/models.py:909 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:914 +#: part/models.py:916 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:920 +#: part/models.py:922 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:926 +#: part/models.py:928 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:932 +#: part/models.py:934 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:937 +#: part/models.py:939 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:942 +#: part/models.py:944 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:946 plugin/models.py:46 -#: templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:295 -#: templates/js/translated/table_filters.js:417 -msgid "Active" -msgstr "" - -#: part/models.py:947 +#: part/models.py:949 msgid "Is this part active?" msgstr "" -#: part/models.py:952 +#: part/models.py:954 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:957 +#: part/models.py:959 msgid "Part notes - supports Markdown formatting" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "BOM checksum" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:963 +#: part/models.py:965 msgid "BOM checked by" msgstr "" -#: part/models.py:965 +#: part/models.py:967 msgid "BOM checked date" msgstr "" -#: part/models.py:969 +#: part/models.py:971 msgid "Creation User" msgstr "" -#: part/models.py:1781 +#: part/models.py:1783 msgid "Sell multiple" msgstr "" -#: part/models.py:2326 +#: part/models.py:2333 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2343 +#: part/models.py:2350 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2363 templates/js/translated/part.js:1707 -#: templates/js/translated/stock.js:1276 +#: part/models.py:2370 templates/js/translated/part.js:1714 +#: templates/js/translated/stock.js:1284 msgid "Test Name" msgstr "" -#: part/models.py:2364 +#: part/models.py:2371 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2369 +#: part/models.py:2376 msgid "Test Description" msgstr "" -#: part/models.py:2370 +#: part/models.py:2377 msgid "Enter description for this test" msgstr "" -#: part/models.py:2375 templates/js/translated/part.js:1716 +#: part/models.py:2382 templates/js/translated/part.js:1723 #: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" -#: part/models.py:2376 +#: part/models.py:2383 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2381 templates/js/translated/part.js:1724 +#: part/models.py:2388 templates/js/translated/part.js:1731 msgid "Requires Value" msgstr "" -#: part/models.py:2382 +#: part/models.py:2389 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2387 templates/js/translated/part.js:1731 +#: part/models.py:2394 templates/js/translated/part.js:1738 msgid "Requires Attachment" msgstr "" -#: part/models.py:2388 +#: part/models.py:2395 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2399 +#: part/models.py:2406 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2435 +#: part/models.py:2442 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2443 +#: part/models.py:2450 msgid "Parameter Name" msgstr "" -#: part/models.py:2450 +#: part/models.py:2457 msgid "Parameter Units" msgstr "" -#: part/models.py:2480 +#: part/models.py:2487 msgid "Parent Part" msgstr "" -#: part/models.py:2482 part/models.py:2531 part/models.py:2532 -#: templates/InvenTree/settings/settings.html:178 +#: part/models.py:2489 part/models.py:2538 part/models.py:2539 +#: templates/InvenTree/settings/settings.html:181 msgid "Parameter Template" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Data" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Parameter Value" msgstr "" -#: part/models.py:2536 templates/InvenTree/settings/settings.html:187 +#: part/models.py:2543 templates/InvenTree/settings/settings.html:190 msgid "Default Value" msgstr "" -#: part/models.py:2537 +#: part/models.py:2544 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2614 +#: part/models.py:2621 msgid "Select parent part" msgstr "" -#: part/models.py:2622 +#: part/models.py:2629 msgid "Sub part" msgstr "" -#: part/models.py:2623 +#: part/models.py:2630 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2629 +#: part/models.py:2636 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2631 templates/js/translated/bom.js:566 -#: templates/js/translated/bom.js:640 +#: part/models.py:2638 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:652 #: templates/js/translated/table_filters.js:92 msgid "Optional" msgstr "" -#: part/models.py:2631 +#: part/models.py:2638 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2634 +#: part/models.py:2641 msgid "Overage" msgstr "" -#: part/models.py:2635 +#: part/models.py:2642 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2638 +#: part/models.py:2645 msgid "BOM item reference" msgstr "" -#: part/models.py:2641 +#: part/models.py:2648 msgid "BOM item notes" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "Checksum" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "BOM line checksum" msgstr "" -#: part/models.py:2647 templates/js/translated/bom.js:657 +#: part/models.py:2654 templates/js/translated/bom.js:669 #: templates/js/translated/table_filters.js:68 #: templates/js/translated/table_filters.js:88 msgid "Inherited" msgstr "" -#: part/models.py:2648 +#: part/models.py:2655 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2653 templates/js/translated/bom.js:649 +#: part/models.py:2660 templates/js/translated/bom.js:661 msgid "Allow Variants" msgstr "" -#: part/models.py:2654 +#: part/models.py:2661 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2739 stock/models.py:355 +#: part/models.py:2746 stock/models.py:357 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2748 part/models.py:2750 +#: part/models.py:2755 part/models.py:2757 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2879 +#: part/models.py:2886 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2901 +#: part/models.py:2908 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2913 +#: part/models.py:2920 msgid "Parent BOM item" msgstr "" -#: part/models.py:2921 +#: part/models.py:2928 msgid "Substitute part" msgstr "" -#: part/models.py:2932 +#: part/models.py:2939 msgid "Part 1" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Part 2" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Select Related Part" msgstr "" -#: part/models.py:2968 +#: part/models.py:2975 msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique" msgstr "" @@ -4327,7 +4418,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:253 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:270 msgid "BOM actions" msgstr "" @@ -4499,7 +4590,7 @@ msgstr "" msgid "Import Parts" msgstr "" -#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:375 +#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:348 msgid "Duplicate Part" msgstr "" @@ -4533,145 +4624,149 @@ msgid "Showing stock for all variants of %(full_name)s" msgstr "" #: part/templates/part/detail.html:43 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/detail.html:60 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:48 +#: part/templates/part/detail.html:65 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:105 +#: part/templates/part/detail.html:122 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:142 +#: part/templates/part/detail.html:159 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:146 +#: part/templates/part/detail.html:163 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:147 +#: part/templates/part/detail.html:164 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:174 +#: part/templates/part/detail.html:191 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:45 +#: part/templates/part/detail.html:228 part/templates/part/part_sidebar.html:49 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:215 part/templates/part/detail.html:216 +#: part/templates/part/detail.html:232 part/templates/part/detail.html:233 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:253 part/templates/part/part_sidebar.html:17 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:241 +#: part/templates/part/detail.html:258 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:245 templates/js/translated/bom.js:70 +#: part/templates/part/detail.html:262 templates/js/translated/bom.js:70 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:247 +#: part/templates/part/detail.html:264 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:257 +#: part/templates/part/detail.html:274 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:259 templates/js/translated/part.js:272 +#: part/templates/part/detail.html:276 templates/js/translated/part.js:272 msgid "Copy BOM" msgstr "" -#: part/templates/part/detail.html:261 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:283 msgid "New BOM Item" msgstr "" -#: part/templates/part/detail.html:267 +#: part/templates/part/detail.html:284 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:280 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:314 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:322 +#: part/templates/part/detail.html:339 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:332 +#: part/templates/part/detail.html:349 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:360 +#: part/templates/part/detail.html:377 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:393 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:558 +#: part/templates/part/detail.html:575 msgid "Delete selected BOM items?" msgstr "" -#: part/templates/part/detail.html:559 +#: part/templates/part/detail.html:576 msgid "All selected BOM items will be deleted" msgstr "" -#: part/templates/part/detail.html:608 +#: part/templates/part/detail.html:625 msgid "Create BOM Item" msgstr "" -#: part/templates/part/detail.html:652 +#: part/templates/part/detail.html:682 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:660 +#: part/templates/part/detail.html:690 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:755 +#: part/templates/part/detail.html:785 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:812 +#: part/templates/part/detail.html:842 msgid "Edit Part Notes" msgstr "" -#: part/templates/part/detail.html:925 +#: part/templates/part/detail.html:955 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:937 +#: part/templates/part/detail.html:967 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:949 +#: part/templates/part/detail.html:979 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1038 +#: part/templates/part/detail.html:1068 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -4786,7 +4881,7 @@ msgstr "" #: templates/js/translated/company.js:508 #: templates/js/translated/company.js:765 #: templates/js/translated/model_renderers.js:175 -#: templates/js/translated/part.js:527 templates/js/translated/part.js:604 +#: templates/js/translated/part.js:533 templates/js/translated/part.js:610 msgid "Inactive" msgstr "" @@ -4805,10 +4900,6 @@ msgstr "" msgid "In Stock" msgstr "" -#: part/templates/part/part_base.html:203 templates/js/translated/part.js:1294 -msgid "On Order" -msgstr "" - #: part/templates/part/part_base.html:210 templates/InvenTree/index.html:178 msgid "Required for Build Orders" msgstr "" @@ -4821,12 +4912,12 @@ msgstr "" msgid "Allocated to Orders" msgstr "" -#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:678 +#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:690 msgid "Can Build" msgstr "" -#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1125 -#: templates/js/translated/part.js:1298 +#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1132 +#: templates/js/translated/part.js:1305 msgid "Building" msgstr "" @@ -4878,7 +4969,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:40 -#: templates/js/translated/bom.js:632 +#: templates/js/translated/bom.js:644 msgid "No supplier pricing available" msgstr "" @@ -4920,7 +5011,12 @@ msgstr "" msgid "Used In" msgstr "" -#: part/templates/part/part_sidebar.html:41 +#: part/templates/part/part_sidebar.html:31 +#: stock/templates/stock/stock_sidebar.html:8 +msgid "Allocations" +msgstr "" + +#: part/templates/part/part_sidebar.html:45 msgid "Test Templates" msgstr "" @@ -4993,7 +5089,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:155 templates/js/translated/bom.js:626 +#: part/templates/part/prices.html:155 templates/js/translated/bom.js:638 msgid "Supplier Cost" msgstr "" @@ -5015,7 +5111,7 @@ msgstr "" msgid "Internal Cost" msgstr "" -#: part/templates/part/prices.html:215 part/views.py:1690 +#: part/templates/part/prices.html:215 part/views.py:1699 msgid "Add Internal Price Break" msgstr "" @@ -5035,9 +5131,9 @@ msgstr "" msgid "Set category for the following parts" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:588 -#: templates/js/translated/part.js:491 templates/js/translated/part.js:1115 -#: templates/js/translated/part.js:1302 +#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:600 +#: templates/js/translated/part.js:497 templates/js/translated/part.js:1122 +#: templates/js/translated/part.js:1309 msgid "No Stock" msgstr "" @@ -5054,116 +5150,116 @@ msgstr "" msgid "Create a new variant of template '%(full_name)s'." msgstr "" -#: part/templatetags/inventree_extras.py:116 +#: part/templatetags/inventree_extras.py:125 msgid "Unknown database" msgstr "" -#: part/views.py:92 +#: part/views.py:93 msgid "Set Part Category" msgstr "" -#: part/views.py:142 +#: part/views.py:143 #, python-brace-format msgid "Set category for {n} parts" msgstr "" -#: part/views.py:214 +#: part/views.py:215 msgid "Match References" msgstr "" -#: part/views.py:502 +#: part/views.py:511 msgid "None" msgstr "" -#: part/views.py:561 +#: part/views.py:570 msgid "Part QR Code" msgstr "" -#: part/views.py:663 +#: part/views.py:672 msgid "Select Part Image" msgstr "" -#: part/views.py:689 +#: part/views.py:698 msgid "Updated part image" msgstr "" -#: part/views.py:692 +#: part/views.py:701 msgid "Part image not found" msgstr "" -#: part/views.py:766 +#: part/views.py:775 msgid "Match Parts" msgstr "" -#: part/views.py:1101 +#: part/views.py:1110 msgid "Export Bill of Materials" msgstr "" -#: part/views.py:1150 +#: part/views.py:1159 msgid "Confirm Part Deletion" msgstr "" -#: part/views.py:1157 +#: part/views.py:1166 msgid "Part was deleted" msgstr "" -#: part/views.py:1166 +#: part/views.py:1175 msgid "Part Pricing" msgstr "" -#: part/views.py:1315 +#: part/views.py:1324 msgid "Create Part Parameter Template" msgstr "" -#: part/views.py:1325 +#: part/views.py:1334 msgid "Edit Part Parameter Template" msgstr "" -#: part/views.py:1332 +#: part/views.py:1341 msgid "Delete Part Parameter Template" msgstr "" -#: part/views.py:1391 templates/js/translated/part.js:315 +#: part/views.py:1400 templates/js/translated/part.js:315 msgid "Edit Part Category" msgstr "" -#: part/views.py:1429 +#: part/views.py:1438 msgid "Delete Part Category" msgstr "" -#: part/views.py:1435 +#: part/views.py:1444 msgid "Part category was deleted" msgstr "" -#: part/views.py:1444 +#: part/views.py:1453 msgid "Create Category Parameter Template" msgstr "" -#: part/views.py:1545 +#: part/views.py:1554 msgid "Edit Category Parameter Template" msgstr "" -#: part/views.py:1601 +#: part/views.py:1610 msgid "Delete Category Parameter Template" msgstr "" -#: part/views.py:1623 +#: part/views.py:1632 msgid "Added new price break" msgstr "" -#: part/views.py:1699 +#: part/views.py:1708 msgid "Edit Internal Price Break" msgstr "" -#: part/views.py:1707 +#: part/views.py:1716 msgid "Delete Internal Price Break" msgstr "" -#: plugin/integration.py:124 +#: plugin/integration.py:138 msgid "No author found" msgstr "" -#: plugin/integration.py:136 +#: plugin/integration.py:152 msgid "No date found" msgstr "" @@ -5191,7 +5287,7 @@ msgstr "" msgid "Is the plugin active" msgstr "" -#: plugin/models.py:195 +#: plugin/models.py:199 msgid "Plugin" msgstr "" @@ -5357,12 +5453,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:517 stock/templates/stock/item_base.html:156 +#: stock/models.py:519 stock/templates/stock/item_base.html:156 #: templates/js/translated/build.js:293 templates/js/translated/build.js:697 #: templates/js/translated/build.js:1073 #: templates/js/translated/model_renderers.js:95 #: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 -#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:415 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:423 msgid "Serial Number" msgstr "" @@ -5371,19 +5467,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1948 +#: stock/models.py:1976 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1954 +#: stock/models.py:1982 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin.html:50 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2367 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2525 msgid "Date" msgstr "" @@ -5396,23 +5492,27 @@ msgid "Fail" msgstr "" #: report/templates/report/inventree_test_report_base.html:123 -#: stock/templates/stock/stock_sidebar.html:12 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:578 templates/js/translated/stock.js:748 -#: templates/js/translated/stock.js:2627 +#: templates/js/translated/stock.js:586 templates/js/translated/stock.js:756 +#: templates/js/translated/stock.js:2785 msgid "Serial" msgstr "" -#: stock/api.py:478 +#: stock/api.py:476 msgid "Quantity is required" msgstr "" -#: stock/forms.py:77 stock/forms.py:251 stock/models.py:574 +#: stock/api.py:483 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:576 #: stock/templates/stock/item_base.html:193 -#: templates/js/translated/stock.js:1701 +#: templates/js/translated/stock.js:1709 msgid "Expiry Date" msgstr "" @@ -5460,228 +5560,228 @@ msgstr "" msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:611 +#: stock/models.py:62 stock/models.py:613 #: stock/templates/stock/item_base.html:416 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:612 +#: stock/models.py:63 stock/models.py:614 msgid "Select Owner" msgstr "" -#: stock/models.py:336 +#: stock/models.py:338 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:372 +#: stock/models.py:374 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:382 stock/models.py:391 +#: stock/models.py:384 stock/models.py:393 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:383 +#: stock/models.py:385 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:405 +#: stock/models.py:407 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:411 +#: stock/models.py:413 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:418 +#: stock/models.py:420 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:461 +#: stock/models.py:463 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:470 +#: stock/models.py:472 msgid "Base part" msgstr "" -#: stock/models.py:478 +#: stock/models.py:480 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:484 stock/templates/stock/location.html:16 +#: stock/models.py:486 stock/templates/stock/location.html:16 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:494 +#: stock/models.py:496 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:500 stock/templates/stock/item_base.html:298 +#: stock/models.py:502 stock/templates/stock/item_base.html:298 msgid "Installed In" msgstr "" -#: stock/models.py:503 +#: stock/models.py:505 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:519 +#: stock/models.py:521 msgid "Serial number for this item" msgstr "" -#: stock/models.py:533 +#: stock/models.py:535 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:537 +#: stock/models.py:539 msgid "Stock Quantity" msgstr "" -#: stock/models.py:546 +#: stock/models.py:548 msgid "Source Build" msgstr "" -#: stock/models.py:548 +#: stock/models.py:550 msgid "Build for this stock item" msgstr "" -#: stock/models.py:559 +#: stock/models.py:561 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:562 +#: stock/models.py:564 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:568 +#: stock/models.py:570 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:575 +#: stock/models.py:577 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete on deplete" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:598 stock/templates/stock/item.html:111 +#: stock/models.py:600 stock/templates/stock/item.html:128 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:607 +#: stock/models.py:609 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1096 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1074 +#: stock/models.py:1102 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1080 +#: stock/models.py:1108 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1083 +#: stock/models.py:1111 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1086 +#: stock/models.py:1114 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1093 +#: stock/models.py:1121 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1164 +#: stock/models.py:1192 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1195 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1170 +#: stock/models.py:1198 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1173 +#: stock/models.py:1201 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1176 +#: stock/models.py:1204 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1179 +#: stock/models.py:1207 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1186 stock/serializers.py:774 +#: stock/models.py:1214 stock/serializers.py:775 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1190 +#: stock/models.py:1218 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1222 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1198 +#: stock/models.py:1226 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1369 +#: stock/models.py:1397 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1868 +#: stock/models.py:1896 msgid "Entry notes" msgstr "" -#: stock/models.py:1925 +#: stock/models.py:1953 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1931 +#: stock/models.py:1959 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1949 +#: stock/models.py:1977 msgid "Test name" msgstr "" -#: stock/models.py:1955 templates/js/translated/table_filters.js:271 +#: stock/models.py:1983 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1961 +#: stock/models.py:1989 msgid "Test output value" msgstr "" -#: stock/models.py:1968 +#: stock/models.py:1996 msgid "Test result attachment" msgstr "" -#: stock/models.py:1974 +#: stock/models.py:2002 msgid "Test notes" msgstr "" @@ -5706,7 +5806,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:326 stock/serializers.py:731 stock/serializers.py:972 +#: stock/serializers.py:326 stock/serializers.py:732 stock/serializers.py:973 msgid "Destination stock location" msgstr "" @@ -5718,63 +5818,63 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:589 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:592 +#: stock/serializers.py:593 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:597 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:626 +#: stock/serializers.py:627 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:632 +#: stock/serializers.py:633 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:640 +#: stock/serializers.py:641 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:650 stock/serializers.py:880 +#: stock/serializers.py:651 stock/serializers.py:881 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:738 +#: stock/serializers.py:739 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:743 +#: stock/serializers.py:744 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:744 +#: stock/serializers.py:745 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:749 +#: stock/serializers.py:750 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:750 +#: stock/serializers.py:751 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:760 +#: stock/serializers.py:761 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:842 +#: stock/serializers.py:843 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:870 +#: stock/serializers.py:871 msgid "Stock transaction notes" msgstr "" @@ -5787,47 +5887,51 @@ msgid "New Entry" msgstr "" #: stock/templates/stock/item.html:48 -msgid "Child Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:55 -msgid "This stock item does not have any child items" +msgid "Stock Item Allocations" msgstr "" #: stock/templates/stock/item.html:64 -#: stock/templates/stock/stock_sidebar.html:8 -msgid "Test Data" -msgstr "" - -#: stock/templates/stock/item.html:68 stock/templates/stock/item_base.html:57 -msgid "Test Report" +msgid "Child Stock Items" msgstr "" #: stock/templates/stock/item.html:72 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item.html:81 +#: stock/templates/stock/stock_sidebar.html:12 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:57 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item.html:89 msgid "Delete Test Data" msgstr "" -#: stock/templates/stock/item.html:76 +#: stock/templates/stock/item.html:93 msgid "Add Test Data" msgstr "" -#: stock/templates/stock/item.html:133 +#: stock/templates/stock/item.html:150 msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:482 +#: stock/templates/stock/item.html:154 stock/views.py:482 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:279 stock/templates/stock/item.html:304 +#: stock/templates/stock/item.html:309 stock/templates/stock/item.html:334 msgid "Add Test Result" msgstr "" -#: stock/templates/stock/item.html:324 +#: stock/templates/stock/item.html:354 msgid "Edit Test Result" msgstr "" -#: stock/templates/stock/item.html:338 +#: stock/templates/stock/item.html:368 msgid "Delete Test Result" msgstr "" @@ -5952,7 +6056,7 @@ msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:206 -#: templates/js/translated/stock.js:1714 +#: templates/js/translated/stock.js:1722 msgid "Last Updated" msgstr "" @@ -6111,7 +6215,7 @@ msgid "Sublocations" msgstr "" #: stock/templates/stock/location.html:146 templates/InvenTree/search.html:164 -#: templates/stats.html:97 users/models.py:42 +#: templates/stats.html:109 users/models.py:42 msgid "Stock Locations" msgstr "" @@ -6135,7 +6239,7 @@ msgstr "" msgid "Stock Tracking" msgstr "" -#: stock/templates/stock/stock_sidebar.html:16 +#: stock/templates/stock/stock_sidebar.html:20 msgid "Child Items" msgstr "" @@ -6164,7 +6268,7 @@ msgstr "" msgid "Are you sure you want to delete this stock tracking entry?" msgstr "" -#: stock/views.py:162 +#: stock/views.py:162 templates/js/translated/stock.js:139 msgid "Edit Stock Location" msgstr "" @@ -6204,7 +6308,7 @@ msgstr "" msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:727 templates/js/translated/stock.js:1066 +#: stock/views.py:727 templates/js/translated/stock.js:1074 msgid "Confirm stock adjustment" msgstr "" @@ -6212,7 +6316,7 @@ msgstr "" msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:324 +#: stock/views.py:760 templates/js/translated/stock.js:332 msgid "Edit Stock Item" msgstr "" @@ -6224,7 +6328,7 @@ msgstr "" msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1153 templates/js/translated/stock.js:304 +#: stock/views.py:1153 templates/js/translated/stock.js:312 msgid "Duplicate Stock Item" msgstr "" @@ -6268,6 +6372,18 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/500.html:5 templates/500.html:11 +msgid "Internal Server Error" +msgstr "" + +#: templates/500.html:14 +msgid "The InvenTree server raised an internal error" +msgstr "" + +#: templates/500.html:15 +msgid "Refer to the error log in the admin interface for further details" +msgstr "" + #: templates/503.html:10 templates/503.html:35 msgid "Site is in Maintenance" msgstr "" @@ -6390,7 +6506,7 @@ msgid "Signup" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:113 msgid "Settings" msgstr "" @@ -6431,43 +6547,43 @@ msgstr "" msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:32 +#: templates/InvenTree/settings/plugin.html:33 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:37 +#: templates/InvenTree/settings/plugin.html:38 #: templates/js/translated/plugin.js:15 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: templates/InvenTree/settings/plugin.html:47 templates/navbar.html:111 #: users/models.py:39 msgid "Admin" msgstr "" -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:49 #: templates/InvenTree/settings/plugin_settings.html:28 msgid "Author" msgstr "" -#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin_settings.html:43 msgid "Version" msgstr "" -#: templates/InvenTree/settings/plugin.html:91 +#: templates/InvenTree/settings/plugin.html:92 msgid "Inactive plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:114 +#: templates/InvenTree/settings/plugin.html:115 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:123 +#: templates/InvenTree/settings/plugin.html:124 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:125 +#: templates/InvenTree/settings/plugin.html:126 msgid "Message" msgstr "" @@ -6555,37 +6671,37 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:75 +#: templates/InvenTree/settings/settings.html:78 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:77 +#: templates/InvenTree/settings/settings.html:80 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:79 +#: templates/InvenTree/settings/settings.html:82 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:168 +#: templates/InvenTree/settings/settings.html:171 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:190 -#: templates/InvenTree/settings/settings.html:289 +#: templates/InvenTree/settings/settings.html:193 +#: templates/InvenTree/settings/settings.html:292 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:191 -#: templates/InvenTree/settings/settings.html:290 +#: templates/InvenTree/settings/settings.html:194 +#: templates/InvenTree/settings/settings.html:293 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:272 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:273 +#: templates/InvenTree/settings/settings.html:276 msgid "ID" msgstr "" @@ -6763,124 +6879,105 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:219 +#: templates/InvenTree/settings/user.html:220 +msgid "Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:226 +msgid "Log out active sessions (except this one)" +msgstr "" + +#: templates/InvenTree/settings/user.html:227 +msgid "Log Out Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:236 +msgid "unknown on unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:237 +msgid "unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:241 +msgid "IP Address" +msgstr "" + +#: templates/InvenTree/settings/user.html:242 +msgid "Device" +msgstr "" + +#: templates/InvenTree/settings/user.html:243 +msgid "Last Activity" +msgstr "" + +#: templates/InvenTree/settings/user.html:252 +#, python-format +msgid "%(time)s ago (this session)" +msgstr "" + +#: templates/InvenTree/settings/user.html:254 +#, python-format +msgid "%(time)s ago" +msgstr "" + +#: templates/InvenTree/settings/user.html:266 +msgid "Do you really want to remove the selected email address?" +msgstr "" + #: templates/InvenTree/settings/user_display.html:25 msgid "Theme Settings" msgstr "" -#: templates/InvenTree/settings/user.html:227 #: templates/InvenTree/settings/user_display.html:35 msgid "Select theme" msgstr "" -#: templates/InvenTree/settings/user.html:237 #: templates/InvenTree/settings/user_display.html:46 msgid "Set Theme" msgstr "" -#: templates/InvenTree/settings/user.html:246 #: templates/InvenTree/settings/user_display.html:54 msgid "Language Settings" msgstr "" -#: templates/InvenTree/settings/user.html:254 #: templates/InvenTree/settings/user_display.html:63 msgid "Select language" msgstr "" -#: templates/InvenTree/settings/user.html:270 #: templates/InvenTree/settings/user_display.html:79 #, python-format msgid "%(lang_translated)s%% translated" msgstr "" -#: templates/InvenTree/settings/user.html:272 #: templates/InvenTree/settings/user_display.html:81 msgid "No translations available" msgstr "" -#: templates/InvenTree/settings/user.html:279 #: templates/InvenTree/settings/user_display.html:88 msgid "Set Language" msgstr "" -#: templates/InvenTree/settings/user.html:281 #: templates/InvenTree/settings/user_display.html:91 msgid "Some languages are not complete" msgstr "" -#: templates/InvenTree/settings/user.html:283 #: templates/InvenTree/settings/user_display.html:93 msgid "Show only sufficent" msgstr "" -#: templates/InvenTree/settings/user.html:285 +#: templates/InvenTree/settings/user_display.html:95 +msgid "and hidden." +msgstr "" + #: templates/InvenTree/settings/user_display.html:95 msgid "Show them too" msgstr "" -#: templates/InvenTree/settings/user.html:292 #: templates/InvenTree/settings/user_display.html:101 msgid "Help the translation efforts!" msgstr "" -#: templates/InvenTree/settings/user.html:293 -#, python-format -msgid "Native language translation of the\n" -" InvenTree web application is community contributed via crowdin. Contributions are\n" -" welcomed and encouraged." -msgstr "" - -#: templates/InvenTree/settings/user.html:302 -msgid "Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:308 -msgid "Log out active sessions (except this one)" -msgstr "" - -#: templates/InvenTree/settings/user.html:309 -msgid "Log Out Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:318 -msgid "unknown on unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:319 -msgid "unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:323 -msgid "IP Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:324 -msgid "Device" -msgstr "" - -#: templates/InvenTree/settings/user.html:325 -msgid "Last Activity" -msgstr "" - -#: templates/InvenTree/settings/user.html:334 -#, python-format -msgid "%(time)s ago (this session)" -msgstr "" - -#: templates/InvenTree/settings/user.html:336 -#, python-format -msgid "%(time)s ago" -msgstr "" - -#: templates/InvenTree/settings/user.html:348 -msgid "Do you really want to remove the selected email address?" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:95 -msgid "and hidden." -msgstr "" - #: templates/InvenTree/settings/user_display.html:102 #, python-format msgid "Native language translation of the InvenTree web application is community contributed via crowdin. Contributions are welcomed and encouraged." @@ -6899,9 +6996,9 @@ msgid "InvenTree Version Information" msgstr "" #: templates/about.html:11 templates/about.html:105 -#: templates/js/translated/bom.js:395 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:573 templates/js/translated/modals.js:667 -#: templates/js/translated/modals.js:970 templates/modals.html:15 +#: templates/js/translated/bom.js:407 templates/js/translated/modals.js:53 +#: templates/js/translated/modals.js:584 templates/js/translated/modals.js:678 +#: templates/js/translated/modals.js:983 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -7178,13 +7275,13 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1103 +#: templates/js/translated/bom.js:1117 msgid "Required Quantity" msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:579 templates/js/translated/build.js:1189 +#: templates/js/translated/bom.js:591 templates/js/translated/build.js:1189 #: templates/js/translated/build.js:1810 #: templates/js/translated/table_filters.js:178 msgid "Available" @@ -7208,10 +7305,6 @@ msgstr "" msgid "Click on the following link to view this part" msgstr "" -#: templates/email/low_stock_notification.html:17 -msgid "Total Stock" -msgstr "" - #: templates/email/low_stock_notification.html:19 msgid "Minimum Quantity" msgstr "" @@ -7232,11 +7325,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1040 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1053 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1041 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1054 msgid "No response from the InvenTree server" msgstr "" @@ -7248,27 +7341,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1063 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1051 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1064 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1068 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1056 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1069 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1073 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1061 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1074 msgid "The requested resource could not be located on the server" msgstr "" @@ -7280,11 +7373,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1065 +#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1078 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1066 +#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1079 msgid "Connection timeout while requesting data from server" msgstr "" @@ -7353,7 +7446,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "Invalid server response" msgstr "" @@ -7381,7 +7474,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1018 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1026 msgid "Remove stock item" msgstr "" @@ -7428,12 +7521,12 @@ msgid "Download BOM Template" msgstr "" #: templates/js/translated/bom.js:39 templates/js/translated/bom.js:73 -#: templates/js/translated/order.js:369 templates/js/translated/stock.js:510 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:518 msgid "Format" msgstr "" #: templates/js/translated/bom.js:40 templates/js/translated/bom.js:74 -#: templates/js/translated/order.js:370 templates/js/translated/stock.js:511 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:519 msgid "Select file format" msgstr "" @@ -7489,87 +7582,87 @@ msgstr "" msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:340 -msgid "Select and add a new variant item using the input below" +#: templates/js/translated/bom.js:352 +msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:351 +#: templates/js/translated/bom.js:363 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:357 +#: templates/js/translated/bom.js:369 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:396 +#: templates/js/translated/bom.js:408 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:397 +#: templates/js/translated/bom.js:409 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:516 +#: templates/js/translated/bom.js:528 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:520 templates/js/translated/build.js:1171 +#: templates/js/translated/bom.js:532 templates/js/translated/build.js:1171 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:525 +#: templates/js/translated/bom.js:537 msgid "Open subassembly" msgstr "" -#: templates/js/translated/bom.js:597 +#: templates/js/translated/bom.js:609 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:612 +#: templates/js/translated/bom.js:624 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:619 +#: templates/js/translated/bom.js:631 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:668 templates/js/translated/bom.js:757 +#: templates/js/translated/bom.js:680 templates/js/translated/bom.js:769 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:728 +#: templates/js/translated/bom.js:740 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:742 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:732 +#: templates/js/translated/bom.js:744 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:734 templates/js/translated/bom.js:908 +#: templates/js/translated/bom.js:746 templates/js/translated/bom.js:920 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:891 +#: templates/js/translated/bom.js:748 templates/js/translated/bom.js:903 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:830 templates/js/translated/build.js:915 +#: templates/js/translated/bom.js:842 templates/js/translated/build.js:915 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:886 +#: templates/js/translated/bom.js:898 msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:1086 templates/js/translated/build.js:1155 +#: templates/js/translated/bom.js:1100 templates/js/translated/build.js:1155 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1108 +#: templates/js/translated/bom.js:1122 msgid "Inherited from parent BOM" msgstr "" @@ -7725,9 +7818,9 @@ msgstr "" msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1206 -#: templates/js/translated/part.js:1617 templates/js/translated/stock.js:1512 -#: templates/js/translated/stock.js:2321 +#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:1624 templates/js/translated/stock.js:1520 +#: templates/js/translated/stock.js:2479 msgid "Select" msgstr "" @@ -7735,7 +7828,7 @@ msgstr "" msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2540 +#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2698 msgid "No user information" msgstr "" @@ -7808,34 +7901,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:500 -#: templates/js/translated/company.js:757 templates/js/translated/part.js:511 -#: templates/js/translated/part.js:596 +#: templates/js/translated/company.js:757 templates/js/translated/part.js:517 +#: templates/js/translated/part.js:602 msgid "Template part" msgstr "" #: templates/js/translated/company.js:504 -#: templates/js/translated/company.js:761 templates/js/translated/part.js:515 -#: templates/js/translated/part.js:600 +#: templates/js/translated/company.js:761 templates/js/translated/part.js:521 +#: templates/js/translated/part.js:606 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:631 templates/js/translated/part.js:690 +#: templates/js/translated/company.js:631 templates/js/translated/part.js:696 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:668 templates/js/translated/part.js:732 +#: templates/js/translated/company.js:668 templates/js/translated/part.js:738 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:669 templates/js/translated/part.js:733 +#: templates/js/translated/company.js:669 templates/js/translated/part.js:739 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:688 templates/js/translated/part.js:750 +#: templates/js/translated/company.js:688 templates/js/translated/part.js:756 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:699 templates/js/translated/part.js:762 +#: templates/js/translated/company.js:699 templates/js/translated/part.js:768 msgid "Delete Parameter" msgstr "" @@ -7844,12 +7937,12 @@ msgid "No supplier parts found" msgstr "" #: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:420 +#: templates/js/translated/filters.js:429 msgid "true" msgstr "" #: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:421 +#: templates/js/translated/filters.js:430 msgid "false" msgstr "" @@ -7869,7 +7962,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:329 +#: templates/js/translated/filters.js:338 msgid "Create filter" msgstr "" @@ -7898,20 +7991,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1080 templates/modals.html:19 +#: templates/js/translated/forms.js:1082 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1471 +#: templates/js/translated/forms.js:1487 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1675 +#: templates/js/translated/forms.js:1691 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1895 +#: templates/js/translated/forms.js:1930 msgid "Clear input" msgstr "" @@ -7924,7 +8017,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1042 +#: templates/js/translated/stock.js:1050 msgid "Select Stock Items" msgstr "" @@ -7974,12 +8067,12 @@ msgid "Select Label Template" msgstr "" #: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 -#: templates/js/translated/modals.js:599 +#: templates/js/translated/modals.js:610 msgid "Cancel" msgstr "" #: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:666 templates/js/translated/modals.js:969 +#: templates/js/translated/modals.js:677 templates/js/translated/modals.js:982 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" @@ -7988,47 +8081,47 @@ msgstr "" msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:381 +#: templates/js/translated/modals.js:392 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:540 +#: templates/js/translated/modals.js:551 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:598 +#: templates/js/translated/modals.js:609 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:655 +#: templates/js/translated/modals.js:666 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:933 +#: templates/js/translated/modals.js:946 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1045 +#: templates/js/translated/modals.js:1058 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1046 +#: templates/js/translated/modals.js:1059 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1069 +#: templates/js/translated/modals.js:1082 msgid "Error requesting form data" msgstr "" @@ -8052,23 +8145,24 @@ msgstr "" msgid "Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:236 +#: templates/js/translated/model_renderers.js:249 +#: templates/js/translated/model_renderers.js:270 msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:253 +#: templates/js/translated/model_renderers.js:287 msgid "Shipment ID" msgstr "" -#: templates/js/translated/model_renderers.js:273 +#: templates/js/translated/model_renderers.js:307 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:310 +#: templates/js/translated/model_renderers.js:344 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:339 +#: templates/js/translated/model_renderers.js:373 msgid "Supplier Part ID" msgstr "" @@ -8116,7 +8210,7 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2123 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2131 msgid "Stock Status" msgstr "" @@ -8140,7 +8234,7 @@ msgstr "" msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:790 templates/js/translated/part.js:803 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:809 msgid "No purchase orders found" msgstr "" @@ -8165,7 +8259,7 @@ msgid "Total" msgstr "" #: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 -#: templates/js/translated/part.js:1834 templates/js/translated/part.js:2045 +#: templates/js/translated/part.js:1841 templates/js/translated/part.js:2052 msgid "Unit Price" msgstr "" @@ -8181,7 +8275,7 @@ msgstr "" msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1166 templates/js/translated/part.js:935 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:942 msgid "Receive line item" msgstr "" @@ -8250,7 +8344,7 @@ msgid "Delete Stock Allocation" msgstr "" #: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 -#: templates/js/translated/stock.js:1428 +#: templates/js/translated/stock.js:1436 msgid "Shipped to customer" msgstr "" @@ -8378,144 +8472,148 @@ msgstr "" msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:412 +#: templates/js/translated/part.js:351 +msgid "Create Part Variant" +msgstr "" + +#: templates/js/translated/part.js:418 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:414 +#: templates/js/translated/part.js:420 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:419 +#: templates/js/translated/part.js:425 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:421 +#: templates/js/translated/part.js:427 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:444 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:448 +#: templates/js/translated/part.js:454 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:451 +#: templates/js/translated/part.js:457 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:481 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:503 templates/js/translated/part.js:588 +#: templates/js/translated/part.js:509 templates/js/translated/part.js:594 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:507 templates/js/translated/part.js:592 +#: templates/js/translated/part.js:513 templates/js/translated/part.js:598 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:519 +#: templates/js/translated/part.js:525 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:523 +#: templates/js/translated/part.js:529 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:638 +#: templates/js/translated/part.js:644 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1005 +#: templates/js/translated/part.js:1012 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1029 +#: templates/js/translated/part.js:1036 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1096 templates/js/translated/part.js:1356 +#: templates/js/translated/part.js:1103 templates/js/translated/part.js:1363 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1266 +#: templates/js/translated/part.js:1273 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1289 +#: templates/js/translated/part.js:1296 #: templates/js/translated/table_filters.js:430 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:1380 templates/js/translated/part.js:1552 -#: templates/js/translated/stock.js:2282 +#: templates/js/translated/part.js:1387 templates/js/translated/part.js:1559 +#: templates/js/translated/stock.js:2440 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1396 +#: templates/js/translated/part.js:1403 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1571 templates/js/translated/stock.js:2301 +#: templates/js/translated/part.js:1578 templates/js/translated/stock.js:2459 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:1635 +#: templates/js/translated/part.js:1642 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1649 templates/js/translated/stock.js:2345 +#: templates/js/translated/part.js:1656 templates/js/translated/stock.js:2503 msgid "Path" msgstr "" -#: templates/js/translated/part.js:1693 +#: templates/js/translated/part.js:1700 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1744 templates/js/translated/stock.js:1234 +#: templates/js/translated/part.js:1751 templates/js/translated/stock.js:1242 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1745 templates/js/translated/stock.js:1235 +#: templates/js/translated/part.js:1752 templates/js/translated/stock.js:1243 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:1751 +#: templates/js/translated/part.js:1758 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:1773 +#: templates/js/translated/part.js:1780 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:1787 +#: templates/js/translated/part.js:1794 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:1812 +#: templates/js/translated/part.js:1819 #, python-brace-format msgid "No ${human_name} information found" msgstr "" -#: templates/js/translated/part.js:1867 +#: templates/js/translated/part.js:1874 #, python-brace-format msgid "Edit ${human_name}" msgstr "" -#: templates/js/translated/part.js:1868 +#: templates/js/translated/part.js:1875 #, python-brace-format msgid "Delete ${human_name}" msgstr "" -#: templates/js/translated/part.js:1969 +#: templates/js/translated/part.js:1976 msgid "Single Price" msgstr "" -#: templates/js/translated/part.js:1988 +#: templates/js/translated/part.js:1995 msgid "Single Price Difference" msgstr "" @@ -8589,340 +8687,344 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:74 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:181 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:93 templates/js/translated/stock.js:175 +#: templates/js/translated/stock.js:94 templates/js/translated/stock.js:183 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:101 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:110 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:146 +#: templates/js/translated/stock.js:154 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:186 +#: templates/js/translated/stock.js:194 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:225 +#: templates/js/translated/stock.js:233 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:231 +#: templates/js/translated/stock.js:239 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:382 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:387 +#: templates/js/translated/stock.js:395 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:420 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:416 templates/js/translated/stock.js:417 +#: templates/js/translated/stock.js:424 templates/js/translated/stock.js:425 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:433 +#: templates/js/translated/stock.js:441 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:453 +#: templates/js/translated/stock.js:461 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:462 +#: templates/js/translated/stock.js:470 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:515 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:526 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:519 +#: templates/js/translated/stock.js:527 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:628 +#: templates/js/translated/stock.js:636 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:629 +#: templates/js/translated/stock.js:637 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:714 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:715 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:709 +#: templates/js/translated/stock.js:717 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:710 +#: templates/js/translated/stock.js:718 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:796 +#: templates/js/translated/stock.js:804 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:797 +#: templates/js/translated/stock.js:805 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:892 +#: templates/js/translated/stock.js:900 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:893 +#: templates/js/translated/stock.js:901 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:899 +#: templates/js/translated/stock.js:907 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:900 +#: templates/js/translated/stock.js:908 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:904 +#: templates/js/translated/stock.js:912 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:905 +#: templates/js/translated/stock.js:913 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:909 +#: templates/js/translated/stock.js:917 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:910 users/models.py:206 +#: templates/js/translated/stock.js:918 users/models.py:208 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:914 templates/stock_table.html:58 +#: templates/js/translated/stock.js:922 templates/stock_table.html:58 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1051 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1201 +#: templates/js/translated/stock.js:1209 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1203 +#: templates/js/translated/stock.js:1211 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1208 +#: templates/js/translated/stock.js:1216 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1230 +#: templates/js/translated/stock.js:1238 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1256 +#: templates/js/translated/stock.js:1264 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1313 +#: templates/js/translated/stock.js:1321 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1428 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1424 +#: templates/js/translated/stock.js:1432 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1432 +#: templates/js/translated/stock.js:1440 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1438 +#: templates/js/translated/stock.js:1446 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1604 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1601 +#: templates/js/translated/stock.js:1609 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1604 +#: templates/js/translated/stock.js:1612 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1608 +#: templates/js/translated/stock.js:1616 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1610 +#: templates/js/translated/stock.js:1618 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1616 +#: templates/js/translated/stock.js:1624 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1618 +#: templates/js/translated/stock.js:1626 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1620 +#: templates/js/translated/stock.js:1628 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1633 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1632 +#: templates/js/translated/stock.js:1640 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1634 +#: templates/js/translated/stock.js:1642 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1636 +#: templates/js/translated/stock.js:1644 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1648 #: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1690 +#: templates/js/translated/stock.js:1698 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1763 +#: templates/js/translated/stock.js:1771 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1809 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1822 templates/js/translated/stock.js:1870 +#: templates/js/translated/stock.js:1830 templates/js/translated/stock.js:1878 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1910 +#: templates/js/translated/stock.js:1918 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1937 +#: templates/js/translated/stock.js:1945 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1939 +#: templates/js/translated/stock.js:1947 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:2138 +#: templates/js/translated/stock.js:2146 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2152 +#: templates/js/translated/stock.js:2160 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2153 +#: templates/js/translated/stock.js:2161 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2377 +#: templates/js/translated/stock.js:2340 +msgid "Allocated Quantity" +msgstr "" + +#: templates/js/translated/stock.js:2535 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2399 +#: templates/js/translated/stock.js:2557 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2424 +#: templates/js/translated/stock.js:2582 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2443 +#: templates/js/translated/stock.js:2601 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2462 +#: templates/js/translated/stock.js:2620 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2480 +#: templates/js/translated/stock.js:2638 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2503 +#: templates/js/translated/stock.js:2661 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2511 +#: templates/js/translated/stock.js:2669 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2552 +#: templates/js/translated/stock.js:2710 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2553 +#: templates/js/translated/stock.js:2711 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2604 +#: templates/js/translated/stock.js:2762 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2655 +#: templates/js/translated/stock.js:2813 msgid "Uninstall Stock Item" msgstr "" @@ -9194,11 +9296,11 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:113 +#: templates/navbar.html:114 msgid "Logout" msgstr "" -#: templates/navbar.html:115 +#: templates/navbar.html:116 msgid "Login" msgstr "" @@ -9246,31 +9348,43 @@ msgstr "" msgid "Server is deployed using docker" msgstr "" -#: templates/stats.html:40 -msgid "Server status" +#: templates/stats.html:39 +msgid "Plugin Support" msgstr "" #: templates/stats.html:43 -msgid "Healthy" +msgid "Plugin support enabled" msgstr "" #: templates/stats.html:45 -msgid "Issues detected" +msgid "Plugin support disabled" msgstr "" #: templates/stats.html:52 -msgid "Background Worker" +msgid "Server status" msgstr "" #: templates/stats.html:55 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:57 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:64 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:67 msgid "Background worker not running" msgstr "" -#: templates/stats.html:63 +#: templates/stats.html:75 msgid "Email Settings" msgstr "" -#: templates/stats.html:66 +#: templates/stats.html:78 msgid "Email settings not configured" msgstr "" @@ -9366,35 +9480,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:193 +#: users/models.py:195 msgid "Permission set" msgstr "" -#: users/models.py:201 +#: users/models.py:203 msgid "Group" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "View" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to view items" msgstr "" -#: users/models.py:206 +#: users/models.py:208 msgid "Permission to add items" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Change" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Permissions to edit items" msgstr "" -#: users/models.py:210 +#: users/models.py:212 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 c11b450104..50f451f696 100644 --- a/InvenTree/locale/es/LC_MESSAGES/django.po +++ b/InvenTree/locale/es/LC_MESSAGES/django.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-10 03:54+0000\n" -"PO-Revision-Date: 2022-01-10 03:58\n" +"POT-Creation-Date: 2022-01-29 00:17+0000\n" +"PO-Revision-Date: 2022-01-29 01:11\n" "Last-Translator: \n" "Language-Team: Spanish, Mexico\n" "Language: es_MX\n" @@ -18,15 +18,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 138\n" -#: InvenTree/api.py:64 +#: InvenTree/api.py:55 msgid "API endpoint not found" msgstr "Endpoint de API no encontrado" -#: InvenTree/api.py:110 +#: InvenTree/api.py:101 msgid "No action specified" msgstr "Ninguna acción especificada" -#: InvenTree/api.py:124 +#: InvenTree/api.py:116 msgid "No matching action found" msgstr "No se encontró ninguna acción coincidente" @@ -80,41 +80,41 @@ msgstr "Confirmación de email" msgid "You must type the same email each time." msgstr "Debe escribir el mismo correo electrónico cada vez." -#: InvenTree/helpers.py:437 +#: InvenTree/helpers.py:439 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "Duplicar serie: {n}" -#: InvenTree/helpers.py:444 order/models.py:279 order/models.py:420 +#: InvenTree/helpers.py:446 order/models.py:282 order/models.py:425 #: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "Cantidad proporcionada no válida" -#: InvenTree/helpers.py:447 +#: InvenTree/helpers.py:449 msgid "Empty serial number string" msgstr "Cadena de número de serie vacía" -#: InvenTree/helpers.py:469 InvenTree/helpers.py:472 InvenTree/helpers.py:475 -#: InvenTree/helpers.py:500 +#: InvenTree/helpers.py:471 InvenTree/helpers.py:474 InvenTree/helpers.py:477 +#: InvenTree/helpers.py:502 #, python-brace-format msgid "Invalid group: {g}" msgstr "Grupo inválido: {g}" -#: InvenTree/helpers.py:510 +#: InvenTree/helpers.py:512 #, python-brace-format msgid "Invalid group {group}" msgstr "" -#: InvenTree/helpers.py:516 +#: InvenTree/helpers.py:518 #, python-brace-format msgid "Invalid/no group {group}" msgstr "" -#: InvenTree/helpers.py:522 +#: InvenTree/helpers.py:524 msgid "No serial numbers found" msgstr "No se encontraron números de serie" -#: InvenTree/helpers.py:526 +#: InvenTree/helpers.py:528 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "Número único de número de serie ({s}) debe coincidir con la cantidad ({q})" @@ -127,7 +127,7 @@ msgstr "Falta archivo" msgid "Missing external link" msgstr "Falta enlace externo" -#: InvenTree/models.py:132 stock/models.py:1967 +#: InvenTree/models.py:132 stock/models.py:1995 #: templates/js/translated/attachment.js:119 msgid "Attachment" msgstr "Adjunto" @@ -137,15 +137,15 @@ msgid "Select file to attach" msgstr "Seleccionar archivo a adjuntar" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:124 part/models.py:828 +#: company/models.py:564 order/models.py:127 part/models.py:830 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:540 -#: templates/js/translated/company.js:829 templates/js/translated/part.js:1317 +#: templates/js/translated/company.js:829 templates/js/translated/part.js:1324 msgid "Link" msgstr "Enlace" -#: InvenTree/models.py:140 build/models.py:330 part/models.py:829 -#: stock/models.py:527 +#: InvenTree/models.py:140 build/models.py:332 part/models.py:831 +#: stock/models.py:529 msgid "Link to external URL" msgstr "Enlace a URL externa" @@ -157,10 +157,11 @@ msgstr "Comentario" msgid "File comment" msgstr "Comentario de archivo" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 -#: common/models.py:1214 part/models.py:2258 part/models.py:2278 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1223 +#: common/models.py:1224 common/models.py:1452 common/models.py:1453 +#: part/models.py:2265 part/models.py:2285 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2534 +#: templates/js/translated/stock.js:2692 msgid "User" msgstr "Usuario" @@ -197,42 +198,42 @@ msgstr "Error renombrando archivo" msgid "Invalid choice" msgstr "Elección no válida" -#: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 -#: label/models.py:112 part/models.py:772 part/models.py:2442 -#: plugin/models.py:40 report/models.py:181 +#: InvenTree/models.py:277 InvenTree/models.py:278 common/models.py:1438 +#: company/models.py:415 label/models.py:112 part/models.py:774 +#: part/models.py:2449 plugin/models.py:40 report/models.py:181 #: templates/InvenTree/settings/mixins/urls.html:13 -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:125 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:279 -#: templates/js/translated/company.js:641 templates/js/translated/part.js:561 -#: templates/js/translated/part.js:700 templates/js/translated/part.js:1624 -#: templates/js/translated/stock.js:2327 +#: templates/InvenTree/settings/settings.html:282 +#: templates/js/translated/company.js:641 templates/js/translated/part.js:567 +#: templates/js/translated/part.js:706 templates/js/translated/part.js:1631 +#: templates/js/translated/stock.js:2485 msgid "Name" msgstr "Nombre" -#: InvenTree/models.py:284 build/models.py:207 +#: InvenTree/models.py:284 build/models.py:209 #: build/templates/build/detail.html:25 company/models.py:354 #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:122 part/models.py:795 part/templates/part/category.html:74 +#: order/models.py:125 part/models.py:797 part/templates/part/category.html:74 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 #: stock/templates/stock/location.html:93 #: templates/InvenTree/settings/plugin_settings.html:33 -#: templates/js/translated/bom.js:327 templates/js/translated/bom.js:540 +#: templates/js/translated/bom.js:339 templates/js/translated/bom.js:552 #: templates/js/translated/build.js:1682 templates/js/translated/company.js:345 #: templates/js/translated/company.js:551 #: templates/js/translated/company.js:840 templates/js/translated/order.js:836 #: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 -#: templates/js/translated/part.js:620 templates/js/translated/part.js:992 -#: templates/js/translated/part.js:1077 templates/js/translated/part.js:1247 -#: templates/js/translated/part.js:1643 templates/js/translated/part.js:1712 -#: templates/js/translated/stock.js:1569 templates/js/translated/stock.js:2339 -#: templates/js/translated/stock.js:2384 +#: templates/js/translated/part.js:626 templates/js/translated/part.js:999 +#: templates/js/translated/part.js:1084 templates/js/translated/part.js:1254 +#: templates/js/translated/part.js:1650 templates/js/translated/part.js:1719 +#: templates/js/translated/stock.js:1577 templates/js/translated/stock.js:2314 +#: templates/js/translated/stock.js:2497 templates/js/translated/stock.js:2542 msgid "Description" msgstr "Descripción" @@ -244,7 +245,7 @@ msgstr "Descripción (opcional)" msgid "parent" msgstr "principal" -#: InvenTree/serializers.py:65 part/models.py:2727 +#: InvenTree/serializers.py:65 part/models.py:2734 msgid "Must be a valid number" msgstr "Debe ser un número válido" @@ -252,83 +253,83 @@ msgstr "Debe ser un número válido" msgid "Filename" msgstr "Nombre de archivo" -#: InvenTree/settings.py:663 +#: InvenTree/settings.py:661 msgid "German" msgstr "Alemán" -#: InvenTree/settings.py:664 +#: InvenTree/settings.py:662 msgid "Greek" msgstr "Griego" -#: InvenTree/settings.py:665 +#: InvenTree/settings.py:663 msgid "English" msgstr "Inglés" -#: InvenTree/settings.py:666 +#: InvenTree/settings.py:664 msgid "Spanish" msgstr "Español" -#: InvenTree/settings.py:667 +#: InvenTree/settings.py:665 msgid "Spanish (Mexican)" msgstr "Español (México)" -#: InvenTree/settings.py:668 +#: InvenTree/settings.py:666 msgid "French" msgstr "Francés" -#: InvenTree/settings.py:669 +#: InvenTree/settings.py:667 msgid "Hebrew" msgstr "Hebreo" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:668 msgid "Italian" msgstr "Italiano" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:669 msgid "Japanese" msgstr "Japonés" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:670 msgid "Korean" msgstr "Coreano" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:671 msgid "Dutch" msgstr "Holandés" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:672 msgid "Norwegian" msgstr "Noruego" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:673 msgid "Polish" msgstr "Polaco" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:674 msgid "Portugese" msgstr "Portugués" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:675 msgid "Russian" msgstr "Ruso" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:676 msgid "Swedish" msgstr "Sueco" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:677 msgid "Thai" msgstr "Tailandés" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:678 msgid "Turkish" msgstr "Turco" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:679 msgid "Vietnamese" msgstr "Vietnamita" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:680 msgid "Chinese" msgstr "Chino" @@ -374,7 +375,7 @@ msgstr "Perdido" msgid "Returned" msgstr "Devuelto" -#: InvenTree/status_codes.py:143 order/models.py:941 +#: InvenTree/status_codes.py:143 order/models.py:961 #: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "Enviado" @@ -455,7 +456,7 @@ msgstr "Separar del artículo principal" msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2064 +#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2072 msgid "Merged stock items" msgstr "Artículos de stock combinados" @@ -543,56 +544,56 @@ msgstr "Los campos de contraseña deben coincidir" msgid "System Information" msgstr "Información del sistema" -#: barcodes/api.py:54 barcodes/api.py:151 +#: barcodes/api.py:54 barcodes/api.py:152 msgid "Must provide barcode_data parameter" msgstr "Debe proporcionar el parámetro barcode_data" -#: barcodes/api.py:127 +#: barcodes/api.py:128 msgid "No match found for barcode data" msgstr "No se encontró ninguna coincidencia para los datos del código de barras" -#: barcodes/api.py:129 +#: barcodes/api.py:130 msgid "Match found for barcode data" msgstr "Coincidencia encontrada para datos de códigos de barras" -#: barcodes/api.py:154 +#: barcodes/api.py:155 msgid "Must provide stockitem parameter" msgstr "Debe proporcionar el parámetro stockitem" -#: barcodes/api.py:161 +#: barcodes/api.py:162 msgid "No matching stock item found" msgstr "No se ha encontrado ningún artículo de stock que coincida" -#: barcodes/api.py:191 +#: barcodes/api.py:193 msgid "Barcode already matches Stock Item" msgstr "El código de barras ya corresponde a un Elemento del Stock" -#: barcodes/api.py:195 +#: barcodes/api.py:197 msgid "Barcode already matches Stock Location" msgstr "El código de barras ya corresponde a una Ubicación de Stock" -#: barcodes/api.py:199 +#: barcodes/api.py:201 msgid "Barcode already matches Part" msgstr "El código de barras ya corresponde a una parte" -#: barcodes/api.py:205 barcodes/api.py:217 +#: barcodes/api.py:207 barcodes/api.py:219 msgid "Barcode hash already matches Stock Item" msgstr "La comprobación (hash) del código de barras ya corresponde a un Elemento del Stock" -#: barcodes/api.py:223 +#: barcodes/api.py:225 msgid "Barcode associated with Stock Item" msgstr "Código de barras asignado al Elemento del Stock" -#: build/forms.py:36 build/models.py:1286 +#: build/forms.py:36 build/models.py:1293 #: build/templates/build/build_base.html:82 -#: build/templates/build/detail.html:35 common/models.py:1253 +#: build/templates/build/detail.html:35 common/models.py:1263 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/models.py:796 order/models.py:1207 order/serializers.py:810 +#: order/models.py:805 order/models.py:1229 order/serializers.py:816 #: order/templates/order/order_wizard/match_parts.html:30 -#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:145 -#: part/forms.py:161 part/forms.py:177 part/models.py:2629 +#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:144 +#: part/forms.py:160 part/forms.py:176 part/models.py:2636 #: part/templates/part/bom_upload/match_parts.html:31 -#: part/templates/part/detail.html:962 part/templates/part/detail.html:1048 +#: part/templates/part/detail.html:992 part/templates/part/detail.html:1078 #: part/templates/part/part_pricing.html:16 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 @@ -603,7 +604,7 @@ msgstr "Código de barras asignado al Elemento del Stock" #: stock/templates/stock/item_base.html:181 #: stock/templates/stock/item_base.html:262 #: stock/templates/stock/item_base.html:270 -#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:555 +#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:567 #: templates/js/translated/build.js:295 templates/js/translated/build.js:495 #: templates/js/translated/build.js:689 templates/js/translated/build.js:699 #: templates/js/translated/build.js:1075 templates/js/translated/build.js:1422 @@ -611,11 +612,11 @@ msgstr "Código de barras asignado al Elemento del Stock" #: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 #: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 #: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 -#: templates/js/translated/order.js:2150 templates/js/translated/part.js:900 -#: templates/js/translated/part.js:1855 templates/js/translated/part.js:1978 -#: templates/js/translated/part.js:2056 templates/js/translated/stock.js:383 -#: templates/js/translated/stock.js:580 templates/js/translated/stock.js:750 -#: templates/js/translated/stock.js:2519 templates/js/translated/stock.js:2621 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:906 +#: templates/js/translated/part.js:1862 templates/js/translated/part.js:1985 +#: templates/js/translated/part.js:2063 templates/js/translated/stock.js:391 +#: templates/js/translated/stock.js:588 templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2779 msgid "Quantity" msgstr "Cantidad" @@ -623,9 +624,9 @@ msgstr "Cantidad" msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 -#: stock/serializers.py:314 templates/js/translated/stock.js:230 -#: templates/js/translated/stock.js:384 +#: build/forms.py:41 order/serializers.py:820 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:238 +#: templates/js/translated/stock.js:392 msgid "Serial Numbers" msgstr "Números de serie" @@ -649,18 +650,18 @@ msgstr "¿Deseas cancelar?" msgid "Confirm build cancellation" msgstr "" -#: build/models.py:133 +#: build/models.py:135 msgid "Invalid choice for parent build" msgstr "Opción no válida para el armado principal" -#: build/models.py:137 build/templates/build/build_base.html:9 +#: build/models.py:139 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:457 +#: templates/js/translated/build.js:457 templates/js/translated/stock.js:2290 msgid "Build Order" msgstr "Orden de Producción" -#: build/models.py:138 build/templates/build/build_base.html:13 +#: build/models.py:140 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:92 #: order/templates/order/so_sidebar.html:13 @@ -670,40 +671,40 @@ msgstr "Orden de Producción" msgid "Build Orders" msgstr "Ordenes de Producción" -#: build/models.py:198 +#: build/models.py:200 msgid "Build Order Reference" msgstr "Referencia de Orden de Producción" -#: build/models.py:199 order/models.py:210 order/models.py:536 -#: order/models.py:803 part/models.py:2638 +#: build/models.py:201 order/models.py:213 order/models.py:541 +#: order/models.py:812 part/models.py:2645 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:547 templates/js/translated/build.js:1179 +#: templates/js/translated/bom.js:559 templates/js/translated/build.js:1179 #: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "Referencia" -#: build/models.py:210 +#: build/models.py:212 msgid "Brief description of the build" msgstr "Breve descripción de la producción" -#: build/models.py:219 build/templates/build/build_base.html:164 +#: build/models.py:221 build/templates/build/build_base.html:164 #: build/templates/build/detail.html:88 msgid "Parent Build" msgstr "Armado Principal" -#: build/models.py:220 +#: build/models.py:222 msgid "BuildOrder to which this build is allocated" msgstr "Orden de Producción a la cual esta producción pertenece" -#: build/models.py:225 build/templates/build/build_base.html:77 +#: build/models.py:227 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:856 order/models.py:930 -#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 -#: part/models.py:2204 part/models.py:2220 part/models.py:2239 -#: part/models.py:2256 part/models.py:2358 part/models.py:2480 -#: part/models.py:2613 part/models.py:2920 part/serializers.py:658 +#: order/models.py:876 order/models.py:950 +#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:359 +#: part/models.py:2211 part/models.py:2227 part/models.py:2246 +#: part/models.py:2263 part/models.py:2365 part/models.py:2487 +#: part/models.py:2620 part/models.py:2927 part/serializers.py:658 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/set_category.html:13 @@ -713,205 +714,205 @@ msgstr "Orden de Producción a la cual esta producción pertenece" #: templates/InvenTree/search.html:80 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 -#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:326 -#: templates/js/translated/bom.js:505 templates/js/translated/build.js:680 +#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:338 +#: templates/js/translated/bom.js:517 templates/js/translated/build.js:680 #: templates/js/translated/build.js:1048 templates/js/translated/build.js:1419 #: templates/js/translated/build.js:1687 templates/js/translated/company.js:492 #: templates/js/translated/company.js:749 templates/js/translated/order.js:84 #: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 #: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 -#: templates/js/translated/order.js:2128 templates/js/translated/part.js:977 -#: templates/js/translated/part.js:1058 templates/js/translated/part.js:1225 -#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:719 -#: templates/js/translated/stock.js:926 templates/js/translated/stock.js:1526 -#: templates/js/translated/stock.js:2609 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:984 +#: templates/js/translated/part.js:1065 templates/js/translated/part.js:1232 +#: templates/js/translated/stock.js:562 templates/js/translated/stock.js:727 +#: templates/js/translated/stock.js:934 templates/js/translated/stock.js:1534 +#: templates/js/translated/stock.js:2767 msgid "Part" msgstr "Parte" -#: build/models.py:233 +#: build/models.py:235 msgid "Select part to build" msgstr "Seleccionar parte a producir" -#: build/models.py:238 +#: build/models.py:240 msgid "Sales Order Reference" msgstr "Referencia de Orden de Venta" -#: build/models.py:242 +#: build/models.py:244 msgid "SalesOrder to which this build is allocated" msgstr "Ordenes de Venta a la cual esta producción pertenece" -#: build/models.py:247 templates/js/translated/build.js:1407 +#: build/models.py:249 templates/js/translated/build.js:1407 #: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "Ubicación de origen" -#: build/models.py:251 +#: build/models.py:253 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:256 +#: build/models.py:258 msgid "Destination Location" msgstr "Ubicación de destino" -#: build/models.py:260 +#: build/models.py:262 msgid "Select location where the completed items will be stored" msgstr "Seleccione la ubicación donde se almacenarán los elementos completados" -#: build/models.py:264 +#: build/models.py:266 msgid "Build Quantity" msgstr "Cantidad a crear" -#: build/models.py:267 +#: build/models.py:269 msgid "Number of stock items to build" msgstr "Número de elementos de stock a construir" -#: build/models.py:271 +#: build/models.py:273 msgid "Completed items" msgstr "Elementos completados" -#: build/models.py:273 +#: build/models.py:275 msgid "Number of stock items which have been completed" msgstr "Número de artículos de stock que han sido completados" -#: build/models.py:277 part/templates/part/part_base.html:234 +#: build/models.py:279 part/templates/part/part_base.html:234 msgid "Build Status" msgstr "" -#: build/models.py:281 +#: build/models.py:283 msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:531 +#: build/models.py:287 stock/models.py:533 msgid "Batch Code" msgstr "Numero de lote" -#: build/models.py:289 +#: build/models.py:291 msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:126 part/models.py:967 +#: build/models.py:294 order/models.py:129 part/models.py:969 #: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "Fecha de Creación" -#: build/models.py:296 order/models.py:558 +#: build/models.py:298 order/models.py:563 msgid "Target completion date" msgstr "Fecha de finalización objetivo" -#: build/models.py:297 +#: build/models.py:299 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:252 +#: build/models.py:302 order/models.py:255 #: templates/js/translated/build.js:1758 msgid "Completion Date" msgstr "Fecha de finalización" -#: build/models.py:306 +#: build/models.py:308 msgid "completed by" msgstr "terminado por" -#: build/models.py:314 templates/js/translated/build.js:1729 +#: build/models.py:316 templates/js/translated/build.js:1729 msgid "Issued by" msgstr "Emitido por" -#: build/models.py:315 +#: build/models.py:317 msgid "User who issued this build order" msgstr "El usuario que emitió esta orden" -#: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:140 +#: build/models.py:325 build/templates/build/build_base.html:185 +#: build/templates/build/detail.html:116 order/models.py:143 #: order/templates/order/order_base.html:170 -#: order/templates/order/sales_order_base.html:182 part/models.py:971 +#: order/templates/order/sales_order_base.html:182 part/models.py:973 #: report/templates/report/inventree_build_order_base.html:159 #: templates/js/translated/build.js:1741 templates/js/translated/order.js:864 msgid "Responsible" msgstr "Responsable" -#: build/models.py:324 +#: build/models.py:326 msgid "User responsible for this build order" msgstr "" -#: build/models.py:329 build/templates/build/detail.html:102 +#: build/models.py:331 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:525 +#: part/templates/part/part_base.html:354 stock/models.py:527 #: stock/templates/stock/item_base.html:373 msgid "External Link" msgstr "Link externo" -#: build/models.py:334 build/serializers.py:201 +#: build/models.py:336 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:144 order/models.py:805 order/models.py:1051 +#: order/models.py:147 order/models.py:814 order/models.py:1071 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/models.py:956 -#: part/templates/part/detail.html:120 part/templates/part/part_sidebar.html:50 +#: order/templates/order/so_sidebar.html:17 part/models.py:958 +#: part/templates/part/detail.html:137 part/templates/part/part_sidebar.html:54 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:597 -#: stock/models.py:1867 stock/models.py:1973 stock/serializers.py:332 -#: stock/serializers.py:639 stock/serializers.py:737 stock/serializers.py:869 -#: stock/templates/stock/stock_sidebar.html:21 -#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:711 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:599 +#: stock/models.py:1895 stock/models.py:2001 stock/serializers.py:332 +#: stock/serializers.py:640 stock/serializers.py:738 stock/serializers.py:870 +#: stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:723 #: templates/js/translated/company.js:845 templates/js/translated/order.js:1149 #: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 -#: templates/js/translated/stock.js:1309 templates/js/translated/stock.js:1795 +#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1803 msgid "Notes" msgstr "Notas" -#: build/models.py:335 +#: build/models.py:337 msgid "Extra build notes" msgstr "" -#: build/models.py:710 +#: build/models.py:717 msgid "No build output specified" msgstr "" -#: build/models.py:713 +#: build/models.py:720 msgid "Build output is already completed" msgstr "" -#: build/models.py:716 +#: build/models.py:723 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1108 +#: build/models.py:1115 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1117 +#: build/models.py:1124 #, python-brace-format msgid "Allocated quantity ({q}) must not execed available stock quantity ({a})" msgstr "" -#: build/models.py:1127 +#: build/models.py:1134 msgid "Stock item is over-allocated" msgstr "Artículo de stock sobreasignado" -#: build/models.py:1133 order/models.py:1167 +#: build/models.py:1140 order/models.py:1189 msgid "Allocation quantity must be greater than zero" msgstr "Cantidad asignada debe ser mayor que cero" -#: build/models.py:1139 +#: build/models.py:1146 msgid "Quantity must be 1 for serialized stock" msgstr "La cantidad debe ser 1 para el stock serializado" -#: build/models.py:1196 +#: build/models.py:1203 msgid "Selected stock item not found in BOM" msgstr "Artículo de stock seleccionado no encontrado en BOM" -#: build/models.py:1256 stock/templates/stock/item_base.html:345 +#: build/models.py:1263 stock/templates/stock/item_base.html:345 #: templates/InvenTree/search.html:137 templates/js/translated/build.js:1660 #: templates/navbar.html:35 msgid "Build" msgstr "" -#: build/models.py:1257 +#: build/models.py:1264 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1273 build/serializers.py:388 order/serializers.py:690 -#: order/serializers.py:708 stock/serializers.py:577 stock/serializers.py:695 +#: build/models.py:1280 build/serializers.py:388 order/serializers.py:696 +#: order/serializers.py:714 stock/serializers.py:578 stock/serializers.py:696 #: stock/templates/stock/item_base.html:9 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:367 @@ -920,24 +921,24 @@ msgstr "" #: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 #: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 #: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 -#: templates/js/translated/stock.js:555 templates/js/translated/stock.js:720 -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:563 templates/js/translated/stock.js:728 +#: templates/js/translated/stock.js:2628 msgid "Stock Item" msgstr "Artículo de stock" -#: build/models.py:1274 +#: build/models.py:1281 msgid "Source stock item" msgstr "Producto original de stock" -#: build/models.py:1287 +#: build/models.py:1294 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1295 +#: build/models.py:1302 msgid "Install into" msgstr "Instalar en" -#: build/models.py:1296 +#: build/models.py:1303 msgid "Destination stock item" msgstr "Artículo de stock de destino" @@ -962,16 +963,16 @@ msgid "This build output is not fully allocated" msgstr "" #: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 -#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:730 -#: stock/serializers.py:971 stock/templates/stock/item_base.html:313 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:731 +#: stock/serializers.py:972 stock/templates/stock/item_base.html:313 #: templates/js/translated/barcode.js:384 #: templates/js/translated/barcode.js:557 templates/js/translated/build.js:480 #: templates/js/translated/build.js:1087 templates/js/translated/order.js:508 #: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 #: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 -#: templates/js/translated/part.js:179 templates/js/translated/stock.js:556 -#: templates/js/translated/stock.js:721 templates/js/translated/stock.js:928 -#: templates/js/translated/stock.js:1676 templates/js/translated/stock.js:2411 +#: templates/js/translated/part.js:179 templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:729 templates/js/translated/stock.js:936 +#: templates/js/translated/stock.js:1684 templates/js/translated/stock.js:2569 msgid "Location" msgstr "Ubicación" @@ -980,12 +981,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:552 +#: build/templates/build/detail.html:63 order/models.py:557 #: order/serializers.py:247 stock/templates/stock/item_base.html:187 #: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1716 #: templates/js/translated/order.js:591 templates/js/translated/order.js:840 -#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1651 -#: templates/js/translated/stock.js:2488 templates/js/translated/stock.js:2637 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1659 +#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2795 msgid "Status" msgstr "Estado" @@ -1021,8 +1022,8 @@ msgstr "" msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:313 build/serializers.py:362 part/models.py:2753 -#: part/models.py:2912 +#: build/serializers.py:313 build/serializers.py:362 part/models.py:2760 +#: part/models.py:2919 msgid "BOM Item" msgstr "" @@ -1038,16 +1039,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:394 stock/serializers.py:584 +#: build/serializers.py:394 stock/serializers.py:585 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:408 order/models.py:277 order/serializers.py:240 -#: stock/models.py:365 stock/models.py:1077 stock/serializers.py:305 +#: build/serializers.py:408 order/models.py:280 order/serializers.py:240 +#: stock/models.py:367 stock/models.py:1105 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:450 order/serializers.py:741 +#: build/serializers.py:450 order/serializers.py:747 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1060,7 +1061,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:491 order/serializers.py:984 +#: build/serializers.py:491 order/serializers.py:990 msgid "Allocation items must be provided" msgstr "Debe proporcionar adjudicación de artículos" @@ -1164,13 +1165,13 @@ msgid "Completed" msgstr "Completado" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:927 -#: order/models.py:1023 order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:947 +#: order/models.py:1043 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:307 -#: templates/js/translated/order.js:1218 +#: templates/js/translated/order.js:1218 templates/js/translated/stock.js:2304 msgid "Sales Order" msgstr "Orden de Venta" @@ -1224,7 +1225,7 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:878 stock/forms.py:136 +#: build/templates/build/detail.html:50 order/models.py:898 stock/forms.py:136 #: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "Destinación" @@ -1239,7 +1240,7 @@ msgstr "Partes asignadas" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:331 -#: templates/js/translated/stock.js:1665 templates/js/translated/stock.js:2644 +#: templates/js/translated/stock.js:1673 templates/js/translated/stock.js:2802 #: templates/js/translated/table_filters.js:151 #: templates/js/translated/table_filters.js:238 msgid "Batch" @@ -1343,9 +1344,9 @@ msgstr "" #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 #: order/templates/order/sales_order_detail.html:107 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:196 -#: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 -#: stock/templates/stock/stock_sidebar.html:19 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:213 +#: part/templates/part/part_sidebar.html:52 stock/templates/stock/item.html:112 +#: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Adjuntos" @@ -1360,8 +1361,8 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:108 #: order/templates/order/sales_order_detail.html:127 #: order/templates/order/sales_order_detail.html:186 -#: part/templates/part/detail.html:124 stock/templates/stock/item.html:115 -#: stock/templates/stock/item.html:205 +#: part/templates/part/detail.html:141 stock/templates/stock/item.html:132 +#: stock/templates/stock/item.html:235 msgid "Edit Notes" msgstr "" @@ -1373,7 +1374,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "Todos los artículos de stock no rastreados han sido asignados" -#: build/templates/build/index.html:18 part/templates/part/detail.html:303 +#: build/templates/build/index.html:18 part/templates/part/detail.html:320 msgid "New Build Order" msgstr "" @@ -1453,23 +1454,23 @@ msgstr "" msgid "Delete Build Order" msgstr "" -#: common/files.py:67 +#: common/files.py:65 msgid "Unsupported file format: {ext.upper()}" msgstr "" -#: common/files.py:69 +#: common/files.py:67 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:74 +#: common/files.py:72 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:76 +#: common/files.py:74 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:78 +#: common/files.py:76 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1490,740 +1491,828 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:344 common/models.py:998 common/models.py:1206 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:352 +msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:346 +#: common/models.py:354 msgid "Settings value" msgstr "" -#: common/models.py:380 +#: common/models.py:388 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:400 +#: common/models.py:408 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:411 +#: common/models.py:419 msgid "Value must be an integer value" msgstr "" -#: common/models.py:434 +#: common/models.py:442 msgid "Key string must be unique" msgstr "" -#: common/models.py:553 +#: common/models.py:561 msgid "No group" msgstr "" -#: common/models.py:595 +#: common/models.py:603 msgid "Restart required" msgstr "" -#: common/models.py:596 +#: common/models.py:604 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:603 +#: common/models.py:611 msgid "InvenTree Instance Name" msgstr "" -#: common/models.py:605 +#: common/models.py:613 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:609 +#: common/models.py:617 msgid "Use instance name" msgstr "" -#: common/models.py:610 +#: common/models.py:618 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:616 company/models.py:100 company/models.py:101 +#: common/models.py:624 company/models.py:100 company/models.py:101 msgid "Company name" msgstr "" -#: common/models.py:617 +#: common/models.py:625 msgid "Internal company name" msgstr "" -#: common/models.py:622 +#: common/models.py:630 msgid "Base URL" msgstr "" -#: common/models.py:623 +#: common/models.py:631 msgid "Base URL for server instance" msgstr "" -#: common/models.py:629 +#: common/models.py:637 msgid "Default Currency" msgstr "" -#: common/models.py:630 +#: common/models.py:638 msgid "Default currency" msgstr "" -#: common/models.py:636 +#: common/models.py:644 msgid "Download from URL" msgstr "" -#: common/models.py:637 +#: common/models.py:645 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:643 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:651 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:644 +#: common/models.py:652 msgid "Enable barcode scanner support" msgstr "" -#: common/models.py:650 +#: common/models.py:658 msgid "IPN Regex" msgstr "" -#: common/models.py:651 +#: common/models.py:659 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:655 +#: common/models.py:663 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:656 +#: common/models.py:664 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:662 +#: common/models.py:670 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:663 +#: common/models.py:671 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:669 +#: common/models.py:677 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:670 +#: common/models.py:678 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:676 +#: common/models.py:684 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:677 +#: common/models.py:685 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:683 +#: common/models.py:691 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:684 +#: common/models.py:692 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:690 +#: common/models.py:698 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:691 +#: common/models.py:699 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:697 part/models.py:2482 report/models.py:187 +#: common/models.py:705 part/models.py:2489 report/models.py:187 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:422 msgid "Template" msgstr "" -#: common/models.py:698 +#: common/models.py:706 msgid "Parts are templates by default" msgstr "" -#: common/models.py:704 part/models.py:919 templates/js/translated/bom.js:1068 +#: common/models.py:712 part/models.py:921 templates/js/translated/bom.js:1082 #: templates/js/translated/table_filters.js:168 #: templates/js/translated/table_filters.js:434 msgid "Assembly" msgstr "" -#: common/models.py:705 +#: common/models.py:713 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:711 part/models.py:925 +#: common/models.py:719 part/models.py:927 #: templates/js/translated/table_filters.js:438 msgid "Component" msgstr "" -#: common/models.py:712 +#: common/models.py:720 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:718 part/models.py:936 +#: common/models.py:726 part/models.py:938 msgid "Purchaseable" msgstr "" -#: common/models.py:719 +#: common/models.py:727 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:725 part/models.py:941 +#: common/models.py:733 part/models.py:943 #: templates/js/translated/table_filters.js:446 msgid "Salable" msgstr "" -#: common/models.py:726 +#: common/models.py:734 msgid "Parts are salable by default" msgstr "" -#: common/models.py:732 part/models.py:931 +#: common/models.py:740 part/models.py:933 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 #: templates/js/translated/table_filters.js:450 msgid "Trackable" msgstr "" -#: common/models.py:733 +#: common/models.py:741 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:739 part/models.py:951 +#: common/models.py:747 part/models.py:953 #: part/templates/part/part_base.html:147 #: templates/js/translated/table_filters.js:42 msgid "Virtual" msgstr "" -#: common/models.py:740 +#: common/models.py:748 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:746 +#: common/models.py:754 msgid "Show Import in Views" msgstr "" -#: common/models.py:747 +#: common/models.py:755 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:753 +#: common/models.py:761 msgid "Show Price in Forms" msgstr "" -#: common/models.py:754 +#: common/models.py:762 msgid "Display part price in some forms" msgstr "" -#: common/models.py:765 +#: common/models.py:773 msgid "Show Price in BOM" msgstr "" -#: common/models.py:766 +#: common/models.py:774 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:772 +#: common/models.py:780 msgid "Show related parts" msgstr "" -#: common/models.py:773 +#: common/models.py:781 msgid "Display related parts for a part" msgstr "" -#: common/models.py:779 +#: common/models.py:787 msgid "Create initial stock" msgstr "" -#: common/models.py:780 +#: common/models.py:788 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:786 +#: common/models.py:794 msgid "Internal Prices" msgstr "" -#: common/models.py:787 +#: common/models.py:795 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:793 +#: common/models.py:801 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:794 +#: common/models.py:802 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:800 +#: common/models.py:808 msgid "Part Name Display Format" msgstr "" -#: common/models.py:801 +#: common/models.py:809 msgid "Format to display the part name" msgstr "" -#: common/models.py:808 +#: common/models.py:816 msgid "Enable Reports" msgstr "" -#: common/models.py:809 +#: common/models.py:817 msgid "Enable generation of reports" msgstr "" -#: common/models.py:815 templates/stats.html:25 +#: common/models.py:823 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:816 +#: common/models.py:824 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:822 +#: common/models.py:830 msgid "Page Size" msgstr "" -#: common/models.py:823 +#: common/models.py:831 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:833 +#: common/models.py:841 msgid "Test Reports" msgstr "" -#: common/models.py:834 +#: common/models.py:842 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:840 +#: common/models.py:848 msgid "Stock Expiry" msgstr "" -#: common/models.py:841 +#: common/models.py:849 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:847 +#: common/models.py:855 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:848 +#: common/models.py:856 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:854 +#: common/models.py:862 msgid "Stock Stale Time" msgstr "" -#: common/models.py:855 +#: common/models.py:863 msgid "Number of days stock items are considered stale before expiring" msgstr "Número de días en que artículos de stock se consideran obsoletos antes de caducar" -#: common/models.py:857 +#: common/models.py:865 msgid "days" msgstr "" -#: common/models.py:862 +#: common/models.py:870 msgid "Build Expired Stock" msgstr "" -#: common/models.py:863 +#: common/models.py:871 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:869 +#: common/models.py:877 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:870 +#: common/models.py:878 msgid "Enable ownership control over stock locations and items" msgstr "Habilitar control de propiedad sobre ubicaciones de stock y artículos" -#: common/models.py:876 -msgid "Group by Part" -msgstr "" - -#: common/models.py:877 -msgid "Group stock items by part reference in table views" -msgstr "Agrupar artículos de stock por referencia de parte en vistas de tabla" - -#: common/models.py:883 +#: common/models.py:884 msgid "Build Order Reference Prefix" msgstr "" -#: common/models.py:884 +#: common/models.py:885 msgid "Prefix value for build order reference" msgstr "" -#: common/models.py:889 +#: common/models.py:890 msgid "Build Order Reference Regex" msgstr "" -#: common/models.py:890 +#: common/models.py:891 msgid "Regular expression pattern for matching build order reference" msgstr "" -#: common/models.py:894 +#: common/models.py:895 msgid "Sales Order Reference Prefix" msgstr "" -#: common/models.py:895 +#: common/models.py:896 msgid "Prefix value for sales order reference" msgstr "" -#: common/models.py:900 +#: common/models.py:901 msgid "Purchase Order Reference Prefix" msgstr "" -#: common/models.py:901 +#: common/models.py:902 msgid "Prefix value for purchase order reference" msgstr "" -#: common/models.py:907 +#: common/models.py:908 msgid "Enable password forgot" msgstr "" -#: common/models.py:908 +#: common/models.py:909 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:913 +#: common/models.py:914 msgid "Enable registration" msgstr "" -#: common/models.py:914 +#: common/models.py:915 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:919 +#: common/models.py:920 msgid "Enable SSO" msgstr "" -#: common/models.py:920 +#: common/models.py:921 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:925 +#: common/models.py:926 msgid "Email required" msgstr "" -#: common/models.py:926 +#: common/models.py:927 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:931 +#: common/models.py:932 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:932 +#: common/models.py:933 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:937 +#: common/models.py:938 msgid "Mail twice" msgstr "" -#: common/models.py:938 +#: common/models.py:939 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:943 +#: common/models.py:944 msgid "Password twice" msgstr "" -#: common/models.py:944 +#: common/models.py:945 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:949 +#: common/models.py:950 msgid "Group on signup" msgstr "" -#: common/models.py:950 +#: common/models.py:951 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:955 +#: common/models.py:956 msgid "Enforce MFA" msgstr "" -#: common/models.py:956 +#: common/models.py:957 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:961 +#: common/models.py:964 msgid "Enable URL integration" msgstr "" -#: common/models.py:962 +#: common/models.py:965 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:968 +#: common/models.py:971 msgid "Enable navigation integration" msgstr "" -#: common/models.py:969 +#: common/models.py:972 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:975 +#: common/models.py:978 msgid "Enable app integration" msgstr "" -#: common/models.py:976 +#: common/models.py:979 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:982 +#: common/models.py:985 msgid "Enable schedule integration" msgstr "" -#: common/models.py:983 +#: common/models.py:986 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1029 +#: common/models.py:992 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:993 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:1008 common/models.py:1216 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1039 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1030 +#: common/models.py:1040 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1035 +#: common/models.py:1045 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1036 +#: common/models.py:1046 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1041 +#: common/models.py:1051 msgid "Show latest parts" msgstr "" -#: common/models.py:1042 +#: common/models.py:1052 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1047 +#: common/models.py:1057 msgid "Recent Part Count" msgstr "" -#: common/models.py:1048 +#: common/models.py:1058 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1054 +#: common/models.py:1064 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1055 +#: common/models.py:1065 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1060 +#: common/models.py:1070 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1061 +#: common/models.py:1071 msgid "Show recently changed stock items on the homepage" msgstr "Mostrar artículos de stock recientemente modificados en la página de inicio" -#: common/models.py:1066 +#: common/models.py:1076 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1067 +#: common/models.py:1077 msgid "Number of recent stock items to display on index page" msgstr "Número de elementos de stock recientes a mostrar en la página de índice" -#: common/models.py:1072 +#: common/models.py:1082 msgid "Show low stock" msgstr "" -#: common/models.py:1073 +#: common/models.py:1083 msgid "Show low stock items on the homepage" msgstr "Mostrar artículos de stock bajo en la página de inicio" -#: common/models.py:1078 +#: common/models.py:1088 msgid "Show depleted stock" msgstr "" -#: common/models.py:1079 +#: common/models.py:1089 msgid "Show depleted stock items on the homepage" msgstr "Mostrar artículos agotados en la página de inicio" -#: common/models.py:1084 +#: common/models.py:1094 msgid "Show needed stock" msgstr "" -#: common/models.py:1085 +#: common/models.py:1095 msgid "Show stock items needed for builds on the homepage" msgstr "Mostrar elementos de stock necesarios para construir en la página de inicio" -#: common/models.py:1090 +#: common/models.py:1100 msgid "Show expired stock" msgstr "" -#: common/models.py:1091 +#: common/models.py:1101 msgid "Show expired stock items on the homepage" msgstr "Mostrar artículos de stock caducados en la página de inicio" -#: common/models.py:1096 +#: common/models.py:1106 msgid "Show stale stock" msgstr "" -#: common/models.py:1097 +#: common/models.py:1107 msgid "Show stale stock items on the homepage" msgstr "Mostrar elementos de stock obsoletos en la página de inicio" -#: common/models.py:1102 +#: common/models.py:1112 msgid "Show pending builds" msgstr "" -#: common/models.py:1103 +#: common/models.py:1113 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1108 +#: common/models.py:1118 msgid "Show overdue builds" msgstr "" -#: common/models.py:1109 +#: common/models.py:1119 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1114 +#: common/models.py:1124 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1115 +#: common/models.py:1125 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1120 +#: common/models.py:1130 msgid "Show overdue POs" msgstr "" -#: common/models.py:1121 +#: common/models.py:1131 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1126 +#: common/models.py:1136 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1127 +#: common/models.py:1137 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1132 +#: common/models.py:1142 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1133 +#: common/models.py:1143 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1139 +#: common/models.py:1149 msgid "Inline label display" msgstr "" -#: common/models.py:1140 +#: common/models.py:1150 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1146 +#: common/models.py:1156 msgid "Inline report display" msgstr "" -#: common/models.py:1147 +#: common/models.py:1157 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1153 +#: common/models.py:1163 msgid "Search Preview Results" msgstr "" -#: common/models.py:1154 +#: common/models.py:1164 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1160 +#: common/models.py:1170 msgid "Search Show Stock" msgstr "" -#: common/models.py:1161 +#: common/models.py:1171 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1167 +#: common/models.py:1177 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1168 +#: common/models.py:1178 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1174 +#: common/models.py:1184 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1175 +#: common/models.py:1185 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1181 +#: common/models.py:1191 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1182 +#: common/models.py:1192 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1188 +#: common/models.py:1198 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1189 +#: common/models.py:1199 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1254 company/forms.py:43 +#: common/models.py:1264 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1261 company/serializers.py:264 +#: common/models.py:1271 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 -#: templates/js/translated/part.js:909 templates/js/translated/part.js:1860 +#: templates/js/translated/part.js:915 templates/js/translated/part.js:1867 msgid "Price" msgstr "" -#: common/models.py:1262 +#: common/models.py:1272 msgid "Unit price at specified quantity" msgstr "" +#: common/models.py:1429 common/models.py:1568 +msgid "Endpoint" +msgstr "" + +#: common/models.py:1430 +msgid "Endpoint at which this webhook is received" +msgstr "" + +#: common/models.py:1439 +msgid "Name for this webhook" +msgstr "" + +#: common/models.py:1444 part/models.py:948 plugin/models.py:46 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:96 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:417 +msgid "Active" +msgstr "" + +#: common/models.py:1445 +msgid "Is this webhook active" +msgstr "" + +#: common/models.py:1459 +msgid "Token" +msgstr "" + +#: common/models.py:1460 +msgid "Token for access" +msgstr "" + +#: common/models.py:1467 +msgid "Secret" +msgstr "" + +#: common/models.py:1468 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:1535 +msgid "Message ID" +msgstr "" + +#: common/models.py:1536 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:1544 +msgid "Host" +msgstr "" + +#: common/models.py:1545 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:1552 +msgid "Header" +msgstr "" + +#: common/models.py:1553 +msgid "Header of this message" +msgstr "" + +#: common/models.py:1559 +msgid "Body" +msgstr "" + +#: common/models.py:1560 +msgid "Body of this message" +msgstr "" + +#: common/models.py:1569 +msgid "Endpoint on which this message was received" +msgstr "" + +#: common/models.py:1574 +msgid "Worked on" +msgstr "" + +#: common/models.py:1575 +msgid "Was the work on this message finished?" +msgstr "" + #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 #: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 -#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 -#: part/views.py:764 +#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:213 +#: part/views.py:773 msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 #: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 -#: part/views.py:765 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:214 +#: part/views.py:774 msgid "Match Fields" msgstr "" @@ -2315,7 +2404,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:139 part/models.py:838 +#: company/models.py:139 part/models.py:840 msgid "Image" msgstr "" @@ -2352,8 +2441,8 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:469 -#: stock/templates/stock/item_base.html:142 +#: company/models.py:320 company/models.py:535 stock/models.py:471 +#: stock/templates/stock/item_base.html:142 templates/js/translated/bom.js:328 msgid "Base Part" msgstr "" @@ -2380,7 +2469,7 @@ msgstr "" #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:533 #: templates/js/translated/company.js:818 templates/js/translated/order.js:1038 -#: templates/js/translated/part.js:245 templates/js/translated/part.js:889 +#: templates/js/translated/part.js:245 templates/js/translated/part.js:895 msgid "MPN" msgstr "" @@ -2409,8 +2498,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1960 templates/js/translated/company.js:647 -#: templates/js/translated/part.js:709 templates/js/translated/stock.js:1296 +#: stock/models.py:1988 templates/js/translated/company.js:647 +#: templates/js/translated/part.js:715 templates/js/translated/stock.js:1304 msgid "Value" msgstr "" @@ -2418,10 +2507,10 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:429 part/models.py:913 part/models.py:2450 +#: company/models.py:429 part/models.py:915 part/models.py:2457 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:284 -#: templates/js/translated/company.js:653 templates/js/translated/part.js:715 +#: templates/InvenTree/settings/settings.html:287 +#: templates/js/translated/company.js:653 templates/js/translated/part.js:721 msgid "Units" msgstr "" @@ -2434,13 +2523,13 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:224 +#: company/templates/company/supplier_part.html:87 order/models.py:227 #: order/templates/order/order_base.html:112 -#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 -#: part/bom.py:247 stock/templates/stock/item_base.html:397 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:237 +#: part/bom.py:265 stock/templates/stock/item_base.html:397 #: templates/js/translated/company.js:337 #: templates/js/translated/company.js:774 templates/js/translated/order.js:823 -#: templates/js/translated/part.js:215 templates/js/translated/part.js:857 +#: templates/js/translated/part.js:215 templates/js/translated/part.js:863 #: templates/js/translated/table_filters.js:393 msgid "Supplier" msgstr "" @@ -2450,8 +2539,8 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 -#: templates/js/translated/part.js:226 templates/js/translated/part.js:875 +#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1025 +#: templates/js/translated/part.js:226 templates/js/translated/part.js:881 msgid "SKU" msgstr "" @@ -2472,22 +2561,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:576 company/templates/company/supplier_part.html:119 -#: part/models.py:2641 report/templates/report/inventree_po_report.html:93 +#: part/models.py:2648 report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "base cost" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:493 stock/templates/stock/item_base.html:338 -#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1791 +#: stock/models.py:495 stock/templates/stock/item_base.html:338 +#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1799 msgid "Packaging" msgstr "" @@ -2495,7 +2584,7 @@ msgstr "" msgid "Part packaging" msgstr "" -#: company/models.py:584 part/models.py:1781 +#: company/models.py:584 part/models.py:1783 msgid "multiple" msgstr "" @@ -2554,12 +2643,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:547 -#: order/templates/order/sales_order_base.html:115 stock/models.py:512 -#: stock/models.py:513 stock/serializers.py:625 +#: company/templates/company/company_base.html:83 order/models.py:552 +#: order/templates/order/sales_order_base.html:115 stock/models.py:514 +#: stock/models.py:515 stock/serializers.py:626 #: stock/templates/stock/item_base.html:290 #: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 -#: templates/js/translated/stock.js:2452 +#: templates/js/translated/stock.js:2610 #: templates/js/translated/table_filters.js:397 msgid "Customer" msgstr "" @@ -2590,7 +2679,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:118 -#: part/templates/part/detail.html:336 +#: part/templates/part/detail.html:353 msgid "New Supplier Part" msgstr "" @@ -2598,8 +2687,8 @@ msgstr "" #: company/templates/company/detail.html:79 #: company/templates/company/manufacturer_part.html:127 #: company/templates/company/manufacturer_part.html:156 -#: part/templates/part/category.html:171 part/templates/part/detail.html:345 -#: part/templates/part/detail.html:374 +#: part/templates/part/category.html:171 part/templates/part/detail.html:362 +#: part/templates/part/detail.html:391 msgid "Options" msgstr "" @@ -2627,7 +2716,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:67 part/templates/part/detail.html:364 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:381 msgid "New Manufacturer Part" msgstr "" @@ -2641,7 +2730,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:68 part/templates/part/part_sidebar.html:33 +#: part/templates/part/detail.html:85 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197 #: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 @@ -2663,7 +2752,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:91 part/templates/part/part_sidebar.html:37 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:41 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217 #: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 @@ -2691,13 +2780,13 @@ msgstr "" #: company/templates/company/detail.html:384 #: company/templates/company/manufacturer_part.html:215 -#: part/templates/part/detail.html:418 +#: part/templates/part/detail.html:435 msgid "Delete Supplier Parts?" msgstr "" #: company/templates/company/detail.html:385 #: company/templates/company/manufacturer_part.html:216 -#: part/templates/part/detail.html:419 +#: part/templates/part/detail.html:436 msgid "All selected supplier parts will be deleted" msgstr "" @@ -2714,7 +2803,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:34 #: company/templates/company/supplier_part.html:159 -#: part/templates/part/detail.html:71 part/templates/part/part_base.html:76 +#: part/templates/part/detail.html:88 part/templates/part/part_base.html:76 msgid "Order part" msgstr "" @@ -2735,34 +2824,34 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 -#: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 +#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:163 #: templates/InvenTree/search.html:188 templates/navbar.html:45 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:129 -#: part/templates/part/detail.html:347 +#: part/templates/part/detail.html:364 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:129 #: company/templates/company/manufacturer_part.html:158 #: company/templates/company/manufacturer_part.html:254 -#: part/templates/part/detail.html:347 part/templates/part/detail.html:376 +#: part/templates/part/detail.html:364 part/templates/part/detail.html:393 #: templates/js/translated/company.js:426 templates/js/translated/helpers.js:31 -#: users/models.py:210 +#: users/models.py:212 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:143 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:17 -#: part/templates/part/detail.html:170 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:187 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:147 -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:192 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part.html:65 msgid "New Parameter" @@ -2773,7 +2862,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:191 -#: part/templates/part/detail.html:862 +#: part/templates/part/detail.html:892 msgid "Add Parameter" msgstr "" @@ -2802,9 +2891,9 @@ msgid "Assigned Stock Items" msgstr "Artículos de Stock Asignados" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:477 +#: company/templates/company/supplier_part.html:24 stock/models.py:479 #: stock/templates/stock/item_base.html:402 -#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1748 +#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1756 msgid "Supplier Part" msgstr "" @@ -2830,7 +2919,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:167 -#: templates/js/translated/stock.js:360 +#: templates/js/translated/stock.js:368 msgid "New Stock Item" msgstr "" @@ -2840,7 +2929,7 @@ msgid "Supplier Part Orders" msgstr "" #: company/templates/company/supplier_part.html:160 -#: part/templates/part/detail.html:72 +#: part/templates/part/detail.html:89 msgid "Order Part" msgstr "" @@ -2851,7 +2940,7 @@ msgstr "" #: company/templates/company/supplier_part.html:184 #: company/templates/company/supplier_part.html:290 -#: part/templates/part/prices.html:271 part/views.py:1619 +#: part/templates/part/prices.html:271 part/views.py:1628 msgid "Add Price Break" msgstr "" @@ -2859,11 +2948,11 @@ msgstr "" msgid "No price break information found" msgstr "" -#: company/templates/company/supplier_part.html:224 part/views.py:1681 +#: company/templates/company/supplier_part.html:224 part/views.py:1690 msgid "Delete Price Break" msgstr "" -#: company/templates/company/supplier_part.html:238 part/views.py:1667 +#: company/templates/company/supplier_part.html:238 part/views.py:1676 msgid "Edit Price Break" msgstr "" @@ -2881,10 +2970,10 @@ msgstr "" #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:150 #: templates/InvenTree/settings/sidebar.html:41 -#: templates/js/translated/bom.js:328 templates/js/translated/part.js:489 -#: templates/js/translated/part.js:624 templates/js/translated/part.js:1118 -#: templates/js/translated/part.js:1279 templates/js/translated/stock.js:927 -#: templates/js/translated/stock.js:1580 templates/navbar.html:28 +#: templates/js/translated/bom.js:340 templates/js/translated/part.js:495 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1125 +#: templates/js/translated/part.js:1286 templates/js/translated/stock.js:935 +#: templates/js/translated/stock.js:1588 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2907,8 +2996,8 @@ msgstr "" #: stock/templates/stock/location.html:151 #: stock/templates/stock/location.html:163 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2351 -#: templates/stats.html:93 templates/stats.html:102 users/models.py:43 +#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2509 +#: templates/stats.html:105 templates/stats.html:114 users/models.py:43 msgid "Stock Items" msgstr "Artículos de Stock" @@ -2937,20 +3026,20 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:129 part/views.py:584 +#: company/views.py:129 part/views.py:593 msgid "Download Image" msgstr "" -#: company/views.py:158 part/views.py:616 +#: company/views.py:158 part/views.py:625 msgid "Image size exceeds maximum allowable size for download" msgstr "" -#: company/views.py:165 part/views.py:623 +#: company/views.py:165 part/views.py:632 #, python-brace-format msgid "Invalid response: {code}" msgstr "" -#: company/views.py:174 part/views.py:632 +#: company/views.py:174 part/views.py:641 msgid "Supplied URL is not a valid image file" msgstr "" @@ -3036,282 +3125,282 @@ msgstr "" msgid "Cancel order" msgstr "" -#: order/models.py:122 +#: order/models.py:125 msgid "Order description" msgstr "" -#: order/models.py:124 +#: order/models.py:127 msgid "Link to external page" msgstr "" -#: order/models.py:132 +#: order/models.py:135 msgid "Created By" msgstr "" -#: order/models.py:139 +#: order/models.py:142 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:144 +#: order/models.py:147 msgid "Order notes" msgstr "" -#: order/models.py:211 order/models.py:537 +#: order/models.py:214 order/models.py:542 msgid "Order reference" msgstr "" -#: order/models.py:216 order/models.py:552 +#: order/models.py:219 order/models.py:557 msgid "Purchase order status" msgstr "" -#: order/models.py:225 +#: order/models.py:228 msgid "Company from which the items are being ordered" msgstr "Empresa de la que se están pidiendo los artículos" -#: order/models.py:228 order/templates/order/order_base.html:118 +#: order/models.py:231 order/templates/order/order_base.html:118 #: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:228 +#: order/models.py:231 msgid "Supplier order reference code" msgstr "" -#: order/models.py:235 +#: order/models.py:238 msgid "received by" msgstr "" -#: order/models.py:240 +#: order/models.py:243 msgid "Issue Date" msgstr "" -#: order/models.py:241 +#: order/models.py:244 msgid "Date order was issued" msgstr "" -#: order/models.py:246 +#: order/models.py:249 msgid "Target Delivery Date" msgstr "" -#: order/models.py:247 +#: order/models.py:250 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:253 +#: order/models.py:256 msgid "Date order was completed" msgstr "" -#: order/models.py:282 +#: order/models.py:285 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:411 -msgid "Quantity must be an integer" -msgstr "" - -#: order/models.py:415 +#: order/models.py:420 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:548 +#: order/models.py:553 msgid "Company to which the items are being sold" msgstr "Empresa a la que se venden los artículos" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer Reference " msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer order reference code" msgstr "" -#: order/models.py:559 +#: order/models.py:564 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:562 order/models.py:1028 +#: order/models.py:567 order/models.py:1048 #: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:569 +#: order/models.py:574 msgid "shipped by" msgstr "" -#: order/models.py:635 +#: order/models.py:640 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:639 +#: order/models.py:644 msgid "Only a pending order can be marked as complete" msgstr "" -#: order/models.py:642 +#: order/models.py:647 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:645 +#: order/models.py:650 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:797 +#: order/models.py:806 msgid "Item quantity" msgstr "" -#: order/models.py:803 +#: order/models.py:812 msgid "Line item reference" msgstr "" -#: order/models.py:805 +#: order/models.py:814 msgid "Line item notes" msgstr "" -#: order/models.py:835 order/models.py:926 order/models.py:1022 -#: templates/js/translated/order.js:1820 +#: order/models.py:842 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:855 order/models.py:946 order/models.py:1042 +#: templates/js/translated/order.js:1820 templates/js/translated/stock.js:2271 msgid "Order" msgstr "" -#: order/models.py:836 order/templates/order/order_base.html:9 +#: order/models.py:856 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:352 -#: templates/js/translated/order.js:801 templates/js/translated/part.js:832 -#: templates/js/translated/stock.js:1725 templates/js/translated/stock.js:2433 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:838 +#: templates/js/translated/stock.js:1733 templates/js/translated/stock.js:2591 msgid "Purchase Order" msgstr "" -#: order/models.py:857 +#: order/models.py:877 msgid "Supplier part" msgstr "" -#: order/models.py:864 order/templates/order/order_base.html:163 +#: order/models.py:884 order/templates/order/order_base.html:163 #: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 -#: templates/js/translated/part.js:904 templates/js/translated/part.js:930 +#: templates/js/translated/part.js:910 templates/js/translated/part.js:937 #: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:865 +#: order/models.py:885 msgid "Number of items received" msgstr "Número de artículos recibidos" -#: order/models.py:872 part/templates/part/prices.html:176 stock/models.py:606 +#: order/models.py:892 part/templates/part/prices.html:176 stock/models.py:608 #: stock/serializers.py:170 stock/templates/stock/item_base.html:359 -#: templates/js/translated/stock.js:1779 +#: templates/js/translated/stock.js:1787 msgid "Purchase Price" msgstr "" -#: order/models.py:873 +#: order/models.py:893 msgid "Unit purchase price" msgstr "" -#: order/models.py:881 +#: order/models.py:901 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:936 part/templates/part/part_pricing.html:112 +#: order/models.py:956 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:937 +#: order/models.py:957 msgid "Unit sale price" msgstr "" -#: order/models.py:942 +#: order/models.py:962 msgid "Shipped quantity" msgstr "" -#: order/models.py:1029 +#: order/models.py:1049 msgid "Date of shipment" msgstr "" -#: order/models.py:1036 +#: order/models.py:1056 msgid "Checked By" msgstr "" -#: order/models.py:1037 +#: order/models.py:1057 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1045 +#: order/models.py:1065 msgid "Shipment number" msgstr "" -#: order/models.py:1052 +#: order/models.py:1072 msgid "Shipment notes" msgstr "" -#: order/models.py:1059 +#: order/models.py:1079 msgid "Tracking Number" msgstr "" -#: order/models.py:1060 +#: order/models.py:1080 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1070 +#: order/models.py:1090 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1073 +#: order/models.py:1093 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1149 order/models.py:1151 +#: order/models.py:1171 order/models.py:1173 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1155 +#: order/models.py:1177 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1157 +#: order/models.py:1179 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1160 +#: order/models.py:1182 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1164 +#: order/models.py:1186 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:1170 order/serializers.py:734 +#: order/models.py:1192 order/serializers.py:740 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1173 +#: order/models.py:1195 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1174 +#: order/models.py:1196 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1182 +#: order/models.py:1204 msgid "Line" msgstr "" -#: order/models.py:1190 order/serializers.py:825 order/serializers.py:953 -#: templates/js/translated/model_renderers.js:251 +#: order/models.py:1212 order/serializers.py:831 order/serializers.py:959 +#: templates/js/translated/model_renderers.js:285 msgid "Shipment" msgstr "" -#: order/models.py:1191 +#: order/models.py:1213 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1203 +#: order/models.py:1225 msgid "Item" msgstr "" -#: order/models.py:1204 +#: order/models.py:1226 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1207 +#: order/models.py:1229 msgid "Enter stock allocation quantity" msgstr "" @@ -3319,7 +3408,7 @@ msgstr "" msgid "Purchase price currency" msgstr "" -#: order/serializers.py:211 order/serializers.py:790 +#: order/serializers.py:211 order/serializers.py:796 msgid "Line Item" msgstr "" @@ -3355,39 +3444,39 @@ msgstr "" msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:587 msgid "Sale price currency" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:655 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:699 order/serializers.py:802 +#: order/serializers.py:705 order/serializers.py:808 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:721 +#: order/serializers.py:727 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:815 +#: order/serializers.py:821 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:839 order/serializers.py:964 +#: order/serializers.py:845 order/serializers.py:970 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:842 order/serializers.py:967 +#: order/serializers.py:848 order/serializers.py:973 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:894 +#: order/serializers.py:900 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:910 msgid "The following serial numbers are already allocated" msgstr "" @@ -3441,6 +3530,7 @@ msgstr "" #: order/templates/order/order_base.html:94 #: order/templates/order/sales_order_base.html:89 +#: templates/js/translated/stock.js:2327 msgid "Order Status" msgstr "" @@ -3538,7 +3628,7 @@ msgstr "" #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/build.js:300 templates/js/translated/build.js:1311 #: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 -#: templates/js/translated/stock.js:593 templates/js/translated/stock.js:761 +#: templates/js/translated/stock.js:601 templates/js/translated/stock.js:769 msgid "Remove row" msgstr "" @@ -3729,7 +3819,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:48 -#: templates/js/translated/bom.js:720 templates/js/translated/build.js:1243 +#: templates/js/translated/bom.js:732 templates/js/translated/build.js:1243 msgid "Actions" msgstr "" @@ -3832,447 +3922,448 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:125 part/models.py:81 part/models.py:847 +#: part/bom.py:125 part/models.py:83 part/models.py:849 #: part/templates/part/category.html:108 part/templates/part/part_base.html:338 msgid "Default Location" msgstr "" -#: part/bom.py:126 part/templates/part/part_base.html:185 +#: part/bom.py:126 templates/email/low_stock_notification.html:17 +msgid "Total Stock" +msgstr "" + +#: part/bom.py:127 part/templates/part/part_base.html:185 msgid "Available Stock" msgstr "" -#: part/forms.py:85 +#: part/bom.py:128 part/templates/part/part_base.html:203 +#: templates/js/translated/part.js:1301 +msgid "On Order" +msgstr "" + +#: part/forms.py:84 msgid "Select part category" msgstr "" -#: part/forms.py:122 +#: part/forms.py:121 msgid "Add parameter template to same level categories" msgstr "" -#: part/forms.py:126 +#: part/forms.py:125 msgid "Add parameter template to all categories" msgstr "" -#: part/forms.py:146 +#: part/forms.py:145 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 +#: part/models.py:84 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:95 part/models.py:2526 part/templates/part/category.html:15 +#: part/models.py:97 part/models.py:2533 part/templates/part/category.html:15 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:96 part/templates/part/category.html:128 -#: templates/InvenTree/search.html:95 templates/stats.html:84 +#: part/models.py:98 part/templates/part/category.html:128 +#: templates/InvenTree/search.html:95 templates/stats.html:96 #: users/models.py:40 msgid "Part Categories" msgstr "" -#: part/models.py:358 part/templates/part/cat_link.html:3 +#: part/models.py:360 part/templates/part/cat_link.html:3 #: part/templates/part/category.html:17 part/templates/part/category.html:133 #: part/templates/part/category.html:153 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82 #: templates/InvenTree/settings/sidebar.html:37 -#: templates/js/translated/part.js:1656 templates/navbar.html:21 -#: templates/stats.html:80 templates/stats.html:89 users/models.py:41 +#: templates/js/translated/part.js:1663 templates/navbar.html:21 +#: templates/stats.html:92 templates/stats.html:101 users/models.py:41 msgid "Parts" msgstr "" -#: part/models.py:450 +#: part/models.py:452 msgid "Invalid choice for parent part" msgstr "Parte inválida para parte principal" -#: part/models.py:500 part/models.py:512 +#: part/models.py:502 part/models.py:514 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:642 +#: part/models.py:644 msgid "Next available serial numbers are" msgstr "" -#: part/models.py:646 +#: part/models.py:648 msgid "Next available serial number is" msgstr "" -#: part/models.py:651 +#: part/models.py:653 msgid "Most recent serial number is" msgstr "" -#: part/models.py:746 +#: part/models.py:748 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:771 +#: part/models.py:773 msgid "Part name" msgstr "" -#: part/models.py:778 +#: part/models.py:780 msgid "Is Template" msgstr "" -#: part/models.py:779 +#: part/models.py:781 msgid "Is this part a template part?" msgstr "" -#: part/models.py:789 +#: part/models.py:791 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:790 +#: part/models.py:792 msgid "Variant Of" msgstr "" -#: part/models.py:796 +#: part/models.py:798 msgid "Part description" msgstr "" -#: part/models.py:801 part/templates/part/category.html:86 +#: part/models.py:803 part/templates/part/category.html:86 #: part/templates/part/part_base.html:302 msgid "Keywords" msgstr "" -#: part/models.py:802 +#: part/models.py:804 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:809 part/models.py:2276 part/models.py:2525 +#: part/models.py:811 part/models.py:2283 part/models.py:2532 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:183 -#: templates/js/translated/part.js:1261 +#: templates/InvenTree/settings/settings.html:186 +#: templates/js/translated/part.js:1268 msgid "Category" msgstr "" -#: part/models.py:810 +#: part/models.py:812 msgid "Part category" msgstr "" -#: part/models.py:815 part/templates/part/part_base.html:274 -#: templates/js/translated/part.js:612 templates/js/translated/part.js:1214 -#: templates/js/translated/stock.js:1552 +#: part/models.py:817 part/templates/part/part_base.html:274 +#: templates/js/translated/part.js:618 templates/js/translated/part.js:1221 +#: templates/js/translated/stock.js:1560 msgid "IPN" msgstr "" -#: part/models.py:816 +#: part/models.py:818 msgid "Internal Part Number" msgstr "" -#: part/models.py:822 +#: part/models.py:824 msgid "Part revision or version number" msgstr "" -#: part/models.py:823 part/templates/part/part_base.html:281 -#: report/models.py:200 templates/js/translated/part.js:616 +#: part/models.py:825 part/templates/part/part_base.html:281 +#: report/models.py:200 templates/js/translated/part.js:622 msgid "Revision" msgstr "" -#: part/models.py:845 +#: part/models.py:847 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:892 part/templates/part/part_base.html:347 +#: part/models.py:894 part/templates/part/part_base.html:347 msgid "Default Supplier" msgstr "" -#: part/models.py:893 +#: part/models.py:895 msgid "Default supplier part" msgstr "" -#: part/models.py:900 +#: part/models.py:902 msgid "Default Expiry" msgstr "" -#: part/models.py:901 +#: part/models.py:903 msgid "Expiry time (in days) for stock items of this part" msgstr "Tiempo de expiración (en días) para los artículos de stock de esta parte" -#: part/models.py:906 part/templates/part/part_base.html:196 +#: part/models.py:908 part/templates/part/part_base.html:196 msgid "Minimum Stock" msgstr "" -#: part/models.py:907 +#: part/models.py:909 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:914 +#: part/models.py:916 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:920 +#: part/models.py:922 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:926 +#: part/models.py:928 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:932 +#: part/models.py:934 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:937 +#: part/models.py:939 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:942 +#: part/models.py:944 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:946 plugin/models.py:46 -#: templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:295 -#: templates/js/translated/table_filters.js:417 -msgid "Active" -msgstr "" - -#: part/models.py:947 +#: part/models.py:949 msgid "Is this part active?" msgstr "" -#: part/models.py:952 +#: part/models.py:954 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:957 +#: part/models.py:959 msgid "Part notes - supports Markdown formatting" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "BOM checksum" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:963 +#: part/models.py:965 msgid "BOM checked by" msgstr "" -#: part/models.py:965 +#: part/models.py:967 msgid "BOM checked date" msgstr "" -#: part/models.py:969 +#: part/models.py:971 msgid "Creation User" msgstr "" -#: part/models.py:1781 +#: part/models.py:1783 msgid "Sell multiple" msgstr "" -#: part/models.py:2326 +#: part/models.py:2333 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2343 +#: part/models.py:2350 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2363 templates/js/translated/part.js:1707 -#: templates/js/translated/stock.js:1276 +#: part/models.py:2370 templates/js/translated/part.js:1714 +#: templates/js/translated/stock.js:1284 msgid "Test Name" msgstr "" -#: part/models.py:2364 +#: part/models.py:2371 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2369 +#: part/models.py:2376 msgid "Test Description" msgstr "" -#: part/models.py:2370 +#: part/models.py:2377 msgid "Enter description for this test" msgstr "" -#: part/models.py:2375 templates/js/translated/part.js:1716 +#: part/models.py:2382 templates/js/translated/part.js:1723 #: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" -#: part/models.py:2376 +#: part/models.py:2383 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2381 templates/js/translated/part.js:1724 +#: part/models.py:2388 templates/js/translated/part.js:1731 msgid "Requires Value" msgstr "" -#: part/models.py:2382 +#: part/models.py:2389 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2387 templates/js/translated/part.js:1731 +#: part/models.py:2394 templates/js/translated/part.js:1738 msgid "Requires Attachment" msgstr "" -#: part/models.py:2388 +#: part/models.py:2395 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2399 +#: part/models.py:2406 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2435 +#: part/models.py:2442 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2443 +#: part/models.py:2450 msgid "Parameter Name" msgstr "" -#: part/models.py:2450 +#: part/models.py:2457 msgid "Parameter Units" msgstr "" -#: part/models.py:2480 +#: part/models.py:2487 msgid "Parent Part" msgstr "Parte principal" -#: part/models.py:2482 part/models.py:2531 part/models.py:2532 -#: templates/InvenTree/settings/settings.html:178 +#: part/models.py:2489 part/models.py:2538 part/models.py:2539 +#: templates/InvenTree/settings/settings.html:181 msgid "Parameter Template" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Data" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Parameter Value" msgstr "" -#: part/models.py:2536 templates/InvenTree/settings/settings.html:187 +#: part/models.py:2543 templates/InvenTree/settings/settings.html:190 msgid "Default Value" msgstr "" -#: part/models.py:2537 +#: part/models.py:2544 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2614 +#: part/models.py:2621 msgid "Select parent part" msgstr "Seleccionar parte principal" -#: part/models.py:2622 +#: part/models.py:2629 msgid "Sub part" msgstr "" -#: part/models.py:2623 +#: part/models.py:2630 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2629 +#: part/models.py:2636 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2631 templates/js/translated/bom.js:566 -#: templates/js/translated/bom.js:640 +#: part/models.py:2638 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:652 #: templates/js/translated/table_filters.js:92 msgid "Optional" msgstr "" -#: part/models.py:2631 +#: part/models.py:2638 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2634 +#: part/models.py:2641 msgid "Overage" msgstr "" -#: part/models.py:2635 +#: part/models.py:2642 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2638 +#: part/models.py:2645 msgid "BOM item reference" msgstr "" -#: part/models.py:2641 +#: part/models.py:2648 msgid "BOM item notes" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "Checksum" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "BOM line checksum" msgstr "" -#: part/models.py:2647 templates/js/translated/bom.js:657 +#: part/models.py:2654 templates/js/translated/bom.js:669 #: templates/js/translated/table_filters.js:68 #: templates/js/translated/table_filters.js:88 msgid "Inherited" msgstr "" -#: part/models.py:2648 +#: part/models.py:2655 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2653 templates/js/translated/bom.js:649 +#: part/models.py:2660 templates/js/translated/bom.js:661 msgid "Allow Variants" msgstr "" -#: part/models.py:2654 +#: part/models.py:2661 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2739 stock/models.py:355 +#: part/models.py:2746 stock/models.py:357 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2748 part/models.py:2750 +#: part/models.py:2755 part/models.py:2757 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2879 +#: part/models.py:2886 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2901 +#: part/models.py:2908 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2913 +#: part/models.py:2920 msgid "Parent BOM item" msgstr "Artículo BOM principal" -#: part/models.py:2921 +#: part/models.py:2928 msgid "Substitute part" msgstr "" -#: part/models.py:2932 +#: part/models.py:2939 msgid "Part 1" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Part 2" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Select Related Part" msgstr "" -#: part/models.py:2968 +#: part/models.py:2975 msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique" msgstr "" @@ -4327,7 +4418,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:253 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:270 msgid "BOM actions" msgstr "" @@ -4499,7 +4590,7 @@ msgstr "" msgid "Import Parts" msgstr "" -#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:375 +#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:348 msgid "Duplicate Part" msgstr "" @@ -4533,145 +4624,149 @@ msgid "Showing stock for all variants of %(full_name)s" msgstr "" #: part/templates/part/detail.html:43 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/detail.html:60 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:48 +#: part/templates/part/detail.html:65 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:105 +#: part/templates/part/detail.html:122 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:142 +#: part/templates/part/detail.html:159 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:146 +#: part/templates/part/detail.html:163 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:147 +#: part/templates/part/detail.html:164 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:174 +#: part/templates/part/detail.html:191 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:45 +#: part/templates/part/detail.html:228 part/templates/part/part_sidebar.html:49 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:215 part/templates/part/detail.html:216 +#: part/templates/part/detail.html:232 part/templates/part/detail.html:233 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:253 part/templates/part/part_sidebar.html:17 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:241 +#: part/templates/part/detail.html:258 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:245 templates/js/translated/bom.js:70 +#: part/templates/part/detail.html:262 templates/js/translated/bom.js:70 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:247 +#: part/templates/part/detail.html:264 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:257 +#: part/templates/part/detail.html:274 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:259 templates/js/translated/part.js:272 +#: part/templates/part/detail.html:276 templates/js/translated/part.js:272 msgid "Copy BOM" msgstr "" -#: part/templates/part/detail.html:261 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:283 msgid "New BOM Item" msgstr "" -#: part/templates/part/detail.html:267 +#: part/templates/part/detail.html:284 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:280 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:314 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:322 +#: part/templates/part/detail.html:339 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:332 +#: part/templates/part/detail.html:349 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:360 +#: part/templates/part/detail.html:377 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:393 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:558 +#: part/templates/part/detail.html:575 msgid "Delete selected BOM items?" msgstr "" -#: part/templates/part/detail.html:559 +#: part/templates/part/detail.html:576 msgid "All selected BOM items will be deleted" msgstr "" -#: part/templates/part/detail.html:608 +#: part/templates/part/detail.html:625 msgid "Create BOM Item" msgstr "" -#: part/templates/part/detail.html:652 +#: part/templates/part/detail.html:682 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:660 +#: part/templates/part/detail.html:690 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:755 +#: part/templates/part/detail.html:785 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:812 +#: part/templates/part/detail.html:842 msgid "Edit Part Notes" msgstr "" -#: part/templates/part/detail.html:925 +#: part/templates/part/detail.html:955 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:937 +#: part/templates/part/detail.html:967 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:949 +#: part/templates/part/detail.html:979 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1038 +#: part/templates/part/detail.html:1068 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -4786,7 +4881,7 @@ msgstr "" #: templates/js/translated/company.js:508 #: templates/js/translated/company.js:765 #: templates/js/translated/model_renderers.js:175 -#: templates/js/translated/part.js:527 templates/js/translated/part.js:604 +#: templates/js/translated/part.js:533 templates/js/translated/part.js:610 msgid "Inactive" msgstr "" @@ -4805,10 +4900,6 @@ msgstr "" msgid "In Stock" msgstr "" -#: part/templates/part/part_base.html:203 templates/js/translated/part.js:1294 -msgid "On Order" -msgstr "" - #: part/templates/part/part_base.html:210 templates/InvenTree/index.html:178 msgid "Required for Build Orders" msgstr "" @@ -4821,12 +4912,12 @@ msgstr "" msgid "Allocated to Orders" msgstr "" -#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:678 +#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:690 msgid "Can Build" msgstr "" -#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1125 -#: templates/js/translated/part.js:1298 +#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1132 +#: templates/js/translated/part.js:1305 msgid "Building" msgstr "" @@ -4878,7 +4969,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:40 -#: templates/js/translated/bom.js:632 +#: templates/js/translated/bom.js:644 msgid "No supplier pricing available" msgstr "" @@ -4920,7 +5011,12 @@ msgstr "" msgid "Used In" msgstr "" -#: part/templates/part/part_sidebar.html:41 +#: part/templates/part/part_sidebar.html:31 +#: stock/templates/stock/stock_sidebar.html:8 +msgid "Allocations" +msgstr "" + +#: part/templates/part/part_sidebar.html:45 msgid "Test Templates" msgstr "" @@ -4993,7 +5089,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:155 templates/js/translated/bom.js:626 +#: part/templates/part/prices.html:155 templates/js/translated/bom.js:638 msgid "Supplier Cost" msgstr "" @@ -5015,7 +5111,7 @@ msgstr "" msgid "Internal Cost" msgstr "" -#: part/templates/part/prices.html:215 part/views.py:1690 +#: part/templates/part/prices.html:215 part/views.py:1699 msgid "Add Internal Price Break" msgstr "" @@ -5035,9 +5131,9 @@ msgstr "" msgid "Set category for the following parts" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:588 -#: templates/js/translated/part.js:491 templates/js/translated/part.js:1115 -#: templates/js/translated/part.js:1302 +#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:600 +#: templates/js/translated/part.js:497 templates/js/translated/part.js:1122 +#: templates/js/translated/part.js:1309 msgid "No Stock" msgstr "" @@ -5054,116 +5150,116 @@ msgstr "" msgid "Create a new variant of template '%(full_name)s'." msgstr "" -#: part/templatetags/inventree_extras.py:116 +#: part/templatetags/inventree_extras.py:125 msgid "Unknown database" msgstr "" -#: part/views.py:92 +#: part/views.py:93 msgid "Set Part Category" msgstr "" -#: part/views.py:142 +#: part/views.py:143 #, python-brace-format msgid "Set category for {n} parts" msgstr "" -#: part/views.py:214 +#: part/views.py:215 msgid "Match References" msgstr "" -#: part/views.py:502 +#: part/views.py:511 msgid "None" msgstr "" -#: part/views.py:561 +#: part/views.py:570 msgid "Part QR Code" msgstr "" -#: part/views.py:663 +#: part/views.py:672 msgid "Select Part Image" msgstr "" -#: part/views.py:689 +#: part/views.py:698 msgid "Updated part image" msgstr "" -#: part/views.py:692 +#: part/views.py:701 msgid "Part image not found" msgstr "" -#: part/views.py:766 +#: part/views.py:775 msgid "Match Parts" msgstr "" -#: part/views.py:1101 +#: part/views.py:1110 msgid "Export Bill of Materials" msgstr "" -#: part/views.py:1150 +#: part/views.py:1159 msgid "Confirm Part Deletion" msgstr "" -#: part/views.py:1157 +#: part/views.py:1166 msgid "Part was deleted" msgstr "" -#: part/views.py:1166 +#: part/views.py:1175 msgid "Part Pricing" msgstr "" -#: part/views.py:1315 +#: part/views.py:1324 msgid "Create Part Parameter Template" msgstr "" -#: part/views.py:1325 +#: part/views.py:1334 msgid "Edit Part Parameter Template" msgstr "" -#: part/views.py:1332 +#: part/views.py:1341 msgid "Delete Part Parameter Template" msgstr "" -#: part/views.py:1391 templates/js/translated/part.js:315 +#: part/views.py:1400 templates/js/translated/part.js:315 msgid "Edit Part Category" msgstr "" -#: part/views.py:1429 +#: part/views.py:1438 msgid "Delete Part Category" msgstr "" -#: part/views.py:1435 +#: part/views.py:1444 msgid "Part category was deleted" msgstr "" -#: part/views.py:1444 +#: part/views.py:1453 msgid "Create Category Parameter Template" msgstr "" -#: part/views.py:1545 +#: part/views.py:1554 msgid "Edit Category Parameter Template" msgstr "" -#: part/views.py:1601 +#: part/views.py:1610 msgid "Delete Category Parameter Template" msgstr "" -#: part/views.py:1623 +#: part/views.py:1632 msgid "Added new price break" msgstr "" -#: part/views.py:1699 +#: part/views.py:1708 msgid "Edit Internal Price Break" msgstr "" -#: part/views.py:1707 +#: part/views.py:1716 msgid "Delete Internal Price Break" msgstr "" -#: plugin/integration.py:124 +#: plugin/integration.py:138 msgid "No author found" msgstr "" -#: plugin/integration.py:136 +#: plugin/integration.py:152 msgid "No date found" msgstr "" @@ -5191,7 +5287,7 @@ msgstr "" msgid "Is the plugin active" msgstr "" -#: plugin/models.py:195 +#: plugin/models.py:199 msgid "Plugin" msgstr "" @@ -5357,12 +5453,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:517 stock/templates/stock/item_base.html:156 +#: stock/models.py:519 stock/templates/stock/item_base.html:156 #: templates/js/translated/build.js:293 templates/js/translated/build.js:697 #: templates/js/translated/build.js:1073 #: templates/js/translated/model_renderers.js:95 #: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 -#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:415 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:423 msgid "Serial Number" msgstr "" @@ -5371,19 +5467,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1948 +#: stock/models.py:1976 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1954 +#: stock/models.py:1982 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin.html:50 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2367 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2525 msgid "Date" msgstr "" @@ -5396,23 +5492,27 @@ msgid "Fail" msgstr "" #: report/templates/report/inventree_test_report_base.html:123 -#: stock/templates/stock/stock_sidebar.html:12 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:578 templates/js/translated/stock.js:748 -#: templates/js/translated/stock.js:2627 +#: templates/js/translated/stock.js:586 templates/js/translated/stock.js:756 +#: templates/js/translated/stock.js:2785 msgid "Serial" msgstr "" -#: stock/api.py:478 +#: stock/api.py:476 msgid "Quantity is required" msgstr "" -#: stock/forms.py:77 stock/forms.py:251 stock/models.py:574 +#: stock/api.py:483 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:576 #: stock/templates/stock/item_base.html:193 -#: templates/js/translated/stock.js:1701 +#: templates/js/translated/stock.js:1709 msgid "Expiry Date" msgstr "" @@ -5460,228 +5560,228 @@ msgstr "" msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:611 +#: stock/models.py:62 stock/models.py:613 #: stock/templates/stock/item_base.html:416 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:612 +#: stock/models.py:63 stock/models.py:614 msgid "Select Owner" msgstr "" -#: stock/models.py:336 +#: stock/models.py:338 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:372 +#: stock/models.py:374 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:382 stock/models.py:391 +#: stock/models.py:384 stock/models.py:393 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:383 +#: stock/models.py:385 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:405 +#: stock/models.py:407 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:411 +#: stock/models.py:413 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:418 +#: stock/models.py:420 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:461 +#: stock/models.py:463 msgid "Parent Stock Item" msgstr "Artículo de stock principal" -#: stock/models.py:470 +#: stock/models.py:472 msgid "Base part" msgstr "" -#: stock/models.py:478 +#: stock/models.py:480 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:484 stock/templates/stock/location.html:16 +#: stock/models.py:486 stock/templates/stock/location.html:16 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:494 +#: stock/models.py:496 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:500 stock/templates/stock/item_base.html:298 +#: stock/models.py:502 stock/templates/stock/item_base.html:298 msgid "Installed In" msgstr "" -#: stock/models.py:503 +#: stock/models.py:505 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:519 +#: stock/models.py:521 msgid "Serial number for this item" msgstr "" -#: stock/models.py:533 +#: stock/models.py:535 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:537 +#: stock/models.py:539 msgid "Stock Quantity" msgstr "" -#: stock/models.py:546 +#: stock/models.py:548 msgid "Source Build" msgstr "" -#: stock/models.py:548 +#: stock/models.py:550 msgid "Build for this stock item" msgstr "" -#: stock/models.py:559 +#: stock/models.py:561 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:562 +#: stock/models.py:564 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:568 +#: stock/models.py:570 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:575 +#: stock/models.py:577 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete on deplete" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:598 stock/templates/stock/item.html:111 +#: stock/models.py:600 stock/templates/stock/item.html:128 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:607 +#: stock/models.py:609 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1096 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1074 +#: stock/models.py:1102 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1080 +#: stock/models.py:1108 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1083 +#: stock/models.py:1111 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1086 +#: stock/models.py:1114 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1093 +#: stock/models.py:1121 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1164 +#: stock/models.py:1192 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1195 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1170 +#: stock/models.py:1198 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1173 +#: stock/models.py:1201 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1176 +#: stock/models.py:1204 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1179 +#: stock/models.py:1207 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1186 stock/serializers.py:774 +#: stock/models.py:1214 stock/serializers.py:775 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1190 +#: stock/models.py:1218 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1222 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1198 +#: stock/models.py:1226 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1369 +#: stock/models.py:1397 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1868 +#: stock/models.py:1896 msgid "Entry notes" msgstr "" -#: stock/models.py:1925 +#: stock/models.py:1953 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1931 +#: stock/models.py:1959 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1949 +#: stock/models.py:1977 msgid "Test name" msgstr "" -#: stock/models.py:1955 templates/js/translated/table_filters.js:271 +#: stock/models.py:1983 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1961 +#: stock/models.py:1989 msgid "Test output value" msgstr "" -#: stock/models.py:1968 +#: stock/models.py:1996 msgid "Test result attachment" msgstr "" -#: stock/models.py:1974 +#: stock/models.py:2002 msgid "Test notes" msgstr "" @@ -5706,7 +5806,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:326 stock/serializers.py:731 stock/serializers.py:972 +#: stock/serializers.py:326 stock/serializers.py:732 stock/serializers.py:973 msgid "Destination stock location" msgstr "" @@ -5718,63 +5818,63 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:589 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:592 +#: stock/serializers.py:593 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:597 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:626 +#: stock/serializers.py:627 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:632 +#: stock/serializers.py:633 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:640 +#: stock/serializers.py:641 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:650 stock/serializers.py:880 +#: stock/serializers.py:651 stock/serializers.py:881 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:738 +#: stock/serializers.py:739 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:743 +#: stock/serializers.py:744 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:744 +#: stock/serializers.py:745 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:749 +#: stock/serializers.py:750 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:750 +#: stock/serializers.py:751 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:760 +#: stock/serializers.py:761 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:842 +#: stock/serializers.py:843 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:870 +#: stock/serializers.py:871 msgid "Stock transaction notes" msgstr "" @@ -5787,47 +5887,51 @@ msgid "New Entry" msgstr "" #: stock/templates/stock/item.html:48 -msgid "Child Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:55 -msgid "This stock item does not have any child items" +msgid "Stock Item Allocations" msgstr "" #: stock/templates/stock/item.html:64 -#: stock/templates/stock/stock_sidebar.html:8 -msgid "Test Data" -msgstr "" - -#: stock/templates/stock/item.html:68 stock/templates/stock/item_base.html:57 -msgid "Test Report" +msgid "Child Stock Items" msgstr "" #: stock/templates/stock/item.html:72 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item.html:81 +#: stock/templates/stock/stock_sidebar.html:12 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:57 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item.html:89 msgid "Delete Test Data" msgstr "" -#: stock/templates/stock/item.html:76 +#: stock/templates/stock/item.html:93 msgid "Add Test Data" msgstr "" -#: stock/templates/stock/item.html:133 +#: stock/templates/stock/item.html:150 msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:482 +#: stock/templates/stock/item.html:154 stock/views.py:482 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:279 stock/templates/stock/item.html:304 +#: stock/templates/stock/item.html:309 stock/templates/stock/item.html:334 msgid "Add Test Result" msgstr "" -#: stock/templates/stock/item.html:324 +#: stock/templates/stock/item.html:354 msgid "Edit Test Result" msgstr "" -#: stock/templates/stock/item.html:338 +#: stock/templates/stock/item.html:368 msgid "Delete Test Result" msgstr "" @@ -5952,7 +6056,7 @@ msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:206 -#: templates/js/translated/stock.js:1714 +#: templates/js/translated/stock.js:1722 msgid "Last Updated" msgstr "" @@ -6111,7 +6215,7 @@ msgid "Sublocations" msgstr "" #: stock/templates/stock/location.html:146 templates/InvenTree/search.html:164 -#: templates/stats.html:97 users/models.py:42 +#: templates/stats.html:109 users/models.py:42 msgid "Stock Locations" msgstr "" @@ -6135,7 +6239,7 @@ msgstr "" msgid "Stock Tracking" msgstr "" -#: stock/templates/stock/stock_sidebar.html:16 +#: stock/templates/stock/stock_sidebar.html:20 msgid "Child Items" msgstr "" @@ -6164,7 +6268,7 @@ msgstr "" msgid "Are you sure you want to delete this stock tracking entry?" msgstr "" -#: stock/views.py:162 +#: stock/views.py:162 templates/js/translated/stock.js:139 msgid "Edit Stock Location" msgstr "" @@ -6204,7 +6308,7 @@ msgstr "" msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:727 templates/js/translated/stock.js:1066 +#: stock/views.py:727 templates/js/translated/stock.js:1074 msgid "Confirm stock adjustment" msgstr "" @@ -6212,7 +6316,7 @@ msgstr "" msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:324 +#: stock/views.py:760 templates/js/translated/stock.js:332 msgid "Edit Stock Item" msgstr "" @@ -6224,7 +6328,7 @@ msgstr "" msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1153 templates/js/translated/stock.js:304 +#: stock/views.py:1153 templates/js/translated/stock.js:312 msgid "Duplicate Stock Item" msgstr "" @@ -6268,6 +6372,18 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/500.html:5 templates/500.html:11 +msgid "Internal Server Error" +msgstr "" + +#: templates/500.html:14 +msgid "The InvenTree server raised an internal error" +msgstr "" + +#: templates/500.html:15 +msgid "Refer to the error log in the admin interface for further details" +msgstr "" + #: templates/503.html:10 templates/503.html:35 msgid "Site is in Maintenance" msgstr "" @@ -6390,7 +6506,7 @@ msgid "Signup" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:113 msgid "Settings" msgstr "" @@ -6431,43 +6547,43 @@ msgstr "" msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:32 +#: templates/InvenTree/settings/plugin.html:33 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:37 +#: templates/InvenTree/settings/plugin.html:38 #: templates/js/translated/plugin.js:15 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: templates/InvenTree/settings/plugin.html:47 templates/navbar.html:111 #: users/models.py:39 msgid "Admin" msgstr "" -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:49 #: templates/InvenTree/settings/plugin_settings.html:28 msgid "Author" msgstr "" -#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin_settings.html:43 msgid "Version" msgstr "" -#: templates/InvenTree/settings/plugin.html:91 +#: templates/InvenTree/settings/plugin.html:92 msgid "Inactive plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:114 +#: templates/InvenTree/settings/plugin.html:115 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:123 +#: templates/InvenTree/settings/plugin.html:124 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:125 +#: templates/InvenTree/settings/plugin.html:126 msgid "Message" msgstr "" @@ -6555,37 +6671,37 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:75 +#: templates/InvenTree/settings/settings.html:78 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:77 +#: templates/InvenTree/settings/settings.html:80 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:79 +#: templates/InvenTree/settings/settings.html:82 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:168 +#: templates/InvenTree/settings/settings.html:171 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:190 -#: templates/InvenTree/settings/settings.html:289 +#: templates/InvenTree/settings/settings.html:193 +#: templates/InvenTree/settings/settings.html:292 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:191 -#: templates/InvenTree/settings/settings.html:290 +#: templates/InvenTree/settings/settings.html:194 +#: templates/InvenTree/settings/settings.html:293 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:272 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:273 +#: templates/InvenTree/settings/settings.html:276 msgid "ID" msgstr "" @@ -6763,124 +6879,105 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:219 +#: templates/InvenTree/settings/user.html:220 +msgid "Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:226 +msgid "Log out active sessions (except this one)" +msgstr "" + +#: templates/InvenTree/settings/user.html:227 +msgid "Log Out Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:236 +msgid "unknown on unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:237 +msgid "unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:241 +msgid "IP Address" +msgstr "" + +#: templates/InvenTree/settings/user.html:242 +msgid "Device" +msgstr "" + +#: templates/InvenTree/settings/user.html:243 +msgid "Last Activity" +msgstr "" + +#: templates/InvenTree/settings/user.html:252 +#, python-format +msgid "%(time)s ago (this session)" +msgstr "" + +#: templates/InvenTree/settings/user.html:254 +#, python-format +msgid "%(time)s ago" +msgstr "" + +#: templates/InvenTree/settings/user.html:266 +msgid "Do you really want to remove the selected email address?" +msgstr "" + #: templates/InvenTree/settings/user_display.html:25 msgid "Theme Settings" msgstr "" -#: templates/InvenTree/settings/user.html:227 #: templates/InvenTree/settings/user_display.html:35 msgid "Select theme" msgstr "" -#: templates/InvenTree/settings/user.html:237 #: templates/InvenTree/settings/user_display.html:46 msgid "Set Theme" msgstr "" -#: templates/InvenTree/settings/user.html:246 #: templates/InvenTree/settings/user_display.html:54 msgid "Language Settings" msgstr "" -#: templates/InvenTree/settings/user.html:254 #: templates/InvenTree/settings/user_display.html:63 msgid "Select language" msgstr "" -#: templates/InvenTree/settings/user.html:270 #: templates/InvenTree/settings/user_display.html:79 #, python-format msgid "%(lang_translated)s%% translated" msgstr "" -#: templates/InvenTree/settings/user.html:272 #: templates/InvenTree/settings/user_display.html:81 msgid "No translations available" msgstr "" -#: templates/InvenTree/settings/user.html:279 #: templates/InvenTree/settings/user_display.html:88 msgid "Set Language" msgstr "" -#: templates/InvenTree/settings/user.html:281 #: templates/InvenTree/settings/user_display.html:91 msgid "Some languages are not complete" msgstr "" -#: templates/InvenTree/settings/user.html:283 #: templates/InvenTree/settings/user_display.html:93 msgid "Show only sufficent" msgstr "" -#: templates/InvenTree/settings/user.html:285 +#: templates/InvenTree/settings/user_display.html:95 +msgid "and hidden." +msgstr "" + #: templates/InvenTree/settings/user_display.html:95 msgid "Show them too" msgstr "" -#: templates/InvenTree/settings/user.html:292 #: templates/InvenTree/settings/user_display.html:101 msgid "Help the translation efforts!" msgstr "" -#: templates/InvenTree/settings/user.html:293 -#, python-format -msgid "Native language translation of the\n" -" InvenTree web application is community contributed via crowdin. Contributions are\n" -" welcomed and encouraged." -msgstr "" - -#: templates/InvenTree/settings/user.html:302 -msgid "Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:308 -msgid "Log out active sessions (except this one)" -msgstr "" - -#: templates/InvenTree/settings/user.html:309 -msgid "Log Out Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:318 -msgid "unknown on unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:319 -msgid "unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:323 -msgid "IP Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:324 -msgid "Device" -msgstr "" - -#: templates/InvenTree/settings/user.html:325 -msgid "Last Activity" -msgstr "" - -#: templates/InvenTree/settings/user.html:334 -#, python-format -msgid "%(time)s ago (this session)" -msgstr "" - -#: templates/InvenTree/settings/user.html:336 -#, python-format -msgid "%(time)s ago" -msgstr "" - -#: templates/InvenTree/settings/user.html:348 -msgid "Do you really want to remove the selected email address?" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:95 -msgid "and hidden." -msgstr "" - #: templates/InvenTree/settings/user_display.html:102 #, python-format msgid "Native language translation of the InvenTree web application is community contributed via crowdin. Contributions are welcomed and encouraged." @@ -6899,9 +6996,9 @@ msgid "InvenTree Version Information" msgstr "" #: templates/about.html:11 templates/about.html:105 -#: templates/js/translated/bom.js:395 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:573 templates/js/translated/modals.js:667 -#: templates/js/translated/modals.js:970 templates/modals.html:15 +#: templates/js/translated/bom.js:407 templates/js/translated/modals.js:53 +#: templates/js/translated/modals.js:584 templates/js/translated/modals.js:678 +#: templates/js/translated/modals.js:983 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -7178,13 +7275,13 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1103 +#: templates/js/translated/bom.js:1117 msgid "Required Quantity" msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:579 templates/js/translated/build.js:1189 +#: templates/js/translated/bom.js:591 templates/js/translated/build.js:1189 #: templates/js/translated/build.js:1810 #: templates/js/translated/table_filters.js:178 msgid "Available" @@ -7208,10 +7305,6 @@ msgstr "" msgid "Click on the following link to view this part" msgstr "" -#: templates/email/low_stock_notification.html:17 -msgid "Total Stock" -msgstr "" - #: templates/email/low_stock_notification.html:19 msgid "Minimum Quantity" msgstr "" @@ -7232,11 +7325,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1040 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1053 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1041 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1054 msgid "No response from the InvenTree server" msgstr "" @@ -7248,27 +7341,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1063 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1051 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1064 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1068 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1056 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1069 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1073 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1061 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1074 msgid "The requested resource could not be located on the server" msgstr "" @@ -7280,11 +7373,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1065 +#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1078 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1066 +#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1079 msgid "Connection timeout while requesting data from server" msgstr "" @@ -7353,7 +7446,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "Invalid server response" msgstr "" @@ -7381,7 +7474,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1018 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1026 msgid "Remove stock item" msgstr "" @@ -7428,12 +7521,12 @@ msgid "Download BOM Template" msgstr "" #: templates/js/translated/bom.js:39 templates/js/translated/bom.js:73 -#: templates/js/translated/order.js:369 templates/js/translated/stock.js:510 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:518 msgid "Format" msgstr "" #: templates/js/translated/bom.js:40 templates/js/translated/bom.js:74 -#: templates/js/translated/order.js:370 templates/js/translated/stock.js:511 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:519 msgid "Select file format" msgstr "" @@ -7489,87 +7582,87 @@ msgstr "" msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:340 -msgid "Select and add a new variant item using the input below" +#: templates/js/translated/bom.js:352 +msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:351 +#: templates/js/translated/bom.js:363 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:357 +#: templates/js/translated/bom.js:369 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:396 +#: templates/js/translated/bom.js:408 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:397 +#: templates/js/translated/bom.js:409 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:516 +#: templates/js/translated/bom.js:528 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:520 templates/js/translated/build.js:1171 +#: templates/js/translated/bom.js:532 templates/js/translated/build.js:1171 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:525 +#: templates/js/translated/bom.js:537 msgid "Open subassembly" msgstr "" -#: templates/js/translated/bom.js:597 +#: templates/js/translated/bom.js:609 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:612 +#: templates/js/translated/bom.js:624 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:619 +#: templates/js/translated/bom.js:631 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:668 templates/js/translated/bom.js:757 +#: templates/js/translated/bom.js:680 templates/js/translated/bom.js:769 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:728 +#: templates/js/translated/bom.js:740 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:742 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:732 +#: templates/js/translated/bom.js:744 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:734 templates/js/translated/bom.js:908 +#: templates/js/translated/bom.js:746 templates/js/translated/bom.js:920 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:891 +#: templates/js/translated/bom.js:748 templates/js/translated/bom.js:903 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:830 templates/js/translated/build.js:915 +#: templates/js/translated/bom.js:842 templates/js/translated/build.js:915 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:886 +#: templates/js/translated/bom.js:898 msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:1086 templates/js/translated/build.js:1155 +#: templates/js/translated/bom.js:1100 templates/js/translated/build.js:1155 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1108 +#: templates/js/translated/bom.js:1122 msgid "Inherited from parent BOM" msgstr "Heredado de BOM principal" @@ -7725,9 +7818,9 @@ msgstr "" msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1206 -#: templates/js/translated/part.js:1617 templates/js/translated/stock.js:1512 -#: templates/js/translated/stock.js:2321 +#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:1624 templates/js/translated/stock.js:1520 +#: templates/js/translated/stock.js:2479 msgid "Select" msgstr "" @@ -7735,7 +7828,7 @@ msgstr "" msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2540 +#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2698 msgid "No user information" msgstr "" @@ -7808,34 +7901,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:500 -#: templates/js/translated/company.js:757 templates/js/translated/part.js:511 -#: templates/js/translated/part.js:596 +#: templates/js/translated/company.js:757 templates/js/translated/part.js:517 +#: templates/js/translated/part.js:602 msgid "Template part" msgstr "" #: templates/js/translated/company.js:504 -#: templates/js/translated/company.js:761 templates/js/translated/part.js:515 -#: templates/js/translated/part.js:600 +#: templates/js/translated/company.js:761 templates/js/translated/part.js:521 +#: templates/js/translated/part.js:606 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:631 templates/js/translated/part.js:690 +#: templates/js/translated/company.js:631 templates/js/translated/part.js:696 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:668 templates/js/translated/part.js:732 +#: templates/js/translated/company.js:668 templates/js/translated/part.js:738 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:669 templates/js/translated/part.js:733 +#: templates/js/translated/company.js:669 templates/js/translated/part.js:739 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:688 templates/js/translated/part.js:750 +#: templates/js/translated/company.js:688 templates/js/translated/part.js:756 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:699 templates/js/translated/part.js:762 +#: templates/js/translated/company.js:699 templates/js/translated/part.js:768 msgid "Delete Parameter" msgstr "" @@ -7844,12 +7937,12 @@ msgid "No supplier parts found" msgstr "" #: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:420 +#: templates/js/translated/filters.js:429 msgid "true" msgstr "" #: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:421 +#: templates/js/translated/filters.js:430 msgid "false" msgstr "" @@ -7869,7 +7962,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:329 +#: templates/js/translated/filters.js:338 msgid "Create filter" msgstr "" @@ -7898,20 +7991,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1080 templates/modals.html:19 +#: templates/js/translated/forms.js:1082 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1471 +#: templates/js/translated/forms.js:1487 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1675 +#: templates/js/translated/forms.js:1691 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1895 +#: templates/js/translated/forms.js:1930 msgid "Clear input" msgstr "" @@ -7924,7 +8017,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1042 +#: templates/js/translated/stock.js:1050 msgid "Select Stock Items" msgstr "" @@ -7974,12 +8067,12 @@ msgid "Select Label Template" msgstr "" #: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 -#: templates/js/translated/modals.js:599 +#: templates/js/translated/modals.js:610 msgid "Cancel" msgstr "" #: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:666 templates/js/translated/modals.js:969 +#: templates/js/translated/modals.js:677 templates/js/translated/modals.js:982 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" @@ -7988,47 +8081,47 @@ msgstr "" msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:381 +#: templates/js/translated/modals.js:392 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:540 +#: templates/js/translated/modals.js:551 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:598 +#: templates/js/translated/modals.js:609 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:655 +#: templates/js/translated/modals.js:666 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:933 +#: templates/js/translated/modals.js:946 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1045 +#: templates/js/translated/modals.js:1058 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1046 +#: templates/js/translated/modals.js:1059 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1069 +#: templates/js/translated/modals.js:1082 msgid "Error requesting form data" msgstr "" @@ -8052,23 +8145,24 @@ msgstr "" msgid "Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:236 +#: templates/js/translated/model_renderers.js:249 +#: templates/js/translated/model_renderers.js:270 msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:253 +#: templates/js/translated/model_renderers.js:287 msgid "Shipment ID" msgstr "" -#: templates/js/translated/model_renderers.js:273 +#: templates/js/translated/model_renderers.js:307 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:310 +#: templates/js/translated/model_renderers.js:344 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:339 +#: templates/js/translated/model_renderers.js:373 msgid "Supplier Part ID" msgstr "" @@ -8116,7 +8210,7 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2123 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2131 msgid "Stock Status" msgstr "" @@ -8140,7 +8234,7 @@ msgstr "" msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:790 templates/js/translated/part.js:803 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:809 msgid "No purchase orders found" msgstr "" @@ -8165,7 +8259,7 @@ msgid "Total" msgstr "" #: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 -#: templates/js/translated/part.js:1834 templates/js/translated/part.js:2045 +#: templates/js/translated/part.js:1841 templates/js/translated/part.js:2052 msgid "Unit Price" msgstr "" @@ -8181,7 +8275,7 @@ msgstr "" msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1166 templates/js/translated/part.js:935 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:942 msgid "Receive line item" msgstr "" @@ -8250,7 +8344,7 @@ msgid "Delete Stock Allocation" msgstr "" #: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 -#: templates/js/translated/stock.js:1428 +#: templates/js/translated/stock.js:1436 msgid "Shipped to customer" msgstr "" @@ -8378,144 +8472,148 @@ msgstr "" msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:412 +#: templates/js/translated/part.js:351 +msgid "Create Part Variant" +msgstr "" + +#: templates/js/translated/part.js:418 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:414 +#: templates/js/translated/part.js:420 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:419 +#: templates/js/translated/part.js:425 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:421 +#: templates/js/translated/part.js:427 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:444 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:448 +#: templates/js/translated/part.js:454 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:451 +#: templates/js/translated/part.js:457 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:481 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:503 templates/js/translated/part.js:588 +#: templates/js/translated/part.js:509 templates/js/translated/part.js:594 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:507 templates/js/translated/part.js:592 +#: templates/js/translated/part.js:513 templates/js/translated/part.js:598 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:519 +#: templates/js/translated/part.js:525 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:523 +#: templates/js/translated/part.js:529 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:638 +#: templates/js/translated/part.js:644 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1005 +#: templates/js/translated/part.js:1012 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1029 +#: templates/js/translated/part.js:1036 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1096 templates/js/translated/part.js:1356 +#: templates/js/translated/part.js:1103 templates/js/translated/part.js:1363 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1266 +#: templates/js/translated/part.js:1273 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1289 +#: templates/js/translated/part.js:1296 #: templates/js/translated/table_filters.js:430 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:1380 templates/js/translated/part.js:1552 -#: templates/js/translated/stock.js:2282 +#: templates/js/translated/part.js:1387 templates/js/translated/part.js:1559 +#: templates/js/translated/stock.js:2440 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1396 +#: templates/js/translated/part.js:1403 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1571 templates/js/translated/stock.js:2301 +#: templates/js/translated/part.js:1578 templates/js/translated/stock.js:2459 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:1635 +#: templates/js/translated/part.js:1642 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1649 templates/js/translated/stock.js:2345 +#: templates/js/translated/part.js:1656 templates/js/translated/stock.js:2503 msgid "Path" msgstr "" -#: templates/js/translated/part.js:1693 +#: templates/js/translated/part.js:1700 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1744 templates/js/translated/stock.js:1234 +#: templates/js/translated/part.js:1751 templates/js/translated/stock.js:1242 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1745 templates/js/translated/stock.js:1235 +#: templates/js/translated/part.js:1752 templates/js/translated/stock.js:1243 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:1751 +#: templates/js/translated/part.js:1758 msgid "This test is defined for a parent part" msgstr "Esta prueba está definida para una parte principal" -#: templates/js/translated/part.js:1773 +#: templates/js/translated/part.js:1780 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:1787 +#: templates/js/translated/part.js:1794 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:1812 +#: templates/js/translated/part.js:1819 #, python-brace-format msgid "No ${human_name} information found" msgstr "" -#: templates/js/translated/part.js:1867 +#: templates/js/translated/part.js:1874 #, python-brace-format msgid "Edit ${human_name}" msgstr "" -#: templates/js/translated/part.js:1868 +#: templates/js/translated/part.js:1875 #, python-brace-format msgid "Delete ${human_name}" msgstr "" -#: templates/js/translated/part.js:1969 +#: templates/js/translated/part.js:1976 msgid "Single Price" msgstr "" -#: templates/js/translated/part.js:1988 +#: templates/js/translated/part.js:1995 msgid "Single Price Difference" msgstr "" @@ -8589,340 +8687,344 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:74 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:181 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:93 templates/js/translated/stock.js:175 +#: templates/js/translated/stock.js:94 templates/js/translated/stock.js:183 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:101 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:110 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "Ubicación del stock principal" -#: templates/js/translated/stock.js:146 +#: templates/js/translated/stock.js:154 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:186 +#: templates/js/translated/stock.js:194 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:225 +#: templates/js/translated/stock.js:233 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:231 +#: templates/js/translated/stock.js:239 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:382 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:387 +#: templates/js/translated/stock.js:395 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:420 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:416 templates/js/translated/stock.js:417 +#: templates/js/translated/stock.js:424 templates/js/translated/stock.js:425 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:433 +#: templates/js/translated/stock.js:441 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:453 +#: templates/js/translated/stock.js:461 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:462 +#: templates/js/translated/stock.js:470 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:515 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:526 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:519 +#: templates/js/translated/stock.js:527 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:628 +#: templates/js/translated/stock.js:636 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:629 +#: templates/js/translated/stock.js:637 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:714 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:715 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:709 +#: templates/js/translated/stock.js:717 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:710 +#: templates/js/translated/stock.js:718 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:796 +#: templates/js/translated/stock.js:804 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:797 +#: templates/js/translated/stock.js:805 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:892 +#: templates/js/translated/stock.js:900 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:893 +#: templates/js/translated/stock.js:901 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:899 +#: templates/js/translated/stock.js:907 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:900 +#: templates/js/translated/stock.js:908 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:904 +#: templates/js/translated/stock.js:912 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:905 +#: templates/js/translated/stock.js:913 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:909 +#: templates/js/translated/stock.js:917 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:910 users/models.py:206 +#: templates/js/translated/stock.js:918 users/models.py:208 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:914 templates/stock_table.html:58 +#: templates/js/translated/stock.js:922 templates/stock_table.html:58 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1051 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1201 +#: templates/js/translated/stock.js:1209 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1203 +#: templates/js/translated/stock.js:1211 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1208 +#: templates/js/translated/stock.js:1216 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1230 +#: templates/js/translated/stock.js:1238 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1256 +#: templates/js/translated/stock.js:1264 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1313 +#: templates/js/translated/stock.js:1321 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1428 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1424 +#: templates/js/translated/stock.js:1432 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1432 +#: templates/js/translated/stock.js:1440 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1438 +#: templates/js/translated/stock.js:1446 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1604 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1601 +#: templates/js/translated/stock.js:1609 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1604 +#: templates/js/translated/stock.js:1612 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1608 +#: templates/js/translated/stock.js:1616 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1610 +#: templates/js/translated/stock.js:1618 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1616 +#: templates/js/translated/stock.js:1624 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1618 +#: templates/js/translated/stock.js:1626 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1620 +#: templates/js/translated/stock.js:1628 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1633 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1632 +#: templates/js/translated/stock.js:1640 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1634 +#: templates/js/translated/stock.js:1642 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1636 +#: templates/js/translated/stock.js:1644 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1648 #: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1690 +#: templates/js/translated/stock.js:1698 msgid "Stocktake" msgstr "Inventario" -#: templates/js/translated/stock.js:1763 +#: templates/js/translated/stock.js:1771 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1809 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1822 templates/js/translated/stock.js:1870 +#: templates/js/translated/stock.js:1830 templates/js/translated/stock.js:1878 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1910 +#: templates/js/translated/stock.js:1918 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1937 +#: templates/js/translated/stock.js:1945 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1939 +#: templates/js/translated/stock.js:1947 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:2138 +#: templates/js/translated/stock.js:2146 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2152 +#: templates/js/translated/stock.js:2160 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2153 +#: templates/js/translated/stock.js:2161 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2377 +#: templates/js/translated/stock.js:2340 +msgid "Allocated Quantity" +msgstr "" + +#: templates/js/translated/stock.js:2535 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2399 +#: templates/js/translated/stock.js:2557 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2424 +#: templates/js/translated/stock.js:2582 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2443 +#: templates/js/translated/stock.js:2601 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2462 +#: templates/js/translated/stock.js:2620 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2480 +#: templates/js/translated/stock.js:2638 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2503 +#: templates/js/translated/stock.js:2661 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2511 +#: templates/js/translated/stock.js:2669 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2552 +#: templates/js/translated/stock.js:2710 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2553 +#: templates/js/translated/stock.js:2711 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2604 +#: templates/js/translated/stock.js:2762 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2655 +#: templates/js/translated/stock.js:2813 msgid "Uninstall Stock Item" msgstr "" @@ -9194,11 +9296,11 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:113 +#: templates/navbar.html:114 msgid "Logout" msgstr "" -#: templates/navbar.html:115 +#: templates/navbar.html:116 msgid "Login" msgstr "" @@ -9246,31 +9348,43 @@ msgstr "" msgid "Server is deployed using docker" msgstr "" -#: templates/stats.html:40 -msgid "Server status" +#: templates/stats.html:39 +msgid "Plugin Support" msgstr "" #: templates/stats.html:43 -msgid "Healthy" +msgid "Plugin support enabled" msgstr "" #: templates/stats.html:45 -msgid "Issues detected" +msgid "Plugin support disabled" msgstr "" #: templates/stats.html:52 -msgid "Background Worker" +msgid "Server status" msgstr "" #: templates/stats.html:55 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:57 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:64 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:67 msgid "Background worker not running" msgstr "" -#: templates/stats.html:63 +#: templates/stats.html:75 msgid "Email Settings" msgstr "" -#: templates/stats.html:66 +#: templates/stats.html:78 msgid "Email settings not configured" msgstr "" @@ -9366,35 +9480,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:193 +#: users/models.py:195 msgid "Permission set" msgstr "" -#: users/models.py:201 +#: users/models.py:203 msgid "Group" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "View" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to view items" msgstr "Permiso para ver artículos" -#: users/models.py:206 +#: users/models.py:208 msgid "Permission to add items" msgstr "Permiso para añadir artículos" -#: users/models.py:208 +#: users/models.py:210 msgid "Change" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Permissions to edit items" msgstr "Permisos para editar artículos" -#: users/models.py:210 +#: users/models.py:212 msgid "Permission to delete items" msgstr "Permiso para eliminar artículos" diff --git a/InvenTree/locale/fr/LC_MESSAGES/django.po b/InvenTree/locale/fr/LC_MESSAGES/django.po index f4ab7586e2..85b16f7fea 100644 --- a/InvenTree/locale/fr/LC_MESSAGES/django.po +++ b/InvenTree/locale/fr/LC_MESSAGES/django.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-10 03:54+0000\n" -"PO-Revision-Date: 2022-01-10 03:57\n" +"POT-Creation-Date: 2022-01-29 00:17+0000\n" +"PO-Revision-Date: 2022-01-29 01:10\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -18,15 +18,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 138\n" -#: InvenTree/api.py:64 +#: InvenTree/api.py:55 msgid "API endpoint not found" msgstr "Point de terminaison de l'API introuvable" -#: InvenTree/api.py:110 +#: InvenTree/api.py:101 msgid "No action specified" msgstr "Aucune action spécifiée" -#: InvenTree/api.py:124 +#: InvenTree/api.py:116 msgid "No matching action found" msgstr "Aucune action correspondante trouvée" @@ -80,41 +80,41 @@ msgstr "Confirmation de l'adresse email" msgid "You must type the same email each time." msgstr "Vous devez taper le même e-mail à chaque fois." -#: InvenTree/helpers.py:437 +#: InvenTree/helpers.py:439 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "Dupliquer le numéro de série: {n}" -#: InvenTree/helpers.py:444 order/models.py:279 order/models.py:420 +#: InvenTree/helpers.py:446 order/models.py:282 order/models.py:425 #: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "Quantité fournie invalide" -#: InvenTree/helpers.py:447 +#: InvenTree/helpers.py:449 msgid "Empty serial number string" msgstr "Chaîne de numéro de série vide" -#: InvenTree/helpers.py:469 InvenTree/helpers.py:472 InvenTree/helpers.py:475 -#: InvenTree/helpers.py:500 +#: InvenTree/helpers.py:471 InvenTree/helpers.py:474 InvenTree/helpers.py:477 +#: InvenTree/helpers.py:502 #, python-brace-format msgid "Invalid group: {g}" msgstr "Groupe invalide : {g}" -#: InvenTree/helpers.py:510 +#: InvenTree/helpers.py:512 #, python-brace-format msgid "Invalid group {group}" -msgstr "" +msgstr "Groupe invalide {group}" -#: InvenTree/helpers.py:516 +#: InvenTree/helpers.py:518 #, python-brace-format msgid "Invalid/no group {group}" -msgstr "" +msgstr "Invalide/aucun groupe {group}" -#: InvenTree/helpers.py:522 +#: InvenTree/helpers.py:524 msgid "No serial numbers found" msgstr "Aucun numéro de série trouvé" -#: InvenTree/helpers.py:526 +#: InvenTree/helpers.py:528 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "Le nombre de numéros de série uniques ({s}) doit correspondre à la quantité ({q})" @@ -127,7 +127,7 @@ msgstr "Fichier manquant" msgid "Missing external link" msgstr "Lien externe manquant" -#: InvenTree/models.py:132 stock/models.py:1967 +#: InvenTree/models.py:132 stock/models.py:1995 #: templates/js/translated/attachment.js:119 msgid "Attachment" msgstr "Pièce jointe" @@ -137,15 +137,15 @@ msgid "Select file to attach" msgstr "Sélectionnez un fichier à joindre" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:124 part/models.py:828 +#: company/models.py:564 order/models.py:127 part/models.py:830 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:540 -#: templates/js/translated/company.js:829 templates/js/translated/part.js:1317 +#: templates/js/translated/company.js:829 templates/js/translated/part.js:1324 msgid "Link" msgstr "Lien" -#: InvenTree/models.py:140 build/models.py:330 part/models.py:829 -#: stock/models.py:527 +#: InvenTree/models.py:140 build/models.py:332 part/models.py:831 +#: stock/models.py:529 msgid "Link to external URL" msgstr "Lien vers une url externe" @@ -157,10 +157,11 @@ msgstr "Commentaire" msgid "File comment" msgstr "Commentaire du fichier" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 -#: common/models.py:1214 part/models.py:2258 part/models.py:2278 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1223 +#: common/models.py:1224 common/models.py:1452 common/models.py:1453 +#: part/models.py:2265 part/models.py:2285 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2534 +#: templates/js/translated/stock.js:2692 msgid "User" msgstr "Utilisateur" @@ -197,42 +198,42 @@ msgstr "Erreur lors du renommage du fichier" msgid "Invalid choice" msgstr "Choix invalide" -#: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 -#: label/models.py:112 part/models.py:772 part/models.py:2442 -#: plugin/models.py:40 report/models.py:181 +#: InvenTree/models.py:277 InvenTree/models.py:278 common/models.py:1438 +#: company/models.py:415 label/models.py:112 part/models.py:774 +#: part/models.py:2449 plugin/models.py:40 report/models.py:181 #: templates/InvenTree/settings/mixins/urls.html:13 -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:125 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:279 -#: templates/js/translated/company.js:641 templates/js/translated/part.js:561 -#: templates/js/translated/part.js:700 templates/js/translated/part.js:1624 -#: templates/js/translated/stock.js:2327 +#: templates/InvenTree/settings/settings.html:282 +#: templates/js/translated/company.js:641 templates/js/translated/part.js:567 +#: templates/js/translated/part.js:706 templates/js/translated/part.js:1631 +#: templates/js/translated/stock.js:2485 msgid "Name" msgstr "Nom" -#: InvenTree/models.py:284 build/models.py:207 +#: InvenTree/models.py:284 build/models.py:209 #: build/templates/build/detail.html:25 company/models.py:354 #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:122 part/models.py:795 part/templates/part/category.html:74 +#: order/models.py:125 part/models.py:797 part/templates/part/category.html:74 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 #: stock/templates/stock/location.html:93 #: templates/InvenTree/settings/plugin_settings.html:33 -#: templates/js/translated/bom.js:327 templates/js/translated/bom.js:540 +#: templates/js/translated/bom.js:339 templates/js/translated/bom.js:552 #: templates/js/translated/build.js:1682 templates/js/translated/company.js:345 #: templates/js/translated/company.js:551 #: templates/js/translated/company.js:840 templates/js/translated/order.js:836 #: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 -#: templates/js/translated/part.js:620 templates/js/translated/part.js:992 -#: templates/js/translated/part.js:1077 templates/js/translated/part.js:1247 -#: templates/js/translated/part.js:1643 templates/js/translated/part.js:1712 -#: templates/js/translated/stock.js:1569 templates/js/translated/stock.js:2339 -#: templates/js/translated/stock.js:2384 +#: templates/js/translated/part.js:626 templates/js/translated/part.js:999 +#: templates/js/translated/part.js:1084 templates/js/translated/part.js:1254 +#: templates/js/translated/part.js:1650 templates/js/translated/part.js:1719 +#: templates/js/translated/stock.js:1577 templates/js/translated/stock.js:2314 +#: templates/js/translated/stock.js:2497 templates/js/translated/stock.js:2542 msgid "Description" msgstr "Description" @@ -244,7 +245,7 @@ msgstr "Description (facultative)" msgid "parent" msgstr "parent" -#: InvenTree/serializers.py:65 part/models.py:2727 +#: InvenTree/serializers.py:65 part/models.py:2734 msgid "Must be a valid number" msgstr "Doit être un nombre valide" @@ -252,83 +253,83 @@ msgstr "Doit être un nombre valide" msgid "Filename" msgstr "Nom du fichier" -#: InvenTree/settings.py:663 +#: InvenTree/settings.py:661 msgid "German" msgstr "Allemand" -#: InvenTree/settings.py:664 +#: InvenTree/settings.py:662 msgid "Greek" msgstr "Greek" -#: InvenTree/settings.py:665 +#: InvenTree/settings.py:663 msgid "English" msgstr "Anglais" -#: InvenTree/settings.py:666 +#: InvenTree/settings.py:664 msgid "Spanish" msgstr "Spanish" -#: InvenTree/settings.py:667 +#: InvenTree/settings.py:665 msgid "Spanish (Mexican)" msgstr "Espagnol (Mexique)" -#: InvenTree/settings.py:668 +#: InvenTree/settings.py:666 msgid "French" msgstr "Français" -#: InvenTree/settings.py:669 +#: InvenTree/settings.py:667 msgid "Hebrew" msgstr "Hebrew" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:668 msgid "Italian" msgstr "Italian" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:669 msgid "Japanese" msgstr "Japanese" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:670 msgid "Korean" msgstr "Korean" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:671 msgid "Dutch" msgstr "Dutch" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:672 msgid "Norwegian" msgstr "Norwegian" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:673 msgid "Polish" msgstr "Polonais" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:674 msgid "Portugese" msgstr "Portugais" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:675 msgid "Russian" msgstr "Russian" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:676 msgid "Swedish" msgstr "Swedish" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:677 msgid "Thai" msgstr "Thai" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:678 msgid "Turkish" msgstr "Turc" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:679 msgid "Vietnamese" msgstr "Vietnamese" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:680 msgid "Chinese" msgstr "Chinese" @@ -374,7 +375,7 @@ msgstr "Perdu" msgid "Returned" msgstr "Retourné" -#: InvenTree/status_codes.py:143 order/models.py:941 +#: InvenTree/status_codes.py:143 order/models.py:961 #: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "Expédié" @@ -455,9 +456,9 @@ msgstr "Séparer de l'élément parent" msgid "Split child item" msgstr "Fractionner l'élément enfant" -#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2064 +#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2072 msgid "Merged stock items" -msgstr "" +msgstr "Articles de stock fusionnés" #: InvenTree/status_codes.py:296 templates/js/translated/table_filters.js:213 msgid "Sent to customer" @@ -543,56 +544,56 @@ msgstr "Les mots de passe doivent correspondre" msgid "System Information" msgstr "Informations système" -#: barcodes/api.py:54 barcodes/api.py:151 +#: barcodes/api.py:54 barcodes/api.py:152 msgid "Must provide barcode_data parameter" msgstr "Le paramètre barcode_data doit être fourni" -#: barcodes/api.py:127 +#: barcodes/api.py:128 msgid "No match found for barcode data" msgstr "Aucune correspondance trouvée pour les données du code-barres" -#: barcodes/api.py:129 +#: barcodes/api.py:130 msgid "Match found for barcode data" msgstr "Correspondance trouvée pour les données du code-barres" -#: barcodes/api.py:154 +#: barcodes/api.py:155 msgid "Must provide stockitem parameter" msgstr "Vous devez fournir le paramètre stockitem" -#: barcodes/api.py:161 +#: barcodes/api.py:162 msgid "No matching stock item found" msgstr "Aucun article d'inventaire correspondant trouvé" -#: barcodes/api.py:191 +#: barcodes/api.py:193 msgid "Barcode already matches Stock Item" -msgstr "" +msgstr "Le code-barres correspond déjà à l'objet StockItem" -#: barcodes/api.py:195 +#: barcodes/api.py:197 msgid "Barcode already matches Stock Location" -msgstr "" +msgstr "Le code-barres correspond déjà à l'objet Stock Location" -#: barcodes/api.py:199 +#: barcodes/api.py:201 msgid "Barcode already matches Part" -msgstr "" +msgstr "Le code-barres correspond déjà à l'objet Part" -#: barcodes/api.py:205 barcodes/api.py:217 +#: barcodes/api.py:207 barcodes/api.py:219 msgid "Barcode hash already matches Stock Item" -msgstr "" +msgstr "Le code-barres correspond déjà à l'objet Stock Item" -#: barcodes/api.py:223 +#: barcodes/api.py:225 msgid "Barcode associated with Stock Item" -msgstr "" +msgstr "Code-barres associé à l'article en stock" -#: build/forms.py:36 build/models.py:1286 +#: build/forms.py:36 build/models.py:1293 #: build/templates/build/build_base.html:82 -#: build/templates/build/detail.html:35 common/models.py:1253 +#: build/templates/build/detail.html:35 common/models.py:1263 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/models.py:796 order/models.py:1207 order/serializers.py:810 +#: order/models.py:805 order/models.py:1229 order/serializers.py:816 #: order/templates/order/order_wizard/match_parts.html:30 -#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:145 -#: part/forms.py:161 part/forms.py:177 part/models.py:2629 +#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:144 +#: part/forms.py:160 part/forms.py:176 part/models.py:2636 #: part/templates/part/bom_upload/match_parts.html:31 -#: part/templates/part/detail.html:962 part/templates/part/detail.html:1048 +#: part/templates/part/detail.html:992 part/templates/part/detail.html:1078 #: part/templates/part/part_pricing.html:16 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 @@ -603,7 +604,7 @@ msgstr "" #: stock/templates/stock/item_base.html:181 #: stock/templates/stock/item_base.html:262 #: stock/templates/stock/item_base.html:270 -#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:555 +#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:567 #: templates/js/translated/build.js:295 templates/js/translated/build.js:495 #: templates/js/translated/build.js:689 templates/js/translated/build.js:699 #: templates/js/translated/build.js:1075 templates/js/translated/build.js:1422 @@ -611,11 +612,11 @@ msgstr "" #: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 #: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 #: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 -#: templates/js/translated/order.js:2150 templates/js/translated/part.js:900 -#: templates/js/translated/part.js:1855 templates/js/translated/part.js:1978 -#: templates/js/translated/part.js:2056 templates/js/translated/stock.js:383 -#: templates/js/translated/stock.js:580 templates/js/translated/stock.js:750 -#: templates/js/translated/stock.js:2519 templates/js/translated/stock.js:2621 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:906 +#: templates/js/translated/part.js:1862 templates/js/translated/part.js:1985 +#: templates/js/translated/part.js:2063 templates/js/translated/stock.js:391 +#: templates/js/translated/stock.js:588 templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2779 msgid "Quantity" msgstr "Quantité" @@ -623,9 +624,9 @@ msgstr "Quantité" msgid "Enter quantity for build output" msgstr "Entrer la quantité désiré pour la fabrication" -#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 -#: stock/serializers.py:314 templates/js/translated/stock.js:230 -#: templates/js/translated/stock.js:384 +#: build/forms.py:41 order/serializers.py:820 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:238 +#: templates/js/translated/stock.js:392 msgid "Serial Numbers" msgstr "Numéros de série" @@ -649,18 +650,18 @@ msgstr "Confirmer l'annulation" msgid "Confirm build cancellation" msgstr "Confirmer l'annulation de la fabrication" -#: build/models.py:133 +#: build/models.py:135 msgid "Invalid choice for parent build" msgstr "Choix invalide pour la fabrication parente" -#: build/models.py:137 build/templates/build/build_base.html:9 +#: build/models.py:139 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:457 +#: templates/js/translated/build.js:457 templates/js/translated/stock.js:2290 msgid "Build Order" msgstr "Ordre de Fabrication" -#: build/models.py:138 build/templates/build/build_base.html:13 +#: build/models.py:140 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:92 #: order/templates/order/so_sidebar.html:13 @@ -670,40 +671,40 @@ msgstr "Ordre de Fabrication" msgid "Build Orders" msgstr "Ordres de Fabrication" -#: build/models.py:198 +#: build/models.py:200 msgid "Build Order Reference" msgstr "Référence de l' Ordre de Fabrication" -#: build/models.py:199 order/models.py:210 order/models.py:536 -#: order/models.py:803 part/models.py:2638 +#: build/models.py:201 order/models.py:213 order/models.py:541 +#: order/models.py:812 part/models.py:2645 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:547 templates/js/translated/build.js:1179 +#: templates/js/translated/bom.js:559 templates/js/translated/build.js:1179 #: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "Référence" -#: build/models.py:210 +#: build/models.py:212 msgid "Brief description of the build" msgstr "Brève description de la fabrication" -#: build/models.py:219 build/templates/build/build_base.html:164 +#: build/models.py:221 build/templates/build/build_base.html:164 #: build/templates/build/detail.html:88 msgid "Parent Build" msgstr "Fabrication parente" -#: build/models.py:220 +#: build/models.py:222 msgid "BuildOrder to which this build is allocated" msgstr "BuildOrder associé a cette fabrication" -#: build/models.py:225 build/templates/build/build_base.html:77 +#: build/models.py:227 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:856 order/models.py:930 -#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 -#: part/models.py:2204 part/models.py:2220 part/models.py:2239 -#: part/models.py:2256 part/models.py:2358 part/models.py:2480 -#: part/models.py:2613 part/models.py:2920 part/serializers.py:658 +#: order/models.py:876 order/models.py:950 +#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:359 +#: part/models.py:2211 part/models.py:2227 part/models.py:2246 +#: part/models.py:2263 part/models.py:2365 part/models.py:2487 +#: part/models.py:2620 part/models.py:2927 part/serializers.py:658 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/set_category.html:13 @@ -713,205 +714,205 @@ msgstr "BuildOrder associé a cette fabrication" #: templates/InvenTree/search.html:80 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 -#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:326 -#: templates/js/translated/bom.js:505 templates/js/translated/build.js:680 +#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:338 +#: templates/js/translated/bom.js:517 templates/js/translated/build.js:680 #: templates/js/translated/build.js:1048 templates/js/translated/build.js:1419 #: templates/js/translated/build.js:1687 templates/js/translated/company.js:492 #: templates/js/translated/company.js:749 templates/js/translated/order.js:84 #: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 #: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 -#: templates/js/translated/order.js:2128 templates/js/translated/part.js:977 -#: templates/js/translated/part.js:1058 templates/js/translated/part.js:1225 -#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:719 -#: templates/js/translated/stock.js:926 templates/js/translated/stock.js:1526 -#: templates/js/translated/stock.js:2609 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:984 +#: templates/js/translated/part.js:1065 templates/js/translated/part.js:1232 +#: templates/js/translated/stock.js:562 templates/js/translated/stock.js:727 +#: templates/js/translated/stock.js:934 templates/js/translated/stock.js:1534 +#: templates/js/translated/stock.js:2767 msgid "Part" msgstr "Pièce" -#: build/models.py:233 +#: build/models.py:235 msgid "Select part to build" msgstr "Sélectionnez la pièce à construire" -#: build/models.py:238 +#: build/models.py:240 msgid "Sales Order Reference" msgstr "Bon de commande de référence" -#: build/models.py:242 +#: build/models.py:244 msgid "SalesOrder to which this build is allocated" -msgstr "" +msgstr "Commande de vente à laquelle cette construction est allouée" -#: build/models.py:247 templates/js/translated/build.js:1407 +#: build/models.py:249 templates/js/translated/build.js:1407 #: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "Emplacement d'origine" -#: build/models.py:251 +#: build/models.py:253 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" -msgstr "" +msgstr "Sélectionner l'emplacement à partir duquel le stock doit être pris pour cette construction (laisser vide pour prendre à partir de n'importe quel emplacement de stock)" -#: build/models.py:256 +#: build/models.py:258 msgid "Destination Location" msgstr "Emplacement cible" -#: build/models.py:260 +#: build/models.py:262 msgid "Select location where the completed items will be stored" msgstr "Sélectionnez l'emplacement où les éléments complétés seront stockés" -#: build/models.py:264 +#: build/models.py:266 msgid "Build Quantity" msgstr "Quantité a fabriquer" -#: build/models.py:267 +#: build/models.py:269 msgid "Number of stock items to build" -msgstr "" - -#: build/models.py:271 -msgid "Completed items" -msgstr "" +msgstr "Nombre de stock items à construire" #: build/models.py:273 +msgid "Completed items" +msgstr "Articles terminés" + +#: build/models.py:275 msgid "Number of stock items which have been completed" -msgstr "" +msgstr "Nombre d'articles de stock qui ont été terminés" -#: build/models.py:277 part/templates/part/part_base.html:234 +#: build/models.py:279 part/templates/part/part_base.html:234 msgid "Build Status" -msgstr "" +msgstr "État de la construction" -#: build/models.py:281 +#: build/models.py:283 msgid "Build status code" -msgstr "" +msgstr "Code de statut de construction" -#: build/models.py:285 stock/models.py:531 +#: build/models.py:287 stock/models.py:533 msgid "Batch Code" -msgstr "" +msgstr "Code de lot" -#: build/models.py:289 +#: build/models.py:291 msgid "Batch code for this build output" -msgstr "" +msgstr "Code de lot pour ce build output" -#: build/models.py:292 order/models.py:126 part/models.py:967 +#: build/models.py:294 order/models.py:129 part/models.py:969 #: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "Date de création" -#: build/models.py:296 order/models.py:558 +#: build/models.py:298 order/models.py:563 msgid "Target completion date" -msgstr "" +msgstr "Date d'achèvement cible" -#: build/models.py:297 +#: build/models.py:299 msgid "Target date for build completion. Build will be overdue after this date." -msgstr "" +msgstr "Date cible pour l'achèvement de la construction. La construction sera en retard après cette date." -#: build/models.py:300 order/models.py:252 +#: build/models.py:302 order/models.py:255 #: templates/js/translated/build.js:1758 msgid "Completion Date" -msgstr "" +msgstr "Date d'achèvement" -#: build/models.py:306 +#: build/models.py:308 msgid "completed by" -msgstr "" +msgstr "achevé par" -#: build/models.py:314 templates/js/translated/build.js:1729 +#: build/models.py:316 templates/js/translated/build.js:1729 msgid "Issued by" -msgstr "" +msgstr "Émis par" -#: build/models.py:315 +#: build/models.py:317 msgid "User who issued this build order" -msgstr "" +msgstr "Utilisateur ayant émis cette commande de construction" -#: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:140 +#: build/models.py:325 build/templates/build/build_base.html:185 +#: build/templates/build/detail.html:116 order/models.py:143 #: order/templates/order/order_base.html:170 -#: order/templates/order/sales_order_base.html:182 part/models.py:971 +#: order/templates/order/sales_order_base.html:182 part/models.py:973 #: report/templates/report/inventree_build_order_base.html:159 #: templates/js/translated/build.js:1741 templates/js/translated/order.js:864 msgid "Responsible" -msgstr "" +msgstr "Responsable" -#: build/models.py:324 +#: build/models.py:326 msgid "User responsible for this build order" -msgstr "" +msgstr "Utilisateur responsable de cette commande de construction" -#: build/models.py:329 build/templates/build/detail.html:102 +#: build/models.py:331 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:525 +#: part/templates/part/part_base.html:354 stock/models.py:527 #: stock/templates/stock/item_base.html:373 msgid "External Link" msgstr "Lien Externe" -#: build/models.py:334 build/serializers.py:201 +#: build/models.py:336 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:144 order/models.py:805 order/models.py:1051 +#: order/models.py:147 order/models.py:814 order/models.py:1071 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/models.py:956 -#: part/templates/part/detail.html:120 part/templates/part/part_sidebar.html:50 +#: order/templates/order/so_sidebar.html:17 part/models.py:958 +#: part/templates/part/detail.html:137 part/templates/part/part_sidebar.html:54 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:597 -#: stock/models.py:1867 stock/models.py:1973 stock/serializers.py:332 -#: stock/serializers.py:639 stock/serializers.py:737 stock/serializers.py:869 -#: stock/templates/stock/stock_sidebar.html:21 -#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:711 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:599 +#: stock/models.py:1895 stock/models.py:2001 stock/serializers.py:332 +#: stock/serializers.py:640 stock/serializers.py:738 stock/serializers.py:870 +#: stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:723 #: templates/js/translated/company.js:845 templates/js/translated/order.js:1149 #: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 -#: templates/js/translated/stock.js:1309 templates/js/translated/stock.js:1795 +#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1803 msgid "Notes" msgstr "Notes" -#: build/models.py:335 +#: build/models.py:337 msgid "Extra build notes" -msgstr "" +msgstr "Notes de construction supplémentaires" -#: build/models.py:710 +#: build/models.py:717 msgid "No build output specified" msgstr "" -#: build/models.py:713 +#: build/models.py:720 msgid "Build output is already completed" msgstr "" -#: build/models.py:716 +#: build/models.py:723 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1108 +#: build/models.py:1115 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "L'élément de construction doit spécifier une sortie de construction, la pièce maîtresse étant marquée comme objet traçable" -#: build/models.py:1117 +#: build/models.py:1124 #, python-brace-format msgid "Allocated quantity ({q}) must not execed available stock quantity ({a})" -msgstr "" +msgstr "La quantité allouée ({q}) ne doit pas excéder la quantité disponible ({a})" -#: build/models.py:1127 +#: build/models.py:1134 msgid "Stock item is over-allocated" -msgstr "" +msgstr "L'article de stock est suralloué" -#: build/models.py:1133 order/models.py:1167 +#: build/models.py:1140 order/models.py:1189 msgid "Allocation quantity must be greater than zero" -msgstr "" +msgstr "La quantité allouée doit être supérieure à zéro" -#: build/models.py:1139 +#: build/models.py:1146 msgid "Quantity must be 1 for serialized stock" -msgstr "" +msgstr "La quantité doit être de 1 pour stock sérialisé" -#: build/models.py:1196 +#: build/models.py:1203 msgid "Selected stock item not found in BOM" -msgstr "" +msgstr "L'article du stock sélectionné n'a pas été trouvé dans la BOM" -#: build/models.py:1256 stock/templates/stock/item_base.html:345 +#: build/models.py:1263 stock/templates/stock/item_base.html:345 #: templates/InvenTree/search.html:137 templates/js/translated/build.js:1660 #: templates/navbar.html:35 msgid "Build" msgstr "Assemblage" -#: build/models.py:1257 +#: build/models.py:1264 msgid "Build to allocate parts" -msgstr "" +msgstr "Construction à laquelle allouer des pièces" -#: build/models.py:1273 build/serializers.py:388 order/serializers.py:690 -#: order/serializers.py:708 stock/serializers.py:577 stock/serializers.py:695 +#: build/models.py:1280 build/serializers.py:388 order/serializers.py:696 +#: order/serializers.py:714 stock/serializers.py:578 stock/serializers.py:696 #: stock/templates/stock/item_base.html:9 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:367 @@ -920,24 +921,24 @@ msgstr "" #: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 #: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 #: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 -#: templates/js/translated/stock.js:555 templates/js/translated/stock.js:720 -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:563 templates/js/translated/stock.js:728 +#: templates/js/translated/stock.js:2628 msgid "Stock Item" msgstr "Article en stock" -#: build/models.py:1274 +#: build/models.py:1281 msgid "Source stock item" msgstr "" -#: build/models.py:1287 +#: build/models.py:1294 msgid "Stock quantity to allocate to build" -msgstr "" +msgstr "Quantité de stock à allouer à la construction" -#: build/models.py:1295 +#: build/models.py:1302 msgid "Install into" msgstr "Installer dans" -#: build/models.py:1296 +#: build/models.py:1303 msgid "Destination stock item" msgstr "" @@ -962,16 +963,16 @@ msgid "This build output is not fully allocated" msgstr "" #: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 -#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:730 -#: stock/serializers.py:971 stock/templates/stock/item_base.html:313 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:731 +#: stock/serializers.py:972 stock/templates/stock/item_base.html:313 #: templates/js/translated/barcode.js:384 #: templates/js/translated/barcode.js:557 templates/js/translated/build.js:480 #: templates/js/translated/build.js:1087 templates/js/translated/order.js:508 #: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 #: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 -#: templates/js/translated/part.js:179 templates/js/translated/stock.js:556 -#: templates/js/translated/stock.js:721 templates/js/translated/stock.js:928 -#: templates/js/translated/stock.js:1676 templates/js/translated/stock.js:2411 +#: templates/js/translated/part.js:179 templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:729 templates/js/translated/stock.js:936 +#: templates/js/translated/stock.js:1684 templates/js/translated/stock.js:2569 msgid "Location" msgstr "Emplacement" @@ -980,12 +981,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:552 +#: build/templates/build/detail.html:63 order/models.py:557 #: order/serializers.py:247 stock/templates/stock/item_base.html:187 #: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1716 #: templates/js/translated/order.js:591 templates/js/translated/order.js:840 -#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1651 -#: templates/js/translated/stock.js:2488 templates/js/translated/stock.js:2637 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1659 +#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2795 msgid "Status" msgstr "État" @@ -1021,8 +1022,8 @@ msgstr "" msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:313 build/serializers.py:362 part/models.py:2753 -#: part/models.py:2912 +#: build/serializers.py:313 build/serializers.py:362 part/models.py:2760 +#: part/models.py:2919 msgid "BOM Item" msgstr "" @@ -1038,16 +1039,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:394 stock/serializers.py:584 +#: build/serializers.py:394 stock/serializers.py:585 msgid "Item must be in stock" msgstr "L'article doit être en stock" -#: build/serializers.py:408 order/models.py:277 order/serializers.py:240 -#: stock/models.py:365 stock/models.py:1077 stock/serializers.py:305 +#: build/serializers.py:408 order/models.py:280 order/serializers.py:240 +#: stock/models.py:367 stock/models.py:1105 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "La quantité doit être supérieure à zéro" -#: build/serializers.py:450 order/serializers.py:741 +#: build/serializers.py:450 order/serializers.py:747 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantité disponible ({q}) dépassée" @@ -1060,13 +1061,13 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:491 order/serializers.py:984 +#: build/serializers.py:491 order/serializers.py:990 msgid "Allocation items must be provided" msgstr "" #: build/tasks.py:92 msgid "Stock required for build order" -msgstr "" +msgstr "Stock requis pour la commande de construction" #: build/templates/build/build_base.html:39 #: order/templates/order/order_base.html:28 @@ -1076,11 +1077,11 @@ msgstr "Actions d'impression" #: build/templates/build/build_base.html:43 msgid "Print build order report" -msgstr "" +msgstr "Imprimer le rapport d'ordre de construction" #: build/templates/build/build_base.html:50 msgid "Build actions" -msgstr "" +msgstr "Modifier construction/ordre de construction" #: build/templates/build/build_base.html:54 msgid "Edit Build" @@ -1102,33 +1103,33 @@ msgstr "Compléter l'assemblage" #: build/templates/build/build_base.html:87 msgid "Build Description" -msgstr "" +msgstr "Description de la construction" #: build/templates/build/build_base.html:96 #, python-format msgid "This Build Order is allocated to Sales Order %(link)s" -msgstr "" +msgstr "Cet ordre de construction est allouée à la commande de vente %(link)s" #: build/templates/build/build_base.html:103 #, python-format msgid "This Build Order is a child of Build Order %(link)s" -msgstr "" +msgstr "Cet ordre de construction est un enfant de l'ordre de construction %(link)s" #: build/templates/build/build_base.html:110 msgid "Build Order is ready to mark as completed" -msgstr "" +msgstr "L'ordre de construction est prêt à être marqué comme terminé" #: build/templates/build/build_base.html:115 msgid "Build Order cannot be completed as outstanding outputs remain" -msgstr "" +msgstr "L'ordre de construction ne peut pas être achevé car il reste des outputs en suspens" #: build/templates/build/build_base.html:120 msgid "Required build quantity has not yet been completed" -msgstr "" +msgstr "Le nombre de constructions requis n'a pas encore été atteint" #: build/templates/build/build_base.html:125 msgid "Stock has not been fully allocated to this Build Order" -msgstr "" +msgstr "Le stock n'a pas été entièrement alloué à cet ordre de construction" #: build/templates/build/build_base.html:146 #: build/templates/build/detail.html:132 @@ -1143,7 +1144,7 @@ msgstr "Date Cible" #: build/templates/build/build_base.html:151 #, python-format msgid "This build was due on %(target)s" -msgstr "" +msgstr "Cette construction était due le %(target)s" #: build/templates/build/build_base.html:151 #: build/templates/build/build_base.html:196 @@ -1164,13 +1165,13 @@ msgid "Completed" msgstr "Terminé" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:927 -#: order/models.py:1023 order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:947 +#: order/models.py:1043 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:307 -#: templates/js/translated/order.js:1218 +#: templates/js/translated/order.js:1218 templates/js/translated/stock.js:2304 msgid "Sales Order" msgstr "Commandes" @@ -1178,7 +1179,7 @@ msgstr "Commandes" #: build/templates/build/detail.html:109 #: report/templates/report/inventree_build_order_base.html:153 msgid "Issued By" -msgstr "" +msgstr "Émis par" #: build/templates/build/build_base.html:223 msgid "Incomplete Outputs" @@ -1186,7 +1187,7 @@ msgstr "" #: build/templates/build/build_base.html:224 msgid "Build Order cannot be completed as incomplete build outputs remain" -msgstr "" +msgstr "L'ordre de fabrication ne peut pas être achevé car il reste des outputs en suspens" #: build/templates/build/build_output_create.html:7 msgid "The Bill of Materials contains trackable parts" @@ -1202,7 +1203,7 @@ msgstr "" #: build/templates/build/build_output_create.html:15 msgid "Trackable parts can have serial numbers specified" -msgstr "" +msgstr "Les pièces traçables peuvent avoir des numéros de série spécifiés" #: build/templates/build/build_output_create.html:16 msgid "Enter serial numbers to generate multiple single build outputs" @@ -1210,11 +1211,11 @@ msgstr "" #: build/templates/build/cancel.html:5 msgid "Are you sure you wish to cancel this build?" -msgstr "" +msgstr "Êtes-vous sûr de vouloir annuler cette construction?" #: build/templates/build/detail.html:16 msgid "Build Details" -msgstr "" +msgstr "Détails de la construction" #: build/templates/build/detail.html:39 msgid "Stock Source" @@ -1224,7 +1225,7 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:878 stock/forms.py:136 +#: build/templates/build/detail.html:50 order/models.py:898 stock/forms.py:136 #: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "Destination" @@ -1235,11 +1236,11 @@ msgstr "" #: build/templates/build/detail.html:74 templates/js/translated/build.js:707 msgid "Allocated Parts" -msgstr "" +msgstr "Pièces allouées" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:331 -#: templates/js/translated/stock.js:1665 templates/js/translated/stock.js:2644 +#: templates/js/translated/stock.js:1673 templates/js/translated/stock.js:2802 #: templates/js/translated/table_filters.js:151 #: templates/js/translated/table_filters.js:238 msgid "Batch" @@ -1270,19 +1271,19 @@ msgstr "" #: build/templates/build/detail.html:177 templates/js/translated/build.js:1262 msgid "Unallocate stock" -msgstr "" +msgstr "Désallouer le stock" #: build/templates/build/detail.html:178 msgid "Unallocate Stock" -msgstr "" +msgstr "Désallouer le stock" #: build/templates/build/detail.html:180 msgid "Allocate stock to build" -msgstr "" +msgstr "Allouer le stock à une construction" #: build/templates/build/detail.html:181 build/templates/build/sidebar.html:8 msgid "Allocate Stock" -msgstr "" +msgstr "Allouer le stock" #: build/templates/build/detail.html:184 msgid "Order required parts" @@ -1297,19 +1298,19 @@ msgstr "Commander des pièces" #: build/templates/build/detail.html:197 msgid "Untracked stock has been fully allocated for this Build Order" -msgstr "" +msgstr "Le stock non suivi a été entièrement alloué pour cet ordre de construction" #: build/templates/build/detail.html:201 msgid "Untracked stock has not been fully allocated for this Build Order" -msgstr "" +msgstr "Du stock non suivi n'a pas été entièrement alloué pour cet ordre de construction" #: build/templates/build/detail.html:208 msgid "Allocate selected items" -msgstr "" +msgstr "Allouer les éléments sélectionnés" #: build/templates/build/detail.html:218 msgid "This Build Order does not have any associated untracked BOM items" -msgstr "" +msgstr "Cet ordre de construction n'a aucun objet de BOM non suivi associé" #: build/templates/build/detail.html:227 msgid "Incomplete Build Outputs" @@ -1343,15 +1344,15 @@ msgstr "" #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 #: order/templates/order/sales_order_detail.html:107 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:196 -#: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 -#: stock/templates/stock/stock_sidebar.html:19 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:213 +#: part/templates/part/part_sidebar.html:52 stock/templates/stock/item.html:112 +#: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Pieces jointes" #: build/templates/build/detail.html:294 msgid "Build Notes" -msgstr "" +msgstr "Notes de construction" #: build/templates/build/detail.html:298 build/templates/build/detail.html:453 #: company/templates/company/detail.html:188 @@ -1360,38 +1361,38 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:108 #: order/templates/order/sales_order_detail.html:127 #: order/templates/order/sales_order_detail.html:186 -#: part/templates/part/detail.html:124 stock/templates/stock/item.html:115 -#: stock/templates/stock/item.html:205 +#: part/templates/part/detail.html:141 stock/templates/stock/item.html:132 +#: stock/templates/stock/item.html:235 msgid "Edit Notes" msgstr "Modifier les notes" #: build/templates/build/detail.html:477 msgid "Allocation Complete" -msgstr "" +msgstr "Allocation terminée" #: build/templates/build/detail.html:478 msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:303 +#: build/templates/build/index.html:18 part/templates/part/detail.html:320 msgid "New Build Order" -msgstr "" +msgstr "Nouvel ordre de construction" #: build/templates/build/index.html:37 build/templates/build/index.html:38 msgid "Print Build Orders" -msgstr "" +msgstr "Imprimer les commandes de construction" #: build/templates/build/index.html:44 #: order/templates/order/purchase_orders.html:34 #: order/templates/order/sales_orders.html:37 msgid "Display calendar view" -msgstr "" +msgstr "Affichage du calendrier" #: build/templates/build/index.html:47 #: order/templates/order/purchase_orders.html:37 #: order/templates/order/sales_orders.html:40 msgid "Display list view" -msgstr "" +msgstr "Affichage en liste" #: build/templates/build/sidebar.html:5 msgid "Build Order Details" @@ -1403,11 +1404,11 @@ msgstr "Articles en attente" #: build/templates/build/sidebar.html:15 msgid "Completed Items" -msgstr "" +msgstr "Articles terminés" #: build/views.py:76 msgid "Build was cancelled" -msgstr "" +msgstr "La construction a été annulée" #: build/views.py:88 msgid "Create Build Output" @@ -1419,7 +1420,7 @@ msgstr "La quantité maximale de sortie est " #: build/views.py:122 stock/serializers.py:363 stock/views.py:1257 msgid "Serial numbers already exist" -msgstr "" +msgstr "Les numéros de série existent déjà" #: build/views.py:131 msgid "Serial numbers required for trackable build output" @@ -1435,7 +1436,7 @@ msgstr "" #: build/views.py:219 stock/views.py:352 msgid "Check the confirmation box" -msgstr "" +msgstr "Cocher la case de confirmation" #: build/views.py:231 msgid "Build output does not match build" @@ -1451,27 +1452,27 @@ msgstr "" #: build/views.py:286 msgid "Delete Build Order" -msgstr "" +msgstr "Supprimer l'ordre de construction" -#: common/files.py:67 +#: common/files.py:65 msgid "Unsupported file format: {ext.upper()}" msgstr "Format de fichier non pris en charge : {ext.upper()}" -#: common/files.py:69 +#: common/files.py:67 msgid "Error reading file (invalid encoding)" -msgstr "" +msgstr "Erreur de lecture du fichier (encodage invalide)" + +#: common/files.py:72 +msgid "Error reading file (invalid format)" +msgstr "Erreur de lecture du fichier (format invalide)" #: common/files.py:74 -msgid "Error reading file (invalid format)" -msgstr "" +msgid "Error reading file (incorrect dimension)" +msgstr "Erreur de lecture du fichier (dimension incorrecte)" #: common/files.py:76 -msgid "Error reading file (incorrect dimension)" -msgstr "" - -#: common/files.py:78 msgid "Error reading file (data could be corrupted)" -msgstr "" +msgstr "Erreur de lecture du fichier (les données pourraient être corrompues)" #: common/forms.py:34 msgid "File" @@ -1488,742 +1489,830 @@ msgstr "{name.title()} Fichier" #: common/forms.py:51 #, python-brace-format msgid "Select {name} file to upload" +msgstr "Sélectionner le fichier {name} à uploader" + +#: common/models.py:352 +msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:344 common/models.py:998 common/models.py:1206 -msgid "Settings key (must be unique - case insensitive" -msgstr "" - -#: common/models.py:346 +#: common/models.py:354 msgid "Settings value" -msgstr "" +msgstr "Valeur du paramètre" -#: common/models.py:380 +#: common/models.py:388 msgid "Chosen value is not a valid option" -msgstr "" +msgstr "La valeur choisie n'est pas une option valide" -#: common/models.py:400 +#: common/models.py:408 msgid "Value must be a boolean value" -msgstr "" +msgstr "La valeur doit être une valeur booléenne" -#: common/models.py:411 +#: common/models.py:419 msgid "Value must be an integer value" -msgstr "" +msgstr "La valeur doit être un nombre entier" -#: common/models.py:434 +#: common/models.py:442 msgid "Key string must be unique" -msgstr "" +msgstr "La chaîne de caractères constituant la clé doit être unique" -#: common/models.py:553 +#: common/models.py:561 msgid "No group" msgstr "Pas de groupe" -#: common/models.py:595 +#: common/models.py:603 msgid "Restart required" msgstr "Redémarrage nécessaire" -#: common/models.py:596 +#: common/models.py:604 msgid "A setting has been changed which requires a server restart" -msgstr "" +msgstr "Un paramètre a été modifié, ce qui nécessite un redémarrage du serveur" -#: common/models.py:603 +#: common/models.py:611 msgid "InvenTree Instance Name" -msgstr "" +msgstr "Nom de l'instance InvenTree" -#: common/models.py:605 +#: common/models.py:613 msgid "String descriptor for the server instance" -msgstr "" +msgstr "Chaîne de caractères descriptive pour l'instance serveur" -#: common/models.py:609 +#: common/models.py:617 msgid "Use instance name" -msgstr "" +msgstr "Utiliser le nom de l'instance" -#: common/models.py:610 +#: common/models.py:618 msgid "Use the instance name in the title-bar" -msgstr "" +msgstr "Utiliser le nom de l’instance dans la barre de titre" -#: common/models.py:616 company/models.py:100 company/models.py:101 +#: common/models.py:624 company/models.py:100 company/models.py:101 msgid "Company name" msgstr "Nom de la société" -#: common/models.py:617 +#: common/models.py:625 msgid "Internal company name" -msgstr "" +msgstr "Nom de société interne" -#: common/models.py:622 +#: common/models.py:630 msgid "Base URL" -msgstr "" +msgstr "URL de base" -#: common/models.py:623 +#: common/models.py:631 msgid "Base URL for server instance" -msgstr "" +msgstr "URL de base pour l'instance serveur" -#: common/models.py:629 +#: common/models.py:637 msgid "Default Currency" msgstr "Devise par défaut" -#: common/models.py:630 +#: common/models.py:638 msgid "Default currency" msgstr "Devises par défaut" -#: common/models.py:636 +#: common/models.py:644 msgid "Download from URL" msgstr "Télécharger depuis l'URL" -#: common/models.py:637 +#: common/models.py:645 msgid "Allow download of remote images and files from external URL" -msgstr "" +msgstr "Autoriser le téléchargement d'images distantes et de fichiers à partir d'URLs externes" -#: common/models.py:643 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:651 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" -msgstr "" +msgstr "Support des code-barres" -#: common/models.py:644 +#: common/models.py:652 msgid "Enable barcode scanner support" -msgstr "" +msgstr "Activer le support du scanner de code-barres" -#: common/models.py:650 +#: common/models.py:658 msgid "IPN Regex" msgstr "Regex IPN" -#: common/models.py:651 +#: common/models.py:659 msgid "Regular expression pattern for matching Part IPN" msgstr "Expression régulière pour la correspondance avec l'IPN de la Pièce" -#: common/models.py:655 +#: common/models.py:663 msgid "Allow Duplicate IPN" msgstr "Autoriser les IPN dupliqués" -#: common/models.py:656 +#: common/models.py:664 msgid "Allow multiple parts to share the same IPN" msgstr "Permettre à plusieurs pièces de partager le même IPN" -#: common/models.py:662 +#: common/models.py:670 msgid "Allow Editing IPN" msgstr "Autoriser l'édition de l'IPN" -#: common/models.py:663 +#: common/models.py:671 msgid "Allow changing the IPN value while editing a part" msgstr "Permettre de modifier la valeur de l'IPN lors de l'édition d'une pièce" -#: common/models.py:669 +#: common/models.py:677 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:670 +#: common/models.py:678 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:676 -msgid "Copy Part Parameter Data" -msgstr "" - -#: common/models.py:677 -msgid "Copy parameter data by default when duplicating a part" -msgstr "" - -#: common/models.py:683 -msgid "Copy Part Test Data" -msgstr "" - #: common/models.py:684 -msgid "Copy test data by default when duplicating a part" -msgstr "" +msgid "Copy Part Parameter Data" +msgstr "Copier les données des paramètres de la pièce" -#: common/models.py:690 -msgid "Copy Category Parameter Templates" -msgstr "" +#: common/models.py:685 +msgid "Copy parameter data by default when duplicating a part" +msgstr "Copier les données des paramètres par défaut lors de la duplication d'une pièce" #: common/models.py:691 -msgid "Copy category parameter templates when creating a part" -msgstr "" +msgid "Copy Part Test Data" +msgstr "Copier les données de test de la pièce" -#: common/models.py:697 part/models.py:2482 report/models.py:187 +#: common/models.py:692 +msgid "Copy test data by default when duplicating a part" +msgstr "Copier les données de test par défaut lors de la duplication d'une pièce" + +#: common/models.py:698 +msgid "Copy Category Parameter Templates" +msgstr "Copier les templates de paramètres de catégorie" + +#: common/models.py:699 +msgid "Copy category parameter templates when creating a part" +msgstr "Copier les templates de paramètres de la catégorie lors de la création d'une pièce" + +#: common/models.py:705 part/models.py:2489 report/models.py:187 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:422 msgid "Template" -msgstr "" +msgstr "Template" -#: common/models.py:698 +#: common/models.py:706 msgid "Parts are templates by default" -msgstr "" +msgstr "Les pièces sont des templates par défaut" -#: common/models.py:704 part/models.py:919 templates/js/translated/bom.js:1068 +#: common/models.py:712 part/models.py:921 templates/js/translated/bom.js:1082 #: templates/js/translated/table_filters.js:168 #: templates/js/translated/table_filters.js:434 msgid "Assembly" msgstr "" -#: common/models.py:705 +#: common/models.py:713 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:711 part/models.py:925 +#: common/models.py:719 part/models.py:927 #: templates/js/translated/table_filters.js:438 msgid "Component" msgstr "Composant" -#: common/models.py:712 +#: common/models.py:720 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:718 part/models.py:936 +#: common/models.py:726 part/models.py:938 msgid "Purchaseable" msgstr "Achetable" -#: common/models.py:719 +#: common/models.py:727 msgid "Parts are purchaseable by default" msgstr "Les pièces sont achetables par défaut" -#: common/models.py:725 part/models.py:941 +#: common/models.py:733 part/models.py:943 #: templates/js/translated/table_filters.js:446 msgid "Salable" -msgstr "" +msgstr "Vendable" -#: common/models.py:726 +#: common/models.py:734 msgid "Parts are salable by default" -msgstr "" +msgstr "Les pièces sont vendables par défaut" -#: common/models.py:732 part/models.py:931 +#: common/models.py:740 part/models.py:933 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 #: templates/js/translated/table_filters.js:450 msgid "Trackable" -msgstr "" +msgstr "Traçable" -#: common/models.py:733 +#: common/models.py:741 msgid "Parts are trackable by default" -msgstr "" +msgstr "Les pièces sont traçables par défaut" -#: common/models.py:739 part/models.py:951 +#: common/models.py:747 part/models.py:953 #: part/templates/part/part_base.html:147 #: templates/js/translated/table_filters.js:42 msgid "Virtual" -msgstr "" +msgstr "Virtuelle" -#: common/models.py:740 +#: common/models.py:748 msgid "Parts are virtual by default" -msgstr "" +msgstr "Les pièces sont virtuelles par défaut" -#: common/models.py:746 +#: common/models.py:754 msgid "Show Import in Views" -msgstr "" +msgstr "Afficher l'import dans les vues" -#: common/models.py:747 +#: common/models.py:755 msgid "Display the import wizard in some part views" msgstr "Afficher l'assistant d'importation pour certaine vues de produits" -#: common/models.py:753 +#: common/models.py:761 msgid "Show Price in Forms" -msgstr "" +msgstr "Afficher le prix dans les formulaires" -#: common/models.py:754 +#: common/models.py:762 msgid "Display part price in some forms" -msgstr "" - -#: common/models.py:765 -msgid "Show Price in BOM" -msgstr "" - -#: common/models.py:766 -msgid "Include pricing information in BOM tables" -msgstr "" - -#: common/models.py:772 -msgid "Show related parts" -msgstr "" +msgstr "Afficher le prix de la pièce dans certains formulaires" #: common/models.py:773 -msgid "Display related parts for a part" -msgstr "" +msgid "Show Price in BOM" +msgstr "Afficher le prix dans la BOM" -#: common/models.py:779 -msgid "Create initial stock" -msgstr "" +#: common/models.py:774 +msgid "Include pricing information in BOM tables" +msgstr "Inclure les informations de prix dans les tableaux de la BOM" #: common/models.py:780 -msgid "Create initial stock on part creation" -msgstr "" +msgid "Show related parts" +msgstr "Afficher les pièces connexes" -#: common/models.py:786 -msgid "Internal Prices" -msgstr "" +#: common/models.py:781 +msgid "Display related parts for a part" +msgstr "Afficher les pièces connexes à une pièce" #: common/models.py:787 -msgid "Enable internal prices for parts" -msgstr "" +msgid "Create initial stock" +msgstr "Créer un stock initial" -#: common/models.py:793 +#: common/models.py:788 +msgid "Create initial stock on part creation" +msgstr "Créer le stock initial lors de la création d'une pièce" + +#: common/models.py:794 +msgid "Internal Prices" +msgstr "Prix internes" + +#: common/models.py:795 +msgid "Enable internal prices for parts" +msgstr "Activer les prix internes pour les pièces" + +#: common/models.py:801 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:794 +#: common/models.py:802 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:800 +#: common/models.py:808 msgid "Part Name Display Format" msgstr "" -#: common/models.py:801 +#: common/models.py:809 msgid "Format to display the part name" msgstr "" -#: common/models.py:808 +#: common/models.py:816 msgid "Enable Reports" msgstr "" -#: common/models.py:809 +#: common/models.py:817 msgid "Enable generation of reports" msgstr "" -#: common/models.py:815 templates/stats.html:25 +#: common/models.py:823 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:816 +#: common/models.py:824 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:822 +#: common/models.py:830 msgid "Page Size" msgstr "Taille de la page" -#: common/models.py:823 +#: common/models.py:831 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:833 +#: common/models.py:841 msgid "Test Reports" msgstr "Rapports de test" -#: common/models.py:834 +#: common/models.py:842 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:840 +#: common/models.py:848 msgid "Stock Expiry" msgstr "" -#: common/models.py:841 +#: common/models.py:849 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:847 +#: common/models.py:855 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:848 +#: common/models.py:856 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:854 +#: common/models.py:862 msgid "Stock Stale Time" msgstr "" -#: common/models.py:855 +#: common/models.py:863 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:857 +#: common/models.py:865 msgid "days" msgstr "jours" -#: common/models.py:862 +#: common/models.py:870 msgid "Build Expired Stock" msgstr "" -#: common/models.py:863 +#: common/models.py:871 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:869 +#: common/models.py:877 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:870 +#: common/models.py:878 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:876 -msgid "Group by Part" -msgstr "" - -#: common/models.py:877 -msgid "Group stock items by part reference in table views" -msgstr "" - -#: common/models.py:883 +#: common/models.py:884 msgid "Build Order Reference Prefix" msgstr "" -#: common/models.py:884 +#: common/models.py:885 msgid "Prefix value for build order reference" msgstr "" -#: common/models.py:889 +#: common/models.py:890 msgid "Build Order Reference Regex" msgstr "" -#: common/models.py:890 +#: common/models.py:891 msgid "Regular expression pattern for matching build order reference" msgstr "" -#: common/models.py:894 +#: common/models.py:895 msgid "Sales Order Reference Prefix" msgstr "" -#: common/models.py:895 +#: common/models.py:896 msgid "Prefix value for sales order reference" msgstr "" -#: common/models.py:900 +#: common/models.py:901 msgid "Purchase Order Reference Prefix" msgstr "Préfixe des commandes d'achats" -#: common/models.py:901 +#: common/models.py:902 msgid "Prefix value for purchase order reference" msgstr "" -#: common/models.py:907 +#: common/models.py:908 msgid "Enable password forgot" msgstr "Activer les mots de passe oubliés" -#: common/models.py:908 +#: common/models.py:909 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:913 +#: common/models.py:914 msgid "Enable registration" msgstr "Activer les inscriptions" -#: common/models.py:914 +#: common/models.py:915 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:919 +#: common/models.py:920 msgid "Enable SSO" msgstr "Activer le SSO" -#: common/models.py:920 +#: common/models.py:921 msgid "Enable SSO on the login pages" msgstr "Activer le SSO sur les pages de connexion" -#: common/models.py:925 +#: common/models.py:926 msgid "Email required" msgstr "Email requis" -#: common/models.py:926 +#: common/models.py:927 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:931 +#: common/models.py:932 msgid "Auto-fill SSO users" msgstr "Saisie automatique des utilisateurs SSO" -#: common/models.py:932 +#: common/models.py:933 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:937 +#: common/models.py:938 msgid "Mail twice" msgstr "Courriel en double" -#: common/models.py:938 +#: common/models.py:939 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:943 +#: common/models.py:944 msgid "Password twice" msgstr "" -#: common/models.py:944 +#: common/models.py:945 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:949 +#: common/models.py:950 msgid "Group on signup" msgstr "" -#: common/models.py:950 +#: common/models.py:951 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:955 +#: common/models.py:956 msgid "Enforce MFA" msgstr "" -#: common/models.py:956 +#: common/models.py:957 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:961 +#: common/models.py:964 msgid "Enable URL integration" msgstr "" -#: common/models.py:962 +#: common/models.py:965 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:968 +#: common/models.py:971 msgid "Enable navigation integration" msgstr "" -#: common/models.py:969 +#: common/models.py:972 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:975 +#: common/models.py:978 msgid "Enable app integration" -msgstr "" +msgstr "Activer l'intégration de plugins" -#: common/models.py:976 +#: common/models.py:979 msgid "Enable plugins to add apps" -msgstr "" +msgstr "Activer l'intégration de plugin pour ajouter des apps" -#: common/models.py:982 +#: common/models.py:985 msgid "Enable schedule integration" msgstr "" -#: common/models.py:983 +#: common/models.py:986 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1029 +#: common/models.py:992 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:993 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:1008 common/models.py:1216 +msgid "Settings key (must be unique - case insensitive" +msgstr "Clé du paramètre (doit être unique - insensible à la casse)" + +#: common/models.py:1039 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1030 +#: common/models.py:1040 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1035 +#: common/models.py:1045 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1036 +#: common/models.py:1046 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1041 +#: common/models.py:1051 msgid "Show latest parts" msgstr "Afficher les dernières pièces" -#: common/models.py:1042 +#: common/models.py:1052 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1047 +#: common/models.py:1057 msgid "Recent Part Count" msgstr "" -#: common/models.py:1048 +#: common/models.py:1058 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1054 +#: common/models.py:1064 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1055 +#: common/models.py:1065 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1060 +#: common/models.py:1070 msgid "Show recent stock changes" msgstr "Afficher les dernières modifications du stock" -#: common/models.py:1061 +#: common/models.py:1071 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1066 +#: common/models.py:1076 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1067 +#: common/models.py:1077 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1072 +#: common/models.py:1082 msgid "Show low stock" msgstr "" -#: common/models.py:1073 +#: common/models.py:1083 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1078 +#: common/models.py:1088 msgid "Show depleted stock" msgstr "" -#: common/models.py:1079 +#: common/models.py:1089 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1084 +#: common/models.py:1094 msgid "Show needed stock" msgstr "" -#: common/models.py:1085 +#: common/models.py:1095 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1090 +#: common/models.py:1100 msgid "Show expired stock" msgstr "" -#: common/models.py:1091 +#: common/models.py:1101 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1096 +#: common/models.py:1106 msgid "Show stale stock" msgstr "" -#: common/models.py:1097 +#: common/models.py:1107 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1102 +#: common/models.py:1112 msgid "Show pending builds" msgstr "" -#: common/models.py:1103 +#: common/models.py:1113 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1108 +#: common/models.py:1118 msgid "Show overdue builds" msgstr "" -#: common/models.py:1109 +#: common/models.py:1119 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1114 +#: common/models.py:1124 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1115 +#: common/models.py:1125 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1120 +#: common/models.py:1130 msgid "Show overdue POs" msgstr "" -#: common/models.py:1121 +#: common/models.py:1131 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1126 +#: common/models.py:1136 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1127 +#: common/models.py:1137 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1132 +#: common/models.py:1142 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1133 +#: common/models.py:1143 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1139 +#: common/models.py:1149 msgid "Inline label display" msgstr "" -#: common/models.py:1140 +#: common/models.py:1150 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1146 +#: common/models.py:1156 msgid "Inline report display" msgstr "" -#: common/models.py:1147 +#: common/models.py:1157 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1153 +#: common/models.py:1163 msgid "Search Preview Results" msgstr "" -#: common/models.py:1154 +#: common/models.py:1164 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1160 +#: common/models.py:1170 msgid "Search Show Stock" msgstr "" -#: common/models.py:1161 +#: common/models.py:1171 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1167 +#: common/models.py:1177 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1168 +#: common/models.py:1178 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1174 +#: common/models.py:1184 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1175 +#: common/models.py:1185 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1181 +#: common/models.py:1191 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1182 +#: common/models.py:1192 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1188 +#: common/models.py:1198 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1189 +#: common/models.py:1199 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1254 company/forms.py:43 +#: common/models.py:1264 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1261 company/serializers.py:264 +#: common/models.py:1271 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 -#: templates/js/translated/part.js:909 templates/js/translated/part.js:1860 +#: templates/js/translated/part.js:915 templates/js/translated/part.js:1867 msgid "Price" msgstr "" -#: common/models.py:1262 +#: common/models.py:1272 msgid "Unit price at specified quantity" msgstr "" +#: common/models.py:1429 common/models.py:1568 +msgid "Endpoint" +msgstr "" + +#: common/models.py:1430 +msgid "Endpoint at which this webhook is received" +msgstr "" + +#: common/models.py:1439 +msgid "Name for this webhook" +msgstr "" + +#: common/models.py:1444 part/models.py:948 plugin/models.py:46 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:96 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:417 +msgid "Active" +msgstr "Actif" + +#: common/models.py:1445 +msgid "Is this webhook active" +msgstr "" + +#: common/models.py:1459 +msgid "Token" +msgstr "" + +#: common/models.py:1460 +msgid "Token for access" +msgstr "" + +#: common/models.py:1467 +msgid "Secret" +msgstr "" + +#: common/models.py:1468 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:1535 +msgid "Message ID" +msgstr "" + +#: common/models.py:1536 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:1544 +msgid "Host" +msgstr "" + +#: common/models.py:1545 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:1552 +msgid "Header" +msgstr "" + +#: common/models.py:1553 +msgid "Header of this message" +msgstr "" + +#: common/models.py:1559 +msgid "Body" +msgstr "" + +#: common/models.py:1560 +msgid "Body of this message" +msgstr "" + +#: common/models.py:1569 +msgid "Endpoint on which this message was received" +msgstr "" + +#: common/models.py:1574 +msgid "Worked on" +msgstr "" + +#: common/models.py:1575 +msgid "Was the work on this message finished?" +msgstr "" + #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 #: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 -#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 -#: part/views.py:764 +#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:213 +#: part/views.py:773 msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 #: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 -#: part/views.py:765 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:214 +#: part/views.py:774 msgid "Match Fields" msgstr "" @@ -2315,7 +2404,7 @@ msgstr "Point de contact" msgid "Link to external company information" msgstr "Lien externe vers les informations de l'entreprise" -#: company/models.py:139 part/models.py:838 +#: company/models.py:139 part/models.py:840 msgid "Image" msgstr "Image" @@ -2352,8 +2441,8 @@ msgstr "Devise" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:469 -#: stock/templates/stock/item_base.html:142 +#: company/models.py:320 company/models.py:535 stock/models.py:471 +#: stock/templates/stock/item_base.html:142 templates/js/translated/bom.js:328 msgid "Base Part" msgstr "" @@ -2380,7 +2469,7 @@ msgstr "Sélectionner un fabricant" #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:533 #: templates/js/translated/company.js:818 templates/js/translated/order.js:1038 -#: templates/js/translated/part.js:245 templates/js/translated/part.js:889 +#: templates/js/translated/part.js:245 templates/js/translated/part.js:895 msgid "MPN" msgstr "" @@ -2409,8 +2498,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1960 templates/js/translated/company.js:647 -#: templates/js/translated/part.js:709 templates/js/translated/stock.js:1296 +#: stock/models.py:1988 templates/js/translated/company.js:647 +#: templates/js/translated/part.js:715 templates/js/translated/stock.js:1304 msgid "Value" msgstr "Valeur" @@ -2418,10 +2507,10 @@ msgstr "Valeur" msgid "Parameter value" msgstr "" -#: company/models.py:429 part/models.py:913 part/models.py:2450 +#: company/models.py:429 part/models.py:915 part/models.py:2457 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:284 -#: templates/js/translated/company.js:653 templates/js/translated/part.js:715 +#: templates/InvenTree/settings/settings.html:287 +#: templates/js/translated/company.js:653 templates/js/translated/part.js:721 msgid "Units" msgstr "" @@ -2434,13 +2523,13 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:224 +#: company/templates/company/supplier_part.html:87 order/models.py:227 #: order/templates/order/order_base.html:112 -#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 -#: part/bom.py:247 stock/templates/stock/item_base.html:397 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:237 +#: part/bom.py:265 stock/templates/stock/item_base.html:397 #: templates/js/translated/company.js:337 #: templates/js/translated/company.js:774 templates/js/translated/order.js:823 -#: templates/js/translated/part.js:215 templates/js/translated/part.js:857 +#: templates/js/translated/part.js:215 templates/js/translated/part.js:863 #: templates/js/translated/table_filters.js:393 msgid "Supplier" msgstr "Fournisseur" @@ -2450,8 +2539,8 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 -#: templates/js/translated/part.js:226 templates/js/translated/part.js:875 +#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1025 +#: templates/js/translated/part.js:226 templates/js/translated/part.js:881 msgid "SKU" msgstr "" @@ -2472,22 +2561,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:576 company/templates/company/supplier_part.html:119 -#: part/models.py:2641 report/templates/report/inventree_po_report.html:93 +#: part/models.py:2648 report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "base cost" msgstr "coût de base" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:493 stock/templates/stock/item_base.html:338 -#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1791 +#: stock/models.py:495 stock/templates/stock/item_base.html:338 +#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1799 msgid "Packaging" msgstr "" @@ -2495,7 +2584,7 @@ msgstr "" msgid "Part packaging" msgstr "" -#: company/models.py:584 part/models.py:1781 +#: company/models.py:584 part/models.py:1783 msgid "multiple" msgstr "" @@ -2554,12 +2643,12 @@ msgstr "Ajouter une nouvelle image" msgid "Download image from URL" msgstr "Télécharger l'image depuis l'URL" -#: company/templates/company/company_base.html:83 order/models.py:547 -#: order/templates/order/sales_order_base.html:115 stock/models.py:512 -#: stock/models.py:513 stock/serializers.py:625 +#: company/templates/company/company_base.html:83 order/models.py:552 +#: order/templates/order/sales_order_base.html:115 stock/models.py:514 +#: stock/models.py:515 stock/serializers.py:626 #: stock/templates/stock/item_base.html:290 #: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 -#: templates/js/translated/stock.js:2452 +#: templates/js/translated/stock.js:2610 #: templates/js/translated/table_filters.js:397 msgid "Customer" msgstr "" @@ -2590,7 +2679,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:118 -#: part/templates/part/detail.html:336 +#: part/templates/part/detail.html:353 msgid "New Supplier Part" msgstr "" @@ -2598,8 +2687,8 @@ msgstr "" #: company/templates/company/detail.html:79 #: company/templates/company/manufacturer_part.html:127 #: company/templates/company/manufacturer_part.html:156 -#: part/templates/part/category.html:171 part/templates/part/detail.html:345 -#: part/templates/part/detail.html:374 +#: part/templates/part/category.html:171 part/templates/part/detail.html:362 +#: part/templates/part/detail.html:391 msgid "Options" msgstr "" @@ -2627,7 +2716,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:67 part/templates/part/detail.html:364 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:381 msgid "New Manufacturer Part" msgstr "" @@ -2641,7 +2730,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:68 part/templates/part/part_sidebar.html:33 +#: part/templates/part/detail.html:85 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197 #: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 @@ -2663,7 +2752,7 @@ msgstr "Nouvelle commande achat" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:91 part/templates/part/part_sidebar.html:37 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:41 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217 #: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 @@ -2691,13 +2780,13 @@ msgstr "" #: company/templates/company/detail.html:384 #: company/templates/company/manufacturer_part.html:215 -#: part/templates/part/detail.html:418 +#: part/templates/part/detail.html:435 msgid "Delete Supplier Parts?" msgstr "" #: company/templates/company/detail.html:385 #: company/templates/company/manufacturer_part.html:216 -#: part/templates/part/detail.html:419 +#: part/templates/part/detail.html:436 msgid "All selected supplier parts will be deleted" msgstr "" @@ -2714,7 +2803,7 @@ msgstr "Fabricants" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:34 #: company/templates/company/supplier_part.html:159 -#: part/templates/part/detail.html:71 part/templates/part/part_base.html:76 +#: part/templates/part/detail.html:88 part/templates/part/part_base.html:76 msgid "Order part" msgstr "" @@ -2735,34 +2824,34 @@ msgstr "Pièces Internes" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 -#: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 +#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:163 #: templates/InvenTree/search.html:188 templates/navbar.html:45 msgid "Suppliers" msgstr "Fournisseurs" #: company/templates/company/manufacturer_part.html:129 -#: part/templates/part/detail.html:347 +#: part/templates/part/detail.html:364 msgid "Delete supplier parts" msgstr "Supprimer les pièces du fournisseur" #: company/templates/company/manufacturer_part.html:129 #: company/templates/company/manufacturer_part.html:158 #: company/templates/company/manufacturer_part.html:254 -#: part/templates/part/detail.html:347 part/templates/part/detail.html:376 +#: part/templates/part/detail.html:364 part/templates/part/detail.html:393 #: templates/js/translated/company.js:426 templates/js/translated/helpers.js:31 -#: users/models.py:210 +#: users/models.py:212 msgid "Delete" msgstr "Supprimer" #: company/templates/company/manufacturer_part.html:143 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:17 -#: part/templates/part/detail.html:170 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:187 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Paramètres" #: company/templates/company/manufacturer_part.html:147 -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:192 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part.html:65 msgid "New Parameter" @@ -2773,7 +2862,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:191 -#: part/templates/part/detail.html:862 +#: part/templates/part/detail.html:892 msgid "Add Parameter" msgstr "" @@ -2802,9 +2891,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:477 +#: company/templates/company/supplier_part.html:24 stock/models.py:479 #: stock/templates/stock/item_base.html:402 -#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1748 +#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1756 msgid "Supplier Part" msgstr "" @@ -2830,7 +2919,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:167 -#: templates/js/translated/stock.js:360 +#: templates/js/translated/stock.js:368 msgid "New Stock Item" msgstr "" @@ -2840,7 +2929,7 @@ msgid "Supplier Part Orders" msgstr "" #: company/templates/company/supplier_part.html:160 -#: part/templates/part/detail.html:72 +#: part/templates/part/detail.html:89 msgid "Order Part" msgstr "" @@ -2851,7 +2940,7 @@ msgstr "" #: company/templates/company/supplier_part.html:184 #: company/templates/company/supplier_part.html:290 -#: part/templates/part/prices.html:271 part/views.py:1619 +#: part/templates/part/prices.html:271 part/views.py:1628 msgid "Add Price Break" msgstr "" @@ -2859,11 +2948,11 @@ msgstr "" msgid "No price break information found" msgstr "" -#: company/templates/company/supplier_part.html:224 part/views.py:1681 +#: company/templates/company/supplier_part.html:224 part/views.py:1690 msgid "Delete Price Break" msgstr "" -#: company/templates/company/supplier_part.html:238 part/views.py:1667 +#: company/templates/company/supplier_part.html:238 part/views.py:1676 msgid "Edit Price Break" msgstr "" @@ -2881,10 +2970,10 @@ msgstr "" #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:150 #: templates/InvenTree/settings/sidebar.html:41 -#: templates/js/translated/bom.js:328 templates/js/translated/part.js:489 -#: templates/js/translated/part.js:624 templates/js/translated/part.js:1118 -#: templates/js/translated/part.js:1279 templates/js/translated/stock.js:927 -#: templates/js/translated/stock.js:1580 templates/navbar.html:28 +#: templates/js/translated/bom.js:340 templates/js/translated/part.js:495 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1125 +#: templates/js/translated/part.js:1286 templates/js/translated/stock.js:935 +#: templates/js/translated/stock.js:1588 templates/navbar.html:28 msgid "Stock" msgstr "Stock" @@ -2907,8 +2996,8 @@ msgstr "Tarif" #: stock/templates/stock/location.html:151 #: stock/templates/stock/location.html:163 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2351 -#: templates/stats.html:93 templates/stats.html:102 users/models.py:43 +#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2509 +#: templates/stats.html:105 templates/stats.html:114 users/models.py:43 msgid "Stock Items" msgstr "Éléments en stock" @@ -2937,20 +3026,20 @@ msgstr "Entreprises" msgid "New Company" msgstr "Nouvelle Entreprise" -#: company/views.py:129 part/views.py:584 +#: company/views.py:129 part/views.py:593 msgid "Download Image" msgstr "" -#: company/views.py:158 part/views.py:616 +#: company/views.py:158 part/views.py:625 msgid "Image size exceeds maximum allowable size for download" msgstr "" -#: company/views.py:165 part/views.py:623 +#: company/views.py:165 part/views.py:632 #, python-brace-format msgid "Invalid response: {code}" msgstr "" -#: company/views.py:174 part/views.py:632 +#: company/views.py:174 part/views.py:641 msgid "Supplied URL is not a valid image file" msgstr "" @@ -3036,282 +3125,282 @@ msgstr "Marquer la commande comme complète" msgid "Cancel order" msgstr "Annuler la commande" -#: order/models.py:122 +#: order/models.py:125 msgid "Order description" msgstr "Description de la commande" -#: order/models.py:124 +#: order/models.py:127 msgid "Link to external page" msgstr "Lien vers une page externe" -#: order/models.py:132 +#: order/models.py:135 msgid "Created By" msgstr "Créé par" -#: order/models.py:139 +#: order/models.py:142 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:144 +#: order/models.py:147 msgid "Order notes" msgstr "" -#: order/models.py:211 order/models.py:537 +#: order/models.py:214 order/models.py:542 msgid "Order reference" msgstr "" -#: order/models.py:216 order/models.py:552 +#: order/models.py:219 order/models.py:557 msgid "Purchase order status" msgstr "" -#: order/models.py:225 +#: order/models.py:228 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:228 order/templates/order/order_base.html:118 +#: order/models.py:231 order/templates/order/order_base.html:118 #: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:228 +#: order/models.py:231 msgid "Supplier order reference code" msgstr "" -#: order/models.py:235 +#: order/models.py:238 msgid "received by" msgstr "" -#: order/models.py:240 +#: order/models.py:243 msgid "Issue Date" msgstr "" -#: order/models.py:241 +#: order/models.py:244 msgid "Date order was issued" msgstr "" -#: order/models.py:246 +#: order/models.py:249 msgid "Target Delivery Date" msgstr "" -#: order/models.py:247 +#: order/models.py:250 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:253 +#: order/models.py:256 msgid "Date order was completed" msgstr "" -#: order/models.py:282 +#: order/models.py:285 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:411 -msgid "Quantity must be an integer" -msgstr "" - -#: order/models.py:415 +#: order/models.py:420 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:548 +#: order/models.py:553 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer Reference " msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer order reference code" msgstr "" -#: order/models.py:559 +#: order/models.py:564 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:562 order/models.py:1028 +#: order/models.py:567 order/models.py:1048 #: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:569 +#: order/models.py:574 msgid "shipped by" msgstr "expédié par" -#: order/models.py:635 +#: order/models.py:640 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:639 +#: order/models.py:644 msgid "Only a pending order can be marked as complete" msgstr "" -#: order/models.py:642 +#: order/models.py:647 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:645 +#: order/models.py:650 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:797 +#: order/models.py:806 msgid "Item quantity" msgstr "Nombre d'élement" -#: order/models.py:803 +#: order/models.py:812 msgid "Line item reference" msgstr "" -#: order/models.py:805 +#: order/models.py:814 msgid "Line item notes" msgstr "" -#: order/models.py:835 order/models.py:926 order/models.py:1022 -#: templates/js/translated/order.js:1820 +#: order/models.py:842 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:855 order/models.py:946 order/models.py:1042 +#: templates/js/translated/order.js:1820 templates/js/translated/stock.js:2271 msgid "Order" msgstr "Commande" -#: order/models.py:836 order/templates/order/order_base.html:9 +#: order/models.py:856 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:352 -#: templates/js/translated/order.js:801 templates/js/translated/part.js:832 -#: templates/js/translated/stock.js:1725 templates/js/translated/stock.js:2433 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:838 +#: templates/js/translated/stock.js:1733 templates/js/translated/stock.js:2591 msgid "Purchase Order" msgstr "Commande d’achat" -#: order/models.py:857 +#: order/models.py:877 msgid "Supplier part" msgstr "Pièce fournisseur" -#: order/models.py:864 order/templates/order/order_base.html:163 +#: order/models.py:884 order/templates/order/order_base.html:163 #: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 -#: templates/js/translated/part.js:904 templates/js/translated/part.js:930 +#: templates/js/translated/part.js:910 templates/js/translated/part.js:937 #: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "Reçu" -#: order/models.py:865 +#: order/models.py:885 msgid "Number of items received" msgstr "Nombre d'éléments reçus" -#: order/models.py:872 part/templates/part/prices.html:176 stock/models.py:606 +#: order/models.py:892 part/templates/part/prices.html:176 stock/models.py:608 #: stock/serializers.py:170 stock/templates/stock/item_base.html:359 -#: templates/js/translated/stock.js:1779 +#: templates/js/translated/stock.js:1787 msgid "Purchase Price" msgstr "Prix d'achat" -#: order/models.py:873 +#: order/models.py:893 msgid "Unit purchase price" msgstr "" -#: order/models.py:881 +#: order/models.py:901 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:936 part/templates/part/part_pricing.html:112 +#: order/models.py:956 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "Prix de vente" -#: order/models.py:937 +#: order/models.py:957 msgid "Unit sale price" msgstr "" -#: order/models.py:942 +#: order/models.py:962 msgid "Shipped quantity" msgstr "" -#: order/models.py:1029 +#: order/models.py:1049 msgid "Date of shipment" msgstr "" -#: order/models.py:1036 +#: order/models.py:1056 msgid "Checked By" msgstr "" -#: order/models.py:1037 +#: order/models.py:1057 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1045 +#: order/models.py:1065 msgid "Shipment number" msgstr "" -#: order/models.py:1052 +#: order/models.py:1072 msgid "Shipment notes" msgstr "" -#: order/models.py:1059 +#: order/models.py:1079 msgid "Tracking Number" msgstr "" -#: order/models.py:1060 +#: order/models.py:1080 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1070 +#: order/models.py:1090 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1073 +#: order/models.py:1093 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1149 order/models.py:1151 +#: order/models.py:1171 order/models.py:1173 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1155 +#: order/models.py:1177 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1157 +#: order/models.py:1179 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1160 +#: order/models.py:1182 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1164 +#: order/models.py:1186 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:1170 order/serializers.py:734 +#: order/models.py:1192 order/serializers.py:740 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1173 +#: order/models.py:1195 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1174 +#: order/models.py:1196 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1182 +#: order/models.py:1204 msgid "Line" msgstr "Ligne" -#: order/models.py:1190 order/serializers.py:825 order/serializers.py:953 -#: templates/js/translated/model_renderers.js:251 +#: order/models.py:1212 order/serializers.py:831 order/serializers.py:959 +#: templates/js/translated/model_renderers.js:285 msgid "Shipment" msgstr "" -#: order/models.py:1191 +#: order/models.py:1213 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1203 +#: order/models.py:1225 msgid "Item" msgstr "Article" -#: order/models.py:1204 +#: order/models.py:1226 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1207 +#: order/models.py:1229 msgid "Enter stock allocation quantity" msgstr "" @@ -3319,7 +3408,7 @@ msgstr "" msgid "Purchase price currency" msgstr "Devise du prix d'achat" -#: order/serializers.py:211 order/serializers.py:790 +#: order/serializers.py:211 order/serializers.py:796 msgid "Line Item" msgstr "" @@ -3355,41 +3444,41 @@ msgstr "" msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:587 msgid "Sale price currency" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:655 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:699 order/serializers.py:802 +#: order/serializers.py:705 order/serializers.py:808 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:721 +#: order/serializers.py:727 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:815 +#: order/serializers.py:821 msgid "Enter serial numbers to allocate" -msgstr "" +msgstr "Entrez les numéros de série à allouer" -#: order/serializers.py:839 order/serializers.py:964 +#: order/serializers.py:845 order/serializers.py:970 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:842 order/serializers.py:967 +#: order/serializers.py:848 order/serializers.py:973 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:894 +#: order/serializers.py:900 msgid "No match found for the following serial numbers" -msgstr "" +msgstr "Aucune correspondance trouvée pour les numéros de série suivants" -#: order/serializers.py:904 +#: order/serializers.py:910 msgid "The following serial numbers are already allocated" -msgstr "" +msgstr "Les numéros de série suivants sont déjà alloués" #: order/templates/order/delete_attachment.html:5 #: stock/templates/stock/attachment_delete.html:5 @@ -3441,6 +3530,7 @@ msgstr "" #: order/templates/order/order_base.html:94 #: order/templates/order/sales_order_base.html:89 +#: templates/js/translated/stock.js:2327 msgid "Order Status" msgstr "Statut de la commande" @@ -3538,7 +3628,7 @@ msgstr "Dupliquer la sélection" #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/build.js:300 templates/js/translated/build.js:1311 #: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 -#: templates/js/translated/stock.js:593 templates/js/translated/stock.js:761 +#: templates/js/translated/stock.js:601 templates/js/translated/stock.js:769 msgid "Remove row" msgstr "Supprimer la ligne" @@ -3729,7 +3819,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:48 -#: templates/js/translated/bom.js:720 templates/js/translated/build.js:1243 +#: templates/js/translated/bom.js:732 templates/js/translated/build.js:1243 msgid "Actions" msgstr "" @@ -3832,447 +3922,448 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:125 part/models.py:81 part/models.py:847 +#: part/bom.py:125 part/models.py:83 part/models.py:849 #: part/templates/part/category.html:108 part/templates/part/part_base.html:338 msgid "Default Location" msgstr "" -#: part/bom.py:126 part/templates/part/part_base.html:185 +#: part/bom.py:126 templates/email/low_stock_notification.html:17 +msgid "Total Stock" +msgstr "" + +#: part/bom.py:127 part/templates/part/part_base.html:185 msgid "Available Stock" msgstr "" -#: part/forms.py:85 +#: part/bom.py:128 part/templates/part/part_base.html:203 +#: templates/js/translated/part.js:1301 +msgid "On Order" +msgstr "" + +#: part/forms.py:84 msgid "Select part category" msgstr "" -#: part/forms.py:122 +#: part/forms.py:121 msgid "Add parameter template to same level categories" msgstr "" -#: part/forms.py:126 +#: part/forms.py:125 msgid "Add parameter template to all categories" msgstr "" -#: part/forms.py:146 +#: part/forms.py:145 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 +#: part/models.py:84 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:95 part/models.py:2526 part/templates/part/category.html:15 +#: part/models.py:97 part/models.py:2533 part/templates/part/category.html:15 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:96 part/templates/part/category.html:128 -#: templates/InvenTree/search.html:95 templates/stats.html:84 +#: part/models.py:98 part/templates/part/category.html:128 +#: templates/InvenTree/search.html:95 templates/stats.html:96 #: users/models.py:40 msgid "Part Categories" msgstr "" -#: part/models.py:358 part/templates/part/cat_link.html:3 +#: part/models.py:360 part/templates/part/cat_link.html:3 #: part/templates/part/category.html:17 part/templates/part/category.html:133 #: part/templates/part/category.html:153 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82 #: templates/InvenTree/settings/sidebar.html:37 -#: templates/js/translated/part.js:1656 templates/navbar.html:21 -#: templates/stats.html:80 templates/stats.html:89 users/models.py:41 +#: templates/js/translated/part.js:1663 templates/navbar.html:21 +#: templates/stats.html:92 templates/stats.html:101 users/models.py:41 msgid "Parts" msgstr "" -#: part/models.py:450 +#: part/models.py:452 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:500 part/models.py:512 +#: part/models.py:502 part/models.py:514 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:642 +#: part/models.py:644 msgid "Next available serial numbers are" -msgstr "" +msgstr "Les prochains numéros de série disponibles sont" -#: part/models.py:646 +#: part/models.py:648 msgid "Next available serial number is" -msgstr "" +msgstr "Le prochain numéro de série disponible est" -#: part/models.py:651 +#: part/models.py:653 msgid "Most recent serial number is" -msgstr "" +msgstr "Le numéro de série le plus récent est" -#: part/models.py:746 +#: part/models.py:748 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN dupliqué non autorisé dans les paramètres de la pièce" -#: part/models.py:771 +#: part/models.py:773 msgid "Part name" msgstr "" -#: part/models.py:778 +#: part/models.py:780 msgid "Is Template" msgstr "" -#: part/models.py:779 +#: part/models.py:781 msgid "Is this part a template part?" msgstr "" -#: part/models.py:789 +#: part/models.py:791 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:790 +#: part/models.py:792 msgid "Variant Of" msgstr "" -#: part/models.py:796 +#: part/models.py:798 msgid "Part description" msgstr "" -#: part/models.py:801 part/templates/part/category.html:86 +#: part/models.py:803 part/templates/part/category.html:86 #: part/templates/part/part_base.html:302 msgid "Keywords" msgstr "" -#: part/models.py:802 +#: part/models.py:804 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:809 part/models.py:2276 part/models.py:2525 +#: part/models.py:811 part/models.py:2283 part/models.py:2532 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:183 -#: templates/js/translated/part.js:1261 +#: templates/InvenTree/settings/settings.html:186 +#: templates/js/translated/part.js:1268 msgid "Category" msgstr "Catégorie" -#: part/models.py:810 +#: part/models.py:812 msgid "Part category" msgstr "Catégorie de la pièce" -#: part/models.py:815 part/templates/part/part_base.html:274 -#: templates/js/translated/part.js:612 templates/js/translated/part.js:1214 -#: templates/js/translated/stock.js:1552 +#: part/models.py:817 part/templates/part/part_base.html:274 +#: templates/js/translated/part.js:618 templates/js/translated/part.js:1221 +#: templates/js/translated/stock.js:1560 msgid "IPN" msgstr "IPN" -#: part/models.py:816 +#: part/models.py:818 msgid "Internal Part Number" msgstr "" -#: part/models.py:822 +#: part/models.py:824 msgid "Part revision or version number" msgstr "" -#: part/models.py:823 part/templates/part/part_base.html:281 -#: report/models.py:200 templates/js/translated/part.js:616 +#: part/models.py:825 part/templates/part/part_base.html:281 +#: report/models.py:200 templates/js/translated/part.js:622 msgid "Revision" msgstr "Révision" -#: part/models.py:845 +#: part/models.py:847 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:892 part/templates/part/part_base.html:347 +#: part/models.py:894 part/templates/part/part_base.html:347 msgid "Default Supplier" msgstr "" -#: part/models.py:893 +#: part/models.py:895 msgid "Default supplier part" msgstr "" -#: part/models.py:900 +#: part/models.py:902 msgid "Default Expiry" msgstr "" -#: part/models.py:901 +#: part/models.py:903 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:906 part/templates/part/part_base.html:196 +#: part/models.py:908 part/templates/part/part_base.html:196 msgid "Minimum Stock" msgstr "" -#: part/models.py:907 +#: part/models.py:909 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:914 +#: part/models.py:916 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:920 +#: part/models.py:922 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:926 +#: part/models.py:928 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:932 +#: part/models.py:934 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:937 +#: part/models.py:939 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:942 +#: part/models.py:944 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:946 plugin/models.py:46 -#: templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:295 -#: templates/js/translated/table_filters.js:417 -msgid "Active" -msgstr "Actif" - -#: part/models.py:947 +#: part/models.py:949 msgid "Is this part active?" msgstr "" -#: part/models.py:952 +#: part/models.py:954 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:957 +#: part/models.py:959 msgid "Part notes - supports Markdown formatting" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "BOM checksum" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:963 +#: part/models.py:965 msgid "BOM checked by" msgstr "" -#: part/models.py:965 +#: part/models.py:967 msgid "BOM checked date" msgstr "" -#: part/models.py:969 +#: part/models.py:971 msgid "Creation User" msgstr "" -#: part/models.py:1781 +#: part/models.py:1783 msgid "Sell multiple" msgstr "Ventes multiples" -#: part/models.py:2326 +#: part/models.py:2333 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2343 +#: part/models.py:2350 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2363 templates/js/translated/part.js:1707 -#: templates/js/translated/stock.js:1276 +#: part/models.py:2370 templates/js/translated/part.js:1714 +#: templates/js/translated/stock.js:1284 msgid "Test Name" msgstr "Nom de test" -#: part/models.py:2364 +#: part/models.py:2371 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2369 +#: part/models.py:2376 msgid "Test Description" msgstr "" -#: part/models.py:2370 +#: part/models.py:2377 msgid "Enter description for this test" msgstr "" -#: part/models.py:2375 templates/js/translated/part.js:1716 +#: part/models.py:2382 templates/js/translated/part.js:1723 #: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "Requis" -#: part/models.py:2376 +#: part/models.py:2383 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2381 templates/js/translated/part.js:1724 +#: part/models.py:2388 templates/js/translated/part.js:1731 msgid "Requires Value" msgstr "" -#: part/models.py:2382 +#: part/models.py:2389 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2387 templates/js/translated/part.js:1731 +#: part/models.py:2394 templates/js/translated/part.js:1738 msgid "Requires Attachment" msgstr "" -#: part/models.py:2388 +#: part/models.py:2395 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2399 +#: part/models.py:2406 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2435 +#: part/models.py:2442 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2443 +#: part/models.py:2450 msgid "Parameter Name" msgstr "" -#: part/models.py:2450 +#: part/models.py:2457 msgid "Parameter Units" msgstr "" -#: part/models.py:2480 +#: part/models.py:2487 msgid "Parent Part" msgstr "" -#: part/models.py:2482 part/models.py:2531 part/models.py:2532 -#: templates/InvenTree/settings/settings.html:178 +#: part/models.py:2489 part/models.py:2538 part/models.py:2539 +#: templates/InvenTree/settings/settings.html:181 msgid "Parameter Template" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Data" msgstr "Données" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Parameter Value" msgstr "" -#: part/models.py:2536 templates/InvenTree/settings/settings.html:187 +#: part/models.py:2543 templates/InvenTree/settings/settings.html:190 msgid "Default Value" msgstr "" -#: part/models.py:2537 +#: part/models.py:2544 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2614 +#: part/models.py:2621 msgid "Select parent part" msgstr "" -#: part/models.py:2622 +#: part/models.py:2629 msgid "Sub part" msgstr "" -#: part/models.py:2623 +#: part/models.py:2630 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2629 +#: part/models.py:2636 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2631 templates/js/translated/bom.js:566 -#: templates/js/translated/bom.js:640 +#: part/models.py:2638 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:652 #: templates/js/translated/table_filters.js:92 msgid "Optional" msgstr "" -#: part/models.py:2631 +#: part/models.py:2638 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2634 +#: part/models.py:2641 msgid "Overage" msgstr "" -#: part/models.py:2635 +#: part/models.py:2642 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2638 +#: part/models.py:2645 msgid "BOM item reference" msgstr "" -#: part/models.py:2641 +#: part/models.py:2648 msgid "BOM item notes" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "Checksum" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "BOM line checksum" msgstr "" -#: part/models.py:2647 templates/js/translated/bom.js:657 +#: part/models.py:2654 templates/js/translated/bom.js:669 #: templates/js/translated/table_filters.js:68 #: templates/js/translated/table_filters.js:88 msgid "Inherited" msgstr "" -#: part/models.py:2648 +#: part/models.py:2655 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2653 templates/js/translated/bom.js:649 +#: part/models.py:2660 templates/js/translated/bom.js:661 msgid "Allow Variants" msgstr "" -#: part/models.py:2654 +#: part/models.py:2661 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2739 stock/models.py:355 +#: part/models.py:2746 stock/models.py:357 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2748 part/models.py:2750 +#: part/models.py:2755 part/models.py:2757 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2879 +#: part/models.py:2886 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2901 +#: part/models.py:2908 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2913 +#: part/models.py:2920 msgid "Parent BOM item" msgstr "" -#: part/models.py:2921 +#: part/models.py:2928 msgid "Substitute part" msgstr "" -#: part/models.py:2932 +#: part/models.py:2939 msgid "Part 1" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Part 2" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Select Related Part" msgstr "" -#: part/models.py:2968 +#: part/models.py:2975 msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique" msgstr "" @@ -4327,7 +4418,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:253 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:270 msgid "BOM actions" msgstr "" @@ -4499,7 +4590,7 @@ msgstr "" msgid "Import Parts" msgstr "" -#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:375 +#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:348 msgid "Duplicate Part" msgstr "" @@ -4533,145 +4624,149 @@ msgid "Showing stock for all variants of %(full_name)s" msgstr "" #: part/templates/part/detail.html:43 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/detail.html:60 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:48 +#: part/templates/part/detail.html:65 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:105 +#: part/templates/part/detail.html:122 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:142 +#: part/templates/part/detail.html:159 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:146 +#: part/templates/part/detail.html:163 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:147 +#: part/templates/part/detail.html:164 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:174 +#: part/templates/part/detail.html:191 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:45 +#: part/templates/part/detail.html:228 part/templates/part/part_sidebar.html:49 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:215 part/templates/part/detail.html:216 +#: part/templates/part/detail.html:232 part/templates/part/detail.html:233 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:253 part/templates/part/part_sidebar.html:17 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:241 +#: part/templates/part/detail.html:258 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:245 templates/js/translated/bom.js:70 +#: part/templates/part/detail.html:262 templates/js/translated/bom.js:70 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:247 +#: part/templates/part/detail.html:264 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:257 +#: part/templates/part/detail.html:274 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:259 templates/js/translated/part.js:272 +#: part/templates/part/detail.html:276 templates/js/translated/part.js:272 msgid "Copy BOM" msgstr "" -#: part/templates/part/detail.html:261 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:283 msgid "New BOM Item" msgstr "" -#: part/templates/part/detail.html:267 +#: part/templates/part/detail.html:284 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:280 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:314 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:322 +#: part/templates/part/detail.html:339 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:332 +#: part/templates/part/detail.html:349 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:360 +#: part/templates/part/detail.html:377 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:393 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:558 +#: part/templates/part/detail.html:575 msgid "Delete selected BOM items?" msgstr "" -#: part/templates/part/detail.html:559 +#: part/templates/part/detail.html:576 msgid "All selected BOM items will be deleted" msgstr "" -#: part/templates/part/detail.html:608 +#: part/templates/part/detail.html:625 msgid "Create BOM Item" msgstr "" -#: part/templates/part/detail.html:652 +#: part/templates/part/detail.html:682 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:660 +#: part/templates/part/detail.html:690 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:755 +#: part/templates/part/detail.html:785 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:812 +#: part/templates/part/detail.html:842 msgid "Edit Part Notes" msgstr "" -#: part/templates/part/detail.html:925 +#: part/templates/part/detail.html:955 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:937 +#: part/templates/part/detail.html:967 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:949 +#: part/templates/part/detail.html:979 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1038 +#: part/templates/part/detail.html:1068 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -4767,7 +4862,7 @@ msgstr "" #: part/templates/part/part_base.html:124 msgid "Part stock is tracked by serial number" -msgstr "" +msgstr "La pièce en stock est tracée par un numéro de série" #: part/templates/part/part_base.html:128 msgid "Part can be purchased from external suppliers" @@ -4786,7 +4881,7 @@ msgstr "" #: templates/js/translated/company.js:508 #: templates/js/translated/company.js:765 #: templates/js/translated/model_renderers.js:175 -#: templates/js/translated/part.js:527 templates/js/translated/part.js:604 +#: templates/js/translated/part.js:533 templates/js/translated/part.js:610 msgid "Inactive" msgstr "" @@ -4805,10 +4900,6 @@ msgstr "" msgid "In Stock" msgstr "" -#: part/templates/part/part_base.html:203 templates/js/translated/part.js:1294 -msgid "On Order" -msgstr "" - #: part/templates/part/part_base.html:210 templates/InvenTree/index.html:178 msgid "Required for Build Orders" msgstr "" @@ -4821,12 +4912,12 @@ msgstr "" msgid "Allocated to Orders" msgstr "" -#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:678 +#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:690 msgid "Can Build" msgstr "" -#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1125 -#: templates/js/translated/part.js:1298 +#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1132 +#: templates/js/translated/part.js:1305 msgid "Building" msgstr "" @@ -4836,12 +4927,12 @@ msgstr "" #: part/templates/part/part_base.html:324 msgid "Latest Serial Number" -msgstr "" +msgstr "Dernier numéro de série" #: part/templates/part/part_base.html:328 #: stock/templates/stock/item_base.html:166 msgid "Search for serial number" -msgstr "" +msgstr "Rechercher un numéro de série" #: part/templates/part/part_base.html:449 part/templates/part/prices.html:144 msgid "Calculate" @@ -4878,7 +4969,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:40 -#: templates/js/translated/bom.js:632 +#: templates/js/translated/bom.js:644 msgid "No supplier pricing available" msgstr "" @@ -4920,7 +5011,12 @@ msgstr "" msgid "Used In" msgstr "" -#: part/templates/part/part_sidebar.html:41 +#: part/templates/part/part_sidebar.html:31 +#: stock/templates/stock/stock_sidebar.html:8 +msgid "Allocations" +msgstr "" + +#: part/templates/part/part_sidebar.html:45 msgid "Test Templates" msgstr "Tester le modèle" @@ -4993,7 +5089,7 @@ msgstr "Afficher le prix de vente" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:155 templates/js/translated/bom.js:626 +#: part/templates/part/prices.html:155 templates/js/translated/bom.js:638 msgid "Supplier Cost" msgstr "" @@ -5015,7 +5111,7 @@ msgstr "" msgid "Internal Cost" msgstr "" -#: part/templates/part/prices.html:215 part/views.py:1690 +#: part/templates/part/prices.html:215 part/views.py:1699 msgid "Add Internal Price Break" msgstr "" @@ -5035,9 +5131,9 @@ msgstr "" msgid "Set category for the following parts" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:588 -#: templates/js/translated/part.js:491 templates/js/translated/part.js:1115 -#: templates/js/translated/part.js:1302 +#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:600 +#: templates/js/translated/part.js:497 templates/js/translated/part.js:1122 +#: templates/js/translated/part.js:1309 msgid "No Stock" msgstr "" @@ -5054,116 +5150,116 @@ msgstr "" msgid "Create a new variant of template '%(full_name)s'." msgstr "" -#: part/templatetags/inventree_extras.py:116 +#: part/templatetags/inventree_extras.py:125 msgid "Unknown database" msgstr "" -#: part/views.py:92 +#: part/views.py:93 msgid "Set Part Category" msgstr "" -#: part/views.py:142 +#: part/views.py:143 #, python-brace-format msgid "Set category for {n} parts" msgstr "" -#: part/views.py:214 +#: part/views.py:215 msgid "Match References" msgstr "" -#: part/views.py:502 +#: part/views.py:511 msgid "None" msgstr "" -#: part/views.py:561 +#: part/views.py:570 msgid "Part QR Code" msgstr "" -#: part/views.py:663 +#: part/views.py:672 msgid "Select Part Image" msgstr "" -#: part/views.py:689 +#: part/views.py:698 msgid "Updated part image" msgstr "" -#: part/views.py:692 +#: part/views.py:701 msgid "Part image not found" msgstr "" -#: part/views.py:766 +#: part/views.py:775 msgid "Match Parts" msgstr "" -#: part/views.py:1101 +#: part/views.py:1110 msgid "Export Bill of Materials" msgstr "" -#: part/views.py:1150 +#: part/views.py:1159 msgid "Confirm Part Deletion" msgstr "" -#: part/views.py:1157 +#: part/views.py:1166 msgid "Part was deleted" msgstr "" -#: part/views.py:1166 +#: part/views.py:1175 msgid "Part Pricing" msgstr "" -#: part/views.py:1315 +#: part/views.py:1324 msgid "Create Part Parameter Template" msgstr "" -#: part/views.py:1325 +#: part/views.py:1334 msgid "Edit Part Parameter Template" msgstr "" -#: part/views.py:1332 +#: part/views.py:1341 msgid "Delete Part Parameter Template" msgstr "" -#: part/views.py:1391 templates/js/translated/part.js:315 +#: part/views.py:1400 templates/js/translated/part.js:315 msgid "Edit Part Category" msgstr "" -#: part/views.py:1429 +#: part/views.py:1438 msgid "Delete Part Category" msgstr "" -#: part/views.py:1435 +#: part/views.py:1444 msgid "Part category was deleted" msgstr "" -#: part/views.py:1444 +#: part/views.py:1453 msgid "Create Category Parameter Template" msgstr "" -#: part/views.py:1545 +#: part/views.py:1554 msgid "Edit Category Parameter Template" msgstr "" -#: part/views.py:1601 +#: part/views.py:1610 msgid "Delete Category Parameter Template" msgstr "" -#: part/views.py:1623 +#: part/views.py:1632 msgid "Added new price break" msgstr "" -#: part/views.py:1699 +#: part/views.py:1708 msgid "Edit Internal Price Break" msgstr "" -#: part/views.py:1707 +#: part/views.py:1716 msgid "Delete Internal Price Break" msgstr "" -#: plugin/integration.py:124 +#: plugin/integration.py:138 msgid "No author found" msgstr "" -#: plugin/integration.py:136 +#: plugin/integration.py:152 msgid "No date found" msgstr "" @@ -5191,7 +5287,7 @@ msgstr "" msgid "Is the plugin active" msgstr "" -#: plugin/models.py:195 +#: plugin/models.py:199 msgid "Plugin" msgstr "" @@ -5357,33 +5453,33 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:517 stock/templates/stock/item_base.html:156 +#: stock/models.py:519 stock/templates/stock/item_base.html:156 #: templates/js/translated/build.js:293 templates/js/translated/build.js:697 #: templates/js/translated/build.js:1073 #: templates/js/translated/model_renderers.js:95 #: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 -#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:415 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:423 msgid "Serial Number" -msgstr "" +msgstr "Numéro de série" #: report/templates/report/inventree_test_report_base.html:88 msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1948 +#: stock/models.py:1976 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1954 +#: stock/models.py:1982 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin.html:50 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2367 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2525 msgid "Date" msgstr "" @@ -5396,23 +5492,27 @@ msgid "Fail" msgstr "" #: report/templates/report/inventree_test_report_base.html:123 -#: stock/templates/stock/stock_sidebar.html:12 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:578 templates/js/translated/stock.js:748 -#: templates/js/translated/stock.js:2627 +#: templates/js/translated/stock.js:586 templates/js/translated/stock.js:756 +#: templates/js/translated/stock.js:2785 msgid "Serial" msgstr "" -#: stock/api.py:478 +#: stock/api.py:476 msgid "Quantity is required" msgstr "" -#: stock/forms.py:77 stock/forms.py:251 stock/models.py:574 +#: stock/api.py:483 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:576 #: stock/templates/stock/item_base.html:193 -#: templates/js/translated/stock.js:1701 +#: templates/js/translated/stock.js:1709 msgid "Expiry Date" msgstr "" @@ -5422,7 +5522,7 @@ msgstr "" #: stock/forms.py:81 msgid "Enter unique serial numbers (or leave blank)" -msgstr "" +msgstr "Entrer des numéros de série uniques (ou laisser vide)" #: stock/forms.py:136 msgid "Destination for serialized stock (by default, will remain in current location)" @@ -5430,11 +5530,11 @@ msgstr "" #: stock/forms.py:138 msgid "Serial numbers" -msgstr "" +msgstr "Numéros de série" #: stock/forms.py:138 msgid "Unique serial numbers (must match quantity)" -msgstr "" +msgstr "Numéros de série uniques (doivent correspondre à la quantité)" #: stock/forms.py:140 stock/forms.py:224 msgid "Add transaction note (optional)" @@ -5460,228 +5560,228 @@ msgstr "" msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:611 +#: stock/models.py:62 stock/models.py:613 #: stock/templates/stock/item_base.html:416 msgid "Owner" msgstr "Propriétaire" -#: stock/models.py:61 stock/models.py:612 +#: stock/models.py:63 stock/models.py:614 msgid "Select Owner" msgstr "Sélectionner un propriétaire" -#: stock/models.py:336 +#: stock/models.py:338 msgid "StockItem with this serial number already exists" -msgstr "" +msgstr "Il existe déjà un article en stock avec ce numéro de série" -#: stock/models.py:372 +#: stock/models.py:374 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:382 stock/models.py:391 +#: stock/models.py:384 stock/models.py:393 msgid "Quantity must be 1 for item with a serial number" -msgstr "" +msgstr "La quantité doit être de 1 pour un article avec un numéro de série" -#: stock/models.py:383 +#: stock/models.py:385 msgid "Serial number cannot be set if quantity greater than 1" -msgstr "" +msgstr "Le numéro de série ne peut pas être défini si la quantité est supérieure à 1" -#: stock/models.py:405 +#: stock/models.py:407 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:411 +#: stock/models.py:413 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:418 +#: stock/models.py:420 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:461 +#: stock/models.py:463 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:470 +#: stock/models.py:472 msgid "Base part" msgstr "" -#: stock/models.py:478 +#: stock/models.py:480 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:484 stock/templates/stock/location.html:16 +#: stock/models.py:486 stock/templates/stock/location.html:16 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:494 +#: stock/models.py:496 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:500 stock/templates/stock/item_base.html:298 +#: stock/models.py:502 stock/templates/stock/item_base.html:298 msgid "Installed In" msgstr "" -#: stock/models.py:503 +#: stock/models.py:505 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:519 +#: stock/models.py:521 msgid "Serial number for this item" -msgstr "" +msgstr "Numéro de série pour cet article" -#: stock/models.py:533 +#: stock/models.py:535 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:537 +#: stock/models.py:539 msgid "Stock Quantity" msgstr "" -#: stock/models.py:546 +#: stock/models.py:548 msgid "Source Build" msgstr "" -#: stock/models.py:548 +#: stock/models.py:550 msgid "Build for this stock item" msgstr "" -#: stock/models.py:559 +#: stock/models.py:561 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:562 +#: stock/models.py:564 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:568 +#: stock/models.py:570 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:575 +#: stock/models.py:577 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete on deplete" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:598 stock/templates/stock/item.html:111 +#: stock/models.py:600 stock/templates/stock/item.html:128 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:607 +#: stock/models.py:609 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1096 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1074 +#: stock/models.py:1102 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1080 +#: stock/models.py:1108 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1083 +#: stock/models.py:1111 msgid "Serial numbers must be a list of integers" -msgstr "" +msgstr "Les numéros de série doivent être une liste de nombres entiers" -#: stock/models.py:1086 +#: stock/models.py:1114 msgid "Quantity does not match serial numbers" -msgstr "" +msgstr "La quantité ne correspond pas au nombre de numéros de série" -#: stock/models.py:1093 +#: stock/models.py:1121 #, python-brace-format msgid "Serial numbers already exist: {exists}" -msgstr "" +msgstr "Les numéros de série existent déja : {exists}" -#: stock/models.py:1164 +#: stock/models.py:1192 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1195 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1170 +#: stock/models.py:1198 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1173 +#: stock/models.py:1201 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1176 +#: stock/models.py:1204 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1179 +#: stock/models.py:1207 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1186 stock/serializers.py:774 +#: stock/models.py:1214 stock/serializers.py:775 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1190 +#: stock/models.py:1218 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1222 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1198 +#: stock/models.py:1226 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1369 +#: stock/models.py:1397 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1868 +#: stock/models.py:1896 msgid "Entry notes" msgstr "" -#: stock/models.py:1925 +#: stock/models.py:1953 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1931 +#: stock/models.py:1959 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1949 +#: stock/models.py:1977 msgid "Test name" msgstr "" -#: stock/models.py:1955 templates/js/translated/table_filters.js:271 +#: stock/models.py:1983 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1961 +#: stock/models.py:1989 msgid "Test output value" msgstr "" -#: stock/models.py:1968 +#: stock/models.py:1996 msgid "Test result attachment" msgstr "" -#: stock/models.py:1974 +#: stock/models.py:2002 msgid "Test notes" msgstr "" @@ -5695,7 +5795,7 @@ msgstr "" #: stock/serializers.py:294 msgid "Enter number of stock items to serialize" -msgstr "" +msgstr "Entrez le nombre d'articles en stock à sérialiser" #: stock/serializers.py:309 #, python-brace-format @@ -5704,9 +5804,9 @@ msgstr "" #: stock/serializers.py:315 msgid "Enter serial numbers for new items" -msgstr "" +msgstr "Entrez les numéros de série pour les nouveaux articles" -#: stock/serializers.py:326 stock/serializers.py:731 stock/serializers.py:972 +#: stock/serializers.py:326 stock/serializers.py:732 stock/serializers.py:973 msgid "Destination stock location" msgstr "" @@ -5716,65 +5816,65 @@ msgstr "" #: stock/serializers.py:346 msgid "Serial numbers cannot be assigned to this part" -msgstr "" +msgstr "Les numéros de série ne peuvent pas être assignés à cette pièce" -#: stock/serializers.py:588 +#: stock/serializers.py:589 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:592 +#: stock/serializers.py:593 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:597 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:626 +#: stock/serializers.py:627 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:632 +#: stock/serializers.py:633 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:640 +#: stock/serializers.py:641 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:650 stock/serializers.py:880 +#: stock/serializers.py:651 stock/serializers.py:881 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:738 +#: stock/serializers.py:739 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:743 +#: stock/serializers.py:744 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:744 +#: stock/serializers.py:745 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:749 +#: stock/serializers.py:750 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:750 +#: stock/serializers.py:751 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:760 +#: stock/serializers.py:761 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:842 +#: stock/serializers.py:843 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:870 +#: stock/serializers.py:871 msgid "Stock transaction notes" msgstr "" @@ -5787,47 +5887,51 @@ msgid "New Entry" msgstr "" #: stock/templates/stock/item.html:48 -msgid "Child Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:55 -msgid "This stock item does not have any child items" +msgid "Stock Item Allocations" msgstr "" #: stock/templates/stock/item.html:64 -#: stock/templates/stock/stock_sidebar.html:8 -msgid "Test Data" -msgstr "" - -#: stock/templates/stock/item.html:68 stock/templates/stock/item_base.html:57 -msgid "Test Report" +msgid "Child Stock Items" msgstr "" #: stock/templates/stock/item.html:72 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item.html:81 +#: stock/templates/stock/stock_sidebar.html:12 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:57 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item.html:89 msgid "Delete Test Data" msgstr "" -#: stock/templates/stock/item.html:76 +#: stock/templates/stock/item.html:93 msgid "Add Test Data" msgstr "" -#: stock/templates/stock/item.html:133 +#: stock/templates/stock/item.html:150 msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:482 +#: stock/templates/stock/item.html:154 stock/views.py:482 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:279 stock/templates/stock/item.html:304 +#: stock/templates/stock/item.html:309 stock/templates/stock/item.html:334 msgid "Add Test Result" msgstr "" -#: stock/templates/stock/item.html:324 +#: stock/templates/stock/item.html:354 msgid "Edit Test Result" msgstr "" -#: stock/templates/stock/item.html:338 +#: stock/templates/stock/item.html:368 msgid "Delete Test Result" msgstr "" @@ -5921,7 +6025,7 @@ msgstr "" #: stock/templates/stock/item_base.html:161 msgid "Navigate to previous serial number" -msgstr "" +msgstr "Accéder au numéro de série précédent" #: stock/templates/stock/item_base.html:170 msgid "next page" @@ -5929,7 +6033,7 @@ msgstr "" #: stock/templates/stock/item_base.html:170 msgid "Navigate to next serial number" -msgstr "" +msgstr "Accéder au numéro de série suivant" #: stock/templates/stock/item_base.html:197 #, python-format @@ -5952,7 +6056,7 @@ msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:206 -#: templates/js/translated/stock.js:1714 +#: templates/js/translated/stock.js:1722 msgid "Last Updated" msgstr "" @@ -5990,7 +6094,7 @@ msgstr "" #: stock/templates/stock/item_base.html:276 msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." -msgstr "" +msgstr "Cet article de stock est sérialisé - il a un numéro de série unique et la quantité ne peut pas être ajustée." #: stock/templates/stock/item_base.html:317 #: templates/js/translated/build.js:1095 @@ -6065,7 +6169,7 @@ msgstr "" #: stock/templates/stock/item_serialize.html:7 msgid "Select quantity to serialize, and unique serial numbers." -msgstr "" +msgstr "Sélectionner la quantité à sérialiser et les numéros de série uniques." #: stock/templates/stock/location.html:37 msgid "Check-in Items" @@ -6111,7 +6215,7 @@ msgid "Sublocations" msgstr "" #: stock/templates/stock/location.html:146 templates/InvenTree/search.html:164 -#: templates/stats.html:97 users/models.py:42 +#: templates/stats.html:109 users/models.py:42 msgid "Stock Locations" msgstr "" @@ -6135,7 +6239,7 @@ msgstr "" msgid "Stock Tracking" msgstr "" -#: stock/templates/stock/stock_sidebar.html:16 +#: stock/templates/stock/stock_sidebar.html:20 msgid "Child Items" msgstr "" @@ -6164,7 +6268,7 @@ msgstr "" msgid "Are you sure you want to delete this stock tracking entry?" msgstr "" -#: stock/views.py:162 +#: stock/views.py:162 templates/js/translated/stock.js:139 msgid "Edit Stock Location" msgstr "" @@ -6204,7 +6308,7 @@ msgstr "" msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:727 templates/js/translated/stock.js:1066 +#: stock/views.py:727 templates/js/translated/stock.js:1074 msgid "Confirm stock adjustment" msgstr "" @@ -6212,7 +6316,7 @@ msgstr "" msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:324 +#: stock/views.py:760 templates/js/translated/stock.js:332 msgid "Edit Stock Item" msgstr "" @@ -6224,7 +6328,7 @@ msgstr "" msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1153 templates/js/translated/stock.js:304 +#: stock/views.py:1153 templates/js/translated/stock.js:312 msgid "Duplicate Stock Item" msgstr "" @@ -6268,6 +6372,18 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/500.html:5 templates/500.html:11 +msgid "Internal Server Error" +msgstr "" + +#: templates/500.html:14 +msgid "The InvenTree server raised an internal error" +msgstr "" + +#: templates/500.html:15 +msgid "Refer to the error log in the admin interface for further details" +msgstr "" + #: templates/503.html:10 templates/503.html:35 msgid "Site is in Maintenance" msgstr "" @@ -6390,7 +6506,7 @@ msgid "Signup" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:113 msgid "Settings" msgstr "" @@ -6431,112 +6547,112 @@ msgstr "" msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:32 +#: templates/InvenTree/settings/plugin.html:33 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:37 +#: templates/InvenTree/settings/plugin.html:38 #: templates/js/translated/plugin.js:15 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: templates/InvenTree/settings/plugin.html:47 templates/navbar.html:111 #: users/models.py:39 msgid "Admin" msgstr "" -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:49 #: templates/InvenTree/settings/plugin_settings.html:28 msgid "Author" msgstr "" -#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin_settings.html:43 msgid "Version" msgstr "" -#: templates/InvenTree/settings/plugin.html:91 +#: templates/InvenTree/settings/plugin.html:92 msgid "Inactive plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:114 +#: templates/InvenTree/settings/plugin.html:115 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:123 +#: templates/InvenTree/settings/plugin.html:124 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:125 +#: templates/InvenTree/settings/plugin.html:126 msgid "Message" msgstr "" #: templates/InvenTree/settings/plugin_settings.html:10 #, python-format msgid "Plugin details for %(name)s" -msgstr "" +msgstr "Détails du plugin %(name)s" #: templates/InvenTree/settings/plugin_settings.html:17 msgid "Plugin information" -msgstr "" +msgstr "Informations sur le plugin" #: templates/InvenTree/settings/plugin_settings.html:48 msgid "no version information supplied" -msgstr "" +msgstr "aucune information de version fournie" #: templates/InvenTree/settings/plugin_settings.html:62 msgid "License" -msgstr "" +msgstr "License" #: templates/InvenTree/settings/plugin_settings.html:71 msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." -msgstr "" +msgstr "Les informations de code sont tirées de la dernière version de git pour ce plugin. Elles peuvent ne pas refléter les informations ou numéros de version officiels, mais elles se rapportent au code réellement en cours d'exécution." #: templates/InvenTree/settings/plugin_settings.html:77 msgid "Package information" -msgstr "" +msgstr "Informations du paquet" #: templates/InvenTree/settings/plugin_settings.html:83 msgid "Installation method" -msgstr "" +msgstr "Méthode d'installation" #: templates/InvenTree/settings/plugin_settings.html:86 msgid "This plugin was installed as a package" -msgstr "" +msgstr "Ce plugin a été installé en tant que paquet" #: templates/InvenTree/settings/plugin_settings.html:88 msgid "This plugin was found in a local InvenTree path" -msgstr "" +msgstr "Ce plugin a été trouvé dans un chemin local d'InvenTree" #: templates/InvenTree/settings/plugin_settings.html:94 msgid "Installation path" -msgstr "" +msgstr "Chemin d'installation" #: templates/InvenTree/settings/plugin_settings.html:100 msgid "Commit Author" -msgstr "" +msgstr "Auteur du commit" #: templates/InvenTree/settings/plugin_settings.html:104 #: templates/about.html:47 msgid "Commit Date" -msgstr "" +msgstr "Date du commit" #: templates/InvenTree/settings/plugin_settings.html:108 #: templates/about.html:40 msgid "Commit Hash" -msgstr "" +msgstr "Hash du commit" #: templates/InvenTree/settings/plugin_settings.html:112 msgid "Commit Message" -msgstr "" +msgstr "Message du commit" #: templates/InvenTree/settings/plugin_settings.html:117 msgid "Sign Status" -msgstr "" +msgstr "Statut de la signature" #: templates/InvenTree/settings/plugin_settings.html:122 msgid "Sign Key" -msgstr "" +msgstr "Clé de signature" #: templates/InvenTree/settings/po.html:7 msgid "Purchase Order Settings" @@ -6555,37 +6671,37 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:75 +#: templates/InvenTree/settings/settings.html:78 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:77 +#: templates/InvenTree/settings/settings.html:80 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:79 +#: templates/InvenTree/settings/settings.html:82 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:168 +#: templates/InvenTree/settings/settings.html:171 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:190 -#: templates/InvenTree/settings/settings.html:289 +#: templates/InvenTree/settings/settings.html:193 +#: templates/InvenTree/settings/settings.html:292 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:191 -#: templates/InvenTree/settings/settings.html:290 +#: templates/InvenTree/settings/settings.html:194 +#: templates/InvenTree/settings/settings.html:293 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:272 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:273 +#: templates/InvenTree/settings/settings.html:276 msgid "ID" msgstr "" @@ -6763,124 +6879,105 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:219 +#: templates/InvenTree/settings/user.html:220 +msgid "Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:226 +msgid "Log out active sessions (except this one)" +msgstr "" + +#: templates/InvenTree/settings/user.html:227 +msgid "Log Out Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:236 +msgid "unknown on unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:237 +msgid "unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:241 +msgid "IP Address" +msgstr "" + +#: templates/InvenTree/settings/user.html:242 +msgid "Device" +msgstr "" + +#: templates/InvenTree/settings/user.html:243 +msgid "Last Activity" +msgstr "" + +#: templates/InvenTree/settings/user.html:252 +#, python-format +msgid "%(time)s ago (this session)" +msgstr "" + +#: templates/InvenTree/settings/user.html:254 +#, python-format +msgid "%(time)s ago" +msgstr "" + +#: templates/InvenTree/settings/user.html:266 +msgid "Do you really want to remove the selected email address?" +msgstr "" + #: templates/InvenTree/settings/user_display.html:25 msgid "Theme Settings" msgstr "" -#: templates/InvenTree/settings/user.html:227 #: templates/InvenTree/settings/user_display.html:35 msgid "Select theme" msgstr "" -#: templates/InvenTree/settings/user.html:237 #: templates/InvenTree/settings/user_display.html:46 msgid "Set Theme" msgstr "" -#: templates/InvenTree/settings/user.html:246 #: templates/InvenTree/settings/user_display.html:54 msgid "Language Settings" msgstr "" -#: templates/InvenTree/settings/user.html:254 #: templates/InvenTree/settings/user_display.html:63 msgid "Select language" msgstr "" -#: templates/InvenTree/settings/user.html:270 #: templates/InvenTree/settings/user_display.html:79 #, python-format msgid "%(lang_translated)s%% translated" msgstr "" -#: templates/InvenTree/settings/user.html:272 #: templates/InvenTree/settings/user_display.html:81 msgid "No translations available" msgstr "" -#: templates/InvenTree/settings/user.html:279 #: templates/InvenTree/settings/user_display.html:88 msgid "Set Language" msgstr "" -#: templates/InvenTree/settings/user.html:281 #: templates/InvenTree/settings/user_display.html:91 msgid "Some languages are not complete" msgstr "" -#: templates/InvenTree/settings/user.html:283 #: templates/InvenTree/settings/user_display.html:93 msgid "Show only sufficent" msgstr "" -#: templates/InvenTree/settings/user.html:285 +#: templates/InvenTree/settings/user_display.html:95 +msgid "and hidden." +msgstr "" + #: templates/InvenTree/settings/user_display.html:95 msgid "Show them too" msgstr "" -#: templates/InvenTree/settings/user.html:292 #: templates/InvenTree/settings/user_display.html:101 msgid "Help the translation efforts!" msgstr "" -#: templates/InvenTree/settings/user.html:293 -#, python-format -msgid "Native language translation of the\n" -" InvenTree web application is community contributed via crowdin. Contributions are\n" -" welcomed and encouraged." -msgstr "" - -#: templates/InvenTree/settings/user.html:302 -msgid "Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:308 -msgid "Log out active sessions (except this one)" -msgstr "" - -#: templates/InvenTree/settings/user.html:309 -msgid "Log Out Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:318 -msgid "unknown on unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:319 -msgid "unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:323 -msgid "IP Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:324 -msgid "Device" -msgstr "" - -#: templates/InvenTree/settings/user.html:325 -msgid "Last Activity" -msgstr "" - -#: templates/InvenTree/settings/user.html:334 -#, python-format -msgid "%(time)s ago (this session)" -msgstr "" - -#: templates/InvenTree/settings/user.html:336 -#, python-format -msgid "%(time)s ago" -msgstr "" - -#: templates/InvenTree/settings/user.html:348 -msgid "Do you really want to remove the selected email address?" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:95 -msgid "and hidden." -msgstr "" - #: templates/InvenTree/settings/user_display.html:102 #, python-format msgid "Native language translation of the InvenTree web application is community contributed via crowdin. Contributions are welcomed and encouraged." @@ -6899,9 +6996,9 @@ msgid "InvenTree Version Information" msgstr "" #: templates/about.html:11 templates/about.html:105 -#: templates/js/translated/bom.js:395 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:573 templates/js/translated/modals.js:667 -#: templates/js/translated/modals.js:970 templates/modals.html:15 +#: templates/js/translated/bom.js:407 templates/js/translated/modals.js:53 +#: templates/js/translated/modals.js:584 templates/js/translated/modals.js:678 +#: templates/js/translated/modals.js:983 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -7122,27 +7219,27 @@ msgstr "" #: templates/allauth_2fa/setup.html:10 msgid "Step 1" -msgstr "" +msgstr "Étape 1" #: templates/allauth_2fa/setup.html:14 msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." -msgstr "" +msgstr "Scanner le QR code ci-dessous avec un générateur de token de votre choix (par exemple Google Authenticator)." #: templates/allauth_2fa/setup.html:23 msgid "Step 2" -msgstr "" +msgstr "Étape 2" #: templates/allauth_2fa/setup.html:27 msgid "Input a token generated by the app:" -msgstr "" +msgstr "Entrer un token généré par l'application :" #: templates/allauth_2fa/setup.html:35 msgid "Verify" -msgstr "" +msgstr "Vérifier" #: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 msgid "Add Link" -msgstr "" +msgstr "Ajouter un lien" #: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 msgid "Add Attachment" @@ -7150,19 +7247,19 @@ msgstr "Ajouter une pièce jointe" #: templates/base.html:97 msgid "Server Restart Required" -msgstr "" +msgstr "Redémarrage du serveur nécessaire" #: templates/base.html:100 msgid "A configuration option has been changed which requires a server restart" -msgstr "" +msgstr "Une option de configuration a été modifiée, ce qui nécessite un redémarrage du serveur" #: templates/base.html:100 msgid "Contact your system administrator for further information" -msgstr "" +msgstr "Contactez votre administrateur système pour plus d'informations" #: templates/email/build_order_required_stock.html:7 msgid "Stock is required for the following build order" -msgstr "" +msgstr "Du stock est requis pour la commande de construction suivante" #: templates/email/build_order_required_stock.html:8 #, python-format @@ -7178,13 +7275,13 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1103 +#: templates/js/translated/bom.js:1117 msgid "Required Quantity" msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:579 templates/js/translated/build.js:1189 +#: templates/js/translated/bom.js:591 templates/js/translated/build.js:1189 #: templates/js/translated/build.js:1810 #: templates/js/translated/table_filters.js:178 msgid "Available" @@ -7208,10 +7305,6 @@ msgstr "" msgid "Click on the following link to view this part" msgstr "" -#: templates/email/low_stock_notification.html:17 -msgid "Total Stock" -msgstr "" - #: templates/email/low_stock_notification.html:19 msgid "Minimum Quantity" msgstr "" @@ -7222,83 +7315,83 @@ msgstr "" #: templates/image_download.html:11 msgid "Must be a valid image URL" -msgstr "" +msgstr "Doit être une URL d'image valide" #: templates/image_download.html:12 msgid "Remote server must be accessible" -msgstr "" +msgstr "Le serveur distant doit être accessible" #: templates/image_download.html:13 msgid "Remote image must not exceed maximum allowable file size" -msgstr "" +msgstr "L'image distante ne doit pas excéder la taille maximale autorisée de fichier" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1040 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1053 msgid "No Response" -msgstr "" +msgstr "Aucune réponse" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1041 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1054 msgid "No response from the InvenTree server" -msgstr "" +msgstr "Aucune réponse du serveur InvenTree" #: templates/js/translated/api.js:192 msgid "Error 400: Bad request" -msgstr "" +msgstr "Erreur 400: Mauvaise requête" #: templates/js/translated/api.js:193 msgid "API request returned error code 400" -msgstr "" +msgstr "La requête de l'API a retourné le code d'erreur 400" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1063 msgid "Error 401: Not Authenticated" -msgstr "" +msgstr "Erreur 401: non authentifié" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1051 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1064 msgid "Authentication credentials not supplied" -msgstr "" +msgstr "Informations d’authentification non fournies" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1068 msgid "Error 403: Permission Denied" -msgstr "" +msgstr "Erreur 403: Permission refusée" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1056 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1069 msgid "You do not have the required permissions to access this function" -msgstr "" +msgstr "Vous n'avez pas les autorisations requises pour accéder à cette fonction" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1073 msgid "Error 404: Resource Not Found" -msgstr "" +msgstr "Erreur 404: Ressource introuvable" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1061 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1074 msgid "The requested resource could not be located on the server" -msgstr "" +msgstr "La ressource demandée n'a pas pu être trouvée sur le serveur" #: templates/js/translated/api.js:212 msgid "Error 405: Method Not Allowed" -msgstr "" +msgstr "Erreur 405: Méthode non autorisée" #: templates/js/translated/api.js:213 msgid "HTTP method not allowed at URL" -msgstr "" +msgstr "Méthode HTTP non autorisée à l'adresse URL" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1065 +#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1078 msgid "Error 408: Timeout" -msgstr "" +msgstr "Erreur 408: Délai dépassé" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1066 +#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1079 msgid "Connection timeout while requesting data from server" -msgstr "" +msgstr "Délai de connexion dépassé lors de la demande de données depuis le serveur" #: templates/js/translated/api.js:221 msgid "Unhandled Error Code" -msgstr "" +msgstr "Code d'erreur non géré" #: templates/js/translated/api.js:222 msgid "Error code" -msgstr "" +msgstr "Code d’erreur" #: templates/js/translated/attachment.js:78 msgid "No attachments found" -msgstr "" +msgstr "Aucune pièce jointe trouvée" #: templates/js/translated/attachment.js:100 msgid "Edit Attachment" @@ -7306,88 +7399,88 @@ msgstr "Modifier la pièce jointe" #: templates/js/translated/attachment.js:110 msgid "Confirm Delete" -msgstr "" +msgstr "Confirmer la suppression" #: templates/js/translated/attachment.js:111 msgid "Delete Attachment" -msgstr "" +msgstr "Supprimer la pièce jointe" #: templates/js/translated/attachment.js:167 msgid "Upload Date" -msgstr "" +msgstr "Date d'upload" #: templates/js/translated/attachment.js:180 msgid "Edit attachment" -msgstr "" +msgstr "Modifier la pièce jointe" #: templates/js/translated/attachment.js:187 msgid "Delete attachment" -msgstr "" +msgstr "Supprimer la pièce jointe" #: templates/js/translated/barcode.js:29 msgid "Scan barcode data here using wedge scanner" -msgstr "" +msgstr "Scannez les données du code-barres ici en utilisant un wedge scanner" #: templates/js/translated/barcode.js:31 msgid "Enter barcode data" -msgstr "" +msgstr "Saisir les données du code-barres" #: templates/js/translated/barcode.js:35 msgid "Barcode" -msgstr "" +msgstr "Code-barres" #: templates/js/translated/barcode.js:53 msgid "Enter optional notes for stock transfer" -msgstr "" +msgstr "Saisir les notes optionnelles pour le transfert de stock" #: templates/js/translated/barcode.js:54 msgid "Enter notes" -msgstr "" +msgstr "Saisir des notes" #: templates/js/translated/barcode.js:92 msgid "Server error" -msgstr "" +msgstr "Erreur serveur" #: templates/js/translated/barcode.js:113 msgid "Unknown response from server" -msgstr "" +msgstr "Réponse inconnue du serveur" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "Invalid server response" -msgstr "" +msgstr "Réponse du serveur invalide" #: templates/js/translated/barcode.js:233 msgid "Scan barcode data below" -msgstr "" +msgstr "Scanner les données du code-barres ci-dessous" #: templates/js/translated/barcode.js:280 templates/navbar.html:94 msgid "Scan Barcode" -msgstr "" +msgstr "Scanner le code-barres" #: templates/js/translated/barcode.js:291 msgid "No URL in response" -msgstr "" +msgstr "Aucune URL dans la réponse" #: templates/js/translated/barcode.js:309 msgid "Link Barcode to Stock Item" -msgstr "" +msgstr "Lier le code-barres à l'article de stock" #: templates/js/translated/barcode.js:332 msgid "This will remove the association between this stock item and the barcode" -msgstr "" +msgstr "Ceci supprimera l'association entre cet article de stock et le code-barres" #: templates/js/translated/barcode.js:338 msgid "Unlink" -msgstr "" +msgstr "Délier" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1018 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1026 msgid "Remove stock item" -msgstr "" +msgstr "Supprimer l'article de stock" #: templates/js/translated/barcode.js:439 msgid "Check Stock Items into Location" -msgstr "" +msgstr "Vérifier les articles de stock dans l'emplacement" #: templates/js/translated/barcode.js:443 #: templates/js/translated/barcode.js:573 @@ -7397,53 +7490,53 @@ msgstr "" #: templates/js/translated/barcode.js:485 #: templates/js/translated/barcode.js:612 msgid "Error transferring stock" -msgstr "" +msgstr "Erreur lors du transfert de stock" #: templates/js/translated/barcode.js:507 msgid "Stock Item already scanned" -msgstr "" +msgstr "Article de stock déjà scanné" #: templates/js/translated/barcode.js:511 msgid "Stock Item already in this location" -msgstr "" +msgstr "Article de stock déjà à cet emplacement" #: templates/js/translated/barcode.js:518 msgid "Added stock item" -msgstr "" +msgstr "Article de stock ajouté" #: templates/js/translated/barcode.js:525 msgid "Barcode does not match Stock Item" -msgstr "" +msgstr "Le code-barres ne correspond pas à l'article de stock" #: templates/js/translated/barcode.js:568 msgid "Check Into Location" -msgstr "" +msgstr "Vérifier dans l'emplacement" #: templates/js/translated/barcode.js:633 msgid "Barcode does not match a valid location" -msgstr "" +msgstr "Le code-barres ne correspond pas à un emplacement valide" #: templates/js/translated/bom.js:36 msgid "Download BOM Template" -msgstr "" +msgstr "Télécharger le template de la BOM" #: templates/js/translated/bom.js:39 templates/js/translated/bom.js:73 -#: templates/js/translated/order.js:369 templates/js/translated/stock.js:510 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:518 msgid "Format" msgstr "" #: templates/js/translated/bom.js:40 templates/js/translated/bom.js:74 -#: templates/js/translated/order.js:370 templates/js/translated/stock.js:511 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:519 msgid "Select file format" -msgstr "" +msgstr "Sélectionner un format de fichier" #: templates/js/translated/bom.js:81 msgid "Cascading" -msgstr "" +msgstr "En cascade" #: templates/js/translated/bom.js:82 msgid "Download cascading / multi-level BOM" -msgstr "" +msgstr "Télécharger la BOM en cascade / à plusieurs niveaux" #: templates/js/translated/bom.js:87 msgid "Levels" @@ -7451,19 +7544,19 @@ msgstr "Niveaux" #: templates/js/translated/bom.js:88 msgid "Select maximum number of BOM levels to export (0 = all levels)" -msgstr "" +msgstr "Sélectionner le nombre maximum de niveaux de BOM à exporter (0 = tous les niveaux)" #: templates/js/translated/bom.js:94 msgid "Include Parameter Data" -msgstr "" +msgstr "Inclure les données de paramètre" #: templates/js/translated/bom.js:95 msgid "Include part parameter data in exported BOM" -msgstr "" +msgstr "Inclure les données de paramètre de la pièce dans la BOM exporté" #: templates/js/translated/bom.js:100 msgid "Include Stock Data" -msgstr "" +msgstr "Inclure les données de stock" #: templates/js/translated/bom.js:101 msgid "Include part stock data in exported BOM" @@ -7489,87 +7582,87 @@ msgstr "" msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:340 -msgid "Select and add a new variant item using the input below" +#: templates/js/translated/bom.js:352 +msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:351 +#: templates/js/translated/bom.js:363 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:357 +#: templates/js/translated/bom.js:369 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:396 +#: templates/js/translated/bom.js:408 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:397 +#: templates/js/translated/bom.js:409 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:516 +#: templates/js/translated/bom.js:528 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:520 templates/js/translated/build.js:1171 +#: templates/js/translated/bom.js:532 templates/js/translated/build.js:1171 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:525 +#: templates/js/translated/bom.js:537 msgid "Open subassembly" msgstr "" -#: templates/js/translated/bom.js:597 +#: templates/js/translated/bom.js:609 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:612 +#: templates/js/translated/bom.js:624 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:619 +#: templates/js/translated/bom.js:631 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:668 templates/js/translated/bom.js:757 +#: templates/js/translated/bom.js:680 templates/js/translated/bom.js:769 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:728 +#: templates/js/translated/bom.js:740 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:742 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:732 +#: templates/js/translated/bom.js:744 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:734 templates/js/translated/bom.js:908 +#: templates/js/translated/bom.js:746 templates/js/translated/bom.js:920 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:891 +#: templates/js/translated/bom.js:748 templates/js/translated/bom.js:903 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:830 templates/js/translated/build.js:915 +#: templates/js/translated/bom.js:842 templates/js/translated/build.js:915 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:886 +#: templates/js/translated/bom.js:898 msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:1086 templates/js/translated/build.js:1155 +#: templates/js/translated/bom.js:1100 templates/js/translated/build.js:1155 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1108 +#: templates/js/translated/bom.js:1122 msgid "Inherited from parent BOM" msgstr "" @@ -7725,9 +7818,9 @@ msgstr "" msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1206 -#: templates/js/translated/part.js:1617 templates/js/translated/stock.js:1512 -#: templates/js/translated/stock.js:2321 +#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:1624 templates/js/translated/stock.js:1520 +#: templates/js/translated/stock.js:2479 msgid "Select" msgstr "" @@ -7735,7 +7828,7 @@ msgstr "" msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2540 +#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2698 msgid "No user information" msgstr "" @@ -7808,34 +7901,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:500 -#: templates/js/translated/company.js:757 templates/js/translated/part.js:511 -#: templates/js/translated/part.js:596 +#: templates/js/translated/company.js:757 templates/js/translated/part.js:517 +#: templates/js/translated/part.js:602 msgid "Template part" msgstr "" #: templates/js/translated/company.js:504 -#: templates/js/translated/company.js:761 templates/js/translated/part.js:515 -#: templates/js/translated/part.js:600 +#: templates/js/translated/company.js:761 templates/js/translated/part.js:521 +#: templates/js/translated/part.js:606 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:631 templates/js/translated/part.js:690 +#: templates/js/translated/company.js:631 templates/js/translated/part.js:696 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:668 templates/js/translated/part.js:732 +#: templates/js/translated/company.js:668 templates/js/translated/part.js:738 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:669 templates/js/translated/part.js:733 +#: templates/js/translated/company.js:669 templates/js/translated/part.js:739 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:688 templates/js/translated/part.js:750 +#: templates/js/translated/company.js:688 templates/js/translated/part.js:756 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:699 templates/js/translated/part.js:762 +#: templates/js/translated/company.js:699 templates/js/translated/part.js:768 msgid "Delete Parameter" msgstr "" @@ -7844,12 +7937,12 @@ msgid "No supplier parts found" msgstr "" #: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:420 +#: templates/js/translated/filters.js:429 msgid "true" msgstr "" #: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:421 +#: templates/js/translated/filters.js:430 msgid "false" msgstr "" @@ -7869,7 +7962,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:329 +#: templates/js/translated/filters.js:338 msgid "Create filter" msgstr "" @@ -7898,20 +7991,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1080 templates/modals.html:19 +#: templates/js/translated/forms.js:1082 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1471 +#: templates/js/translated/forms.js:1487 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1675 +#: templates/js/translated/forms.js:1691 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1895 +#: templates/js/translated/forms.js:1930 msgid "Clear input" msgstr "" @@ -7924,7 +8017,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1042 +#: templates/js/translated/stock.js:1050 msgid "Select Stock Items" msgstr "" @@ -7974,12 +8067,12 @@ msgid "Select Label Template" msgstr "" #: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 -#: templates/js/translated/modals.js:599 +#: templates/js/translated/modals.js:610 msgid "Cancel" msgstr "Annuler" #: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:666 templates/js/translated/modals.js:969 +#: templates/js/translated/modals.js:677 templates/js/translated/modals.js:982 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" @@ -7988,47 +8081,47 @@ msgstr "" msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:381 +#: templates/js/translated/modals.js:392 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:540 +#: templates/js/translated/modals.js:551 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:598 +#: templates/js/translated/modals.js:609 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:655 +#: templates/js/translated/modals.js:666 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:933 +#: templates/js/translated/modals.js:946 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1045 +#: templates/js/translated/modals.js:1058 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1046 +#: templates/js/translated/modals.js:1059 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1069 +#: templates/js/translated/modals.js:1082 msgid "Error requesting form data" msgstr "" @@ -8052,23 +8145,24 @@ msgstr "" msgid "Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:236 +#: templates/js/translated/model_renderers.js:249 +#: templates/js/translated/model_renderers.js:270 msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:253 +#: templates/js/translated/model_renderers.js:287 msgid "Shipment ID" msgstr "" -#: templates/js/translated/model_renderers.js:273 +#: templates/js/translated/model_renderers.js:307 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:310 +#: templates/js/translated/model_renderers.js:344 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:339 +#: templates/js/translated/model_renderers.js:373 msgid "Supplier Part ID" msgstr "" @@ -8116,7 +8210,7 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2123 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2131 msgid "Stock Status" msgstr "" @@ -8140,7 +8234,7 @@ msgstr "" msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:790 templates/js/translated/part.js:803 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:809 msgid "No purchase orders found" msgstr "" @@ -8165,7 +8259,7 @@ msgid "Total" msgstr "" #: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 -#: templates/js/translated/part.js:1834 templates/js/translated/part.js:2045 +#: templates/js/translated/part.js:1841 templates/js/translated/part.js:2052 msgid "Unit Price" msgstr "" @@ -8181,7 +8275,7 @@ msgstr "" msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1166 templates/js/translated/part.js:935 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:942 msgid "Receive line item" msgstr "" @@ -8250,9 +8344,9 @@ msgid "Delete Stock Allocation" msgstr "" #: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 -#: templates/js/translated/stock.js:1428 +#: templates/js/translated/stock.js:1436 msgid "Shipped to customer" -msgstr "" +msgstr "Livré au client" #: templates/js/translated/order.js:1967 templates/js/translated/order.js:2057 msgid "Stock location not specified" @@ -8260,15 +8354,15 @@ msgstr "" #: templates/js/translated/order.js:2297 msgid "Allocate serial numbers" -msgstr "" +msgstr "Allouer des numéros de série" #: templates/js/translated/order.js:2303 msgid "Purchase stock" -msgstr "" +msgstr "Acheter du stock" #: templates/js/translated/order.js:2310 templates/js/translated/order.js:2476 msgid "Calculate price" -msgstr "" +msgstr "Calculer le prix" #: templates/js/translated/order.js:2321 msgid "Cannot be deleted as items have been shipped" @@ -8280,7 +8374,7 @@ msgstr "" #: templates/js/translated/order.js:2382 msgid "Allocate Serial Numbers" -msgstr "" +msgstr "Allouer des numéros de série" #: templates/js/translated/order.js:2484 msgid "Update Unit Price" @@ -8292,27 +8386,27 @@ msgstr "" #: templates/js/translated/part.js:54 msgid "Part Attributes" -msgstr "" +msgstr "Attributs de la pièce" #: templates/js/translated/part.js:58 msgid "Part Creation Options" -msgstr "" +msgstr "Options de création de pièce" #: templates/js/translated/part.js:62 msgid "Part Duplication Options" -msgstr "" +msgstr "Options de duplication de pièces" #: templates/js/translated/part.js:66 msgid "Supplier Options" -msgstr "" +msgstr "Options de fournisseur" #: templates/js/translated/part.js:80 msgid "Add Part Category" -msgstr "" +msgstr "Ajouter une catégorie de pièce" #: templates/js/translated/part.js:164 msgid "Create Initial Stock" -msgstr "" +msgstr "Créer un stock initial" #: templates/js/translated/part.js:165 msgid "Create an initial stock item for this part" @@ -8348,7 +8442,7 @@ msgstr "" #: templates/js/translated/part.js:264 msgid "Copy Image" -msgstr "" +msgstr "Copier l'image" #: templates/js/translated/part.js:265 msgid "Copy image from original part" @@ -8360,7 +8454,7 @@ msgstr "" #: templates/js/translated/part.js:280 msgid "Copy Parameters" -msgstr "" +msgstr "Copier les paramètres" #: templates/js/translated/part.js:281 msgid "Copy parameter data from original part" @@ -8372,164 +8466,168 @@ msgstr "" #: templates/js/translated/part.js:338 msgid "Edit Part" -msgstr "" +msgstr "Modifier la pièce" #: templates/js/translated/part.js:340 msgid "Part edited" -msgstr "" +msgstr "Pièce modifiée" -#: templates/js/translated/part.js:412 +#: templates/js/translated/part.js:351 +msgid "Create Part Variant" +msgstr "Créer une variante de pièce" + +#: templates/js/translated/part.js:418 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:414 +#: templates/js/translated/part.js:420 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:419 +#: templates/js/translated/part.js:425 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:421 +#: templates/js/translated/part.js:427 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:444 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:448 +#: templates/js/translated/part.js:454 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:451 +#: templates/js/translated/part.js:457 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:481 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:503 templates/js/translated/part.js:588 +#: templates/js/translated/part.js:509 templates/js/translated/part.js:594 msgid "Trackable part" -msgstr "" +msgstr "Pièce traçable" -#: templates/js/translated/part.js:507 templates/js/translated/part.js:592 +#: templates/js/translated/part.js:513 templates/js/translated/part.js:598 msgid "Virtual part" -msgstr "" +msgstr "Pièce virtuelle" -#: templates/js/translated/part.js:519 +#: templates/js/translated/part.js:525 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:523 +#: templates/js/translated/part.js:529 msgid "Salable part" -msgstr "" +msgstr "Pièce vendable" -#: templates/js/translated/part.js:638 +#: templates/js/translated/part.js:644 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1005 +#: templates/js/translated/part.js:1012 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1029 +#: templates/js/translated/part.js:1036 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1096 templates/js/translated/part.js:1356 +#: templates/js/translated/part.js:1103 templates/js/translated/part.js:1363 msgid "No parts found" -msgstr "" +msgstr "Aucune pièce trouvée" -#: templates/js/translated/part.js:1266 +#: templates/js/translated/part.js:1273 msgid "No category" -msgstr "" +msgstr "Aucune catégorie" -#: templates/js/translated/part.js:1289 +#: templates/js/translated/part.js:1296 #: templates/js/translated/table_filters.js:430 msgid "Low stock" -msgstr "" +msgstr "Stock bas" -#: templates/js/translated/part.js:1380 templates/js/translated/part.js:1552 -#: templates/js/translated/stock.js:2282 +#: templates/js/translated/part.js:1387 templates/js/translated/part.js:1559 +#: templates/js/translated/stock.js:2440 msgid "Display as list" -msgstr "" +msgstr "Afficher sous forme de liste" -#: templates/js/translated/part.js:1396 +#: templates/js/translated/part.js:1403 msgid "Display as grid" -msgstr "" +msgstr "Afficher sous forme de grille" -#: templates/js/translated/part.js:1571 templates/js/translated/stock.js:2301 +#: templates/js/translated/part.js:1578 templates/js/translated/stock.js:2459 msgid "Display as tree" -msgstr "" +msgstr "Afficher sous forme d'arborescence" -#: templates/js/translated/part.js:1635 +#: templates/js/translated/part.js:1642 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1649 templates/js/translated/stock.js:2345 +#: templates/js/translated/part.js:1656 templates/js/translated/stock.js:2503 msgid "Path" -msgstr "" +msgstr "Chemin d'accès" -#: templates/js/translated/part.js:1693 +#: templates/js/translated/part.js:1700 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1744 templates/js/translated/stock.js:1234 +#: templates/js/translated/part.js:1751 templates/js/translated/stock.js:1242 msgid "Edit test result" -msgstr "" +msgstr "Modifier le résultat du test" -#: templates/js/translated/part.js:1745 templates/js/translated/stock.js:1235 +#: templates/js/translated/part.js:1752 templates/js/translated/stock.js:1243 msgid "Delete test result" -msgstr "" +msgstr "Supprimer le résultat du test" -#: templates/js/translated/part.js:1751 +#: templates/js/translated/part.js:1758 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:1773 +#: templates/js/translated/part.js:1780 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:1787 +#: templates/js/translated/part.js:1794 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:1812 +#: templates/js/translated/part.js:1819 #, python-brace-format msgid "No ${human_name} information found" msgstr "" -#: templates/js/translated/part.js:1867 +#: templates/js/translated/part.js:1874 #, python-brace-format msgid "Edit ${human_name}" msgstr "" -#: templates/js/translated/part.js:1868 +#: templates/js/translated/part.js:1875 #, python-brace-format msgid "Delete ${human_name}" msgstr "" -#: templates/js/translated/part.js:1969 +#: templates/js/translated/part.js:1976 msgid "Single Price" msgstr "" -#: templates/js/translated/part.js:1988 +#: templates/js/translated/part.js:1995 msgid "Single Price Difference" msgstr "" #: templates/js/translated/plugin.js:22 msgid "The Plugin was installed" -msgstr "" +msgstr "Le plugin a été installé" #: templates/js/translated/report.js:67 msgid "items selected" -msgstr "" +msgstr "éléments sélectionnés" #: templates/js/translated/report.js:75 msgid "Select Report Template" -msgstr "" +msgstr "Sélectionner un template de reporting" #: templates/js/translated/report.js:90 msgid "Select Test Report Template" @@ -8589,346 +8687,350 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:74 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:181 msgid "Next available serial number" -msgstr "" +msgstr "Prochain numéro de série disponible" -#: templates/js/translated/stock.js:93 templates/js/translated/stock.js:175 +#: templates/js/translated/stock.js:94 templates/js/translated/stock.js:183 msgid "Latest serial number" -msgstr "" +msgstr "Dernier numéro de série" -#: templates/js/translated/stock.js:101 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:110 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:146 +#: templates/js/translated/stock.js:154 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:186 +#: templates/js/translated/stock.js:194 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:225 +#: templates/js/translated/stock.js:233 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:231 +#: templates/js/translated/stock.js:239 msgid "Enter serial numbers for new stock (or leave blank)" -msgstr "" +msgstr "Entrez les numéros de série pour le nouveau stock (ou laisser vide)" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:382 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:387 +#: templates/js/translated/stock.js:395 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:420 msgid "Find Serial Number" -msgstr "" +msgstr "Trouver un numéro de série" -#: templates/js/translated/stock.js:416 templates/js/translated/stock.js:417 +#: templates/js/translated/stock.js:424 templates/js/translated/stock.js:425 msgid "Enter serial number" -msgstr "" +msgstr "Entrer le numéro de série" -#: templates/js/translated/stock.js:433 +#: templates/js/translated/stock.js:441 msgid "Enter a serial number" -msgstr "" +msgstr "Entrer un numéro de série" -#: templates/js/translated/stock.js:453 +#: templates/js/translated/stock.js:461 msgid "No matching serial number" -msgstr "" +msgstr "Aucun numéro de série correspondant" -#: templates/js/translated/stock.js:462 +#: templates/js/translated/stock.js:470 msgid "More than one matching result found" -msgstr "" +msgstr "Plus d'un résultat correspondant trouvé" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:515 msgid "Export Stock" -msgstr "" +msgstr "Exporter le stock" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:526 msgid "Include Sublocations" -msgstr "" +msgstr "Inclure les sous-emplacements" -#: templates/js/translated/stock.js:519 +#: templates/js/translated/stock.js:527 msgid "Include stock items in sublocations" -msgstr "" +msgstr "Inclure les articles en stock dans les sous-emplacements" -#: templates/js/translated/stock.js:628 +#: templates/js/translated/stock.js:636 msgid "Confirm stock assignment" -msgstr "" +msgstr "Confirmer l'assignation de stock" -#: templates/js/translated/stock.js:629 +#: templates/js/translated/stock.js:637 msgid "Assign Stock to Customer" -msgstr "" +msgstr "Assigner le stock au client" -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:714 msgid "Warning: Merge operation cannot be reversed" -msgstr "" +msgstr "Attention : l'opération de fusion est irréversible" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:715 msgid "Some information will be lost when merging stock items" -msgstr "" +msgstr "Certaines informations seront perdues lors de la fusion des articles en stock" -#: templates/js/translated/stock.js:709 +#: templates/js/translated/stock.js:717 msgid "Stock transaction history will be deleted for merged items" -msgstr "" +msgstr "L'historique des transactions de stock sera supprimé pour les éléments fusionnés" -#: templates/js/translated/stock.js:710 +#: templates/js/translated/stock.js:718 msgid "Supplier part information will be deleted for merged items" -msgstr "" +msgstr "Les informations sur la pièce du fournisseur seront supprimées pour les éléments fusionnés" -#: templates/js/translated/stock.js:796 +#: templates/js/translated/stock.js:804 msgid "Confirm stock item merge" -msgstr "" +msgstr "Confirmer la fusion de l'article en stock" -#: templates/js/translated/stock.js:797 +#: templates/js/translated/stock.js:805 msgid "Merge Stock Items" -msgstr "" - -#: templates/js/translated/stock.js:892 -msgid "Transfer Stock" -msgstr "" - -#: templates/js/translated/stock.js:893 -msgid "Move" -msgstr "" - -#: templates/js/translated/stock.js:899 -msgid "Count Stock" -msgstr "" +msgstr "Fusionner les articles en stock" #: templates/js/translated/stock.js:900 +msgid "Transfer Stock" +msgstr "Transférer le stock" + +#: templates/js/translated/stock.js:901 +msgid "Move" +msgstr "Transférer" + +#: templates/js/translated/stock.js:907 +msgid "Count Stock" +msgstr "Compter le stock" + +#: templates/js/translated/stock.js:908 msgid "Count" -msgstr "" +msgstr "Compter" -#: templates/js/translated/stock.js:904 +#: templates/js/translated/stock.js:912 msgid "Remove Stock" -msgstr "" +msgstr "Supprimer du stock" -#: templates/js/translated/stock.js:905 +#: templates/js/translated/stock.js:913 msgid "Take" -msgstr "" +msgstr "Supprimer" -#: templates/js/translated/stock.js:909 +#: templates/js/translated/stock.js:917 msgid "Add Stock" -msgstr "" +msgstr "Ajouter du stock" -#: templates/js/translated/stock.js:910 users/models.py:206 +#: templates/js/translated/stock.js:918 users/models.py:208 msgid "Add" -msgstr "" +msgstr "Ajouter" -#: templates/js/translated/stock.js:914 templates/stock_table.html:58 +#: templates/js/translated/stock.js:922 templates/stock_table.html:58 msgid "Delete Stock" -msgstr "" +msgstr "Supprimer le stock" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Quantity cannot be adjusted for serialized stock" -msgstr "" +msgstr "La quantité ne peut pas être ajustée pour un stock sérialisé" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Specify stock quantity" -msgstr "" +msgstr "Spécifiez la quantité du stock" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1051 msgid "You must select at least one available stock item" -msgstr "" +msgstr "Vous devez sélectionner au moins un article en stock disponible" -#: templates/js/translated/stock.js:1201 +#: templates/js/translated/stock.js:1209 msgid "PASS" -msgstr "" +msgstr "RÉUSSI" -#: templates/js/translated/stock.js:1203 +#: templates/js/translated/stock.js:1211 msgid "FAIL" -msgstr "" +msgstr "ÉCHEC" -#: templates/js/translated/stock.js:1208 +#: templates/js/translated/stock.js:1216 msgid "NO RESULT" -msgstr "" +msgstr "AUCUN RÉSULTAT" -#: templates/js/translated/stock.js:1230 +#: templates/js/translated/stock.js:1238 msgid "Add test result" -msgstr "" +msgstr "Ajouter un résultat de test" -#: templates/js/translated/stock.js:1256 +#: templates/js/translated/stock.js:1264 msgid "No test results found" -msgstr "" +msgstr "Aucun résultat de test trouvé" -#: templates/js/translated/stock.js:1313 +#: templates/js/translated/stock.js:1321 msgid "Test Date" -msgstr "" +msgstr "Date du test" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1428 msgid "In production" -msgstr "" - -#: templates/js/translated/stock.js:1424 -msgid "Installed in Stock Item" -msgstr "" +msgstr "En production" #: templates/js/translated/stock.js:1432 +msgid "Installed in Stock Item" +msgstr "Article en stock installé dans un autre article en stock" + +#: templates/js/translated/stock.js:1440 msgid "Assigned to Sales Order" -msgstr "" +msgstr "Assigné à une commande de vente" -#: templates/js/translated/stock.js:1438 +#: templates/js/translated/stock.js:1446 msgid "No stock location set" -msgstr "" - -#: templates/js/translated/stock.js:1596 -msgid "Stock item is in production" -msgstr "" - -#: templates/js/translated/stock.js:1601 -msgid "Stock item assigned to sales order" -msgstr "" +msgstr "Aucun emplacement de stock défini" #: templates/js/translated/stock.js:1604 +msgid "Stock item is in production" +msgstr "L'article de stock est en production" + +#: templates/js/translated/stock.js:1609 +msgid "Stock item assigned to sales order" +msgstr "L'article en stock a été assigné à une commande de vente" + +#: templates/js/translated/stock.js:1612 msgid "Stock item assigned to customer" -msgstr "" - -#: templates/js/translated/stock.js:1608 -msgid "Stock item has expired" -msgstr "" - -#: templates/js/translated/stock.js:1610 -msgid "Stock item will expire soon" -msgstr "" +msgstr "L'article en stock a été assigné à un client" #: templates/js/translated/stock.js:1616 -msgid "Serialized stock item has been allocated" -msgstr "" +msgid "Stock item has expired" +msgstr "L'article en stock a expiré" #: templates/js/translated/stock.js:1618 +msgid "Stock item will expire soon" +msgstr "L'article en stock va bientôt expirer" + +#: templates/js/translated/stock.js:1624 +msgid "Serialized stock item has been allocated" +msgstr "L'article de stock sérialisé a été alloué" + +#: templates/js/translated/stock.js:1626 msgid "Stock item has been fully allocated" -msgstr "" +msgstr "L'article de stock a été complètement alloué" -#: templates/js/translated/stock.js:1620 +#: templates/js/translated/stock.js:1628 msgid "Stock item has been partially allocated" -msgstr "" +msgstr "L'article de stock a été partiellement alloué" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1633 msgid "Stock item has been installed in another item" -msgstr "" - -#: templates/js/translated/stock.js:1632 -msgid "Stock item has been rejected" -msgstr "" - -#: templates/js/translated/stock.js:1634 -msgid "Stock item is lost" -msgstr "" - -#: templates/js/translated/stock.js:1636 -msgid "Stock item is destroyed" -msgstr "" +msgstr "L'article en stock a été installé dans un autre article" #: templates/js/translated/stock.js:1640 +msgid "Stock item has been rejected" +msgstr "L'article de stock a été rejeté" + +#: templates/js/translated/stock.js:1642 +msgid "Stock item is lost" +msgstr "L'article de stock est perdu" + +#: templates/js/translated/stock.js:1644 +msgid "Stock item is destroyed" +msgstr "L'article de stock est détruit" + +#: templates/js/translated/stock.js:1648 #: templates/js/translated/table_filters.js:188 msgid "Depleted" -msgstr "" +msgstr "Epuisé" -#: templates/js/translated/stock.js:1690 +#: templates/js/translated/stock.js:1698 msgid "Stocktake" -msgstr "" +msgstr "Prise d'inventaire" -#: templates/js/translated/stock.js:1763 +#: templates/js/translated/stock.js:1771 msgid "Supplier part not specified" -msgstr "" +msgstr "Pièce de fournisseur non précisée" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1809 msgid "No stock items matching query" -msgstr "" +msgstr "Aucun article de stock ne correspond à la requête" -#: templates/js/translated/stock.js:1822 templates/js/translated/stock.js:1870 +#: templates/js/translated/stock.js:1830 templates/js/translated/stock.js:1878 msgid "items" -msgstr "" +msgstr "articles" -#: templates/js/translated/stock.js:1910 +#: templates/js/translated/stock.js:1918 msgid "batches" -msgstr "" +msgstr "lots" -#: templates/js/translated/stock.js:1937 +#: templates/js/translated/stock.js:1945 msgid "locations" -msgstr "" +msgstr "emplacements" -#: templates/js/translated/stock.js:1939 +#: templates/js/translated/stock.js:1947 msgid "Undefined location" -msgstr "" +msgstr "Emplacement indéfini" -#: templates/js/translated/stock.js:2138 +#: templates/js/translated/stock.js:2146 msgid "Set Stock Status" -msgstr "" +msgstr "Définir l'état du stock" -#: templates/js/translated/stock.js:2152 +#: templates/js/translated/stock.js:2160 msgid "Select Status Code" -msgstr "" +msgstr "Sélectionner le code de statut" -#: templates/js/translated/stock.js:2153 +#: templates/js/translated/stock.js:2161 msgid "Status code must be selected" -msgstr "" +msgstr "Le code de statut doit être sélectionné" -#: templates/js/translated/stock.js:2377 +#: templates/js/translated/stock.js:2340 +msgid "Allocated Quantity" +msgstr "Quantité Allouée" + +#: templates/js/translated/stock.js:2535 msgid "Invalid date" -msgstr "" +msgstr "Date invalide" -#: templates/js/translated/stock.js:2399 +#: templates/js/translated/stock.js:2557 msgid "Details" msgstr "Détails" -#: templates/js/translated/stock.js:2424 +#: templates/js/translated/stock.js:2582 msgid "Location no longer exists" -msgstr "" +msgstr "L'emplacement n'existe plus" -#: templates/js/translated/stock.js:2443 +#: templates/js/translated/stock.js:2601 msgid "Purchase order no longer exists" -msgstr "" +msgstr "La commande d'achat n'existe plus" -#: templates/js/translated/stock.js:2462 +#: templates/js/translated/stock.js:2620 msgid "Customer no longer exists" -msgstr "" +msgstr "Le client n'existe plus" -#: templates/js/translated/stock.js:2480 +#: templates/js/translated/stock.js:2638 msgid "Stock item no longer exists" -msgstr "" +msgstr "L'article de stock n'existe plus" -#: templates/js/translated/stock.js:2503 +#: templates/js/translated/stock.js:2661 msgid "Added" -msgstr "" +msgstr "Ajouté" -#: templates/js/translated/stock.js:2511 +#: templates/js/translated/stock.js:2669 msgid "Removed" -msgstr "" +msgstr "Supprimé" -#: templates/js/translated/stock.js:2552 +#: templates/js/translated/stock.js:2710 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2553 +#: templates/js/translated/stock.js:2711 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2604 +#: templates/js/translated/stock.js:2762 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2655 +#: templates/js/translated/stock.js:2813 msgid "Uninstall Stock Item" msgstr "" #: templates/js/translated/table_filters.js:56 msgid "Trackable Part" -msgstr "" +msgstr "Pièce traçable" #: templates/js/translated/table_filters.js:60 msgid "Assembled Part" @@ -8936,7 +9038,7 @@ msgstr "" #: templates/js/translated/table_filters.js:64 msgid "Validated" -msgstr "" +msgstr "Validée" #: templates/js/translated/table_filters.js:72 msgid "Allow Variant Stock" @@ -8945,17 +9047,17 @@ msgstr "" #: templates/js/translated/table_filters.js:110 #: templates/js/translated/table_filters.js:183 msgid "Include sublocations" -msgstr "" +msgstr "Inclure les sous-emplacements" #: templates/js/translated/table_filters.js:111 msgid "Include locations" -msgstr "" +msgstr "Inclure les emplacements" #: templates/js/translated/table_filters.js:121 #: templates/js/translated/table_filters.js:122 #: templates/js/translated/table_filters.js:407 msgid "Include subcategories" -msgstr "" +msgstr "Inclure les sous-catégories" #: templates/js/translated/table_filters.js:126 #: templates/js/translated/table_filters.js:442 @@ -8965,64 +9067,64 @@ msgstr "" #: templates/js/translated/table_filters.js:136 #: templates/js/translated/table_filters.js:218 msgid "Is Serialized" -msgstr "" +msgstr "A un numéro de série" #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:225 msgid "Serial number GTE" -msgstr "" +msgstr "Numéro de série PGE" #: templates/js/translated/table_filters.js:140 #: templates/js/translated/table_filters.js:226 msgid "Serial number greater than or equal to" -msgstr "" +msgstr "Numéro de série supérieur ou égal à" #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:229 msgid "Serial number LTE" -msgstr "" +msgstr "Numéro de série PPE" #: templates/js/translated/table_filters.js:144 #: templates/js/translated/table_filters.js:230 msgid "Serial number less than or equal to" -msgstr "" +msgstr "Numéro de série inférieur ou égal à" #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:148 #: templates/js/translated/table_filters.js:221 #: templates/js/translated/table_filters.js:222 msgid "Serial number" -msgstr "" +msgstr "Numéro de série" #: templates/js/translated/table_filters.js:152 #: templates/js/translated/table_filters.js:239 msgid "Batch code" -msgstr "" +msgstr "Code de lot" #: templates/js/translated/table_filters.js:163 #: templates/js/translated/table_filters.js:379 msgid "Active parts" -msgstr "" +msgstr "Pièces actives" #: templates/js/translated/table_filters.js:164 msgid "Show stock for active parts" -msgstr "" +msgstr "Afficher le stock pour les pièces actives" #: templates/js/translated/table_filters.js:169 msgid "Part is an assembly" -msgstr "" +msgstr "La pièce est un assemblage" #: templates/js/translated/table_filters.js:173 msgid "Is allocated" -msgstr "" +msgstr "Est alloué" #: templates/js/translated/table_filters.js:174 msgid "Item has been allocated" -msgstr "" +msgstr "L'élément a été alloué" #: templates/js/translated/table_filters.js:179 msgid "Stock is available for use" -msgstr "" +msgstr "Le stock est disponible pour utilisation" #: templates/js/translated/table_filters.js:184 msgid "Include stock in sublocations" @@ -9058,56 +9160,56 @@ msgstr "" #: templates/js/translated/table_filters.js:209 msgid "Show stock items which are installed in another item" -msgstr "" +msgstr "Afficher les articles de stock qui sont installés dans un autre article" #: templates/js/translated/table_filters.js:214 msgid "Show items which have been assigned to a customer" -msgstr "" +msgstr "Afficher les articles qui ont été assignés à un client" #: templates/js/translated/table_filters.js:234 #: templates/js/translated/table_filters.js:235 msgid "Stock status" -msgstr "" +msgstr "État du stock" #: templates/js/translated/table_filters.js:243 msgid "Has purchase price" -msgstr "" +msgstr "A un prix d'achat" #: templates/js/translated/table_filters.js:244 msgid "Show stock items which have a purchase price set" -msgstr "" +msgstr "Afficher les articles de stock qui ont un prix d'achat défini" #: templates/js/translated/table_filters.js:253 msgid "Show stock items which have expired" -msgstr "" +msgstr "Afficher les articles de stock qui ont expiré" #: templates/js/translated/table_filters.js:259 msgid "Show stock which is close to expiring" -msgstr "" +msgstr "Afficher le stock qui est proche de l'expiration" #: templates/js/translated/table_filters.js:290 msgid "Build status" -msgstr "" +msgstr "État de la construction" #: templates/js/translated/table_filters.js:303 #: templates/js/translated/table_filters.js:344 msgid "Assigned to me" -msgstr "" +msgstr "Assigné à moi" #: templates/js/translated/table_filters.js:320 #: templates/js/translated/table_filters.js:331 #: templates/js/translated/table_filters.js:352 msgid "Order status" -msgstr "" +msgstr "État de la commande" #: templates/js/translated/table_filters.js:336 #: templates/js/translated/table_filters.js:357 msgid "Outstanding" -msgstr "" +msgstr "En suspens" #: templates/js/translated/table_filters.js:408 msgid "Include parts in subcategories" -msgstr "" +msgstr "Inclure les pièces des sous-catégories" #: templates/js/translated/table_filters.js:412 msgid "Has IPN" @@ -9115,64 +9217,64 @@ msgstr "A un IPN" #: templates/js/translated/table_filters.js:413 msgid "Part has internal part number" -msgstr "" +msgstr "La pièce a un numéro de pièce interne" #: templates/js/translated/table_filters.js:418 msgid "Show active parts" -msgstr "" +msgstr "Afficher les pièces actives" #: templates/js/translated/table_filters.js:426 msgid "Stock available" -msgstr "" +msgstr "Stock disponible" #: templates/js/translated/table_filters.js:454 msgid "Purchasable" -msgstr "" +msgstr "Achetable" #: templates/js/translated/tables.js:368 msgid "Loading data" -msgstr "" +msgstr "Chargement des données" #: templates/js/translated/tables.js:371 msgid "rows per page" -msgstr "" +msgstr "résultats par page" #: templates/js/translated/tables.js:376 msgid "Showing all rows" -msgstr "" +msgstr "Afficher toutes les lignes" #: templates/js/translated/tables.js:378 msgid "Showing" -msgstr "" +msgstr "Afficher" #: templates/js/translated/tables.js:378 msgid "to" -msgstr "" +msgstr "à" #: templates/js/translated/tables.js:378 msgid "of" -msgstr "" +msgstr "de" #: templates/js/translated/tables.js:378 msgid "rows" -msgstr "" +msgstr "lignes" #: templates/js/translated/tables.js:382 templates/search_form.html:6 #: templates/search_form.html:7 msgid "Search" -msgstr "" +msgstr "Rechercher" #: templates/js/translated/tables.js:385 msgid "No matching results" -msgstr "" +msgstr "Aucun résultat correspondant n'a été trouvé" #: templates/js/translated/tables.js:388 msgid "Hide/Show pagination" -msgstr "" +msgstr "Masquer/Afficher la pagination" #: templates/js/translated/tables.js:391 msgid "Refresh" -msgstr "" +msgstr "Actualiser" #: templates/js/translated/tables.js:394 msgid "Toggle" @@ -9180,51 +9282,51 @@ msgstr "" #: templates/js/translated/tables.js:397 msgid "Columns" -msgstr "" +msgstr "Colonnes" #: templates/js/translated/tables.js:400 msgid "All" -msgstr "" +msgstr "Tout" #: templates/navbar.html:42 msgid "Buy" -msgstr "" +msgstr "Acheter" #: templates/navbar.html:54 msgid "Sell" msgstr "Ventes" -#: templates/navbar.html:113 +#: templates/navbar.html:114 msgid "Logout" -msgstr "" +msgstr "Se déconnecter" -#: templates/navbar.html:115 +#: templates/navbar.html:116 msgid "Login" -msgstr "" +msgstr "Se connecter" #: templates/navbar.html:136 msgid "About InvenTree" -msgstr "" +msgstr "À propos d'InvenTree" #: templates/navbar_demo.html:5 msgid "InvenTree demo mode" -msgstr "" +msgstr "Mode démo de InvenTree" #: templates/qr_code.html:11 msgid "QR data not provided" -msgstr "" +msgstr "Données QR non fournies" #: templates/registration/logged_out.html:6 msgid "You were logged out successfully." -msgstr "" +msgstr "Vous avez été déconnecté avec succès." #: templates/registration/logged_out.html:8 msgid "Log in again" -msgstr "" +msgstr "Se reconnecter" #: templates/stats.html:9 msgid "Server" -msgstr "" +msgstr "Serveur" #: templates/stats.html:13 msgid "Instance Name" @@ -9232,45 +9334,57 @@ msgstr "" #: templates/stats.html:18 msgid "Database" -msgstr "" +msgstr "Base de données" #: templates/stats.html:26 msgid "Server is running in debug mode" -msgstr "" +msgstr "Le serveur fonctionne en mode débogage" #: templates/stats.html:33 msgid "Docker Mode" -msgstr "" +msgstr "Mode Docker" #: templates/stats.html:34 msgid "Server is deployed using docker" -msgstr "" +msgstr "Le serveur est déployé en utilisant docker" -#: templates/stats.html:40 -msgid "Server status" -msgstr "" +#: templates/stats.html:39 +msgid "Plugin Support" +msgstr "Support des plugins" #: templates/stats.html:43 -msgid "Healthy" -msgstr "" +msgid "Plugin support enabled" +msgstr "Prise en charge des plugins activée" #: templates/stats.html:45 -msgid "Issues detected" -msgstr "" +msgid "Plugin support disabled" +msgstr "Prise en charge des plugins désactivée" #: templates/stats.html:52 +msgid "Server status" +msgstr "Statut serveur" + +#: templates/stats.html:55 +msgid "Healthy" +msgstr "Bon" + +#: templates/stats.html:57 +msgid "Issues detected" +msgstr "Problèmes détectés" + +#: templates/stats.html:64 msgid "Background Worker" msgstr "" -#: templates/stats.html:55 +#: templates/stats.html:67 msgid "Background worker not running" msgstr "" -#: templates/stats.html:63 +#: templates/stats.html:75 msgid "Email Settings" msgstr "" -#: templates/stats.html:66 +#: templates/stats.html:78 msgid "Email settings not configured" msgstr "" @@ -9312,89 +9426,89 @@ msgstr "" #: templates/stock_table.html:52 msgid "Merge selected stock items" -msgstr "" +msgstr "Fusionner les éléments de stock sélectionnés" #: templates/stock_table.html:52 msgid "Merge stock" -msgstr "" +msgstr "Fusionner le stock" #: templates/stock_table.html:53 msgid "Order selected items" -msgstr "" +msgstr "Commander les éléments sélectionnés" #: templates/stock_table.html:55 msgid "Change status" -msgstr "" +msgstr "Changer l'état du stock" #: templates/stock_table.html:55 msgid "Change stock status" -msgstr "" +msgstr "Changer l'état du stock" #: templates/stock_table.html:58 msgid "Delete selected items" -msgstr "" +msgstr "Supprimer les éléments sélectionnés" #: templates/yesnolabel.html:4 msgid "Yes" -msgstr "" +msgstr "Oui" #: templates/yesnolabel.html:6 msgid "No" -msgstr "" +msgstr "Non" #: users/admin.py:64 msgid "Users" -msgstr "" +msgstr "Utilisateurs" #: users/admin.py:65 msgid "Select which users are assigned to this group" -msgstr "" +msgstr "Sélectionner quels utilisateurs sont assignés à ce groupe" #: users/admin.py:187 msgid "The following users are members of multiple groups:" -msgstr "" +msgstr "Les utilisateurs suivants sont membres de plusieurs groupes:" #: users/admin.py:210 msgid "Personal info" -msgstr "" +msgstr "Informations personnelles" #: users/admin.py:211 msgid "Permissions" -msgstr "" +msgstr "Droits" #: users/admin.py:214 msgid "Important dates" -msgstr "" +msgstr "Dates importantes" -#: users/models.py:193 +#: users/models.py:195 msgid "Permission set" -msgstr "" +msgstr "Droit défini" -#: users/models.py:201 +#: users/models.py:203 msgid "Group" -msgstr "" - -#: users/models.py:204 -msgid "View" -msgstr "" - -#: users/models.py:204 -msgid "Permission to view items" -msgstr "" +msgstr "Groupe" #: users/models.py:206 +msgid "View" +msgstr "Vue" + +#: users/models.py:206 +msgid "Permission to view items" +msgstr "Droit de voir des éléments" + +#: users/models.py:208 msgid "Permission to add items" -msgstr "" - -#: users/models.py:208 -msgid "Change" -msgstr "" - -#: users/models.py:208 -msgid "Permissions to edit items" -msgstr "" +msgstr "Droit d'ajouter des éléments" #: users/models.py:210 -msgid "Permission to delete items" -msgstr "" +msgid "Change" +msgstr "Modifier" + +#: users/models.py:210 +msgid "Permissions to edit items" +msgstr "Droit de modifier des élément" + +#: users/models.py:212 +msgid "Permission to delete items" +msgstr "Droit de supprimer des éléments" diff --git a/InvenTree/locale/he/LC_MESSAGES/django.po b/InvenTree/locale/he/LC_MESSAGES/django.po index ce530b28cd..050d2b4641 100644 --- a/InvenTree/locale/he/LC_MESSAGES/django.po +++ b/InvenTree/locale/he/LC_MESSAGES/django.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-10 03:54+0000\n" -"PO-Revision-Date: 2022-01-10 03:57\n" +"POT-Creation-Date: 2022-01-29 00:17+0000\n" +"PO-Revision-Date: 2022-01-29 04:45\n" "Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -18,168 +18,169 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 138\n" -#: InvenTree/api.py:64 +#: InvenTree/api.py:55 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:110 +#: InvenTree/api.py:101 msgid "No action specified" -msgstr "" +msgstr "לא פורטה הפעולה" -#: InvenTree/api.py:124 +#: InvenTree/api.py:116 msgid "No matching action found" -msgstr "" +msgstr "פעולה מבוקשת לא נמצאה" #: InvenTree/fields.py:100 msgid "Enter date" -msgstr "" +msgstr "הזן תאריך סיום" #: InvenTree/forms.py:126 build/forms.py:48 build/forms.py:69 order/forms.py:24 #: order/forms.py:35 order/forms.py:46 order/forms.py:57 #: templates/account/email_confirm.html:20 templates/js/translated/forms.js:595 msgid "Confirm" -msgstr "" +msgstr "אשר" #: InvenTree/forms.py:142 msgid "Confirm delete" -msgstr "" +msgstr "אשר מחיקה" #: InvenTree/forms.py:143 msgid "Confirm item deletion" -msgstr "" +msgstr "אשר מחיקה" #: InvenTree/forms.py:174 msgid "Enter password" -msgstr "" +msgstr "הכנס סיסמה" #: InvenTree/forms.py:175 msgid "Enter new password" -msgstr "" +msgstr "הכנס סיסמה חדשה" #: InvenTree/forms.py:182 msgid "Confirm password" -msgstr "" +msgstr "אישור סיסמה" #: InvenTree/forms.py:183 msgid "Confirm new password" -msgstr "" +msgstr "אשר סיסמה חדשה" #: InvenTree/forms.py:215 msgid "Select Category" -msgstr "" +msgstr "בחר קטגוריה" #: InvenTree/forms.py:236 msgid "Email (again)" -msgstr "" +msgstr "אימייל (שנית)" #: InvenTree/forms.py:240 msgid "Email address confirmation" -msgstr "" +msgstr "אישור כתובת אימייל" #: InvenTree/forms.py:260 msgid "You must type the same email each time." -msgstr "" +msgstr "חובה לרשום את אותו אימייל בכל פעם." -#: InvenTree/helpers.py:437 +#: InvenTree/helpers.py:439 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:444 order/models.py:279 order/models.py:420 +#: InvenTree/helpers.py:446 order/models.py:282 order/models.py:425 #: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:447 +#: InvenTree/helpers.py:449 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:469 InvenTree/helpers.py:472 InvenTree/helpers.py:475 -#: InvenTree/helpers.py:500 +#: InvenTree/helpers.py:471 InvenTree/helpers.py:474 InvenTree/helpers.py:477 +#: InvenTree/helpers.py:502 #, python-brace-format msgid "Invalid group: {g}" -msgstr "" +msgstr "קבוצה שגויה: {g}" -#: InvenTree/helpers.py:510 +#: InvenTree/helpers.py:512 #, python-brace-format msgid "Invalid group {group}" -msgstr "" +msgstr "קבוצה שגויה {group}" -#: InvenTree/helpers.py:516 +#: InvenTree/helpers.py:518 #, python-brace-format msgid "Invalid/no group {group}" -msgstr "" +msgstr "קבוצה שגויה / לא נמצאה {group}" -#: InvenTree/helpers.py:522 +#: InvenTree/helpers.py:524 msgid "No serial numbers found" -msgstr "" +msgstr "מספרים סידוריים לא נמצאו" -#: InvenTree/helpers.py:526 +#: InvenTree/helpers.py:528 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" -msgstr "" +msgstr "כמות המספרים הסידוריים ({s}) מוכרים להיות תואמים לכמות ({q})" #: InvenTree/models.py:120 msgid "Missing file" -msgstr "" +msgstr "קובץ חסר" #: InvenTree/models.py:121 msgid "Missing external link" -msgstr "" +msgstr "חסר קישור חיצוני" -#: InvenTree/models.py:132 stock/models.py:1967 +#: InvenTree/models.py:132 stock/models.py:1995 #: templates/js/translated/attachment.js:119 msgid "Attachment" -msgstr "" +msgstr "קובץ מצורף" #: InvenTree/models.py:133 msgid "Select file to attach" -msgstr "" +msgstr "בחר קובץ לצירוף" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:124 part/models.py:828 +#: company/models.py:564 order/models.py:127 part/models.py:830 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:540 -#: templates/js/translated/company.js:829 templates/js/translated/part.js:1317 +#: templates/js/translated/company.js:829 templates/js/translated/part.js:1324 msgid "Link" -msgstr "" +msgstr "קישור" -#: InvenTree/models.py:140 build/models.py:330 part/models.py:829 -#: stock/models.py:527 +#: InvenTree/models.py:140 build/models.py:332 part/models.py:831 +#: stock/models.py:529 msgid "Link to external URL" -msgstr "" +msgstr "קישור חיצוני" #: InvenTree/models.py:143 templates/js/translated/attachment.js:163 msgid "Comment" -msgstr "" +msgstr "הערה" #: InvenTree/models.py:143 msgid "File comment" -msgstr "" +msgstr "הערת קובץ" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 -#: common/models.py:1214 part/models.py:2258 part/models.py:2278 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1223 +#: common/models.py:1224 common/models.py:1452 common/models.py:1453 +#: part/models.py:2265 part/models.py:2285 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2534 +#: templates/js/translated/stock.js:2692 msgid "User" -msgstr "" +msgstr "משתמש" #: InvenTree/models.py:153 msgid "upload date" -msgstr "" +msgstr "תאריך העלאה" #: InvenTree/models.py:176 msgid "Filename must not be empty" -msgstr "" +msgstr "חובה למלא שם קובץ" #: InvenTree/models.py:199 msgid "Invalid attachment directory" -msgstr "" +msgstr "תיקיית קובץ שגויה" #: InvenTree/models.py:209 #, python-brace-format msgid "Filename contains illegal character '{c}'" -msgstr "" +msgstr "שם הקובץ מכיל תו '{c}' שאינו חוקי" #: InvenTree/models.py:212 msgid "Filename missing extension" @@ -191,146 +192,146 @@ msgstr "" #: InvenTree/models.py:226 msgid "Error renaming file" -msgstr "" +msgstr "שגיאה בשינוי שם פריט" #: InvenTree/models.py:261 msgid "Invalid choice" -msgstr "" +msgstr "בחירה שגויה" -#: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 -#: label/models.py:112 part/models.py:772 part/models.py:2442 -#: plugin/models.py:40 report/models.py:181 +#: InvenTree/models.py:277 InvenTree/models.py:278 common/models.py:1438 +#: company/models.py:415 label/models.py:112 part/models.py:774 +#: part/models.py:2449 plugin/models.py:40 report/models.py:181 #: templates/InvenTree/settings/mixins/urls.html:13 -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:125 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:279 -#: templates/js/translated/company.js:641 templates/js/translated/part.js:561 -#: templates/js/translated/part.js:700 templates/js/translated/part.js:1624 -#: templates/js/translated/stock.js:2327 +#: templates/InvenTree/settings/settings.html:282 +#: templates/js/translated/company.js:641 templates/js/translated/part.js:567 +#: templates/js/translated/part.js:706 templates/js/translated/part.js:1631 +#: templates/js/translated/stock.js:2485 msgid "Name" -msgstr "" +msgstr "שם" -#: InvenTree/models.py:284 build/models.py:207 +#: InvenTree/models.py:284 build/models.py:209 #: build/templates/build/detail.html:25 company/models.py:354 #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:122 part/models.py:795 part/templates/part/category.html:74 +#: order/models.py:125 part/models.py:797 part/templates/part/category.html:74 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 #: stock/templates/stock/location.html:93 #: templates/InvenTree/settings/plugin_settings.html:33 -#: templates/js/translated/bom.js:327 templates/js/translated/bom.js:540 +#: templates/js/translated/bom.js:339 templates/js/translated/bom.js:552 #: templates/js/translated/build.js:1682 templates/js/translated/company.js:345 #: templates/js/translated/company.js:551 #: templates/js/translated/company.js:840 templates/js/translated/order.js:836 #: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 -#: templates/js/translated/part.js:620 templates/js/translated/part.js:992 -#: templates/js/translated/part.js:1077 templates/js/translated/part.js:1247 -#: templates/js/translated/part.js:1643 templates/js/translated/part.js:1712 -#: templates/js/translated/stock.js:1569 templates/js/translated/stock.js:2339 -#: templates/js/translated/stock.js:2384 +#: templates/js/translated/part.js:626 templates/js/translated/part.js:999 +#: templates/js/translated/part.js:1084 templates/js/translated/part.js:1254 +#: templates/js/translated/part.js:1650 templates/js/translated/part.js:1719 +#: templates/js/translated/stock.js:1577 templates/js/translated/stock.js:2314 +#: templates/js/translated/stock.js:2497 templates/js/translated/stock.js:2542 msgid "Description" -msgstr "" +msgstr "תיאור" #: InvenTree/models.py:285 msgid "Description (optional)" -msgstr "" +msgstr "תיאור (לא חובה)" #: InvenTree/models.py:293 msgid "parent" -msgstr "" +msgstr "מקור" -#: InvenTree/serializers.py:65 part/models.py:2727 +#: InvenTree/serializers.py:65 part/models.py:2734 msgid "Must be a valid number" -msgstr "" +msgstr "המספר חייב להיות תקין" #: InvenTree/serializers.py:299 msgid "Filename" -msgstr "" +msgstr "שם קובץ" + +#: InvenTree/settings.py:661 +msgid "German" +msgstr "גרמנית" + +#: InvenTree/settings.py:662 +msgid "Greek" +msgstr "יוונית" #: InvenTree/settings.py:663 -msgid "German" -msgstr "" +msgid "English" +msgstr "אנגלית" #: InvenTree/settings.py:664 -msgid "Greek" -msgstr "" +msgid "Spanish" +msgstr "ספרדית" #: InvenTree/settings.py:665 -msgid "English" -msgstr "" +msgid "Spanish (Mexican)" +msgstr "ספרדית (מקסיקנית)" #: InvenTree/settings.py:666 -msgid "Spanish" -msgstr "" +msgid "French" +msgstr "צרפתית" #: InvenTree/settings.py:667 -msgid "Spanish (Mexican)" -msgstr "" +msgid "Hebrew" +msgstr "עברית" #: InvenTree/settings.py:668 -msgid "French" -msgstr "" +msgid "Italian" +msgstr "איטלקית" #: InvenTree/settings.py:669 -msgid "Hebrew" -msgstr "" +msgid "Japanese" +msgstr "יפנית" #: InvenTree/settings.py:670 -msgid "Italian" -msgstr "" +msgid "Korean" +msgstr "קוריאנית" #: InvenTree/settings.py:671 -msgid "Japanese" -msgstr "" +msgid "Dutch" +msgstr "הולנדית" #: InvenTree/settings.py:672 -msgid "Korean" -msgstr "" +msgid "Norwegian" +msgstr "נורווגית" #: InvenTree/settings.py:673 -msgid "Dutch" -msgstr "" +msgid "Polish" +msgstr "פולנית" #: InvenTree/settings.py:674 -msgid "Norwegian" -msgstr "" +msgid "Portugese" +msgstr "פורטוגזית" #: InvenTree/settings.py:675 -msgid "Polish" -msgstr "" +msgid "Russian" +msgstr "רוסית" #: InvenTree/settings.py:676 -msgid "Portugese" -msgstr "" +msgid "Swedish" +msgstr "שוודית" #: InvenTree/settings.py:677 -msgid "Russian" -msgstr "" +msgid "Thai" +msgstr "תאילנדית" #: InvenTree/settings.py:678 -msgid "Swedish" -msgstr "" +msgid "Turkish" +msgstr "טורקית" #: InvenTree/settings.py:679 -msgid "Thai" -msgstr "" +msgid "Vietnamese" +msgstr "ווייטנאמית" #: InvenTree/settings.py:680 -msgid "Turkish" -msgstr "" - -#: InvenTree/settings.py:681 -msgid "Vietnamese" -msgstr "" - -#: InvenTree/settings.py:682 msgid "Chinese" -msgstr "" +msgstr "סינית" #: InvenTree/status.py:94 msgid "Background worker check failed" @@ -347,57 +348,57 @@ msgstr "" #: InvenTree/status_codes.py:101 InvenTree/status_codes.py:142 #: InvenTree/status_codes.py:316 templates/js/translated/table_filters.js:313 msgid "Pending" -msgstr "" +msgstr "בהמתנה" #: InvenTree/status_codes.py:102 msgid "Placed" -msgstr "" +msgstr "מוקם" #: InvenTree/status_codes.py:103 InvenTree/status_codes.py:319 #: order/templates/order/order_base.html:128 #: order/templates/order/sales_order_base.html:132 msgid "Complete" -msgstr "" +msgstr "הושלם" #: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 #: InvenTree/status_codes.py:318 msgid "Cancelled" -msgstr "" +msgstr "מבוטל" #: InvenTree/status_codes.py:105 InvenTree/status_codes.py:145 #: InvenTree/status_codes.py:187 msgid "Lost" -msgstr "" +msgstr "אבד" #: InvenTree/status_codes.py:106 InvenTree/status_codes.py:146 #: InvenTree/status_codes.py:189 msgid "Returned" -msgstr "" +msgstr "הוחזר" -#: InvenTree/status_codes.py:143 order/models.py:941 +#: InvenTree/status_codes.py:143 order/models.py:961 #: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" -msgstr "" +msgstr "נשלח" #: InvenTree/status_codes.py:183 msgid "OK" -msgstr "" +msgstr "מצב טוב" #: InvenTree/status_codes.py:184 msgid "Attention needed" -msgstr "" +msgstr "דרושה תשומת לב" #: InvenTree/status_codes.py:185 msgid "Damaged" -msgstr "" +msgstr "פגום" #: InvenTree/status_codes.py:186 msgid "Destroyed" -msgstr "" +msgstr "הרוס" #: InvenTree/status_codes.py:188 msgid "Rejected" -msgstr "" +msgstr "נדחה" #: InvenTree/status_codes.py:272 msgid "Legacy stock tracking entry" @@ -429,7 +430,7 @@ msgstr "" #: InvenTree/status_codes.py:283 msgid "Location changed" -msgstr "" +msgstr "מיקום שונה" #: InvenTree/status_codes.py:285 msgid "Installed into assembly" @@ -455,17 +456,17 @@ msgstr "" msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2064 +#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2072 msgid "Merged stock items" msgstr "" #: InvenTree/status_codes.py:296 templates/js/translated/table_filters.js:213 msgid "Sent to customer" -msgstr "" +msgstr "נשלח ללקוח" #: InvenTree/status_codes.py:297 msgid "Returned from customer" -msgstr "" +msgstr "הוחזר מלקוח" #: InvenTree/status_codes.py:299 msgid "Build order output created" @@ -481,11 +482,11 @@ msgstr "" #: InvenTree/status_codes.py:317 msgid "Production" -msgstr "" +msgstr "ייצור" #: InvenTree/validators.py:23 msgid "Not a valid currency code" -msgstr "" +msgstr "קוד מטבע לא מאושר" #: InvenTree/validators.py:51 msgid "Invalid character in part name" @@ -521,7 +522,7 @@ msgstr "" #: InvenTree/views.py:538 msgid "Delete Item" -msgstr "" +msgstr "מחק פריט" #: InvenTree/views.py:587 msgid "Check box to confirm item deletion" @@ -529,70 +530,70 @@ msgstr "" #: InvenTree/views.py:602 templates/InvenTree/settings/user.html:21 msgid "Edit User Information" -msgstr "" +msgstr "ערוך מידע אודות המשתמש" #: InvenTree/views.py:613 templates/InvenTree/settings/user.html:19 msgid "Set Password" -msgstr "" +msgstr "הגדר סיסמא" #: InvenTree/views.py:632 msgid "Password fields must match" -msgstr "" +msgstr "הסיסמאות מוכרחות להיות תואמות" #: InvenTree/views.py:883 templates/navbar.html:126 msgid "System Information" -msgstr "" +msgstr "מידע אודות המערכת" -#: barcodes/api.py:54 barcodes/api.py:151 +#: barcodes/api.py:54 barcodes/api.py:152 msgid "Must provide barcode_data parameter" -msgstr "" +msgstr "הפרמטר barcode_data מוכרח להיות תקין" -#: barcodes/api.py:127 +#: barcodes/api.py:128 msgid "No match found for barcode data" msgstr "" -#: barcodes/api.py:129 +#: barcodes/api.py:130 msgid "Match found for barcode data" msgstr "" -#: barcodes/api.py:154 +#: barcodes/api.py:155 msgid "Must provide stockitem parameter" msgstr "" -#: barcodes/api.py:161 +#: barcodes/api.py:162 msgid "No matching stock item found" msgstr "" -#: barcodes/api.py:191 +#: barcodes/api.py:193 msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:195 +#: barcodes/api.py:197 msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:199 +#: barcodes/api.py:201 msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:205 barcodes/api.py:217 +#: barcodes/api.py:207 barcodes/api.py:219 msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:223 +#: barcodes/api.py:225 msgid "Barcode associated with Stock Item" msgstr "" -#: build/forms.py:36 build/models.py:1286 +#: build/forms.py:36 build/models.py:1293 #: build/templates/build/build_base.html:82 -#: build/templates/build/detail.html:35 common/models.py:1253 +#: build/templates/build/detail.html:35 common/models.py:1263 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/models.py:796 order/models.py:1207 order/serializers.py:810 +#: order/models.py:805 order/models.py:1229 order/serializers.py:816 #: order/templates/order/order_wizard/match_parts.html:30 -#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:145 -#: part/forms.py:161 part/forms.py:177 part/models.py:2629 +#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:144 +#: part/forms.py:160 part/forms.py:176 part/models.py:2636 #: part/templates/part/bom_upload/match_parts.html:31 -#: part/templates/part/detail.html:962 part/templates/part/detail.html:1048 +#: part/templates/part/detail.html:992 part/templates/part/detail.html:1078 #: part/templates/part/part_pricing.html:16 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 @@ -603,7 +604,7 @@ msgstr "" #: stock/templates/stock/item_base.html:181 #: stock/templates/stock/item_base.html:262 #: stock/templates/stock/item_base.html:270 -#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:555 +#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:567 #: templates/js/translated/build.js:295 templates/js/translated/build.js:495 #: templates/js/translated/build.js:689 templates/js/translated/build.js:699 #: templates/js/translated/build.js:1075 templates/js/translated/build.js:1422 @@ -611,23 +612,23 @@ msgstr "" #: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 #: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 #: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 -#: templates/js/translated/order.js:2150 templates/js/translated/part.js:900 -#: templates/js/translated/part.js:1855 templates/js/translated/part.js:1978 -#: templates/js/translated/part.js:2056 templates/js/translated/stock.js:383 -#: templates/js/translated/stock.js:580 templates/js/translated/stock.js:750 -#: templates/js/translated/stock.js:2519 templates/js/translated/stock.js:2621 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:906 +#: templates/js/translated/part.js:1862 templates/js/translated/part.js:1985 +#: templates/js/translated/part.js:2063 templates/js/translated/stock.js:391 +#: templates/js/translated/stock.js:588 templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2779 msgid "Quantity" -msgstr "" +msgstr "כמות" #: build/forms.py:37 msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 -#: stock/serializers.py:314 templates/js/translated/stock.js:230 -#: templates/js/translated/stock.js:384 +#: build/forms.py:41 order/serializers.py:820 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:238 +#: templates/js/translated/stock.js:392 msgid "Serial Numbers" -msgstr "" +msgstr "מספרים סידוריים" #: build/forms.py:43 msgid "Enter serial numbers for build outputs" @@ -649,18 +650,18 @@ msgstr "" msgid "Confirm build cancellation" msgstr "" -#: build/models.py:133 +#: build/models.py:135 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:137 build/templates/build/build_base.html:9 +#: build/models.py:139 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:457 +#: templates/js/translated/build.js:457 templates/js/translated/stock.js:2290 msgid "Build Order" msgstr "" -#: build/models.py:138 build/templates/build/build_base.html:13 +#: build/models.py:140 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:92 #: order/templates/order/so_sidebar.html:13 @@ -670,40 +671,40 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:198 +#: build/models.py:200 msgid "Build Order Reference" msgstr "" -#: build/models.py:199 order/models.py:210 order/models.py:536 -#: order/models.py:803 part/models.py:2638 +#: build/models.py:201 order/models.py:213 order/models.py:541 +#: order/models.py:812 part/models.py:2645 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:547 templates/js/translated/build.js:1179 +#: templates/js/translated/bom.js:559 templates/js/translated/build.js:1179 #: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" -msgstr "" +msgstr "מקט" -#: build/models.py:210 +#: build/models.py:212 msgid "Brief description of the build" -msgstr "" +msgstr "תיאור קצר אודות הבנייה" -#: build/models.py:219 build/templates/build/build_base.html:164 +#: build/models.py:221 build/templates/build/build_base.html:164 #: build/templates/build/detail.html:88 msgid "Parent Build" -msgstr "" +msgstr "מקור הבנייה" -#: build/models.py:220 +#: build/models.py:222 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:225 build/templates/build/build_base.html:77 +#: build/models.py:227 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:856 order/models.py:930 -#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 -#: part/models.py:2204 part/models.py:2220 part/models.py:2239 -#: part/models.py:2256 part/models.py:2358 part/models.py:2480 -#: part/models.py:2613 part/models.py:2920 part/serializers.py:658 +#: order/models.py:876 order/models.py:950 +#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:359 +#: part/models.py:2211 part/models.py:2227 part/models.py:2246 +#: part/models.py:2263 part/models.py:2365 part/models.py:2487 +#: part/models.py:2620 part/models.py:2927 part/serializers.py:658 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/set_category.html:13 @@ -713,205 +714,205 @@ msgstr "" #: templates/InvenTree/search.html:80 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 -#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:326 -#: templates/js/translated/bom.js:505 templates/js/translated/build.js:680 +#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:338 +#: templates/js/translated/bom.js:517 templates/js/translated/build.js:680 #: templates/js/translated/build.js:1048 templates/js/translated/build.js:1419 #: templates/js/translated/build.js:1687 templates/js/translated/company.js:492 #: templates/js/translated/company.js:749 templates/js/translated/order.js:84 #: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 #: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 -#: templates/js/translated/order.js:2128 templates/js/translated/part.js:977 -#: templates/js/translated/part.js:1058 templates/js/translated/part.js:1225 -#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:719 -#: templates/js/translated/stock.js:926 templates/js/translated/stock.js:1526 -#: templates/js/translated/stock.js:2609 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:984 +#: templates/js/translated/part.js:1065 templates/js/translated/part.js:1232 +#: templates/js/translated/stock.js:562 templates/js/translated/stock.js:727 +#: templates/js/translated/stock.js:934 templates/js/translated/stock.js:1534 +#: templates/js/translated/stock.js:2767 msgid "Part" -msgstr "" +msgstr "רכיב" -#: build/models.py:233 +#: build/models.py:235 msgid "Select part to build" -msgstr "" +msgstr "בחר רכיב לבנייה" -#: build/models.py:238 +#: build/models.py:240 msgid "Sales Order Reference" msgstr "" -#: build/models.py:242 +#: build/models.py:244 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1407 +#: build/models.py:249 templates/js/translated/build.js:1407 #: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "" -#: build/models.py:251 +#: build/models.py:253 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:256 +#: build/models.py:258 msgid "Destination Location" msgstr "" -#: build/models.py:260 +#: build/models.py:262 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:264 +#: build/models.py:266 msgid "Build Quantity" -msgstr "" +msgstr "כמות בניה" -#: build/models.py:267 +#: build/models.py:269 msgid "Number of stock items to build" msgstr "" -#: build/models.py:271 +#: build/models.py:273 msgid "Completed items" msgstr "" -#: build/models.py:273 +#: build/models.py:275 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:277 part/templates/part/part_base.html:234 +#: build/models.py:279 part/templates/part/part_base.html:234 msgid "Build Status" msgstr "" -#: build/models.py:281 +#: build/models.py:283 msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:531 +#: build/models.py:287 stock/models.py:533 msgid "Batch Code" msgstr "" -#: build/models.py:289 +#: build/models.py:291 msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:126 part/models.py:967 +#: build/models.py:294 order/models.py:129 part/models.py:969 #: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "" -#: build/models.py:296 order/models.py:558 +#: build/models.py:298 order/models.py:563 msgid "Target completion date" msgstr "" -#: build/models.py:297 +#: build/models.py:299 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:252 +#: build/models.py:302 order/models.py:255 #: templates/js/translated/build.js:1758 msgid "Completion Date" msgstr "" -#: build/models.py:306 +#: build/models.py:308 msgid "completed by" msgstr "" -#: build/models.py:314 templates/js/translated/build.js:1729 +#: build/models.py:316 templates/js/translated/build.js:1729 msgid "Issued by" msgstr "" -#: build/models.py:315 +#: build/models.py:317 msgid "User who issued this build order" msgstr "" -#: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:140 +#: build/models.py:325 build/templates/build/build_base.html:185 +#: build/templates/build/detail.html:116 order/models.py:143 #: order/templates/order/order_base.html:170 -#: order/templates/order/sales_order_base.html:182 part/models.py:971 +#: order/templates/order/sales_order_base.html:182 part/models.py:973 #: report/templates/report/inventree_build_order_base.html:159 #: templates/js/translated/build.js:1741 templates/js/translated/order.js:864 msgid "Responsible" msgstr "" -#: build/models.py:324 +#: build/models.py:326 msgid "User responsible for this build order" msgstr "" -#: build/models.py:329 build/templates/build/detail.html:102 +#: build/models.py:331 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:525 +#: part/templates/part/part_base.html:354 stock/models.py:527 #: stock/templates/stock/item_base.html:373 msgid "External Link" msgstr "" -#: build/models.py:334 build/serializers.py:201 +#: build/models.py:336 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:144 order/models.py:805 order/models.py:1051 +#: order/models.py:147 order/models.py:814 order/models.py:1071 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/models.py:956 -#: part/templates/part/detail.html:120 part/templates/part/part_sidebar.html:50 +#: order/templates/order/so_sidebar.html:17 part/models.py:958 +#: part/templates/part/detail.html:137 part/templates/part/part_sidebar.html:54 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:597 -#: stock/models.py:1867 stock/models.py:1973 stock/serializers.py:332 -#: stock/serializers.py:639 stock/serializers.py:737 stock/serializers.py:869 -#: stock/templates/stock/stock_sidebar.html:21 -#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:711 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:599 +#: stock/models.py:1895 stock/models.py:2001 stock/serializers.py:332 +#: stock/serializers.py:640 stock/serializers.py:738 stock/serializers.py:870 +#: stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:723 #: templates/js/translated/company.js:845 templates/js/translated/order.js:1149 #: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 -#: templates/js/translated/stock.js:1309 templates/js/translated/stock.js:1795 +#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1803 msgid "Notes" msgstr "" -#: build/models.py:335 +#: build/models.py:337 msgid "Extra build notes" msgstr "" -#: build/models.py:710 +#: build/models.py:717 msgid "No build output specified" msgstr "" -#: build/models.py:713 +#: build/models.py:720 msgid "Build output is already completed" msgstr "" -#: build/models.py:716 +#: build/models.py:723 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1108 +#: build/models.py:1115 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1117 +#: build/models.py:1124 #, python-brace-format msgid "Allocated quantity ({q}) must not execed available stock quantity ({a})" msgstr "" -#: build/models.py:1127 +#: build/models.py:1134 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:1167 +#: build/models.py:1140 order/models.py:1189 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1139 +#: build/models.py:1146 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1196 +#: build/models.py:1203 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1256 stock/templates/stock/item_base.html:345 +#: build/models.py:1263 stock/templates/stock/item_base.html:345 #: templates/InvenTree/search.html:137 templates/js/translated/build.js:1660 #: templates/navbar.html:35 msgid "Build" msgstr "" -#: build/models.py:1257 +#: build/models.py:1264 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1273 build/serializers.py:388 order/serializers.py:690 -#: order/serializers.py:708 stock/serializers.py:577 stock/serializers.py:695 +#: build/models.py:1280 build/serializers.py:388 order/serializers.py:696 +#: order/serializers.py:714 stock/serializers.py:578 stock/serializers.py:696 #: stock/templates/stock/item_base.html:9 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:367 @@ -920,24 +921,24 @@ msgstr "" #: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 #: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 #: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 -#: templates/js/translated/stock.js:555 templates/js/translated/stock.js:720 -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:563 templates/js/translated/stock.js:728 +#: templates/js/translated/stock.js:2628 msgid "Stock Item" msgstr "" -#: build/models.py:1274 +#: build/models.py:1281 msgid "Source stock item" msgstr "" -#: build/models.py:1287 +#: build/models.py:1294 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1295 +#: build/models.py:1302 msgid "Install into" msgstr "" -#: build/models.py:1296 +#: build/models.py:1303 msgid "Destination stock item" msgstr "" @@ -962,16 +963,16 @@ msgid "This build output is not fully allocated" msgstr "" #: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 -#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:730 -#: stock/serializers.py:971 stock/templates/stock/item_base.html:313 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:731 +#: stock/serializers.py:972 stock/templates/stock/item_base.html:313 #: templates/js/translated/barcode.js:384 #: templates/js/translated/barcode.js:557 templates/js/translated/build.js:480 #: templates/js/translated/build.js:1087 templates/js/translated/order.js:508 #: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 #: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 -#: templates/js/translated/part.js:179 templates/js/translated/stock.js:556 -#: templates/js/translated/stock.js:721 templates/js/translated/stock.js:928 -#: templates/js/translated/stock.js:1676 templates/js/translated/stock.js:2411 +#: templates/js/translated/part.js:179 templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:729 templates/js/translated/stock.js:936 +#: templates/js/translated/stock.js:1684 templates/js/translated/stock.js:2569 msgid "Location" msgstr "" @@ -980,12 +981,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:552 +#: build/templates/build/detail.html:63 order/models.py:557 #: order/serializers.py:247 stock/templates/stock/item_base.html:187 #: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1716 #: templates/js/translated/order.js:591 templates/js/translated/order.js:840 -#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1651 -#: templates/js/translated/stock.js:2488 templates/js/translated/stock.js:2637 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1659 +#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2795 msgid "Status" msgstr "" @@ -1021,8 +1022,8 @@ msgstr "" msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:313 build/serializers.py:362 part/models.py:2753 -#: part/models.py:2912 +#: build/serializers.py:313 build/serializers.py:362 part/models.py:2760 +#: part/models.py:2919 msgid "BOM Item" msgstr "" @@ -1038,16 +1039,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:394 stock/serializers.py:584 +#: build/serializers.py:394 stock/serializers.py:585 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:408 order/models.py:277 order/serializers.py:240 -#: stock/models.py:365 stock/models.py:1077 stock/serializers.py:305 +#: build/serializers.py:408 order/models.py:280 order/serializers.py:240 +#: stock/models.py:367 stock/models.py:1105 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:450 order/serializers.py:741 +#: build/serializers.py:450 order/serializers.py:747 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1060,7 +1061,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:491 order/serializers.py:984 +#: build/serializers.py:491 order/serializers.py:990 msgid "Allocation items must be provided" msgstr "" @@ -1164,13 +1165,13 @@ msgid "Completed" msgstr "" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:927 -#: order/models.py:1023 order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:947 +#: order/models.py:1043 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:307 -#: templates/js/translated/order.js:1218 +#: templates/js/translated/order.js:1218 templates/js/translated/stock.js:2304 msgid "Sales Order" msgstr "" @@ -1224,7 +1225,7 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:878 stock/forms.py:136 +#: build/templates/build/detail.html:50 order/models.py:898 stock/forms.py:136 #: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1239,7 +1240,7 @@ msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:331 -#: templates/js/translated/stock.js:1665 templates/js/translated/stock.js:2644 +#: templates/js/translated/stock.js:1673 templates/js/translated/stock.js:2802 #: templates/js/translated/table_filters.js:151 #: templates/js/translated/table_filters.js:238 msgid "Batch" @@ -1343,9 +1344,9 @@ msgstr "" #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 #: order/templates/order/sales_order_detail.html:107 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:196 -#: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 -#: stock/templates/stock/stock_sidebar.html:19 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:213 +#: part/templates/part/part_sidebar.html:52 stock/templates/stock/item.html:112 +#: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" @@ -1360,8 +1361,8 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:108 #: order/templates/order/sales_order_detail.html:127 #: order/templates/order/sales_order_detail.html:186 -#: part/templates/part/detail.html:124 stock/templates/stock/item.html:115 -#: stock/templates/stock/item.html:205 +#: part/templates/part/detail.html:141 stock/templates/stock/item.html:132 +#: stock/templates/stock/item.html:235 msgid "Edit Notes" msgstr "" @@ -1373,7 +1374,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:303 +#: build/templates/build/index.html:18 part/templates/part/detail.html:320 msgid "New Build Order" msgstr "" @@ -1453,23 +1454,23 @@ msgstr "" msgid "Delete Build Order" msgstr "" -#: common/files.py:67 +#: common/files.py:65 msgid "Unsupported file format: {ext.upper()}" msgstr "" -#: common/files.py:69 +#: common/files.py:67 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:74 +#: common/files.py:72 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:76 +#: common/files.py:74 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:78 +#: common/files.py:76 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1490,740 +1491,828 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:344 common/models.py:998 common/models.py:1206 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:352 +msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:346 +#: common/models.py:354 msgid "Settings value" msgstr "" -#: common/models.py:380 +#: common/models.py:388 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:400 +#: common/models.py:408 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:411 +#: common/models.py:419 msgid "Value must be an integer value" msgstr "" -#: common/models.py:434 +#: common/models.py:442 msgid "Key string must be unique" msgstr "" -#: common/models.py:553 +#: common/models.py:561 msgid "No group" msgstr "" -#: common/models.py:595 +#: common/models.py:603 msgid "Restart required" msgstr "" -#: common/models.py:596 +#: common/models.py:604 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:603 +#: common/models.py:611 msgid "InvenTree Instance Name" msgstr "" -#: common/models.py:605 +#: common/models.py:613 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:609 +#: common/models.py:617 msgid "Use instance name" msgstr "" -#: common/models.py:610 +#: common/models.py:618 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:616 company/models.py:100 company/models.py:101 +#: common/models.py:624 company/models.py:100 company/models.py:101 msgid "Company name" msgstr "" -#: common/models.py:617 +#: common/models.py:625 msgid "Internal company name" msgstr "" -#: common/models.py:622 +#: common/models.py:630 msgid "Base URL" msgstr "" -#: common/models.py:623 +#: common/models.py:631 msgid "Base URL for server instance" msgstr "" -#: common/models.py:629 +#: common/models.py:637 msgid "Default Currency" msgstr "" -#: common/models.py:630 +#: common/models.py:638 msgid "Default currency" msgstr "" -#: common/models.py:636 +#: common/models.py:644 msgid "Download from URL" msgstr "" -#: common/models.py:637 +#: common/models.py:645 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:643 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:651 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:644 +#: common/models.py:652 msgid "Enable barcode scanner support" msgstr "" -#: common/models.py:650 +#: common/models.py:658 msgid "IPN Regex" msgstr "" -#: common/models.py:651 +#: common/models.py:659 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:655 +#: common/models.py:663 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:656 +#: common/models.py:664 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:662 +#: common/models.py:670 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:663 +#: common/models.py:671 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:669 +#: common/models.py:677 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:670 +#: common/models.py:678 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:676 +#: common/models.py:684 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:677 +#: common/models.py:685 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:683 +#: common/models.py:691 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:684 +#: common/models.py:692 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:690 +#: common/models.py:698 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:691 +#: common/models.py:699 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:697 part/models.py:2482 report/models.py:187 +#: common/models.py:705 part/models.py:2489 report/models.py:187 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:422 msgid "Template" msgstr "" -#: common/models.py:698 +#: common/models.py:706 msgid "Parts are templates by default" msgstr "" -#: common/models.py:704 part/models.py:919 templates/js/translated/bom.js:1068 +#: common/models.py:712 part/models.py:921 templates/js/translated/bom.js:1082 #: templates/js/translated/table_filters.js:168 #: templates/js/translated/table_filters.js:434 msgid "Assembly" msgstr "" -#: common/models.py:705 +#: common/models.py:713 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:711 part/models.py:925 +#: common/models.py:719 part/models.py:927 #: templates/js/translated/table_filters.js:438 msgid "Component" msgstr "" -#: common/models.py:712 +#: common/models.py:720 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:718 part/models.py:936 +#: common/models.py:726 part/models.py:938 msgid "Purchaseable" msgstr "" -#: common/models.py:719 +#: common/models.py:727 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:725 part/models.py:941 +#: common/models.py:733 part/models.py:943 #: templates/js/translated/table_filters.js:446 msgid "Salable" msgstr "" -#: common/models.py:726 +#: common/models.py:734 msgid "Parts are salable by default" msgstr "" -#: common/models.py:732 part/models.py:931 +#: common/models.py:740 part/models.py:933 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 #: templates/js/translated/table_filters.js:450 msgid "Trackable" msgstr "" -#: common/models.py:733 +#: common/models.py:741 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:739 part/models.py:951 +#: common/models.py:747 part/models.py:953 #: part/templates/part/part_base.html:147 #: templates/js/translated/table_filters.js:42 msgid "Virtual" msgstr "" -#: common/models.py:740 +#: common/models.py:748 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:746 +#: common/models.py:754 msgid "Show Import in Views" msgstr "" -#: common/models.py:747 +#: common/models.py:755 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:753 +#: common/models.py:761 msgid "Show Price in Forms" msgstr "" -#: common/models.py:754 +#: common/models.py:762 msgid "Display part price in some forms" msgstr "" -#: common/models.py:765 +#: common/models.py:773 msgid "Show Price in BOM" msgstr "" -#: common/models.py:766 +#: common/models.py:774 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:772 +#: common/models.py:780 msgid "Show related parts" msgstr "" -#: common/models.py:773 +#: common/models.py:781 msgid "Display related parts for a part" msgstr "" -#: common/models.py:779 +#: common/models.py:787 msgid "Create initial stock" msgstr "" -#: common/models.py:780 +#: common/models.py:788 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:786 +#: common/models.py:794 msgid "Internal Prices" msgstr "" -#: common/models.py:787 +#: common/models.py:795 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:793 +#: common/models.py:801 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:794 +#: common/models.py:802 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:800 +#: common/models.py:808 msgid "Part Name Display Format" msgstr "" -#: common/models.py:801 +#: common/models.py:809 msgid "Format to display the part name" msgstr "" -#: common/models.py:808 +#: common/models.py:816 msgid "Enable Reports" msgstr "" -#: common/models.py:809 +#: common/models.py:817 msgid "Enable generation of reports" msgstr "" -#: common/models.py:815 templates/stats.html:25 +#: common/models.py:823 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:816 +#: common/models.py:824 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:822 +#: common/models.py:830 msgid "Page Size" msgstr "" -#: common/models.py:823 +#: common/models.py:831 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:833 +#: common/models.py:841 msgid "Test Reports" msgstr "" -#: common/models.py:834 +#: common/models.py:842 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:840 +#: common/models.py:848 msgid "Stock Expiry" msgstr "" -#: common/models.py:841 +#: common/models.py:849 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:847 +#: common/models.py:855 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:848 +#: common/models.py:856 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:854 +#: common/models.py:862 msgid "Stock Stale Time" msgstr "" -#: common/models.py:855 +#: common/models.py:863 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:857 +#: common/models.py:865 msgid "days" msgstr "" -#: common/models.py:862 +#: common/models.py:870 msgid "Build Expired Stock" msgstr "" -#: common/models.py:863 +#: common/models.py:871 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:869 +#: common/models.py:877 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:870 +#: common/models.py:878 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:876 -msgid "Group by Part" -msgstr "" - -#: common/models.py:877 -msgid "Group stock items by part reference in table views" -msgstr "" - -#: common/models.py:883 +#: common/models.py:884 msgid "Build Order Reference Prefix" msgstr "" -#: common/models.py:884 +#: common/models.py:885 msgid "Prefix value for build order reference" msgstr "" -#: common/models.py:889 +#: common/models.py:890 msgid "Build Order Reference Regex" msgstr "" -#: common/models.py:890 +#: common/models.py:891 msgid "Regular expression pattern for matching build order reference" msgstr "" -#: common/models.py:894 +#: common/models.py:895 msgid "Sales Order Reference Prefix" msgstr "" -#: common/models.py:895 +#: common/models.py:896 msgid "Prefix value for sales order reference" msgstr "" -#: common/models.py:900 +#: common/models.py:901 msgid "Purchase Order Reference Prefix" msgstr "" -#: common/models.py:901 +#: common/models.py:902 msgid "Prefix value for purchase order reference" msgstr "" -#: common/models.py:907 +#: common/models.py:908 msgid "Enable password forgot" msgstr "" -#: common/models.py:908 +#: common/models.py:909 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:913 +#: common/models.py:914 msgid "Enable registration" msgstr "" -#: common/models.py:914 +#: common/models.py:915 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:919 +#: common/models.py:920 msgid "Enable SSO" msgstr "" -#: common/models.py:920 +#: common/models.py:921 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:925 +#: common/models.py:926 msgid "Email required" msgstr "" -#: common/models.py:926 +#: common/models.py:927 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:931 +#: common/models.py:932 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:932 +#: common/models.py:933 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:937 +#: common/models.py:938 msgid "Mail twice" msgstr "" -#: common/models.py:938 +#: common/models.py:939 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:943 +#: common/models.py:944 msgid "Password twice" msgstr "" -#: common/models.py:944 +#: common/models.py:945 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:949 +#: common/models.py:950 msgid "Group on signup" msgstr "" -#: common/models.py:950 +#: common/models.py:951 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:955 +#: common/models.py:956 msgid "Enforce MFA" msgstr "" -#: common/models.py:956 +#: common/models.py:957 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:961 +#: common/models.py:964 msgid "Enable URL integration" msgstr "" -#: common/models.py:962 +#: common/models.py:965 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:968 +#: common/models.py:971 msgid "Enable navigation integration" msgstr "" -#: common/models.py:969 +#: common/models.py:972 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:975 +#: common/models.py:978 msgid "Enable app integration" msgstr "" -#: common/models.py:976 +#: common/models.py:979 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:982 +#: common/models.py:985 msgid "Enable schedule integration" msgstr "" -#: common/models.py:983 +#: common/models.py:986 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1029 +#: common/models.py:992 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:993 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:1008 common/models.py:1216 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1039 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1030 +#: common/models.py:1040 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1035 +#: common/models.py:1045 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1036 +#: common/models.py:1046 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1041 +#: common/models.py:1051 msgid "Show latest parts" msgstr "" -#: common/models.py:1042 +#: common/models.py:1052 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1047 +#: common/models.py:1057 msgid "Recent Part Count" msgstr "" -#: common/models.py:1048 +#: common/models.py:1058 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1054 +#: common/models.py:1064 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1055 +#: common/models.py:1065 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1060 +#: common/models.py:1070 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1061 +#: common/models.py:1071 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1066 +#: common/models.py:1076 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1067 +#: common/models.py:1077 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1072 +#: common/models.py:1082 msgid "Show low stock" msgstr "" -#: common/models.py:1073 +#: common/models.py:1083 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1078 +#: common/models.py:1088 msgid "Show depleted stock" msgstr "" -#: common/models.py:1079 +#: common/models.py:1089 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1084 +#: common/models.py:1094 msgid "Show needed stock" msgstr "" -#: common/models.py:1085 +#: common/models.py:1095 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1090 +#: common/models.py:1100 msgid "Show expired stock" msgstr "" -#: common/models.py:1091 +#: common/models.py:1101 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1096 +#: common/models.py:1106 msgid "Show stale stock" msgstr "" -#: common/models.py:1097 +#: common/models.py:1107 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1102 +#: common/models.py:1112 msgid "Show pending builds" msgstr "" -#: common/models.py:1103 +#: common/models.py:1113 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1108 +#: common/models.py:1118 msgid "Show overdue builds" msgstr "" -#: common/models.py:1109 +#: common/models.py:1119 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1114 +#: common/models.py:1124 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1115 +#: common/models.py:1125 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1120 +#: common/models.py:1130 msgid "Show overdue POs" msgstr "" -#: common/models.py:1121 +#: common/models.py:1131 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1126 +#: common/models.py:1136 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1127 +#: common/models.py:1137 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1132 +#: common/models.py:1142 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1133 +#: common/models.py:1143 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1139 +#: common/models.py:1149 msgid "Inline label display" msgstr "" -#: common/models.py:1140 +#: common/models.py:1150 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1146 +#: common/models.py:1156 msgid "Inline report display" msgstr "" -#: common/models.py:1147 +#: common/models.py:1157 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1153 +#: common/models.py:1163 msgid "Search Preview Results" msgstr "" -#: common/models.py:1154 +#: common/models.py:1164 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1160 +#: common/models.py:1170 msgid "Search Show Stock" msgstr "" -#: common/models.py:1161 +#: common/models.py:1171 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1167 +#: common/models.py:1177 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1168 +#: common/models.py:1178 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1174 +#: common/models.py:1184 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1175 +#: common/models.py:1185 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1181 +#: common/models.py:1191 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1182 +#: common/models.py:1192 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1188 +#: common/models.py:1198 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1189 +#: common/models.py:1199 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1254 company/forms.py:43 +#: common/models.py:1264 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1261 company/serializers.py:264 +#: common/models.py:1271 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 -#: templates/js/translated/part.js:909 templates/js/translated/part.js:1860 +#: templates/js/translated/part.js:915 templates/js/translated/part.js:1867 msgid "Price" msgstr "" -#: common/models.py:1262 +#: common/models.py:1272 msgid "Unit price at specified quantity" msgstr "" +#: common/models.py:1429 common/models.py:1568 +msgid "Endpoint" +msgstr "" + +#: common/models.py:1430 +msgid "Endpoint at which this webhook is received" +msgstr "" + +#: common/models.py:1439 +msgid "Name for this webhook" +msgstr "" + +#: common/models.py:1444 part/models.py:948 plugin/models.py:46 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:96 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:417 +msgid "Active" +msgstr "" + +#: common/models.py:1445 +msgid "Is this webhook active" +msgstr "" + +#: common/models.py:1459 +msgid "Token" +msgstr "" + +#: common/models.py:1460 +msgid "Token for access" +msgstr "" + +#: common/models.py:1467 +msgid "Secret" +msgstr "" + +#: common/models.py:1468 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:1535 +msgid "Message ID" +msgstr "" + +#: common/models.py:1536 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:1544 +msgid "Host" +msgstr "" + +#: common/models.py:1545 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:1552 +msgid "Header" +msgstr "" + +#: common/models.py:1553 +msgid "Header of this message" +msgstr "" + +#: common/models.py:1559 +msgid "Body" +msgstr "" + +#: common/models.py:1560 +msgid "Body of this message" +msgstr "" + +#: common/models.py:1569 +msgid "Endpoint on which this message was received" +msgstr "" + +#: common/models.py:1574 +msgid "Worked on" +msgstr "" + +#: common/models.py:1575 +msgid "Was the work on this message finished?" +msgstr "" + #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 #: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 -#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 -#: part/views.py:764 +#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:213 +#: part/views.py:773 msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 #: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 -#: part/views.py:765 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:214 +#: part/views.py:774 msgid "Match Fields" msgstr "" @@ -2315,7 +2404,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:139 part/models.py:838 +#: company/models.py:139 part/models.py:840 msgid "Image" msgstr "" @@ -2352,8 +2441,8 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:469 -#: stock/templates/stock/item_base.html:142 +#: company/models.py:320 company/models.py:535 stock/models.py:471 +#: stock/templates/stock/item_base.html:142 templates/js/translated/bom.js:328 msgid "Base Part" msgstr "" @@ -2380,7 +2469,7 @@ msgstr "" #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:533 #: templates/js/translated/company.js:818 templates/js/translated/order.js:1038 -#: templates/js/translated/part.js:245 templates/js/translated/part.js:889 +#: templates/js/translated/part.js:245 templates/js/translated/part.js:895 msgid "MPN" msgstr "" @@ -2409,8 +2498,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1960 templates/js/translated/company.js:647 -#: templates/js/translated/part.js:709 templates/js/translated/stock.js:1296 +#: stock/models.py:1988 templates/js/translated/company.js:647 +#: templates/js/translated/part.js:715 templates/js/translated/stock.js:1304 msgid "Value" msgstr "" @@ -2418,10 +2507,10 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:429 part/models.py:913 part/models.py:2450 +#: company/models.py:429 part/models.py:915 part/models.py:2457 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:284 -#: templates/js/translated/company.js:653 templates/js/translated/part.js:715 +#: templates/InvenTree/settings/settings.html:287 +#: templates/js/translated/company.js:653 templates/js/translated/part.js:721 msgid "Units" msgstr "" @@ -2434,13 +2523,13 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:224 +#: company/templates/company/supplier_part.html:87 order/models.py:227 #: order/templates/order/order_base.html:112 -#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 -#: part/bom.py:247 stock/templates/stock/item_base.html:397 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:237 +#: part/bom.py:265 stock/templates/stock/item_base.html:397 #: templates/js/translated/company.js:337 #: templates/js/translated/company.js:774 templates/js/translated/order.js:823 -#: templates/js/translated/part.js:215 templates/js/translated/part.js:857 +#: templates/js/translated/part.js:215 templates/js/translated/part.js:863 #: templates/js/translated/table_filters.js:393 msgid "Supplier" msgstr "" @@ -2450,8 +2539,8 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 -#: templates/js/translated/part.js:226 templates/js/translated/part.js:875 +#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1025 +#: templates/js/translated/part.js:226 templates/js/translated/part.js:881 msgid "SKU" msgstr "" @@ -2472,22 +2561,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:576 company/templates/company/supplier_part.html:119 -#: part/models.py:2641 report/templates/report/inventree_po_report.html:93 +#: part/models.py:2648 report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "base cost" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:493 stock/templates/stock/item_base.html:338 -#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1791 +#: stock/models.py:495 stock/templates/stock/item_base.html:338 +#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1799 msgid "Packaging" msgstr "" @@ -2495,7 +2584,7 @@ msgstr "" msgid "Part packaging" msgstr "" -#: company/models.py:584 part/models.py:1781 +#: company/models.py:584 part/models.py:1783 msgid "multiple" msgstr "" @@ -2554,12 +2643,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:547 -#: order/templates/order/sales_order_base.html:115 stock/models.py:512 -#: stock/models.py:513 stock/serializers.py:625 +#: company/templates/company/company_base.html:83 order/models.py:552 +#: order/templates/order/sales_order_base.html:115 stock/models.py:514 +#: stock/models.py:515 stock/serializers.py:626 #: stock/templates/stock/item_base.html:290 #: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 -#: templates/js/translated/stock.js:2452 +#: templates/js/translated/stock.js:2610 #: templates/js/translated/table_filters.js:397 msgid "Customer" msgstr "" @@ -2590,7 +2679,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:118 -#: part/templates/part/detail.html:336 +#: part/templates/part/detail.html:353 msgid "New Supplier Part" msgstr "" @@ -2598,8 +2687,8 @@ msgstr "" #: company/templates/company/detail.html:79 #: company/templates/company/manufacturer_part.html:127 #: company/templates/company/manufacturer_part.html:156 -#: part/templates/part/category.html:171 part/templates/part/detail.html:345 -#: part/templates/part/detail.html:374 +#: part/templates/part/category.html:171 part/templates/part/detail.html:362 +#: part/templates/part/detail.html:391 msgid "Options" msgstr "" @@ -2627,7 +2716,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:67 part/templates/part/detail.html:364 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:381 msgid "New Manufacturer Part" msgstr "" @@ -2641,7 +2730,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:68 part/templates/part/part_sidebar.html:33 +#: part/templates/part/detail.html:85 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197 #: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 @@ -2663,7 +2752,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:91 part/templates/part/part_sidebar.html:37 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:41 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217 #: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 @@ -2691,13 +2780,13 @@ msgstr "" #: company/templates/company/detail.html:384 #: company/templates/company/manufacturer_part.html:215 -#: part/templates/part/detail.html:418 +#: part/templates/part/detail.html:435 msgid "Delete Supplier Parts?" msgstr "" #: company/templates/company/detail.html:385 #: company/templates/company/manufacturer_part.html:216 -#: part/templates/part/detail.html:419 +#: part/templates/part/detail.html:436 msgid "All selected supplier parts will be deleted" msgstr "" @@ -2714,7 +2803,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:34 #: company/templates/company/supplier_part.html:159 -#: part/templates/part/detail.html:71 part/templates/part/part_base.html:76 +#: part/templates/part/detail.html:88 part/templates/part/part_base.html:76 msgid "Order part" msgstr "" @@ -2735,34 +2824,34 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 -#: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 +#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:163 #: templates/InvenTree/search.html:188 templates/navbar.html:45 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:129 -#: part/templates/part/detail.html:347 +#: part/templates/part/detail.html:364 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:129 #: company/templates/company/manufacturer_part.html:158 #: company/templates/company/manufacturer_part.html:254 -#: part/templates/part/detail.html:347 part/templates/part/detail.html:376 +#: part/templates/part/detail.html:364 part/templates/part/detail.html:393 #: templates/js/translated/company.js:426 templates/js/translated/helpers.js:31 -#: users/models.py:210 +#: users/models.py:212 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:143 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:17 -#: part/templates/part/detail.html:170 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:187 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:147 -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:192 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part.html:65 msgid "New Parameter" @@ -2773,7 +2862,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:191 -#: part/templates/part/detail.html:862 +#: part/templates/part/detail.html:892 msgid "Add Parameter" msgstr "" @@ -2802,9 +2891,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:477 +#: company/templates/company/supplier_part.html:24 stock/models.py:479 #: stock/templates/stock/item_base.html:402 -#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1748 +#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1756 msgid "Supplier Part" msgstr "" @@ -2830,7 +2919,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:167 -#: templates/js/translated/stock.js:360 +#: templates/js/translated/stock.js:368 msgid "New Stock Item" msgstr "" @@ -2840,7 +2929,7 @@ msgid "Supplier Part Orders" msgstr "" #: company/templates/company/supplier_part.html:160 -#: part/templates/part/detail.html:72 +#: part/templates/part/detail.html:89 msgid "Order Part" msgstr "" @@ -2851,7 +2940,7 @@ msgstr "" #: company/templates/company/supplier_part.html:184 #: company/templates/company/supplier_part.html:290 -#: part/templates/part/prices.html:271 part/views.py:1619 +#: part/templates/part/prices.html:271 part/views.py:1628 msgid "Add Price Break" msgstr "" @@ -2859,11 +2948,11 @@ msgstr "" msgid "No price break information found" msgstr "" -#: company/templates/company/supplier_part.html:224 part/views.py:1681 +#: company/templates/company/supplier_part.html:224 part/views.py:1690 msgid "Delete Price Break" msgstr "" -#: company/templates/company/supplier_part.html:238 part/views.py:1667 +#: company/templates/company/supplier_part.html:238 part/views.py:1676 msgid "Edit Price Break" msgstr "" @@ -2881,10 +2970,10 @@ msgstr "" #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:150 #: templates/InvenTree/settings/sidebar.html:41 -#: templates/js/translated/bom.js:328 templates/js/translated/part.js:489 -#: templates/js/translated/part.js:624 templates/js/translated/part.js:1118 -#: templates/js/translated/part.js:1279 templates/js/translated/stock.js:927 -#: templates/js/translated/stock.js:1580 templates/navbar.html:28 +#: templates/js/translated/bom.js:340 templates/js/translated/part.js:495 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1125 +#: templates/js/translated/part.js:1286 templates/js/translated/stock.js:935 +#: templates/js/translated/stock.js:1588 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2907,8 +2996,8 @@ msgstr "" #: stock/templates/stock/location.html:151 #: stock/templates/stock/location.html:163 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2351 -#: templates/stats.html:93 templates/stats.html:102 users/models.py:43 +#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2509 +#: templates/stats.html:105 templates/stats.html:114 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2937,20 +3026,20 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:129 part/views.py:584 +#: company/views.py:129 part/views.py:593 msgid "Download Image" msgstr "" -#: company/views.py:158 part/views.py:616 +#: company/views.py:158 part/views.py:625 msgid "Image size exceeds maximum allowable size for download" msgstr "" -#: company/views.py:165 part/views.py:623 +#: company/views.py:165 part/views.py:632 #, python-brace-format msgid "Invalid response: {code}" msgstr "" -#: company/views.py:174 part/views.py:632 +#: company/views.py:174 part/views.py:641 msgid "Supplied URL is not a valid image file" msgstr "" @@ -3036,282 +3125,282 @@ msgstr "" msgid "Cancel order" msgstr "" -#: order/models.py:122 +#: order/models.py:125 msgid "Order description" msgstr "" -#: order/models.py:124 +#: order/models.py:127 msgid "Link to external page" msgstr "" -#: order/models.py:132 +#: order/models.py:135 msgid "Created By" msgstr "" -#: order/models.py:139 +#: order/models.py:142 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:144 +#: order/models.py:147 msgid "Order notes" msgstr "" -#: order/models.py:211 order/models.py:537 +#: order/models.py:214 order/models.py:542 msgid "Order reference" msgstr "" -#: order/models.py:216 order/models.py:552 +#: order/models.py:219 order/models.py:557 msgid "Purchase order status" msgstr "" -#: order/models.py:225 +#: order/models.py:228 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:228 order/templates/order/order_base.html:118 +#: order/models.py:231 order/templates/order/order_base.html:118 #: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:228 +#: order/models.py:231 msgid "Supplier order reference code" msgstr "" -#: order/models.py:235 +#: order/models.py:238 msgid "received by" msgstr "" -#: order/models.py:240 +#: order/models.py:243 msgid "Issue Date" msgstr "" -#: order/models.py:241 +#: order/models.py:244 msgid "Date order was issued" msgstr "" -#: order/models.py:246 +#: order/models.py:249 msgid "Target Delivery Date" msgstr "" -#: order/models.py:247 +#: order/models.py:250 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:253 +#: order/models.py:256 msgid "Date order was completed" msgstr "" -#: order/models.py:282 +#: order/models.py:285 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:411 -msgid "Quantity must be an integer" -msgstr "" - -#: order/models.py:415 +#: order/models.py:420 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:548 +#: order/models.py:553 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer Reference " msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer order reference code" msgstr "" -#: order/models.py:559 +#: order/models.py:564 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:562 order/models.py:1028 +#: order/models.py:567 order/models.py:1048 #: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:569 +#: order/models.py:574 msgid "shipped by" msgstr "" -#: order/models.py:635 +#: order/models.py:640 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:639 +#: order/models.py:644 msgid "Only a pending order can be marked as complete" msgstr "" -#: order/models.py:642 +#: order/models.py:647 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:645 +#: order/models.py:650 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:797 +#: order/models.py:806 msgid "Item quantity" msgstr "" -#: order/models.py:803 +#: order/models.py:812 msgid "Line item reference" msgstr "" -#: order/models.py:805 +#: order/models.py:814 msgid "Line item notes" msgstr "" -#: order/models.py:835 order/models.py:926 order/models.py:1022 -#: templates/js/translated/order.js:1820 +#: order/models.py:842 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:855 order/models.py:946 order/models.py:1042 +#: templates/js/translated/order.js:1820 templates/js/translated/stock.js:2271 msgid "Order" msgstr "" -#: order/models.py:836 order/templates/order/order_base.html:9 +#: order/models.py:856 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:352 -#: templates/js/translated/order.js:801 templates/js/translated/part.js:832 -#: templates/js/translated/stock.js:1725 templates/js/translated/stock.js:2433 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:838 +#: templates/js/translated/stock.js:1733 templates/js/translated/stock.js:2591 msgid "Purchase Order" msgstr "" -#: order/models.py:857 +#: order/models.py:877 msgid "Supplier part" msgstr "" -#: order/models.py:864 order/templates/order/order_base.html:163 +#: order/models.py:884 order/templates/order/order_base.html:163 #: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 -#: templates/js/translated/part.js:904 templates/js/translated/part.js:930 +#: templates/js/translated/part.js:910 templates/js/translated/part.js:937 #: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:865 +#: order/models.py:885 msgid "Number of items received" msgstr "" -#: order/models.py:872 part/templates/part/prices.html:176 stock/models.py:606 +#: order/models.py:892 part/templates/part/prices.html:176 stock/models.py:608 #: stock/serializers.py:170 stock/templates/stock/item_base.html:359 -#: templates/js/translated/stock.js:1779 +#: templates/js/translated/stock.js:1787 msgid "Purchase Price" msgstr "" -#: order/models.py:873 +#: order/models.py:893 msgid "Unit purchase price" msgstr "" -#: order/models.py:881 +#: order/models.py:901 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:936 part/templates/part/part_pricing.html:112 +#: order/models.py:956 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:937 +#: order/models.py:957 msgid "Unit sale price" msgstr "" -#: order/models.py:942 +#: order/models.py:962 msgid "Shipped quantity" msgstr "" -#: order/models.py:1029 +#: order/models.py:1049 msgid "Date of shipment" msgstr "" -#: order/models.py:1036 +#: order/models.py:1056 msgid "Checked By" msgstr "" -#: order/models.py:1037 +#: order/models.py:1057 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1045 +#: order/models.py:1065 msgid "Shipment number" msgstr "" -#: order/models.py:1052 +#: order/models.py:1072 msgid "Shipment notes" msgstr "" -#: order/models.py:1059 +#: order/models.py:1079 msgid "Tracking Number" msgstr "" -#: order/models.py:1060 +#: order/models.py:1080 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1070 +#: order/models.py:1090 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1073 +#: order/models.py:1093 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1149 order/models.py:1151 +#: order/models.py:1171 order/models.py:1173 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1155 +#: order/models.py:1177 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1157 +#: order/models.py:1179 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1160 +#: order/models.py:1182 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1164 +#: order/models.py:1186 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:1170 order/serializers.py:734 +#: order/models.py:1192 order/serializers.py:740 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1173 +#: order/models.py:1195 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1174 +#: order/models.py:1196 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1182 +#: order/models.py:1204 msgid "Line" msgstr "" -#: order/models.py:1190 order/serializers.py:825 order/serializers.py:953 -#: templates/js/translated/model_renderers.js:251 +#: order/models.py:1212 order/serializers.py:831 order/serializers.py:959 +#: templates/js/translated/model_renderers.js:285 msgid "Shipment" msgstr "" -#: order/models.py:1191 +#: order/models.py:1213 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1203 +#: order/models.py:1225 msgid "Item" msgstr "" -#: order/models.py:1204 +#: order/models.py:1226 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1207 +#: order/models.py:1229 msgid "Enter stock allocation quantity" msgstr "" @@ -3319,7 +3408,7 @@ msgstr "" msgid "Purchase price currency" msgstr "" -#: order/serializers.py:211 order/serializers.py:790 +#: order/serializers.py:211 order/serializers.py:796 msgid "Line Item" msgstr "" @@ -3355,39 +3444,39 @@ msgstr "" msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:587 msgid "Sale price currency" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:655 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:699 order/serializers.py:802 +#: order/serializers.py:705 order/serializers.py:808 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:721 +#: order/serializers.py:727 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:815 +#: order/serializers.py:821 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:839 order/serializers.py:964 +#: order/serializers.py:845 order/serializers.py:970 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:842 order/serializers.py:967 +#: order/serializers.py:848 order/serializers.py:973 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:894 +#: order/serializers.py:900 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:910 msgid "The following serial numbers are already allocated" msgstr "" @@ -3441,6 +3530,7 @@ msgstr "" #: order/templates/order/order_base.html:94 #: order/templates/order/sales_order_base.html:89 +#: templates/js/translated/stock.js:2327 msgid "Order Status" msgstr "" @@ -3538,7 +3628,7 @@ msgstr "" #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/build.js:300 templates/js/translated/build.js:1311 #: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 -#: templates/js/translated/stock.js:593 templates/js/translated/stock.js:761 +#: templates/js/translated/stock.js:601 templates/js/translated/stock.js:769 msgid "Remove row" msgstr "" @@ -3729,7 +3819,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:48 -#: templates/js/translated/bom.js:720 templates/js/translated/build.js:1243 +#: templates/js/translated/bom.js:732 templates/js/translated/build.js:1243 msgid "Actions" msgstr "" @@ -3832,447 +3922,448 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:125 part/models.py:81 part/models.py:847 +#: part/bom.py:125 part/models.py:83 part/models.py:849 #: part/templates/part/category.html:108 part/templates/part/part_base.html:338 msgid "Default Location" msgstr "" -#: part/bom.py:126 part/templates/part/part_base.html:185 +#: part/bom.py:126 templates/email/low_stock_notification.html:17 +msgid "Total Stock" +msgstr "" + +#: part/bom.py:127 part/templates/part/part_base.html:185 msgid "Available Stock" msgstr "" -#: part/forms.py:85 +#: part/bom.py:128 part/templates/part/part_base.html:203 +#: templates/js/translated/part.js:1301 +msgid "On Order" +msgstr "" + +#: part/forms.py:84 msgid "Select part category" msgstr "" -#: part/forms.py:122 +#: part/forms.py:121 msgid "Add parameter template to same level categories" msgstr "" -#: part/forms.py:126 +#: part/forms.py:125 msgid "Add parameter template to all categories" msgstr "" -#: part/forms.py:146 +#: part/forms.py:145 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 +#: part/models.py:84 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:95 part/models.py:2526 part/templates/part/category.html:15 +#: part/models.py:97 part/models.py:2533 part/templates/part/category.html:15 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:96 part/templates/part/category.html:128 -#: templates/InvenTree/search.html:95 templates/stats.html:84 +#: part/models.py:98 part/templates/part/category.html:128 +#: templates/InvenTree/search.html:95 templates/stats.html:96 #: users/models.py:40 msgid "Part Categories" msgstr "" -#: part/models.py:358 part/templates/part/cat_link.html:3 +#: part/models.py:360 part/templates/part/cat_link.html:3 #: part/templates/part/category.html:17 part/templates/part/category.html:133 #: part/templates/part/category.html:153 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82 #: templates/InvenTree/settings/sidebar.html:37 -#: templates/js/translated/part.js:1656 templates/navbar.html:21 -#: templates/stats.html:80 templates/stats.html:89 users/models.py:41 +#: templates/js/translated/part.js:1663 templates/navbar.html:21 +#: templates/stats.html:92 templates/stats.html:101 users/models.py:41 msgid "Parts" msgstr "" -#: part/models.py:450 +#: part/models.py:452 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:500 part/models.py:512 +#: part/models.py:502 part/models.py:514 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:642 +#: part/models.py:644 msgid "Next available serial numbers are" msgstr "" -#: part/models.py:646 +#: part/models.py:648 msgid "Next available serial number is" msgstr "" -#: part/models.py:651 +#: part/models.py:653 msgid "Most recent serial number is" msgstr "" -#: part/models.py:746 +#: part/models.py:748 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:771 +#: part/models.py:773 msgid "Part name" msgstr "" -#: part/models.py:778 +#: part/models.py:780 msgid "Is Template" msgstr "" -#: part/models.py:779 +#: part/models.py:781 msgid "Is this part a template part?" msgstr "" -#: part/models.py:789 +#: part/models.py:791 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:790 +#: part/models.py:792 msgid "Variant Of" msgstr "" -#: part/models.py:796 +#: part/models.py:798 msgid "Part description" msgstr "" -#: part/models.py:801 part/templates/part/category.html:86 +#: part/models.py:803 part/templates/part/category.html:86 #: part/templates/part/part_base.html:302 msgid "Keywords" msgstr "" -#: part/models.py:802 +#: part/models.py:804 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:809 part/models.py:2276 part/models.py:2525 +#: part/models.py:811 part/models.py:2283 part/models.py:2532 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:183 -#: templates/js/translated/part.js:1261 +#: templates/InvenTree/settings/settings.html:186 +#: templates/js/translated/part.js:1268 msgid "Category" msgstr "" -#: part/models.py:810 +#: part/models.py:812 msgid "Part category" msgstr "" -#: part/models.py:815 part/templates/part/part_base.html:274 -#: templates/js/translated/part.js:612 templates/js/translated/part.js:1214 -#: templates/js/translated/stock.js:1552 +#: part/models.py:817 part/templates/part/part_base.html:274 +#: templates/js/translated/part.js:618 templates/js/translated/part.js:1221 +#: templates/js/translated/stock.js:1560 msgid "IPN" msgstr "" -#: part/models.py:816 +#: part/models.py:818 msgid "Internal Part Number" msgstr "" -#: part/models.py:822 +#: part/models.py:824 msgid "Part revision or version number" msgstr "" -#: part/models.py:823 part/templates/part/part_base.html:281 -#: report/models.py:200 templates/js/translated/part.js:616 +#: part/models.py:825 part/templates/part/part_base.html:281 +#: report/models.py:200 templates/js/translated/part.js:622 msgid "Revision" msgstr "" -#: part/models.py:845 +#: part/models.py:847 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:892 part/templates/part/part_base.html:347 +#: part/models.py:894 part/templates/part/part_base.html:347 msgid "Default Supplier" msgstr "" -#: part/models.py:893 +#: part/models.py:895 msgid "Default supplier part" msgstr "" -#: part/models.py:900 +#: part/models.py:902 msgid "Default Expiry" msgstr "" -#: part/models.py:901 +#: part/models.py:903 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:906 part/templates/part/part_base.html:196 +#: part/models.py:908 part/templates/part/part_base.html:196 msgid "Minimum Stock" msgstr "" -#: part/models.py:907 +#: part/models.py:909 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:914 +#: part/models.py:916 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:920 +#: part/models.py:922 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:926 +#: part/models.py:928 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:932 +#: part/models.py:934 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:937 +#: part/models.py:939 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:942 +#: part/models.py:944 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:946 plugin/models.py:46 -#: templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:295 -#: templates/js/translated/table_filters.js:417 -msgid "Active" -msgstr "" - -#: part/models.py:947 +#: part/models.py:949 msgid "Is this part active?" msgstr "" -#: part/models.py:952 +#: part/models.py:954 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:957 +#: part/models.py:959 msgid "Part notes - supports Markdown formatting" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "BOM checksum" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:963 +#: part/models.py:965 msgid "BOM checked by" msgstr "" -#: part/models.py:965 +#: part/models.py:967 msgid "BOM checked date" msgstr "" -#: part/models.py:969 +#: part/models.py:971 msgid "Creation User" msgstr "" -#: part/models.py:1781 +#: part/models.py:1783 msgid "Sell multiple" msgstr "" -#: part/models.py:2326 +#: part/models.py:2333 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2343 +#: part/models.py:2350 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2363 templates/js/translated/part.js:1707 -#: templates/js/translated/stock.js:1276 +#: part/models.py:2370 templates/js/translated/part.js:1714 +#: templates/js/translated/stock.js:1284 msgid "Test Name" msgstr "" -#: part/models.py:2364 +#: part/models.py:2371 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2369 +#: part/models.py:2376 msgid "Test Description" msgstr "" -#: part/models.py:2370 +#: part/models.py:2377 msgid "Enter description for this test" msgstr "" -#: part/models.py:2375 templates/js/translated/part.js:1716 +#: part/models.py:2382 templates/js/translated/part.js:1723 #: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" -#: part/models.py:2376 +#: part/models.py:2383 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2381 templates/js/translated/part.js:1724 +#: part/models.py:2388 templates/js/translated/part.js:1731 msgid "Requires Value" msgstr "" -#: part/models.py:2382 +#: part/models.py:2389 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2387 templates/js/translated/part.js:1731 +#: part/models.py:2394 templates/js/translated/part.js:1738 msgid "Requires Attachment" msgstr "" -#: part/models.py:2388 +#: part/models.py:2395 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2399 +#: part/models.py:2406 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2435 +#: part/models.py:2442 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2443 +#: part/models.py:2450 msgid "Parameter Name" msgstr "" -#: part/models.py:2450 +#: part/models.py:2457 msgid "Parameter Units" msgstr "" -#: part/models.py:2480 +#: part/models.py:2487 msgid "Parent Part" msgstr "" -#: part/models.py:2482 part/models.py:2531 part/models.py:2532 -#: templates/InvenTree/settings/settings.html:178 +#: part/models.py:2489 part/models.py:2538 part/models.py:2539 +#: templates/InvenTree/settings/settings.html:181 msgid "Parameter Template" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Data" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Parameter Value" msgstr "" -#: part/models.py:2536 templates/InvenTree/settings/settings.html:187 +#: part/models.py:2543 templates/InvenTree/settings/settings.html:190 msgid "Default Value" msgstr "" -#: part/models.py:2537 +#: part/models.py:2544 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2614 +#: part/models.py:2621 msgid "Select parent part" msgstr "" -#: part/models.py:2622 +#: part/models.py:2629 msgid "Sub part" msgstr "" -#: part/models.py:2623 +#: part/models.py:2630 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2629 +#: part/models.py:2636 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2631 templates/js/translated/bom.js:566 -#: templates/js/translated/bom.js:640 +#: part/models.py:2638 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:652 #: templates/js/translated/table_filters.js:92 msgid "Optional" msgstr "" -#: part/models.py:2631 +#: part/models.py:2638 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2634 +#: part/models.py:2641 msgid "Overage" msgstr "" -#: part/models.py:2635 +#: part/models.py:2642 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2638 +#: part/models.py:2645 msgid "BOM item reference" msgstr "" -#: part/models.py:2641 +#: part/models.py:2648 msgid "BOM item notes" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "Checksum" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "BOM line checksum" msgstr "" -#: part/models.py:2647 templates/js/translated/bom.js:657 +#: part/models.py:2654 templates/js/translated/bom.js:669 #: templates/js/translated/table_filters.js:68 #: templates/js/translated/table_filters.js:88 msgid "Inherited" msgstr "" -#: part/models.py:2648 +#: part/models.py:2655 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2653 templates/js/translated/bom.js:649 +#: part/models.py:2660 templates/js/translated/bom.js:661 msgid "Allow Variants" msgstr "" -#: part/models.py:2654 +#: part/models.py:2661 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2739 stock/models.py:355 +#: part/models.py:2746 stock/models.py:357 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2748 part/models.py:2750 +#: part/models.py:2755 part/models.py:2757 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2879 +#: part/models.py:2886 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2901 +#: part/models.py:2908 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2913 +#: part/models.py:2920 msgid "Parent BOM item" msgstr "" -#: part/models.py:2921 +#: part/models.py:2928 msgid "Substitute part" msgstr "" -#: part/models.py:2932 +#: part/models.py:2939 msgid "Part 1" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Part 2" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Select Related Part" msgstr "" -#: part/models.py:2968 +#: part/models.py:2975 msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique" msgstr "" @@ -4327,7 +4418,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:253 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:270 msgid "BOM actions" msgstr "" @@ -4499,7 +4590,7 @@ msgstr "" msgid "Import Parts" msgstr "" -#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:375 +#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:348 msgid "Duplicate Part" msgstr "" @@ -4533,145 +4624,149 @@ msgid "Showing stock for all variants of %(full_name)s" msgstr "" #: part/templates/part/detail.html:43 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/detail.html:60 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:48 +#: part/templates/part/detail.html:65 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:105 +#: part/templates/part/detail.html:122 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:142 +#: part/templates/part/detail.html:159 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:146 +#: part/templates/part/detail.html:163 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:147 +#: part/templates/part/detail.html:164 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:174 +#: part/templates/part/detail.html:191 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:45 +#: part/templates/part/detail.html:228 part/templates/part/part_sidebar.html:49 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:215 part/templates/part/detail.html:216 +#: part/templates/part/detail.html:232 part/templates/part/detail.html:233 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:253 part/templates/part/part_sidebar.html:17 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:241 +#: part/templates/part/detail.html:258 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:245 templates/js/translated/bom.js:70 +#: part/templates/part/detail.html:262 templates/js/translated/bom.js:70 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:247 +#: part/templates/part/detail.html:264 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:257 +#: part/templates/part/detail.html:274 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:259 templates/js/translated/part.js:272 +#: part/templates/part/detail.html:276 templates/js/translated/part.js:272 msgid "Copy BOM" msgstr "" -#: part/templates/part/detail.html:261 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:283 msgid "New BOM Item" msgstr "" -#: part/templates/part/detail.html:267 +#: part/templates/part/detail.html:284 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:280 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:314 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:322 +#: part/templates/part/detail.html:339 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:332 +#: part/templates/part/detail.html:349 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:360 +#: part/templates/part/detail.html:377 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:393 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:558 +#: part/templates/part/detail.html:575 msgid "Delete selected BOM items?" msgstr "" -#: part/templates/part/detail.html:559 +#: part/templates/part/detail.html:576 msgid "All selected BOM items will be deleted" msgstr "" -#: part/templates/part/detail.html:608 +#: part/templates/part/detail.html:625 msgid "Create BOM Item" msgstr "" -#: part/templates/part/detail.html:652 +#: part/templates/part/detail.html:682 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:660 +#: part/templates/part/detail.html:690 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:755 +#: part/templates/part/detail.html:785 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:812 +#: part/templates/part/detail.html:842 msgid "Edit Part Notes" msgstr "" -#: part/templates/part/detail.html:925 +#: part/templates/part/detail.html:955 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:937 +#: part/templates/part/detail.html:967 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:949 +#: part/templates/part/detail.html:979 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1038 +#: part/templates/part/detail.html:1068 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -4786,7 +4881,7 @@ msgstr "" #: templates/js/translated/company.js:508 #: templates/js/translated/company.js:765 #: templates/js/translated/model_renderers.js:175 -#: templates/js/translated/part.js:527 templates/js/translated/part.js:604 +#: templates/js/translated/part.js:533 templates/js/translated/part.js:610 msgid "Inactive" msgstr "" @@ -4805,10 +4900,6 @@ msgstr "" msgid "In Stock" msgstr "" -#: part/templates/part/part_base.html:203 templates/js/translated/part.js:1294 -msgid "On Order" -msgstr "" - #: part/templates/part/part_base.html:210 templates/InvenTree/index.html:178 msgid "Required for Build Orders" msgstr "" @@ -4821,12 +4912,12 @@ msgstr "" msgid "Allocated to Orders" msgstr "" -#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:678 +#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:690 msgid "Can Build" msgstr "" -#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1125 -#: templates/js/translated/part.js:1298 +#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1132 +#: templates/js/translated/part.js:1305 msgid "Building" msgstr "" @@ -4878,7 +4969,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:40 -#: templates/js/translated/bom.js:632 +#: templates/js/translated/bom.js:644 msgid "No supplier pricing available" msgstr "" @@ -4920,7 +5011,12 @@ msgstr "" msgid "Used In" msgstr "" -#: part/templates/part/part_sidebar.html:41 +#: part/templates/part/part_sidebar.html:31 +#: stock/templates/stock/stock_sidebar.html:8 +msgid "Allocations" +msgstr "" + +#: part/templates/part/part_sidebar.html:45 msgid "Test Templates" msgstr "" @@ -4993,7 +5089,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:155 templates/js/translated/bom.js:626 +#: part/templates/part/prices.html:155 templates/js/translated/bom.js:638 msgid "Supplier Cost" msgstr "" @@ -5015,7 +5111,7 @@ msgstr "" msgid "Internal Cost" msgstr "" -#: part/templates/part/prices.html:215 part/views.py:1690 +#: part/templates/part/prices.html:215 part/views.py:1699 msgid "Add Internal Price Break" msgstr "" @@ -5035,9 +5131,9 @@ msgstr "" msgid "Set category for the following parts" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:588 -#: templates/js/translated/part.js:491 templates/js/translated/part.js:1115 -#: templates/js/translated/part.js:1302 +#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:600 +#: templates/js/translated/part.js:497 templates/js/translated/part.js:1122 +#: templates/js/translated/part.js:1309 msgid "No Stock" msgstr "" @@ -5054,116 +5150,116 @@ msgstr "" msgid "Create a new variant of template '%(full_name)s'." msgstr "" -#: part/templatetags/inventree_extras.py:116 +#: part/templatetags/inventree_extras.py:125 msgid "Unknown database" msgstr "" -#: part/views.py:92 +#: part/views.py:93 msgid "Set Part Category" msgstr "" -#: part/views.py:142 +#: part/views.py:143 #, python-brace-format msgid "Set category for {n} parts" msgstr "" -#: part/views.py:214 +#: part/views.py:215 msgid "Match References" msgstr "" -#: part/views.py:502 +#: part/views.py:511 msgid "None" msgstr "" -#: part/views.py:561 +#: part/views.py:570 msgid "Part QR Code" msgstr "" -#: part/views.py:663 +#: part/views.py:672 msgid "Select Part Image" msgstr "" -#: part/views.py:689 +#: part/views.py:698 msgid "Updated part image" msgstr "" -#: part/views.py:692 +#: part/views.py:701 msgid "Part image not found" msgstr "" -#: part/views.py:766 +#: part/views.py:775 msgid "Match Parts" msgstr "" -#: part/views.py:1101 +#: part/views.py:1110 msgid "Export Bill of Materials" msgstr "" -#: part/views.py:1150 +#: part/views.py:1159 msgid "Confirm Part Deletion" msgstr "" -#: part/views.py:1157 +#: part/views.py:1166 msgid "Part was deleted" msgstr "" -#: part/views.py:1166 +#: part/views.py:1175 msgid "Part Pricing" msgstr "" -#: part/views.py:1315 +#: part/views.py:1324 msgid "Create Part Parameter Template" msgstr "" -#: part/views.py:1325 +#: part/views.py:1334 msgid "Edit Part Parameter Template" msgstr "" -#: part/views.py:1332 +#: part/views.py:1341 msgid "Delete Part Parameter Template" msgstr "" -#: part/views.py:1391 templates/js/translated/part.js:315 +#: part/views.py:1400 templates/js/translated/part.js:315 msgid "Edit Part Category" msgstr "" -#: part/views.py:1429 +#: part/views.py:1438 msgid "Delete Part Category" msgstr "" -#: part/views.py:1435 +#: part/views.py:1444 msgid "Part category was deleted" msgstr "" -#: part/views.py:1444 +#: part/views.py:1453 msgid "Create Category Parameter Template" msgstr "" -#: part/views.py:1545 +#: part/views.py:1554 msgid "Edit Category Parameter Template" msgstr "" -#: part/views.py:1601 +#: part/views.py:1610 msgid "Delete Category Parameter Template" msgstr "" -#: part/views.py:1623 +#: part/views.py:1632 msgid "Added new price break" msgstr "" -#: part/views.py:1699 +#: part/views.py:1708 msgid "Edit Internal Price Break" msgstr "" -#: part/views.py:1707 +#: part/views.py:1716 msgid "Delete Internal Price Break" msgstr "" -#: plugin/integration.py:124 +#: plugin/integration.py:138 msgid "No author found" msgstr "" -#: plugin/integration.py:136 +#: plugin/integration.py:152 msgid "No date found" msgstr "" @@ -5191,7 +5287,7 @@ msgstr "" msgid "Is the plugin active" msgstr "" -#: plugin/models.py:195 +#: plugin/models.py:199 msgid "Plugin" msgstr "" @@ -5357,12 +5453,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:517 stock/templates/stock/item_base.html:156 +#: stock/models.py:519 stock/templates/stock/item_base.html:156 #: templates/js/translated/build.js:293 templates/js/translated/build.js:697 #: templates/js/translated/build.js:1073 #: templates/js/translated/model_renderers.js:95 #: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 -#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:415 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:423 msgid "Serial Number" msgstr "" @@ -5371,19 +5467,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1948 +#: stock/models.py:1976 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1954 +#: stock/models.py:1982 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin.html:50 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2367 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2525 msgid "Date" msgstr "" @@ -5396,23 +5492,27 @@ msgid "Fail" msgstr "" #: report/templates/report/inventree_test_report_base.html:123 -#: stock/templates/stock/stock_sidebar.html:12 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:578 templates/js/translated/stock.js:748 -#: templates/js/translated/stock.js:2627 +#: templates/js/translated/stock.js:586 templates/js/translated/stock.js:756 +#: templates/js/translated/stock.js:2785 msgid "Serial" msgstr "" -#: stock/api.py:478 +#: stock/api.py:476 msgid "Quantity is required" msgstr "" -#: stock/forms.py:77 stock/forms.py:251 stock/models.py:574 +#: stock/api.py:483 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:576 #: stock/templates/stock/item_base.html:193 -#: templates/js/translated/stock.js:1701 +#: templates/js/translated/stock.js:1709 msgid "Expiry Date" msgstr "" @@ -5460,228 +5560,228 @@ msgstr "" msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:611 +#: stock/models.py:62 stock/models.py:613 #: stock/templates/stock/item_base.html:416 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:612 +#: stock/models.py:63 stock/models.py:614 msgid "Select Owner" msgstr "" -#: stock/models.py:336 +#: stock/models.py:338 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:372 +#: stock/models.py:374 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:382 stock/models.py:391 +#: stock/models.py:384 stock/models.py:393 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:383 +#: stock/models.py:385 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:405 +#: stock/models.py:407 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:411 +#: stock/models.py:413 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:418 +#: stock/models.py:420 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:461 +#: stock/models.py:463 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:470 +#: stock/models.py:472 msgid "Base part" msgstr "" -#: stock/models.py:478 +#: stock/models.py:480 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:484 stock/templates/stock/location.html:16 +#: stock/models.py:486 stock/templates/stock/location.html:16 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:494 +#: stock/models.py:496 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:500 stock/templates/stock/item_base.html:298 +#: stock/models.py:502 stock/templates/stock/item_base.html:298 msgid "Installed In" msgstr "" -#: stock/models.py:503 +#: stock/models.py:505 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:519 +#: stock/models.py:521 msgid "Serial number for this item" msgstr "" -#: stock/models.py:533 +#: stock/models.py:535 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:537 +#: stock/models.py:539 msgid "Stock Quantity" msgstr "" -#: stock/models.py:546 +#: stock/models.py:548 msgid "Source Build" msgstr "" -#: stock/models.py:548 +#: stock/models.py:550 msgid "Build for this stock item" msgstr "" -#: stock/models.py:559 +#: stock/models.py:561 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:562 +#: stock/models.py:564 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:568 +#: stock/models.py:570 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:575 +#: stock/models.py:577 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete on deplete" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:598 stock/templates/stock/item.html:111 +#: stock/models.py:600 stock/templates/stock/item.html:128 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:607 +#: stock/models.py:609 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1096 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1074 +#: stock/models.py:1102 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1080 +#: stock/models.py:1108 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1083 +#: stock/models.py:1111 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1086 +#: stock/models.py:1114 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1093 +#: stock/models.py:1121 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1164 +#: stock/models.py:1192 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1195 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1170 +#: stock/models.py:1198 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1173 +#: stock/models.py:1201 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1176 +#: stock/models.py:1204 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1179 +#: stock/models.py:1207 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1186 stock/serializers.py:774 +#: stock/models.py:1214 stock/serializers.py:775 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1190 +#: stock/models.py:1218 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1222 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1198 +#: stock/models.py:1226 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1369 +#: stock/models.py:1397 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1868 +#: stock/models.py:1896 msgid "Entry notes" msgstr "" -#: stock/models.py:1925 +#: stock/models.py:1953 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1931 +#: stock/models.py:1959 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1949 +#: stock/models.py:1977 msgid "Test name" msgstr "" -#: stock/models.py:1955 templates/js/translated/table_filters.js:271 +#: stock/models.py:1983 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1961 +#: stock/models.py:1989 msgid "Test output value" msgstr "" -#: stock/models.py:1968 +#: stock/models.py:1996 msgid "Test result attachment" msgstr "" -#: stock/models.py:1974 +#: stock/models.py:2002 msgid "Test notes" msgstr "" @@ -5706,7 +5806,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:326 stock/serializers.py:731 stock/serializers.py:972 +#: stock/serializers.py:326 stock/serializers.py:732 stock/serializers.py:973 msgid "Destination stock location" msgstr "" @@ -5718,63 +5818,63 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:589 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:592 +#: stock/serializers.py:593 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:597 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:626 +#: stock/serializers.py:627 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:632 +#: stock/serializers.py:633 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:640 +#: stock/serializers.py:641 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:650 stock/serializers.py:880 +#: stock/serializers.py:651 stock/serializers.py:881 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:738 +#: stock/serializers.py:739 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:743 +#: stock/serializers.py:744 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:744 +#: stock/serializers.py:745 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:749 +#: stock/serializers.py:750 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:750 +#: stock/serializers.py:751 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:760 +#: stock/serializers.py:761 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:842 +#: stock/serializers.py:843 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:870 +#: stock/serializers.py:871 msgid "Stock transaction notes" msgstr "" @@ -5787,47 +5887,51 @@ msgid "New Entry" msgstr "" #: stock/templates/stock/item.html:48 -msgid "Child Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:55 -msgid "This stock item does not have any child items" +msgid "Stock Item Allocations" msgstr "" #: stock/templates/stock/item.html:64 -#: stock/templates/stock/stock_sidebar.html:8 -msgid "Test Data" -msgstr "" - -#: stock/templates/stock/item.html:68 stock/templates/stock/item_base.html:57 -msgid "Test Report" +msgid "Child Stock Items" msgstr "" #: stock/templates/stock/item.html:72 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item.html:81 +#: stock/templates/stock/stock_sidebar.html:12 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:57 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item.html:89 msgid "Delete Test Data" msgstr "" -#: stock/templates/stock/item.html:76 +#: stock/templates/stock/item.html:93 msgid "Add Test Data" msgstr "" -#: stock/templates/stock/item.html:133 +#: stock/templates/stock/item.html:150 msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:482 +#: stock/templates/stock/item.html:154 stock/views.py:482 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:279 stock/templates/stock/item.html:304 +#: stock/templates/stock/item.html:309 stock/templates/stock/item.html:334 msgid "Add Test Result" msgstr "" -#: stock/templates/stock/item.html:324 +#: stock/templates/stock/item.html:354 msgid "Edit Test Result" msgstr "" -#: stock/templates/stock/item.html:338 +#: stock/templates/stock/item.html:368 msgid "Delete Test Result" msgstr "" @@ -5952,7 +6056,7 @@ msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:206 -#: templates/js/translated/stock.js:1714 +#: templates/js/translated/stock.js:1722 msgid "Last Updated" msgstr "" @@ -6111,7 +6215,7 @@ msgid "Sublocations" msgstr "" #: stock/templates/stock/location.html:146 templates/InvenTree/search.html:164 -#: templates/stats.html:97 users/models.py:42 +#: templates/stats.html:109 users/models.py:42 msgid "Stock Locations" msgstr "" @@ -6135,7 +6239,7 @@ msgstr "" msgid "Stock Tracking" msgstr "" -#: stock/templates/stock/stock_sidebar.html:16 +#: stock/templates/stock/stock_sidebar.html:20 msgid "Child Items" msgstr "" @@ -6164,7 +6268,7 @@ msgstr "" msgid "Are you sure you want to delete this stock tracking entry?" msgstr "" -#: stock/views.py:162 +#: stock/views.py:162 templates/js/translated/stock.js:139 msgid "Edit Stock Location" msgstr "" @@ -6204,7 +6308,7 @@ msgstr "" msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:727 templates/js/translated/stock.js:1066 +#: stock/views.py:727 templates/js/translated/stock.js:1074 msgid "Confirm stock adjustment" msgstr "" @@ -6212,7 +6316,7 @@ msgstr "" msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:324 +#: stock/views.py:760 templates/js/translated/stock.js:332 msgid "Edit Stock Item" msgstr "" @@ -6224,7 +6328,7 @@ msgstr "" msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1153 templates/js/translated/stock.js:304 +#: stock/views.py:1153 templates/js/translated/stock.js:312 msgid "Duplicate Stock Item" msgstr "" @@ -6268,6 +6372,18 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/500.html:5 templates/500.html:11 +msgid "Internal Server Error" +msgstr "" + +#: templates/500.html:14 +msgid "The InvenTree server raised an internal error" +msgstr "" + +#: templates/500.html:15 +msgid "Refer to the error log in the admin interface for further details" +msgstr "" + #: templates/503.html:10 templates/503.html:35 msgid "Site is in Maintenance" msgstr "" @@ -6390,7 +6506,7 @@ msgid "Signup" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:113 msgid "Settings" msgstr "" @@ -6431,43 +6547,43 @@ msgstr "" msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:32 +#: templates/InvenTree/settings/plugin.html:33 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:37 +#: templates/InvenTree/settings/plugin.html:38 #: templates/js/translated/plugin.js:15 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: templates/InvenTree/settings/plugin.html:47 templates/navbar.html:111 #: users/models.py:39 msgid "Admin" msgstr "" -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:49 #: templates/InvenTree/settings/plugin_settings.html:28 msgid "Author" msgstr "" -#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin_settings.html:43 msgid "Version" msgstr "" -#: templates/InvenTree/settings/plugin.html:91 +#: templates/InvenTree/settings/plugin.html:92 msgid "Inactive plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:114 +#: templates/InvenTree/settings/plugin.html:115 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:123 +#: templates/InvenTree/settings/plugin.html:124 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:125 +#: templates/InvenTree/settings/plugin.html:126 msgid "Message" msgstr "" @@ -6555,37 +6671,37 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:75 +#: templates/InvenTree/settings/settings.html:78 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:77 +#: templates/InvenTree/settings/settings.html:80 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:79 +#: templates/InvenTree/settings/settings.html:82 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:168 +#: templates/InvenTree/settings/settings.html:171 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:190 -#: templates/InvenTree/settings/settings.html:289 +#: templates/InvenTree/settings/settings.html:193 +#: templates/InvenTree/settings/settings.html:292 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:191 -#: templates/InvenTree/settings/settings.html:290 +#: templates/InvenTree/settings/settings.html:194 +#: templates/InvenTree/settings/settings.html:293 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:272 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:273 +#: templates/InvenTree/settings/settings.html:276 msgid "ID" msgstr "" @@ -6763,124 +6879,105 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:219 +#: templates/InvenTree/settings/user.html:220 +msgid "Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:226 +msgid "Log out active sessions (except this one)" +msgstr "" + +#: templates/InvenTree/settings/user.html:227 +msgid "Log Out Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:236 +msgid "unknown on unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:237 +msgid "unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:241 +msgid "IP Address" +msgstr "" + +#: templates/InvenTree/settings/user.html:242 +msgid "Device" +msgstr "" + +#: templates/InvenTree/settings/user.html:243 +msgid "Last Activity" +msgstr "" + +#: templates/InvenTree/settings/user.html:252 +#, python-format +msgid "%(time)s ago (this session)" +msgstr "" + +#: templates/InvenTree/settings/user.html:254 +#, python-format +msgid "%(time)s ago" +msgstr "" + +#: templates/InvenTree/settings/user.html:266 +msgid "Do you really want to remove the selected email address?" +msgstr "" + #: templates/InvenTree/settings/user_display.html:25 msgid "Theme Settings" msgstr "" -#: templates/InvenTree/settings/user.html:227 #: templates/InvenTree/settings/user_display.html:35 msgid "Select theme" msgstr "" -#: templates/InvenTree/settings/user.html:237 #: templates/InvenTree/settings/user_display.html:46 msgid "Set Theme" msgstr "" -#: templates/InvenTree/settings/user.html:246 #: templates/InvenTree/settings/user_display.html:54 msgid "Language Settings" msgstr "" -#: templates/InvenTree/settings/user.html:254 #: templates/InvenTree/settings/user_display.html:63 msgid "Select language" msgstr "" -#: templates/InvenTree/settings/user.html:270 #: templates/InvenTree/settings/user_display.html:79 #, python-format msgid "%(lang_translated)s%% translated" msgstr "" -#: templates/InvenTree/settings/user.html:272 #: templates/InvenTree/settings/user_display.html:81 msgid "No translations available" msgstr "" -#: templates/InvenTree/settings/user.html:279 #: templates/InvenTree/settings/user_display.html:88 msgid "Set Language" msgstr "" -#: templates/InvenTree/settings/user.html:281 #: templates/InvenTree/settings/user_display.html:91 msgid "Some languages are not complete" msgstr "" -#: templates/InvenTree/settings/user.html:283 #: templates/InvenTree/settings/user_display.html:93 msgid "Show only sufficent" msgstr "" -#: templates/InvenTree/settings/user.html:285 +#: templates/InvenTree/settings/user_display.html:95 +msgid "and hidden." +msgstr "" + #: templates/InvenTree/settings/user_display.html:95 msgid "Show them too" msgstr "" -#: templates/InvenTree/settings/user.html:292 #: templates/InvenTree/settings/user_display.html:101 msgid "Help the translation efforts!" msgstr "" -#: templates/InvenTree/settings/user.html:293 -#, python-format -msgid "Native language translation of the\n" -" InvenTree web application is community contributed via crowdin. Contributions are\n" -" welcomed and encouraged." -msgstr "" - -#: templates/InvenTree/settings/user.html:302 -msgid "Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:308 -msgid "Log out active sessions (except this one)" -msgstr "" - -#: templates/InvenTree/settings/user.html:309 -msgid "Log Out Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:318 -msgid "unknown on unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:319 -msgid "unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:323 -msgid "IP Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:324 -msgid "Device" -msgstr "" - -#: templates/InvenTree/settings/user.html:325 -msgid "Last Activity" -msgstr "" - -#: templates/InvenTree/settings/user.html:334 -#, python-format -msgid "%(time)s ago (this session)" -msgstr "" - -#: templates/InvenTree/settings/user.html:336 -#, python-format -msgid "%(time)s ago" -msgstr "" - -#: templates/InvenTree/settings/user.html:348 -msgid "Do you really want to remove the selected email address?" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:95 -msgid "and hidden." -msgstr "" - #: templates/InvenTree/settings/user_display.html:102 #, python-format msgid "Native language translation of the InvenTree web application is community contributed via crowdin. Contributions are welcomed and encouraged." @@ -6899,9 +6996,9 @@ msgid "InvenTree Version Information" msgstr "" #: templates/about.html:11 templates/about.html:105 -#: templates/js/translated/bom.js:395 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:573 templates/js/translated/modals.js:667 -#: templates/js/translated/modals.js:970 templates/modals.html:15 +#: templates/js/translated/bom.js:407 templates/js/translated/modals.js:53 +#: templates/js/translated/modals.js:584 templates/js/translated/modals.js:678 +#: templates/js/translated/modals.js:983 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -7178,13 +7275,13 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1103 +#: templates/js/translated/bom.js:1117 msgid "Required Quantity" msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:579 templates/js/translated/build.js:1189 +#: templates/js/translated/bom.js:591 templates/js/translated/build.js:1189 #: templates/js/translated/build.js:1810 #: templates/js/translated/table_filters.js:178 msgid "Available" @@ -7208,10 +7305,6 @@ msgstr "" msgid "Click on the following link to view this part" msgstr "" -#: templates/email/low_stock_notification.html:17 -msgid "Total Stock" -msgstr "" - #: templates/email/low_stock_notification.html:19 msgid "Minimum Quantity" msgstr "" @@ -7232,11 +7325,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1040 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1053 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1041 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1054 msgid "No response from the InvenTree server" msgstr "" @@ -7248,27 +7341,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1063 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1051 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1064 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1068 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1056 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1069 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1073 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1061 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1074 msgid "The requested resource could not be located on the server" msgstr "" @@ -7280,11 +7373,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1065 +#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1078 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1066 +#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1079 msgid "Connection timeout while requesting data from server" msgstr "" @@ -7353,7 +7446,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "Invalid server response" msgstr "" @@ -7381,7 +7474,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1018 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1026 msgid "Remove stock item" msgstr "" @@ -7428,12 +7521,12 @@ msgid "Download BOM Template" msgstr "" #: templates/js/translated/bom.js:39 templates/js/translated/bom.js:73 -#: templates/js/translated/order.js:369 templates/js/translated/stock.js:510 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:518 msgid "Format" msgstr "" #: templates/js/translated/bom.js:40 templates/js/translated/bom.js:74 -#: templates/js/translated/order.js:370 templates/js/translated/stock.js:511 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:519 msgid "Select file format" msgstr "" @@ -7489,87 +7582,87 @@ msgstr "" msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:340 -msgid "Select and add a new variant item using the input below" +#: templates/js/translated/bom.js:352 +msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:351 +#: templates/js/translated/bom.js:363 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:357 +#: templates/js/translated/bom.js:369 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:396 +#: templates/js/translated/bom.js:408 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:397 +#: templates/js/translated/bom.js:409 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:516 +#: templates/js/translated/bom.js:528 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:520 templates/js/translated/build.js:1171 +#: templates/js/translated/bom.js:532 templates/js/translated/build.js:1171 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:525 +#: templates/js/translated/bom.js:537 msgid "Open subassembly" msgstr "" -#: templates/js/translated/bom.js:597 +#: templates/js/translated/bom.js:609 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:612 +#: templates/js/translated/bom.js:624 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:619 +#: templates/js/translated/bom.js:631 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:668 templates/js/translated/bom.js:757 +#: templates/js/translated/bom.js:680 templates/js/translated/bom.js:769 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:728 +#: templates/js/translated/bom.js:740 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:742 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:732 +#: templates/js/translated/bom.js:744 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:734 templates/js/translated/bom.js:908 +#: templates/js/translated/bom.js:746 templates/js/translated/bom.js:920 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:891 +#: templates/js/translated/bom.js:748 templates/js/translated/bom.js:903 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:830 templates/js/translated/build.js:915 +#: templates/js/translated/bom.js:842 templates/js/translated/build.js:915 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:886 +#: templates/js/translated/bom.js:898 msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:1086 templates/js/translated/build.js:1155 +#: templates/js/translated/bom.js:1100 templates/js/translated/build.js:1155 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1108 +#: templates/js/translated/bom.js:1122 msgid "Inherited from parent BOM" msgstr "" @@ -7725,9 +7818,9 @@ msgstr "" msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1206 -#: templates/js/translated/part.js:1617 templates/js/translated/stock.js:1512 -#: templates/js/translated/stock.js:2321 +#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:1624 templates/js/translated/stock.js:1520 +#: templates/js/translated/stock.js:2479 msgid "Select" msgstr "" @@ -7735,7 +7828,7 @@ msgstr "" msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2540 +#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2698 msgid "No user information" msgstr "" @@ -7808,34 +7901,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:500 -#: templates/js/translated/company.js:757 templates/js/translated/part.js:511 -#: templates/js/translated/part.js:596 +#: templates/js/translated/company.js:757 templates/js/translated/part.js:517 +#: templates/js/translated/part.js:602 msgid "Template part" msgstr "" #: templates/js/translated/company.js:504 -#: templates/js/translated/company.js:761 templates/js/translated/part.js:515 -#: templates/js/translated/part.js:600 +#: templates/js/translated/company.js:761 templates/js/translated/part.js:521 +#: templates/js/translated/part.js:606 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:631 templates/js/translated/part.js:690 +#: templates/js/translated/company.js:631 templates/js/translated/part.js:696 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:668 templates/js/translated/part.js:732 +#: templates/js/translated/company.js:668 templates/js/translated/part.js:738 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:669 templates/js/translated/part.js:733 +#: templates/js/translated/company.js:669 templates/js/translated/part.js:739 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:688 templates/js/translated/part.js:750 +#: templates/js/translated/company.js:688 templates/js/translated/part.js:756 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:699 templates/js/translated/part.js:762 +#: templates/js/translated/company.js:699 templates/js/translated/part.js:768 msgid "Delete Parameter" msgstr "" @@ -7844,12 +7937,12 @@ msgid "No supplier parts found" msgstr "" #: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:420 +#: templates/js/translated/filters.js:429 msgid "true" msgstr "" #: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:421 +#: templates/js/translated/filters.js:430 msgid "false" msgstr "" @@ -7869,7 +7962,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:329 +#: templates/js/translated/filters.js:338 msgid "Create filter" msgstr "" @@ -7898,20 +7991,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1080 templates/modals.html:19 +#: templates/js/translated/forms.js:1082 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1471 +#: templates/js/translated/forms.js:1487 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1675 +#: templates/js/translated/forms.js:1691 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1895 +#: templates/js/translated/forms.js:1930 msgid "Clear input" msgstr "" @@ -7924,7 +8017,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1042 +#: templates/js/translated/stock.js:1050 msgid "Select Stock Items" msgstr "" @@ -7974,12 +8067,12 @@ msgid "Select Label Template" msgstr "" #: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 -#: templates/js/translated/modals.js:599 +#: templates/js/translated/modals.js:610 msgid "Cancel" msgstr "" #: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:666 templates/js/translated/modals.js:969 +#: templates/js/translated/modals.js:677 templates/js/translated/modals.js:982 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" @@ -7988,47 +8081,47 @@ msgstr "" msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:381 +#: templates/js/translated/modals.js:392 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:540 +#: templates/js/translated/modals.js:551 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:598 +#: templates/js/translated/modals.js:609 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:655 +#: templates/js/translated/modals.js:666 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:933 +#: templates/js/translated/modals.js:946 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1045 +#: templates/js/translated/modals.js:1058 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1046 +#: templates/js/translated/modals.js:1059 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1069 +#: templates/js/translated/modals.js:1082 msgid "Error requesting form data" msgstr "" @@ -8052,23 +8145,24 @@ msgstr "" msgid "Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:236 +#: templates/js/translated/model_renderers.js:249 +#: templates/js/translated/model_renderers.js:270 msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:253 +#: templates/js/translated/model_renderers.js:287 msgid "Shipment ID" msgstr "" -#: templates/js/translated/model_renderers.js:273 +#: templates/js/translated/model_renderers.js:307 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:310 +#: templates/js/translated/model_renderers.js:344 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:339 +#: templates/js/translated/model_renderers.js:373 msgid "Supplier Part ID" msgstr "" @@ -8116,7 +8210,7 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2123 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2131 msgid "Stock Status" msgstr "" @@ -8140,7 +8234,7 @@ msgstr "" msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:790 templates/js/translated/part.js:803 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:809 msgid "No purchase orders found" msgstr "" @@ -8165,7 +8259,7 @@ msgid "Total" msgstr "" #: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 -#: templates/js/translated/part.js:1834 templates/js/translated/part.js:2045 +#: templates/js/translated/part.js:1841 templates/js/translated/part.js:2052 msgid "Unit Price" msgstr "" @@ -8181,7 +8275,7 @@ msgstr "" msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1166 templates/js/translated/part.js:935 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:942 msgid "Receive line item" msgstr "" @@ -8250,7 +8344,7 @@ msgid "Delete Stock Allocation" msgstr "" #: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 -#: templates/js/translated/stock.js:1428 +#: templates/js/translated/stock.js:1436 msgid "Shipped to customer" msgstr "" @@ -8378,144 +8472,148 @@ msgstr "" msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:412 +#: templates/js/translated/part.js:351 +msgid "Create Part Variant" +msgstr "" + +#: templates/js/translated/part.js:418 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:414 +#: templates/js/translated/part.js:420 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:419 +#: templates/js/translated/part.js:425 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:421 +#: templates/js/translated/part.js:427 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:444 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:448 +#: templates/js/translated/part.js:454 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:451 +#: templates/js/translated/part.js:457 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:481 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:503 templates/js/translated/part.js:588 +#: templates/js/translated/part.js:509 templates/js/translated/part.js:594 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:507 templates/js/translated/part.js:592 +#: templates/js/translated/part.js:513 templates/js/translated/part.js:598 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:519 +#: templates/js/translated/part.js:525 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:523 +#: templates/js/translated/part.js:529 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:638 +#: templates/js/translated/part.js:644 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1005 +#: templates/js/translated/part.js:1012 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1029 +#: templates/js/translated/part.js:1036 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1096 templates/js/translated/part.js:1356 +#: templates/js/translated/part.js:1103 templates/js/translated/part.js:1363 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1266 +#: templates/js/translated/part.js:1273 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1289 +#: templates/js/translated/part.js:1296 #: templates/js/translated/table_filters.js:430 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:1380 templates/js/translated/part.js:1552 -#: templates/js/translated/stock.js:2282 +#: templates/js/translated/part.js:1387 templates/js/translated/part.js:1559 +#: templates/js/translated/stock.js:2440 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1396 +#: templates/js/translated/part.js:1403 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1571 templates/js/translated/stock.js:2301 +#: templates/js/translated/part.js:1578 templates/js/translated/stock.js:2459 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:1635 +#: templates/js/translated/part.js:1642 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1649 templates/js/translated/stock.js:2345 +#: templates/js/translated/part.js:1656 templates/js/translated/stock.js:2503 msgid "Path" msgstr "" -#: templates/js/translated/part.js:1693 +#: templates/js/translated/part.js:1700 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1744 templates/js/translated/stock.js:1234 +#: templates/js/translated/part.js:1751 templates/js/translated/stock.js:1242 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1745 templates/js/translated/stock.js:1235 +#: templates/js/translated/part.js:1752 templates/js/translated/stock.js:1243 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:1751 +#: templates/js/translated/part.js:1758 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:1773 +#: templates/js/translated/part.js:1780 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:1787 +#: templates/js/translated/part.js:1794 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:1812 +#: templates/js/translated/part.js:1819 #, python-brace-format msgid "No ${human_name} information found" msgstr "" -#: templates/js/translated/part.js:1867 +#: templates/js/translated/part.js:1874 #, python-brace-format msgid "Edit ${human_name}" msgstr "" -#: templates/js/translated/part.js:1868 +#: templates/js/translated/part.js:1875 #, python-brace-format msgid "Delete ${human_name}" msgstr "" -#: templates/js/translated/part.js:1969 +#: templates/js/translated/part.js:1976 msgid "Single Price" msgstr "" -#: templates/js/translated/part.js:1988 +#: templates/js/translated/part.js:1995 msgid "Single Price Difference" msgstr "" @@ -8589,340 +8687,344 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:74 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:181 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:93 templates/js/translated/stock.js:175 +#: templates/js/translated/stock.js:94 templates/js/translated/stock.js:183 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:101 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:110 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:146 +#: templates/js/translated/stock.js:154 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:186 +#: templates/js/translated/stock.js:194 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:225 +#: templates/js/translated/stock.js:233 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:231 +#: templates/js/translated/stock.js:239 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:382 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:387 +#: templates/js/translated/stock.js:395 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:420 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:416 templates/js/translated/stock.js:417 +#: templates/js/translated/stock.js:424 templates/js/translated/stock.js:425 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:433 +#: templates/js/translated/stock.js:441 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:453 +#: templates/js/translated/stock.js:461 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:462 +#: templates/js/translated/stock.js:470 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:515 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:526 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:519 +#: templates/js/translated/stock.js:527 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:628 +#: templates/js/translated/stock.js:636 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:629 +#: templates/js/translated/stock.js:637 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:714 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:715 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:709 +#: templates/js/translated/stock.js:717 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:710 +#: templates/js/translated/stock.js:718 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:796 +#: templates/js/translated/stock.js:804 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:797 +#: templates/js/translated/stock.js:805 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:892 +#: templates/js/translated/stock.js:900 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:893 +#: templates/js/translated/stock.js:901 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:899 +#: templates/js/translated/stock.js:907 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:900 +#: templates/js/translated/stock.js:908 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:904 +#: templates/js/translated/stock.js:912 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:905 +#: templates/js/translated/stock.js:913 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:909 +#: templates/js/translated/stock.js:917 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:910 users/models.py:206 +#: templates/js/translated/stock.js:918 users/models.py:208 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:914 templates/stock_table.html:58 +#: templates/js/translated/stock.js:922 templates/stock_table.html:58 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1051 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1201 +#: templates/js/translated/stock.js:1209 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1203 +#: templates/js/translated/stock.js:1211 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1208 +#: templates/js/translated/stock.js:1216 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1230 +#: templates/js/translated/stock.js:1238 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1256 +#: templates/js/translated/stock.js:1264 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1313 +#: templates/js/translated/stock.js:1321 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1428 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1424 +#: templates/js/translated/stock.js:1432 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1432 +#: templates/js/translated/stock.js:1440 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1438 +#: templates/js/translated/stock.js:1446 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1604 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1601 +#: templates/js/translated/stock.js:1609 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1604 +#: templates/js/translated/stock.js:1612 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1608 +#: templates/js/translated/stock.js:1616 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1610 +#: templates/js/translated/stock.js:1618 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1616 +#: templates/js/translated/stock.js:1624 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1618 +#: templates/js/translated/stock.js:1626 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1620 +#: templates/js/translated/stock.js:1628 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1633 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1632 +#: templates/js/translated/stock.js:1640 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1634 +#: templates/js/translated/stock.js:1642 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1636 +#: templates/js/translated/stock.js:1644 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1648 #: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1690 +#: templates/js/translated/stock.js:1698 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1763 +#: templates/js/translated/stock.js:1771 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1809 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1822 templates/js/translated/stock.js:1870 +#: templates/js/translated/stock.js:1830 templates/js/translated/stock.js:1878 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1910 +#: templates/js/translated/stock.js:1918 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1937 +#: templates/js/translated/stock.js:1945 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1939 +#: templates/js/translated/stock.js:1947 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:2138 +#: templates/js/translated/stock.js:2146 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2152 +#: templates/js/translated/stock.js:2160 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2153 +#: templates/js/translated/stock.js:2161 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2377 +#: templates/js/translated/stock.js:2340 +msgid "Allocated Quantity" +msgstr "" + +#: templates/js/translated/stock.js:2535 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2399 +#: templates/js/translated/stock.js:2557 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2424 +#: templates/js/translated/stock.js:2582 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2443 +#: templates/js/translated/stock.js:2601 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2462 +#: templates/js/translated/stock.js:2620 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2480 +#: templates/js/translated/stock.js:2638 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2503 +#: templates/js/translated/stock.js:2661 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2511 +#: templates/js/translated/stock.js:2669 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2552 +#: templates/js/translated/stock.js:2710 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2553 +#: templates/js/translated/stock.js:2711 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2604 +#: templates/js/translated/stock.js:2762 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2655 +#: templates/js/translated/stock.js:2813 msgid "Uninstall Stock Item" msgstr "" @@ -9194,11 +9296,11 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:113 +#: templates/navbar.html:114 msgid "Logout" msgstr "" -#: templates/navbar.html:115 +#: templates/navbar.html:116 msgid "Login" msgstr "" @@ -9246,31 +9348,43 @@ msgstr "" msgid "Server is deployed using docker" msgstr "" -#: templates/stats.html:40 -msgid "Server status" +#: templates/stats.html:39 +msgid "Plugin Support" msgstr "" #: templates/stats.html:43 -msgid "Healthy" +msgid "Plugin support enabled" msgstr "" #: templates/stats.html:45 -msgid "Issues detected" +msgid "Plugin support disabled" msgstr "" #: templates/stats.html:52 -msgid "Background Worker" +msgid "Server status" msgstr "" #: templates/stats.html:55 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:57 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:64 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:67 msgid "Background worker not running" msgstr "" -#: templates/stats.html:63 +#: templates/stats.html:75 msgid "Email Settings" msgstr "" -#: templates/stats.html:66 +#: templates/stats.html:78 msgid "Email settings not configured" msgstr "" @@ -9366,35 +9480,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:193 +#: users/models.py:195 msgid "Permission set" msgstr "" -#: users/models.py:201 +#: users/models.py:203 msgid "Group" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "View" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to view items" msgstr "" -#: users/models.py:206 +#: users/models.py:208 msgid "Permission to add items" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Change" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Permissions to edit items" msgstr "" -#: users/models.py:210 +#: users/models.py:212 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/id/LC_MESSAGES/django.po b/InvenTree/locale/id/LC_MESSAGES/django.po index 3bea5cd46f..0c357b94cc 100644 --- a/InvenTree/locale/id/LC_MESSAGES/django.po +++ b/InvenTree/locale/id/LC_MESSAGES/django.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-10 03:54+0000\n" -"PO-Revision-Date: 2022-01-10 03:57\n" +"POT-Creation-Date: 2022-01-29 00:17+0000\n" +"PO-Revision-Date: 2022-01-29 01:11\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -18,15 +18,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 138\n" -#: InvenTree/api.py:64 +#: InvenTree/api.py:55 msgid "API endpoint not found" msgstr "API endpoint tidak ditemukan" -#: InvenTree/api.py:110 +#: InvenTree/api.py:101 msgid "No action specified" msgstr "Tidak ada tindakan yang ditentukan" -#: InvenTree/api.py:124 +#: InvenTree/api.py:116 msgid "No matching action found" msgstr "Aksi tidak ditemukan" @@ -80,41 +80,41 @@ msgstr "Konfirmasi alamat email" msgid "You must type the same email each time." msgstr "" -#: InvenTree/helpers.py:437 +#: InvenTree/helpers.py:439 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:444 order/models.py:279 order/models.py:420 +#: InvenTree/helpers.py:446 order/models.py:282 order/models.py:425 #: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:447 +#: InvenTree/helpers.py:449 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:469 InvenTree/helpers.py:472 InvenTree/helpers.py:475 -#: InvenTree/helpers.py:500 +#: InvenTree/helpers.py:471 InvenTree/helpers.py:474 InvenTree/helpers.py:477 +#: InvenTree/helpers.py:502 #, python-brace-format msgid "Invalid group: {g}" msgstr "" -#: InvenTree/helpers.py:510 +#: InvenTree/helpers.py:512 #, python-brace-format msgid "Invalid group {group}" msgstr "" -#: InvenTree/helpers.py:516 +#: InvenTree/helpers.py:518 #, python-brace-format msgid "Invalid/no group {group}" msgstr "" -#: InvenTree/helpers.py:522 +#: InvenTree/helpers.py:524 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:526 +#: InvenTree/helpers.py:528 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" @@ -127,7 +127,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1967 +#: InvenTree/models.py:132 stock/models.py:1995 #: templates/js/translated/attachment.js:119 msgid "Attachment" msgstr "" @@ -137,15 +137,15 @@ msgid "Select file to attach" msgstr "" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:124 part/models.py:828 +#: company/models.py:564 order/models.py:127 part/models.py:830 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:540 -#: templates/js/translated/company.js:829 templates/js/translated/part.js:1317 +#: templates/js/translated/company.js:829 templates/js/translated/part.js:1324 msgid "Link" msgstr "" -#: InvenTree/models.py:140 build/models.py:330 part/models.py:829 -#: stock/models.py:527 +#: InvenTree/models.py:140 build/models.py:332 part/models.py:831 +#: stock/models.py:529 msgid "Link to external URL" msgstr "" @@ -157,10 +157,11 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 -#: common/models.py:1214 part/models.py:2258 part/models.py:2278 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1223 +#: common/models.py:1224 common/models.py:1452 common/models.py:1453 +#: part/models.py:2265 part/models.py:2285 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2534 +#: templates/js/translated/stock.js:2692 msgid "User" msgstr "" @@ -197,42 +198,42 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 -#: label/models.py:112 part/models.py:772 part/models.py:2442 -#: plugin/models.py:40 report/models.py:181 +#: InvenTree/models.py:277 InvenTree/models.py:278 common/models.py:1438 +#: company/models.py:415 label/models.py:112 part/models.py:774 +#: part/models.py:2449 plugin/models.py:40 report/models.py:181 #: templates/InvenTree/settings/mixins/urls.html:13 -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:125 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:279 -#: templates/js/translated/company.js:641 templates/js/translated/part.js:561 -#: templates/js/translated/part.js:700 templates/js/translated/part.js:1624 -#: templates/js/translated/stock.js:2327 +#: templates/InvenTree/settings/settings.html:282 +#: templates/js/translated/company.js:641 templates/js/translated/part.js:567 +#: templates/js/translated/part.js:706 templates/js/translated/part.js:1631 +#: templates/js/translated/stock.js:2485 msgid "Name" msgstr "" -#: InvenTree/models.py:284 build/models.py:207 +#: InvenTree/models.py:284 build/models.py:209 #: build/templates/build/detail.html:25 company/models.py:354 #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:122 part/models.py:795 part/templates/part/category.html:74 +#: order/models.py:125 part/models.py:797 part/templates/part/category.html:74 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 #: stock/templates/stock/location.html:93 #: templates/InvenTree/settings/plugin_settings.html:33 -#: templates/js/translated/bom.js:327 templates/js/translated/bom.js:540 +#: templates/js/translated/bom.js:339 templates/js/translated/bom.js:552 #: templates/js/translated/build.js:1682 templates/js/translated/company.js:345 #: templates/js/translated/company.js:551 #: templates/js/translated/company.js:840 templates/js/translated/order.js:836 #: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 -#: templates/js/translated/part.js:620 templates/js/translated/part.js:992 -#: templates/js/translated/part.js:1077 templates/js/translated/part.js:1247 -#: templates/js/translated/part.js:1643 templates/js/translated/part.js:1712 -#: templates/js/translated/stock.js:1569 templates/js/translated/stock.js:2339 -#: templates/js/translated/stock.js:2384 +#: templates/js/translated/part.js:626 templates/js/translated/part.js:999 +#: templates/js/translated/part.js:1084 templates/js/translated/part.js:1254 +#: templates/js/translated/part.js:1650 templates/js/translated/part.js:1719 +#: templates/js/translated/stock.js:1577 templates/js/translated/stock.js:2314 +#: templates/js/translated/stock.js:2497 templates/js/translated/stock.js:2542 msgid "Description" msgstr "" @@ -244,7 +245,7 @@ msgstr "" msgid "parent" msgstr "" -#: InvenTree/serializers.py:65 part/models.py:2727 +#: InvenTree/serializers.py:65 part/models.py:2734 msgid "Must be a valid number" msgstr "" @@ -252,83 +253,83 @@ msgstr "" msgid "Filename" msgstr "" -#: InvenTree/settings.py:663 +#: InvenTree/settings.py:661 msgid "German" msgstr "" -#: InvenTree/settings.py:664 +#: InvenTree/settings.py:662 msgid "Greek" msgstr "" -#: InvenTree/settings.py:665 +#: InvenTree/settings.py:663 msgid "English" msgstr "" -#: InvenTree/settings.py:666 +#: InvenTree/settings.py:664 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:667 +#: InvenTree/settings.py:665 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:668 +#: InvenTree/settings.py:666 msgid "French" msgstr "" -#: InvenTree/settings.py:669 +#: InvenTree/settings.py:667 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:668 msgid "Italian" msgstr "" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:669 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:670 msgid "Korean" msgstr "" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:671 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:672 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:673 msgid "Polish" msgstr "" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:674 msgid "Portugese" msgstr "" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:675 msgid "Russian" msgstr "" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:676 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:677 msgid "Thai" msgstr "" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:678 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:679 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:680 msgid "Chinese" msgstr "" @@ -374,7 +375,7 @@ msgstr "" msgid "Returned" msgstr "" -#: InvenTree/status_codes.py:143 order/models.py:941 +#: InvenTree/status_codes.py:143 order/models.py:961 #: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "" @@ -455,7 +456,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2064 +#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2072 msgid "Merged stock items" msgstr "" @@ -543,56 +544,56 @@ msgstr "" msgid "System Information" msgstr "" -#: barcodes/api.py:54 barcodes/api.py:151 +#: barcodes/api.py:54 barcodes/api.py:152 msgid "Must provide barcode_data parameter" msgstr "" -#: barcodes/api.py:127 +#: barcodes/api.py:128 msgid "No match found for barcode data" msgstr "" -#: barcodes/api.py:129 +#: barcodes/api.py:130 msgid "Match found for barcode data" msgstr "" -#: barcodes/api.py:154 +#: barcodes/api.py:155 msgid "Must provide stockitem parameter" msgstr "" -#: barcodes/api.py:161 +#: barcodes/api.py:162 msgid "No matching stock item found" msgstr "" -#: barcodes/api.py:191 +#: barcodes/api.py:193 msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:195 +#: barcodes/api.py:197 msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:199 +#: barcodes/api.py:201 msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:205 barcodes/api.py:217 +#: barcodes/api.py:207 barcodes/api.py:219 msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:223 +#: barcodes/api.py:225 msgid "Barcode associated with Stock Item" msgstr "" -#: build/forms.py:36 build/models.py:1286 +#: build/forms.py:36 build/models.py:1293 #: build/templates/build/build_base.html:82 -#: build/templates/build/detail.html:35 common/models.py:1253 +#: build/templates/build/detail.html:35 common/models.py:1263 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/models.py:796 order/models.py:1207 order/serializers.py:810 +#: order/models.py:805 order/models.py:1229 order/serializers.py:816 #: order/templates/order/order_wizard/match_parts.html:30 -#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:145 -#: part/forms.py:161 part/forms.py:177 part/models.py:2629 +#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:144 +#: part/forms.py:160 part/forms.py:176 part/models.py:2636 #: part/templates/part/bom_upload/match_parts.html:31 -#: part/templates/part/detail.html:962 part/templates/part/detail.html:1048 +#: part/templates/part/detail.html:992 part/templates/part/detail.html:1078 #: part/templates/part/part_pricing.html:16 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 @@ -603,7 +604,7 @@ msgstr "" #: stock/templates/stock/item_base.html:181 #: stock/templates/stock/item_base.html:262 #: stock/templates/stock/item_base.html:270 -#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:555 +#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:567 #: templates/js/translated/build.js:295 templates/js/translated/build.js:495 #: templates/js/translated/build.js:689 templates/js/translated/build.js:699 #: templates/js/translated/build.js:1075 templates/js/translated/build.js:1422 @@ -611,11 +612,11 @@ msgstr "" #: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 #: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 #: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 -#: templates/js/translated/order.js:2150 templates/js/translated/part.js:900 -#: templates/js/translated/part.js:1855 templates/js/translated/part.js:1978 -#: templates/js/translated/part.js:2056 templates/js/translated/stock.js:383 -#: templates/js/translated/stock.js:580 templates/js/translated/stock.js:750 -#: templates/js/translated/stock.js:2519 templates/js/translated/stock.js:2621 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:906 +#: templates/js/translated/part.js:1862 templates/js/translated/part.js:1985 +#: templates/js/translated/part.js:2063 templates/js/translated/stock.js:391 +#: templates/js/translated/stock.js:588 templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2779 msgid "Quantity" msgstr "" @@ -623,9 +624,9 @@ msgstr "" msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 -#: stock/serializers.py:314 templates/js/translated/stock.js:230 -#: templates/js/translated/stock.js:384 +#: build/forms.py:41 order/serializers.py:820 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:238 +#: templates/js/translated/stock.js:392 msgid "Serial Numbers" msgstr "" @@ -649,18 +650,18 @@ msgstr "" msgid "Confirm build cancellation" msgstr "" -#: build/models.py:133 +#: build/models.py:135 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:137 build/templates/build/build_base.html:9 +#: build/models.py:139 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:457 +#: templates/js/translated/build.js:457 templates/js/translated/stock.js:2290 msgid "Build Order" msgstr "" -#: build/models.py:138 build/templates/build/build_base.html:13 +#: build/models.py:140 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:92 #: order/templates/order/so_sidebar.html:13 @@ -670,40 +671,40 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:198 +#: build/models.py:200 msgid "Build Order Reference" msgstr "" -#: build/models.py:199 order/models.py:210 order/models.py:536 -#: order/models.py:803 part/models.py:2638 +#: build/models.py:201 order/models.py:213 order/models.py:541 +#: order/models.py:812 part/models.py:2645 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:547 templates/js/translated/build.js:1179 +#: templates/js/translated/bom.js:559 templates/js/translated/build.js:1179 #: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "" -#: build/models.py:210 +#: build/models.py:212 msgid "Brief description of the build" msgstr "" -#: build/models.py:219 build/templates/build/build_base.html:164 +#: build/models.py:221 build/templates/build/build_base.html:164 #: build/templates/build/detail.html:88 msgid "Parent Build" msgstr "" -#: build/models.py:220 +#: build/models.py:222 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:225 build/templates/build/build_base.html:77 +#: build/models.py:227 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:856 order/models.py:930 -#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 -#: part/models.py:2204 part/models.py:2220 part/models.py:2239 -#: part/models.py:2256 part/models.py:2358 part/models.py:2480 -#: part/models.py:2613 part/models.py:2920 part/serializers.py:658 +#: order/models.py:876 order/models.py:950 +#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:359 +#: part/models.py:2211 part/models.py:2227 part/models.py:2246 +#: part/models.py:2263 part/models.py:2365 part/models.py:2487 +#: part/models.py:2620 part/models.py:2927 part/serializers.py:658 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/set_category.html:13 @@ -713,205 +714,205 @@ msgstr "" #: templates/InvenTree/search.html:80 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 -#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:326 -#: templates/js/translated/bom.js:505 templates/js/translated/build.js:680 +#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:338 +#: templates/js/translated/bom.js:517 templates/js/translated/build.js:680 #: templates/js/translated/build.js:1048 templates/js/translated/build.js:1419 #: templates/js/translated/build.js:1687 templates/js/translated/company.js:492 #: templates/js/translated/company.js:749 templates/js/translated/order.js:84 #: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 #: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 -#: templates/js/translated/order.js:2128 templates/js/translated/part.js:977 -#: templates/js/translated/part.js:1058 templates/js/translated/part.js:1225 -#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:719 -#: templates/js/translated/stock.js:926 templates/js/translated/stock.js:1526 -#: templates/js/translated/stock.js:2609 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:984 +#: templates/js/translated/part.js:1065 templates/js/translated/part.js:1232 +#: templates/js/translated/stock.js:562 templates/js/translated/stock.js:727 +#: templates/js/translated/stock.js:934 templates/js/translated/stock.js:1534 +#: templates/js/translated/stock.js:2767 msgid "Part" msgstr "" -#: build/models.py:233 +#: build/models.py:235 msgid "Select part to build" msgstr "" -#: build/models.py:238 +#: build/models.py:240 msgid "Sales Order Reference" msgstr "" -#: build/models.py:242 +#: build/models.py:244 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1407 +#: build/models.py:249 templates/js/translated/build.js:1407 #: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "" -#: build/models.py:251 +#: build/models.py:253 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:256 +#: build/models.py:258 msgid "Destination Location" msgstr "" -#: build/models.py:260 +#: build/models.py:262 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:264 +#: build/models.py:266 msgid "Build Quantity" msgstr "" -#: build/models.py:267 +#: build/models.py:269 msgid "Number of stock items to build" msgstr "" -#: build/models.py:271 +#: build/models.py:273 msgid "Completed items" msgstr "" -#: build/models.py:273 +#: build/models.py:275 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:277 part/templates/part/part_base.html:234 +#: build/models.py:279 part/templates/part/part_base.html:234 msgid "Build Status" msgstr "" -#: build/models.py:281 +#: build/models.py:283 msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:531 +#: build/models.py:287 stock/models.py:533 msgid "Batch Code" msgstr "" -#: build/models.py:289 +#: build/models.py:291 msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:126 part/models.py:967 +#: build/models.py:294 order/models.py:129 part/models.py:969 #: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "" -#: build/models.py:296 order/models.py:558 +#: build/models.py:298 order/models.py:563 msgid "Target completion date" msgstr "" -#: build/models.py:297 +#: build/models.py:299 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:252 +#: build/models.py:302 order/models.py:255 #: templates/js/translated/build.js:1758 msgid "Completion Date" msgstr "" -#: build/models.py:306 +#: build/models.py:308 msgid "completed by" msgstr "" -#: build/models.py:314 templates/js/translated/build.js:1729 +#: build/models.py:316 templates/js/translated/build.js:1729 msgid "Issued by" msgstr "" -#: build/models.py:315 +#: build/models.py:317 msgid "User who issued this build order" msgstr "" -#: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:140 +#: build/models.py:325 build/templates/build/build_base.html:185 +#: build/templates/build/detail.html:116 order/models.py:143 #: order/templates/order/order_base.html:170 -#: order/templates/order/sales_order_base.html:182 part/models.py:971 +#: order/templates/order/sales_order_base.html:182 part/models.py:973 #: report/templates/report/inventree_build_order_base.html:159 #: templates/js/translated/build.js:1741 templates/js/translated/order.js:864 msgid "Responsible" msgstr "" -#: build/models.py:324 +#: build/models.py:326 msgid "User responsible for this build order" msgstr "" -#: build/models.py:329 build/templates/build/detail.html:102 +#: build/models.py:331 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:525 +#: part/templates/part/part_base.html:354 stock/models.py:527 #: stock/templates/stock/item_base.html:373 msgid "External Link" msgstr "" -#: build/models.py:334 build/serializers.py:201 +#: build/models.py:336 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:144 order/models.py:805 order/models.py:1051 +#: order/models.py:147 order/models.py:814 order/models.py:1071 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/models.py:956 -#: part/templates/part/detail.html:120 part/templates/part/part_sidebar.html:50 +#: order/templates/order/so_sidebar.html:17 part/models.py:958 +#: part/templates/part/detail.html:137 part/templates/part/part_sidebar.html:54 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:597 -#: stock/models.py:1867 stock/models.py:1973 stock/serializers.py:332 -#: stock/serializers.py:639 stock/serializers.py:737 stock/serializers.py:869 -#: stock/templates/stock/stock_sidebar.html:21 -#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:711 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:599 +#: stock/models.py:1895 stock/models.py:2001 stock/serializers.py:332 +#: stock/serializers.py:640 stock/serializers.py:738 stock/serializers.py:870 +#: stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:723 #: templates/js/translated/company.js:845 templates/js/translated/order.js:1149 #: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 -#: templates/js/translated/stock.js:1309 templates/js/translated/stock.js:1795 +#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1803 msgid "Notes" msgstr "" -#: build/models.py:335 +#: build/models.py:337 msgid "Extra build notes" msgstr "" -#: build/models.py:710 +#: build/models.py:717 msgid "No build output specified" msgstr "" -#: build/models.py:713 +#: build/models.py:720 msgid "Build output is already completed" msgstr "" -#: build/models.py:716 +#: build/models.py:723 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1108 +#: build/models.py:1115 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1117 +#: build/models.py:1124 #, python-brace-format msgid "Allocated quantity ({q}) must not execed available stock quantity ({a})" msgstr "" -#: build/models.py:1127 +#: build/models.py:1134 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:1167 +#: build/models.py:1140 order/models.py:1189 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1139 +#: build/models.py:1146 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1196 +#: build/models.py:1203 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1256 stock/templates/stock/item_base.html:345 +#: build/models.py:1263 stock/templates/stock/item_base.html:345 #: templates/InvenTree/search.html:137 templates/js/translated/build.js:1660 #: templates/navbar.html:35 msgid "Build" msgstr "" -#: build/models.py:1257 +#: build/models.py:1264 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1273 build/serializers.py:388 order/serializers.py:690 -#: order/serializers.py:708 stock/serializers.py:577 stock/serializers.py:695 +#: build/models.py:1280 build/serializers.py:388 order/serializers.py:696 +#: order/serializers.py:714 stock/serializers.py:578 stock/serializers.py:696 #: stock/templates/stock/item_base.html:9 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:367 @@ -920,24 +921,24 @@ msgstr "" #: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 #: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 #: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 -#: templates/js/translated/stock.js:555 templates/js/translated/stock.js:720 -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:563 templates/js/translated/stock.js:728 +#: templates/js/translated/stock.js:2628 msgid "Stock Item" msgstr "" -#: build/models.py:1274 +#: build/models.py:1281 msgid "Source stock item" msgstr "" -#: build/models.py:1287 +#: build/models.py:1294 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1295 +#: build/models.py:1302 msgid "Install into" msgstr "" -#: build/models.py:1296 +#: build/models.py:1303 msgid "Destination stock item" msgstr "" @@ -962,16 +963,16 @@ msgid "This build output is not fully allocated" msgstr "" #: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 -#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:730 -#: stock/serializers.py:971 stock/templates/stock/item_base.html:313 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:731 +#: stock/serializers.py:972 stock/templates/stock/item_base.html:313 #: templates/js/translated/barcode.js:384 #: templates/js/translated/barcode.js:557 templates/js/translated/build.js:480 #: templates/js/translated/build.js:1087 templates/js/translated/order.js:508 #: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 #: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 -#: templates/js/translated/part.js:179 templates/js/translated/stock.js:556 -#: templates/js/translated/stock.js:721 templates/js/translated/stock.js:928 -#: templates/js/translated/stock.js:1676 templates/js/translated/stock.js:2411 +#: templates/js/translated/part.js:179 templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:729 templates/js/translated/stock.js:936 +#: templates/js/translated/stock.js:1684 templates/js/translated/stock.js:2569 msgid "Location" msgstr "" @@ -980,12 +981,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:552 +#: build/templates/build/detail.html:63 order/models.py:557 #: order/serializers.py:247 stock/templates/stock/item_base.html:187 #: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1716 #: templates/js/translated/order.js:591 templates/js/translated/order.js:840 -#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1651 -#: templates/js/translated/stock.js:2488 templates/js/translated/stock.js:2637 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1659 +#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2795 msgid "Status" msgstr "" @@ -1021,8 +1022,8 @@ msgstr "" msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:313 build/serializers.py:362 part/models.py:2753 -#: part/models.py:2912 +#: build/serializers.py:313 build/serializers.py:362 part/models.py:2760 +#: part/models.py:2919 msgid "BOM Item" msgstr "" @@ -1038,16 +1039,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:394 stock/serializers.py:584 +#: build/serializers.py:394 stock/serializers.py:585 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:408 order/models.py:277 order/serializers.py:240 -#: stock/models.py:365 stock/models.py:1077 stock/serializers.py:305 +#: build/serializers.py:408 order/models.py:280 order/serializers.py:240 +#: stock/models.py:367 stock/models.py:1105 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:450 order/serializers.py:741 +#: build/serializers.py:450 order/serializers.py:747 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1060,7 +1061,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:491 order/serializers.py:984 +#: build/serializers.py:491 order/serializers.py:990 msgid "Allocation items must be provided" msgstr "" @@ -1164,13 +1165,13 @@ msgid "Completed" msgstr "" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:927 -#: order/models.py:1023 order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:947 +#: order/models.py:1043 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:307 -#: templates/js/translated/order.js:1218 +#: templates/js/translated/order.js:1218 templates/js/translated/stock.js:2304 msgid "Sales Order" msgstr "" @@ -1224,7 +1225,7 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:878 stock/forms.py:136 +#: build/templates/build/detail.html:50 order/models.py:898 stock/forms.py:136 #: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1239,7 +1240,7 @@ msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:331 -#: templates/js/translated/stock.js:1665 templates/js/translated/stock.js:2644 +#: templates/js/translated/stock.js:1673 templates/js/translated/stock.js:2802 #: templates/js/translated/table_filters.js:151 #: templates/js/translated/table_filters.js:238 msgid "Batch" @@ -1343,9 +1344,9 @@ msgstr "" #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 #: order/templates/order/sales_order_detail.html:107 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:196 -#: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 -#: stock/templates/stock/stock_sidebar.html:19 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:213 +#: part/templates/part/part_sidebar.html:52 stock/templates/stock/item.html:112 +#: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" @@ -1360,8 +1361,8 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:108 #: order/templates/order/sales_order_detail.html:127 #: order/templates/order/sales_order_detail.html:186 -#: part/templates/part/detail.html:124 stock/templates/stock/item.html:115 -#: stock/templates/stock/item.html:205 +#: part/templates/part/detail.html:141 stock/templates/stock/item.html:132 +#: stock/templates/stock/item.html:235 msgid "Edit Notes" msgstr "" @@ -1373,7 +1374,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:303 +#: build/templates/build/index.html:18 part/templates/part/detail.html:320 msgid "New Build Order" msgstr "" @@ -1453,23 +1454,23 @@ msgstr "" msgid "Delete Build Order" msgstr "" -#: common/files.py:67 +#: common/files.py:65 msgid "Unsupported file format: {ext.upper()}" msgstr "" -#: common/files.py:69 +#: common/files.py:67 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:74 +#: common/files.py:72 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:76 +#: common/files.py:74 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:78 +#: common/files.py:76 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1490,740 +1491,828 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:344 common/models.py:998 common/models.py:1206 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:352 +msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:346 +#: common/models.py:354 msgid "Settings value" msgstr "" -#: common/models.py:380 +#: common/models.py:388 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:400 +#: common/models.py:408 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:411 +#: common/models.py:419 msgid "Value must be an integer value" msgstr "" -#: common/models.py:434 +#: common/models.py:442 msgid "Key string must be unique" msgstr "" -#: common/models.py:553 +#: common/models.py:561 msgid "No group" msgstr "" -#: common/models.py:595 +#: common/models.py:603 msgid "Restart required" msgstr "" -#: common/models.py:596 +#: common/models.py:604 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:603 +#: common/models.py:611 msgid "InvenTree Instance Name" msgstr "" -#: common/models.py:605 +#: common/models.py:613 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:609 +#: common/models.py:617 msgid "Use instance name" msgstr "" -#: common/models.py:610 +#: common/models.py:618 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:616 company/models.py:100 company/models.py:101 +#: common/models.py:624 company/models.py:100 company/models.py:101 msgid "Company name" msgstr "" -#: common/models.py:617 +#: common/models.py:625 msgid "Internal company name" msgstr "" -#: common/models.py:622 +#: common/models.py:630 msgid "Base URL" msgstr "" -#: common/models.py:623 +#: common/models.py:631 msgid "Base URL for server instance" msgstr "" -#: common/models.py:629 +#: common/models.py:637 msgid "Default Currency" msgstr "" -#: common/models.py:630 +#: common/models.py:638 msgid "Default currency" msgstr "" -#: common/models.py:636 +#: common/models.py:644 msgid "Download from URL" msgstr "" -#: common/models.py:637 +#: common/models.py:645 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:643 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:651 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:644 +#: common/models.py:652 msgid "Enable barcode scanner support" msgstr "" -#: common/models.py:650 +#: common/models.py:658 msgid "IPN Regex" msgstr "" -#: common/models.py:651 +#: common/models.py:659 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:655 +#: common/models.py:663 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:656 +#: common/models.py:664 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:662 +#: common/models.py:670 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:663 +#: common/models.py:671 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:669 +#: common/models.py:677 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:670 +#: common/models.py:678 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:676 +#: common/models.py:684 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:677 +#: common/models.py:685 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:683 +#: common/models.py:691 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:684 +#: common/models.py:692 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:690 +#: common/models.py:698 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:691 +#: common/models.py:699 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:697 part/models.py:2482 report/models.py:187 +#: common/models.py:705 part/models.py:2489 report/models.py:187 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:422 msgid "Template" msgstr "" -#: common/models.py:698 +#: common/models.py:706 msgid "Parts are templates by default" msgstr "" -#: common/models.py:704 part/models.py:919 templates/js/translated/bom.js:1068 +#: common/models.py:712 part/models.py:921 templates/js/translated/bom.js:1082 #: templates/js/translated/table_filters.js:168 #: templates/js/translated/table_filters.js:434 msgid "Assembly" msgstr "" -#: common/models.py:705 +#: common/models.py:713 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:711 part/models.py:925 +#: common/models.py:719 part/models.py:927 #: templates/js/translated/table_filters.js:438 msgid "Component" msgstr "" -#: common/models.py:712 +#: common/models.py:720 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:718 part/models.py:936 +#: common/models.py:726 part/models.py:938 msgid "Purchaseable" msgstr "" -#: common/models.py:719 +#: common/models.py:727 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:725 part/models.py:941 +#: common/models.py:733 part/models.py:943 #: templates/js/translated/table_filters.js:446 msgid "Salable" msgstr "" -#: common/models.py:726 +#: common/models.py:734 msgid "Parts are salable by default" msgstr "" -#: common/models.py:732 part/models.py:931 +#: common/models.py:740 part/models.py:933 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 #: templates/js/translated/table_filters.js:450 msgid "Trackable" msgstr "" -#: common/models.py:733 +#: common/models.py:741 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:739 part/models.py:951 +#: common/models.py:747 part/models.py:953 #: part/templates/part/part_base.html:147 #: templates/js/translated/table_filters.js:42 msgid "Virtual" msgstr "" -#: common/models.py:740 +#: common/models.py:748 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:746 +#: common/models.py:754 msgid "Show Import in Views" msgstr "" -#: common/models.py:747 +#: common/models.py:755 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:753 +#: common/models.py:761 msgid "Show Price in Forms" msgstr "" -#: common/models.py:754 +#: common/models.py:762 msgid "Display part price in some forms" msgstr "" -#: common/models.py:765 +#: common/models.py:773 msgid "Show Price in BOM" msgstr "" -#: common/models.py:766 +#: common/models.py:774 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:772 +#: common/models.py:780 msgid "Show related parts" msgstr "" -#: common/models.py:773 +#: common/models.py:781 msgid "Display related parts for a part" msgstr "" -#: common/models.py:779 +#: common/models.py:787 msgid "Create initial stock" msgstr "" -#: common/models.py:780 +#: common/models.py:788 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:786 +#: common/models.py:794 msgid "Internal Prices" msgstr "" -#: common/models.py:787 +#: common/models.py:795 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:793 +#: common/models.py:801 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:794 +#: common/models.py:802 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:800 +#: common/models.py:808 msgid "Part Name Display Format" msgstr "" -#: common/models.py:801 +#: common/models.py:809 msgid "Format to display the part name" msgstr "" -#: common/models.py:808 +#: common/models.py:816 msgid "Enable Reports" msgstr "" -#: common/models.py:809 +#: common/models.py:817 msgid "Enable generation of reports" msgstr "" -#: common/models.py:815 templates/stats.html:25 +#: common/models.py:823 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:816 +#: common/models.py:824 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:822 +#: common/models.py:830 msgid "Page Size" msgstr "" -#: common/models.py:823 +#: common/models.py:831 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:833 +#: common/models.py:841 msgid "Test Reports" msgstr "" -#: common/models.py:834 +#: common/models.py:842 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:840 +#: common/models.py:848 msgid "Stock Expiry" msgstr "" -#: common/models.py:841 +#: common/models.py:849 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:847 +#: common/models.py:855 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:848 +#: common/models.py:856 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:854 +#: common/models.py:862 msgid "Stock Stale Time" msgstr "" -#: common/models.py:855 +#: common/models.py:863 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:857 +#: common/models.py:865 msgid "days" msgstr "" -#: common/models.py:862 +#: common/models.py:870 msgid "Build Expired Stock" msgstr "" -#: common/models.py:863 +#: common/models.py:871 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:869 +#: common/models.py:877 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:870 +#: common/models.py:878 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:876 -msgid "Group by Part" -msgstr "" - -#: common/models.py:877 -msgid "Group stock items by part reference in table views" -msgstr "" - -#: common/models.py:883 +#: common/models.py:884 msgid "Build Order Reference Prefix" msgstr "" -#: common/models.py:884 +#: common/models.py:885 msgid "Prefix value for build order reference" msgstr "" -#: common/models.py:889 +#: common/models.py:890 msgid "Build Order Reference Regex" msgstr "" -#: common/models.py:890 +#: common/models.py:891 msgid "Regular expression pattern for matching build order reference" msgstr "" -#: common/models.py:894 +#: common/models.py:895 msgid "Sales Order Reference Prefix" msgstr "" -#: common/models.py:895 +#: common/models.py:896 msgid "Prefix value for sales order reference" msgstr "" -#: common/models.py:900 +#: common/models.py:901 msgid "Purchase Order Reference Prefix" msgstr "" -#: common/models.py:901 +#: common/models.py:902 msgid "Prefix value for purchase order reference" msgstr "" -#: common/models.py:907 +#: common/models.py:908 msgid "Enable password forgot" msgstr "" -#: common/models.py:908 +#: common/models.py:909 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:913 +#: common/models.py:914 msgid "Enable registration" msgstr "" -#: common/models.py:914 +#: common/models.py:915 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:919 +#: common/models.py:920 msgid "Enable SSO" msgstr "" -#: common/models.py:920 +#: common/models.py:921 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:925 +#: common/models.py:926 msgid "Email required" msgstr "" -#: common/models.py:926 +#: common/models.py:927 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:931 +#: common/models.py:932 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:932 +#: common/models.py:933 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:937 +#: common/models.py:938 msgid "Mail twice" msgstr "" -#: common/models.py:938 +#: common/models.py:939 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:943 +#: common/models.py:944 msgid "Password twice" msgstr "" -#: common/models.py:944 +#: common/models.py:945 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:949 +#: common/models.py:950 msgid "Group on signup" msgstr "" -#: common/models.py:950 +#: common/models.py:951 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:955 +#: common/models.py:956 msgid "Enforce MFA" msgstr "" -#: common/models.py:956 +#: common/models.py:957 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:961 +#: common/models.py:964 msgid "Enable URL integration" msgstr "" -#: common/models.py:962 +#: common/models.py:965 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:968 +#: common/models.py:971 msgid "Enable navigation integration" msgstr "" -#: common/models.py:969 +#: common/models.py:972 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:975 +#: common/models.py:978 msgid "Enable app integration" msgstr "" -#: common/models.py:976 +#: common/models.py:979 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:982 +#: common/models.py:985 msgid "Enable schedule integration" msgstr "" -#: common/models.py:983 +#: common/models.py:986 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1029 +#: common/models.py:992 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:993 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:1008 common/models.py:1216 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1039 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1030 +#: common/models.py:1040 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1035 +#: common/models.py:1045 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1036 +#: common/models.py:1046 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1041 +#: common/models.py:1051 msgid "Show latest parts" msgstr "" -#: common/models.py:1042 +#: common/models.py:1052 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1047 +#: common/models.py:1057 msgid "Recent Part Count" msgstr "" -#: common/models.py:1048 +#: common/models.py:1058 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1054 +#: common/models.py:1064 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1055 +#: common/models.py:1065 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1060 +#: common/models.py:1070 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1061 +#: common/models.py:1071 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1066 +#: common/models.py:1076 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1067 +#: common/models.py:1077 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1072 +#: common/models.py:1082 msgid "Show low stock" msgstr "" -#: common/models.py:1073 +#: common/models.py:1083 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1078 +#: common/models.py:1088 msgid "Show depleted stock" msgstr "" -#: common/models.py:1079 +#: common/models.py:1089 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1084 +#: common/models.py:1094 msgid "Show needed stock" msgstr "" -#: common/models.py:1085 +#: common/models.py:1095 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1090 +#: common/models.py:1100 msgid "Show expired stock" msgstr "" -#: common/models.py:1091 +#: common/models.py:1101 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1096 +#: common/models.py:1106 msgid "Show stale stock" msgstr "" -#: common/models.py:1097 +#: common/models.py:1107 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1102 +#: common/models.py:1112 msgid "Show pending builds" msgstr "" -#: common/models.py:1103 +#: common/models.py:1113 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1108 +#: common/models.py:1118 msgid "Show overdue builds" msgstr "" -#: common/models.py:1109 +#: common/models.py:1119 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1114 +#: common/models.py:1124 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1115 +#: common/models.py:1125 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1120 +#: common/models.py:1130 msgid "Show overdue POs" msgstr "" -#: common/models.py:1121 +#: common/models.py:1131 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1126 +#: common/models.py:1136 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1127 +#: common/models.py:1137 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1132 +#: common/models.py:1142 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1133 +#: common/models.py:1143 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1139 +#: common/models.py:1149 msgid "Inline label display" msgstr "" -#: common/models.py:1140 +#: common/models.py:1150 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1146 +#: common/models.py:1156 msgid "Inline report display" msgstr "" -#: common/models.py:1147 +#: common/models.py:1157 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1153 +#: common/models.py:1163 msgid "Search Preview Results" msgstr "" -#: common/models.py:1154 +#: common/models.py:1164 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1160 +#: common/models.py:1170 msgid "Search Show Stock" msgstr "" -#: common/models.py:1161 +#: common/models.py:1171 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1167 +#: common/models.py:1177 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1168 +#: common/models.py:1178 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1174 +#: common/models.py:1184 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1175 +#: common/models.py:1185 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1181 +#: common/models.py:1191 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1182 +#: common/models.py:1192 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1188 +#: common/models.py:1198 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1189 +#: common/models.py:1199 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1254 company/forms.py:43 +#: common/models.py:1264 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1261 company/serializers.py:264 +#: common/models.py:1271 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 -#: templates/js/translated/part.js:909 templates/js/translated/part.js:1860 +#: templates/js/translated/part.js:915 templates/js/translated/part.js:1867 msgid "Price" msgstr "" -#: common/models.py:1262 +#: common/models.py:1272 msgid "Unit price at specified quantity" msgstr "" +#: common/models.py:1429 common/models.py:1568 +msgid "Endpoint" +msgstr "" + +#: common/models.py:1430 +msgid "Endpoint at which this webhook is received" +msgstr "" + +#: common/models.py:1439 +msgid "Name for this webhook" +msgstr "" + +#: common/models.py:1444 part/models.py:948 plugin/models.py:46 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:96 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:417 +msgid "Active" +msgstr "" + +#: common/models.py:1445 +msgid "Is this webhook active" +msgstr "" + +#: common/models.py:1459 +msgid "Token" +msgstr "" + +#: common/models.py:1460 +msgid "Token for access" +msgstr "" + +#: common/models.py:1467 +msgid "Secret" +msgstr "" + +#: common/models.py:1468 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:1535 +msgid "Message ID" +msgstr "" + +#: common/models.py:1536 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:1544 +msgid "Host" +msgstr "" + +#: common/models.py:1545 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:1552 +msgid "Header" +msgstr "" + +#: common/models.py:1553 +msgid "Header of this message" +msgstr "" + +#: common/models.py:1559 +msgid "Body" +msgstr "" + +#: common/models.py:1560 +msgid "Body of this message" +msgstr "" + +#: common/models.py:1569 +msgid "Endpoint on which this message was received" +msgstr "" + +#: common/models.py:1574 +msgid "Worked on" +msgstr "" + +#: common/models.py:1575 +msgid "Was the work on this message finished?" +msgstr "" + #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 #: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 -#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 -#: part/views.py:764 +#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:213 +#: part/views.py:773 msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 #: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 -#: part/views.py:765 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:214 +#: part/views.py:774 msgid "Match Fields" msgstr "" @@ -2315,7 +2404,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:139 part/models.py:838 +#: company/models.py:139 part/models.py:840 msgid "Image" msgstr "" @@ -2352,8 +2441,8 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:469 -#: stock/templates/stock/item_base.html:142 +#: company/models.py:320 company/models.py:535 stock/models.py:471 +#: stock/templates/stock/item_base.html:142 templates/js/translated/bom.js:328 msgid "Base Part" msgstr "" @@ -2380,7 +2469,7 @@ msgstr "" #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:533 #: templates/js/translated/company.js:818 templates/js/translated/order.js:1038 -#: templates/js/translated/part.js:245 templates/js/translated/part.js:889 +#: templates/js/translated/part.js:245 templates/js/translated/part.js:895 msgid "MPN" msgstr "" @@ -2409,8 +2498,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1960 templates/js/translated/company.js:647 -#: templates/js/translated/part.js:709 templates/js/translated/stock.js:1296 +#: stock/models.py:1988 templates/js/translated/company.js:647 +#: templates/js/translated/part.js:715 templates/js/translated/stock.js:1304 msgid "Value" msgstr "" @@ -2418,10 +2507,10 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:429 part/models.py:913 part/models.py:2450 +#: company/models.py:429 part/models.py:915 part/models.py:2457 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:284 -#: templates/js/translated/company.js:653 templates/js/translated/part.js:715 +#: templates/InvenTree/settings/settings.html:287 +#: templates/js/translated/company.js:653 templates/js/translated/part.js:721 msgid "Units" msgstr "" @@ -2434,13 +2523,13 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:224 +#: company/templates/company/supplier_part.html:87 order/models.py:227 #: order/templates/order/order_base.html:112 -#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 -#: part/bom.py:247 stock/templates/stock/item_base.html:397 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:237 +#: part/bom.py:265 stock/templates/stock/item_base.html:397 #: templates/js/translated/company.js:337 #: templates/js/translated/company.js:774 templates/js/translated/order.js:823 -#: templates/js/translated/part.js:215 templates/js/translated/part.js:857 +#: templates/js/translated/part.js:215 templates/js/translated/part.js:863 #: templates/js/translated/table_filters.js:393 msgid "Supplier" msgstr "" @@ -2450,8 +2539,8 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 -#: templates/js/translated/part.js:226 templates/js/translated/part.js:875 +#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1025 +#: templates/js/translated/part.js:226 templates/js/translated/part.js:881 msgid "SKU" msgstr "" @@ -2472,22 +2561,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:576 company/templates/company/supplier_part.html:119 -#: part/models.py:2641 report/templates/report/inventree_po_report.html:93 +#: part/models.py:2648 report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "base cost" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:493 stock/templates/stock/item_base.html:338 -#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1791 +#: stock/models.py:495 stock/templates/stock/item_base.html:338 +#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1799 msgid "Packaging" msgstr "" @@ -2495,7 +2584,7 @@ msgstr "" msgid "Part packaging" msgstr "" -#: company/models.py:584 part/models.py:1781 +#: company/models.py:584 part/models.py:1783 msgid "multiple" msgstr "" @@ -2554,12 +2643,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:547 -#: order/templates/order/sales_order_base.html:115 stock/models.py:512 -#: stock/models.py:513 stock/serializers.py:625 +#: company/templates/company/company_base.html:83 order/models.py:552 +#: order/templates/order/sales_order_base.html:115 stock/models.py:514 +#: stock/models.py:515 stock/serializers.py:626 #: stock/templates/stock/item_base.html:290 #: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 -#: templates/js/translated/stock.js:2452 +#: templates/js/translated/stock.js:2610 #: templates/js/translated/table_filters.js:397 msgid "Customer" msgstr "" @@ -2590,7 +2679,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:118 -#: part/templates/part/detail.html:336 +#: part/templates/part/detail.html:353 msgid "New Supplier Part" msgstr "" @@ -2598,8 +2687,8 @@ msgstr "" #: company/templates/company/detail.html:79 #: company/templates/company/manufacturer_part.html:127 #: company/templates/company/manufacturer_part.html:156 -#: part/templates/part/category.html:171 part/templates/part/detail.html:345 -#: part/templates/part/detail.html:374 +#: part/templates/part/category.html:171 part/templates/part/detail.html:362 +#: part/templates/part/detail.html:391 msgid "Options" msgstr "" @@ -2627,7 +2716,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:67 part/templates/part/detail.html:364 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:381 msgid "New Manufacturer Part" msgstr "" @@ -2641,7 +2730,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:68 part/templates/part/part_sidebar.html:33 +#: part/templates/part/detail.html:85 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197 #: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 @@ -2663,7 +2752,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:91 part/templates/part/part_sidebar.html:37 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:41 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217 #: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 @@ -2691,13 +2780,13 @@ msgstr "" #: company/templates/company/detail.html:384 #: company/templates/company/manufacturer_part.html:215 -#: part/templates/part/detail.html:418 +#: part/templates/part/detail.html:435 msgid "Delete Supplier Parts?" msgstr "" #: company/templates/company/detail.html:385 #: company/templates/company/manufacturer_part.html:216 -#: part/templates/part/detail.html:419 +#: part/templates/part/detail.html:436 msgid "All selected supplier parts will be deleted" msgstr "" @@ -2714,7 +2803,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:34 #: company/templates/company/supplier_part.html:159 -#: part/templates/part/detail.html:71 part/templates/part/part_base.html:76 +#: part/templates/part/detail.html:88 part/templates/part/part_base.html:76 msgid "Order part" msgstr "" @@ -2735,34 +2824,34 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 -#: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 +#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:163 #: templates/InvenTree/search.html:188 templates/navbar.html:45 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:129 -#: part/templates/part/detail.html:347 +#: part/templates/part/detail.html:364 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:129 #: company/templates/company/manufacturer_part.html:158 #: company/templates/company/manufacturer_part.html:254 -#: part/templates/part/detail.html:347 part/templates/part/detail.html:376 +#: part/templates/part/detail.html:364 part/templates/part/detail.html:393 #: templates/js/translated/company.js:426 templates/js/translated/helpers.js:31 -#: users/models.py:210 +#: users/models.py:212 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:143 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:17 -#: part/templates/part/detail.html:170 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:187 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:147 -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:192 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part.html:65 msgid "New Parameter" @@ -2773,7 +2862,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:191 -#: part/templates/part/detail.html:862 +#: part/templates/part/detail.html:892 msgid "Add Parameter" msgstr "" @@ -2802,9 +2891,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:477 +#: company/templates/company/supplier_part.html:24 stock/models.py:479 #: stock/templates/stock/item_base.html:402 -#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1748 +#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1756 msgid "Supplier Part" msgstr "" @@ -2830,7 +2919,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:167 -#: templates/js/translated/stock.js:360 +#: templates/js/translated/stock.js:368 msgid "New Stock Item" msgstr "" @@ -2840,7 +2929,7 @@ msgid "Supplier Part Orders" msgstr "" #: company/templates/company/supplier_part.html:160 -#: part/templates/part/detail.html:72 +#: part/templates/part/detail.html:89 msgid "Order Part" msgstr "" @@ -2851,7 +2940,7 @@ msgstr "" #: company/templates/company/supplier_part.html:184 #: company/templates/company/supplier_part.html:290 -#: part/templates/part/prices.html:271 part/views.py:1619 +#: part/templates/part/prices.html:271 part/views.py:1628 msgid "Add Price Break" msgstr "" @@ -2859,11 +2948,11 @@ msgstr "" msgid "No price break information found" msgstr "" -#: company/templates/company/supplier_part.html:224 part/views.py:1681 +#: company/templates/company/supplier_part.html:224 part/views.py:1690 msgid "Delete Price Break" msgstr "" -#: company/templates/company/supplier_part.html:238 part/views.py:1667 +#: company/templates/company/supplier_part.html:238 part/views.py:1676 msgid "Edit Price Break" msgstr "" @@ -2881,10 +2970,10 @@ msgstr "" #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:150 #: templates/InvenTree/settings/sidebar.html:41 -#: templates/js/translated/bom.js:328 templates/js/translated/part.js:489 -#: templates/js/translated/part.js:624 templates/js/translated/part.js:1118 -#: templates/js/translated/part.js:1279 templates/js/translated/stock.js:927 -#: templates/js/translated/stock.js:1580 templates/navbar.html:28 +#: templates/js/translated/bom.js:340 templates/js/translated/part.js:495 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1125 +#: templates/js/translated/part.js:1286 templates/js/translated/stock.js:935 +#: templates/js/translated/stock.js:1588 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2907,8 +2996,8 @@ msgstr "" #: stock/templates/stock/location.html:151 #: stock/templates/stock/location.html:163 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2351 -#: templates/stats.html:93 templates/stats.html:102 users/models.py:43 +#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2509 +#: templates/stats.html:105 templates/stats.html:114 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2937,20 +3026,20 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:129 part/views.py:584 +#: company/views.py:129 part/views.py:593 msgid "Download Image" msgstr "" -#: company/views.py:158 part/views.py:616 +#: company/views.py:158 part/views.py:625 msgid "Image size exceeds maximum allowable size for download" msgstr "" -#: company/views.py:165 part/views.py:623 +#: company/views.py:165 part/views.py:632 #, python-brace-format msgid "Invalid response: {code}" msgstr "" -#: company/views.py:174 part/views.py:632 +#: company/views.py:174 part/views.py:641 msgid "Supplied URL is not a valid image file" msgstr "" @@ -3036,282 +3125,282 @@ msgstr "" msgid "Cancel order" msgstr "" -#: order/models.py:122 +#: order/models.py:125 msgid "Order description" msgstr "" -#: order/models.py:124 +#: order/models.py:127 msgid "Link to external page" msgstr "" -#: order/models.py:132 +#: order/models.py:135 msgid "Created By" msgstr "" -#: order/models.py:139 +#: order/models.py:142 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:144 +#: order/models.py:147 msgid "Order notes" msgstr "" -#: order/models.py:211 order/models.py:537 +#: order/models.py:214 order/models.py:542 msgid "Order reference" msgstr "" -#: order/models.py:216 order/models.py:552 +#: order/models.py:219 order/models.py:557 msgid "Purchase order status" msgstr "" -#: order/models.py:225 +#: order/models.py:228 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:228 order/templates/order/order_base.html:118 +#: order/models.py:231 order/templates/order/order_base.html:118 #: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:228 +#: order/models.py:231 msgid "Supplier order reference code" msgstr "" -#: order/models.py:235 +#: order/models.py:238 msgid "received by" msgstr "" -#: order/models.py:240 +#: order/models.py:243 msgid "Issue Date" msgstr "" -#: order/models.py:241 +#: order/models.py:244 msgid "Date order was issued" msgstr "" -#: order/models.py:246 +#: order/models.py:249 msgid "Target Delivery Date" msgstr "" -#: order/models.py:247 +#: order/models.py:250 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:253 +#: order/models.py:256 msgid "Date order was completed" msgstr "" -#: order/models.py:282 +#: order/models.py:285 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:411 -msgid "Quantity must be an integer" -msgstr "" - -#: order/models.py:415 +#: order/models.py:420 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:548 +#: order/models.py:553 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer Reference " msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer order reference code" msgstr "" -#: order/models.py:559 +#: order/models.py:564 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:562 order/models.py:1028 +#: order/models.py:567 order/models.py:1048 #: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:569 +#: order/models.py:574 msgid "shipped by" msgstr "" -#: order/models.py:635 +#: order/models.py:640 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:639 +#: order/models.py:644 msgid "Only a pending order can be marked as complete" msgstr "" -#: order/models.py:642 +#: order/models.py:647 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:645 +#: order/models.py:650 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:797 +#: order/models.py:806 msgid "Item quantity" msgstr "" -#: order/models.py:803 +#: order/models.py:812 msgid "Line item reference" msgstr "" -#: order/models.py:805 +#: order/models.py:814 msgid "Line item notes" msgstr "" -#: order/models.py:835 order/models.py:926 order/models.py:1022 -#: templates/js/translated/order.js:1820 +#: order/models.py:842 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:855 order/models.py:946 order/models.py:1042 +#: templates/js/translated/order.js:1820 templates/js/translated/stock.js:2271 msgid "Order" msgstr "" -#: order/models.py:836 order/templates/order/order_base.html:9 +#: order/models.py:856 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:352 -#: templates/js/translated/order.js:801 templates/js/translated/part.js:832 -#: templates/js/translated/stock.js:1725 templates/js/translated/stock.js:2433 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:838 +#: templates/js/translated/stock.js:1733 templates/js/translated/stock.js:2591 msgid "Purchase Order" msgstr "" -#: order/models.py:857 +#: order/models.py:877 msgid "Supplier part" msgstr "" -#: order/models.py:864 order/templates/order/order_base.html:163 +#: order/models.py:884 order/templates/order/order_base.html:163 #: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 -#: templates/js/translated/part.js:904 templates/js/translated/part.js:930 +#: templates/js/translated/part.js:910 templates/js/translated/part.js:937 #: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:865 +#: order/models.py:885 msgid "Number of items received" msgstr "" -#: order/models.py:872 part/templates/part/prices.html:176 stock/models.py:606 +#: order/models.py:892 part/templates/part/prices.html:176 stock/models.py:608 #: stock/serializers.py:170 stock/templates/stock/item_base.html:359 -#: templates/js/translated/stock.js:1779 +#: templates/js/translated/stock.js:1787 msgid "Purchase Price" msgstr "" -#: order/models.py:873 +#: order/models.py:893 msgid "Unit purchase price" msgstr "" -#: order/models.py:881 +#: order/models.py:901 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:936 part/templates/part/part_pricing.html:112 +#: order/models.py:956 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:937 +#: order/models.py:957 msgid "Unit sale price" msgstr "" -#: order/models.py:942 +#: order/models.py:962 msgid "Shipped quantity" msgstr "" -#: order/models.py:1029 +#: order/models.py:1049 msgid "Date of shipment" msgstr "" -#: order/models.py:1036 +#: order/models.py:1056 msgid "Checked By" msgstr "" -#: order/models.py:1037 +#: order/models.py:1057 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1045 +#: order/models.py:1065 msgid "Shipment number" msgstr "" -#: order/models.py:1052 +#: order/models.py:1072 msgid "Shipment notes" msgstr "" -#: order/models.py:1059 +#: order/models.py:1079 msgid "Tracking Number" msgstr "" -#: order/models.py:1060 +#: order/models.py:1080 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1070 +#: order/models.py:1090 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1073 +#: order/models.py:1093 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1149 order/models.py:1151 +#: order/models.py:1171 order/models.py:1173 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1155 +#: order/models.py:1177 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1157 +#: order/models.py:1179 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1160 +#: order/models.py:1182 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1164 +#: order/models.py:1186 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:1170 order/serializers.py:734 +#: order/models.py:1192 order/serializers.py:740 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1173 +#: order/models.py:1195 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1174 +#: order/models.py:1196 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1182 +#: order/models.py:1204 msgid "Line" msgstr "" -#: order/models.py:1190 order/serializers.py:825 order/serializers.py:953 -#: templates/js/translated/model_renderers.js:251 +#: order/models.py:1212 order/serializers.py:831 order/serializers.py:959 +#: templates/js/translated/model_renderers.js:285 msgid "Shipment" msgstr "" -#: order/models.py:1191 +#: order/models.py:1213 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1203 +#: order/models.py:1225 msgid "Item" msgstr "" -#: order/models.py:1204 +#: order/models.py:1226 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1207 +#: order/models.py:1229 msgid "Enter stock allocation quantity" msgstr "" @@ -3319,7 +3408,7 @@ msgstr "" msgid "Purchase price currency" msgstr "" -#: order/serializers.py:211 order/serializers.py:790 +#: order/serializers.py:211 order/serializers.py:796 msgid "Line Item" msgstr "" @@ -3355,39 +3444,39 @@ msgstr "" msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:587 msgid "Sale price currency" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:655 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:699 order/serializers.py:802 +#: order/serializers.py:705 order/serializers.py:808 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:721 +#: order/serializers.py:727 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:815 +#: order/serializers.py:821 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:839 order/serializers.py:964 +#: order/serializers.py:845 order/serializers.py:970 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:842 order/serializers.py:967 +#: order/serializers.py:848 order/serializers.py:973 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:894 +#: order/serializers.py:900 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:910 msgid "The following serial numbers are already allocated" msgstr "" @@ -3441,6 +3530,7 @@ msgstr "" #: order/templates/order/order_base.html:94 #: order/templates/order/sales_order_base.html:89 +#: templates/js/translated/stock.js:2327 msgid "Order Status" msgstr "" @@ -3538,7 +3628,7 @@ msgstr "" #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/build.js:300 templates/js/translated/build.js:1311 #: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 -#: templates/js/translated/stock.js:593 templates/js/translated/stock.js:761 +#: templates/js/translated/stock.js:601 templates/js/translated/stock.js:769 msgid "Remove row" msgstr "" @@ -3729,7 +3819,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:48 -#: templates/js/translated/bom.js:720 templates/js/translated/build.js:1243 +#: templates/js/translated/bom.js:732 templates/js/translated/build.js:1243 msgid "Actions" msgstr "" @@ -3832,447 +3922,448 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:125 part/models.py:81 part/models.py:847 +#: part/bom.py:125 part/models.py:83 part/models.py:849 #: part/templates/part/category.html:108 part/templates/part/part_base.html:338 msgid "Default Location" msgstr "" -#: part/bom.py:126 part/templates/part/part_base.html:185 +#: part/bom.py:126 templates/email/low_stock_notification.html:17 +msgid "Total Stock" +msgstr "" + +#: part/bom.py:127 part/templates/part/part_base.html:185 msgid "Available Stock" msgstr "" -#: part/forms.py:85 +#: part/bom.py:128 part/templates/part/part_base.html:203 +#: templates/js/translated/part.js:1301 +msgid "On Order" +msgstr "" + +#: part/forms.py:84 msgid "Select part category" msgstr "" -#: part/forms.py:122 +#: part/forms.py:121 msgid "Add parameter template to same level categories" msgstr "" -#: part/forms.py:126 +#: part/forms.py:125 msgid "Add parameter template to all categories" msgstr "" -#: part/forms.py:146 +#: part/forms.py:145 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 +#: part/models.py:84 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:95 part/models.py:2526 part/templates/part/category.html:15 +#: part/models.py:97 part/models.py:2533 part/templates/part/category.html:15 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:96 part/templates/part/category.html:128 -#: templates/InvenTree/search.html:95 templates/stats.html:84 +#: part/models.py:98 part/templates/part/category.html:128 +#: templates/InvenTree/search.html:95 templates/stats.html:96 #: users/models.py:40 msgid "Part Categories" msgstr "" -#: part/models.py:358 part/templates/part/cat_link.html:3 +#: part/models.py:360 part/templates/part/cat_link.html:3 #: part/templates/part/category.html:17 part/templates/part/category.html:133 #: part/templates/part/category.html:153 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82 #: templates/InvenTree/settings/sidebar.html:37 -#: templates/js/translated/part.js:1656 templates/navbar.html:21 -#: templates/stats.html:80 templates/stats.html:89 users/models.py:41 +#: templates/js/translated/part.js:1663 templates/navbar.html:21 +#: templates/stats.html:92 templates/stats.html:101 users/models.py:41 msgid "Parts" msgstr "" -#: part/models.py:450 +#: part/models.py:452 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:500 part/models.py:512 +#: part/models.py:502 part/models.py:514 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:642 +#: part/models.py:644 msgid "Next available serial numbers are" msgstr "" -#: part/models.py:646 +#: part/models.py:648 msgid "Next available serial number is" msgstr "" -#: part/models.py:651 +#: part/models.py:653 msgid "Most recent serial number is" msgstr "" -#: part/models.py:746 +#: part/models.py:748 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:771 +#: part/models.py:773 msgid "Part name" msgstr "" -#: part/models.py:778 +#: part/models.py:780 msgid "Is Template" msgstr "" -#: part/models.py:779 +#: part/models.py:781 msgid "Is this part a template part?" msgstr "" -#: part/models.py:789 +#: part/models.py:791 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:790 +#: part/models.py:792 msgid "Variant Of" msgstr "" -#: part/models.py:796 +#: part/models.py:798 msgid "Part description" msgstr "" -#: part/models.py:801 part/templates/part/category.html:86 +#: part/models.py:803 part/templates/part/category.html:86 #: part/templates/part/part_base.html:302 msgid "Keywords" msgstr "" -#: part/models.py:802 +#: part/models.py:804 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:809 part/models.py:2276 part/models.py:2525 +#: part/models.py:811 part/models.py:2283 part/models.py:2532 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:183 -#: templates/js/translated/part.js:1261 +#: templates/InvenTree/settings/settings.html:186 +#: templates/js/translated/part.js:1268 msgid "Category" msgstr "" -#: part/models.py:810 +#: part/models.py:812 msgid "Part category" msgstr "" -#: part/models.py:815 part/templates/part/part_base.html:274 -#: templates/js/translated/part.js:612 templates/js/translated/part.js:1214 -#: templates/js/translated/stock.js:1552 +#: part/models.py:817 part/templates/part/part_base.html:274 +#: templates/js/translated/part.js:618 templates/js/translated/part.js:1221 +#: templates/js/translated/stock.js:1560 msgid "IPN" msgstr "" -#: part/models.py:816 +#: part/models.py:818 msgid "Internal Part Number" msgstr "" -#: part/models.py:822 +#: part/models.py:824 msgid "Part revision or version number" msgstr "" -#: part/models.py:823 part/templates/part/part_base.html:281 -#: report/models.py:200 templates/js/translated/part.js:616 +#: part/models.py:825 part/templates/part/part_base.html:281 +#: report/models.py:200 templates/js/translated/part.js:622 msgid "Revision" msgstr "" -#: part/models.py:845 +#: part/models.py:847 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:892 part/templates/part/part_base.html:347 +#: part/models.py:894 part/templates/part/part_base.html:347 msgid "Default Supplier" msgstr "" -#: part/models.py:893 +#: part/models.py:895 msgid "Default supplier part" msgstr "" -#: part/models.py:900 +#: part/models.py:902 msgid "Default Expiry" msgstr "" -#: part/models.py:901 +#: part/models.py:903 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:906 part/templates/part/part_base.html:196 +#: part/models.py:908 part/templates/part/part_base.html:196 msgid "Minimum Stock" msgstr "" -#: part/models.py:907 +#: part/models.py:909 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:914 +#: part/models.py:916 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:920 +#: part/models.py:922 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:926 +#: part/models.py:928 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:932 +#: part/models.py:934 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:937 +#: part/models.py:939 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:942 +#: part/models.py:944 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:946 plugin/models.py:46 -#: templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:295 -#: templates/js/translated/table_filters.js:417 -msgid "Active" -msgstr "" - -#: part/models.py:947 +#: part/models.py:949 msgid "Is this part active?" msgstr "" -#: part/models.py:952 +#: part/models.py:954 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:957 +#: part/models.py:959 msgid "Part notes - supports Markdown formatting" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "BOM checksum" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:963 +#: part/models.py:965 msgid "BOM checked by" msgstr "" -#: part/models.py:965 +#: part/models.py:967 msgid "BOM checked date" msgstr "" -#: part/models.py:969 +#: part/models.py:971 msgid "Creation User" msgstr "" -#: part/models.py:1781 +#: part/models.py:1783 msgid "Sell multiple" msgstr "" -#: part/models.py:2326 +#: part/models.py:2333 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2343 +#: part/models.py:2350 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2363 templates/js/translated/part.js:1707 -#: templates/js/translated/stock.js:1276 +#: part/models.py:2370 templates/js/translated/part.js:1714 +#: templates/js/translated/stock.js:1284 msgid "Test Name" msgstr "" -#: part/models.py:2364 +#: part/models.py:2371 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2369 +#: part/models.py:2376 msgid "Test Description" msgstr "" -#: part/models.py:2370 +#: part/models.py:2377 msgid "Enter description for this test" msgstr "" -#: part/models.py:2375 templates/js/translated/part.js:1716 +#: part/models.py:2382 templates/js/translated/part.js:1723 #: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" -#: part/models.py:2376 +#: part/models.py:2383 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2381 templates/js/translated/part.js:1724 +#: part/models.py:2388 templates/js/translated/part.js:1731 msgid "Requires Value" msgstr "" -#: part/models.py:2382 +#: part/models.py:2389 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2387 templates/js/translated/part.js:1731 +#: part/models.py:2394 templates/js/translated/part.js:1738 msgid "Requires Attachment" msgstr "" -#: part/models.py:2388 +#: part/models.py:2395 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2399 +#: part/models.py:2406 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2435 +#: part/models.py:2442 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2443 +#: part/models.py:2450 msgid "Parameter Name" msgstr "" -#: part/models.py:2450 +#: part/models.py:2457 msgid "Parameter Units" msgstr "" -#: part/models.py:2480 +#: part/models.py:2487 msgid "Parent Part" msgstr "" -#: part/models.py:2482 part/models.py:2531 part/models.py:2532 -#: templates/InvenTree/settings/settings.html:178 +#: part/models.py:2489 part/models.py:2538 part/models.py:2539 +#: templates/InvenTree/settings/settings.html:181 msgid "Parameter Template" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Data" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Parameter Value" msgstr "" -#: part/models.py:2536 templates/InvenTree/settings/settings.html:187 +#: part/models.py:2543 templates/InvenTree/settings/settings.html:190 msgid "Default Value" msgstr "" -#: part/models.py:2537 +#: part/models.py:2544 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2614 +#: part/models.py:2621 msgid "Select parent part" msgstr "" -#: part/models.py:2622 +#: part/models.py:2629 msgid "Sub part" msgstr "" -#: part/models.py:2623 +#: part/models.py:2630 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2629 +#: part/models.py:2636 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2631 templates/js/translated/bom.js:566 -#: templates/js/translated/bom.js:640 +#: part/models.py:2638 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:652 #: templates/js/translated/table_filters.js:92 msgid "Optional" msgstr "" -#: part/models.py:2631 +#: part/models.py:2638 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2634 +#: part/models.py:2641 msgid "Overage" msgstr "" -#: part/models.py:2635 +#: part/models.py:2642 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2638 +#: part/models.py:2645 msgid "BOM item reference" msgstr "" -#: part/models.py:2641 +#: part/models.py:2648 msgid "BOM item notes" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "Checksum" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "BOM line checksum" msgstr "" -#: part/models.py:2647 templates/js/translated/bom.js:657 +#: part/models.py:2654 templates/js/translated/bom.js:669 #: templates/js/translated/table_filters.js:68 #: templates/js/translated/table_filters.js:88 msgid "Inherited" msgstr "" -#: part/models.py:2648 +#: part/models.py:2655 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2653 templates/js/translated/bom.js:649 +#: part/models.py:2660 templates/js/translated/bom.js:661 msgid "Allow Variants" msgstr "" -#: part/models.py:2654 +#: part/models.py:2661 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2739 stock/models.py:355 +#: part/models.py:2746 stock/models.py:357 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2748 part/models.py:2750 +#: part/models.py:2755 part/models.py:2757 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2879 +#: part/models.py:2886 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2901 +#: part/models.py:2908 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2913 +#: part/models.py:2920 msgid "Parent BOM item" msgstr "" -#: part/models.py:2921 +#: part/models.py:2928 msgid "Substitute part" msgstr "" -#: part/models.py:2932 +#: part/models.py:2939 msgid "Part 1" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Part 2" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Select Related Part" msgstr "" -#: part/models.py:2968 +#: part/models.py:2975 msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique" msgstr "" @@ -4327,7 +4418,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:253 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:270 msgid "BOM actions" msgstr "" @@ -4499,7 +4590,7 @@ msgstr "" msgid "Import Parts" msgstr "" -#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:375 +#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:348 msgid "Duplicate Part" msgstr "" @@ -4533,145 +4624,149 @@ msgid "Showing stock for all variants of %(full_name)s" msgstr "" #: part/templates/part/detail.html:43 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/detail.html:60 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:48 +#: part/templates/part/detail.html:65 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:105 +#: part/templates/part/detail.html:122 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:142 +#: part/templates/part/detail.html:159 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:146 +#: part/templates/part/detail.html:163 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:147 +#: part/templates/part/detail.html:164 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:174 +#: part/templates/part/detail.html:191 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:45 +#: part/templates/part/detail.html:228 part/templates/part/part_sidebar.html:49 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:215 part/templates/part/detail.html:216 +#: part/templates/part/detail.html:232 part/templates/part/detail.html:233 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:253 part/templates/part/part_sidebar.html:17 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:241 +#: part/templates/part/detail.html:258 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:245 templates/js/translated/bom.js:70 +#: part/templates/part/detail.html:262 templates/js/translated/bom.js:70 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:247 +#: part/templates/part/detail.html:264 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:257 +#: part/templates/part/detail.html:274 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:259 templates/js/translated/part.js:272 +#: part/templates/part/detail.html:276 templates/js/translated/part.js:272 msgid "Copy BOM" msgstr "" -#: part/templates/part/detail.html:261 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:283 msgid "New BOM Item" msgstr "" -#: part/templates/part/detail.html:267 +#: part/templates/part/detail.html:284 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:280 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:314 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:322 +#: part/templates/part/detail.html:339 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:332 +#: part/templates/part/detail.html:349 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:360 +#: part/templates/part/detail.html:377 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:393 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:558 +#: part/templates/part/detail.html:575 msgid "Delete selected BOM items?" msgstr "" -#: part/templates/part/detail.html:559 +#: part/templates/part/detail.html:576 msgid "All selected BOM items will be deleted" msgstr "" -#: part/templates/part/detail.html:608 +#: part/templates/part/detail.html:625 msgid "Create BOM Item" msgstr "" -#: part/templates/part/detail.html:652 +#: part/templates/part/detail.html:682 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:660 +#: part/templates/part/detail.html:690 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:755 +#: part/templates/part/detail.html:785 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:812 +#: part/templates/part/detail.html:842 msgid "Edit Part Notes" msgstr "" -#: part/templates/part/detail.html:925 +#: part/templates/part/detail.html:955 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:937 +#: part/templates/part/detail.html:967 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:949 +#: part/templates/part/detail.html:979 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1038 +#: part/templates/part/detail.html:1068 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -4786,7 +4881,7 @@ msgstr "" #: templates/js/translated/company.js:508 #: templates/js/translated/company.js:765 #: templates/js/translated/model_renderers.js:175 -#: templates/js/translated/part.js:527 templates/js/translated/part.js:604 +#: templates/js/translated/part.js:533 templates/js/translated/part.js:610 msgid "Inactive" msgstr "" @@ -4805,10 +4900,6 @@ msgstr "" msgid "In Stock" msgstr "" -#: part/templates/part/part_base.html:203 templates/js/translated/part.js:1294 -msgid "On Order" -msgstr "" - #: part/templates/part/part_base.html:210 templates/InvenTree/index.html:178 msgid "Required for Build Orders" msgstr "" @@ -4821,12 +4912,12 @@ msgstr "" msgid "Allocated to Orders" msgstr "" -#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:678 +#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:690 msgid "Can Build" msgstr "" -#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1125 -#: templates/js/translated/part.js:1298 +#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1132 +#: templates/js/translated/part.js:1305 msgid "Building" msgstr "" @@ -4878,7 +4969,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:40 -#: templates/js/translated/bom.js:632 +#: templates/js/translated/bom.js:644 msgid "No supplier pricing available" msgstr "" @@ -4920,7 +5011,12 @@ msgstr "" msgid "Used In" msgstr "" -#: part/templates/part/part_sidebar.html:41 +#: part/templates/part/part_sidebar.html:31 +#: stock/templates/stock/stock_sidebar.html:8 +msgid "Allocations" +msgstr "" + +#: part/templates/part/part_sidebar.html:45 msgid "Test Templates" msgstr "" @@ -4993,7 +5089,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:155 templates/js/translated/bom.js:626 +#: part/templates/part/prices.html:155 templates/js/translated/bom.js:638 msgid "Supplier Cost" msgstr "" @@ -5015,7 +5111,7 @@ msgstr "" msgid "Internal Cost" msgstr "" -#: part/templates/part/prices.html:215 part/views.py:1690 +#: part/templates/part/prices.html:215 part/views.py:1699 msgid "Add Internal Price Break" msgstr "" @@ -5035,9 +5131,9 @@ msgstr "" msgid "Set category for the following parts" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:588 -#: templates/js/translated/part.js:491 templates/js/translated/part.js:1115 -#: templates/js/translated/part.js:1302 +#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:600 +#: templates/js/translated/part.js:497 templates/js/translated/part.js:1122 +#: templates/js/translated/part.js:1309 msgid "No Stock" msgstr "" @@ -5054,116 +5150,116 @@ msgstr "" msgid "Create a new variant of template '%(full_name)s'." msgstr "" -#: part/templatetags/inventree_extras.py:116 +#: part/templatetags/inventree_extras.py:125 msgid "Unknown database" msgstr "" -#: part/views.py:92 +#: part/views.py:93 msgid "Set Part Category" msgstr "" -#: part/views.py:142 +#: part/views.py:143 #, python-brace-format msgid "Set category for {n} parts" msgstr "" -#: part/views.py:214 +#: part/views.py:215 msgid "Match References" msgstr "" -#: part/views.py:502 +#: part/views.py:511 msgid "None" msgstr "" -#: part/views.py:561 +#: part/views.py:570 msgid "Part QR Code" msgstr "" -#: part/views.py:663 +#: part/views.py:672 msgid "Select Part Image" msgstr "" -#: part/views.py:689 +#: part/views.py:698 msgid "Updated part image" msgstr "" -#: part/views.py:692 +#: part/views.py:701 msgid "Part image not found" msgstr "" -#: part/views.py:766 +#: part/views.py:775 msgid "Match Parts" msgstr "" -#: part/views.py:1101 +#: part/views.py:1110 msgid "Export Bill of Materials" msgstr "" -#: part/views.py:1150 +#: part/views.py:1159 msgid "Confirm Part Deletion" msgstr "" -#: part/views.py:1157 +#: part/views.py:1166 msgid "Part was deleted" msgstr "" -#: part/views.py:1166 +#: part/views.py:1175 msgid "Part Pricing" msgstr "" -#: part/views.py:1315 +#: part/views.py:1324 msgid "Create Part Parameter Template" msgstr "" -#: part/views.py:1325 +#: part/views.py:1334 msgid "Edit Part Parameter Template" msgstr "" -#: part/views.py:1332 +#: part/views.py:1341 msgid "Delete Part Parameter Template" msgstr "" -#: part/views.py:1391 templates/js/translated/part.js:315 +#: part/views.py:1400 templates/js/translated/part.js:315 msgid "Edit Part Category" msgstr "" -#: part/views.py:1429 +#: part/views.py:1438 msgid "Delete Part Category" msgstr "" -#: part/views.py:1435 +#: part/views.py:1444 msgid "Part category was deleted" msgstr "" -#: part/views.py:1444 +#: part/views.py:1453 msgid "Create Category Parameter Template" msgstr "" -#: part/views.py:1545 +#: part/views.py:1554 msgid "Edit Category Parameter Template" msgstr "" -#: part/views.py:1601 +#: part/views.py:1610 msgid "Delete Category Parameter Template" msgstr "" -#: part/views.py:1623 +#: part/views.py:1632 msgid "Added new price break" msgstr "" -#: part/views.py:1699 +#: part/views.py:1708 msgid "Edit Internal Price Break" msgstr "" -#: part/views.py:1707 +#: part/views.py:1716 msgid "Delete Internal Price Break" msgstr "" -#: plugin/integration.py:124 +#: plugin/integration.py:138 msgid "No author found" msgstr "" -#: plugin/integration.py:136 +#: plugin/integration.py:152 msgid "No date found" msgstr "" @@ -5191,7 +5287,7 @@ msgstr "" msgid "Is the plugin active" msgstr "" -#: plugin/models.py:195 +#: plugin/models.py:199 msgid "Plugin" msgstr "" @@ -5357,12 +5453,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:517 stock/templates/stock/item_base.html:156 +#: stock/models.py:519 stock/templates/stock/item_base.html:156 #: templates/js/translated/build.js:293 templates/js/translated/build.js:697 #: templates/js/translated/build.js:1073 #: templates/js/translated/model_renderers.js:95 #: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 -#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:415 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:423 msgid "Serial Number" msgstr "" @@ -5371,19 +5467,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1948 +#: stock/models.py:1976 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1954 +#: stock/models.py:1982 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin.html:50 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2367 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2525 msgid "Date" msgstr "" @@ -5396,23 +5492,27 @@ msgid "Fail" msgstr "" #: report/templates/report/inventree_test_report_base.html:123 -#: stock/templates/stock/stock_sidebar.html:12 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:578 templates/js/translated/stock.js:748 -#: templates/js/translated/stock.js:2627 +#: templates/js/translated/stock.js:586 templates/js/translated/stock.js:756 +#: templates/js/translated/stock.js:2785 msgid "Serial" msgstr "" -#: stock/api.py:478 +#: stock/api.py:476 msgid "Quantity is required" msgstr "" -#: stock/forms.py:77 stock/forms.py:251 stock/models.py:574 +#: stock/api.py:483 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:576 #: stock/templates/stock/item_base.html:193 -#: templates/js/translated/stock.js:1701 +#: templates/js/translated/stock.js:1709 msgid "Expiry Date" msgstr "" @@ -5460,228 +5560,228 @@ msgstr "" msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:611 +#: stock/models.py:62 stock/models.py:613 #: stock/templates/stock/item_base.html:416 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:612 +#: stock/models.py:63 stock/models.py:614 msgid "Select Owner" msgstr "" -#: stock/models.py:336 +#: stock/models.py:338 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:372 +#: stock/models.py:374 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:382 stock/models.py:391 +#: stock/models.py:384 stock/models.py:393 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:383 +#: stock/models.py:385 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:405 +#: stock/models.py:407 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:411 +#: stock/models.py:413 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:418 +#: stock/models.py:420 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:461 +#: stock/models.py:463 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:470 +#: stock/models.py:472 msgid "Base part" msgstr "" -#: stock/models.py:478 +#: stock/models.py:480 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:484 stock/templates/stock/location.html:16 +#: stock/models.py:486 stock/templates/stock/location.html:16 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:494 +#: stock/models.py:496 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:500 stock/templates/stock/item_base.html:298 +#: stock/models.py:502 stock/templates/stock/item_base.html:298 msgid "Installed In" msgstr "" -#: stock/models.py:503 +#: stock/models.py:505 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:519 +#: stock/models.py:521 msgid "Serial number for this item" msgstr "" -#: stock/models.py:533 +#: stock/models.py:535 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:537 +#: stock/models.py:539 msgid "Stock Quantity" msgstr "" -#: stock/models.py:546 +#: stock/models.py:548 msgid "Source Build" msgstr "" -#: stock/models.py:548 +#: stock/models.py:550 msgid "Build for this stock item" msgstr "" -#: stock/models.py:559 +#: stock/models.py:561 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:562 +#: stock/models.py:564 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:568 +#: stock/models.py:570 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:575 +#: stock/models.py:577 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete on deplete" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:598 stock/templates/stock/item.html:111 +#: stock/models.py:600 stock/templates/stock/item.html:128 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:607 +#: stock/models.py:609 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1096 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1074 +#: stock/models.py:1102 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1080 +#: stock/models.py:1108 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1083 +#: stock/models.py:1111 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1086 +#: stock/models.py:1114 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1093 +#: stock/models.py:1121 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1164 +#: stock/models.py:1192 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1195 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1170 +#: stock/models.py:1198 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1173 +#: stock/models.py:1201 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1176 +#: stock/models.py:1204 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1179 +#: stock/models.py:1207 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1186 stock/serializers.py:774 +#: stock/models.py:1214 stock/serializers.py:775 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1190 +#: stock/models.py:1218 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1222 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1198 +#: stock/models.py:1226 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1369 +#: stock/models.py:1397 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1868 +#: stock/models.py:1896 msgid "Entry notes" msgstr "" -#: stock/models.py:1925 +#: stock/models.py:1953 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1931 +#: stock/models.py:1959 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1949 +#: stock/models.py:1977 msgid "Test name" msgstr "" -#: stock/models.py:1955 templates/js/translated/table_filters.js:271 +#: stock/models.py:1983 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1961 +#: stock/models.py:1989 msgid "Test output value" msgstr "" -#: stock/models.py:1968 +#: stock/models.py:1996 msgid "Test result attachment" msgstr "" -#: stock/models.py:1974 +#: stock/models.py:2002 msgid "Test notes" msgstr "" @@ -5706,7 +5806,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:326 stock/serializers.py:731 stock/serializers.py:972 +#: stock/serializers.py:326 stock/serializers.py:732 stock/serializers.py:973 msgid "Destination stock location" msgstr "" @@ -5718,63 +5818,63 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:589 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:592 +#: stock/serializers.py:593 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:597 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:626 +#: stock/serializers.py:627 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:632 +#: stock/serializers.py:633 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:640 +#: stock/serializers.py:641 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:650 stock/serializers.py:880 +#: stock/serializers.py:651 stock/serializers.py:881 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:738 +#: stock/serializers.py:739 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:743 +#: stock/serializers.py:744 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:744 +#: stock/serializers.py:745 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:749 +#: stock/serializers.py:750 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:750 +#: stock/serializers.py:751 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:760 +#: stock/serializers.py:761 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:842 +#: stock/serializers.py:843 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:870 +#: stock/serializers.py:871 msgid "Stock transaction notes" msgstr "" @@ -5787,47 +5887,51 @@ msgid "New Entry" msgstr "" #: stock/templates/stock/item.html:48 -msgid "Child Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:55 -msgid "This stock item does not have any child items" +msgid "Stock Item Allocations" msgstr "" #: stock/templates/stock/item.html:64 -#: stock/templates/stock/stock_sidebar.html:8 -msgid "Test Data" -msgstr "" - -#: stock/templates/stock/item.html:68 stock/templates/stock/item_base.html:57 -msgid "Test Report" +msgid "Child Stock Items" msgstr "" #: stock/templates/stock/item.html:72 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item.html:81 +#: stock/templates/stock/stock_sidebar.html:12 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:57 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item.html:89 msgid "Delete Test Data" msgstr "" -#: stock/templates/stock/item.html:76 +#: stock/templates/stock/item.html:93 msgid "Add Test Data" msgstr "" -#: stock/templates/stock/item.html:133 +#: stock/templates/stock/item.html:150 msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:482 +#: stock/templates/stock/item.html:154 stock/views.py:482 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:279 stock/templates/stock/item.html:304 +#: stock/templates/stock/item.html:309 stock/templates/stock/item.html:334 msgid "Add Test Result" msgstr "" -#: stock/templates/stock/item.html:324 +#: stock/templates/stock/item.html:354 msgid "Edit Test Result" msgstr "" -#: stock/templates/stock/item.html:338 +#: stock/templates/stock/item.html:368 msgid "Delete Test Result" msgstr "" @@ -5952,7 +6056,7 @@ msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:206 -#: templates/js/translated/stock.js:1714 +#: templates/js/translated/stock.js:1722 msgid "Last Updated" msgstr "" @@ -6111,7 +6215,7 @@ msgid "Sublocations" msgstr "" #: stock/templates/stock/location.html:146 templates/InvenTree/search.html:164 -#: templates/stats.html:97 users/models.py:42 +#: templates/stats.html:109 users/models.py:42 msgid "Stock Locations" msgstr "" @@ -6135,7 +6239,7 @@ msgstr "" msgid "Stock Tracking" msgstr "" -#: stock/templates/stock/stock_sidebar.html:16 +#: stock/templates/stock/stock_sidebar.html:20 msgid "Child Items" msgstr "" @@ -6164,7 +6268,7 @@ msgstr "" msgid "Are you sure you want to delete this stock tracking entry?" msgstr "" -#: stock/views.py:162 +#: stock/views.py:162 templates/js/translated/stock.js:139 msgid "Edit Stock Location" msgstr "" @@ -6204,7 +6308,7 @@ msgstr "" msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:727 templates/js/translated/stock.js:1066 +#: stock/views.py:727 templates/js/translated/stock.js:1074 msgid "Confirm stock adjustment" msgstr "" @@ -6212,7 +6316,7 @@ msgstr "" msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:324 +#: stock/views.py:760 templates/js/translated/stock.js:332 msgid "Edit Stock Item" msgstr "" @@ -6224,7 +6328,7 @@ msgstr "" msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1153 templates/js/translated/stock.js:304 +#: stock/views.py:1153 templates/js/translated/stock.js:312 msgid "Duplicate Stock Item" msgstr "" @@ -6268,6 +6372,18 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/500.html:5 templates/500.html:11 +msgid "Internal Server Error" +msgstr "" + +#: templates/500.html:14 +msgid "The InvenTree server raised an internal error" +msgstr "" + +#: templates/500.html:15 +msgid "Refer to the error log in the admin interface for further details" +msgstr "" + #: templates/503.html:10 templates/503.html:35 msgid "Site is in Maintenance" msgstr "" @@ -6390,7 +6506,7 @@ msgid "Signup" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:113 msgid "Settings" msgstr "" @@ -6431,43 +6547,43 @@ msgstr "" msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:32 +#: templates/InvenTree/settings/plugin.html:33 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:37 +#: templates/InvenTree/settings/plugin.html:38 #: templates/js/translated/plugin.js:15 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: templates/InvenTree/settings/plugin.html:47 templates/navbar.html:111 #: users/models.py:39 msgid "Admin" msgstr "" -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:49 #: templates/InvenTree/settings/plugin_settings.html:28 msgid "Author" msgstr "" -#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin_settings.html:43 msgid "Version" msgstr "" -#: templates/InvenTree/settings/plugin.html:91 +#: templates/InvenTree/settings/plugin.html:92 msgid "Inactive plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:114 +#: templates/InvenTree/settings/plugin.html:115 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:123 +#: templates/InvenTree/settings/plugin.html:124 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:125 +#: templates/InvenTree/settings/plugin.html:126 msgid "Message" msgstr "" @@ -6555,37 +6671,37 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:75 +#: templates/InvenTree/settings/settings.html:78 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:77 +#: templates/InvenTree/settings/settings.html:80 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:79 +#: templates/InvenTree/settings/settings.html:82 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:168 +#: templates/InvenTree/settings/settings.html:171 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:190 -#: templates/InvenTree/settings/settings.html:289 +#: templates/InvenTree/settings/settings.html:193 +#: templates/InvenTree/settings/settings.html:292 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:191 -#: templates/InvenTree/settings/settings.html:290 +#: templates/InvenTree/settings/settings.html:194 +#: templates/InvenTree/settings/settings.html:293 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:272 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:273 +#: templates/InvenTree/settings/settings.html:276 msgid "ID" msgstr "" @@ -6763,124 +6879,105 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:219 +#: templates/InvenTree/settings/user.html:220 +msgid "Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:226 +msgid "Log out active sessions (except this one)" +msgstr "" + +#: templates/InvenTree/settings/user.html:227 +msgid "Log Out Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:236 +msgid "unknown on unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:237 +msgid "unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:241 +msgid "IP Address" +msgstr "" + +#: templates/InvenTree/settings/user.html:242 +msgid "Device" +msgstr "" + +#: templates/InvenTree/settings/user.html:243 +msgid "Last Activity" +msgstr "" + +#: templates/InvenTree/settings/user.html:252 +#, python-format +msgid "%(time)s ago (this session)" +msgstr "" + +#: templates/InvenTree/settings/user.html:254 +#, python-format +msgid "%(time)s ago" +msgstr "" + +#: templates/InvenTree/settings/user.html:266 +msgid "Do you really want to remove the selected email address?" +msgstr "" + #: templates/InvenTree/settings/user_display.html:25 msgid "Theme Settings" msgstr "" -#: templates/InvenTree/settings/user.html:227 #: templates/InvenTree/settings/user_display.html:35 msgid "Select theme" msgstr "" -#: templates/InvenTree/settings/user.html:237 #: templates/InvenTree/settings/user_display.html:46 msgid "Set Theme" msgstr "" -#: templates/InvenTree/settings/user.html:246 #: templates/InvenTree/settings/user_display.html:54 msgid "Language Settings" msgstr "" -#: templates/InvenTree/settings/user.html:254 #: templates/InvenTree/settings/user_display.html:63 msgid "Select language" msgstr "" -#: templates/InvenTree/settings/user.html:270 #: templates/InvenTree/settings/user_display.html:79 #, python-format msgid "%(lang_translated)s%% translated" msgstr "" -#: templates/InvenTree/settings/user.html:272 #: templates/InvenTree/settings/user_display.html:81 msgid "No translations available" msgstr "" -#: templates/InvenTree/settings/user.html:279 #: templates/InvenTree/settings/user_display.html:88 msgid "Set Language" msgstr "" -#: templates/InvenTree/settings/user.html:281 #: templates/InvenTree/settings/user_display.html:91 msgid "Some languages are not complete" msgstr "" -#: templates/InvenTree/settings/user.html:283 #: templates/InvenTree/settings/user_display.html:93 msgid "Show only sufficent" msgstr "" -#: templates/InvenTree/settings/user.html:285 +#: templates/InvenTree/settings/user_display.html:95 +msgid "and hidden." +msgstr "" + #: templates/InvenTree/settings/user_display.html:95 msgid "Show them too" msgstr "" -#: templates/InvenTree/settings/user.html:292 #: templates/InvenTree/settings/user_display.html:101 msgid "Help the translation efforts!" msgstr "" -#: templates/InvenTree/settings/user.html:293 -#, python-format -msgid "Native language translation of the\n" -" InvenTree web application is community contributed via crowdin. Contributions are\n" -" welcomed and encouraged." -msgstr "" - -#: templates/InvenTree/settings/user.html:302 -msgid "Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:308 -msgid "Log out active sessions (except this one)" -msgstr "" - -#: templates/InvenTree/settings/user.html:309 -msgid "Log Out Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:318 -msgid "unknown on unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:319 -msgid "unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:323 -msgid "IP Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:324 -msgid "Device" -msgstr "" - -#: templates/InvenTree/settings/user.html:325 -msgid "Last Activity" -msgstr "" - -#: templates/InvenTree/settings/user.html:334 -#, python-format -msgid "%(time)s ago (this session)" -msgstr "" - -#: templates/InvenTree/settings/user.html:336 -#, python-format -msgid "%(time)s ago" -msgstr "" - -#: templates/InvenTree/settings/user.html:348 -msgid "Do you really want to remove the selected email address?" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:95 -msgid "and hidden." -msgstr "" - #: templates/InvenTree/settings/user_display.html:102 #, python-format msgid "Native language translation of the InvenTree web application is community contributed via crowdin. Contributions are welcomed and encouraged." @@ -6899,9 +6996,9 @@ msgid "InvenTree Version Information" msgstr "" #: templates/about.html:11 templates/about.html:105 -#: templates/js/translated/bom.js:395 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:573 templates/js/translated/modals.js:667 -#: templates/js/translated/modals.js:970 templates/modals.html:15 +#: templates/js/translated/bom.js:407 templates/js/translated/modals.js:53 +#: templates/js/translated/modals.js:584 templates/js/translated/modals.js:678 +#: templates/js/translated/modals.js:983 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -7178,13 +7275,13 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1103 +#: templates/js/translated/bom.js:1117 msgid "Required Quantity" msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:579 templates/js/translated/build.js:1189 +#: templates/js/translated/bom.js:591 templates/js/translated/build.js:1189 #: templates/js/translated/build.js:1810 #: templates/js/translated/table_filters.js:178 msgid "Available" @@ -7208,10 +7305,6 @@ msgstr "" msgid "Click on the following link to view this part" msgstr "" -#: templates/email/low_stock_notification.html:17 -msgid "Total Stock" -msgstr "" - #: templates/email/low_stock_notification.html:19 msgid "Minimum Quantity" msgstr "" @@ -7232,11 +7325,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1040 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1053 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1041 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1054 msgid "No response from the InvenTree server" msgstr "" @@ -7248,27 +7341,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1063 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1051 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1064 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1068 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1056 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1069 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1073 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1061 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1074 msgid "The requested resource could not be located on the server" msgstr "" @@ -7280,11 +7373,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1065 +#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1078 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1066 +#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1079 msgid "Connection timeout while requesting data from server" msgstr "" @@ -7353,7 +7446,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "Invalid server response" msgstr "" @@ -7381,7 +7474,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1018 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1026 msgid "Remove stock item" msgstr "" @@ -7428,12 +7521,12 @@ msgid "Download BOM Template" msgstr "" #: templates/js/translated/bom.js:39 templates/js/translated/bom.js:73 -#: templates/js/translated/order.js:369 templates/js/translated/stock.js:510 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:518 msgid "Format" msgstr "" #: templates/js/translated/bom.js:40 templates/js/translated/bom.js:74 -#: templates/js/translated/order.js:370 templates/js/translated/stock.js:511 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:519 msgid "Select file format" msgstr "" @@ -7489,87 +7582,87 @@ msgstr "" msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:340 -msgid "Select and add a new variant item using the input below" +#: templates/js/translated/bom.js:352 +msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:351 +#: templates/js/translated/bom.js:363 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:357 +#: templates/js/translated/bom.js:369 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:396 +#: templates/js/translated/bom.js:408 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:397 +#: templates/js/translated/bom.js:409 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:516 +#: templates/js/translated/bom.js:528 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:520 templates/js/translated/build.js:1171 +#: templates/js/translated/bom.js:532 templates/js/translated/build.js:1171 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:525 +#: templates/js/translated/bom.js:537 msgid "Open subassembly" msgstr "" -#: templates/js/translated/bom.js:597 +#: templates/js/translated/bom.js:609 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:612 +#: templates/js/translated/bom.js:624 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:619 +#: templates/js/translated/bom.js:631 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:668 templates/js/translated/bom.js:757 +#: templates/js/translated/bom.js:680 templates/js/translated/bom.js:769 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:728 +#: templates/js/translated/bom.js:740 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:742 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:732 +#: templates/js/translated/bom.js:744 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:734 templates/js/translated/bom.js:908 +#: templates/js/translated/bom.js:746 templates/js/translated/bom.js:920 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:891 +#: templates/js/translated/bom.js:748 templates/js/translated/bom.js:903 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:830 templates/js/translated/build.js:915 +#: templates/js/translated/bom.js:842 templates/js/translated/build.js:915 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:886 +#: templates/js/translated/bom.js:898 msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:1086 templates/js/translated/build.js:1155 +#: templates/js/translated/bom.js:1100 templates/js/translated/build.js:1155 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1108 +#: templates/js/translated/bom.js:1122 msgid "Inherited from parent BOM" msgstr "" @@ -7725,9 +7818,9 @@ msgstr "" msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1206 -#: templates/js/translated/part.js:1617 templates/js/translated/stock.js:1512 -#: templates/js/translated/stock.js:2321 +#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:1624 templates/js/translated/stock.js:1520 +#: templates/js/translated/stock.js:2479 msgid "Select" msgstr "" @@ -7735,7 +7828,7 @@ msgstr "" msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2540 +#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2698 msgid "No user information" msgstr "" @@ -7808,34 +7901,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:500 -#: templates/js/translated/company.js:757 templates/js/translated/part.js:511 -#: templates/js/translated/part.js:596 +#: templates/js/translated/company.js:757 templates/js/translated/part.js:517 +#: templates/js/translated/part.js:602 msgid "Template part" msgstr "" #: templates/js/translated/company.js:504 -#: templates/js/translated/company.js:761 templates/js/translated/part.js:515 -#: templates/js/translated/part.js:600 +#: templates/js/translated/company.js:761 templates/js/translated/part.js:521 +#: templates/js/translated/part.js:606 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:631 templates/js/translated/part.js:690 +#: templates/js/translated/company.js:631 templates/js/translated/part.js:696 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:668 templates/js/translated/part.js:732 +#: templates/js/translated/company.js:668 templates/js/translated/part.js:738 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:669 templates/js/translated/part.js:733 +#: templates/js/translated/company.js:669 templates/js/translated/part.js:739 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:688 templates/js/translated/part.js:750 +#: templates/js/translated/company.js:688 templates/js/translated/part.js:756 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:699 templates/js/translated/part.js:762 +#: templates/js/translated/company.js:699 templates/js/translated/part.js:768 msgid "Delete Parameter" msgstr "" @@ -7844,12 +7937,12 @@ msgid "No supplier parts found" msgstr "" #: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:420 +#: templates/js/translated/filters.js:429 msgid "true" msgstr "" #: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:421 +#: templates/js/translated/filters.js:430 msgid "false" msgstr "" @@ -7869,7 +7962,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:329 +#: templates/js/translated/filters.js:338 msgid "Create filter" msgstr "" @@ -7898,20 +7991,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1080 templates/modals.html:19 +#: templates/js/translated/forms.js:1082 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1471 +#: templates/js/translated/forms.js:1487 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1675 +#: templates/js/translated/forms.js:1691 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1895 +#: templates/js/translated/forms.js:1930 msgid "Clear input" msgstr "" @@ -7924,7 +8017,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1042 +#: templates/js/translated/stock.js:1050 msgid "Select Stock Items" msgstr "" @@ -7974,12 +8067,12 @@ msgid "Select Label Template" msgstr "" #: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 -#: templates/js/translated/modals.js:599 +#: templates/js/translated/modals.js:610 msgid "Cancel" msgstr "" #: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:666 templates/js/translated/modals.js:969 +#: templates/js/translated/modals.js:677 templates/js/translated/modals.js:982 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" @@ -7988,47 +8081,47 @@ msgstr "" msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:381 +#: templates/js/translated/modals.js:392 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:540 +#: templates/js/translated/modals.js:551 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:598 +#: templates/js/translated/modals.js:609 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:655 +#: templates/js/translated/modals.js:666 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:933 +#: templates/js/translated/modals.js:946 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1045 +#: templates/js/translated/modals.js:1058 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1046 +#: templates/js/translated/modals.js:1059 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1069 +#: templates/js/translated/modals.js:1082 msgid "Error requesting form data" msgstr "" @@ -8052,23 +8145,24 @@ msgstr "" msgid "Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:236 +#: templates/js/translated/model_renderers.js:249 +#: templates/js/translated/model_renderers.js:270 msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:253 +#: templates/js/translated/model_renderers.js:287 msgid "Shipment ID" msgstr "" -#: templates/js/translated/model_renderers.js:273 +#: templates/js/translated/model_renderers.js:307 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:310 +#: templates/js/translated/model_renderers.js:344 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:339 +#: templates/js/translated/model_renderers.js:373 msgid "Supplier Part ID" msgstr "" @@ -8116,7 +8210,7 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2123 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2131 msgid "Stock Status" msgstr "" @@ -8140,7 +8234,7 @@ msgstr "" msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:790 templates/js/translated/part.js:803 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:809 msgid "No purchase orders found" msgstr "" @@ -8165,7 +8259,7 @@ msgid "Total" msgstr "" #: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 -#: templates/js/translated/part.js:1834 templates/js/translated/part.js:2045 +#: templates/js/translated/part.js:1841 templates/js/translated/part.js:2052 msgid "Unit Price" msgstr "" @@ -8181,7 +8275,7 @@ msgstr "" msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1166 templates/js/translated/part.js:935 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:942 msgid "Receive line item" msgstr "" @@ -8250,7 +8344,7 @@ msgid "Delete Stock Allocation" msgstr "" #: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 -#: templates/js/translated/stock.js:1428 +#: templates/js/translated/stock.js:1436 msgid "Shipped to customer" msgstr "" @@ -8378,144 +8472,148 @@ msgstr "" msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:412 +#: templates/js/translated/part.js:351 +msgid "Create Part Variant" +msgstr "" + +#: templates/js/translated/part.js:418 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:414 +#: templates/js/translated/part.js:420 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:419 +#: templates/js/translated/part.js:425 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:421 +#: templates/js/translated/part.js:427 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:444 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:448 +#: templates/js/translated/part.js:454 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:451 +#: templates/js/translated/part.js:457 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:481 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:503 templates/js/translated/part.js:588 +#: templates/js/translated/part.js:509 templates/js/translated/part.js:594 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:507 templates/js/translated/part.js:592 +#: templates/js/translated/part.js:513 templates/js/translated/part.js:598 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:519 +#: templates/js/translated/part.js:525 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:523 +#: templates/js/translated/part.js:529 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:638 +#: templates/js/translated/part.js:644 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1005 +#: templates/js/translated/part.js:1012 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1029 +#: templates/js/translated/part.js:1036 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1096 templates/js/translated/part.js:1356 +#: templates/js/translated/part.js:1103 templates/js/translated/part.js:1363 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1266 +#: templates/js/translated/part.js:1273 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1289 +#: templates/js/translated/part.js:1296 #: templates/js/translated/table_filters.js:430 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:1380 templates/js/translated/part.js:1552 -#: templates/js/translated/stock.js:2282 +#: templates/js/translated/part.js:1387 templates/js/translated/part.js:1559 +#: templates/js/translated/stock.js:2440 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1396 +#: templates/js/translated/part.js:1403 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1571 templates/js/translated/stock.js:2301 +#: templates/js/translated/part.js:1578 templates/js/translated/stock.js:2459 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:1635 +#: templates/js/translated/part.js:1642 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1649 templates/js/translated/stock.js:2345 +#: templates/js/translated/part.js:1656 templates/js/translated/stock.js:2503 msgid "Path" msgstr "" -#: templates/js/translated/part.js:1693 +#: templates/js/translated/part.js:1700 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1744 templates/js/translated/stock.js:1234 +#: templates/js/translated/part.js:1751 templates/js/translated/stock.js:1242 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1745 templates/js/translated/stock.js:1235 +#: templates/js/translated/part.js:1752 templates/js/translated/stock.js:1243 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:1751 +#: templates/js/translated/part.js:1758 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:1773 +#: templates/js/translated/part.js:1780 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:1787 +#: templates/js/translated/part.js:1794 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:1812 +#: templates/js/translated/part.js:1819 #, python-brace-format msgid "No ${human_name} information found" msgstr "" -#: templates/js/translated/part.js:1867 +#: templates/js/translated/part.js:1874 #, python-brace-format msgid "Edit ${human_name}" msgstr "" -#: templates/js/translated/part.js:1868 +#: templates/js/translated/part.js:1875 #, python-brace-format msgid "Delete ${human_name}" msgstr "" -#: templates/js/translated/part.js:1969 +#: templates/js/translated/part.js:1976 msgid "Single Price" msgstr "" -#: templates/js/translated/part.js:1988 +#: templates/js/translated/part.js:1995 msgid "Single Price Difference" msgstr "" @@ -8589,340 +8687,344 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:74 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:181 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:93 templates/js/translated/stock.js:175 +#: templates/js/translated/stock.js:94 templates/js/translated/stock.js:183 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:101 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:110 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:146 +#: templates/js/translated/stock.js:154 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:186 +#: templates/js/translated/stock.js:194 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:225 +#: templates/js/translated/stock.js:233 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:231 +#: templates/js/translated/stock.js:239 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:382 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:387 +#: templates/js/translated/stock.js:395 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:420 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:416 templates/js/translated/stock.js:417 +#: templates/js/translated/stock.js:424 templates/js/translated/stock.js:425 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:433 +#: templates/js/translated/stock.js:441 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:453 +#: templates/js/translated/stock.js:461 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:462 +#: templates/js/translated/stock.js:470 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:515 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:526 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:519 +#: templates/js/translated/stock.js:527 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:628 +#: templates/js/translated/stock.js:636 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:629 +#: templates/js/translated/stock.js:637 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:714 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:715 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:709 +#: templates/js/translated/stock.js:717 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:710 +#: templates/js/translated/stock.js:718 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:796 +#: templates/js/translated/stock.js:804 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:797 +#: templates/js/translated/stock.js:805 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:892 +#: templates/js/translated/stock.js:900 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:893 +#: templates/js/translated/stock.js:901 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:899 +#: templates/js/translated/stock.js:907 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:900 +#: templates/js/translated/stock.js:908 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:904 +#: templates/js/translated/stock.js:912 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:905 +#: templates/js/translated/stock.js:913 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:909 +#: templates/js/translated/stock.js:917 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:910 users/models.py:206 +#: templates/js/translated/stock.js:918 users/models.py:208 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:914 templates/stock_table.html:58 +#: templates/js/translated/stock.js:922 templates/stock_table.html:58 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1051 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1201 +#: templates/js/translated/stock.js:1209 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1203 +#: templates/js/translated/stock.js:1211 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1208 +#: templates/js/translated/stock.js:1216 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1230 +#: templates/js/translated/stock.js:1238 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1256 +#: templates/js/translated/stock.js:1264 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1313 +#: templates/js/translated/stock.js:1321 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1428 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1424 +#: templates/js/translated/stock.js:1432 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1432 +#: templates/js/translated/stock.js:1440 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1438 +#: templates/js/translated/stock.js:1446 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1604 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1601 +#: templates/js/translated/stock.js:1609 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1604 +#: templates/js/translated/stock.js:1612 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1608 +#: templates/js/translated/stock.js:1616 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1610 +#: templates/js/translated/stock.js:1618 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1616 +#: templates/js/translated/stock.js:1624 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1618 +#: templates/js/translated/stock.js:1626 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1620 +#: templates/js/translated/stock.js:1628 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1633 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1632 +#: templates/js/translated/stock.js:1640 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1634 +#: templates/js/translated/stock.js:1642 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1636 +#: templates/js/translated/stock.js:1644 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1648 #: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1690 +#: templates/js/translated/stock.js:1698 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1763 +#: templates/js/translated/stock.js:1771 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1809 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1822 templates/js/translated/stock.js:1870 +#: templates/js/translated/stock.js:1830 templates/js/translated/stock.js:1878 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1910 +#: templates/js/translated/stock.js:1918 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1937 +#: templates/js/translated/stock.js:1945 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1939 +#: templates/js/translated/stock.js:1947 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:2138 +#: templates/js/translated/stock.js:2146 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2152 +#: templates/js/translated/stock.js:2160 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2153 +#: templates/js/translated/stock.js:2161 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2377 +#: templates/js/translated/stock.js:2340 +msgid "Allocated Quantity" +msgstr "" + +#: templates/js/translated/stock.js:2535 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2399 +#: templates/js/translated/stock.js:2557 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2424 +#: templates/js/translated/stock.js:2582 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2443 +#: templates/js/translated/stock.js:2601 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2462 +#: templates/js/translated/stock.js:2620 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2480 +#: templates/js/translated/stock.js:2638 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2503 +#: templates/js/translated/stock.js:2661 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2511 +#: templates/js/translated/stock.js:2669 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2552 +#: templates/js/translated/stock.js:2710 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2553 +#: templates/js/translated/stock.js:2711 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2604 +#: templates/js/translated/stock.js:2762 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2655 +#: templates/js/translated/stock.js:2813 msgid "Uninstall Stock Item" msgstr "" @@ -9194,11 +9296,11 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:113 +#: templates/navbar.html:114 msgid "Logout" msgstr "" -#: templates/navbar.html:115 +#: templates/navbar.html:116 msgid "Login" msgstr "" @@ -9246,31 +9348,43 @@ msgstr "" msgid "Server is deployed using docker" msgstr "" -#: templates/stats.html:40 -msgid "Server status" +#: templates/stats.html:39 +msgid "Plugin Support" msgstr "" #: templates/stats.html:43 -msgid "Healthy" +msgid "Plugin support enabled" msgstr "" #: templates/stats.html:45 -msgid "Issues detected" +msgid "Plugin support disabled" msgstr "" #: templates/stats.html:52 -msgid "Background Worker" +msgid "Server status" msgstr "" #: templates/stats.html:55 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:57 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:64 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:67 msgid "Background worker not running" msgstr "" -#: templates/stats.html:63 +#: templates/stats.html:75 msgid "Email Settings" msgstr "" -#: templates/stats.html:66 +#: templates/stats.html:78 msgid "Email settings not configured" msgstr "" @@ -9366,35 +9480,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:193 +#: users/models.py:195 msgid "Permission set" msgstr "" -#: users/models.py:201 +#: users/models.py:203 msgid "Group" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "View" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to view items" msgstr "" -#: users/models.py:206 +#: users/models.py:208 msgid "Permission to add items" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Change" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Permissions to edit items" msgstr "" -#: users/models.py:210 +#: users/models.py:212 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/it/LC_MESSAGES/django.po b/InvenTree/locale/it/LC_MESSAGES/django.po index 06cccdc4f0..6750a4152a 100644 --- a/InvenTree/locale/it/LC_MESSAGES/django.po +++ b/InvenTree/locale/it/LC_MESSAGES/django.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-10 03:54+0000\n" -"PO-Revision-Date: 2022-01-10 03:58\n" +"POT-Creation-Date: 2022-01-29 00:17+0000\n" +"PO-Revision-Date: 2022-01-29 01:11\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -18,15 +18,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 138\n" -#: InvenTree/api.py:64 +#: InvenTree/api.py:55 msgid "API endpoint not found" msgstr "Endpoint API non trovato" -#: InvenTree/api.py:110 +#: InvenTree/api.py:101 msgid "No action specified" msgstr "Nessuna azione specificata" -#: InvenTree/api.py:124 +#: InvenTree/api.py:116 msgid "No matching action found" msgstr "Nessuna azione corrispondente trovata" @@ -80,41 +80,41 @@ msgstr "Conferma indirizzo email" msgid "You must type the same email each time." msgstr "È necessario digitare la stessa e-mail ogni volta." -#: InvenTree/helpers.py:437 +#: InvenTree/helpers.py:439 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "Seriale Duplicato: {n}" -#: InvenTree/helpers.py:444 order/models.py:279 order/models.py:420 +#: InvenTree/helpers.py:446 order/models.py:282 order/models.py:425 #: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "Quantità inserita non valida" -#: InvenTree/helpers.py:447 +#: InvenTree/helpers.py:449 msgid "Empty serial number string" msgstr "Numero seriale vuoto" -#: InvenTree/helpers.py:469 InvenTree/helpers.py:472 InvenTree/helpers.py:475 -#: InvenTree/helpers.py:500 +#: InvenTree/helpers.py:471 InvenTree/helpers.py:474 InvenTree/helpers.py:477 +#: InvenTree/helpers.py:502 #, python-brace-format msgid "Invalid group: {g}" msgstr "Gruppo non valido: {g}" -#: InvenTree/helpers.py:510 +#: InvenTree/helpers.py:512 #, python-brace-format msgid "Invalid group {group}" msgstr "" -#: InvenTree/helpers.py:516 +#: InvenTree/helpers.py:518 #, python-brace-format msgid "Invalid/no group {group}" msgstr "" -#: InvenTree/helpers.py:522 +#: InvenTree/helpers.py:524 msgid "No serial numbers found" msgstr "Nessun numero di serie trovato" -#: InvenTree/helpers.py:526 +#: InvenTree/helpers.py:528 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "Il numero dei numeri seriali univoci ({s}) deve essere uguale alla quantità ({q})" @@ -127,7 +127,7 @@ msgstr "File mancante" msgid "Missing external link" msgstr "Link esterno mancante" -#: InvenTree/models.py:132 stock/models.py:1967 +#: InvenTree/models.py:132 stock/models.py:1995 #: templates/js/translated/attachment.js:119 msgid "Attachment" msgstr "Allegato" @@ -137,15 +137,15 @@ msgid "Select file to attach" msgstr "Seleziona file da allegare" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:124 part/models.py:828 +#: company/models.py:564 order/models.py:127 part/models.py:830 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:540 -#: templates/js/translated/company.js:829 templates/js/translated/part.js:1317 +#: templates/js/translated/company.js:829 templates/js/translated/part.js:1324 msgid "Link" msgstr "Link" -#: InvenTree/models.py:140 build/models.py:330 part/models.py:829 -#: stock/models.py:527 +#: InvenTree/models.py:140 build/models.py:332 part/models.py:831 +#: stock/models.py:529 msgid "Link to external URL" msgstr "Link a URL esterno" @@ -157,10 +157,11 @@ msgstr "Commento" msgid "File comment" msgstr "Commento del file" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 -#: common/models.py:1214 part/models.py:2258 part/models.py:2278 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1223 +#: common/models.py:1224 common/models.py:1452 common/models.py:1453 +#: part/models.py:2265 part/models.py:2285 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2534 +#: templates/js/translated/stock.js:2692 msgid "User" msgstr "Utente" @@ -197,42 +198,42 @@ msgstr "Errore nella rinominazione del file" msgid "Invalid choice" msgstr "Scelta non valida" -#: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 -#: label/models.py:112 part/models.py:772 part/models.py:2442 -#: plugin/models.py:40 report/models.py:181 +#: InvenTree/models.py:277 InvenTree/models.py:278 common/models.py:1438 +#: company/models.py:415 label/models.py:112 part/models.py:774 +#: part/models.py:2449 plugin/models.py:40 report/models.py:181 #: templates/InvenTree/settings/mixins/urls.html:13 -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:125 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:279 -#: templates/js/translated/company.js:641 templates/js/translated/part.js:561 -#: templates/js/translated/part.js:700 templates/js/translated/part.js:1624 -#: templates/js/translated/stock.js:2327 +#: templates/InvenTree/settings/settings.html:282 +#: templates/js/translated/company.js:641 templates/js/translated/part.js:567 +#: templates/js/translated/part.js:706 templates/js/translated/part.js:1631 +#: templates/js/translated/stock.js:2485 msgid "Name" msgstr "Nome" -#: InvenTree/models.py:284 build/models.py:207 +#: InvenTree/models.py:284 build/models.py:209 #: build/templates/build/detail.html:25 company/models.py:354 #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:122 part/models.py:795 part/templates/part/category.html:74 +#: order/models.py:125 part/models.py:797 part/templates/part/category.html:74 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 #: stock/templates/stock/location.html:93 #: templates/InvenTree/settings/plugin_settings.html:33 -#: templates/js/translated/bom.js:327 templates/js/translated/bom.js:540 +#: templates/js/translated/bom.js:339 templates/js/translated/bom.js:552 #: templates/js/translated/build.js:1682 templates/js/translated/company.js:345 #: templates/js/translated/company.js:551 #: templates/js/translated/company.js:840 templates/js/translated/order.js:836 #: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 -#: templates/js/translated/part.js:620 templates/js/translated/part.js:992 -#: templates/js/translated/part.js:1077 templates/js/translated/part.js:1247 -#: templates/js/translated/part.js:1643 templates/js/translated/part.js:1712 -#: templates/js/translated/stock.js:1569 templates/js/translated/stock.js:2339 -#: templates/js/translated/stock.js:2384 +#: templates/js/translated/part.js:626 templates/js/translated/part.js:999 +#: templates/js/translated/part.js:1084 templates/js/translated/part.js:1254 +#: templates/js/translated/part.js:1650 templates/js/translated/part.js:1719 +#: templates/js/translated/stock.js:1577 templates/js/translated/stock.js:2314 +#: templates/js/translated/stock.js:2497 templates/js/translated/stock.js:2542 msgid "Description" msgstr "Descrizione" @@ -244,7 +245,7 @@ msgstr "Descrizione (opzionale)" msgid "parent" msgstr "genitore" -#: InvenTree/serializers.py:65 part/models.py:2727 +#: InvenTree/serializers.py:65 part/models.py:2734 msgid "Must be a valid number" msgstr "Deve essere un numero valido" @@ -252,83 +253,83 @@ msgstr "Deve essere un numero valido" msgid "Filename" msgstr "Nome del file" -#: InvenTree/settings.py:663 +#: InvenTree/settings.py:661 msgid "German" msgstr "Tedesco" -#: InvenTree/settings.py:664 +#: InvenTree/settings.py:662 msgid "Greek" msgstr "Greco" -#: InvenTree/settings.py:665 +#: InvenTree/settings.py:663 msgid "English" msgstr "Inglese" -#: InvenTree/settings.py:666 +#: InvenTree/settings.py:664 msgid "Spanish" msgstr "Spagnolo" -#: InvenTree/settings.py:667 +#: InvenTree/settings.py:665 msgid "Spanish (Mexican)" msgstr "Spagnolo (Messicano)" -#: InvenTree/settings.py:668 +#: InvenTree/settings.py:666 msgid "French" msgstr "Francese" -#: InvenTree/settings.py:669 +#: InvenTree/settings.py:667 msgid "Hebrew" msgstr "Ebraico" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:668 msgid "Italian" msgstr "Italiano" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:669 msgid "Japanese" msgstr "Giapponese" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:670 msgid "Korean" msgstr "Coreano" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:671 msgid "Dutch" msgstr "Olandese" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:672 msgid "Norwegian" msgstr "Norvegese" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:673 msgid "Polish" msgstr "Polacco" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:674 msgid "Portugese" msgstr "Portoghese" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:675 msgid "Russian" msgstr "Russo" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:676 msgid "Swedish" msgstr "Svedese" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:677 msgid "Thai" msgstr "Thailandese" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:678 msgid "Turkish" msgstr "Turco" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:679 msgid "Vietnamese" msgstr "Vietnamita" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:680 msgid "Chinese" msgstr "Cinese" @@ -374,7 +375,7 @@ msgstr "Perso" msgid "Returned" msgstr "Reso" -#: InvenTree/status_codes.py:143 order/models.py:941 +#: InvenTree/status_codes.py:143 order/models.py:961 #: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "Spedito" @@ -455,7 +456,7 @@ msgstr "Diviso dall'elemento genitore" msgid "Split child item" msgstr "Dividi elemento figlio" -#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2064 +#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2072 msgid "Merged stock items" msgstr "" @@ -543,56 +544,56 @@ msgstr "Le password devono coincidere" msgid "System Information" msgstr "Informazioni sistema" -#: barcodes/api.py:54 barcodes/api.py:151 +#: barcodes/api.py:54 barcodes/api.py:152 msgid "Must provide barcode_data parameter" msgstr "È necessario fornire il parametro barcode_data" -#: barcodes/api.py:127 +#: barcodes/api.py:128 msgid "No match found for barcode data" msgstr "Nessuna corrispondenza trovata per i dati del codice a barre" -#: barcodes/api.py:129 +#: barcodes/api.py:130 msgid "Match found for barcode data" msgstr "Corrispondenza trovata per i dati del codice a barre" -#: barcodes/api.py:154 +#: barcodes/api.py:155 msgid "Must provide stockitem parameter" msgstr "È necessario fornire il parametro stockitem" -#: barcodes/api.py:161 +#: barcodes/api.py:162 msgid "No matching stock item found" msgstr "Nessun elemento corrispondente trovato" -#: barcodes/api.py:191 +#: barcodes/api.py:193 msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:195 +#: barcodes/api.py:197 msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:199 +#: barcodes/api.py:201 msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:205 barcodes/api.py:217 +#: barcodes/api.py:207 barcodes/api.py:219 msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:223 +#: barcodes/api.py:225 msgid "Barcode associated with Stock Item" msgstr "" -#: build/forms.py:36 build/models.py:1286 +#: build/forms.py:36 build/models.py:1293 #: build/templates/build/build_base.html:82 -#: build/templates/build/detail.html:35 common/models.py:1253 +#: build/templates/build/detail.html:35 common/models.py:1263 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/models.py:796 order/models.py:1207 order/serializers.py:810 +#: order/models.py:805 order/models.py:1229 order/serializers.py:816 #: order/templates/order/order_wizard/match_parts.html:30 -#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:145 -#: part/forms.py:161 part/forms.py:177 part/models.py:2629 +#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:144 +#: part/forms.py:160 part/forms.py:176 part/models.py:2636 #: part/templates/part/bom_upload/match_parts.html:31 -#: part/templates/part/detail.html:962 part/templates/part/detail.html:1048 +#: part/templates/part/detail.html:992 part/templates/part/detail.html:1078 #: part/templates/part/part_pricing.html:16 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 @@ -603,7 +604,7 @@ msgstr "" #: stock/templates/stock/item_base.html:181 #: stock/templates/stock/item_base.html:262 #: stock/templates/stock/item_base.html:270 -#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:555 +#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:567 #: templates/js/translated/build.js:295 templates/js/translated/build.js:495 #: templates/js/translated/build.js:689 templates/js/translated/build.js:699 #: templates/js/translated/build.js:1075 templates/js/translated/build.js:1422 @@ -611,11 +612,11 @@ msgstr "" #: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 #: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 #: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 -#: templates/js/translated/order.js:2150 templates/js/translated/part.js:900 -#: templates/js/translated/part.js:1855 templates/js/translated/part.js:1978 -#: templates/js/translated/part.js:2056 templates/js/translated/stock.js:383 -#: templates/js/translated/stock.js:580 templates/js/translated/stock.js:750 -#: templates/js/translated/stock.js:2519 templates/js/translated/stock.js:2621 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:906 +#: templates/js/translated/part.js:1862 templates/js/translated/part.js:1985 +#: templates/js/translated/part.js:2063 templates/js/translated/stock.js:391 +#: templates/js/translated/stock.js:588 templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2779 msgid "Quantity" msgstr "Quantità" @@ -623,9 +624,9 @@ msgstr "Quantità" msgid "Enter quantity for build output" msgstr "Inserisci la quantità per l'output di compilazione" -#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 -#: stock/serializers.py:314 templates/js/translated/stock.js:230 -#: templates/js/translated/stock.js:384 +#: build/forms.py:41 order/serializers.py:820 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:238 +#: templates/js/translated/stock.js:392 msgid "Serial Numbers" msgstr "Codice Seriale" @@ -649,18 +650,18 @@ msgstr "Conferma annullamento" msgid "Confirm build cancellation" msgstr "" -#: build/models.py:133 +#: build/models.py:135 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:137 build/templates/build/build_base.html:9 +#: build/models.py:139 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:457 +#: templates/js/translated/build.js:457 templates/js/translated/stock.js:2290 msgid "Build Order" msgstr "" -#: build/models.py:138 build/templates/build/build_base.html:13 +#: build/models.py:140 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:92 #: order/templates/order/so_sidebar.html:13 @@ -670,40 +671,40 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:198 +#: build/models.py:200 msgid "Build Order Reference" msgstr "" -#: build/models.py:199 order/models.py:210 order/models.py:536 -#: order/models.py:803 part/models.py:2638 +#: build/models.py:201 order/models.py:213 order/models.py:541 +#: order/models.py:812 part/models.py:2645 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:547 templates/js/translated/build.js:1179 +#: templates/js/translated/bom.js:559 templates/js/translated/build.js:1179 #: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "Riferimento" -#: build/models.py:210 +#: build/models.py:212 msgid "Brief description of the build" msgstr "" -#: build/models.py:219 build/templates/build/build_base.html:164 +#: build/models.py:221 build/templates/build/build_base.html:164 #: build/templates/build/detail.html:88 msgid "Parent Build" msgstr "" -#: build/models.py:220 +#: build/models.py:222 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:225 build/templates/build/build_base.html:77 +#: build/models.py:227 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:856 order/models.py:930 -#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 -#: part/models.py:2204 part/models.py:2220 part/models.py:2239 -#: part/models.py:2256 part/models.py:2358 part/models.py:2480 -#: part/models.py:2613 part/models.py:2920 part/serializers.py:658 +#: order/models.py:876 order/models.py:950 +#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:359 +#: part/models.py:2211 part/models.py:2227 part/models.py:2246 +#: part/models.py:2263 part/models.py:2365 part/models.py:2487 +#: part/models.py:2620 part/models.py:2927 part/serializers.py:658 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/set_category.html:13 @@ -713,205 +714,205 @@ msgstr "" #: templates/InvenTree/search.html:80 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 -#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:326 -#: templates/js/translated/bom.js:505 templates/js/translated/build.js:680 +#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:338 +#: templates/js/translated/bom.js:517 templates/js/translated/build.js:680 #: templates/js/translated/build.js:1048 templates/js/translated/build.js:1419 #: templates/js/translated/build.js:1687 templates/js/translated/company.js:492 #: templates/js/translated/company.js:749 templates/js/translated/order.js:84 #: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 #: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 -#: templates/js/translated/order.js:2128 templates/js/translated/part.js:977 -#: templates/js/translated/part.js:1058 templates/js/translated/part.js:1225 -#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:719 -#: templates/js/translated/stock.js:926 templates/js/translated/stock.js:1526 -#: templates/js/translated/stock.js:2609 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:984 +#: templates/js/translated/part.js:1065 templates/js/translated/part.js:1232 +#: templates/js/translated/stock.js:562 templates/js/translated/stock.js:727 +#: templates/js/translated/stock.js:934 templates/js/translated/stock.js:1534 +#: templates/js/translated/stock.js:2767 msgid "Part" msgstr "Articolo" -#: build/models.py:233 +#: build/models.py:235 msgid "Select part to build" msgstr "" -#: build/models.py:238 +#: build/models.py:240 msgid "Sales Order Reference" msgstr "Numero di riferimento ordine di vendita" -#: build/models.py:242 +#: build/models.py:244 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1407 +#: build/models.py:249 templates/js/translated/build.js:1407 #: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "Posizione Di Origine" -#: build/models.py:251 +#: build/models.py:253 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Seleziona la posizione da cui prelevare la giacenza (lasciare vuoto per prelevare da qualsiasi posizione di magazzino)" -#: build/models.py:256 +#: build/models.py:258 msgid "Destination Location" msgstr "Posizione Della Destinazione" -#: build/models.py:260 +#: build/models.py:262 msgid "Select location where the completed items will be stored" msgstr "Seleziona il luogo in cui gli articoli completati saranno immagazzinati" -#: build/models.py:264 +#: build/models.py:266 msgid "Build Quantity" msgstr "" -#: build/models.py:267 +#: build/models.py:269 msgid "Number of stock items to build" msgstr "" -#: build/models.py:271 +#: build/models.py:273 msgid "Completed items" msgstr "Articoli completati" -#: build/models.py:273 +#: build/models.py:275 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:277 part/templates/part/part_base.html:234 +#: build/models.py:279 part/templates/part/part_base.html:234 msgid "Build Status" msgstr "" -#: build/models.py:281 +#: build/models.py:283 msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:531 +#: build/models.py:287 stock/models.py:533 msgid "Batch Code" msgstr "" -#: build/models.py:289 +#: build/models.py:291 msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:126 part/models.py:967 +#: build/models.py:294 order/models.py:129 part/models.py:969 #: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "Data di creazione" -#: build/models.py:296 order/models.py:558 +#: build/models.py:298 order/models.py:563 msgid "Target completion date" msgstr "Data completamento obiettivo" -#: build/models.py:297 +#: build/models.py:299 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:252 +#: build/models.py:302 order/models.py:255 #: templates/js/translated/build.js:1758 msgid "Completion Date" msgstr "Data di completamento" -#: build/models.py:306 +#: build/models.py:308 msgid "completed by" msgstr "Completato da" -#: build/models.py:314 templates/js/translated/build.js:1729 +#: build/models.py:316 templates/js/translated/build.js:1729 msgid "Issued by" msgstr "Rilasciato da" -#: build/models.py:315 +#: build/models.py:317 msgid "User who issued this build order" msgstr "" -#: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:140 +#: build/models.py:325 build/templates/build/build_base.html:185 +#: build/templates/build/detail.html:116 order/models.py:143 #: order/templates/order/order_base.html:170 -#: order/templates/order/sales_order_base.html:182 part/models.py:971 +#: order/templates/order/sales_order_base.html:182 part/models.py:973 #: report/templates/report/inventree_build_order_base.html:159 #: templates/js/translated/build.js:1741 templates/js/translated/order.js:864 msgid "Responsible" msgstr "Responsabile" -#: build/models.py:324 +#: build/models.py:326 msgid "User responsible for this build order" msgstr "" -#: build/models.py:329 build/templates/build/detail.html:102 +#: build/models.py:331 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:525 +#: part/templates/part/part_base.html:354 stock/models.py:527 #: stock/templates/stock/item_base.html:373 msgid "External Link" msgstr "Collegamento esterno" -#: build/models.py:334 build/serializers.py:201 +#: build/models.py:336 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:144 order/models.py:805 order/models.py:1051 +#: order/models.py:147 order/models.py:814 order/models.py:1071 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/models.py:956 -#: part/templates/part/detail.html:120 part/templates/part/part_sidebar.html:50 +#: order/templates/order/so_sidebar.html:17 part/models.py:958 +#: part/templates/part/detail.html:137 part/templates/part/part_sidebar.html:54 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:597 -#: stock/models.py:1867 stock/models.py:1973 stock/serializers.py:332 -#: stock/serializers.py:639 stock/serializers.py:737 stock/serializers.py:869 -#: stock/templates/stock/stock_sidebar.html:21 -#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:711 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:599 +#: stock/models.py:1895 stock/models.py:2001 stock/serializers.py:332 +#: stock/serializers.py:640 stock/serializers.py:738 stock/serializers.py:870 +#: stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:723 #: templates/js/translated/company.js:845 templates/js/translated/order.js:1149 #: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 -#: templates/js/translated/stock.js:1309 templates/js/translated/stock.js:1795 +#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1803 msgid "Notes" msgstr "Note" -#: build/models.py:335 +#: build/models.py:337 msgid "Extra build notes" msgstr "" -#: build/models.py:710 +#: build/models.py:717 msgid "No build output specified" msgstr "" -#: build/models.py:713 +#: build/models.py:720 msgid "Build output is already completed" msgstr "" -#: build/models.py:716 +#: build/models.py:723 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1108 +#: build/models.py:1115 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1117 +#: build/models.py:1124 #, python-brace-format msgid "Allocated quantity ({q}) must not execed available stock quantity ({a})" msgstr "La quantità assegnata ({q}) non deve essere maggiore della quantità disponibile ({a})" -#: build/models.py:1127 +#: build/models.py:1134 msgid "Stock item is over-allocated" msgstr "L'articolo in giacenza è sovrallocato" -#: build/models.py:1133 order/models.py:1167 +#: build/models.py:1140 order/models.py:1189 msgid "Allocation quantity must be greater than zero" msgstr "La quantità di assegnazione deve essere maggiore di zero" -#: build/models.py:1139 +#: build/models.py:1146 msgid "Quantity must be 1 for serialized stock" msgstr "La quantità deve essere 1 per lo stock serializzato" -#: build/models.py:1196 +#: build/models.py:1203 msgid "Selected stock item not found in BOM" msgstr "Articolo in giacenza selezionato non trovato nel BOM" -#: build/models.py:1256 stock/templates/stock/item_base.html:345 +#: build/models.py:1263 stock/templates/stock/item_base.html:345 #: templates/InvenTree/search.html:137 templates/js/translated/build.js:1660 #: templates/navbar.html:35 msgid "Build" msgstr "" -#: build/models.py:1257 +#: build/models.py:1264 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1273 build/serializers.py:388 order/serializers.py:690 -#: order/serializers.py:708 stock/serializers.py:577 stock/serializers.py:695 +#: build/models.py:1280 build/serializers.py:388 order/serializers.py:696 +#: order/serializers.py:714 stock/serializers.py:578 stock/serializers.py:696 #: stock/templates/stock/item_base.html:9 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:367 @@ -920,24 +921,24 @@ msgstr "" #: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 #: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 #: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 -#: templates/js/translated/stock.js:555 templates/js/translated/stock.js:720 -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:563 templates/js/translated/stock.js:728 +#: templates/js/translated/stock.js:2628 msgid "Stock Item" msgstr "Articoli in magazzino" -#: build/models.py:1274 +#: build/models.py:1281 msgid "Source stock item" msgstr "Origine giacenza articolo" -#: build/models.py:1287 +#: build/models.py:1294 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1295 +#: build/models.py:1302 msgid "Install into" msgstr "Installa in" -#: build/models.py:1296 +#: build/models.py:1303 msgid "Destination stock item" msgstr "Destinazione articolo in giacenza" @@ -962,16 +963,16 @@ msgid "This build output is not fully allocated" msgstr "" #: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 -#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:730 -#: stock/serializers.py:971 stock/templates/stock/item_base.html:313 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:731 +#: stock/serializers.py:972 stock/templates/stock/item_base.html:313 #: templates/js/translated/barcode.js:384 #: templates/js/translated/barcode.js:557 templates/js/translated/build.js:480 #: templates/js/translated/build.js:1087 templates/js/translated/order.js:508 #: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 #: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 -#: templates/js/translated/part.js:179 templates/js/translated/stock.js:556 -#: templates/js/translated/stock.js:721 templates/js/translated/stock.js:928 -#: templates/js/translated/stock.js:1676 templates/js/translated/stock.js:2411 +#: templates/js/translated/part.js:179 templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:729 templates/js/translated/stock.js:936 +#: templates/js/translated/stock.js:1684 templates/js/translated/stock.js:2569 msgid "Location" msgstr "Posizione" @@ -980,12 +981,12 @@ msgid "Location for completed build outputs" msgstr "Posizione per gli output di build completati" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:552 +#: build/templates/build/detail.html:63 order/models.py:557 #: order/serializers.py:247 stock/templates/stock/item_base.html:187 #: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1716 #: templates/js/translated/order.js:591 templates/js/translated/order.js:840 -#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1651 -#: templates/js/translated/stock.js:2488 templates/js/translated/stock.js:2637 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1659 +#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2795 msgid "Status" msgstr "Stato" @@ -1021,8 +1022,8 @@ msgstr "" msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:313 build/serializers.py:362 part/models.py:2753 -#: part/models.py:2912 +#: build/serializers.py:313 build/serializers.py:362 part/models.py:2760 +#: part/models.py:2919 msgid "BOM Item" msgstr "Distinta base (Bom)" @@ -1038,16 +1039,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:394 stock/serializers.py:584 +#: build/serializers.py:394 stock/serializers.py:585 msgid "Item must be in stock" msgstr "L'articolo deve essere disponibile" -#: build/serializers.py:408 order/models.py:277 order/serializers.py:240 -#: stock/models.py:365 stock/models.py:1077 stock/serializers.py:305 +#: build/serializers.py:408 order/models.py:280 order/serializers.py:240 +#: stock/models.py:367 stock/models.py:1105 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "La quantità deve essere maggiore di zero" -#: build/serializers.py:450 order/serializers.py:741 +#: build/serializers.py:450 order/serializers.py:747 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantità disponibile ({q}) superata" @@ -1060,7 +1061,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:491 order/serializers.py:984 +#: build/serializers.py:491 order/serializers.py:990 msgid "Allocation items must be provided" msgstr "Deve essere indicata l'allocazione dell'articolo" @@ -1164,13 +1165,13 @@ msgid "Completed" msgstr "Completato" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:927 -#: order/models.py:1023 order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:947 +#: order/models.py:1043 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:307 -#: templates/js/translated/order.js:1218 +#: templates/js/translated/order.js:1218 templates/js/translated/stock.js:2304 msgid "Sales Order" msgstr "Ordini di Vendita" @@ -1224,7 +1225,7 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "Lo stock può essere prelevato da qualsiasi posizione disponibile." -#: build/templates/build/detail.html:50 order/models.py:878 stock/forms.py:136 +#: build/templates/build/detail.html:50 order/models.py:898 stock/forms.py:136 #: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "Destinazione" @@ -1239,7 +1240,7 @@ msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:331 -#: templates/js/translated/stock.js:1665 templates/js/translated/stock.js:2644 +#: templates/js/translated/stock.js:1673 templates/js/translated/stock.js:2802 #: templates/js/translated/table_filters.js:151 #: templates/js/translated/table_filters.js:238 msgid "Batch" @@ -1343,9 +1344,9 @@ msgstr "" #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 #: order/templates/order/sales_order_detail.html:107 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:196 -#: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 -#: stock/templates/stock/stock_sidebar.html:19 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:213 +#: part/templates/part/part_sidebar.html:52 stock/templates/stock/item.html:112 +#: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Allegati" @@ -1360,8 +1361,8 @@ msgstr "Genera Note" #: order/templates/order/purchase_order_detail.html:108 #: order/templates/order/sales_order_detail.html:127 #: order/templates/order/sales_order_detail.html:186 -#: part/templates/part/detail.html:124 stock/templates/stock/item.html:115 -#: stock/templates/stock/item.html:205 +#: part/templates/part/detail.html:141 stock/templates/stock/item.html:132 +#: stock/templates/stock/item.html:235 msgid "Edit Notes" msgstr "Modifica Note" @@ -1373,7 +1374,7 @@ msgstr "Assegnazione Completa" msgid "All untracked stock items have been allocated" msgstr "Tutte le giacenze non tracciate sono state assegnate" -#: build/templates/build/index.html:18 part/templates/part/detail.html:303 +#: build/templates/build/index.html:18 part/templates/part/detail.html:320 msgid "New Build Order" msgstr "" @@ -1453,23 +1454,23 @@ msgstr "" msgid "Delete Build Order" msgstr "Elimina Ordine Build" -#: common/files.py:67 +#: common/files.py:65 msgid "Unsupported file format: {ext.upper()}" msgstr "Formato file non supportato: {ext.upper()}" -#: common/files.py:69 +#: common/files.py:67 msgid "Error reading file (invalid encoding)" msgstr "Errore nella lettura del file (codifica non valida)" -#: common/files.py:74 +#: common/files.py:72 msgid "Error reading file (invalid format)" msgstr "Errore nella lettura del file (formato non valido)" -#: common/files.py:76 +#: common/files.py:74 msgid "Error reading file (incorrect dimension)" msgstr "Errore nella lettura del file (dimensione errata)" -#: common/files.py:78 +#: common/files.py:76 msgid "Error reading file (data could be corrupted)" msgstr "Errore di lettura del file (i dati potrebbero essere danneggiati)" @@ -1490,740 +1491,828 @@ msgstr "{name.title()} File" msgid "Select {name} file to upload" msgstr "Seleziona il file {name} da caricare" -#: common/models.py:344 common/models.py:998 common/models.py:1206 -msgid "Settings key (must be unique - case insensitive" -msgstr "Tasto impostazioni (deve essere univoco - maiuscole e minuscole" +#: common/models.py:352 +msgid "Settings key (must be unique - case insensitive)" +msgstr "" -#: common/models.py:346 +#: common/models.py:354 msgid "Settings value" msgstr "Valore impostazioni" -#: common/models.py:380 +#: common/models.py:388 msgid "Chosen value is not a valid option" msgstr "Il valore specificato non è un opzione valida" -#: common/models.py:400 +#: common/models.py:408 msgid "Value must be a boolean value" msgstr "Il valore deve essere un valore booleano" -#: common/models.py:411 +#: common/models.py:419 msgid "Value must be an integer value" msgstr "Il valore deve essere un intero" -#: common/models.py:434 +#: common/models.py:442 msgid "Key string must be unique" msgstr "La stringa chiave deve essere univoca" -#: common/models.py:553 +#: common/models.py:561 msgid "No group" msgstr "Nessun gruppo" -#: common/models.py:595 +#: common/models.py:603 msgid "Restart required" msgstr "Riavvio richiesto" -#: common/models.py:596 +#: common/models.py:604 msgid "A setting has been changed which requires a server restart" msgstr "È stata modificata un'impostazione che richiede un riavvio del server" -#: common/models.py:603 +#: common/models.py:611 msgid "InvenTree Instance Name" msgstr "Nome Istanza InvenTree" -#: common/models.py:605 +#: common/models.py:613 msgid "String descriptor for the server instance" msgstr "Descrittore stringa per l'istanza del server" -#: common/models.py:609 +#: common/models.py:617 msgid "Use instance name" msgstr "Utilizza nome istanza" -#: common/models.py:610 +#: common/models.py:618 msgid "Use the instance name in the title-bar" msgstr "Usa il nome dell'istanza nella barra del titolo" -#: common/models.py:616 company/models.py:100 company/models.py:101 +#: common/models.py:624 company/models.py:100 company/models.py:101 msgid "Company name" msgstr "Nome azienda" -#: common/models.py:617 +#: common/models.py:625 msgid "Internal company name" msgstr "Nome interno dell'azienda" -#: common/models.py:622 +#: common/models.py:630 msgid "Base URL" msgstr "URL Base" -#: common/models.py:623 +#: common/models.py:631 msgid "Base URL for server instance" msgstr "URL di base per l'istanza del server" -#: common/models.py:629 +#: common/models.py:637 msgid "Default Currency" msgstr "Valuta predefinita" -#: common/models.py:630 +#: common/models.py:638 msgid "Default currency" msgstr "Valuta predefinita" -#: common/models.py:636 +#: common/models.py:644 msgid "Download from URL" msgstr "Scarica dall'URL" -#: common/models.py:637 +#: common/models.py:645 msgid "Allow download of remote images and files from external URL" msgstr "Consenti il download di immagini e file remoti da URL esterno" -#: common/models.py:643 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:651 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Supporto Codice A Barre" -#: common/models.py:644 +#: common/models.py:652 msgid "Enable barcode scanner support" msgstr "Abilita supporto scanner codici a barre" -#: common/models.py:650 +#: common/models.py:658 msgid "IPN Regex" msgstr "IPN Regex" -#: common/models.py:651 +#: common/models.py:659 msgid "Regular expression pattern for matching Part IPN" msgstr "Schema di espressione regolare per l'articolo corrispondente IPN" -#: common/models.py:655 +#: common/models.py:663 msgid "Allow Duplicate IPN" msgstr "Consenti duplicati IPN" -#: common/models.py:656 +#: common/models.py:664 msgid "Allow multiple parts to share the same IPN" msgstr "Permetti a più articoli di condividere lo stesso IPN" -#: common/models.py:662 +#: common/models.py:670 msgid "Allow Editing IPN" msgstr "Permetti modifiche al part number interno (IPN)" -#: common/models.py:663 +#: common/models.py:671 msgid "Allow changing the IPN value while editing a part" msgstr "Consenti di modificare il valore del part number durante la modifica di un articolo" -#: common/models.py:669 +#: common/models.py:677 msgid "Copy Part BOM Data" msgstr "Copia I Dati Della distinta base dell'articolo" -#: common/models.py:670 +#: common/models.py:678 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:676 +#: common/models.py:684 msgid "Copy Part Parameter Data" msgstr "Copia I Dati Parametro dell'articolo" -#: common/models.py:677 +#: common/models.py:685 msgid "Copy parameter data by default when duplicating a part" msgstr "Copia i dati dei parametri di default quando si duplica un articolo" -#: common/models.py:683 +#: common/models.py:691 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:684 +#: common/models.py:692 msgid "Copy test data by default when duplicating a part" msgstr "Copia i dati di prova di default quando si duplica un articolo" -#: common/models.py:690 +#: common/models.py:698 msgid "Copy Category Parameter Templates" msgstr "Copia Template Parametri Categoria" -#: common/models.py:691 +#: common/models.py:699 msgid "Copy category parameter templates when creating a part" msgstr "Copia i modelli dei parametri categoria quando si crea un articolo" -#: common/models.py:697 part/models.py:2482 report/models.py:187 +#: common/models.py:705 part/models.py:2489 report/models.py:187 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:422 msgid "Template" msgstr "Template" -#: common/models.py:698 +#: common/models.py:706 msgid "Parts are templates by default" msgstr "Gli articoli sono modelli per impostazione predefinita" -#: common/models.py:704 part/models.py:919 templates/js/translated/bom.js:1068 +#: common/models.py:712 part/models.py:921 templates/js/translated/bom.js:1082 #: templates/js/translated/table_filters.js:168 #: templates/js/translated/table_filters.js:434 msgid "Assembly" msgstr "Assemblaggio" -#: common/models.py:705 +#: common/models.py:713 msgid "Parts can be assembled from other components by default" msgstr "Gli articoli possono essere assemblate da altri componenti per impostazione predefinita" -#: common/models.py:711 part/models.py:925 +#: common/models.py:719 part/models.py:927 #: templates/js/translated/table_filters.js:438 msgid "Component" msgstr "Componente" -#: common/models.py:712 +#: common/models.py:720 msgid "Parts can be used as sub-components by default" msgstr "Gli articoli possono essere assemblati da altri componenti per impostazione predefinita" -#: common/models.py:718 part/models.py:936 +#: common/models.py:726 part/models.py:938 msgid "Purchaseable" msgstr "Acquistabile" -#: common/models.py:719 +#: common/models.py:727 msgid "Parts are purchaseable by default" msgstr "Gli articoli sono acquistabili per impostazione predefinita" -#: common/models.py:725 part/models.py:941 +#: common/models.py:733 part/models.py:943 #: templates/js/translated/table_filters.js:446 msgid "Salable" msgstr "Vendibile" -#: common/models.py:726 +#: common/models.py:734 msgid "Parts are salable by default" msgstr "Gli articoli sono acquistabili per impostazione predefinita" -#: common/models.py:732 part/models.py:931 +#: common/models.py:740 part/models.py:933 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 #: templates/js/translated/table_filters.js:450 msgid "Trackable" msgstr "Tracciabile" -#: common/models.py:733 +#: common/models.py:741 msgid "Parts are trackable by default" msgstr "Gli articoli sono tracciabili per impostazione predefinita" -#: common/models.py:739 part/models.py:951 +#: common/models.py:747 part/models.py:953 #: part/templates/part/part_base.html:147 #: templates/js/translated/table_filters.js:42 msgid "Virtual" msgstr "Virtuale" -#: common/models.py:740 +#: common/models.py:748 msgid "Parts are virtual by default" msgstr "Gli articoli sono virtuali per impostazione predefinita" -#: common/models.py:746 +#: common/models.py:754 msgid "Show Import in Views" msgstr "Mostra l'importazione nelle viste" -#: common/models.py:747 +#: common/models.py:755 msgid "Display the import wizard in some part views" msgstr "Mostra la procedura guidata di importazione in alcune viste articoli" -#: common/models.py:753 +#: common/models.py:761 msgid "Show Price in Forms" msgstr "Mostra il prezzo nei moduli" -#: common/models.py:754 +#: common/models.py:762 msgid "Display part price in some forms" msgstr "Mostra il prezzo dell'articolo in alcuni moduli" -#: common/models.py:765 +#: common/models.py:773 msgid "Show Price in BOM" msgstr "Mostra il prezzo nella BOM" -#: common/models.py:766 +#: common/models.py:774 msgid "Include pricing information in BOM tables" msgstr "Includi le informazioni sui prezzi nelle tabelle BOM" -#: common/models.py:772 +#: common/models.py:780 msgid "Show related parts" msgstr "Mostra articoli correlati" -#: common/models.py:773 +#: common/models.py:781 msgid "Display related parts for a part" msgstr "Visualizza parti correlate per ogni articolo" -#: common/models.py:779 +#: common/models.py:787 msgid "Create initial stock" msgstr "Crea giacenza iniziale" -#: common/models.py:780 +#: common/models.py:788 msgid "Create initial stock on part creation" msgstr "Crea giacenza iniziale sulla creazione articolo" -#: common/models.py:786 +#: common/models.py:794 msgid "Internal Prices" msgstr "Prezzi interni" -#: common/models.py:787 +#: common/models.py:795 msgid "Enable internal prices for parts" msgstr "Abilita prezzi interni per gli articoli" -#: common/models.py:793 +#: common/models.py:801 msgid "Internal Price as BOM-Price" msgstr "Prezzo interno come BOM-Price" -#: common/models.py:794 +#: common/models.py:802 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "Utilizzare il prezzo interno (se impostato) nel calcolo del prezzo BOM" -#: common/models.py:800 +#: common/models.py:808 msgid "Part Name Display Format" msgstr "Formato di visualizzazione del nome articolo" -#: common/models.py:801 +#: common/models.py:809 msgid "Format to display the part name" msgstr "Formato per visualizzare il nome dell'articolo" -#: common/models.py:808 +#: common/models.py:816 msgid "Enable Reports" msgstr "Abilita Report di Stampa" -#: common/models.py:809 +#: common/models.py:817 msgid "Enable generation of reports" msgstr "Abilita generazione di report di stampa" -#: common/models.py:815 templates/stats.html:25 +#: common/models.py:823 templates/stats.html:25 msgid "Debug Mode" msgstr "Modalità Debug" -#: common/models.py:816 +#: common/models.py:824 msgid "Generate reports in debug mode (HTML output)" msgstr "Genera report in modalità debug (output HTML)" -#: common/models.py:822 +#: common/models.py:830 msgid "Page Size" msgstr "Dimensioni pagina" -#: common/models.py:823 +#: common/models.py:831 msgid "Default page size for PDF reports" msgstr "Dimensione predefinita della pagina per i report PDF" -#: common/models.py:833 +#: common/models.py:841 msgid "Test Reports" msgstr "Stampa di prova" -#: common/models.py:834 +#: common/models.py:842 msgid "Enable generation of test reports" msgstr "Abilita generazione di stampe di prova" -#: common/models.py:840 +#: common/models.py:848 msgid "Stock Expiry" msgstr "Scadenza giacenza" -#: common/models.py:841 +#: common/models.py:849 msgid "Enable stock expiry functionality" msgstr "Abilita funzionalità di scadenza della giacenza" -#: common/models.py:847 +#: common/models.py:855 msgid "Sell Expired Stock" msgstr "Vendi giacenza scaduta" -#: common/models.py:848 +#: common/models.py:856 msgid "Allow sale of expired stock" msgstr "Consenti la vendita di stock scaduti" -#: common/models.py:854 +#: common/models.py:862 msgid "Stock Stale Time" msgstr "" -#: common/models.py:855 +#: common/models.py:863 msgid "Number of days stock items are considered stale before expiring" msgstr "Numero di giorni in cui gli articoli in magazzino sono considerati obsoleti prima della scadenza" -#: common/models.py:857 +#: common/models.py:865 msgid "days" msgstr "giorni" -#: common/models.py:862 +#: common/models.py:870 msgid "Build Expired Stock" msgstr "" -#: common/models.py:863 +#: common/models.py:871 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:869 +#: common/models.py:877 msgid "Stock Ownership Control" msgstr "Controllo della proprietà della giacenza" -#: common/models.py:870 +#: common/models.py:878 msgid "Enable ownership control over stock locations and items" msgstr "Abilita il controllo della proprietà sulle posizioni e gli oggetti in giacenza" -#: common/models.py:876 -msgid "Group by Part" -msgstr "Raggruppa per articolo" - -#: common/models.py:877 -msgid "Group stock items by part reference in table views" -msgstr "Raggruppa le voci di giacenza per riferimento articolo nelle viste della tabella" - -#: common/models.py:883 +#: common/models.py:884 msgid "Build Order Reference Prefix" msgstr "" -#: common/models.py:884 +#: common/models.py:885 msgid "Prefix value for build order reference" msgstr "" -#: common/models.py:889 +#: common/models.py:890 msgid "Build Order Reference Regex" msgstr "" -#: common/models.py:890 +#: common/models.py:891 msgid "Regular expression pattern for matching build order reference" msgstr "" -#: common/models.py:894 +#: common/models.py:895 msgid "Sales Order Reference Prefix" msgstr "" -#: common/models.py:895 +#: common/models.py:896 msgid "Prefix value for sales order reference" msgstr "" -#: common/models.py:900 +#: common/models.py:901 msgid "Purchase Order Reference Prefix" msgstr "Referenza ordine d'acquisto" -#: common/models.py:901 +#: common/models.py:902 msgid "Prefix value for purchase order reference" msgstr "" -#: common/models.py:907 +#: common/models.py:908 msgid "Enable password forgot" msgstr "Abilita password dimenticata" -#: common/models.py:908 +#: common/models.py:909 msgid "Enable password forgot function on the login pages" msgstr "Abilita la funzione password dimenticata nelle pagine di accesso" -#: common/models.py:913 +#: common/models.py:914 msgid "Enable registration" msgstr "Abilita registrazione" -#: common/models.py:914 +#: common/models.py:915 msgid "Enable self-registration for users on the login pages" msgstr "Abilita auto-registrazione per gli utenti nelle pagine di accesso" -#: common/models.py:919 +#: common/models.py:920 msgid "Enable SSO" msgstr "SSO abilitato" -#: common/models.py:920 +#: common/models.py:921 msgid "Enable SSO on the login pages" msgstr "Abilita SSO nelle pagine di accesso" -#: common/models.py:925 +#: common/models.py:926 msgid "Email required" msgstr "Email richiesta" -#: common/models.py:926 +#: common/models.py:927 msgid "Require user to supply mail on signup" msgstr "Richiedi all'utente di fornire una email al momento dell'iscrizione" -#: common/models.py:931 +#: common/models.py:932 msgid "Auto-fill SSO users" msgstr "Riempimento automatico degli utenti SSO" -#: common/models.py:932 +#: common/models.py:933 msgid "Automatically fill out user-details from SSO account-data" msgstr "Compila automaticamente i dettagli dell'utente dai dati dell'account SSO" -#: common/models.py:937 +#: common/models.py:938 msgid "Mail twice" msgstr "" -#: common/models.py:938 +#: common/models.py:939 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:943 +#: common/models.py:944 msgid "Password twice" msgstr "" -#: common/models.py:944 +#: common/models.py:945 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:949 +#: common/models.py:950 msgid "Group on signup" msgstr "" -#: common/models.py:950 +#: common/models.py:951 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:955 +#: common/models.py:956 msgid "Enforce MFA" msgstr "" -#: common/models.py:956 +#: common/models.py:957 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:961 +#: common/models.py:964 msgid "Enable URL integration" msgstr "" -#: common/models.py:962 +#: common/models.py:965 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:968 +#: common/models.py:971 msgid "Enable navigation integration" msgstr "" -#: common/models.py:969 +#: common/models.py:972 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:975 +#: common/models.py:978 msgid "Enable app integration" msgstr "" -#: common/models.py:976 +#: common/models.py:979 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:982 +#: common/models.py:985 msgid "Enable schedule integration" msgstr "" -#: common/models.py:983 +#: common/models.py:986 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1029 +#: common/models.py:992 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:993 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:1008 common/models.py:1216 +msgid "Settings key (must be unique - case insensitive" +msgstr "Tasto impostazioni (deve essere univoco - maiuscole e minuscole" + +#: common/models.py:1039 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1030 +#: common/models.py:1040 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1035 +#: common/models.py:1045 msgid "Show subscribed categories" msgstr "Mostra le categorie sottoscritte" -#: common/models.py:1036 +#: common/models.py:1046 msgid "Show subscribed part categories on the homepage" msgstr "Mostra le categorie dei componenti sottoscritti nella homepage" -#: common/models.py:1041 +#: common/models.py:1051 msgid "Show latest parts" msgstr "Mostra ultimi articoli" -#: common/models.py:1042 +#: common/models.py:1052 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1047 +#: common/models.py:1057 msgid "Recent Part Count" msgstr "" -#: common/models.py:1048 +#: common/models.py:1058 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1054 +#: common/models.py:1064 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1055 +#: common/models.py:1065 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1060 +#: common/models.py:1070 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1061 +#: common/models.py:1071 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1066 +#: common/models.py:1076 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1067 +#: common/models.py:1077 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1072 +#: common/models.py:1082 msgid "Show low stock" msgstr "" -#: common/models.py:1073 +#: common/models.py:1083 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1078 +#: common/models.py:1088 msgid "Show depleted stock" msgstr "" -#: common/models.py:1079 +#: common/models.py:1089 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1084 +#: common/models.py:1094 msgid "Show needed stock" msgstr "" -#: common/models.py:1085 +#: common/models.py:1095 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1090 +#: common/models.py:1100 msgid "Show expired stock" msgstr "" -#: common/models.py:1091 +#: common/models.py:1101 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1096 +#: common/models.py:1106 msgid "Show stale stock" msgstr "" -#: common/models.py:1097 +#: common/models.py:1107 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1102 +#: common/models.py:1112 msgid "Show pending builds" msgstr "" -#: common/models.py:1103 +#: common/models.py:1113 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1108 +#: common/models.py:1118 msgid "Show overdue builds" msgstr "" -#: common/models.py:1109 +#: common/models.py:1119 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1114 +#: common/models.py:1124 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1115 +#: common/models.py:1125 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1120 +#: common/models.py:1130 msgid "Show overdue POs" msgstr "" -#: common/models.py:1121 +#: common/models.py:1131 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1126 +#: common/models.py:1136 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1127 +#: common/models.py:1137 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1132 +#: common/models.py:1142 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1133 +#: common/models.py:1143 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1139 +#: common/models.py:1149 msgid "Inline label display" msgstr "Visualizzazione dell'etichetta in linea" -#: common/models.py:1140 +#: common/models.py:1150 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "Visualizza le etichette PDF nel browser, invece di scaricare come file" -#: common/models.py:1146 +#: common/models.py:1156 msgid "Inline report display" msgstr "Visualizzazione dell'etichetta in linea" -#: common/models.py:1147 +#: common/models.py:1157 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "Visualizza le etichette PDF nel browser, invece di scaricare come file" -#: common/models.py:1153 +#: common/models.py:1163 msgid "Search Preview Results" msgstr "Risultati Dell'Anteprima Di Ricerca" -#: common/models.py:1154 +#: common/models.py:1164 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1160 +#: common/models.py:1170 msgid "Search Show Stock" msgstr "" -#: common/models.py:1161 +#: common/models.py:1171 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1167 +#: common/models.py:1177 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1168 +#: common/models.py:1178 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1174 +#: common/models.py:1184 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1175 +#: common/models.py:1185 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1181 +#: common/models.py:1191 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1182 +#: common/models.py:1192 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1188 +#: common/models.py:1198 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1189 +#: common/models.py:1199 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1254 company/forms.py:43 +#: common/models.py:1264 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1261 company/serializers.py:264 +#: common/models.py:1271 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 -#: templates/js/translated/part.js:909 templates/js/translated/part.js:1860 +#: templates/js/translated/part.js:915 templates/js/translated/part.js:1867 msgid "Price" msgstr "Prezzo" -#: common/models.py:1262 +#: common/models.py:1272 msgid "Unit price at specified quantity" msgstr "" +#: common/models.py:1429 common/models.py:1568 +msgid "Endpoint" +msgstr "" + +#: common/models.py:1430 +msgid "Endpoint at which this webhook is received" +msgstr "" + +#: common/models.py:1439 +msgid "Name for this webhook" +msgstr "" + +#: common/models.py:1444 part/models.py:948 plugin/models.py:46 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:96 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:417 +msgid "Active" +msgstr "Attivo" + +#: common/models.py:1445 +msgid "Is this webhook active" +msgstr "" + +#: common/models.py:1459 +msgid "Token" +msgstr "" + +#: common/models.py:1460 +msgid "Token for access" +msgstr "" + +#: common/models.py:1467 +msgid "Secret" +msgstr "" + +#: common/models.py:1468 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:1535 +msgid "Message ID" +msgstr "" + +#: common/models.py:1536 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:1544 +msgid "Host" +msgstr "" + +#: common/models.py:1545 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:1552 +msgid "Header" +msgstr "" + +#: common/models.py:1553 +msgid "Header of this message" +msgstr "" + +#: common/models.py:1559 +msgid "Body" +msgstr "" + +#: common/models.py:1560 +msgid "Body of this message" +msgstr "" + +#: common/models.py:1569 +msgid "Endpoint on which this message was received" +msgstr "" + +#: common/models.py:1574 +msgid "Worked on" +msgstr "" + +#: common/models.py:1575 +msgid "Was the work on this message finished?" +msgstr "" + #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 #: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 -#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 -#: part/views.py:764 +#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:213 +#: part/views.py:773 msgid "Upload File" msgstr "Carica file" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 #: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 -#: part/views.py:765 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:214 +#: part/views.py:774 msgid "Match Fields" msgstr "Abbina Campi" @@ -2315,7 +2404,7 @@ msgstr "Punto di contatto" msgid "Link to external company information" msgstr "Collegamento alle informazioni aziendali esterne" -#: company/models.py:139 part/models.py:838 +#: company/models.py:139 part/models.py:840 msgid "Image" msgstr "Immagine" @@ -2352,8 +2441,8 @@ msgstr "Valuta" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:469 -#: stock/templates/stock/item_base.html:142 +#: company/models.py:320 company/models.py:535 stock/models.py:471 +#: stock/templates/stock/item_base.html:142 templates/js/translated/bom.js:328 msgid "Base Part" msgstr "Articolo di base" @@ -2380,7 +2469,7 @@ msgstr "Seleziona Produttore" #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:533 #: templates/js/translated/company.js:818 templates/js/translated/order.js:1038 -#: templates/js/translated/part.js:245 templates/js/translated/part.js:889 +#: templates/js/translated/part.js:245 templates/js/translated/part.js:895 msgid "MPN" msgstr "Codice articolo produttore (MPN)" @@ -2409,8 +2498,8 @@ msgstr "Nome parametro" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1960 templates/js/translated/company.js:647 -#: templates/js/translated/part.js:709 templates/js/translated/stock.js:1296 +#: stock/models.py:1988 templates/js/translated/company.js:647 +#: templates/js/translated/part.js:715 templates/js/translated/stock.js:1304 msgid "Value" msgstr "Valore" @@ -2418,10 +2507,10 @@ msgstr "Valore" msgid "Parameter value" msgstr "Valore del parametro" -#: company/models.py:429 part/models.py:913 part/models.py:2450 +#: company/models.py:429 part/models.py:915 part/models.py:2457 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:284 -#: templates/js/translated/company.js:653 templates/js/translated/part.js:715 +#: templates/InvenTree/settings/settings.html:287 +#: templates/js/translated/company.js:653 templates/js/translated/part.js:721 msgid "Units" msgstr "Unità" @@ -2434,13 +2523,13 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "L'articolo del costruttore collegato deve riferirsi alla stesso articolo" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:224 +#: company/templates/company/supplier_part.html:87 order/models.py:227 #: order/templates/order/order_base.html:112 -#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 -#: part/bom.py:247 stock/templates/stock/item_base.html:397 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:237 +#: part/bom.py:265 stock/templates/stock/item_base.html:397 #: templates/js/translated/company.js:337 #: templates/js/translated/company.js:774 templates/js/translated/order.js:823 -#: templates/js/translated/part.js:215 templates/js/translated/part.js:857 +#: templates/js/translated/part.js:215 templates/js/translated/part.js:863 #: templates/js/translated/table_filters.js:393 msgid "Supplier" msgstr "Fornitore" @@ -2450,8 +2539,8 @@ msgid "Select supplier" msgstr "Seleziona fornitore" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 -#: templates/js/translated/part.js:226 templates/js/translated/part.js:875 +#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1025 +#: templates/js/translated/part.js:226 templates/js/translated/part.js:881 msgid "SKU" msgstr "SKU" @@ -2472,22 +2561,22 @@ msgid "Supplier part description" msgstr "Descrizione articolo fornitore" #: company/models.py:576 company/templates/company/supplier_part.html:119 -#: part/models.py:2641 report/templates/report/inventree_po_report.html:93 +#: part/models.py:2648 report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" msgstr "Nota" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "base cost" msgstr "costo base" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "Minimum charge (e.g. stocking fee)" msgstr "Onere minimo (ad esempio tassa di stoccaggio)" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:493 stock/templates/stock/item_base.html:338 -#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1791 +#: stock/models.py:495 stock/templates/stock/item_base.html:338 +#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1799 msgid "Packaging" msgstr "Confezionamento" @@ -2495,7 +2584,7 @@ msgstr "Confezionamento" msgid "Part packaging" msgstr "Imballaggio del pezzo" -#: company/models.py:584 part/models.py:1781 +#: company/models.py:584 part/models.py:1783 msgid "multiple" msgstr "multiplo" @@ -2554,12 +2643,12 @@ msgstr "Carica nuova immagine" msgid "Download image from URL" msgstr "Scarica immagine dall'URL" -#: company/templates/company/company_base.html:83 order/models.py:547 -#: order/templates/order/sales_order_base.html:115 stock/models.py:512 -#: stock/models.py:513 stock/serializers.py:625 +#: company/templates/company/company_base.html:83 order/models.py:552 +#: order/templates/order/sales_order_base.html:115 stock/models.py:514 +#: stock/models.py:515 stock/serializers.py:626 #: stock/templates/stock/item_base.html:290 #: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 -#: templates/js/translated/stock.js:2452 +#: templates/js/translated/stock.js:2610 #: templates/js/translated/table_filters.js:397 msgid "Customer" msgstr "Cliente" @@ -2590,7 +2679,7 @@ msgstr "Crea nuovo fornitore" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:118 -#: part/templates/part/detail.html:336 +#: part/templates/part/detail.html:353 msgid "New Supplier Part" msgstr "Nuovo fornitore articolo" @@ -2598,8 +2687,8 @@ msgstr "Nuovo fornitore articolo" #: company/templates/company/detail.html:79 #: company/templates/company/manufacturer_part.html:127 #: company/templates/company/manufacturer_part.html:156 -#: part/templates/part/category.html:171 part/templates/part/detail.html:345 -#: part/templates/part/detail.html:374 +#: part/templates/part/category.html:171 part/templates/part/detail.html:362 +#: part/templates/part/detail.html:391 msgid "Options" msgstr "Opzioni" @@ -2627,7 +2716,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:67 part/templates/part/detail.html:364 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:381 msgid "New Manufacturer Part" msgstr "" @@ -2641,7 +2730,7 @@ msgstr "Giacenza Fornitore" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:68 part/templates/part/part_sidebar.html:33 +#: part/templates/part/detail.html:85 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197 #: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 @@ -2663,7 +2752,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:91 part/templates/part/part_sidebar.html:37 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:41 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217 #: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 @@ -2691,13 +2780,13 @@ msgstr "" #: company/templates/company/detail.html:384 #: company/templates/company/manufacturer_part.html:215 -#: part/templates/part/detail.html:418 +#: part/templates/part/detail.html:435 msgid "Delete Supplier Parts?" msgstr "Elimina articoli fornitore?" #: company/templates/company/detail.html:385 #: company/templates/company/manufacturer_part.html:216 -#: part/templates/part/detail.html:419 +#: part/templates/part/detail.html:436 msgid "All selected supplier parts will be deleted" msgstr "Tutte gli articoli del fornitore selezionati saranno eliminati" @@ -2714,7 +2803,7 @@ msgstr "Produttori" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:34 #: company/templates/company/supplier_part.html:159 -#: part/templates/part/detail.html:71 part/templates/part/part_base.html:76 +#: part/templates/part/detail.html:88 part/templates/part/part_base.html:76 msgid "Order part" msgstr "Articoli ordinati" @@ -2735,34 +2824,34 @@ msgstr "Articolo interno" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 -#: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 +#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:163 #: templates/InvenTree/search.html:188 templates/navbar.html:45 msgid "Suppliers" msgstr "Fornitori" #: company/templates/company/manufacturer_part.html:129 -#: part/templates/part/detail.html:347 +#: part/templates/part/detail.html:364 msgid "Delete supplier parts" msgstr "Elimina articolo fornitore" #: company/templates/company/manufacturer_part.html:129 #: company/templates/company/manufacturer_part.html:158 #: company/templates/company/manufacturer_part.html:254 -#: part/templates/part/detail.html:347 part/templates/part/detail.html:376 +#: part/templates/part/detail.html:364 part/templates/part/detail.html:393 #: templates/js/translated/company.js:426 templates/js/translated/helpers.js:31 -#: users/models.py:210 +#: users/models.py:212 msgid "Delete" msgstr "Elimina" #: company/templates/company/manufacturer_part.html:143 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:17 -#: part/templates/part/detail.html:170 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:187 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Parametri" #: company/templates/company/manufacturer_part.html:147 -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:192 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part.html:65 msgid "New Parameter" @@ -2773,7 +2862,7 @@ msgid "Delete parameters" msgstr "Elimina il parametro" #: company/templates/company/manufacturer_part.html:191 -#: part/templates/part/detail.html:862 +#: part/templates/part/detail.html:892 msgid "Add Parameter" msgstr "Aggiungi parametro" @@ -2802,9 +2891,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:477 +#: company/templates/company/supplier_part.html:24 stock/models.py:479 #: stock/templates/stock/item_base.html:402 -#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1748 +#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1756 msgid "Supplier Part" msgstr "Articolo Fornitore" @@ -2830,7 +2919,7 @@ msgstr "Crea nuova allocazione magazzino" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:167 -#: templates/js/translated/stock.js:360 +#: templates/js/translated/stock.js:368 msgid "New Stock Item" msgstr "Nuovo Elemento in giacenza" @@ -2840,7 +2929,7 @@ msgid "Supplier Part Orders" msgstr "Ordini articoli fornitore" #: company/templates/company/supplier_part.html:160 -#: part/templates/part/detail.html:72 +#: part/templates/part/detail.html:89 msgid "Order Part" msgstr "Ordine Articolo" @@ -2851,7 +2940,7 @@ msgstr "Informazioni Prezzi" #: company/templates/company/supplier_part.html:184 #: company/templates/company/supplier_part.html:290 -#: part/templates/part/prices.html:271 part/views.py:1619 +#: part/templates/part/prices.html:271 part/views.py:1628 msgid "Add Price Break" msgstr "Aggiungi riduzione prezzo" @@ -2859,11 +2948,11 @@ msgstr "Aggiungi riduzione prezzo" msgid "No price break information found" msgstr "Nessuna informazione di riduzione di prezzo trovata" -#: company/templates/company/supplier_part.html:224 part/views.py:1681 +#: company/templates/company/supplier_part.html:224 part/views.py:1690 msgid "Delete Price Break" msgstr "Elimina riduzione di prezzo" -#: company/templates/company/supplier_part.html:238 part/views.py:1667 +#: company/templates/company/supplier_part.html:238 part/views.py:1676 msgid "Edit Price Break" msgstr "" @@ -2881,10 +2970,10 @@ msgstr "Cancella riduzione di prezzo" #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:150 #: templates/InvenTree/settings/sidebar.html:41 -#: templates/js/translated/bom.js:328 templates/js/translated/part.js:489 -#: templates/js/translated/part.js:624 templates/js/translated/part.js:1118 -#: templates/js/translated/part.js:1279 templates/js/translated/stock.js:927 -#: templates/js/translated/stock.js:1580 templates/navbar.html:28 +#: templates/js/translated/bom.js:340 templates/js/translated/part.js:495 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1125 +#: templates/js/translated/part.js:1286 templates/js/translated/stock.js:935 +#: templates/js/translated/stock.js:1588 templates/navbar.html:28 msgid "Stock" msgstr "Magazzino" @@ -2907,8 +2996,8 @@ msgstr "Prezzi" #: stock/templates/stock/location.html:151 #: stock/templates/stock/location.html:163 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2351 -#: templates/stats.html:93 templates/stats.html:102 users/models.py:43 +#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2509 +#: templates/stats.html:105 templates/stats.html:114 users/models.py:43 msgid "Stock Items" msgstr "Articoli in magazzino" @@ -2937,20 +3026,20 @@ msgstr "Aziende" msgid "New Company" msgstr "Nuova Azienda" -#: company/views.py:129 part/views.py:584 +#: company/views.py:129 part/views.py:593 msgid "Download Image" msgstr "Download Immagine" -#: company/views.py:158 part/views.py:616 +#: company/views.py:158 part/views.py:625 msgid "Image size exceeds maximum allowable size for download" msgstr "La dimensione dell'immagine supera la dimensione massima consentita per il download" -#: company/views.py:165 part/views.py:623 +#: company/views.py:165 part/views.py:632 #, python-brace-format msgid "Invalid response: {code}" msgstr "Risposta non valida: {code}" -#: company/views.py:174 part/views.py:632 +#: company/views.py:174 part/views.py:641 msgid "Supplied URL is not a valid image file" msgstr "L'URL fornito non è un file immagine valido" @@ -3036,282 +3125,282 @@ msgstr "Contrassegna ordine come completato" msgid "Cancel order" msgstr "Annulla l'ordine" -#: order/models.py:122 +#: order/models.py:125 msgid "Order description" msgstr "Descrizione ordine" -#: order/models.py:124 +#: order/models.py:127 msgid "Link to external page" msgstr "" -#: order/models.py:132 +#: order/models.py:135 msgid "Created By" msgstr "Creato Da" -#: order/models.py:139 +#: order/models.py:142 msgid "User or group responsible for this order" msgstr "Utente o gruppo responsabile di questo ordine" -#: order/models.py:144 +#: order/models.py:147 msgid "Order notes" msgstr "Note ordine" -#: order/models.py:211 order/models.py:537 +#: order/models.py:214 order/models.py:542 msgid "Order reference" msgstr "Riferimento ordine" -#: order/models.py:216 order/models.py:552 +#: order/models.py:219 order/models.py:557 msgid "Purchase order status" msgstr "Stato ordine d'acquisto" -#: order/models.py:225 +#: order/models.py:228 msgid "Company from which the items are being ordered" msgstr "Azienda da cui sono stati ordinati gli articoli" -#: order/models.py:228 order/templates/order/order_base.html:118 +#: order/models.py:231 order/templates/order/order_base.html:118 #: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "Riferimento fornitore" -#: order/models.py:228 +#: order/models.py:231 msgid "Supplier order reference code" msgstr "Codice di riferimento ordine fornitore" -#: order/models.py:235 +#: order/models.py:238 msgid "received by" msgstr "ricevuto da" -#: order/models.py:240 +#: order/models.py:243 msgid "Issue Date" msgstr "Data di emissione" -#: order/models.py:241 +#: order/models.py:244 msgid "Date order was issued" msgstr "Data di emissione ordine" -#: order/models.py:246 +#: order/models.py:249 msgid "Target Delivery Date" msgstr "Data di consegna programmata" -#: order/models.py:247 +#: order/models.py:250 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Data prevista per la consegna dell'ordine. L'ordine scadrà dopo questa data." -#: order/models.py:253 +#: order/models.py:256 msgid "Date order was completed" msgstr "Data ordine completato" -#: order/models.py:282 +#: order/models.py:285 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:411 -msgid "Quantity must be an integer" -msgstr "" - -#: order/models.py:415 +#: order/models.py:420 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:548 +#: order/models.py:553 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer Reference " msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer order reference code" msgstr "" -#: order/models.py:559 +#: order/models.py:564 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:562 order/models.py:1028 +#: order/models.py:567 order/models.py:1048 #: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:569 +#: order/models.py:574 msgid "shipped by" msgstr "" -#: order/models.py:635 +#: order/models.py:640 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:639 +#: order/models.py:644 msgid "Only a pending order can be marked as complete" msgstr "" -#: order/models.py:642 +#: order/models.py:647 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:645 +#: order/models.py:650 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:797 +#: order/models.py:806 msgid "Item quantity" msgstr "" -#: order/models.py:803 +#: order/models.py:812 msgid "Line item reference" msgstr "" -#: order/models.py:805 +#: order/models.py:814 msgid "Line item notes" msgstr "" -#: order/models.py:835 order/models.py:926 order/models.py:1022 -#: templates/js/translated/order.js:1820 +#: order/models.py:842 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:855 order/models.py:946 order/models.py:1042 +#: templates/js/translated/order.js:1820 templates/js/translated/stock.js:2271 msgid "Order" msgstr "" -#: order/models.py:836 order/templates/order/order_base.html:9 +#: order/models.py:856 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:352 -#: templates/js/translated/order.js:801 templates/js/translated/part.js:832 -#: templates/js/translated/stock.js:1725 templates/js/translated/stock.js:2433 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:838 +#: templates/js/translated/stock.js:1733 templates/js/translated/stock.js:2591 msgid "Purchase Order" msgstr "" -#: order/models.py:857 +#: order/models.py:877 msgid "Supplier part" msgstr "Articolo Fornitore" -#: order/models.py:864 order/templates/order/order_base.html:163 +#: order/models.py:884 order/templates/order/order_base.html:163 #: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 -#: templates/js/translated/part.js:904 templates/js/translated/part.js:930 +#: templates/js/translated/part.js:910 templates/js/translated/part.js:937 #: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:865 +#: order/models.py:885 msgid "Number of items received" msgstr "" -#: order/models.py:872 part/templates/part/prices.html:176 stock/models.py:606 +#: order/models.py:892 part/templates/part/prices.html:176 stock/models.py:608 #: stock/serializers.py:170 stock/templates/stock/item_base.html:359 -#: templates/js/translated/stock.js:1779 +#: templates/js/translated/stock.js:1787 msgid "Purchase Price" msgstr "" -#: order/models.py:873 +#: order/models.py:893 msgid "Unit purchase price" msgstr "" -#: order/models.py:881 +#: order/models.py:901 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:936 part/templates/part/part_pricing.html:112 +#: order/models.py:956 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:937 +#: order/models.py:957 msgid "Unit sale price" msgstr "" -#: order/models.py:942 +#: order/models.py:962 msgid "Shipped quantity" msgstr "" -#: order/models.py:1029 +#: order/models.py:1049 msgid "Date of shipment" msgstr "" -#: order/models.py:1036 +#: order/models.py:1056 msgid "Checked By" msgstr "" -#: order/models.py:1037 +#: order/models.py:1057 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1045 +#: order/models.py:1065 msgid "Shipment number" msgstr "" -#: order/models.py:1052 +#: order/models.py:1072 msgid "Shipment notes" msgstr "" -#: order/models.py:1059 +#: order/models.py:1079 msgid "Tracking Number" msgstr "" -#: order/models.py:1060 +#: order/models.py:1080 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1070 +#: order/models.py:1090 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1073 +#: order/models.py:1093 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1149 order/models.py:1151 +#: order/models.py:1171 order/models.py:1173 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1155 +#: order/models.py:1177 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1157 +#: order/models.py:1179 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1160 +#: order/models.py:1182 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La quantità di ripartizione non puo' superare la disponibilità della giacenza" -#: order/models.py:1164 +#: order/models.py:1186 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:1170 order/serializers.py:734 +#: order/models.py:1192 order/serializers.py:740 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1173 +#: order/models.py:1195 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1174 +#: order/models.py:1196 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1182 +#: order/models.py:1204 msgid "Line" msgstr "" -#: order/models.py:1190 order/serializers.py:825 order/serializers.py:953 -#: templates/js/translated/model_renderers.js:251 +#: order/models.py:1212 order/serializers.py:831 order/serializers.py:959 +#: templates/js/translated/model_renderers.js:285 msgid "Shipment" msgstr "" -#: order/models.py:1191 +#: order/models.py:1213 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1203 +#: order/models.py:1225 msgid "Item" msgstr "" -#: order/models.py:1204 +#: order/models.py:1226 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1207 +#: order/models.py:1229 msgid "Enter stock allocation quantity" msgstr "Inserisci la quantità assegnata alla giacenza" @@ -3319,7 +3408,7 @@ msgstr "Inserisci la quantità assegnata alla giacenza" msgid "Purchase price currency" msgstr "" -#: order/serializers.py:211 order/serializers.py:790 +#: order/serializers.py:211 order/serializers.py:796 msgid "Line Item" msgstr "" @@ -3355,39 +3444,39 @@ msgstr "La destinazione deve essere specificata" msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:587 msgid "Sale price currency" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:655 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:699 order/serializers.py:802 +#: order/serializers.py:705 order/serializers.py:808 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:721 +#: order/serializers.py:727 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:815 +#: order/serializers.py:821 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:839 order/serializers.py:964 +#: order/serializers.py:845 order/serializers.py:970 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:842 order/serializers.py:967 +#: order/serializers.py:848 order/serializers.py:973 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:894 +#: order/serializers.py:900 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:910 msgid "The following serial numbers are already allocated" msgstr "" @@ -3441,6 +3530,7 @@ msgstr "" #: order/templates/order/order_base.html:94 #: order/templates/order/sales_order_base.html:89 +#: templates/js/translated/stock.js:2327 msgid "Order Status" msgstr "Stato dell'ordine" @@ -3538,7 +3628,7 @@ msgstr "Duplica selezionati" #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/build.js:300 templates/js/translated/build.js:1311 #: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 -#: templates/js/translated/stock.js:593 templates/js/translated/stock.js:761 +#: templates/js/translated/stock.js:601 templates/js/translated/stock.js:769 msgid "Remove row" msgstr "Elimina riga" @@ -3729,7 +3819,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:48 -#: templates/js/translated/bom.js:720 templates/js/translated/build.js:1243 +#: templates/js/translated/bom.js:732 templates/js/translated/build.js:1243 msgid "Actions" msgstr "" @@ -3832,447 +3922,448 @@ msgstr "Specifica la posizione per lo stock iniziale" msgid "This field is required" msgstr "" -#: part/bom.py:125 part/models.py:81 part/models.py:847 +#: part/bom.py:125 part/models.py:83 part/models.py:849 #: part/templates/part/category.html:108 part/templates/part/part_base.html:338 msgid "Default Location" msgstr "Posizione Predefinita" -#: part/bom.py:126 part/templates/part/part_base.html:185 +#: part/bom.py:126 templates/email/low_stock_notification.html:17 +msgid "Total Stock" +msgstr "Giacenze Totali" + +#: part/bom.py:127 part/templates/part/part_base.html:185 msgid "Available Stock" msgstr "Disponibilità in magazzino" -#: part/forms.py:85 +#: part/bom.py:128 part/templates/part/part_base.html:203 +#: templates/js/translated/part.js:1301 +msgid "On Order" +msgstr "Ordinato" + +#: part/forms.py:84 msgid "Select part category" msgstr "Seleziona categoria articolo" -#: part/forms.py:122 +#: part/forms.py:121 msgid "Add parameter template to same level categories" msgstr "" -#: part/forms.py:126 +#: part/forms.py:125 msgid "Add parameter template to all categories" msgstr "" -#: part/forms.py:146 +#: part/forms.py:145 msgid "Input quantity for price calculation" msgstr "Digita la quantità per il calcolo del prezzo" -#: part/models.py:82 +#: part/models.py:84 msgid "Default location for parts in this category" msgstr "Posizione predefinita per gli articoli di questa categoria" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords" msgstr "Keywords predefinite" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords for parts in this category" msgstr "Parole chiave predefinite per gli articoli in questa categoria" -#: part/models.py:95 part/models.py:2526 part/templates/part/category.html:15 +#: part/models.py:97 part/models.py:2533 part/templates/part/category.html:15 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Categoria Articoli" -#: part/models.py:96 part/templates/part/category.html:128 -#: templates/InvenTree/search.html:95 templates/stats.html:84 +#: part/models.py:98 part/templates/part/category.html:128 +#: templates/InvenTree/search.html:95 templates/stats.html:96 #: users/models.py:40 msgid "Part Categories" msgstr "Categorie Articolo" -#: part/models.py:358 part/templates/part/cat_link.html:3 +#: part/models.py:360 part/templates/part/cat_link.html:3 #: part/templates/part/category.html:17 part/templates/part/category.html:133 #: part/templates/part/category.html:153 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82 #: templates/InvenTree/settings/sidebar.html:37 -#: templates/js/translated/part.js:1656 templates/navbar.html:21 -#: templates/stats.html:80 templates/stats.html:89 users/models.py:41 +#: templates/js/translated/part.js:1663 templates/navbar.html:21 +#: templates/stats.html:92 templates/stats.html:101 users/models.py:41 msgid "Parts" msgstr "Articoli" -#: part/models.py:450 +#: part/models.py:452 msgid "Invalid choice for parent part" msgstr "Scelta non valida per l'articolo principale" -#: part/models.py:500 part/models.py:512 +#: part/models.py:502 part/models.py:514 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:642 +#: part/models.py:644 msgid "Next available serial numbers are" msgstr "I successivi numeri di serie disponibili sono" -#: part/models.py:646 +#: part/models.py:648 msgid "Next available serial number is" msgstr "Il prossimo numero di serie disponibile è" -#: part/models.py:651 +#: part/models.py:653 msgid "Most recent serial number is" msgstr "Il numero di serie più recente è" -#: part/models.py:746 +#: part/models.py:748 msgid "Duplicate IPN not allowed in part settings" msgstr "Non è consentito duplicare IPN nelle impostazioni dell'articolo" -#: part/models.py:771 +#: part/models.py:773 msgid "Part name" msgstr "Nome articolo" -#: part/models.py:778 +#: part/models.py:780 msgid "Is Template" msgstr "È Template" -#: part/models.py:779 +#: part/models.py:781 msgid "Is this part a template part?" msgstr "Quest'articolo è un articolo di template?" -#: part/models.py:789 +#: part/models.py:791 msgid "Is this part a variant of another part?" msgstr "Questa parte è una variante di un altro articolo?" -#: part/models.py:790 +#: part/models.py:792 msgid "Variant Of" msgstr "Variante Di" -#: part/models.py:796 +#: part/models.py:798 msgid "Part description" msgstr "Descrizione articolo" -#: part/models.py:801 part/templates/part/category.html:86 +#: part/models.py:803 part/templates/part/category.html:86 #: part/templates/part/part_base.html:302 msgid "Keywords" msgstr "Parole Chiave" -#: part/models.py:802 +#: part/models.py:804 msgid "Part keywords to improve visibility in search results" msgstr "Parole chiave per migliorare la visibilità nei risultati di ricerca" -#: part/models.py:809 part/models.py:2276 part/models.py:2525 +#: part/models.py:811 part/models.py:2283 part/models.py:2532 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:183 -#: templates/js/translated/part.js:1261 +#: templates/InvenTree/settings/settings.html:186 +#: templates/js/translated/part.js:1268 msgid "Category" msgstr "Categoria" -#: part/models.py:810 +#: part/models.py:812 msgid "Part category" msgstr "Categoria articolo" -#: part/models.py:815 part/templates/part/part_base.html:274 -#: templates/js/translated/part.js:612 templates/js/translated/part.js:1214 -#: templates/js/translated/stock.js:1552 +#: part/models.py:817 part/templates/part/part_base.html:274 +#: templates/js/translated/part.js:618 templates/js/translated/part.js:1221 +#: templates/js/translated/stock.js:1560 msgid "IPN" msgstr "IPN - Numero di riferimento interno" -#: part/models.py:816 +#: part/models.py:818 msgid "Internal Part Number" msgstr "Numero Dell'articolo Interno" -#: part/models.py:822 +#: part/models.py:824 msgid "Part revision or version number" msgstr "Numero di revisione o di versione" -#: part/models.py:823 part/templates/part/part_base.html:281 -#: report/models.py:200 templates/js/translated/part.js:616 +#: part/models.py:825 part/templates/part/part_base.html:281 +#: report/models.py:200 templates/js/translated/part.js:622 msgid "Revision" msgstr "Revisione" -#: part/models.py:845 +#: part/models.py:847 msgid "Where is this item normally stored?" msgstr "Dove viene normalmente immagazzinato questo articolo?" -#: part/models.py:892 part/templates/part/part_base.html:347 +#: part/models.py:894 part/templates/part/part_base.html:347 msgid "Default Supplier" msgstr "Fornitore predefinito" -#: part/models.py:893 +#: part/models.py:895 msgid "Default supplier part" msgstr "Articolo fornitore predefinito" -#: part/models.py:900 +#: part/models.py:902 msgid "Default Expiry" msgstr "Scadenza Predefinita" -#: part/models.py:901 +#: part/models.py:903 msgid "Expiry time (in days) for stock items of this part" msgstr "Scadenza (in giorni) per gli articoli in giacenza di questo pezzo" -#: part/models.py:906 part/templates/part/part_base.html:196 +#: part/models.py:908 part/templates/part/part_base.html:196 msgid "Minimum Stock" msgstr "Scorta Minima" -#: part/models.py:907 +#: part/models.py:909 msgid "Minimum allowed stock level" msgstr "Livello minimo di giacenza consentito" -#: part/models.py:914 +#: part/models.py:916 msgid "Stock keeping units for this part" msgstr "Unità di conservazione delle scorte per quest'articolo" -#: part/models.py:920 +#: part/models.py:922 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:926 +#: part/models.py:928 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:932 +#: part/models.py:934 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:937 +#: part/models.py:939 msgid "Can this part be purchased from external suppliers?" msgstr "Quest'articolo può essere acquistato da fornitori esterni?" -#: part/models.py:942 +#: part/models.py:944 msgid "Can this part be sold to customers?" msgstr "Questo pezzo può essere venduto ai clienti?" -#: part/models.py:946 plugin/models.py:46 -#: templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:295 -#: templates/js/translated/table_filters.js:417 -msgid "Active" -msgstr "Attivo" - -#: part/models.py:947 +#: part/models.py:949 msgid "Is this part active?" msgstr "Quest'articolo è attivo?" -#: part/models.py:952 +#: part/models.py:954 msgid "Is this a virtual part, such as a software product or license?" msgstr "È una parte virtuale, come un prodotto software o una licenza?" -#: part/models.py:957 +#: part/models.py:959 msgid "Part notes - supports Markdown formatting" msgstr "Note dell'articolo - supporta la formattazione Markdown" -#: part/models.py:960 +#: part/models.py:962 msgid "BOM checksum" msgstr "BOM checksum" -#: part/models.py:960 +#: part/models.py:962 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:963 +#: part/models.py:965 msgid "BOM checked by" msgstr "" -#: part/models.py:965 +#: part/models.py:967 msgid "BOM checked date" msgstr "" -#: part/models.py:969 +#: part/models.py:971 msgid "Creation User" msgstr "" -#: part/models.py:1781 +#: part/models.py:1783 msgid "Sell multiple" msgstr "" -#: part/models.py:2326 +#: part/models.py:2333 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2343 +#: part/models.py:2350 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2363 templates/js/translated/part.js:1707 -#: templates/js/translated/stock.js:1276 +#: part/models.py:2370 templates/js/translated/part.js:1714 +#: templates/js/translated/stock.js:1284 msgid "Test Name" msgstr "" -#: part/models.py:2364 +#: part/models.py:2371 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2369 +#: part/models.py:2376 msgid "Test Description" msgstr "Descrizione Di Prova" -#: part/models.py:2370 +#: part/models.py:2377 msgid "Enter description for this test" msgstr "" -#: part/models.py:2375 templates/js/translated/part.js:1716 +#: part/models.py:2382 templates/js/translated/part.js:1723 #: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" -#: part/models.py:2376 +#: part/models.py:2383 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2381 templates/js/translated/part.js:1724 +#: part/models.py:2388 templates/js/translated/part.js:1731 msgid "Requires Value" msgstr "" -#: part/models.py:2382 +#: part/models.py:2389 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2387 templates/js/translated/part.js:1731 +#: part/models.py:2394 templates/js/translated/part.js:1738 msgid "Requires Attachment" msgstr "" -#: part/models.py:2388 +#: part/models.py:2395 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2399 +#: part/models.py:2406 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2435 +#: part/models.py:2442 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2443 +#: part/models.py:2450 msgid "Parameter Name" msgstr "" -#: part/models.py:2450 +#: part/models.py:2457 msgid "Parameter Units" msgstr "" -#: part/models.py:2480 +#: part/models.py:2487 msgid "Parent Part" msgstr "" -#: part/models.py:2482 part/models.py:2531 part/models.py:2532 -#: templates/InvenTree/settings/settings.html:178 +#: part/models.py:2489 part/models.py:2538 part/models.py:2539 +#: templates/InvenTree/settings/settings.html:181 msgid "Parameter Template" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Data" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Parameter Value" msgstr "" -#: part/models.py:2536 templates/InvenTree/settings/settings.html:187 +#: part/models.py:2543 templates/InvenTree/settings/settings.html:190 msgid "Default Value" msgstr "" -#: part/models.py:2537 +#: part/models.py:2544 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2614 +#: part/models.py:2621 msgid "Select parent part" msgstr "" -#: part/models.py:2622 +#: part/models.py:2629 msgid "Sub part" msgstr "" -#: part/models.py:2623 +#: part/models.py:2630 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2629 +#: part/models.py:2636 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2631 templates/js/translated/bom.js:566 -#: templates/js/translated/bom.js:640 +#: part/models.py:2638 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:652 #: templates/js/translated/table_filters.js:92 msgid "Optional" msgstr "" -#: part/models.py:2631 +#: part/models.py:2638 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2634 +#: part/models.py:2641 msgid "Overage" msgstr "" -#: part/models.py:2635 +#: part/models.py:2642 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2638 +#: part/models.py:2645 msgid "BOM item reference" msgstr "" -#: part/models.py:2641 +#: part/models.py:2648 msgid "BOM item notes" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "Checksum" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "BOM line checksum" msgstr "" -#: part/models.py:2647 templates/js/translated/bom.js:657 +#: part/models.py:2654 templates/js/translated/bom.js:669 #: templates/js/translated/table_filters.js:68 #: templates/js/translated/table_filters.js:88 msgid "Inherited" msgstr "" -#: part/models.py:2648 +#: part/models.py:2655 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2653 templates/js/translated/bom.js:649 +#: part/models.py:2660 templates/js/translated/bom.js:661 msgid "Allow Variants" msgstr "Consenti Le Varianti" -#: part/models.py:2654 +#: part/models.py:2661 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2739 stock/models.py:355 +#: part/models.py:2746 stock/models.py:357 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2748 part/models.py:2750 +#: part/models.py:2755 part/models.py:2757 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2879 +#: part/models.py:2886 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2901 +#: part/models.py:2908 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2913 +#: part/models.py:2920 msgid "Parent BOM item" msgstr "" -#: part/models.py:2921 +#: part/models.py:2928 msgid "Substitute part" msgstr "" -#: part/models.py:2932 +#: part/models.py:2939 msgid "Part 1" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Part 2" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Select Related Part" msgstr "" -#: part/models.py:2968 +#: part/models.py:2975 msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique" msgstr "" @@ -4327,7 +4418,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:253 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:270 msgid "BOM actions" msgstr "" @@ -4499,7 +4590,7 @@ msgstr "" msgid "Import Parts" msgstr "" -#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:375 +#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:348 msgid "Duplicate Part" msgstr "" @@ -4533,145 +4624,149 @@ msgid "Showing stock for all variants of %(full_name)s" msgstr "" #: part/templates/part/detail.html:43 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/detail.html:60 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:48 +#: part/templates/part/detail.html:65 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:105 +#: part/templates/part/detail.html:122 msgid "Sales Order Allocations" msgstr "Assegnazione Ordine Di Vendita" -#: part/templates/part/detail.html:142 +#: part/templates/part/detail.html:159 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:146 +#: part/templates/part/detail.html:163 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:147 +#: part/templates/part/detail.html:164 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:174 +#: part/templates/part/detail.html:191 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:45 +#: part/templates/part/detail.html:228 part/templates/part/part_sidebar.html:49 msgid "Related Parts" msgstr "Articoli correlati" -#: part/templates/part/detail.html:215 part/templates/part/detail.html:216 +#: part/templates/part/detail.html:232 part/templates/part/detail.html:233 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:253 part/templates/part/part_sidebar.html:17 msgid "Bill of Materials" msgstr "Distinta base" -#: part/templates/part/detail.html:241 +#: part/templates/part/detail.html:258 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:245 templates/js/translated/bom.js:70 +#: part/templates/part/detail.html:262 templates/js/translated/bom.js:70 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:247 +#: part/templates/part/detail.html:264 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:257 +#: part/templates/part/detail.html:274 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:259 templates/js/translated/part.js:272 +#: part/templates/part/detail.html:276 templates/js/translated/part.js:272 msgid "Copy BOM" msgstr "" -#: part/templates/part/detail.html:261 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:283 msgid "New BOM Item" msgstr "" -#: part/templates/part/detail.html:267 +#: part/templates/part/detail.html:284 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:280 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:314 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:322 +#: part/templates/part/detail.html:339 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:332 +#: part/templates/part/detail.html:349 msgid "Part Suppliers" msgstr "Fornitori articoli" -#: part/templates/part/detail.html:360 +#: part/templates/part/detail.html:377 msgid "Part Manufacturers" msgstr "Componenti Produttori" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:393 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:558 +#: part/templates/part/detail.html:575 msgid "Delete selected BOM items?" msgstr "" -#: part/templates/part/detail.html:559 +#: part/templates/part/detail.html:576 msgid "All selected BOM items will be deleted" msgstr "" -#: part/templates/part/detail.html:608 +#: part/templates/part/detail.html:625 msgid "Create BOM Item" msgstr "" -#: part/templates/part/detail.html:652 +#: part/templates/part/detail.html:682 msgid "Related Part" msgstr "Articoli correlati" -#: part/templates/part/detail.html:660 +#: part/templates/part/detail.html:690 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:755 +#: part/templates/part/detail.html:785 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:812 +#: part/templates/part/detail.html:842 msgid "Edit Part Notes" msgstr "" -#: part/templates/part/detail.html:925 +#: part/templates/part/detail.html:955 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:937 +#: part/templates/part/detail.html:967 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:949 +#: part/templates/part/detail.html:979 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1038 +#: part/templates/part/detail.html:1068 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -4786,7 +4881,7 @@ msgstr "" #: templates/js/translated/company.js:508 #: templates/js/translated/company.js:765 #: templates/js/translated/model_renderers.js:175 -#: templates/js/translated/part.js:527 templates/js/translated/part.js:604 +#: templates/js/translated/part.js:533 templates/js/translated/part.js:610 msgid "Inactive" msgstr "Inattivo" @@ -4805,10 +4900,6 @@ msgstr "" msgid "In Stock" msgstr "In magazzino" -#: part/templates/part/part_base.html:203 templates/js/translated/part.js:1294 -msgid "On Order" -msgstr "Ordinato" - #: part/templates/part/part_base.html:210 templates/InvenTree/index.html:178 msgid "Required for Build Orders" msgstr "" @@ -4821,12 +4912,12 @@ msgstr "" msgid "Allocated to Orders" msgstr "" -#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:678 +#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:690 msgid "Can Build" msgstr "" -#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1125 -#: templates/js/translated/part.js:1298 +#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1132 +#: templates/js/translated/part.js:1305 msgid "Building" msgstr "" @@ -4878,7 +4969,7 @@ msgid "Total Cost" msgstr "Costo Totale" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:40 -#: templates/js/translated/bom.js:632 +#: templates/js/translated/bom.js:644 msgid "No supplier pricing available" msgstr "" @@ -4920,7 +5011,12 @@ msgstr "" msgid "Used In" msgstr "" -#: part/templates/part/part_sidebar.html:41 +#: part/templates/part/part_sidebar.html:31 +#: stock/templates/stock/stock_sidebar.html:8 +msgid "Allocations" +msgstr "" + +#: part/templates/part/part_sidebar.html:45 msgid "Test Templates" msgstr "" @@ -4993,7 +5089,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:155 templates/js/translated/bom.js:626 +#: part/templates/part/prices.html:155 templates/js/translated/bom.js:638 msgid "Supplier Cost" msgstr "" @@ -5015,7 +5111,7 @@ msgstr "" msgid "Internal Cost" msgstr "" -#: part/templates/part/prices.html:215 part/views.py:1690 +#: part/templates/part/prices.html:215 part/views.py:1699 msgid "Add Internal Price Break" msgstr "" @@ -5035,9 +5131,9 @@ msgstr "" msgid "Set category for the following parts" msgstr "Imposta categoria per i seguenti articoli" -#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:588 -#: templates/js/translated/part.js:491 templates/js/translated/part.js:1115 -#: templates/js/translated/part.js:1302 +#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:600 +#: templates/js/translated/part.js:497 templates/js/translated/part.js:1122 +#: templates/js/translated/part.js:1309 msgid "No Stock" msgstr "Nessuna giacenza" @@ -5054,116 +5150,116 @@ msgstr "" msgid "Create a new variant of template '%(full_name)s'." msgstr "" -#: part/templatetags/inventree_extras.py:116 +#: part/templatetags/inventree_extras.py:125 msgid "Unknown database" msgstr "Database sconosciuto" -#: part/views.py:92 +#: part/views.py:93 msgid "Set Part Category" msgstr "Imposta categoria articolo" -#: part/views.py:142 +#: part/views.py:143 #, python-brace-format msgid "Set category for {n} parts" msgstr "Imposta categoria per {n} articoli" -#: part/views.py:214 +#: part/views.py:215 msgid "Match References" msgstr "" -#: part/views.py:502 +#: part/views.py:511 msgid "None" msgstr "" -#: part/views.py:561 +#: part/views.py:570 msgid "Part QR Code" msgstr "" -#: part/views.py:663 +#: part/views.py:672 msgid "Select Part Image" msgstr "" -#: part/views.py:689 +#: part/views.py:698 msgid "Updated part image" msgstr "" -#: part/views.py:692 +#: part/views.py:701 msgid "Part image not found" msgstr "" -#: part/views.py:766 +#: part/views.py:775 msgid "Match Parts" msgstr "" -#: part/views.py:1101 +#: part/views.py:1110 msgid "Export Bill of Materials" msgstr "Esporta Distinta base" -#: part/views.py:1150 +#: part/views.py:1159 msgid "Confirm Part Deletion" msgstr "" -#: part/views.py:1157 +#: part/views.py:1166 msgid "Part was deleted" msgstr "" -#: part/views.py:1166 +#: part/views.py:1175 msgid "Part Pricing" msgstr "" -#: part/views.py:1315 +#: part/views.py:1324 msgid "Create Part Parameter Template" msgstr "" -#: part/views.py:1325 +#: part/views.py:1334 msgid "Edit Part Parameter Template" msgstr "" -#: part/views.py:1332 +#: part/views.py:1341 msgid "Delete Part Parameter Template" msgstr "" -#: part/views.py:1391 templates/js/translated/part.js:315 +#: part/views.py:1400 templates/js/translated/part.js:315 msgid "Edit Part Category" msgstr "Modifica Categoria Articoli" -#: part/views.py:1429 +#: part/views.py:1438 msgid "Delete Part Category" msgstr "Elimina categoria" -#: part/views.py:1435 +#: part/views.py:1444 msgid "Part category was deleted" msgstr "La Categoria articoli è stata eliminata" -#: part/views.py:1444 +#: part/views.py:1453 msgid "Create Category Parameter Template" msgstr "Crea Template Parametro Categoria" -#: part/views.py:1545 +#: part/views.py:1554 msgid "Edit Category Parameter Template" msgstr "Modifica Modello Parametro Categoria" -#: part/views.py:1601 +#: part/views.py:1610 msgid "Delete Category Parameter Template" msgstr "Elimina Modello Parametro Categoria" -#: part/views.py:1623 +#: part/views.py:1632 msgid "Added new price break" msgstr "" -#: part/views.py:1699 +#: part/views.py:1708 msgid "Edit Internal Price Break" msgstr "" -#: part/views.py:1707 +#: part/views.py:1716 msgid "Delete Internal Price Break" msgstr "" -#: plugin/integration.py:124 +#: plugin/integration.py:138 msgid "No author found" msgstr "" -#: plugin/integration.py:136 +#: plugin/integration.py:152 msgid "No date found" msgstr "" @@ -5191,7 +5287,7 @@ msgstr "" msgid "Is the plugin active" msgstr "" -#: plugin/models.py:195 +#: plugin/models.py:199 msgid "Plugin" msgstr "" @@ -5357,12 +5453,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:517 stock/templates/stock/item_base.html:156 +#: stock/models.py:519 stock/templates/stock/item_base.html:156 #: templates/js/translated/build.js:293 templates/js/translated/build.js:697 #: templates/js/translated/build.js:1073 #: templates/js/translated/model_renderers.js:95 #: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 -#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:415 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:423 msgid "Serial Number" msgstr "" @@ -5371,19 +5467,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1948 +#: stock/models.py:1976 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1954 +#: stock/models.py:1982 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin.html:50 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2367 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2525 msgid "Date" msgstr "Data" @@ -5396,23 +5492,27 @@ msgid "Fail" msgstr "Fallito" #: report/templates/report/inventree_test_report_base.html:123 -#: stock/templates/stock/stock_sidebar.html:12 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:578 templates/js/translated/stock.js:748 -#: templates/js/translated/stock.js:2627 +#: templates/js/translated/stock.js:586 templates/js/translated/stock.js:756 +#: templates/js/translated/stock.js:2785 msgid "Serial" msgstr "Seriale" -#: stock/api.py:478 +#: stock/api.py:476 msgid "Quantity is required" msgstr "La quantità è richiesta" -#: stock/forms.py:77 stock/forms.py:251 stock/models.py:574 +#: stock/api.py:483 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:576 #: stock/templates/stock/item_base.html:193 -#: templates/js/translated/stock.js:1701 +#: templates/js/translated/stock.js:1709 msgid "Expiry Date" msgstr "Data di Scadenza" @@ -5460,228 +5560,228 @@ msgstr "Conferma la disinstallazione" msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:611 +#: stock/models.py:62 stock/models.py:613 #: stock/templates/stock/item_base.html:416 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:612 +#: stock/models.py:63 stock/models.py:614 msgid "Select Owner" msgstr "Seleziona Owner" -#: stock/models.py:336 +#: stock/models.py:338 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:372 +#: stock/models.py:374 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:382 stock/models.py:391 +#: stock/models.py:384 stock/models.py:393 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:383 +#: stock/models.py:385 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:405 +#: stock/models.py:407 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:411 +#: stock/models.py:413 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:418 +#: stock/models.py:420 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:461 +#: stock/models.py:463 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:470 +#: stock/models.py:472 msgid "Base part" msgstr "Articolo base" -#: stock/models.py:478 +#: stock/models.py:480 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:484 stock/templates/stock/location.html:16 +#: stock/models.py:486 stock/templates/stock/location.html:16 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Ubicazione magazzino" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:494 +#: stock/models.py:496 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:500 stock/templates/stock/item_base.html:298 +#: stock/models.py:502 stock/templates/stock/item_base.html:298 msgid "Installed In" msgstr "Installato In" -#: stock/models.py:503 +#: stock/models.py:505 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:519 +#: stock/models.py:521 msgid "Serial number for this item" msgstr "" -#: stock/models.py:533 +#: stock/models.py:535 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:537 +#: stock/models.py:539 msgid "Stock Quantity" msgstr "Quantità disponibile" -#: stock/models.py:546 +#: stock/models.py:548 msgid "Source Build" msgstr "" -#: stock/models.py:548 +#: stock/models.py:550 msgid "Build for this stock item" msgstr "" -#: stock/models.py:559 +#: stock/models.py:561 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:562 +#: stock/models.py:564 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:568 +#: stock/models.py:570 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:575 +#: stock/models.py:577 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete on deplete" msgstr "Elimina al esaurimento" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:598 stock/templates/stock/item.html:111 +#: stock/models.py:600 stock/templates/stock/item.html:128 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:607 +#: stock/models.py:609 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1096 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1074 +#: stock/models.py:1102 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1080 +#: stock/models.py:1108 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1083 +#: stock/models.py:1111 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1086 +#: stock/models.py:1114 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1093 +#: stock/models.py:1121 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1164 +#: stock/models.py:1192 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1195 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1170 +#: stock/models.py:1198 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1173 +#: stock/models.py:1201 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1176 +#: stock/models.py:1204 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1179 +#: stock/models.py:1207 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1186 stock/serializers.py:774 +#: stock/models.py:1214 stock/serializers.py:775 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1190 +#: stock/models.py:1218 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1222 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1198 +#: stock/models.py:1226 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1369 +#: stock/models.py:1397 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1868 +#: stock/models.py:1896 msgid "Entry notes" msgstr "" -#: stock/models.py:1925 +#: stock/models.py:1953 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1931 +#: stock/models.py:1959 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1949 +#: stock/models.py:1977 msgid "Test name" msgstr "" -#: stock/models.py:1955 templates/js/translated/table_filters.js:271 +#: stock/models.py:1983 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1961 +#: stock/models.py:1989 msgid "Test output value" msgstr "" -#: stock/models.py:1968 +#: stock/models.py:1996 msgid "Test result attachment" msgstr "" -#: stock/models.py:1974 +#: stock/models.py:2002 msgid "Test notes" msgstr "" @@ -5706,7 +5806,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:326 stock/serializers.py:731 stock/serializers.py:972 +#: stock/serializers.py:326 stock/serializers.py:732 stock/serializers.py:973 msgid "Destination stock location" msgstr "Posizione magazzino di destinazione" @@ -5718,63 +5818,63 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:589 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:592 +#: stock/serializers.py:593 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:597 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:626 +#: stock/serializers.py:627 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:632 +#: stock/serializers.py:633 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:640 +#: stock/serializers.py:641 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:650 stock/serializers.py:880 +#: stock/serializers.py:651 stock/serializers.py:881 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:738 +#: stock/serializers.py:739 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:743 +#: stock/serializers.py:744 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:744 +#: stock/serializers.py:745 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:749 +#: stock/serializers.py:750 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:750 +#: stock/serializers.py:751 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:760 +#: stock/serializers.py:761 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:842 +#: stock/serializers.py:843 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:870 +#: stock/serializers.py:871 msgid "Stock transaction notes" msgstr "" @@ -5787,47 +5887,51 @@ msgid "New Entry" msgstr "" #: stock/templates/stock/item.html:48 -msgid "Child Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:55 -msgid "This stock item does not have any child items" +msgid "Stock Item Allocations" msgstr "" #: stock/templates/stock/item.html:64 -#: stock/templates/stock/stock_sidebar.html:8 -msgid "Test Data" -msgstr "" - -#: stock/templates/stock/item.html:68 stock/templates/stock/item_base.html:57 -msgid "Test Report" +msgid "Child Stock Items" msgstr "" #: stock/templates/stock/item.html:72 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item.html:81 +#: stock/templates/stock/stock_sidebar.html:12 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:57 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item.html:89 msgid "Delete Test Data" msgstr "" -#: stock/templates/stock/item.html:76 +#: stock/templates/stock/item.html:93 msgid "Add Test Data" msgstr "" -#: stock/templates/stock/item.html:133 +#: stock/templates/stock/item.html:150 msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:482 +#: stock/templates/stock/item.html:154 stock/views.py:482 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:279 stock/templates/stock/item.html:304 +#: stock/templates/stock/item.html:309 stock/templates/stock/item.html:334 msgid "Add Test Result" msgstr "" -#: stock/templates/stock/item.html:324 +#: stock/templates/stock/item.html:354 msgid "Edit Test Result" msgstr "" -#: stock/templates/stock/item.html:338 +#: stock/templates/stock/item.html:368 msgid "Delete Test Result" msgstr "" @@ -5952,7 +6056,7 @@ msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:206 -#: templates/js/translated/stock.js:1714 +#: templates/js/translated/stock.js:1722 msgid "Last Updated" msgstr "Ultimo aggiornamento" @@ -6111,7 +6215,7 @@ msgid "Sublocations" msgstr "Sottoallocazioni" #: stock/templates/stock/location.html:146 templates/InvenTree/search.html:164 -#: templates/stats.html:97 users/models.py:42 +#: templates/stats.html:109 users/models.py:42 msgid "Stock Locations" msgstr "Posizioni magazzino" @@ -6135,7 +6239,7 @@ msgstr "" msgid "Stock Tracking" msgstr "" -#: stock/templates/stock/stock_sidebar.html:16 +#: stock/templates/stock/stock_sidebar.html:20 msgid "Child Items" msgstr "" @@ -6164,7 +6268,7 @@ msgstr "" msgid "Are you sure you want to delete this stock tracking entry?" msgstr "" -#: stock/views.py:162 +#: stock/views.py:162 templates/js/translated/stock.js:139 msgid "Edit Stock Location" msgstr "Modifica Posizione Giacenza" @@ -6204,7 +6308,7 @@ msgstr "" msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:727 templates/js/translated/stock.js:1066 +#: stock/views.py:727 templates/js/translated/stock.js:1074 msgid "Confirm stock adjustment" msgstr "" @@ -6212,7 +6316,7 @@ msgstr "" msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:324 +#: stock/views.py:760 templates/js/translated/stock.js:332 msgid "Edit Stock Item" msgstr "" @@ -6224,7 +6328,7 @@ msgstr "Crea una nuova Posizione di Giacenza" msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1153 templates/js/translated/stock.js:304 +#: stock/views.py:1153 templates/js/translated/stock.js:312 msgid "Duplicate Stock Item" msgstr "" @@ -6268,6 +6372,18 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/500.html:5 templates/500.html:11 +msgid "Internal Server Error" +msgstr "" + +#: templates/500.html:14 +msgid "The InvenTree server raised an internal error" +msgstr "" + +#: templates/500.html:15 +msgid "Refer to the error log in the admin interface for further details" +msgstr "" + #: templates/503.html:10 templates/503.html:35 msgid "Site is in Maintenance" msgstr "" @@ -6390,7 +6506,7 @@ msgid "Signup" msgstr "Registrati" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:113 msgid "Settings" msgstr "" @@ -6431,43 +6547,43 @@ msgstr "" msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:32 +#: templates/InvenTree/settings/plugin.html:33 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:37 +#: templates/InvenTree/settings/plugin.html:38 #: templates/js/translated/plugin.js:15 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: templates/InvenTree/settings/plugin.html:47 templates/navbar.html:111 #: users/models.py:39 msgid "Admin" msgstr "Admin" -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:49 #: templates/InvenTree/settings/plugin_settings.html:28 msgid "Author" msgstr "" -#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin_settings.html:43 msgid "Version" msgstr "" -#: templates/InvenTree/settings/plugin.html:91 +#: templates/InvenTree/settings/plugin.html:92 msgid "Inactive plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:114 +#: templates/InvenTree/settings/plugin.html:115 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:123 +#: templates/InvenTree/settings/plugin.html:124 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:125 +#: templates/InvenTree/settings/plugin.html:126 msgid "Message" msgstr "" @@ -6555,37 +6671,37 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:75 +#: templates/InvenTree/settings/settings.html:78 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:77 +#: templates/InvenTree/settings/settings.html:80 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:79 +#: templates/InvenTree/settings/settings.html:82 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:168 +#: templates/InvenTree/settings/settings.html:171 msgid "No category parameter templates found" msgstr "Nessun parametro di categoria trovato" -#: templates/InvenTree/settings/settings.html:190 -#: templates/InvenTree/settings/settings.html:289 +#: templates/InvenTree/settings/settings.html:193 +#: templates/InvenTree/settings/settings.html:292 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:191 -#: templates/InvenTree/settings/settings.html:290 +#: templates/InvenTree/settings/settings.html:194 +#: templates/InvenTree/settings/settings.html:293 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:272 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:273 +#: templates/InvenTree/settings/settings.html:276 msgid "ID" msgstr "" @@ -6763,124 +6879,105 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:219 +#: templates/InvenTree/settings/user.html:220 +msgid "Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:226 +msgid "Log out active sessions (except this one)" +msgstr "" + +#: templates/InvenTree/settings/user.html:227 +msgid "Log Out Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:236 +msgid "unknown on unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:237 +msgid "unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:241 +msgid "IP Address" +msgstr "" + +#: templates/InvenTree/settings/user.html:242 +msgid "Device" +msgstr "" + +#: templates/InvenTree/settings/user.html:243 +msgid "Last Activity" +msgstr "" + +#: templates/InvenTree/settings/user.html:252 +#, python-format +msgid "%(time)s ago (this session)" +msgstr "" + +#: templates/InvenTree/settings/user.html:254 +#, python-format +msgid "%(time)s ago" +msgstr "" + +#: templates/InvenTree/settings/user.html:266 +msgid "Do you really want to remove the selected email address?" +msgstr "" + #: templates/InvenTree/settings/user_display.html:25 msgid "Theme Settings" msgstr "" -#: templates/InvenTree/settings/user.html:227 #: templates/InvenTree/settings/user_display.html:35 msgid "Select theme" msgstr "" -#: templates/InvenTree/settings/user.html:237 #: templates/InvenTree/settings/user_display.html:46 msgid "Set Theme" msgstr "" -#: templates/InvenTree/settings/user.html:246 #: templates/InvenTree/settings/user_display.html:54 msgid "Language Settings" msgstr "" -#: templates/InvenTree/settings/user.html:254 #: templates/InvenTree/settings/user_display.html:63 msgid "Select language" msgstr "" -#: templates/InvenTree/settings/user.html:270 #: templates/InvenTree/settings/user_display.html:79 #, python-format msgid "%(lang_translated)s%% translated" msgstr "" -#: templates/InvenTree/settings/user.html:272 #: templates/InvenTree/settings/user_display.html:81 msgid "No translations available" msgstr "" -#: templates/InvenTree/settings/user.html:279 #: templates/InvenTree/settings/user_display.html:88 msgid "Set Language" msgstr "" -#: templates/InvenTree/settings/user.html:281 #: templates/InvenTree/settings/user_display.html:91 msgid "Some languages are not complete" msgstr "" -#: templates/InvenTree/settings/user.html:283 #: templates/InvenTree/settings/user_display.html:93 msgid "Show only sufficent" msgstr "" -#: templates/InvenTree/settings/user.html:285 +#: templates/InvenTree/settings/user_display.html:95 +msgid "and hidden." +msgstr "" + #: templates/InvenTree/settings/user_display.html:95 msgid "Show them too" msgstr "" -#: templates/InvenTree/settings/user.html:292 #: templates/InvenTree/settings/user_display.html:101 msgid "Help the translation efforts!" msgstr "" -#: templates/InvenTree/settings/user.html:293 -#, python-format -msgid "Native language translation of the\n" -" InvenTree web application is community contributed via crowdin. Contributions are\n" -" welcomed and encouraged." -msgstr "" - -#: templates/InvenTree/settings/user.html:302 -msgid "Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:308 -msgid "Log out active sessions (except this one)" -msgstr "" - -#: templates/InvenTree/settings/user.html:309 -msgid "Log Out Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:318 -msgid "unknown on unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:319 -msgid "unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:323 -msgid "IP Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:324 -msgid "Device" -msgstr "" - -#: templates/InvenTree/settings/user.html:325 -msgid "Last Activity" -msgstr "" - -#: templates/InvenTree/settings/user.html:334 -#, python-format -msgid "%(time)s ago (this session)" -msgstr "" - -#: templates/InvenTree/settings/user.html:336 -#, python-format -msgid "%(time)s ago" -msgstr "" - -#: templates/InvenTree/settings/user.html:348 -msgid "Do you really want to remove the selected email address?" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:95 -msgid "and hidden." -msgstr "" - #: templates/InvenTree/settings/user_display.html:102 #, python-format msgid "Native language translation of the InvenTree web application is community contributed via crowdin. Contributions are welcomed and encouraged." @@ -6899,9 +6996,9 @@ msgid "InvenTree Version Information" msgstr "Informazioni Versione InvenTree" #: templates/about.html:11 templates/about.html:105 -#: templates/js/translated/bom.js:395 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:573 templates/js/translated/modals.js:667 -#: templates/js/translated/modals.js:970 templates/modals.html:15 +#: templates/js/translated/bom.js:407 templates/js/translated/modals.js:53 +#: templates/js/translated/modals.js:584 templates/js/translated/modals.js:678 +#: templates/js/translated/modals.js:983 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "Chiudi" @@ -7179,13 +7276,13 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1103 +#: templates/js/translated/bom.js:1117 msgid "Required Quantity" msgstr "Quantità richiesta" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:579 templates/js/translated/build.js:1189 +#: templates/js/translated/bom.js:591 templates/js/translated/build.js:1189 #: templates/js/translated/build.js:1810 #: templates/js/translated/table_filters.js:178 msgid "Available" @@ -7209,10 +7306,6 @@ msgstr "" msgid "Click on the following link to view this part" msgstr "" -#: templates/email/low_stock_notification.html:17 -msgid "Total Stock" -msgstr "Giacenze Totali" - #: templates/email/low_stock_notification.html:19 msgid "Minimum Quantity" msgstr "Quantità minima" @@ -7233,11 +7326,11 @@ msgstr "Il server remoto deve essere accessibile" msgid "Remote image must not exceed maximum allowable file size" msgstr "L'immagine remota non deve superare la dimensione massima consentita del file" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1040 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1053 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1041 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1054 msgid "No response from the InvenTree server" msgstr "" @@ -7249,27 +7342,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1063 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1051 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1064 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1068 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1056 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1069 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1073 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1061 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1074 msgid "The requested resource could not be located on the server" msgstr "" @@ -7281,11 +7374,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1065 +#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1078 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1066 +#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1079 msgid "Connection timeout while requesting data from server" msgstr "" @@ -7354,7 +7447,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "Invalid server response" msgstr "" @@ -7382,7 +7475,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1018 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1026 msgid "Remove stock item" msgstr "" @@ -7429,12 +7522,12 @@ msgid "Download BOM Template" msgstr "" #: templates/js/translated/bom.js:39 templates/js/translated/bom.js:73 -#: templates/js/translated/order.js:369 templates/js/translated/stock.js:510 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:518 msgid "Format" msgstr "Formato" #: templates/js/translated/bom.js:40 templates/js/translated/bom.js:74 -#: templates/js/translated/order.js:370 templates/js/translated/stock.js:511 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:519 msgid "Select file format" msgstr "" @@ -7490,87 +7583,87 @@ msgstr "" msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:340 -msgid "Select and add a new variant item using the input below" +#: templates/js/translated/bom.js:352 +msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:351 +#: templates/js/translated/bom.js:363 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:357 +#: templates/js/translated/bom.js:369 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:396 +#: templates/js/translated/bom.js:408 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:397 +#: templates/js/translated/bom.js:409 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:516 +#: templates/js/translated/bom.js:528 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:520 templates/js/translated/build.js:1171 +#: templates/js/translated/bom.js:532 templates/js/translated/build.js:1171 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:525 +#: templates/js/translated/bom.js:537 msgid "Open subassembly" msgstr "" -#: templates/js/translated/bom.js:597 +#: templates/js/translated/bom.js:609 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:612 +#: templates/js/translated/bom.js:624 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:619 +#: templates/js/translated/bom.js:631 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:668 templates/js/translated/bom.js:757 +#: templates/js/translated/bom.js:680 templates/js/translated/bom.js:769 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:728 +#: templates/js/translated/bom.js:740 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:742 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:732 +#: templates/js/translated/bom.js:744 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:734 templates/js/translated/bom.js:908 +#: templates/js/translated/bom.js:746 templates/js/translated/bom.js:920 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:891 +#: templates/js/translated/bom.js:748 templates/js/translated/bom.js:903 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:830 templates/js/translated/build.js:915 +#: templates/js/translated/bom.js:842 templates/js/translated/build.js:915 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:886 +#: templates/js/translated/bom.js:898 msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:1086 templates/js/translated/build.js:1155 +#: templates/js/translated/bom.js:1100 templates/js/translated/build.js:1155 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1108 +#: templates/js/translated/bom.js:1122 msgid "Inherited from parent BOM" msgstr "" @@ -7726,9 +7819,9 @@ msgstr "" msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1206 -#: templates/js/translated/part.js:1617 templates/js/translated/stock.js:1512 -#: templates/js/translated/stock.js:2321 +#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:1624 templates/js/translated/stock.js:1520 +#: templates/js/translated/stock.js:2479 msgid "Select" msgstr "" @@ -7736,7 +7829,7 @@ msgstr "" msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2540 +#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2698 msgid "No user information" msgstr "" @@ -7809,34 +7902,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:500 -#: templates/js/translated/company.js:757 templates/js/translated/part.js:511 -#: templates/js/translated/part.js:596 +#: templates/js/translated/company.js:757 templates/js/translated/part.js:517 +#: templates/js/translated/part.js:602 msgid "Template part" msgstr "" #: templates/js/translated/company.js:504 -#: templates/js/translated/company.js:761 templates/js/translated/part.js:515 -#: templates/js/translated/part.js:600 +#: templates/js/translated/company.js:761 templates/js/translated/part.js:521 +#: templates/js/translated/part.js:606 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:631 templates/js/translated/part.js:690 +#: templates/js/translated/company.js:631 templates/js/translated/part.js:696 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:668 templates/js/translated/part.js:732 +#: templates/js/translated/company.js:668 templates/js/translated/part.js:738 msgid "Edit parameter" msgstr "Modifica parametro" -#: templates/js/translated/company.js:669 templates/js/translated/part.js:733 +#: templates/js/translated/company.js:669 templates/js/translated/part.js:739 msgid "Delete parameter" msgstr "Elimina il parametro" -#: templates/js/translated/company.js:688 templates/js/translated/part.js:750 +#: templates/js/translated/company.js:688 templates/js/translated/part.js:756 msgid "Edit Parameter" msgstr "Modifica parametro" -#: templates/js/translated/company.js:699 templates/js/translated/part.js:762 +#: templates/js/translated/company.js:699 templates/js/translated/part.js:768 msgid "Delete Parameter" msgstr "Elimina Parametri" @@ -7845,12 +7938,12 @@ msgid "No supplier parts found" msgstr "Nessun fornitore trovato" #: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:420 +#: templates/js/translated/filters.js:429 msgid "true" msgstr "vero" #: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:421 +#: templates/js/translated/filters.js:430 msgid "false" msgstr "falso" @@ -7870,7 +7963,7 @@ msgstr "Aggiungi nuovo filtro" msgid "Clear all filters" msgstr "Cancella tutti i filtri" -#: templates/js/translated/filters.js:329 +#: templates/js/translated/filters.js:338 msgid "Create filter" msgstr "Crea filtro" @@ -7899,20 +7992,20 @@ msgstr "Mostra operazione non consentita" msgid "Enter a valid number" msgstr "Inserisci un numero valido" -#: templates/js/translated/forms.js:1080 templates/modals.html:19 +#: templates/js/translated/forms.js:1082 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1471 +#: templates/js/translated/forms.js:1487 msgid "No results found" msgstr "Nessun risultato trovato" -#: templates/js/translated/forms.js:1675 +#: templates/js/translated/forms.js:1691 msgid "Searching" msgstr "Ricerca" -#: templates/js/translated/forms.js:1895 +#: templates/js/translated/forms.js:1930 msgid "Clear input" msgstr "Cancella input" @@ -7925,7 +8018,7 @@ msgid "NO" msgstr "NO" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1042 +#: templates/js/translated/stock.js:1050 msgid "Select Stock Items" msgstr "" @@ -7975,12 +8068,12 @@ msgid "Select Label Template" msgstr "Seleziona Modello Etichetta" #: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 -#: templates/js/translated/modals.js:599 +#: templates/js/translated/modals.js:610 msgid "Cancel" msgstr "Annulla" #: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:666 templates/js/translated/modals.js:969 +#: templates/js/translated/modals.js:677 templates/js/translated/modals.js:982 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "Invia" @@ -7989,47 +8082,47 @@ msgstr "Invia" msgid "Form Title" msgstr "Titolo modulo" -#: templates/js/translated/modals.js:381 +#: templates/js/translated/modals.js:392 msgid "Waiting for server..." msgstr "In attesa del server..." -#: templates/js/translated/modals.js:540 +#: templates/js/translated/modals.js:551 msgid "Show Error Information" msgstr "Informazioni sull'errore" -#: templates/js/translated/modals.js:598 +#: templates/js/translated/modals.js:609 msgid "Accept" msgstr "Accetta" -#: templates/js/translated/modals.js:655 +#: templates/js/translated/modals.js:666 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Invalid response from server" msgstr "Risposta dal server non valida" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:933 +#: templates/js/translated/modals.js:946 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1045 +#: templates/js/translated/modals.js:1058 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1046 +#: templates/js/translated/modals.js:1059 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1069 +#: templates/js/translated/modals.js:1082 msgid "Error requesting form data" msgstr "" @@ -8053,23 +8146,24 @@ msgstr "" msgid "Part ID" msgstr "Codice Articolo" -#: templates/js/translated/model_renderers.js:236 +#: templates/js/translated/model_renderers.js:249 +#: templates/js/translated/model_renderers.js:270 msgid "Order ID" msgstr "ID Ordine" -#: templates/js/translated/model_renderers.js:253 +#: templates/js/translated/model_renderers.js:287 msgid "Shipment ID" msgstr "" -#: templates/js/translated/model_renderers.js:273 +#: templates/js/translated/model_renderers.js:307 msgid "Category ID" msgstr "Id Categoria" -#: templates/js/translated/model_renderers.js:310 +#: templates/js/translated/model_renderers.js:344 msgid "Manufacturer Part ID" msgstr "ID articolo produttore" -#: templates/js/translated/model_renderers.js:339 +#: templates/js/translated/model_renderers.js:373 msgid "Supplier Part ID" msgstr "" @@ -8117,7 +8211,7 @@ msgstr "" msgid "Quantity to receive" msgstr "Quantità da ricevere" -#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2123 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2131 msgid "Stock Status" msgstr "Stato giacenza" @@ -8141,7 +8235,7 @@ msgstr "" msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:790 templates/js/translated/part.js:803 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:809 msgid "No purchase orders found" msgstr "" @@ -8166,7 +8260,7 @@ msgid "Total" msgstr "Totale" #: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 -#: templates/js/translated/part.js:1834 templates/js/translated/part.js:2045 +#: templates/js/translated/part.js:1841 templates/js/translated/part.js:2052 msgid "Unit Price" msgstr "Prezzo Unitario" @@ -8182,7 +8276,7 @@ msgstr "" msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1166 templates/js/translated/part.js:935 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:942 msgid "Receive line item" msgstr "" @@ -8251,7 +8345,7 @@ msgid "Delete Stock Allocation" msgstr "Elimina posizione giacenza" #: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 -#: templates/js/translated/stock.js:1428 +#: templates/js/translated/stock.js:1436 msgid "Shipped to customer" msgstr "Spedito al cliente" @@ -8379,144 +8473,148 @@ msgstr "Modifica l'articolo" msgid "Part edited" msgstr "Articolo modificato" -#: templates/js/translated/part.js:412 +#: templates/js/translated/part.js:351 +msgid "Create Part Variant" +msgstr "" + +#: templates/js/translated/part.js:418 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:414 +#: templates/js/translated/part.js:420 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:419 +#: templates/js/translated/part.js:425 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:421 +#: templates/js/translated/part.js:427 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:444 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:448 +#: templates/js/translated/part.js:454 msgid "Validate Bill of Materials" msgstr "Convalida la distinta dei materiali" -#: templates/js/translated/part.js:451 +#: templates/js/translated/part.js:457 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:481 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:503 templates/js/translated/part.js:588 +#: templates/js/translated/part.js:509 templates/js/translated/part.js:594 msgid "Trackable part" msgstr "Parte tracciabile" -#: templates/js/translated/part.js:507 templates/js/translated/part.js:592 +#: templates/js/translated/part.js:513 templates/js/translated/part.js:598 msgid "Virtual part" msgstr "Parte virtuale" -#: templates/js/translated/part.js:519 +#: templates/js/translated/part.js:525 msgid "Subscribed part" msgstr "Parte sottoscritta" -#: templates/js/translated/part.js:523 +#: templates/js/translated/part.js:529 msgid "Salable part" msgstr "Parte vendibile" -#: templates/js/translated/part.js:638 +#: templates/js/translated/part.js:644 msgid "No variants found" msgstr "Nessuna variante trovata" -#: templates/js/translated/part.js:1005 +#: templates/js/translated/part.js:1012 msgid "Delete part relationship" msgstr "Elimina relazione tra i componenti" -#: templates/js/translated/part.js:1029 +#: templates/js/translated/part.js:1036 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1096 templates/js/translated/part.js:1356 +#: templates/js/translated/part.js:1103 templates/js/translated/part.js:1363 msgid "No parts found" msgstr "Nessun articolo trovato" -#: templates/js/translated/part.js:1266 +#: templates/js/translated/part.js:1273 msgid "No category" msgstr "Nessuna categoria" -#: templates/js/translated/part.js:1289 +#: templates/js/translated/part.js:1296 #: templates/js/translated/table_filters.js:430 msgid "Low stock" msgstr "In esaurimento" -#: templates/js/translated/part.js:1380 templates/js/translated/part.js:1552 -#: templates/js/translated/stock.js:2282 +#: templates/js/translated/part.js:1387 templates/js/translated/part.js:1559 +#: templates/js/translated/stock.js:2440 msgid "Display as list" msgstr "Visualizza come elenco" -#: templates/js/translated/part.js:1396 +#: templates/js/translated/part.js:1403 msgid "Display as grid" msgstr "Visualizza come griglia" -#: templates/js/translated/part.js:1571 templates/js/translated/stock.js:2301 +#: templates/js/translated/part.js:1578 templates/js/translated/stock.js:2459 msgid "Display as tree" msgstr "Visualizza come struttura ad albero" -#: templates/js/translated/part.js:1635 +#: templates/js/translated/part.js:1642 msgid "Subscribed category" msgstr "Categoria sottoscritta" -#: templates/js/translated/part.js:1649 templates/js/translated/stock.js:2345 +#: templates/js/translated/part.js:1656 templates/js/translated/stock.js:2503 msgid "Path" msgstr "Percorso" -#: templates/js/translated/part.js:1693 +#: templates/js/translated/part.js:1700 msgid "No test templates matching query" msgstr "Nessun modello di test corrispondente" -#: templates/js/translated/part.js:1744 templates/js/translated/stock.js:1234 +#: templates/js/translated/part.js:1751 templates/js/translated/stock.js:1242 msgid "Edit test result" msgstr "Modificare il risultato del test" -#: templates/js/translated/part.js:1745 templates/js/translated/stock.js:1235 +#: templates/js/translated/part.js:1752 templates/js/translated/stock.js:1243 msgid "Delete test result" msgstr "Cancellare il risultato del test" -#: templates/js/translated/part.js:1751 +#: templates/js/translated/part.js:1758 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:1773 +#: templates/js/translated/part.js:1780 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:1787 +#: templates/js/translated/part.js:1794 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:1812 +#: templates/js/translated/part.js:1819 #, python-brace-format msgid "No ${human_name} information found" msgstr "" -#: templates/js/translated/part.js:1867 +#: templates/js/translated/part.js:1874 #, python-brace-format msgid "Edit ${human_name}" msgstr "Modifica ${human_name}" -#: templates/js/translated/part.js:1868 +#: templates/js/translated/part.js:1875 #, python-brace-format msgid "Delete ${human_name}" msgstr "Elimina ${human_name}" -#: templates/js/translated/part.js:1969 +#: templates/js/translated/part.js:1976 msgid "Single Price" msgstr "Prezzo Singolo" -#: templates/js/translated/part.js:1988 +#: templates/js/translated/part.js:1995 msgid "Single Price Difference" msgstr "" @@ -8590,340 +8688,344 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:74 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:181 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:93 templates/js/translated/stock.js:175 +#: templates/js/translated/stock.js:94 templates/js/translated/stock.js:183 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:101 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:110 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "Posizione giacenza principale" -#: templates/js/translated/stock.js:146 +#: templates/js/translated/stock.js:154 msgid "New Stock Location" msgstr "Nuova posizione giacenza" -#: templates/js/translated/stock.js:186 +#: templates/js/translated/stock.js:194 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:225 +#: templates/js/translated/stock.js:233 msgid "Enter initial quantity for this stock item" msgstr "Inserisci quantità iniziale per questo articolo in giacenza" -#: templates/js/translated/stock.js:231 +#: templates/js/translated/stock.js:239 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "Inserire i numeri di serie per la nuova giacenza (o lasciare vuoto)" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:382 msgid "Created new stock item" msgstr "Crea nuova allocazione magazzino" -#: templates/js/translated/stock.js:387 +#: templates/js/translated/stock.js:395 msgid "Created multiple stock items" msgstr "Creato più elementi stock" -#: templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:420 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:416 templates/js/translated/stock.js:417 +#: templates/js/translated/stock.js:424 templates/js/translated/stock.js:425 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:433 +#: templates/js/translated/stock.js:441 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:453 +#: templates/js/translated/stock.js:461 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:462 +#: templates/js/translated/stock.js:470 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:515 msgid "Export Stock" msgstr "Esporta giacenza" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:526 msgid "Include Sublocations" msgstr "Includi sotto allocazioni" -#: templates/js/translated/stock.js:519 +#: templates/js/translated/stock.js:527 msgid "Include stock items in sublocations" msgstr "Includi elementi in giacenza nelle sottoallocazioni" -#: templates/js/translated/stock.js:628 +#: templates/js/translated/stock.js:636 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:629 +#: templates/js/translated/stock.js:637 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:714 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:715 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:709 +#: templates/js/translated/stock.js:717 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:710 +#: templates/js/translated/stock.js:718 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:796 +#: templates/js/translated/stock.js:804 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:797 +#: templates/js/translated/stock.js:805 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:892 +#: templates/js/translated/stock.js:900 msgid "Transfer Stock" msgstr "Trasferisci giacenza" -#: templates/js/translated/stock.js:893 +#: templates/js/translated/stock.js:901 msgid "Move" msgstr "Sposta" -#: templates/js/translated/stock.js:899 +#: templates/js/translated/stock.js:907 msgid "Count Stock" msgstr "Conta giacenza" -#: templates/js/translated/stock.js:900 +#: templates/js/translated/stock.js:908 msgid "Count" msgstr "Conta" -#: templates/js/translated/stock.js:904 +#: templates/js/translated/stock.js:912 msgid "Remove Stock" msgstr "Rimuovi giacenza" -#: templates/js/translated/stock.js:905 +#: templates/js/translated/stock.js:913 msgid "Take" msgstr "Prendi" -#: templates/js/translated/stock.js:909 +#: templates/js/translated/stock.js:917 msgid "Add Stock" msgstr "Aggiungi giacenza" -#: templates/js/translated/stock.js:910 users/models.py:206 +#: templates/js/translated/stock.js:918 users/models.py:208 msgid "Add" msgstr "Aggiungi" -#: templates/js/translated/stock.js:914 templates/stock_table.html:58 +#: templates/js/translated/stock.js:922 templates/stock_table.html:58 msgid "Delete Stock" msgstr "Elimina Stock" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Specify stock quantity" msgstr "Specificare la quantità di magazzino" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1051 msgid "You must select at least one available stock item" msgstr "Devi selezionare almeno un articolo disponibile" -#: templates/js/translated/stock.js:1201 +#: templates/js/translated/stock.js:1209 msgid "PASS" msgstr "PASS" -#: templates/js/translated/stock.js:1203 +#: templates/js/translated/stock.js:1211 msgid "FAIL" msgstr "FAIL" -#: templates/js/translated/stock.js:1208 +#: templates/js/translated/stock.js:1216 msgid "NO RESULT" msgstr "NESSUN RISULTATO" -#: templates/js/translated/stock.js:1230 +#: templates/js/translated/stock.js:1238 msgid "Add test result" msgstr "Aggiungi risultato test" -#: templates/js/translated/stock.js:1256 +#: templates/js/translated/stock.js:1264 msgid "No test results found" msgstr "Nessun risultato di prova trovato" -#: templates/js/translated/stock.js:1313 +#: templates/js/translated/stock.js:1321 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1428 msgid "In production" msgstr "In produzione" -#: templates/js/translated/stock.js:1424 +#: templates/js/translated/stock.js:1432 msgid "Installed in Stock Item" msgstr "Installato nell'elemento stock" -#: templates/js/translated/stock.js:1432 +#: templates/js/translated/stock.js:1440 msgid "Assigned to Sales Order" msgstr "Assegnato all'ordine di vendita" -#: templates/js/translated/stock.js:1438 +#: templates/js/translated/stock.js:1446 msgid "No stock location set" msgstr "Nessuna giacenza impostata" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1604 msgid "Stock item is in production" msgstr "L'articolo di magazzino è in produzione" -#: templates/js/translated/stock.js:1601 +#: templates/js/translated/stock.js:1609 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1604 +#: templates/js/translated/stock.js:1612 msgid "Stock item assigned to customer" msgstr "Articolo stock assegnato al cliente" -#: templates/js/translated/stock.js:1608 +#: templates/js/translated/stock.js:1616 msgid "Stock item has expired" msgstr "L'articolo stock è scaduto" -#: templates/js/translated/stock.js:1610 +#: templates/js/translated/stock.js:1618 msgid "Stock item will expire soon" msgstr "Articolo in giacenza prossimo alla scadenza" -#: templates/js/translated/stock.js:1616 +#: templates/js/translated/stock.js:1624 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1618 +#: templates/js/translated/stock.js:1626 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1620 +#: templates/js/translated/stock.js:1628 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1633 msgid "Stock item has been installed in another item" msgstr "L'elemento stock è stato installato in un altro articolo" -#: templates/js/translated/stock.js:1632 +#: templates/js/translated/stock.js:1640 msgid "Stock item has been rejected" msgstr "L'articolo stock è stato rifiutato" -#: templates/js/translated/stock.js:1634 +#: templates/js/translated/stock.js:1642 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1636 +#: templates/js/translated/stock.js:1644 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1648 #: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "Esaurito" -#: templates/js/translated/stock.js:1690 +#: templates/js/translated/stock.js:1698 msgid "Stocktake" msgstr "Inventario" -#: templates/js/translated/stock.js:1763 +#: templates/js/translated/stock.js:1771 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1809 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1822 templates/js/translated/stock.js:1870 +#: templates/js/translated/stock.js:1830 templates/js/translated/stock.js:1878 msgid "items" msgstr "elementi" -#: templates/js/translated/stock.js:1910 +#: templates/js/translated/stock.js:1918 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1937 +#: templates/js/translated/stock.js:1945 msgid "locations" msgstr "posizione" -#: templates/js/translated/stock.js:1939 +#: templates/js/translated/stock.js:1947 msgid "Undefined location" msgstr "Posizione non definita" -#: templates/js/translated/stock.js:2138 +#: templates/js/translated/stock.js:2146 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2152 +#: templates/js/translated/stock.js:2160 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2153 +#: templates/js/translated/stock.js:2161 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2377 +#: templates/js/translated/stock.js:2340 +msgid "Allocated Quantity" +msgstr "" + +#: templates/js/translated/stock.js:2535 msgid "Invalid date" msgstr "Data non valida" -#: templates/js/translated/stock.js:2399 +#: templates/js/translated/stock.js:2557 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2424 +#: templates/js/translated/stock.js:2582 msgid "Location no longer exists" msgstr "La posizione non esiste più" -#: templates/js/translated/stock.js:2443 +#: templates/js/translated/stock.js:2601 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2462 +#: templates/js/translated/stock.js:2620 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2480 +#: templates/js/translated/stock.js:2638 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2503 +#: templates/js/translated/stock.js:2661 msgid "Added" msgstr "Aggiunto" -#: templates/js/translated/stock.js:2511 +#: templates/js/translated/stock.js:2669 msgid "Removed" msgstr "Rimosso" -#: templates/js/translated/stock.js:2552 +#: templates/js/translated/stock.js:2710 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2553 +#: templates/js/translated/stock.js:2711 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2604 +#: templates/js/translated/stock.js:2762 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2655 +#: templates/js/translated/stock.js:2813 msgid "Uninstall Stock Item" msgstr "" @@ -9195,11 +9297,11 @@ msgstr "Acquista" msgid "Sell" msgstr "Vendi" -#: templates/navbar.html:113 +#: templates/navbar.html:114 msgid "Logout" msgstr "Esci" -#: templates/navbar.html:115 +#: templates/navbar.html:116 msgid "Login" msgstr "Accedi" @@ -9247,31 +9349,43 @@ msgstr "Modalità Docker" msgid "Server is deployed using docker" msgstr "Il server è distribuito utilizzando docker" -#: templates/stats.html:40 +#: templates/stats.html:39 +msgid "Plugin Support" +msgstr "" + +#: templates/stats.html:43 +msgid "Plugin support enabled" +msgstr "" + +#: templates/stats.html:45 +msgid "Plugin support disabled" +msgstr "" + +#: templates/stats.html:52 msgid "Server status" msgstr "Stato del Server" -#: templates/stats.html:43 +#: templates/stats.html:55 msgid "Healthy" msgstr "Healthy" -#: templates/stats.html:45 +#: templates/stats.html:57 msgid "Issues detected" msgstr "Problemi rilevati" -#: templates/stats.html:52 +#: templates/stats.html:64 msgid "Background Worker" msgstr "" -#: templates/stats.html:55 +#: templates/stats.html:67 msgid "Background worker not running" msgstr "Processo in background non in esecuzione" -#: templates/stats.html:63 +#: templates/stats.html:75 msgid "Email Settings" msgstr "Email Settings" -#: templates/stats.html:66 +#: templates/stats.html:78 msgid "Email settings not configured" msgstr "Impostazioni dell'email non configurate" @@ -9367,35 +9481,35 @@ msgstr "Permessi" msgid "Important dates" msgstr "Date Importanti" -#: users/models.py:193 +#: users/models.py:195 msgid "Permission set" msgstr "Impostazione autorizzazioni" -#: users/models.py:201 +#: users/models.py:203 msgid "Group" msgstr "Gruppo" -#: users/models.py:204 +#: users/models.py:206 msgid "View" msgstr "Visualizza" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to view items" msgstr "Autorizzazione a visualizzare gli articoli" -#: users/models.py:206 +#: users/models.py:208 msgid "Permission to add items" msgstr "Autorizzazione ad aggiungere elementi" -#: users/models.py:208 +#: users/models.py:210 msgid "Change" msgstr "Modificare" -#: users/models.py:208 +#: users/models.py:210 msgid "Permissions to edit items" msgstr "Permessi per modificare gli elementi" -#: users/models.py:210 +#: users/models.py:212 msgid "Permission to delete items" msgstr "Autorizzazione ad eliminare gli elementi" diff --git a/InvenTree/locale/ja/LC_MESSAGES/django.po b/InvenTree/locale/ja/LC_MESSAGES/django.po index 7dff99a148..463b23c3cf 100644 --- a/InvenTree/locale/ja/LC_MESSAGES/django.po +++ b/InvenTree/locale/ja/LC_MESSAGES/django.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-10 03:54+0000\n" -"PO-Revision-Date: 2022-01-10 03:58\n" +"POT-Creation-Date: 2022-01-29 00:17+0000\n" +"PO-Revision-Date: 2022-01-29 01:11\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -18,15 +18,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 138\n" -#: InvenTree/api.py:64 +#: InvenTree/api.py:55 msgid "API endpoint not found" msgstr "APIエンドポイントが見つかりません" -#: InvenTree/api.py:110 +#: InvenTree/api.py:101 msgid "No action specified" msgstr "アクションが指定されていません" -#: InvenTree/api.py:124 +#: InvenTree/api.py:116 msgid "No matching action found" msgstr "一致するアクションが見つかりませんでした" @@ -80,41 +80,41 @@ msgstr "" msgid "You must type the same email each time." msgstr "" -#: InvenTree/helpers.py:437 +#: InvenTree/helpers.py:439 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:444 order/models.py:279 order/models.py:420 +#: InvenTree/helpers.py:446 order/models.py:282 order/models.py:425 #: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "数量コードが無効です" -#: InvenTree/helpers.py:447 +#: InvenTree/helpers.py:449 msgid "Empty serial number string" msgstr "シリアル番号は空です" -#: InvenTree/helpers.py:469 InvenTree/helpers.py:472 InvenTree/helpers.py:475 -#: InvenTree/helpers.py:500 +#: InvenTree/helpers.py:471 InvenTree/helpers.py:474 InvenTree/helpers.py:477 +#: InvenTree/helpers.py:502 #, python-brace-format msgid "Invalid group: {g}" msgstr "無効なグループ: {g}" -#: InvenTree/helpers.py:510 +#: InvenTree/helpers.py:512 #, python-brace-format msgid "Invalid group {group}" msgstr "" -#: InvenTree/helpers.py:516 +#: InvenTree/helpers.py:518 #, python-brace-format msgid "Invalid/no group {group}" msgstr "" -#: InvenTree/helpers.py:522 +#: InvenTree/helpers.py:524 msgid "No serial numbers found" msgstr "シリアル番号が見つかりません" -#: InvenTree/helpers.py:526 +#: InvenTree/helpers.py:528 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" @@ -127,7 +127,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1967 +#: InvenTree/models.py:132 stock/models.py:1995 #: templates/js/translated/attachment.js:119 msgid "Attachment" msgstr "添付ファイル" @@ -137,15 +137,15 @@ msgid "Select file to attach" msgstr "添付ファイルを選択" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:124 part/models.py:828 +#: company/models.py:564 order/models.py:127 part/models.py:830 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:540 -#: templates/js/translated/company.js:829 templates/js/translated/part.js:1317 +#: templates/js/translated/company.js:829 templates/js/translated/part.js:1324 msgid "Link" msgstr "" -#: InvenTree/models.py:140 build/models.py:330 part/models.py:829 -#: stock/models.py:527 +#: InvenTree/models.py:140 build/models.py:332 part/models.py:831 +#: stock/models.py:529 msgid "Link to external URL" msgstr "" @@ -157,10 +157,11 @@ msgstr "コメント:" msgid "File comment" msgstr "ファイルコメント" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 -#: common/models.py:1214 part/models.py:2258 part/models.py:2278 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1223 +#: common/models.py:1224 common/models.py:1452 common/models.py:1453 +#: part/models.py:2265 part/models.py:2285 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2534 +#: templates/js/translated/stock.js:2692 msgid "User" msgstr "ユーザー" @@ -197,42 +198,42 @@ msgstr "" msgid "Invalid choice" msgstr "無効な選択です" -#: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 -#: label/models.py:112 part/models.py:772 part/models.py:2442 -#: plugin/models.py:40 report/models.py:181 +#: InvenTree/models.py:277 InvenTree/models.py:278 common/models.py:1438 +#: company/models.py:415 label/models.py:112 part/models.py:774 +#: part/models.py:2449 plugin/models.py:40 report/models.py:181 #: templates/InvenTree/settings/mixins/urls.html:13 -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:125 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:279 -#: templates/js/translated/company.js:641 templates/js/translated/part.js:561 -#: templates/js/translated/part.js:700 templates/js/translated/part.js:1624 -#: templates/js/translated/stock.js:2327 +#: templates/InvenTree/settings/settings.html:282 +#: templates/js/translated/company.js:641 templates/js/translated/part.js:567 +#: templates/js/translated/part.js:706 templates/js/translated/part.js:1631 +#: templates/js/translated/stock.js:2485 msgid "Name" msgstr "お名前" -#: InvenTree/models.py:284 build/models.py:207 +#: InvenTree/models.py:284 build/models.py:209 #: build/templates/build/detail.html:25 company/models.py:354 #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:122 part/models.py:795 part/templates/part/category.html:74 +#: order/models.py:125 part/models.py:797 part/templates/part/category.html:74 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 #: stock/templates/stock/location.html:93 #: templates/InvenTree/settings/plugin_settings.html:33 -#: templates/js/translated/bom.js:327 templates/js/translated/bom.js:540 +#: templates/js/translated/bom.js:339 templates/js/translated/bom.js:552 #: templates/js/translated/build.js:1682 templates/js/translated/company.js:345 #: templates/js/translated/company.js:551 #: templates/js/translated/company.js:840 templates/js/translated/order.js:836 #: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 -#: templates/js/translated/part.js:620 templates/js/translated/part.js:992 -#: templates/js/translated/part.js:1077 templates/js/translated/part.js:1247 -#: templates/js/translated/part.js:1643 templates/js/translated/part.js:1712 -#: templates/js/translated/stock.js:1569 templates/js/translated/stock.js:2339 -#: templates/js/translated/stock.js:2384 +#: templates/js/translated/part.js:626 templates/js/translated/part.js:999 +#: templates/js/translated/part.js:1084 templates/js/translated/part.js:1254 +#: templates/js/translated/part.js:1650 templates/js/translated/part.js:1719 +#: templates/js/translated/stock.js:1577 templates/js/translated/stock.js:2314 +#: templates/js/translated/stock.js:2497 templates/js/translated/stock.js:2542 msgid "Description" msgstr "説明" @@ -244,7 +245,7 @@ msgstr "説明 (オプション)" msgid "parent" msgstr "親" -#: InvenTree/serializers.py:65 part/models.py:2727 +#: InvenTree/serializers.py:65 part/models.py:2734 msgid "Must be a valid number" msgstr "有効な数字でなければなりません" @@ -252,83 +253,83 @@ msgstr "有効な数字でなければなりません" msgid "Filename" msgstr "" -#: InvenTree/settings.py:663 +#: InvenTree/settings.py:661 msgid "German" msgstr "ドイツ語" -#: InvenTree/settings.py:664 +#: InvenTree/settings.py:662 msgid "Greek" msgstr "" -#: InvenTree/settings.py:665 +#: InvenTree/settings.py:663 msgid "English" msgstr "英語" -#: InvenTree/settings.py:666 +#: InvenTree/settings.py:664 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:667 +#: InvenTree/settings.py:665 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:668 +#: InvenTree/settings.py:666 msgid "French" msgstr "フランス語" -#: InvenTree/settings.py:669 +#: InvenTree/settings.py:667 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:668 msgid "Italian" msgstr "" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:669 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:670 msgid "Korean" msgstr "" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:671 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:672 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:673 msgid "Polish" msgstr "ポーランド語" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:674 msgid "Portugese" msgstr "" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:675 msgid "Russian" msgstr "" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:676 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:677 msgid "Thai" msgstr "" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:678 msgid "Turkish" msgstr "トルコ語" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:679 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:680 msgid "Chinese" msgstr "" @@ -374,7 +375,7 @@ msgstr "紛失" msgid "Returned" msgstr "返品済" -#: InvenTree/status_codes.py:143 order/models.py:941 +#: InvenTree/status_codes.py:143 order/models.py:961 #: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "発送済み" @@ -455,7 +456,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2064 +#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2072 msgid "Merged stock items" msgstr "" @@ -543,56 +544,56 @@ msgstr "" msgid "System Information" msgstr "" -#: barcodes/api.py:54 barcodes/api.py:151 +#: barcodes/api.py:54 barcodes/api.py:152 msgid "Must provide barcode_data parameter" msgstr "" -#: barcodes/api.py:127 +#: barcodes/api.py:128 msgid "No match found for barcode data" msgstr "" -#: barcodes/api.py:129 +#: barcodes/api.py:130 msgid "Match found for barcode data" msgstr "" -#: barcodes/api.py:154 +#: barcodes/api.py:155 msgid "Must provide stockitem parameter" msgstr "" -#: barcodes/api.py:161 +#: barcodes/api.py:162 msgid "No matching stock item found" msgstr "" -#: barcodes/api.py:191 +#: barcodes/api.py:193 msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:195 +#: barcodes/api.py:197 msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:199 +#: barcodes/api.py:201 msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:205 barcodes/api.py:217 +#: barcodes/api.py:207 barcodes/api.py:219 msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:223 +#: barcodes/api.py:225 msgid "Barcode associated with Stock Item" msgstr "" -#: build/forms.py:36 build/models.py:1286 +#: build/forms.py:36 build/models.py:1293 #: build/templates/build/build_base.html:82 -#: build/templates/build/detail.html:35 common/models.py:1253 +#: build/templates/build/detail.html:35 common/models.py:1263 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/models.py:796 order/models.py:1207 order/serializers.py:810 +#: order/models.py:805 order/models.py:1229 order/serializers.py:816 #: order/templates/order/order_wizard/match_parts.html:30 -#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:145 -#: part/forms.py:161 part/forms.py:177 part/models.py:2629 +#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:144 +#: part/forms.py:160 part/forms.py:176 part/models.py:2636 #: part/templates/part/bom_upload/match_parts.html:31 -#: part/templates/part/detail.html:962 part/templates/part/detail.html:1048 +#: part/templates/part/detail.html:992 part/templates/part/detail.html:1078 #: part/templates/part/part_pricing.html:16 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 @@ -603,7 +604,7 @@ msgstr "" #: stock/templates/stock/item_base.html:181 #: stock/templates/stock/item_base.html:262 #: stock/templates/stock/item_base.html:270 -#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:555 +#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:567 #: templates/js/translated/build.js:295 templates/js/translated/build.js:495 #: templates/js/translated/build.js:689 templates/js/translated/build.js:699 #: templates/js/translated/build.js:1075 templates/js/translated/build.js:1422 @@ -611,11 +612,11 @@ msgstr "" #: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 #: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 #: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 -#: templates/js/translated/order.js:2150 templates/js/translated/part.js:900 -#: templates/js/translated/part.js:1855 templates/js/translated/part.js:1978 -#: templates/js/translated/part.js:2056 templates/js/translated/stock.js:383 -#: templates/js/translated/stock.js:580 templates/js/translated/stock.js:750 -#: templates/js/translated/stock.js:2519 templates/js/translated/stock.js:2621 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:906 +#: templates/js/translated/part.js:1862 templates/js/translated/part.js:1985 +#: templates/js/translated/part.js:2063 templates/js/translated/stock.js:391 +#: templates/js/translated/stock.js:588 templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2779 msgid "Quantity" msgstr "" @@ -623,9 +624,9 @@ msgstr "" msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 -#: stock/serializers.py:314 templates/js/translated/stock.js:230 -#: templates/js/translated/stock.js:384 +#: build/forms.py:41 order/serializers.py:820 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:238 +#: templates/js/translated/stock.js:392 msgid "Serial Numbers" msgstr "" @@ -649,18 +650,18 @@ msgstr "" msgid "Confirm build cancellation" msgstr "" -#: build/models.py:133 +#: build/models.py:135 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:137 build/templates/build/build_base.html:9 +#: build/models.py:139 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:457 +#: templates/js/translated/build.js:457 templates/js/translated/stock.js:2290 msgid "Build Order" msgstr "" -#: build/models.py:138 build/templates/build/build_base.html:13 +#: build/models.py:140 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:92 #: order/templates/order/so_sidebar.html:13 @@ -670,40 +671,40 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:198 +#: build/models.py:200 msgid "Build Order Reference" msgstr "" -#: build/models.py:199 order/models.py:210 order/models.py:536 -#: order/models.py:803 part/models.py:2638 +#: build/models.py:201 order/models.py:213 order/models.py:541 +#: order/models.py:812 part/models.py:2645 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:547 templates/js/translated/build.js:1179 +#: templates/js/translated/bom.js:559 templates/js/translated/build.js:1179 #: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "" -#: build/models.py:210 +#: build/models.py:212 msgid "Brief description of the build" msgstr "" -#: build/models.py:219 build/templates/build/build_base.html:164 +#: build/models.py:221 build/templates/build/build_base.html:164 #: build/templates/build/detail.html:88 msgid "Parent Build" msgstr "" -#: build/models.py:220 +#: build/models.py:222 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:225 build/templates/build/build_base.html:77 +#: build/models.py:227 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:856 order/models.py:930 -#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 -#: part/models.py:2204 part/models.py:2220 part/models.py:2239 -#: part/models.py:2256 part/models.py:2358 part/models.py:2480 -#: part/models.py:2613 part/models.py:2920 part/serializers.py:658 +#: order/models.py:876 order/models.py:950 +#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:359 +#: part/models.py:2211 part/models.py:2227 part/models.py:2246 +#: part/models.py:2263 part/models.py:2365 part/models.py:2487 +#: part/models.py:2620 part/models.py:2927 part/serializers.py:658 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/set_category.html:13 @@ -713,205 +714,205 @@ msgstr "" #: templates/InvenTree/search.html:80 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 -#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:326 -#: templates/js/translated/bom.js:505 templates/js/translated/build.js:680 +#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:338 +#: templates/js/translated/bom.js:517 templates/js/translated/build.js:680 #: templates/js/translated/build.js:1048 templates/js/translated/build.js:1419 #: templates/js/translated/build.js:1687 templates/js/translated/company.js:492 #: templates/js/translated/company.js:749 templates/js/translated/order.js:84 #: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 #: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 -#: templates/js/translated/order.js:2128 templates/js/translated/part.js:977 -#: templates/js/translated/part.js:1058 templates/js/translated/part.js:1225 -#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:719 -#: templates/js/translated/stock.js:926 templates/js/translated/stock.js:1526 -#: templates/js/translated/stock.js:2609 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:984 +#: templates/js/translated/part.js:1065 templates/js/translated/part.js:1232 +#: templates/js/translated/stock.js:562 templates/js/translated/stock.js:727 +#: templates/js/translated/stock.js:934 templates/js/translated/stock.js:1534 +#: templates/js/translated/stock.js:2767 msgid "Part" msgstr "パーツ" -#: build/models.py:233 +#: build/models.py:235 msgid "Select part to build" msgstr "" -#: build/models.py:238 +#: build/models.py:240 msgid "Sales Order Reference" msgstr "" -#: build/models.py:242 +#: build/models.py:244 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1407 +#: build/models.py:249 templates/js/translated/build.js:1407 #: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "" -#: build/models.py:251 +#: build/models.py:253 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:256 +#: build/models.py:258 msgid "Destination Location" msgstr "" -#: build/models.py:260 +#: build/models.py:262 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:264 +#: build/models.py:266 msgid "Build Quantity" msgstr "" -#: build/models.py:267 +#: build/models.py:269 msgid "Number of stock items to build" msgstr "" -#: build/models.py:271 +#: build/models.py:273 msgid "Completed items" msgstr "" -#: build/models.py:273 +#: build/models.py:275 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:277 part/templates/part/part_base.html:234 +#: build/models.py:279 part/templates/part/part_base.html:234 msgid "Build Status" msgstr "" -#: build/models.py:281 +#: build/models.py:283 msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:531 +#: build/models.py:287 stock/models.py:533 msgid "Batch Code" msgstr "" -#: build/models.py:289 +#: build/models.py:291 msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:126 part/models.py:967 +#: build/models.py:294 order/models.py:129 part/models.py:969 #: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "" -#: build/models.py:296 order/models.py:558 +#: build/models.py:298 order/models.py:563 msgid "Target completion date" msgstr "" -#: build/models.py:297 +#: build/models.py:299 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:252 +#: build/models.py:302 order/models.py:255 #: templates/js/translated/build.js:1758 msgid "Completion Date" msgstr "" -#: build/models.py:306 +#: build/models.py:308 msgid "completed by" msgstr "" -#: build/models.py:314 templates/js/translated/build.js:1729 +#: build/models.py:316 templates/js/translated/build.js:1729 msgid "Issued by" msgstr "" -#: build/models.py:315 +#: build/models.py:317 msgid "User who issued this build order" msgstr "" -#: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:140 +#: build/models.py:325 build/templates/build/build_base.html:185 +#: build/templates/build/detail.html:116 order/models.py:143 #: order/templates/order/order_base.html:170 -#: order/templates/order/sales_order_base.html:182 part/models.py:971 +#: order/templates/order/sales_order_base.html:182 part/models.py:973 #: report/templates/report/inventree_build_order_base.html:159 #: templates/js/translated/build.js:1741 templates/js/translated/order.js:864 msgid "Responsible" msgstr "" -#: build/models.py:324 +#: build/models.py:326 msgid "User responsible for this build order" msgstr "" -#: build/models.py:329 build/templates/build/detail.html:102 +#: build/models.py:331 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:525 +#: part/templates/part/part_base.html:354 stock/models.py:527 #: stock/templates/stock/item_base.html:373 msgid "External Link" msgstr "" -#: build/models.py:334 build/serializers.py:201 +#: build/models.py:336 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:144 order/models.py:805 order/models.py:1051 +#: order/models.py:147 order/models.py:814 order/models.py:1071 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/models.py:956 -#: part/templates/part/detail.html:120 part/templates/part/part_sidebar.html:50 +#: order/templates/order/so_sidebar.html:17 part/models.py:958 +#: part/templates/part/detail.html:137 part/templates/part/part_sidebar.html:54 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:597 -#: stock/models.py:1867 stock/models.py:1973 stock/serializers.py:332 -#: stock/serializers.py:639 stock/serializers.py:737 stock/serializers.py:869 -#: stock/templates/stock/stock_sidebar.html:21 -#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:711 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:599 +#: stock/models.py:1895 stock/models.py:2001 stock/serializers.py:332 +#: stock/serializers.py:640 stock/serializers.py:738 stock/serializers.py:870 +#: stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:723 #: templates/js/translated/company.js:845 templates/js/translated/order.js:1149 #: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 -#: templates/js/translated/stock.js:1309 templates/js/translated/stock.js:1795 +#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1803 msgid "Notes" msgstr "" -#: build/models.py:335 +#: build/models.py:337 msgid "Extra build notes" msgstr "" -#: build/models.py:710 +#: build/models.py:717 msgid "No build output specified" msgstr "" -#: build/models.py:713 +#: build/models.py:720 msgid "Build output is already completed" msgstr "" -#: build/models.py:716 +#: build/models.py:723 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1108 +#: build/models.py:1115 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1117 +#: build/models.py:1124 #, python-brace-format msgid "Allocated quantity ({q}) must not execed available stock quantity ({a})" msgstr "" -#: build/models.py:1127 +#: build/models.py:1134 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:1167 +#: build/models.py:1140 order/models.py:1189 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1139 +#: build/models.py:1146 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1196 +#: build/models.py:1203 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1256 stock/templates/stock/item_base.html:345 +#: build/models.py:1263 stock/templates/stock/item_base.html:345 #: templates/InvenTree/search.html:137 templates/js/translated/build.js:1660 #: templates/navbar.html:35 msgid "Build" msgstr "" -#: build/models.py:1257 +#: build/models.py:1264 msgid "Build to allocate parts" msgstr "パーツを割り当てるためにビルドする" -#: build/models.py:1273 build/serializers.py:388 order/serializers.py:690 -#: order/serializers.py:708 stock/serializers.py:577 stock/serializers.py:695 +#: build/models.py:1280 build/serializers.py:388 order/serializers.py:696 +#: order/serializers.py:714 stock/serializers.py:578 stock/serializers.py:696 #: stock/templates/stock/item_base.html:9 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:367 @@ -920,24 +921,24 @@ msgstr "パーツを割り当てるためにビルドする" #: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 #: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 #: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 -#: templates/js/translated/stock.js:555 templates/js/translated/stock.js:720 -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:563 templates/js/translated/stock.js:728 +#: templates/js/translated/stock.js:2628 msgid "Stock Item" msgstr "" -#: build/models.py:1274 +#: build/models.py:1281 msgid "Source stock item" msgstr "" -#: build/models.py:1287 +#: build/models.py:1294 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1295 +#: build/models.py:1302 msgid "Install into" msgstr "" -#: build/models.py:1296 +#: build/models.py:1303 msgid "Destination stock item" msgstr "" @@ -962,16 +963,16 @@ msgid "This build output is not fully allocated" msgstr "" #: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 -#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:730 -#: stock/serializers.py:971 stock/templates/stock/item_base.html:313 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:731 +#: stock/serializers.py:972 stock/templates/stock/item_base.html:313 #: templates/js/translated/barcode.js:384 #: templates/js/translated/barcode.js:557 templates/js/translated/build.js:480 #: templates/js/translated/build.js:1087 templates/js/translated/order.js:508 #: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 #: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 -#: templates/js/translated/part.js:179 templates/js/translated/stock.js:556 -#: templates/js/translated/stock.js:721 templates/js/translated/stock.js:928 -#: templates/js/translated/stock.js:1676 templates/js/translated/stock.js:2411 +#: templates/js/translated/part.js:179 templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:729 templates/js/translated/stock.js:936 +#: templates/js/translated/stock.js:1684 templates/js/translated/stock.js:2569 msgid "Location" msgstr "" @@ -980,12 +981,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:552 +#: build/templates/build/detail.html:63 order/models.py:557 #: order/serializers.py:247 stock/templates/stock/item_base.html:187 #: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1716 #: templates/js/translated/order.js:591 templates/js/translated/order.js:840 -#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1651 -#: templates/js/translated/stock.js:2488 templates/js/translated/stock.js:2637 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1659 +#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2795 msgid "Status" msgstr "" @@ -1021,8 +1022,8 @@ msgstr "" msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:313 build/serializers.py:362 part/models.py:2753 -#: part/models.py:2912 +#: build/serializers.py:313 build/serializers.py:362 part/models.py:2760 +#: part/models.py:2919 msgid "BOM Item" msgstr "" @@ -1038,16 +1039,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:394 stock/serializers.py:584 +#: build/serializers.py:394 stock/serializers.py:585 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:408 order/models.py:277 order/serializers.py:240 -#: stock/models.py:365 stock/models.py:1077 stock/serializers.py:305 +#: build/serializers.py:408 order/models.py:280 order/serializers.py:240 +#: stock/models.py:367 stock/models.py:1105 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:450 order/serializers.py:741 +#: build/serializers.py:450 order/serializers.py:747 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1060,7 +1061,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:491 order/serializers.py:984 +#: build/serializers.py:491 order/serializers.py:990 msgid "Allocation items must be provided" msgstr "" @@ -1164,13 +1165,13 @@ msgid "Completed" msgstr "" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:927 -#: order/models.py:1023 order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:947 +#: order/models.py:1043 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:307 -#: templates/js/translated/order.js:1218 +#: templates/js/translated/order.js:1218 templates/js/translated/stock.js:2304 msgid "Sales Order" msgstr "" @@ -1224,7 +1225,7 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:878 stock/forms.py:136 +#: build/templates/build/detail.html:50 order/models.py:898 stock/forms.py:136 #: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1239,7 +1240,7 @@ msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:331 -#: templates/js/translated/stock.js:1665 templates/js/translated/stock.js:2644 +#: templates/js/translated/stock.js:1673 templates/js/translated/stock.js:2802 #: templates/js/translated/table_filters.js:151 #: templates/js/translated/table_filters.js:238 msgid "Batch" @@ -1343,9 +1344,9 @@ msgstr "" #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 #: order/templates/order/sales_order_detail.html:107 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:196 -#: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 -#: stock/templates/stock/stock_sidebar.html:19 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:213 +#: part/templates/part/part_sidebar.html:52 stock/templates/stock/item.html:112 +#: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" @@ -1360,8 +1361,8 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:108 #: order/templates/order/sales_order_detail.html:127 #: order/templates/order/sales_order_detail.html:186 -#: part/templates/part/detail.html:124 stock/templates/stock/item.html:115 -#: stock/templates/stock/item.html:205 +#: part/templates/part/detail.html:141 stock/templates/stock/item.html:132 +#: stock/templates/stock/item.html:235 msgid "Edit Notes" msgstr "" @@ -1373,7 +1374,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:303 +#: build/templates/build/index.html:18 part/templates/part/detail.html:320 msgid "New Build Order" msgstr "" @@ -1453,23 +1454,23 @@ msgstr "" msgid "Delete Build Order" msgstr "" -#: common/files.py:67 +#: common/files.py:65 msgid "Unsupported file format: {ext.upper()}" msgstr "" -#: common/files.py:69 +#: common/files.py:67 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:74 +#: common/files.py:72 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:76 +#: common/files.py:74 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:78 +#: common/files.py:76 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1490,740 +1491,828 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:344 common/models.py:998 common/models.py:1206 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:352 +msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:346 +#: common/models.py:354 msgid "Settings value" msgstr "" -#: common/models.py:380 +#: common/models.py:388 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:400 +#: common/models.py:408 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:411 +#: common/models.py:419 msgid "Value must be an integer value" msgstr "" -#: common/models.py:434 +#: common/models.py:442 msgid "Key string must be unique" msgstr "" -#: common/models.py:553 +#: common/models.py:561 msgid "No group" msgstr "" -#: common/models.py:595 +#: common/models.py:603 msgid "Restart required" msgstr "" -#: common/models.py:596 +#: common/models.py:604 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:603 +#: common/models.py:611 msgid "InvenTree Instance Name" msgstr "" -#: common/models.py:605 +#: common/models.py:613 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:609 +#: common/models.py:617 msgid "Use instance name" msgstr "" -#: common/models.py:610 +#: common/models.py:618 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:616 company/models.py:100 company/models.py:101 +#: common/models.py:624 company/models.py:100 company/models.py:101 msgid "Company name" msgstr "" -#: common/models.py:617 +#: common/models.py:625 msgid "Internal company name" msgstr "" -#: common/models.py:622 +#: common/models.py:630 msgid "Base URL" msgstr "" -#: common/models.py:623 +#: common/models.py:631 msgid "Base URL for server instance" msgstr "" -#: common/models.py:629 +#: common/models.py:637 msgid "Default Currency" msgstr "" -#: common/models.py:630 +#: common/models.py:638 msgid "Default currency" msgstr "" -#: common/models.py:636 +#: common/models.py:644 msgid "Download from URL" msgstr "" -#: common/models.py:637 +#: common/models.py:645 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:643 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:651 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:644 +#: common/models.py:652 msgid "Enable barcode scanner support" msgstr "" -#: common/models.py:650 +#: common/models.py:658 msgid "IPN Regex" msgstr "" -#: common/models.py:651 +#: common/models.py:659 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:655 +#: common/models.py:663 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:656 +#: common/models.py:664 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:662 +#: common/models.py:670 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:663 +#: common/models.py:671 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:669 +#: common/models.py:677 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:670 +#: common/models.py:678 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:676 +#: common/models.py:684 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:677 +#: common/models.py:685 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:683 +#: common/models.py:691 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:684 +#: common/models.py:692 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:690 +#: common/models.py:698 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:691 +#: common/models.py:699 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:697 part/models.py:2482 report/models.py:187 +#: common/models.py:705 part/models.py:2489 report/models.py:187 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:422 msgid "Template" msgstr "テンプレート" -#: common/models.py:698 +#: common/models.py:706 msgid "Parts are templates by default" msgstr "パーツはデフォルトのテンプレートです" -#: common/models.py:704 part/models.py:919 templates/js/translated/bom.js:1068 +#: common/models.py:712 part/models.py:921 templates/js/translated/bom.js:1082 #: templates/js/translated/table_filters.js:168 #: templates/js/translated/table_filters.js:434 msgid "Assembly" msgstr "アセンブリ" -#: common/models.py:705 +#: common/models.py:713 msgid "Parts can be assembled from other components by default" msgstr "パーツはデフォルトで他のコンポーネントから組み立てることができます" -#: common/models.py:711 part/models.py:925 +#: common/models.py:719 part/models.py:927 #: templates/js/translated/table_filters.js:438 msgid "Component" msgstr "コンポーネント" -#: common/models.py:712 +#: common/models.py:720 msgid "Parts can be used as sub-components by default" msgstr "パーツはデフォルトでサブコンポーネントとして使用できます" -#: common/models.py:718 part/models.py:936 +#: common/models.py:726 part/models.py:938 msgid "Purchaseable" msgstr "購入可能" -#: common/models.py:719 +#: common/models.py:727 msgid "Parts are purchaseable by default" msgstr "パーツはデフォルトで購入可能です" -#: common/models.py:725 part/models.py:941 +#: common/models.py:733 part/models.py:943 #: templates/js/translated/table_filters.js:446 msgid "Salable" msgstr "" -#: common/models.py:726 +#: common/models.py:734 msgid "Parts are salable by default" msgstr "パーツはデフォルトで販売可能です" -#: common/models.py:732 part/models.py:931 +#: common/models.py:740 part/models.py:933 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 #: templates/js/translated/table_filters.js:450 msgid "Trackable" msgstr "追跡可能" -#: common/models.py:733 +#: common/models.py:741 msgid "Parts are trackable by default" msgstr "パーツはデフォルトで追跡可能です" -#: common/models.py:739 part/models.py:951 +#: common/models.py:747 part/models.py:953 #: part/templates/part/part_base.html:147 #: templates/js/translated/table_filters.js:42 msgid "Virtual" msgstr "" -#: common/models.py:740 +#: common/models.py:748 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:746 +#: common/models.py:754 msgid "Show Import in Views" msgstr "" -#: common/models.py:747 +#: common/models.py:755 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:753 +#: common/models.py:761 msgid "Show Price in Forms" msgstr "" -#: common/models.py:754 +#: common/models.py:762 msgid "Display part price in some forms" msgstr "" -#: common/models.py:765 +#: common/models.py:773 msgid "Show Price in BOM" msgstr "" -#: common/models.py:766 +#: common/models.py:774 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:772 +#: common/models.py:780 msgid "Show related parts" msgstr "" -#: common/models.py:773 +#: common/models.py:781 msgid "Display related parts for a part" msgstr "" -#: common/models.py:779 +#: common/models.py:787 msgid "Create initial stock" msgstr "" -#: common/models.py:780 +#: common/models.py:788 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:786 +#: common/models.py:794 msgid "Internal Prices" msgstr "" -#: common/models.py:787 +#: common/models.py:795 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:793 +#: common/models.py:801 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:794 +#: common/models.py:802 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:800 +#: common/models.py:808 msgid "Part Name Display Format" msgstr "" -#: common/models.py:801 +#: common/models.py:809 msgid "Format to display the part name" msgstr "" -#: common/models.py:808 +#: common/models.py:816 msgid "Enable Reports" msgstr "" -#: common/models.py:809 +#: common/models.py:817 msgid "Enable generation of reports" msgstr "" -#: common/models.py:815 templates/stats.html:25 +#: common/models.py:823 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:816 +#: common/models.py:824 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:822 +#: common/models.py:830 msgid "Page Size" msgstr "" -#: common/models.py:823 +#: common/models.py:831 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:833 +#: common/models.py:841 msgid "Test Reports" msgstr "" -#: common/models.py:834 +#: common/models.py:842 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:840 +#: common/models.py:848 msgid "Stock Expiry" msgstr "" -#: common/models.py:841 +#: common/models.py:849 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:847 +#: common/models.py:855 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:848 +#: common/models.py:856 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:854 +#: common/models.py:862 msgid "Stock Stale Time" msgstr "" -#: common/models.py:855 +#: common/models.py:863 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:857 +#: common/models.py:865 msgid "days" msgstr "" -#: common/models.py:862 +#: common/models.py:870 msgid "Build Expired Stock" msgstr "" -#: common/models.py:863 +#: common/models.py:871 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:869 +#: common/models.py:877 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:870 +#: common/models.py:878 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:876 -msgid "Group by Part" -msgstr "" - -#: common/models.py:877 -msgid "Group stock items by part reference in table views" -msgstr "" - -#: common/models.py:883 +#: common/models.py:884 msgid "Build Order Reference Prefix" msgstr "" -#: common/models.py:884 +#: common/models.py:885 msgid "Prefix value for build order reference" msgstr "" -#: common/models.py:889 +#: common/models.py:890 msgid "Build Order Reference Regex" msgstr "" -#: common/models.py:890 +#: common/models.py:891 msgid "Regular expression pattern for matching build order reference" msgstr "" -#: common/models.py:894 +#: common/models.py:895 msgid "Sales Order Reference Prefix" msgstr "" -#: common/models.py:895 +#: common/models.py:896 msgid "Prefix value for sales order reference" msgstr "" -#: common/models.py:900 +#: common/models.py:901 msgid "Purchase Order Reference Prefix" msgstr "" -#: common/models.py:901 +#: common/models.py:902 msgid "Prefix value for purchase order reference" msgstr "" -#: common/models.py:907 +#: common/models.py:908 msgid "Enable password forgot" msgstr "" -#: common/models.py:908 +#: common/models.py:909 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:913 +#: common/models.py:914 msgid "Enable registration" msgstr "" -#: common/models.py:914 +#: common/models.py:915 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:919 +#: common/models.py:920 msgid "Enable SSO" msgstr "" -#: common/models.py:920 +#: common/models.py:921 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:925 +#: common/models.py:926 msgid "Email required" msgstr "" -#: common/models.py:926 +#: common/models.py:927 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:931 +#: common/models.py:932 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:932 +#: common/models.py:933 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:937 +#: common/models.py:938 msgid "Mail twice" msgstr "" -#: common/models.py:938 +#: common/models.py:939 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:943 +#: common/models.py:944 msgid "Password twice" msgstr "" -#: common/models.py:944 +#: common/models.py:945 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:949 +#: common/models.py:950 msgid "Group on signup" msgstr "" -#: common/models.py:950 +#: common/models.py:951 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:955 +#: common/models.py:956 msgid "Enforce MFA" msgstr "" -#: common/models.py:956 +#: common/models.py:957 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:961 +#: common/models.py:964 msgid "Enable URL integration" msgstr "" -#: common/models.py:962 +#: common/models.py:965 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:968 +#: common/models.py:971 msgid "Enable navigation integration" msgstr "" -#: common/models.py:969 +#: common/models.py:972 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:975 +#: common/models.py:978 msgid "Enable app integration" msgstr "" -#: common/models.py:976 +#: common/models.py:979 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:982 +#: common/models.py:985 msgid "Enable schedule integration" msgstr "" -#: common/models.py:983 +#: common/models.py:986 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1029 +#: common/models.py:992 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:993 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:1008 common/models.py:1216 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1039 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1030 +#: common/models.py:1040 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1035 +#: common/models.py:1045 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1036 +#: common/models.py:1046 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1041 +#: common/models.py:1051 msgid "Show latest parts" msgstr "" -#: common/models.py:1042 +#: common/models.py:1052 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1047 +#: common/models.py:1057 msgid "Recent Part Count" msgstr "" -#: common/models.py:1048 +#: common/models.py:1058 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1054 +#: common/models.py:1064 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1055 +#: common/models.py:1065 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1060 +#: common/models.py:1070 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1061 +#: common/models.py:1071 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1066 +#: common/models.py:1076 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1067 +#: common/models.py:1077 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1072 +#: common/models.py:1082 msgid "Show low stock" msgstr "" -#: common/models.py:1073 +#: common/models.py:1083 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1078 +#: common/models.py:1088 msgid "Show depleted stock" msgstr "" -#: common/models.py:1079 +#: common/models.py:1089 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1084 +#: common/models.py:1094 msgid "Show needed stock" msgstr "" -#: common/models.py:1085 +#: common/models.py:1095 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1090 +#: common/models.py:1100 msgid "Show expired stock" msgstr "" -#: common/models.py:1091 +#: common/models.py:1101 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1096 +#: common/models.py:1106 msgid "Show stale stock" msgstr "" -#: common/models.py:1097 +#: common/models.py:1107 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1102 +#: common/models.py:1112 msgid "Show pending builds" msgstr "" -#: common/models.py:1103 +#: common/models.py:1113 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1108 +#: common/models.py:1118 msgid "Show overdue builds" msgstr "" -#: common/models.py:1109 +#: common/models.py:1119 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1114 +#: common/models.py:1124 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1115 +#: common/models.py:1125 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1120 +#: common/models.py:1130 msgid "Show overdue POs" msgstr "" -#: common/models.py:1121 +#: common/models.py:1131 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1126 +#: common/models.py:1136 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1127 +#: common/models.py:1137 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1132 +#: common/models.py:1142 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1133 +#: common/models.py:1143 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1139 +#: common/models.py:1149 msgid "Inline label display" msgstr "" -#: common/models.py:1140 +#: common/models.py:1150 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1146 +#: common/models.py:1156 msgid "Inline report display" msgstr "" -#: common/models.py:1147 +#: common/models.py:1157 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1153 +#: common/models.py:1163 msgid "Search Preview Results" msgstr "" -#: common/models.py:1154 +#: common/models.py:1164 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1160 +#: common/models.py:1170 msgid "Search Show Stock" msgstr "" -#: common/models.py:1161 +#: common/models.py:1171 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1167 +#: common/models.py:1177 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1168 +#: common/models.py:1178 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1174 +#: common/models.py:1184 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1175 +#: common/models.py:1185 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1181 +#: common/models.py:1191 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1182 +#: common/models.py:1192 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1188 +#: common/models.py:1198 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1189 +#: common/models.py:1199 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1254 company/forms.py:43 +#: common/models.py:1264 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1261 company/serializers.py:264 +#: common/models.py:1271 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 -#: templates/js/translated/part.js:909 templates/js/translated/part.js:1860 +#: templates/js/translated/part.js:915 templates/js/translated/part.js:1867 msgid "Price" msgstr "" -#: common/models.py:1262 +#: common/models.py:1272 msgid "Unit price at specified quantity" msgstr "" +#: common/models.py:1429 common/models.py:1568 +msgid "Endpoint" +msgstr "" + +#: common/models.py:1430 +msgid "Endpoint at which this webhook is received" +msgstr "" + +#: common/models.py:1439 +msgid "Name for this webhook" +msgstr "" + +#: common/models.py:1444 part/models.py:948 plugin/models.py:46 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:96 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:417 +msgid "Active" +msgstr "" + +#: common/models.py:1445 +msgid "Is this webhook active" +msgstr "" + +#: common/models.py:1459 +msgid "Token" +msgstr "" + +#: common/models.py:1460 +msgid "Token for access" +msgstr "" + +#: common/models.py:1467 +msgid "Secret" +msgstr "" + +#: common/models.py:1468 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:1535 +msgid "Message ID" +msgstr "" + +#: common/models.py:1536 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:1544 +msgid "Host" +msgstr "" + +#: common/models.py:1545 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:1552 +msgid "Header" +msgstr "" + +#: common/models.py:1553 +msgid "Header of this message" +msgstr "" + +#: common/models.py:1559 +msgid "Body" +msgstr "" + +#: common/models.py:1560 +msgid "Body of this message" +msgstr "" + +#: common/models.py:1569 +msgid "Endpoint on which this message was received" +msgstr "" + +#: common/models.py:1574 +msgid "Worked on" +msgstr "" + +#: common/models.py:1575 +msgid "Was the work on this message finished?" +msgstr "" + #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 #: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 -#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 -#: part/views.py:764 +#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:213 +#: part/views.py:773 msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 #: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 -#: part/views.py:765 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:214 +#: part/views.py:774 msgid "Match Fields" msgstr "" @@ -2315,7 +2404,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:139 part/models.py:838 +#: company/models.py:139 part/models.py:840 msgid "Image" msgstr "" @@ -2352,8 +2441,8 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:469 -#: stock/templates/stock/item_base.html:142 +#: company/models.py:320 company/models.py:535 stock/models.py:471 +#: stock/templates/stock/item_base.html:142 templates/js/translated/bom.js:328 msgid "Base Part" msgstr "" @@ -2380,7 +2469,7 @@ msgstr "" #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:533 #: templates/js/translated/company.js:818 templates/js/translated/order.js:1038 -#: templates/js/translated/part.js:245 templates/js/translated/part.js:889 +#: templates/js/translated/part.js:245 templates/js/translated/part.js:895 msgid "MPN" msgstr "" @@ -2409,8 +2498,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1960 templates/js/translated/company.js:647 -#: templates/js/translated/part.js:709 templates/js/translated/stock.js:1296 +#: stock/models.py:1988 templates/js/translated/company.js:647 +#: templates/js/translated/part.js:715 templates/js/translated/stock.js:1304 msgid "Value" msgstr "" @@ -2418,10 +2507,10 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:429 part/models.py:913 part/models.py:2450 +#: company/models.py:429 part/models.py:915 part/models.py:2457 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:284 -#: templates/js/translated/company.js:653 templates/js/translated/part.js:715 +#: templates/InvenTree/settings/settings.html:287 +#: templates/js/translated/company.js:653 templates/js/translated/part.js:721 msgid "Units" msgstr "" @@ -2434,13 +2523,13 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:224 +#: company/templates/company/supplier_part.html:87 order/models.py:227 #: order/templates/order/order_base.html:112 -#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 -#: part/bom.py:247 stock/templates/stock/item_base.html:397 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:237 +#: part/bom.py:265 stock/templates/stock/item_base.html:397 #: templates/js/translated/company.js:337 #: templates/js/translated/company.js:774 templates/js/translated/order.js:823 -#: templates/js/translated/part.js:215 templates/js/translated/part.js:857 +#: templates/js/translated/part.js:215 templates/js/translated/part.js:863 #: templates/js/translated/table_filters.js:393 msgid "Supplier" msgstr "" @@ -2450,8 +2539,8 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 -#: templates/js/translated/part.js:226 templates/js/translated/part.js:875 +#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1025 +#: templates/js/translated/part.js:226 templates/js/translated/part.js:881 msgid "SKU" msgstr "" @@ -2472,22 +2561,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:576 company/templates/company/supplier_part.html:119 -#: part/models.py:2641 report/templates/report/inventree_po_report.html:93 +#: part/models.py:2648 report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "base cost" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:493 stock/templates/stock/item_base.html:338 -#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1791 +#: stock/models.py:495 stock/templates/stock/item_base.html:338 +#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1799 msgid "Packaging" msgstr "" @@ -2495,7 +2584,7 @@ msgstr "" msgid "Part packaging" msgstr "" -#: company/models.py:584 part/models.py:1781 +#: company/models.py:584 part/models.py:1783 msgid "multiple" msgstr "" @@ -2554,12 +2643,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:547 -#: order/templates/order/sales_order_base.html:115 stock/models.py:512 -#: stock/models.py:513 stock/serializers.py:625 +#: company/templates/company/company_base.html:83 order/models.py:552 +#: order/templates/order/sales_order_base.html:115 stock/models.py:514 +#: stock/models.py:515 stock/serializers.py:626 #: stock/templates/stock/item_base.html:290 #: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 -#: templates/js/translated/stock.js:2452 +#: templates/js/translated/stock.js:2610 #: templates/js/translated/table_filters.js:397 msgid "Customer" msgstr "" @@ -2590,7 +2679,7 @@ msgstr "新しいサプライヤー・パーツを作成" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:118 -#: part/templates/part/detail.html:336 +#: part/templates/part/detail.html:353 msgid "New Supplier Part" msgstr "新しいサプライヤー・パーツ" @@ -2598,8 +2687,8 @@ msgstr "新しいサプライヤー・パーツ" #: company/templates/company/detail.html:79 #: company/templates/company/manufacturer_part.html:127 #: company/templates/company/manufacturer_part.html:156 -#: part/templates/part/category.html:171 part/templates/part/detail.html:345 -#: part/templates/part/detail.html:374 +#: part/templates/part/category.html:171 part/templates/part/detail.html:362 +#: part/templates/part/detail.html:391 msgid "Options" msgstr "" @@ -2627,7 +2716,7 @@ msgstr "メーカー・パーツ" msgid "Create new manufacturer part" msgstr "新しいメーカー・パーツを作成" -#: company/templates/company/detail.html:67 part/templates/part/detail.html:364 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:381 msgid "New Manufacturer Part" msgstr "新しいメーカ―・パーツ" @@ -2641,7 +2730,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:68 part/templates/part/part_sidebar.html:33 +#: part/templates/part/detail.html:85 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197 #: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 @@ -2663,7 +2752,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:91 part/templates/part/part_sidebar.html:37 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:41 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217 #: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 @@ -2691,13 +2780,13 @@ msgstr "" #: company/templates/company/detail.html:384 #: company/templates/company/manufacturer_part.html:215 -#: part/templates/part/detail.html:418 +#: part/templates/part/detail.html:435 msgid "Delete Supplier Parts?" msgstr "" #: company/templates/company/detail.html:385 #: company/templates/company/manufacturer_part.html:216 -#: part/templates/part/detail.html:419 +#: part/templates/part/detail.html:436 msgid "All selected supplier parts will be deleted" msgstr "" @@ -2714,7 +2803,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:34 #: company/templates/company/supplier_part.html:159 -#: part/templates/part/detail.html:71 part/templates/part/part_base.html:76 +#: part/templates/part/detail.html:88 part/templates/part/part_base.html:76 msgid "Order part" msgstr "パーツの注文" @@ -2735,34 +2824,34 @@ msgstr "内部パーツ" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 -#: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 +#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:163 #: templates/InvenTree/search.html:188 templates/navbar.html:45 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:129 -#: part/templates/part/detail.html:347 +#: part/templates/part/detail.html:364 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:129 #: company/templates/company/manufacturer_part.html:158 #: company/templates/company/manufacturer_part.html:254 -#: part/templates/part/detail.html:347 part/templates/part/detail.html:376 +#: part/templates/part/detail.html:364 part/templates/part/detail.html:393 #: templates/js/translated/company.js:426 templates/js/translated/helpers.js:31 -#: users/models.py:210 +#: users/models.py:212 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:143 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:17 -#: part/templates/part/detail.html:170 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:187 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:147 -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:192 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part.html:65 msgid "New Parameter" @@ -2773,7 +2862,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:191 -#: part/templates/part/detail.html:862 +#: part/templates/part/detail.html:892 msgid "Add Parameter" msgstr "" @@ -2802,9 +2891,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:477 +#: company/templates/company/supplier_part.html:24 stock/models.py:479 #: stock/templates/stock/item_base.html:402 -#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1748 +#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1756 msgid "Supplier Part" msgstr "" @@ -2830,7 +2919,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:167 -#: templates/js/translated/stock.js:360 +#: templates/js/translated/stock.js:368 msgid "New Stock Item" msgstr "" @@ -2840,7 +2929,7 @@ msgid "Supplier Part Orders" msgstr "" #: company/templates/company/supplier_part.html:160 -#: part/templates/part/detail.html:72 +#: part/templates/part/detail.html:89 msgid "Order Part" msgstr "" @@ -2851,7 +2940,7 @@ msgstr "" #: company/templates/company/supplier_part.html:184 #: company/templates/company/supplier_part.html:290 -#: part/templates/part/prices.html:271 part/views.py:1619 +#: part/templates/part/prices.html:271 part/views.py:1628 msgid "Add Price Break" msgstr "" @@ -2859,11 +2948,11 @@ msgstr "" msgid "No price break information found" msgstr "" -#: company/templates/company/supplier_part.html:224 part/views.py:1681 +#: company/templates/company/supplier_part.html:224 part/views.py:1690 msgid "Delete Price Break" msgstr "" -#: company/templates/company/supplier_part.html:238 part/views.py:1667 +#: company/templates/company/supplier_part.html:238 part/views.py:1676 msgid "Edit Price Break" msgstr "" @@ -2881,10 +2970,10 @@ msgstr "" #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:150 #: templates/InvenTree/settings/sidebar.html:41 -#: templates/js/translated/bom.js:328 templates/js/translated/part.js:489 -#: templates/js/translated/part.js:624 templates/js/translated/part.js:1118 -#: templates/js/translated/part.js:1279 templates/js/translated/stock.js:927 -#: templates/js/translated/stock.js:1580 templates/navbar.html:28 +#: templates/js/translated/bom.js:340 templates/js/translated/part.js:495 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1125 +#: templates/js/translated/part.js:1286 templates/js/translated/stock.js:935 +#: templates/js/translated/stock.js:1588 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2907,8 +2996,8 @@ msgstr "" #: stock/templates/stock/location.html:151 #: stock/templates/stock/location.html:163 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2351 -#: templates/stats.html:93 templates/stats.html:102 users/models.py:43 +#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2509 +#: templates/stats.html:105 templates/stats.html:114 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2937,20 +3026,20 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:129 part/views.py:584 +#: company/views.py:129 part/views.py:593 msgid "Download Image" msgstr "" -#: company/views.py:158 part/views.py:616 +#: company/views.py:158 part/views.py:625 msgid "Image size exceeds maximum allowable size for download" msgstr "" -#: company/views.py:165 part/views.py:623 +#: company/views.py:165 part/views.py:632 #, python-brace-format msgid "Invalid response: {code}" msgstr "" -#: company/views.py:174 part/views.py:632 +#: company/views.py:174 part/views.py:641 msgid "Supplied URL is not a valid image file" msgstr "" @@ -3036,282 +3125,282 @@ msgstr "" msgid "Cancel order" msgstr "" -#: order/models.py:122 +#: order/models.py:125 msgid "Order description" msgstr "" -#: order/models.py:124 +#: order/models.py:127 msgid "Link to external page" msgstr "" -#: order/models.py:132 +#: order/models.py:135 msgid "Created By" msgstr "" -#: order/models.py:139 +#: order/models.py:142 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:144 +#: order/models.py:147 msgid "Order notes" msgstr "" -#: order/models.py:211 order/models.py:537 +#: order/models.py:214 order/models.py:542 msgid "Order reference" msgstr "" -#: order/models.py:216 order/models.py:552 +#: order/models.py:219 order/models.py:557 msgid "Purchase order status" msgstr "" -#: order/models.py:225 +#: order/models.py:228 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:228 order/templates/order/order_base.html:118 +#: order/models.py:231 order/templates/order/order_base.html:118 #: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:228 +#: order/models.py:231 msgid "Supplier order reference code" msgstr "" -#: order/models.py:235 +#: order/models.py:238 msgid "received by" msgstr "" -#: order/models.py:240 +#: order/models.py:243 msgid "Issue Date" msgstr "" -#: order/models.py:241 +#: order/models.py:244 msgid "Date order was issued" msgstr "" -#: order/models.py:246 +#: order/models.py:249 msgid "Target Delivery Date" msgstr "" -#: order/models.py:247 +#: order/models.py:250 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:253 +#: order/models.py:256 msgid "Date order was completed" msgstr "" -#: order/models.py:282 +#: order/models.py:285 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:411 -msgid "Quantity must be an integer" -msgstr "" - -#: order/models.py:415 +#: order/models.py:420 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:548 +#: order/models.py:553 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer Reference " msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer order reference code" msgstr "" -#: order/models.py:559 +#: order/models.py:564 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:562 order/models.py:1028 +#: order/models.py:567 order/models.py:1048 #: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:569 +#: order/models.py:574 msgid "shipped by" msgstr "" -#: order/models.py:635 +#: order/models.py:640 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:639 +#: order/models.py:644 msgid "Only a pending order can be marked as complete" msgstr "" -#: order/models.py:642 +#: order/models.py:647 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:645 +#: order/models.py:650 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:797 +#: order/models.py:806 msgid "Item quantity" msgstr "" -#: order/models.py:803 +#: order/models.py:812 msgid "Line item reference" msgstr "" -#: order/models.py:805 +#: order/models.py:814 msgid "Line item notes" msgstr "" -#: order/models.py:835 order/models.py:926 order/models.py:1022 -#: templates/js/translated/order.js:1820 +#: order/models.py:842 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:855 order/models.py:946 order/models.py:1042 +#: templates/js/translated/order.js:1820 templates/js/translated/stock.js:2271 msgid "Order" msgstr "" -#: order/models.py:836 order/templates/order/order_base.html:9 +#: order/models.py:856 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:352 -#: templates/js/translated/order.js:801 templates/js/translated/part.js:832 -#: templates/js/translated/stock.js:1725 templates/js/translated/stock.js:2433 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:838 +#: templates/js/translated/stock.js:1733 templates/js/translated/stock.js:2591 msgid "Purchase Order" msgstr "" -#: order/models.py:857 +#: order/models.py:877 msgid "Supplier part" msgstr "" -#: order/models.py:864 order/templates/order/order_base.html:163 +#: order/models.py:884 order/templates/order/order_base.html:163 #: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 -#: templates/js/translated/part.js:904 templates/js/translated/part.js:930 +#: templates/js/translated/part.js:910 templates/js/translated/part.js:937 #: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:865 +#: order/models.py:885 msgid "Number of items received" msgstr "" -#: order/models.py:872 part/templates/part/prices.html:176 stock/models.py:606 +#: order/models.py:892 part/templates/part/prices.html:176 stock/models.py:608 #: stock/serializers.py:170 stock/templates/stock/item_base.html:359 -#: templates/js/translated/stock.js:1779 +#: templates/js/translated/stock.js:1787 msgid "Purchase Price" msgstr "" -#: order/models.py:873 +#: order/models.py:893 msgid "Unit purchase price" msgstr "" -#: order/models.py:881 +#: order/models.py:901 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:936 part/templates/part/part_pricing.html:112 +#: order/models.py:956 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:937 +#: order/models.py:957 msgid "Unit sale price" msgstr "" -#: order/models.py:942 +#: order/models.py:962 msgid "Shipped quantity" msgstr "" -#: order/models.py:1029 +#: order/models.py:1049 msgid "Date of shipment" msgstr "" -#: order/models.py:1036 +#: order/models.py:1056 msgid "Checked By" msgstr "" -#: order/models.py:1037 +#: order/models.py:1057 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1045 +#: order/models.py:1065 msgid "Shipment number" msgstr "" -#: order/models.py:1052 +#: order/models.py:1072 msgid "Shipment notes" msgstr "" -#: order/models.py:1059 +#: order/models.py:1079 msgid "Tracking Number" msgstr "" -#: order/models.py:1060 +#: order/models.py:1080 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1070 +#: order/models.py:1090 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1073 +#: order/models.py:1093 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1149 order/models.py:1151 +#: order/models.py:1171 order/models.py:1173 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1155 +#: order/models.py:1177 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1157 +#: order/models.py:1179 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1160 +#: order/models.py:1182 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1164 +#: order/models.py:1186 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:1170 order/serializers.py:734 +#: order/models.py:1192 order/serializers.py:740 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1173 +#: order/models.py:1195 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1174 +#: order/models.py:1196 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1182 +#: order/models.py:1204 msgid "Line" msgstr "" -#: order/models.py:1190 order/serializers.py:825 order/serializers.py:953 -#: templates/js/translated/model_renderers.js:251 +#: order/models.py:1212 order/serializers.py:831 order/serializers.py:959 +#: templates/js/translated/model_renderers.js:285 msgid "Shipment" msgstr "" -#: order/models.py:1191 +#: order/models.py:1213 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1203 +#: order/models.py:1225 msgid "Item" msgstr "" -#: order/models.py:1204 +#: order/models.py:1226 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1207 +#: order/models.py:1229 msgid "Enter stock allocation quantity" msgstr "" @@ -3319,7 +3408,7 @@ msgstr "" msgid "Purchase price currency" msgstr "" -#: order/serializers.py:211 order/serializers.py:790 +#: order/serializers.py:211 order/serializers.py:796 msgid "Line Item" msgstr "" @@ -3355,39 +3444,39 @@ msgstr "" msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:587 msgid "Sale price currency" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:655 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:699 order/serializers.py:802 +#: order/serializers.py:705 order/serializers.py:808 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:721 +#: order/serializers.py:727 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:815 +#: order/serializers.py:821 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:839 order/serializers.py:964 +#: order/serializers.py:845 order/serializers.py:970 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:842 order/serializers.py:967 +#: order/serializers.py:848 order/serializers.py:973 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:894 +#: order/serializers.py:900 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:910 msgid "The following serial numbers are already allocated" msgstr "" @@ -3441,6 +3530,7 @@ msgstr "" #: order/templates/order/order_base.html:94 #: order/templates/order/sales_order_base.html:89 +#: templates/js/translated/stock.js:2327 msgid "Order Status" msgstr "" @@ -3538,7 +3628,7 @@ msgstr "" #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/build.js:300 templates/js/translated/build.js:1311 #: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 -#: templates/js/translated/stock.js:593 templates/js/translated/stock.js:761 +#: templates/js/translated/stock.js:601 templates/js/translated/stock.js:769 msgid "Remove row" msgstr "" @@ -3729,7 +3819,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:48 -#: templates/js/translated/bom.js:720 templates/js/translated/build.js:1243 +#: templates/js/translated/bom.js:732 templates/js/translated/build.js:1243 msgid "Actions" msgstr "" @@ -3832,447 +3922,448 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:125 part/models.py:81 part/models.py:847 +#: part/bom.py:125 part/models.py:83 part/models.py:849 #: part/templates/part/category.html:108 part/templates/part/part_base.html:338 msgid "Default Location" msgstr "" -#: part/bom.py:126 part/templates/part/part_base.html:185 +#: part/bom.py:126 templates/email/low_stock_notification.html:17 +msgid "Total Stock" +msgstr "" + +#: part/bom.py:127 part/templates/part/part_base.html:185 msgid "Available Stock" msgstr "" -#: part/forms.py:85 +#: part/bom.py:128 part/templates/part/part_base.html:203 +#: templates/js/translated/part.js:1301 +msgid "On Order" +msgstr "" + +#: part/forms.py:84 msgid "Select part category" msgstr "" -#: part/forms.py:122 +#: part/forms.py:121 msgid "Add parameter template to same level categories" msgstr "" -#: part/forms.py:126 +#: part/forms.py:125 msgid "Add parameter template to all categories" msgstr "" -#: part/forms.py:146 +#: part/forms.py:145 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 +#: part/models.py:84 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:95 part/models.py:2526 part/templates/part/category.html:15 +#: part/models.py:97 part/models.py:2533 part/templates/part/category.html:15 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:96 part/templates/part/category.html:128 -#: templates/InvenTree/search.html:95 templates/stats.html:84 +#: part/models.py:98 part/templates/part/category.html:128 +#: templates/InvenTree/search.html:95 templates/stats.html:96 #: users/models.py:40 msgid "Part Categories" msgstr "" -#: part/models.py:358 part/templates/part/cat_link.html:3 +#: part/models.py:360 part/templates/part/cat_link.html:3 #: part/templates/part/category.html:17 part/templates/part/category.html:133 #: part/templates/part/category.html:153 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82 #: templates/InvenTree/settings/sidebar.html:37 -#: templates/js/translated/part.js:1656 templates/navbar.html:21 -#: templates/stats.html:80 templates/stats.html:89 users/models.py:41 +#: templates/js/translated/part.js:1663 templates/navbar.html:21 +#: templates/stats.html:92 templates/stats.html:101 users/models.py:41 msgid "Parts" msgstr "パーツ" -#: part/models.py:450 +#: part/models.py:452 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:500 part/models.py:512 +#: part/models.py:502 part/models.py:514 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:642 +#: part/models.py:644 msgid "Next available serial numbers are" msgstr "" -#: part/models.py:646 +#: part/models.py:648 msgid "Next available serial number is" msgstr "" -#: part/models.py:651 +#: part/models.py:653 msgid "Most recent serial number is" msgstr "" -#: part/models.py:746 +#: part/models.py:748 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:771 +#: part/models.py:773 msgid "Part name" msgstr "" -#: part/models.py:778 +#: part/models.py:780 msgid "Is Template" msgstr "" -#: part/models.py:779 +#: part/models.py:781 msgid "Is this part a template part?" msgstr "" -#: part/models.py:789 +#: part/models.py:791 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:790 +#: part/models.py:792 msgid "Variant Of" msgstr "" -#: part/models.py:796 +#: part/models.py:798 msgid "Part description" msgstr "" -#: part/models.py:801 part/templates/part/category.html:86 +#: part/models.py:803 part/templates/part/category.html:86 #: part/templates/part/part_base.html:302 msgid "Keywords" msgstr "" -#: part/models.py:802 +#: part/models.py:804 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:809 part/models.py:2276 part/models.py:2525 +#: part/models.py:811 part/models.py:2283 part/models.py:2532 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:183 -#: templates/js/translated/part.js:1261 +#: templates/InvenTree/settings/settings.html:186 +#: templates/js/translated/part.js:1268 msgid "Category" msgstr "" -#: part/models.py:810 +#: part/models.py:812 msgid "Part category" msgstr "" -#: part/models.py:815 part/templates/part/part_base.html:274 -#: templates/js/translated/part.js:612 templates/js/translated/part.js:1214 -#: templates/js/translated/stock.js:1552 +#: part/models.py:817 part/templates/part/part_base.html:274 +#: templates/js/translated/part.js:618 templates/js/translated/part.js:1221 +#: templates/js/translated/stock.js:1560 msgid "IPN" msgstr "" -#: part/models.py:816 +#: part/models.py:818 msgid "Internal Part Number" msgstr "" -#: part/models.py:822 +#: part/models.py:824 msgid "Part revision or version number" msgstr "" -#: part/models.py:823 part/templates/part/part_base.html:281 -#: report/models.py:200 templates/js/translated/part.js:616 +#: part/models.py:825 part/templates/part/part_base.html:281 +#: report/models.py:200 templates/js/translated/part.js:622 msgid "Revision" msgstr "" -#: part/models.py:845 +#: part/models.py:847 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:892 part/templates/part/part_base.html:347 +#: part/models.py:894 part/templates/part/part_base.html:347 msgid "Default Supplier" msgstr "" -#: part/models.py:893 +#: part/models.py:895 msgid "Default supplier part" msgstr "" -#: part/models.py:900 +#: part/models.py:902 msgid "Default Expiry" msgstr "" -#: part/models.py:901 +#: part/models.py:903 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:906 part/templates/part/part_base.html:196 +#: part/models.py:908 part/templates/part/part_base.html:196 msgid "Minimum Stock" msgstr "" -#: part/models.py:907 +#: part/models.py:909 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:914 +#: part/models.py:916 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:920 +#: part/models.py:922 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:926 +#: part/models.py:928 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:932 +#: part/models.py:934 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:937 +#: part/models.py:939 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:942 +#: part/models.py:944 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:946 plugin/models.py:46 -#: templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:295 -#: templates/js/translated/table_filters.js:417 -msgid "Active" -msgstr "" - -#: part/models.py:947 +#: part/models.py:949 msgid "Is this part active?" msgstr "" -#: part/models.py:952 +#: part/models.py:954 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:957 +#: part/models.py:959 msgid "Part notes - supports Markdown formatting" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "BOM checksum" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:963 +#: part/models.py:965 msgid "BOM checked by" msgstr "" -#: part/models.py:965 +#: part/models.py:967 msgid "BOM checked date" msgstr "" -#: part/models.py:969 +#: part/models.py:971 msgid "Creation User" msgstr "" -#: part/models.py:1781 +#: part/models.py:1783 msgid "Sell multiple" msgstr "" -#: part/models.py:2326 +#: part/models.py:2333 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2343 +#: part/models.py:2350 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2363 templates/js/translated/part.js:1707 -#: templates/js/translated/stock.js:1276 +#: part/models.py:2370 templates/js/translated/part.js:1714 +#: templates/js/translated/stock.js:1284 msgid "Test Name" msgstr "" -#: part/models.py:2364 +#: part/models.py:2371 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2369 +#: part/models.py:2376 msgid "Test Description" msgstr "" -#: part/models.py:2370 +#: part/models.py:2377 msgid "Enter description for this test" msgstr "" -#: part/models.py:2375 templates/js/translated/part.js:1716 +#: part/models.py:2382 templates/js/translated/part.js:1723 #: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" -#: part/models.py:2376 +#: part/models.py:2383 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2381 templates/js/translated/part.js:1724 +#: part/models.py:2388 templates/js/translated/part.js:1731 msgid "Requires Value" msgstr "" -#: part/models.py:2382 +#: part/models.py:2389 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2387 templates/js/translated/part.js:1731 +#: part/models.py:2394 templates/js/translated/part.js:1738 msgid "Requires Attachment" msgstr "" -#: part/models.py:2388 +#: part/models.py:2395 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2399 +#: part/models.py:2406 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2435 +#: part/models.py:2442 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2443 +#: part/models.py:2450 msgid "Parameter Name" msgstr "" -#: part/models.py:2450 +#: part/models.py:2457 msgid "Parameter Units" msgstr "" -#: part/models.py:2480 +#: part/models.py:2487 msgid "Parent Part" msgstr "" -#: part/models.py:2482 part/models.py:2531 part/models.py:2532 -#: templates/InvenTree/settings/settings.html:178 +#: part/models.py:2489 part/models.py:2538 part/models.py:2539 +#: templates/InvenTree/settings/settings.html:181 msgid "Parameter Template" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Data" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Parameter Value" msgstr "" -#: part/models.py:2536 templates/InvenTree/settings/settings.html:187 +#: part/models.py:2543 templates/InvenTree/settings/settings.html:190 msgid "Default Value" msgstr "" -#: part/models.py:2537 +#: part/models.py:2544 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2614 +#: part/models.py:2621 msgid "Select parent part" msgstr "" -#: part/models.py:2622 +#: part/models.py:2629 msgid "Sub part" msgstr "" -#: part/models.py:2623 +#: part/models.py:2630 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2629 +#: part/models.py:2636 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2631 templates/js/translated/bom.js:566 -#: templates/js/translated/bom.js:640 +#: part/models.py:2638 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:652 #: templates/js/translated/table_filters.js:92 msgid "Optional" msgstr "" -#: part/models.py:2631 +#: part/models.py:2638 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2634 +#: part/models.py:2641 msgid "Overage" msgstr "" -#: part/models.py:2635 +#: part/models.py:2642 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2638 +#: part/models.py:2645 msgid "BOM item reference" msgstr "" -#: part/models.py:2641 +#: part/models.py:2648 msgid "BOM item notes" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "Checksum" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "BOM line checksum" msgstr "" -#: part/models.py:2647 templates/js/translated/bom.js:657 +#: part/models.py:2654 templates/js/translated/bom.js:669 #: templates/js/translated/table_filters.js:68 #: templates/js/translated/table_filters.js:88 msgid "Inherited" msgstr "" -#: part/models.py:2648 +#: part/models.py:2655 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2653 templates/js/translated/bom.js:649 +#: part/models.py:2660 templates/js/translated/bom.js:661 msgid "Allow Variants" msgstr "" -#: part/models.py:2654 +#: part/models.py:2661 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2739 stock/models.py:355 +#: part/models.py:2746 stock/models.py:357 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2748 part/models.py:2750 +#: part/models.py:2755 part/models.py:2757 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2879 +#: part/models.py:2886 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2901 +#: part/models.py:2908 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2913 +#: part/models.py:2920 msgid "Parent BOM item" msgstr "" -#: part/models.py:2921 +#: part/models.py:2928 msgid "Substitute part" msgstr "" -#: part/models.py:2932 +#: part/models.py:2939 msgid "Part 1" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Part 2" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Select Related Part" msgstr "" -#: part/models.py:2968 +#: part/models.py:2975 msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique" msgstr "" @@ -4327,7 +4418,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:253 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:270 msgid "BOM actions" msgstr "" @@ -4499,7 +4590,7 @@ msgstr "" msgid "Import Parts" msgstr "" -#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:375 +#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:348 msgid "Duplicate Part" msgstr "" @@ -4533,145 +4624,149 @@ msgid "Showing stock for all variants of %(full_name)s" msgstr "" #: part/templates/part/detail.html:43 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/detail.html:60 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:48 +#: part/templates/part/detail.html:65 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:105 +#: part/templates/part/detail.html:122 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:142 +#: part/templates/part/detail.html:159 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:146 +#: part/templates/part/detail.html:163 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:147 +#: part/templates/part/detail.html:164 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:174 +#: part/templates/part/detail.html:191 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:45 +#: part/templates/part/detail.html:228 part/templates/part/part_sidebar.html:49 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:215 part/templates/part/detail.html:216 +#: part/templates/part/detail.html:232 part/templates/part/detail.html:233 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:253 part/templates/part/part_sidebar.html:17 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:241 +#: part/templates/part/detail.html:258 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:245 templates/js/translated/bom.js:70 +#: part/templates/part/detail.html:262 templates/js/translated/bom.js:70 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:247 +#: part/templates/part/detail.html:264 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:257 +#: part/templates/part/detail.html:274 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:259 templates/js/translated/part.js:272 +#: part/templates/part/detail.html:276 templates/js/translated/part.js:272 msgid "Copy BOM" msgstr "" -#: part/templates/part/detail.html:261 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:283 msgid "New BOM Item" msgstr "" -#: part/templates/part/detail.html:267 +#: part/templates/part/detail.html:284 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:280 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:314 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:322 +#: part/templates/part/detail.html:339 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:332 +#: part/templates/part/detail.html:349 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:360 +#: part/templates/part/detail.html:377 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:393 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:558 +#: part/templates/part/detail.html:575 msgid "Delete selected BOM items?" msgstr "" -#: part/templates/part/detail.html:559 +#: part/templates/part/detail.html:576 msgid "All selected BOM items will be deleted" msgstr "" -#: part/templates/part/detail.html:608 +#: part/templates/part/detail.html:625 msgid "Create BOM Item" msgstr "" -#: part/templates/part/detail.html:652 +#: part/templates/part/detail.html:682 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:660 +#: part/templates/part/detail.html:690 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:755 +#: part/templates/part/detail.html:785 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:812 +#: part/templates/part/detail.html:842 msgid "Edit Part Notes" msgstr "" -#: part/templates/part/detail.html:925 +#: part/templates/part/detail.html:955 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:937 +#: part/templates/part/detail.html:967 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:949 +#: part/templates/part/detail.html:979 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1038 +#: part/templates/part/detail.html:1068 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -4786,7 +4881,7 @@ msgstr "" #: templates/js/translated/company.js:508 #: templates/js/translated/company.js:765 #: templates/js/translated/model_renderers.js:175 -#: templates/js/translated/part.js:527 templates/js/translated/part.js:604 +#: templates/js/translated/part.js:533 templates/js/translated/part.js:610 msgid "Inactive" msgstr "" @@ -4805,10 +4900,6 @@ msgstr "" msgid "In Stock" msgstr "" -#: part/templates/part/part_base.html:203 templates/js/translated/part.js:1294 -msgid "On Order" -msgstr "" - #: part/templates/part/part_base.html:210 templates/InvenTree/index.html:178 msgid "Required for Build Orders" msgstr "" @@ -4821,12 +4912,12 @@ msgstr "" msgid "Allocated to Orders" msgstr "" -#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:678 +#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:690 msgid "Can Build" msgstr "" -#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1125 -#: templates/js/translated/part.js:1298 +#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1132 +#: templates/js/translated/part.js:1305 msgid "Building" msgstr "" @@ -4878,7 +4969,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:40 -#: templates/js/translated/bom.js:632 +#: templates/js/translated/bom.js:644 msgid "No supplier pricing available" msgstr "" @@ -4920,7 +5011,12 @@ msgstr "" msgid "Used In" msgstr "" -#: part/templates/part/part_sidebar.html:41 +#: part/templates/part/part_sidebar.html:31 +#: stock/templates/stock/stock_sidebar.html:8 +msgid "Allocations" +msgstr "" + +#: part/templates/part/part_sidebar.html:45 msgid "Test Templates" msgstr "" @@ -4993,7 +5089,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:155 templates/js/translated/bom.js:626 +#: part/templates/part/prices.html:155 templates/js/translated/bom.js:638 msgid "Supplier Cost" msgstr "" @@ -5015,7 +5111,7 @@ msgstr "" msgid "Internal Cost" msgstr "" -#: part/templates/part/prices.html:215 part/views.py:1690 +#: part/templates/part/prices.html:215 part/views.py:1699 msgid "Add Internal Price Break" msgstr "" @@ -5035,9 +5131,9 @@ msgstr "" msgid "Set category for the following parts" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:588 -#: templates/js/translated/part.js:491 templates/js/translated/part.js:1115 -#: templates/js/translated/part.js:1302 +#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:600 +#: templates/js/translated/part.js:497 templates/js/translated/part.js:1122 +#: templates/js/translated/part.js:1309 msgid "No Stock" msgstr "" @@ -5054,116 +5150,116 @@ msgstr "" msgid "Create a new variant of template '%(full_name)s'." msgstr "" -#: part/templatetags/inventree_extras.py:116 +#: part/templatetags/inventree_extras.py:125 msgid "Unknown database" msgstr "" -#: part/views.py:92 +#: part/views.py:93 msgid "Set Part Category" msgstr "" -#: part/views.py:142 +#: part/views.py:143 #, python-brace-format msgid "Set category for {n} parts" msgstr "" -#: part/views.py:214 +#: part/views.py:215 msgid "Match References" msgstr "" -#: part/views.py:502 +#: part/views.py:511 msgid "None" msgstr "" -#: part/views.py:561 +#: part/views.py:570 msgid "Part QR Code" msgstr "" -#: part/views.py:663 +#: part/views.py:672 msgid "Select Part Image" msgstr "" -#: part/views.py:689 +#: part/views.py:698 msgid "Updated part image" msgstr "" -#: part/views.py:692 +#: part/views.py:701 msgid "Part image not found" msgstr "" -#: part/views.py:766 +#: part/views.py:775 msgid "Match Parts" msgstr "" -#: part/views.py:1101 +#: part/views.py:1110 msgid "Export Bill of Materials" msgstr "" -#: part/views.py:1150 +#: part/views.py:1159 msgid "Confirm Part Deletion" msgstr "" -#: part/views.py:1157 +#: part/views.py:1166 msgid "Part was deleted" msgstr "" -#: part/views.py:1166 +#: part/views.py:1175 msgid "Part Pricing" msgstr "" -#: part/views.py:1315 +#: part/views.py:1324 msgid "Create Part Parameter Template" msgstr "" -#: part/views.py:1325 +#: part/views.py:1334 msgid "Edit Part Parameter Template" msgstr "" -#: part/views.py:1332 +#: part/views.py:1341 msgid "Delete Part Parameter Template" msgstr "" -#: part/views.py:1391 templates/js/translated/part.js:315 +#: part/views.py:1400 templates/js/translated/part.js:315 msgid "Edit Part Category" msgstr "" -#: part/views.py:1429 +#: part/views.py:1438 msgid "Delete Part Category" msgstr "" -#: part/views.py:1435 +#: part/views.py:1444 msgid "Part category was deleted" msgstr "" -#: part/views.py:1444 +#: part/views.py:1453 msgid "Create Category Parameter Template" msgstr "" -#: part/views.py:1545 +#: part/views.py:1554 msgid "Edit Category Parameter Template" msgstr "" -#: part/views.py:1601 +#: part/views.py:1610 msgid "Delete Category Parameter Template" msgstr "" -#: part/views.py:1623 +#: part/views.py:1632 msgid "Added new price break" msgstr "" -#: part/views.py:1699 +#: part/views.py:1708 msgid "Edit Internal Price Break" msgstr "" -#: part/views.py:1707 +#: part/views.py:1716 msgid "Delete Internal Price Break" msgstr "" -#: plugin/integration.py:124 +#: plugin/integration.py:138 msgid "No author found" msgstr "" -#: plugin/integration.py:136 +#: plugin/integration.py:152 msgid "No date found" msgstr "" @@ -5191,7 +5287,7 @@ msgstr "" msgid "Is the plugin active" msgstr "" -#: plugin/models.py:195 +#: plugin/models.py:199 msgid "Plugin" msgstr "" @@ -5357,12 +5453,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:517 stock/templates/stock/item_base.html:156 +#: stock/models.py:519 stock/templates/stock/item_base.html:156 #: templates/js/translated/build.js:293 templates/js/translated/build.js:697 #: templates/js/translated/build.js:1073 #: templates/js/translated/model_renderers.js:95 #: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 -#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:415 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:423 msgid "Serial Number" msgstr "" @@ -5371,19 +5467,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1948 +#: stock/models.py:1976 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1954 +#: stock/models.py:1982 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin.html:50 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2367 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2525 msgid "Date" msgstr "" @@ -5396,23 +5492,27 @@ msgid "Fail" msgstr "" #: report/templates/report/inventree_test_report_base.html:123 -#: stock/templates/stock/stock_sidebar.html:12 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:578 templates/js/translated/stock.js:748 -#: templates/js/translated/stock.js:2627 +#: templates/js/translated/stock.js:586 templates/js/translated/stock.js:756 +#: templates/js/translated/stock.js:2785 msgid "Serial" msgstr "" -#: stock/api.py:478 +#: stock/api.py:476 msgid "Quantity is required" msgstr "" -#: stock/forms.py:77 stock/forms.py:251 stock/models.py:574 +#: stock/api.py:483 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:576 #: stock/templates/stock/item_base.html:193 -#: templates/js/translated/stock.js:1701 +#: templates/js/translated/stock.js:1709 msgid "Expiry Date" msgstr "" @@ -5460,228 +5560,228 @@ msgstr "" msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:611 +#: stock/models.py:62 stock/models.py:613 #: stock/templates/stock/item_base.html:416 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:612 +#: stock/models.py:63 stock/models.py:614 msgid "Select Owner" msgstr "" -#: stock/models.py:336 +#: stock/models.py:338 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:372 +#: stock/models.py:374 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:382 stock/models.py:391 +#: stock/models.py:384 stock/models.py:393 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:383 +#: stock/models.py:385 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:405 +#: stock/models.py:407 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:411 +#: stock/models.py:413 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:418 +#: stock/models.py:420 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:461 +#: stock/models.py:463 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:470 +#: stock/models.py:472 msgid "Base part" msgstr "" -#: stock/models.py:478 +#: stock/models.py:480 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:484 stock/templates/stock/location.html:16 +#: stock/models.py:486 stock/templates/stock/location.html:16 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:494 +#: stock/models.py:496 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:500 stock/templates/stock/item_base.html:298 +#: stock/models.py:502 stock/templates/stock/item_base.html:298 msgid "Installed In" msgstr "" -#: stock/models.py:503 +#: stock/models.py:505 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:519 +#: stock/models.py:521 msgid "Serial number for this item" msgstr "" -#: stock/models.py:533 +#: stock/models.py:535 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:537 +#: stock/models.py:539 msgid "Stock Quantity" msgstr "" -#: stock/models.py:546 +#: stock/models.py:548 msgid "Source Build" msgstr "" -#: stock/models.py:548 +#: stock/models.py:550 msgid "Build for this stock item" msgstr "" -#: stock/models.py:559 +#: stock/models.py:561 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:562 +#: stock/models.py:564 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:568 +#: stock/models.py:570 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:575 +#: stock/models.py:577 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete on deplete" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:598 stock/templates/stock/item.html:111 +#: stock/models.py:600 stock/templates/stock/item.html:128 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:607 +#: stock/models.py:609 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1096 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1074 +#: stock/models.py:1102 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1080 +#: stock/models.py:1108 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1083 +#: stock/models.py:1111 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1086 +#: stock/models.py:1114 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1093 +#: stock/models.py:1121 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1164 +#: stock/models.py:1192 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1195 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1170 +#: stock/models.py:1198 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1173 +#: stock/models.py:1201 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1176 +#: stock/models.py:1204 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1179 +#: stock/models.py:1207 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1186 stock/serializers.py:774 +#: stock/models.py:1214 stock/serializers.py:775 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1190 +#: stock/models.py:1218 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1222 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1198 +#: stock/models.py:1226 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1369 +#: stock/models.py:1397 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1868 +#: stock/models.py:1896 msgid "Entry notes" msgstr "" -#: stock/models.py:1925 +#: stock/models.py:1953 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1931 +#: stock/models.py:1959 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1949 +#: stock/models.py:1977 msgid "Test name" msgstr "" -#: stock/models.py:1955 templates/js/translated/table_filters.js:271 +#: stock/models.py:1983 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1961 +#: stock/models.py:1989 msgid "Test output value" msgstr "" -#: stock/models.py:1968 +#: stock/models.py:1996 msgid "Test result attachment" msgstr "" -#: stock/models.py:1974 +#: stock/models.py:2002 msgid "Test notes" msgstr "" @@ -5706,7 +5806,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:326 stock/serializers.py:731 stock/serializers.py:972 +#: stock/serializers.py:326 stock/serializers.py:732 stock/serializers.py:973 msgid "Destination stock location" msgstr "" @@ -5718,63 +5818,63 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:589 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:592 +#: stock/serializers.py:593 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:597 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:626 +#: stock/serializers.py:627 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:632 +#: stock/serializers.py:633 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:640 +#: stock/serializers.py:641 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:650 stock/serializers.py:880 +#: stock/serializers.py:651 stock/serializers.py:881 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:738 +#: stock/serializers.py:739 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:743 +#: stock/serializers.py:744 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:744 +#: stock/serializers.py:745 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:749 +#: stock/serializers.py:750 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:750 +#: stock/serializers.py:751 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:760 +#: stock/serializers.py:761 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:842 +#: stock/serializers.py:843 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:870 +#: stock/serializers.py:871 msgid "Stock transaction notes" msgstr "" @@ -5787,47 +5887,51 @@ msgid "New Entry" msgstr "" #: stock/templates/stock/item.html:48 -msgid "Child Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:55 -msgid "This stock item does not have any child items" +msgid "Stock Item Allocations" msgstr "" #: stock/templates/stock/item.html:64 -#: stock/templates/stock/stock_sidebar.html:8 -msgid "Test Data" -msgstr "" - -#: stock/templates/stock/item.html:68 stock/templates/stock/item_base.html:57 -msgid "Test Report" +msgid "Child Stock Items" msgstr "" #: stock/templates/stock/item.html:72 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item.html:81 +#: stock/templates/stock/stock_sidebar.html:12 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:57 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item.html:89 msgid "Delete Test Data" msgstr "" -#: stock/templates/stock/item.html:76 +#: stock/templates/stock/item.html:93 msgid "Add Test Data" msgstr "" -#: stock/templates/stock/item.html:133 +#: stock/templates/stock/item.html:150 msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:482 +#: stock/templates/stock/item.html:154 stock/views.py:482 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:279 stock/templates/stock/item.html:304 +#: stock/templates/stock/item.html:309 stock/templates/stock/item.html:334 msgid "Add Test Result" msgstr "" -#: stock/templates/stock/item.html:324 +#: stock/templates/stock/item.html:354 msgid "Edit Test Result" msgstr "" -#: stock/templates/stock/item.html:338 +#: stock/templates/stock/item.html:368 msgid "Delete Test Result" msgstr "" @@ -5952,7 +6056,7 @@ msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:206 -#: templates/js/translated/stock.js:1714 +#: templates/js/translated/stock.js:1722 msgid "Last Updated" msgstr "" @@ -6111,7 +6215,7 @@ msgid "Sublocations" msgstr "" #: stock/templates/stock/location.html:146 templates/InvenTree/search.html:164 -#: templates/stats.html:97 users/models.py:42 +#: templates/stats.html:109 users/models.py:42 msgid "Stock Locations" msgstr "" @@ -6135,7 +6239,7 @@ msgstr "" msgid "Stock Tracking" msgstr "" -#: stock/templates/stock/stock_sidebar.html:16 +#: stock/templates/stock/stock_sidebar.html:20 msgid "Child Items" msgstr "" @@ -6164,7 +6268,7 @@ msgstr "" msgid "Are you sure you want to delete this stock tracking entry?" msgstr "" -#: stock/views.py:162 +#: stock/views.py:162 templates/js/translated/stock.js:139 msgid "Edit Stock Location" msgstr "" @@ -6204,7 +6308,7 @@ msgstr "" msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:727 templates/js/translated/stock.js:1066 +#: stock/views.py:727 templates/js/translated/stock.js:1074 msgid "Confirm stock adjustment" msgstr "" @@ -6212,7 +6316,7 @@ msgstr "" msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:324 +#: stock/views.py:760 templates/js/translated/stock.js:332 msgid "Edit Stock Item" msgstr "" @@ -6224,7 +6328,7 @@ msgstr "" msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1153 templates/js/translated/stock.js:304 +#: stock/views.py:1153 templates/js/translated/stock.js:312 msgid "Duplicate Stock Item" msgstr "" @@ -6268,6 +6372,18 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/500.html:5 templates/500.html:11 +msgid "Internal Server Error" +msgstr "" + +#: templates/500.html:14 +msgid "The InvenTree server raised an internal error" +msgstr "" + +#: templates/500.html:15 +msgid "Refer to the error log in the admin interface for further details" +msgstr "" + #: templates/503.html:10 templates/503.html:35 msgid "Site is in Maintenance" msgstr "" @@ -6390,7 +6506,7 @@ msgid "Signup" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:113 msgid "Settings" msgstr "" @@ -6431,43 +6547,43 @@ msgstr "" msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:32 +#: templates/InvenTree/settings/plugin.html:33 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:37 +#: templates/InvenTree/settings/plugin.html:38 #: templates/js/translated/plugin.js:15 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: templates/InvenTree/settings/plugin.html:47 templates/navbar.html:111 #: users/models.py:39 msgid "Admin" msgstr "" -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:49 #: templates/InvenTree/settings/plugin_settings.html:28 msgid "Author" msgstr "" -#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin_settings.html:43 msgid "Version" msgstr "" -#: templates/InvenTree/settings/plugin.html:91 +#: templates/InvenTree/settings/plugin.html:92 msgid "Inactive plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:114 +#: templates/InvenTree/settings/plugin.html:115 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:123 +#: templates/InvenTree/settings/plugin.html:124 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:125 +#: templates/InvenTree/settings/plugin.html:126 msgid "Message" msgstr "" @@ -6555,37 +6671,37 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:75 +#: templates/InvenTree/settings/settings.html:78 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:77 +#: templates/InvenTree/settings/settings.html:80 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:79 +#: templates/InvenTree/settings/settings.html:82 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:168 +#: templates/InvenTree/settings/settings.html:171 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:190 -#: templates/InvenTree/settings/settings.html:289 +#: templates/InvenTree/settings/settings.html:193 +#: templates/InvenTree/settings/settings.html:292 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:191 -#: templates/InvenTree/settings/settings.html:290 +#: templates/InvenTree/settings/settings.html:194 +#: templates/InvenTree/settings/settings.html:293 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:272 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:273 +#: templates/InvenTree/settings/settings.html:276 msgid "ID" msgstr "" @@ -6763,124 +6879,105 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:219 +#: templates/InvenTree/settings/user.html:220 +msgid "Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:226 +msgid "Log out active sessions (except this one)" +msgstr "" + +#: templates/InvenTree/settings/user.html:227 +msgid "Log Out Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:236 +msgid "unknown on unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:237 +msgid "unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:241 +msgid "IP Address" +msgstr "" + +#: templates/InvenTree/settings/user.html:242 +msgid "Device" +msgstr "" + +#: templates/InvenTree/settings/user.html:243 +msgid "Last Activity" +msgstr "" + +#: templates/InvenTree/settings/user.html:252 +#, python-format +msgid "%(time)s ago (this session)" +msgstr "" + +#: templates/InvenTree/settings/user.html:254 +#, python-format +msgid "%(time)s ago" +msgstr "" + +#: templates/InvenTree/settings/user.html:266 +msgid "Do you really want to remove the selected email address?" +msgstr "" + #: templates/InvenTree/settings/user_display.html:25 msgid "Theme Settings" msgstr "" -#: templates/InvenTree/settings/user.html:227 #: templates/InvenTree/settings/user_display.html:35 msgid "Select theme" msgstr "" -#: templates/InvenTree/settings/user.html:237 #: templates/InvenTree/settings/user_display.html:46 msgid "Set Theme" msgstr "" -#: templates/InvenTree/settings/user.html:246 #: templates/InvenTree/settings/user_display.html:54 msgid "Language Settings" msgstr "" -#: templates/InvenTree/settings/user.html:254 #: templates/InvenTree/settings/user_display.html:63 msgid "Select language" msgstr "" -#: templates/InvenTree/settings/user.html:270 #: templates/InvenTree/settings/user_display.html:79 #, python-format msgid "%(lang_translated)s%% translated" msgstr "" -#: templates/InvenTree/settings/user.html:272 #: templates/InvenTree/settings/user_display.html:81 msgid "No translations available" msgstr "" -#: templates/InvenTree/settings/user.html:279 #: templates/InvenTree/settings/user_display.html:88 msgid "Set Language" msgstr "" -#: templates/InvenTree/settings/user.html:281 #: templates/InvenTree/settings/user_display.html:91 msgid "Some languages are not complete" msgstr "" -#: templates/InvenTree/settings/user.html:283 #: templates/InvenTree/settings/user_display.html:93 msgid "Show only sufficent" msgstr "" -#: templates/InvenTree/settings/user.html:285 +#: templates/InvenTree/settings/user_display.html:95 +msgid "and hidden." +msgstr "" + #: templates/InvenTree/settings/user_display.html:95 msgid "Show them too" msgstr "" -#: templates/InvenTree/settings/user.html:292 #: templates/InvenTree/settings/user_display.html:101 msgid "Help the translation efforts!" msgstr "" -#: templates/InvenTree/settings/user.html:293 -#, python-format -msgid "Native language translation of the\n" -" InvenTree web application is community contributed via crowdin. Contributions are\n" -" welcomed and encouraged." -msgstr "" - -#: templates/InvenTree/settings/user.html:302 -msgid "Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:308 -msgid "Log out active sessions (except this one)" -msgstr "" - -#: templates/InvenTree/settings/user.html:309 -msgid "Log Out Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:318 -msgid "unknown on unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:319 -msgid "unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:323 -msgid "IP Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:324 -msgid "Device" -msgstr "" - -#: templates/InvenTree/settings/user.html:325 -msgid "Last Activity" -msgstr "" - -#: templates/InvenTree/settings/user.html:334 -#, python-format -msgid "%(time)s ago (this session)" -msgstr "" - -#: templates/InvenTree/settings/user.html:336 -#, python-format -msgid "%(time)s ago" -msgstr "" - -#: templates/InvenTree/settings/user.html:348 -msgid "Do you really want to remove the selected email address?" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:95 -msgid "and hidden." -msgstr "" - #: templates/InvenTree/settings/user_display.html:102 #, python-format msgid "Native language translation of the InvenTree web application is community contributed via crowdin. Contributions are welcomed and encouraged." @@ -6899,9 +6996,9 @@ msgid "InvenTree Version Information" msgstr "" #: templates/about.html:11 templates/about.html:105 -#: templates/js/translated/bom.js:395 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:573 templates/js/translated/modals.js:667 -#: templates/js/translated/modals.js:970 templates/modals.html:15 +#: templates/js/translated/bom.js:407 templates/js/translated/modals.js:53 +#: templates/js/translated/modals.js:584 templates/js/translated/modals.js:678 +#: templates/js/translated/modals.js:983 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -7178,13 +7275,13 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1103 +#: templates/js/translated/bom.js:1117 msgid "Required Quantity" msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:579 templates/js/translated/build.js:1189 +#: templates/js/translated/bom.js:591 templates/js/translated/build.js:1189 #: templates/js/translated/build.js:1810 #: templates/js/translated/table_filters.js:178 msgid "Available" @@ -7208,10 +7305,6 @@ msgstr "" msgid "Click on the following link to view this part" msgstr "" -#: templates/email/low_stock_notification.html:17 -msgid "Total Stock" -msgstr "" - #: templates/email/low_stock_notification.html:19 msgid "Minimum Quantity" msgstr "" @@ -7232,11 +7325,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1040 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1053 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1041 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1054 msgid "No response from the InvenTree server" msgstr "" @@ -7248,27 +7341,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1063 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1051 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1064 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1068 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1056 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1069 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1073 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1061 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1074 msgid "The requested resource could not be located on the server" msgstr "" @@ -7280,11 +7373,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1065 +#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1078 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1066 +#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1079 msgid "Connection timeout while requesting data from server" msgstr "" @@ -7353,7 +7446,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "Invalid server response" msgstr "" @@ -7381,7 +7474,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1018 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1026 msgid "Remove stock item" msgstr "" @@ -7428,12 +7521,12 @@ msgid "Download BOM Template" msgstr "" #: templates/js/translated/bom.js:39 templates/js/translated/bom.js:73 -#: templates/js/translated/order.js:369 templates/js/translated/stock.js:510 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:518 msgid "Format" msgstr "" #: templates/js/translated/bom.js:40 templates/js/translated/bom.js:74 -#: templates/js/translated/order.js:370 templates/js/translated/stock.js:511 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:519 msgid "Select file format" msgstr "" @@ -7489,87 +7582,87 @@ msgstr "" msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:340 -msgid "Select and add a new variant item using the input below" +#: templates/js/translated/bom.js:352 +msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:351 +#: templates/js/translated/bom.js:363 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:357 +#: templates/js/translated/bom.js:369 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:396 +#: templates/js/translated/bom.js:408 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:397 +#: templates/js/translated/bom.js:409 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:516 +#: templates/js/translated/bom.js:528 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:520 templates/js/translated/build.js:1171 +#: templates/js/translated/bom.js:532 templates/js/translated/build.js:1171 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:525 +#: templates/js/translated/bom.js:537 msgid "Open subassembly" msgstr "" -#: templates/js/translated/bom.js:597 +#: templates/js/translated/bom.js:609 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:612 +#: templates/js/translated/bom.js:624 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:619 +#: templates/js/translated/bom.js:631 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:668 templates/js/translated/bom.js:757 +#: templates/js/translated/bom.js:680 templates/js/translated/bom.js:769 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:728 +#: templates/js/translated/bom.js:740 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:742 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:732 +#: templates/js/translated/bom.js:744 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:734 templates/js/translated/bom.js:908 +#: templates/js/translated/bom.js:746 templates/js/translated/bom.js:920 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:891 +#: templates/js/translated/bom.js:748 templates/js/translated/bom.js:903 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:830 templates/js/translated/build.js:915 +#: templates/js/translated/bom.js:842 templates/js/translated/build.js:915 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:886 +#: templates/js/translated/bom.js:898 msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:1086 templates/js/translated/build.js:1155 +#: templates/js/translated/bom.js:1100 templates/js/translated/build.js:1155 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1108 +#: templates/js/translated/bom.js:1122 msgid "Inherited from parent BOM" msgstr "" @@ -7725,9 +7818,9 @@ msgstr "" msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1206 -#: templates/js/translated/part.js:1617 templates/js/translated/stock.js:1512 -#: templates/js/translated/stock.js:2321 +#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:1624 templates/js/translated/stock.js:1520 +#: templates/js/translated/stock.js:2479 msgid "Select" msgstr "" @@ -7735,7 +7828,7 @@ msgstr "" msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2540 +#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2698 msgid "No user information" msgstr "" @@ -7808,34 +7901,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:500 -#: templates/js/translated/company.js:757 templates/js/translated/part.js:511 -#: templates/js/translated/part.js:596 +#: templates/js/translated/company.js:757 templates/js/translated/part.js:517 +#: templates/js/translated/part.js:602 msgid "Template part" msgstr "" #: templates/js/translated/company.js:504 -#: templates/js/translated/company.js:761 templates/js/translated/part.js:515 -#: templates/js/translated/part.js:600 +#: templates/js/translated/company.js:761 templates/js/translated/part.js:521 +#: templates/js/translated/part.js:606 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:631 templates/js/translated/part.js:690 +#: templates/js/translated/company.js:631 templates/js/translated/part.js:696 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:668 templates/js/translated/part.js:732 +#: templates/js/translated/company.js:668 templates/js/translated/part.js:738 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:669 templates/js/translated/part.js:733 +#: templates/js/translated/company.js:669 templates/js/translated/part.js:739 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:688 templates/js/translated/part.js:750 +#: templates/js/translated/company.js:688 templates/js/translated/part.js:756 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:699 templates/js/translated/part.js:762 +#: templates/js/translated/company.js:699 templates/js/translated/part.js:768 msgid "Delete Parameter" msgstr "" @@ -7844,12 +7937,12 @@ msgid "No supplier parts found" msgstr "" #: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:420 +#: templates/js/translated/filters.js:429 msgid "true" msgstr "" #: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:421 +#: templates/js/translated/filters.js:430 msgid "false" msgstr "" @@ -7869,7 +7962,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:329 +#: templates/js/translated/filters.js:338 msgid "Create filter" msgstr "" @@ -7898,20 +7991,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1080 templates/modals.html:19 +#: templates/js/translated/forms.js:1082 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1471 +#: templates/js/translated/forms.js:1487 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1675 +#: templates/js/translated/forms.js:1691 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1895 +#: templates/js/translated/forms.js:1930 msgid "Clear input" msgstr "" @@ -7924,7 +8017,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1042 +#: templates/js/translated/stock.js:1050 msgid "Select Stock Items" msgstr "" @@ -7974,12 +8067,12 @@ msgid "Select Label Template" msgstr "" #: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 -#: templates/js/translated/modals.js:599 +#: templates/js/translated/modals.js:610 msgid "Cancel" msgstr "" #: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:666 templates/js/translated/modals.js:969 +#: templates/js/translated/modals.js:677 templates/js/translated/modals.js:982 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" @@ -7988,47 +8081,47 @@ msgstr "" msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:381 +#: templates/js/translated/modals.js:392 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:540 +#: templates/js/translated/modals.js:551 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:598 +#: templates/js/translated/modals.js:609 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:655 +#: templates/js/translated/modals.js:666 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:933 +#: templates/js/translated/modals.js:946 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1045 +#: templates/js/translated/modals.js:1058 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1046 +#: templates/js/translated/modals.js:1059 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1069 +#: templates/js/translated/modals.js:1082 msgid "Error requesting form data" msgstr "" @@ -8052,23 +8145,24 @@ msgstr "" msgid "Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:236 +#: templates/js/translated/model_renderers.js:249 +#: templates/js/translated/model_renderers.js:270 msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:253 +#: templates/js/translated/model_renderers.js:287 msgid "Shipment ID" msgstr "" -#: templates/js/translated/model_renderers.js:273 +#: templates/js/translated/model_renderers.js:307 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:310 +#: templates/js/translated/model_renderers.js:344 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:339 +#: templates/js/translated/model_renderers.js:373 msgid "Supplier Part ID" msgstr "" @@ -8116,7 +8210,7 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2123 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2131 msgid "Stock Status" msgstr "" @@ -8140,7 +8234,7 @@ msgstr "" msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:790 templates/js/translated/part.js:803 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:809 msgid "No purchase orders found" msgstr "" @@ -8165,7 +8259,7 @@ msgid "Total" msgstr "" #: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 -#: templates/js/translated/part.js:1834 templates/js/translated/part.js:2045 +#: templates/js/translated/part.js:1841 templates/js/translated/part.js:2052 msgid "Unit Price" msgstr "" @@ -8181,7 +8275,7 @@ msgstr "" msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1166 templates/js/translated/part.js:935 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:942 msgid "Receive line item" msgstr "" @@ -8250,7 +8344,7 @@ msgid "Delete Stock Allocation" msgstr "" #: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 -#: templates/js/translated/stock.js:1428 +#: templates/js/translated/stock.js:1436 msgid "Shipped to customer" msgstr "" @@ -8378,144 +8472,148 @@ msgstr "" msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:412 +#: templates/js/translated/part.js:351 +msgid "Create Part Variant" +msgstr "" + +#: templates/js/translated/part.js:418 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:414 +#: templates/js/translated/part.js:420 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:419 +#: templates/js/translated/part.js:425 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:421 +#: templates/js/translated/part.js:427 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:444 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:448 +#: templates/js/translated/part.js:454 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:451 +#: templates/js/translated/part.js:457 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:481 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:503 templates/js/translated/part.js:588 +#: templates/js/translated/part.js:509 templates/js/translated/part.js:594 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:507 templates/js/translated/part.js:592 +#: templates/js/translated/part.js:513 templates/js/translated/part.js:598 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:519 +#: templates/js/translated/part.js:525 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:523 +#: templates/js/translated/part.js:529 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:638 +#: templates/js/translated/part.js:644 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1005 +#: templates/js/translated/part.js:1012 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1029 +#: templates/js/translated/part.js:1036 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1096 templates/js/translated/part.js:1356 +#: templates/js/translated/part.js:1103 templates/js/translated/part.js:1363 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1266 +#: templates/js/translated/part.js:1273 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1289 +#: templates/js/translated/part.js:1296 #: templates/js/translated/table_filters.js:430 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:1380 templates/js/translated/part.js:1552 -#: templates/js/translated/stock.js:2282 +#: templates/js/translated/part.js:1387 templates/js/translated/part.js:1559 +#: templates/js/translated/stock.js:2440 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1396 +#: templates/js/translated/part.js:1403 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1571 templates/js/translated/stock.js:2301 +#: templates/js/translated/part.js:1578 templates/js/translated/stock.js:2459 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:1635 +#: templates/js/translated/part.js:1642 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1649 templates/js/translated/stock.js:2345 +#: templates/js/translated/part.js:1656 templates/js/translated/stock.js:2503 msgid "Path" msgstr "" -#: templates/js/translated/part.js:1693 +#: templates/js/translated/part.js:1700 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1744 templates/js/translated/stock.js:1234 +#: templates/js/translated/part.js:1751 templates/js/translated/stock.js:1242 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1745 templates/js/translated/stock.js:1235 +#: templates/js/translated/part.js:1752 templates/js/translated/stock.js:1243 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:1751 +#: templates/js/translated/part.js:1758 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:1773 +#: templates/js/translated/part.js:1780 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:1787 +#: templates/js/translated/part.js:1794 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:1812 +#: templates/js/translated/part.js:1819 #, python-brace-format msgid "No ${human_name} information found" msgstr "" -#: templates/js/translated/part.js:1867 +#: templates/js/translated/part.js:1874 #, python-brace-format msgid "Edit ${human_name}" msgstr "" -#: templates/js/translated/part.js:1868 +#: templates/js/translated/part.js:1875 #, python-brace-format msgid "Delete ${human_name}" msgstr "" -#: templates/js/translated/part.js:1969 +#: templates/js/translated/part.js:1976 msgid "Single Price" msgstr "" -#: templates/js/translated/part.js:1988 +#: templates/js/translated/part.js:1995 msgid "Single Price Difference" msgstr "" @@ -8589,340 +8687,344 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:74 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:181 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:93 templates/js/translated/stock.js:175 +#: templates/js/translated/stock.js:94 templates/js/translated/stock.js:183 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:101 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:110 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:146 +#: templates/js/translated/stock.js:154 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:186 +#: templates/js/translated/stock.js:194 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:225 +#: templates/js/translated/stock.js:233 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:231 +#: templates/js/translated/stock.js:239 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:382 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:387 +#: templates/js/translated/stock.js:395 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:420 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:416 templates/js/translated/stock.js:417 +#: templates/js/translated/stock.js:424 templates/js/translated/stock.js:425 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:433 +#: templates/js/translated/stock.js:441 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:453 +#: templates/js/translated/stock.js:461 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:462 +#: templates/js/translated/stock.js:470 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:515 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:526 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:519 +#: templates/js/translated/stock.js:527 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:628 +#: templates/js/translated/stock.js:636 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:629 +#: templates/js/translated/stock.js:637 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:714 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:715 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:709 +#: templates/js/translated/stock.js:717 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:710 +#: templates/js/translated/stock.js:718 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:796 +#: templates/js/translated/stock.js:804 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:797 +#: templates/js/translated/stock.js:805 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:892 +#: templates/js/translated/stock.js:900 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:893 +#: templates/js/translated/stock.js:901 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:899 +#: templates/js/translated/stock.js:907 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:900 +#: templates/js/translated/stock.js:908 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:904 +#: templates/js/translated/stock.js:912 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:905 +#: templates/js/translated/stock.js:913 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:909 +#: templates/js/translated/stock.js:917 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:910 users/models.py:206 +#: templates/js/translated/stock.js:918 users/models.py:208 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:914 templates/stock_table.html:58 +#: templates/js/translated/stock.js:922 templates/stock_table.html:58 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1051 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1201 +#: templates/js/translated/stock.js:1209 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1203 +#: templates/js/translated/stock.js:1211 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1208 +#: templates/js/translated/stock.js:1216 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1230 +#: templates/js/translated/stock.js:1238 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1256 +#: templates/js/translated/stock.js:1264 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1313 +#: templates/js/translated/stock.js:1321 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1428 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1424 +#: templates/js/translated/stock.js:1432 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1432 +#: templates/js/translated/stock.js:1440 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1438 +#: templates/js/translated/stock.js:1446 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1604 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1601 +#: templates/js/translated/stock.js:1609 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1604 +#: templates/js/translated/stock.js:1612 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1608 +#: templates/js/translated/stock.js:1616 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1610 +#: templates/js/translated/stock.js:1618 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1616 +#: templates/js/translated/stock.js:1624 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1618 +#: templates/js/translated/stock.js:1626 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1620 +#: templates/js/translated/stock.js:1628 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1633 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1632 +#: templates/js/translated/stock.js:1640 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1634 +#: templates/js/translated/stock.js:1642 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1636 +#: templates/js/translated/stock.js:1644 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1648 #: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1690 +#: templates/js/translated/stock.js:1698 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1763 +#: templates/js/translated/stock.js:1771 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1809 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1822 templates/js/translated/stock.js:1870 +#: templates/js/translated/stock.js:1830 templates/js/translated/stock.js:1878 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1910 +#: templates/js/translated/stock.js:1918 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1937 +#: templates/js/translated/stock.js:1945 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1939 +#: templates/js/translated/stock.js:1947 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:2138 +#: templates/js/translated/stock.js:2146 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2152 +#: templates/js/translated/stock.js:2160 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2153 +#: templates/js/translated/stock.js:2161 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2377 +#: templates/js/translated/stock.js:2340 +msgid "Allocated Quantity" +msgstr "" + +#: templates/js/translated/stock.js:2535 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2399 +#: templates/js/translated/stock.js:2557 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2424 +#: templates/js/translated/stock.js:2582 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2443 +#: templates/js/translated/stock.js:2601 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2462 +#: templates/js/translated/stock.js:2620 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2480 +#: templates/js/translated/stock.js:2638 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2503 +#: templates/js/translated/stock.js:2661 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2511 +#: templates/js/translated/stock.js:2669 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2552 +#: templates/js/translated/stock.js:2710 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2553 +#: templates/js/translated/stock.js:2711 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2604 +#: templates/js/translated/stock.js:2762 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2655 +#: templates/js/translated/stock.js:2813 msgid "Uninstall Stock Item" msgstr "" @@ -9194,11 +9296,11 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:113 +#: templates/navbar.html:114 msgid "Logout" msgstr "" -#: templates/navbar.html:115 +#: templates/navbar.html:116 msgid "Login" msgstr "" @@ -9246,31 +9348,43 @@ msgstr "" msgid "Server is deployed using docker" msgstr "" -#: templates/stats.html:40 -msgid "Server status" +#: templates/stats.html:39 +msgid "Plugin Support" msgstr "" #: templates/stats.html:43 -msgid "Healthy" +msgid "Plugin support enabled" msgstr "" #: templates/stats.html:45 -msgid "Issues detected" +msgid "Plugin support disabled" msgstr "" #: templates/stats.html:52 -msgid "Background Worker" +msgid "Server status" msgstr "" #: templates/stats.html:55 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:57 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:64 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:67 msgid "Background worker not running" msgstr "" -#: templates/stats.html:63 +#: templates/stats.html:75 msgid "Email Settings" msgstr "" -#: templates/stats.html:66 +#: templates/stats.html:78 msgid "Email settings not configured" msgstr "" @@ -9366,35 +9480,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:193 +#: users/models.py:195 msgid "Permission set" msgstr "" -#: users/models.py:201 +#: users/models.py:203 msgid "Group" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "View" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to view items" msgstr "" -#: users/models.py:206 +#: users/models.py:208 msgid "Permission to add items" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Change" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Permissions to edit items" msgstr "" -#: users/models.py:210 +#: users/models.py:212 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/ko/LC_MESSAGES/django.po b/InvenTree/locale/ko/LC_MESSAGES/django.po index 92723e867d..0d87fb8280 100644 --- a/InvenTree/locale/ko/LC_MESSAGES/django.po +++ b/InvenTree/locale/ko/LC_MESSAGES/django.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-10 03:54+0000\n" -"PO-Revision-Date: 2022-01-10 03:57\n" +"POT-Creation-Date: 2022-01-29 00:17+0000\n" +"PO-Revision-Date: 2022-01-29 01:10\n" "Last-Translator: \n" "Language-Team: Korean\n" "Language: ko_KR\n" @@ -18,15 +18,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 138\n" -#: InvenTree/api.py:64 +#: InvenTree/api.py:55 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:110 +#: InvenTree/api.py:101 msgid "No action specified" msgstr "" -#: InvenTree/api.py:124 +#: InvenTree/api.py:116 msgid "No matching action found" msgstr "" @@ -50,11 +50,11 @@ msgstr "" #: InvenTree/forms.py:174 msgid "Enter password" -msgstr "" +msgstr "비밀번호를 입력하세요" #: InvenTree/forms.py:175 msgid "Enter new password" -msgstr "" +msgstr "새로운 비밀번호를 입력하세요" #: InvenTree/forms.py:182 msgid "Confirm password" @@ -74,47 +74,47 @@ msgstr "" #: InvenTree/forms.py:240 msgid "Email address confirmation" -msgstr "" +msgstr "이메일 주소 확인" #: InvenTree/forms.py:260 msgid "You must type the same email each time." msgstr "" -#: InvenTree/helpers.py:437 +#: InvenTree/helpers.py:439 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:444 order/models.py:279 order/models.py:420 +#: InvenTree/helpers.py:446 order/models.py:282 order/models.py:425 #: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:447 +#: InvenTree/helpers.py:449 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:469 InvenTree/helpers.py:472 InvenTree/helpers.py:475 -#: InvenTree/helpers.py:500 +#: InvenTree/helpers.py:471 InvenTree/helpers.py:474 InvenTree/helpers.py:477 +#: InvenTree/helpers.py:502 #, python-brace-format msgid "Invalid group: {g}" msgstr "" -#: InvenTree/helpers.py:510 +#: InvenTree/helpers.py:512 #, python-brace-format msgid "Invalid group {group}" msgstr "" -#: InvenTree/helpers.py:516 +#: InvenTree/helpers.py:518 #, python-brace-format msgid "Invalid/no group {group}" msgstr "" -#: InvenTree/helpers.py:522 +#: InvenTree/helpers.py:524 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:526 +#: InvenTree/helpers.py:528 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" @@ -127,27 +127,27 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1967 +#: InvenTree/models.py:132 stock/models.py:1995 #: templates/js/translated/attachment.js:119 msgid "Attachment" -msgstr "" +msgstr "첨부파일" #: InvenTree/models.py:133 msgid "Select file to attach" -msgstr "" +msgstr "첨부할 파일을 선택하세요" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:124 part/models.py:828 +#: company/models.py:564 order/models.py:127 part/models.py:830 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:540 -#: templates/js/translated/company.js:829 templates/js/translated/part.js:1317 +#: templates/js/translated/company.js:829 templates/js/translated/part.js:1324 msgid "Link" -msgstr "" +msgstr "링크" -#: InvenTree/models.py:140 build/models.py:330 part/models.py:829 -#: stock/models.py:527 +#: InvenTree/models.py:140 build/models.py:332 part/models.py:831 +#: stock/models.py:529 msgid "Link to external URL" -msgstr "" +msgstr "외부 URL로 링크" #: InvenTree/models.py:143 templates/js/translated/attachment.js:163 msgid "Comment" @@ -157,20 +157,21 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 -#: common/models.py:1214 part/models.py:2258 part/models.py:2278 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1223 +#: common/models.py:1224 common/models.py:1452 common/models.py:1453 +#: part/models.py:2265 part/models.py:2285 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2534 +#: templates/js/translated/stock.js:2692 msgid "User" -msgstr "" +msgstr "사용자" #: InvenTree/models.py:153 msgid "upload date" -msgstr "" +msgstr "업로드 날짜" #: InvenTree/models.py:176 msgid "Filename must not be empty" -msgstr "" +msgstr "파일명은 비워둘 수 없습니다" #: InvenTree/models.py:199 msgid "Invalid attachment directory" @@ -179,7 +180,7 @@ msgstr "" #: InvenTree/models.py:209 #, python-brace-format msgid "Filename contains illegal character '{c}'" -msgstr "" +msgstr "파일명에 허용되지 않은 문자 '{c}'가 포함되어 있습니다" #: InvenTree/models.py:212 msgid "Filename missing extension" @@ -187,150 +188,150 @@ msgstr "" #: InvenTree/models.py:219 msgid "Attachment with this filename already exists" -msgstr "" +msgstr "같은 이름의 첨부파일이 이미 존재합니다" #: InvenTree/models.py:226 msgid "Error renaming file" -msgstr "" +msgstr "파일 이름 바꾸기 오류" #: InvenTree/models.py:261 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 -#: label/models.py:112 part/models.py:772 part/models.py:2442 -#: plugin/models.py:40 report/models.py:181 +#: InvenTree/models.py:277 InvenTree/models.py:278 common/models.py:1438 +#: company/models.py:415 label/models.py:112 part/models.py:774 +#: part/models.py:2449 plugin/models.py:40 report/models.py:181 #: templates/InvenTree/settings/mixins/urls.html:13 -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:125 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:279 -#: templates/js/translated/company.js:641 templates/js/translated/part.js:561 -#: templates/js/translated/part.js:700 templates/js/translated/part.js:1624 -#: templates/js/translated/stock.js:2327 +#: templates/InvenTree/settings/settings.html:282 +#: templates/js/translated/company.js:641 templates/js/translated/part.js:567 +#: templates/js/translated/part.js:706 templates/js/translated/part.js:1631 +#: templates/js/translated/stock.js:2485 msgid "Name" -msgstr "" +msgstr "이름" -#: InvenTree/models.py:284 build/models.py:207 +#: InvenTree/models.py:284 build/models.py:209 #: build/templates/build/detail.html:25 company/models.py:354 #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:122 part/models.py:795 part/templates/part/category.html:74 +#: order/models.py:125 part/models.py:797 part/templates/part/category.html:74 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 #: stock/templates/stock/location.html:93 #: templates/InvenTree/settings/plugin_settings.html:33 -#: templates/js/translated/bom.js:327 templates/js/translated/bom.js:540 +#: templates/js/translated/bom.js:339 templates/js/translated/bom.js:552 #: templates/js/translated/build.js:1682 templates/js/translated/company.js:345 #: templates/js/translated/company.js:551 #: templates/js/translated/company.js:840 templates/js/translated/order.js:836 #: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 -#: templates/js/translated/part.js:620 templates/js/translated/part.js:992 -#: templates/js/translated/part.js:1077 templates/js/translated/part.js:1247 -#: templates/js/translated/part.js:1643 templates/js/translated/part.js:1712 -#: templates/js/translated/stock.js:1569 templates/js/translated/stock.js:2339 -#: templates/js/translated/stock.js:2384 +#: templates/js/translated/part.js:626 templates/js/translated/part.js:999 +#: templates/js/translated/part.js:1084 templates/js/translated/part.js:1254 +#: templates/js/translated/part.js:1650 templates/js/translated/part.js:1719 +#: templates/js/translated/stock.js:1577 templates/js/translated/stock.js:2314 +#: templates/js/translated/stock.js:2497 templates/js/translated/stock.js:2542 msgid "Description" -msgstr "" +msgstr "설명" #: InvenTree/models.py:285 msgid "Description (optional)" -msgstr "" +msgstr "설명 (선택 사항)" #: InvenTree/models.py:293 msgid "parent" msgstr "" -#: InvenTree/serializers.py:65 part/models.py:2727 +#: InvenTree/serializers.py:65 part/models.py:2734 msgid "Must be a valid number" msgstr "" #: InvenTree/serializers.py:299 msgid "Filename" -msgstr "" +msgstr "파일명" + +#: InvenTree/settings.py:661 +msgid "German" +msgstr "독일어" + +#: InvenTree/settings.py:662 +msgid "Greek" +msgstr "그리스어" #: InvenTree/settings.py:663 -msgid "German" -msgstr "" +msgid "English" +msgstr "영어" #: InvenTree/settings.py:664 -msgid "Greek" -msgstr "" +msgid "Spanish" +msgstr "스페인어" #: InvenTree/settings.py:665 -msgid "English" -msgstr "" +msgid "Spanish (Mexican)" +msgstr "스페인어 (멕시코)" #: InvenTree/settings.py:666 -msgid "Spanish" -msgstr "" +msgid "French" +msgstr "프랑스어" #: InvenTree/settings.py:667 -msgid "Spanish (Mexican)" -msgstr "" +msgid "Hebrew" +msgstr "히브리어" #: InvenTree/settings.py:668 -msgid "French" -msgstr "" +msgid "Italian" +msgstr "이탈리아어" #: InvenTree/settings.py:669 -msgid "Hebrew" -msgstr "" +msgid "Japanese" +msgstr "일본어" #: InvenTree/settings.py:670 -msgid "Italian" -msgstr "" +msgid "Korean" +msgstr "한국어" #: InvenTree/settings.py:671 -msgid "Japanese" -msgstr "" +msgid "Dutch" +msgstr "네덜란드어" #: InvenTree/settings.py:672 -msgid "Korean" -msgstr "" +msgid "Norwegian" +msgstr "노르웨이어" #: InvenTree/settings.py:673 -msgid "Dutch" -msgstr "" +msgid "Polish" +msgstr "폴란드어" #: InvenTree/settings.py:674 -msgid "Norwegian" -msgstr "" +msgid "Portugese" +msgstr "포르투갈어" #: InvenTree/settings.py:675 -msgid "Polish" -msgstr "" +msgid "Russian" +msgstr "러시아어" #: InvenTree/settings.py:676 -msgid "Portugese" -msgstr "" +msgid "Swedish" +msgstr "스웨덴어" #: InvenTree/settings.py:677 -msgid "Russian" -msgstr "" +msgid "Thai" +msgstr "태국어" #: InvenTree/settings.py:678 -msgid "Swedish" -msgstr "" +msgid "Turkish" +msgstr "터키어" #: InvenTree/settings.py:679 -msgid "Thai" -msgstr "" +msgid "Vietnamese" +msgstr "베트남어" #: InvenTree/settings.py:680 -msgid "Turkish" -msgstr "" - -#: InvenTree/settings.py:681 -msgid "Vietnamese" -msgstr "" - -#: InvenTree/settings.py:682 msgid "Chinese" -msgstr "" +msgstr "중국어" #: InvenTree/status.py:94 msgid "Background worker check failed" @@ -374,7 +375,7 @@ msgstr "" msgid "Returned" msgstr "" -#: InvenTree/status_codes.py:143 order/models.py:941 +#: InvenTree/status_codes.py:143 order/models.py:961 #: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "" @@ -455,7 +456,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2064 +#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2072 msgid "Merged stock items" msgstr "" @@ -541,58 +542,58 @@ msgstr "" #: InvenTree/views.py:883 templates/navbar.html:126 msgid "System Information" -msgstr "" +msgstr "시스템 정보" -#: barcodes/api.py:54 barcodes/api.py:151 +#: barcodes/api.py:54 barcodes/api.py:152 msgid "Must provide barcode_data parameter" msgstr "" -#: barcodes/api.py:127 +#: barcodes/api.py:128 msgid "No match found for barcode data" msgstr "" -#: barcodes/api.py:129 +#: barcodes/api.py:130 msgid "Match found for barcode data" msgstr "" -#: barcodes/api.py:154 +#: barcodes/api.py:155 msgid "Must provide stockitem parameter" msgstr "" -#: barcodes/api.py:161 +#: barcodes/api.py:162 msgid "No matching stock item found" msgstr "" -#: barcodes/api.py:191 +#: barcodes/api.py:193 msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:195 +#: barcodes/api.py:197 msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:199 +#: barcodes/api.py:201 msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:205 barcodes/api.py:217 +#: barcodes/api.py:207 barcodes/api.py:219 msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:223 +#: barcodes/api.py:225 msgid "Barcode associated with Stock Item" msgstr "" -#: build/forms.py:36 build/models.py:1286 +#: build/forms.py:36 build/models.py:1293 #: build/templates/build/build_base.html:82 -#: build/templates/build/detail.html:35 common/models.py:1253 +#: build/templates/build/detail.html:35 common/models.py:1263 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/models.py:796 order/models.py:1207 order/serializers.py:810 +#: order/models.py:805 order/models.py:1229 order/serializers.py:816 #: order/templates/order/order_wizard/match_parts.html:30 -#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:145 -#: part/forms.py:161 part/forms.py:177 part/models.py:2629 +#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:144 +#: part/forms.py:160 part/forms.py:176 part/models.py:2636 #: part/templates/part/bom_upload/match_parts.html:31 -#: part/templates/part/detail.html:962 part/templates/part/detail.html:1048 +#: part/templates/part/detail.html:992 part/templates/part/detail.html:1078 #: part/templates/part/part_pricing.html:16 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 @@ -603,7 +604,7 @@ msgstr "" #: stock/templates/stock/item_base.html:181 #: stock/templates/stock/item_base.html:262 #: stock/templates/stock/item_base.html:270 -#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:555 +#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:567 #: templates/js/translated/build.js:295 templates/js/translated/build.js:495 #: templates/js/translated/build.js:689 templates/js/translated/build.js:699 #: templates/js/translated/build.js:1075 templates/js/translated/build.js:1422 @@ -611,21 +612,21 @@ msgstr "" #: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 #: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 #: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 -#: templates/js/translated/order.js:2150 templates/js/translated/part.js:900 -#: templates/js/translated/part.js:1855 templates/js/translated/part.js:1978 -#: templates/js/translated/part.js:2056 templates/js/translated/stock.js:383 -#: templates/js/translated/stock.js:580 templates/js/translated/stock.js:750 -#: templates/js/translated/stock.js:2519 templates/js/translated/stock.js:2621 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:906 +#: templates/js/translated/part.js:1862 templates/js/translated/part.js:1985 +#: templates/js/translated/part.js:2063 templates/js/translated/stock.js:391 +#: templates/js/translated/stock.js:588 templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2779 msgid "Quantity" -msgstr "" +msgstr "수량" #: build/forms.py:37 msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 -#: stock/serializers.py:314 templates/js/translated/stock.js:230 -#: templates/js/translated/stock.js:384 +#: build/forms.py:41 order/serializers.py:820 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:238 +#: templates/js/translated/stock.js:392 msgid "Serial Numbers" msgstr "" @@ -649,18 +650,18 @@ msgstr "" msgid "Confirm build cancellation" msgstr "" -#: build/models.py:133 +#: build/models.py:135 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:137 build/templates/build/build_base.html:9 +#: build/models.py:139 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:457 +#: templates/js/translated/build.js:457 templates/js/translated/stock.js:2290 msgid "Build Order" msgstr "" -#: build/models.py:138 build/templates/build/build_base.html:13 +#: build/models.py:140 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:92 #: order/templates/order/so_sidebar.html:13 @@ -670,40 +671,40 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:198 +#: build/models.py:200 msgid "Build Order Reference" msgstr "" -#: build/models.py:199 order/models.py:210 order/models.py:536 -#: order/models.py:803 part/models.py:2638 +#: build/models.py:201 order/models.py:213 order/models.py:541 +#: order/models.py:812 part/models.py:2645 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:547 templates/js/translated/build.js:1179 +#: templates/js/translated/bom.js:559 templates/js/translated/build.js:1179 #: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "" -#: build/models.py:210 +#: build/models.py:212 msgid "Brief description of the build" msgstr "" -#: build/models.py:219 build/templates/build/build_base.html:164 +#: build/models.py:221 build/templates/build/build_base.html:164 #: build/templates/build/detail.html:88 msgid "Parent Build" msgstr "" -#: build/models.py:220 +#: build/models.py:222 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:225 build/templates/build/build_base.html:77 +#: build/models.py:227 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:856 order/models.py:930 -#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 -#: part/models.py:2204 part/models.py:2220 part/models.py:2239 -#: part/models.py:2256 part/models.py:2358 part/models.py:2480 -#: part/models.py:2613 part/models.py:2920 part/serializers.py:658 +#: order/models.py:876 order/models.py:950 +#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:359 +#: part/models.py:2211 part/models.py:2227 part/models.py:2246 +#: part/models.py:2263 part/models.py:2365 part/models.py:2487 +#: part/models.py:2620 part/models.py:2927 part/serializers.py:658 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/set_category.html:13 @@ -713,205 +714,205 @@ msgstr "" #: templates/InvenTree/search.html:80 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 -#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:326 -#: templates/js/translated/bom.js:505 templates/js/translated/build.js:680 +#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:338 +#: templates/js/translated/bom.js:517 templates/js/translated/build.js:680 #: templates/js/translated/build.js:1048 templates/js/translated/build.js:1419 #: templates/js/translated/build.js:1687 templates/js/translated/company.js:492 #: templates/js/translated/company.js:749 templates/js/translated/order.js:84 #: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 #: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 -#: templates/js/translated/order.js:2128 templates/js/translated/part.js:977 -#: templates/js/translated/part.js:1058 templates/js/translated/part.js:1225 -#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:719 -#: templates/js/translated/stock.js:926 templates/js/translated/stock.js:1526 -#: templates/js/translated/stock.js:2609 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:984 +#: templates/js/translated/part.js:1065 templates/js/translated/part.js:1232 +#: templates/js/translated/stock.js:562 templates/js/translated/stock.js:727 +#: templates/js/translated/stock.js:934 templates/js/translated/stock.js:1534 +#: templates/js/translated/stock.js:2767 msgid "Part" msgstr "" -#: build/models.py:233 +#: build/models.py:235 msgid "Select part to build" msgstr "" -#: build/models.py:238 +#: build/models.py:240 msgid "Sales Order Reference" msgstr "" -#: build/models.py:242 +#: build/models.py:244 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1407 +#: build/models.py:249 templates/js/translated/build.js:1407 #: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "" -#: build/models.py:251 +#: build/models.py:253 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:256 +#: build/models.py:258 msgid "Destination Location" msgstr "" -#: build/models.py:260 +#: build/models.py:262 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:264 +#: build/models.py:266 msgid "Build Quantity" msgstr "" -#: build/models.py:267 +#: build/models.py:269 msgid "Number of stock items to build" msgstr "" -#: build/models.py:271 +#: build/models.py:273 msgid "Completed items" msgstr "" -#: build/models.py:273 +#: build/models.py:275 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:277 part/templates/part/part_base.html:234 +#: build/models.py:279 part/templates/part/part_base.html:234 msgid "Build Status" msgstr "" -#: build/models.py:281 +#: build/models.py:283 msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:531 +#: build/models.py:287 stock/models.py:533 msgid "Batch Code" msgstr "" -#: build/models.py:289 +#: build/models.py:291 msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:126 part/models.py:967 +#: build/models.py:294 order/models.py:129 part/models.py:969 #: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "" -#: build/models.py:296 order/models.py:558 +#: build/models.py:298 order/models.py:563 msgid "Target completion date" msgstr "" -#: build/models.py:297 +#: build/models.py:299 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:252 +#: build/models.py:302 order/models.py:255 #: templates/js/translated/build.js:1758 msgid "Completion Date" msgstr "" -#: build/models.py:306 +#: build/models.py:308 msgid "completed by" msgstr "" -#: build/models.py:314 templates/js/translated/build.js:1729 +#: build/models.py:316 templates/js/translated/build.js:1729 msgid "Issued by" msgstr "" -#: build/models.py:315 +#: build/models.py:317 msgid "User who issued this build order" msgstr "" -#: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:140 +#: build/models.py:325 build/templates/build/build_base.html:185 +#: build/templates/build/detail.html:116 order/models.py:143 #: order/templates/order/order_base.html:170 -#: order/templates/order/sales_order_base.html:182 part/models.py:971 +#: order/templates/order/sales_order_base.html:182 part/models.py:973 #: report/templates/report/inventree_build_order_base.html:159 #: templates/js/translated/build.js:1741 templates/js/translated/order.js:864 msgid "Responsible" msgstr "" -#: build/models.py:324 +#: build/models.py:326 msgid "User responsible for this build order" msgstr "" -#: build/models.py:329 build/templates/build/detail.html:102 +#: build/models.py:331 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:525 +#: part/templates/part/part_base.html:354 stock/models.py:527 #: stock/templates/stock/item_base.html:373 msgid "External Link" -msgstr "" +msgstr "외부 링크" -#: build/models.py:334 build/serializers.py:201 +#: build/models.py:336 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:144 order/models.py:805 order/models.py:1051 +#: order/models.py:147 order/models.py:814 order/models.py:1071 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/models.py:956 -#: part/templates/part/detail.html:120 part/templates/part/part_sidebar.html:50 +#: order/templates/order/so_sidebar.html:17 part/models.py:958 +#: part/templates/part/detail.html:137 part/templates/part/part_sidebar.html:54 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:597 -#: stock/models.py:1867 stock/models.py:1973 stock/serializers.py:332 -#: stock/serializers.py:639 stock/serializers.py:737 stock/serializers.py:869 -#: stock/templates/stock/stock_sidebar.html:21 -#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:711 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:599 +#: stock/models.py:1895 stock/models.py:2001 stock/serializers.py:332 +#: stock/serializers.py:640 stock/serializers.py:738 stock/serializers.py:870 +#: stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:723 #: templates/js/translated/company.js:845 templates/js/translated/order.js:1149 #: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 -#: templates/js/translated/stock.js:1309 templates/js/translated/stock.js:1795 +#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1803 msgid "Notes" msgstr "" -#: build/models.py:335 +#: build/models.py:337 msgid "Extra build notes" msgstr "" -#: build/models.py:710 +#: build/models.py:717 msgid "No build output specified" msgstr "" -#: build/models.py:713 +#: build/models.py:720 msgid "Build output is already completed" msgstr "" -#: build/models.py:716 +#: build/models.py:723 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1108 +#: build/models.py:1115 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1117 +#: build/models.py:1124 #, python-brace-format msgid "Allocated quantity ({q}) must not execed available stock quantity ({a})" msgstr "" -#: build/models.py:1127 +#: build/models.py:1134 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:1167 +#: build/models.py:1140 order/models.py:1189 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1139 +#: build/models.py:1146 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1196 +#: build/models.py:1203 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1256 stock/templates/stock/item_base.html:345 +#: build/models.py:1263 stock/templates/stock/item_base.html:345 #: templates/InvenTree/search.html:137 templates/js/translated/build.js:1660 #: templates/navbar.html:35 msgid "Build" msgstr "" -#: build/models.py:1257 +#: build/models.py:1264 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1273 build/serializers.py:388 order/serializers.py:690 -#: order/serializers.py:708 stock/serializers.py:577 stock/serializers.py:695 +#: build/models.py:1280 build/serializers.py:388 order/serializers.py:696 +#: order/serializers.py:714 stock/serializers.py:578 stock/serializers.py:696 #: stock/templates/stock/item_base.html:9 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:367 @@ -920,24 +921,24 @@ msgstr "" #: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 #: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 #: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 -#: templates/js/translated/stock.js:555 templates/js/translated/stock.js:720 -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:563 templates/js/translated/stock.js:728 +#: templates/js/translated/stock.js:2628 msgid "Stock Item" msgstr "" -#: build/models.py:1274 +#: build/models.py:1281 msgid "Source stock item" msgstr "" -#: build/models.py:1287 +#: build/models.py:1294 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1295 +#: build/models.py:1302 msgid "Install into" msgstr "" -#: build/models.py:1296 +#: build/models.py:1303 msgid "Destination stock item" msgstr "" @@ -962,32 +963,32 @@ msgid "This build output is not fully allocated" msgstr "" #: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 -#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:730 -#: stock/serializers.py:971 stock/templates/stock/item_base.html:313 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:731 +#: stock/serializers.py:972 stock/templates/stock/item_base.html:313 #: templates/js/translated/barcode.js:384 #: templates/js/translated/barcode.js:557 templates/js/translated/build.js:480 #: templates/js/translated/build.js:1087 templates/js/translated/order.js:508 #: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 #: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 -#: templates/js/translated/part.js:179 templates/js/translated/stock.js:556 -#: templates/js/translated/stock.js:721 templates/js/translated/stock.js:928 -#: templates/js/translated/stock.js:1676 templates/js/translated/stock.js:2411 +#: templates/js/translated/part.js:179 templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:729 templates/js/translated/stock.js:936 +#: templates/js/translated/stock.js:1684 templates/js/translated/stock.js:2569 msgid "Location" -msgstr "" +msgstr "위치" #: build/serializers.py:191 msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:552 +#: build/templates/build/detail.html:63 order/models.py:557 #: order/serializers.py:247 stock/templates/stock/item_base.html:187 #: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1716 #: templates/js/translated/order.js:591 templates/js/translated/order.js:840 -#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1651 -#: templates/js/translated/stock.js:2488 templates/js/translated/stock.js:2637 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1659 +#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2795 msgid "Status" -msgstr "" +msgstr "상태" #: build/serializers.py:213 msgid "A list of build outputs must be provided" @@ -1021,8 +1022,8 @@ msgstr "" msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:313 build/serializers.py:362 part/models.py:2753 -#: part/models.py:2912 +#: build/serializers.py:313 build/serializers.py:362 part/models.py:2760 +#: part/models.py:2919 msgid "BOM Item" msgstr "" @@ -1038,16 +1039,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:394 stock/serializers.py:584 +#: build/serializers.py:394 stock/serializers.py:585 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:408 order/models.py:277 order/serializers.py:240 -#: stock/models.py:365 stock/models.py:1077 stock/serializers.py:305 +#: build/serializers.py:408 order/models.py:280 order/serializers.py:240 +#: stock/models.py:367 stock/models.py:1105 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:450 order/serializers.py:741 +#: build/serializers.py:450 order/serializers.py:747 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1060,7 +1061,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:491 order/serializers.py:984 +#: build/serializers.py:491 order/serializers.py:990 msgid "Allocation items must be provided" msgstr "" @@ -1164,13 +1165,13 @@ msgid "Completed" msgstr "" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:927 -#: order/models.py:1023 order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:947 +#: order/models.py:1043 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:307 -#: templates/js/translated/order.js:1218 +#: templates/js/translated/order.js:1218 templates/js/translated/stock.js:2304 msgid "Sales Order" msgstr "" @@ -1224,7 +1225,7 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:878 stock/forms.py:136 +#: build/templates/build/detail.html:50 order/models.py:898 stock/forms.py:136 #: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1239,7 +1240,7 @@ msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:331 -#: templates/js/translated/stock.js:1665 templates/js/translated/stock.js:2644 +#: templates/js/translated/stock.js:1673 templates/js/translated/stock.js:2802 #: templates/js/translated/table_filters.js:151 #: templates/js/translated/table_filters.js:238 msgid "Batch" @@ -1343,9 +1344,9 @@ msgstr "" #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 #: order/templates/order/sales_order_detail.html:107 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:196 -#: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 -#: stock/templates/stock/stock_sidebar.html:19 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:213 +#: part/templates/part/part_sidebar.html:52 stock/templates/stock/item.html:112 +#: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" @@ -1360,8 +1361,8 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:108 #: order/templates/order/sales_order_detail.html:127 #: order/templates/order/sales_order_detail.html:186 -#: part/templates/part/detail.html:124 stock/templates/stock/item.html:115 -#: stock/templates/stock/item.html:205 +#: part/templates/part/detail.html:141 stock/templates/stock/item.html:132 +#: stock/templates/stock/item.html:235 msgid "Edit Notes" msgstr "" @@ -1373,7 +1374,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:303 +#: build/templates/build/index.html:18 part/templates/part/detail.html:320 msgid "New Build Order" msgstr "" @@ -1453,33 +1454,33 @@ msgstr "" msgid "Delete Build Order" msgstr "" -#: common/files.py:67 +#: common/files.py:65 msgid "Unsupported file format: {ext.upper()}" msgstr "" -#: common/files.py:69 +#: common/files.py:67 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:74 +#: common/files.py:72 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:76 +#: common/files.py:74 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:78 +#: common/files.py:76 msgid "Error reading file (data could be corrupted)" msgstr "" #: common/forms.py:34 msgid "File" -msgstr "" +msgstr "파일" #: common/forms.py:35 msgid "Select file to upload" -msgstr "" +msgstr "업로드할 파일을 선택하세요" #: common/forms.py:50 msgid "{name.title()} File" @@ -1490,740 +1491,828 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:344 common/models.py:998 common/models.py:1206 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:352 +msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:346 +#: common/models.py:354 msgid "Settings value" msgstr "" -#: common/models.py:380 +#: common/models.py:388 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:400 +#: common/models.py:408 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:411 +#: common/models.py:419 msgid "Value must be an integer value" msgstr "" -#: common/models.py:434 +#: common/models.py:442 msgid "Key string must be unique" msgstr "" -#: common/models.py:553 +#: common/models.py:561 msgid "No group" msgstr "" -#: common/models.py:595 +#: common/models.py:603 msgid "Restart required" -msgstr "" +msgstr "재시작 필요" -#: common/models.py:596 +#: common/models.py:604 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:603 +#: common/models.py:611 msgid "InvenTree Instance Name" msgstr "" -#: common/models.py:605 +#: common/models.py:613 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:609 +#: common/models.py:617 msgid "Use instance name" msgstr "" -#: common/models.py:610 +#: common/models.py:618 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:616 company/models.py:100 company/models.py:101 +#: common/models.py:624 company/models.py:100 company/models.py:101 msgid "Company name" -msgstr "" +msgstr "회사명" -#: common/models.py:617 +#: common/models.py:625 msgid "Internal company name" msgstr "" -#: common/models.py:622 +#: common/models.py:630 msgid "Base URL" msgstr "" -#: common/models.py:623 +#: common/models.py:631 msgid "Base URL for server instance" msgstr "" -#: common/models.py:629 -msgid "Default Currency" -msgstr "" - -#: common/models.py:630 -msgid "Default currency" -msgstr "" - -#: common/models.py:636 -msgid "Download from URL" -msgstr "" - #: common/models.py:637 +msgid "Default Currency" +msgstr "기본 통화" + +#: common/models.py:638 +msgid "Default currency" +msgstr "기본 통화" + +#: common/models.py:644 +msgid "Download from URL" +msgstr "URL에서 다운로드" + +#: common/models.py:645 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:643 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:651 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" -msgstr "" +msgstr "바코드 지원" -#: common/models.py:644 +#: common/models.py:652 msgid "Enable barcode scanner support" msgstr "" -#: common/models.py:650 +#: common/models.py:658 msgid "IPN Regex" msgstr "" -#: common/models.py:651 +#: common/models.py:659 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:655 +#: common/models.py:663 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:656 +#: common/models.py:664 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:662 +#: common/models.py:670 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:663 +#: common/models.py:671 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:669 +#: common/models.py:677 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:670 +#: common/models.py:678 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:676 +#: common/models.py:684 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:677 +#: common/models.py:685 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:683 +#: common/models.py:691 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:684 +#: common/models.py:692 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:690 +#: common/models.py:698 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:691 +#: common/models.py:699 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:697 part/models.py:2482 report/models.py:187 +#: common/models.py:705 part/models.py:2489 report/models.py:187 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:422 msgid "Template" msgstr "" -#: common/models.py:698 +#: common/models.py:706 msgid "Parts are templates by default" msgstr "" -#: common/models.py:704 part/models.py:919 templates/js/translated/bom.js:1068 +#: common/models.py:712 part/models.py:921 templates/js/translated/bom.js:1082 #: templates/js/translated/table_filters.js:168 #: templates/js/translated/table_filters.js:434 msgid "Assembly" msgstr "" -#: common/models.py:705 +#: common/models.py:713 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:711 part/models.py:925 +#: common/models.py:719 part/models.py:927 #: templates/js/translated/table_filters.js:438 msgid "Component" msgstr "" -#: common/models.py:712 +#: common/models.py:720 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:718 part/models.py:936 +#: common/models.py:726 part/models.py:938 msgid "Purchaseable" -msgstr "" +msgstr "구입 가능" -#: common/models.py:719 +#: common/models.py:727 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:725 part/models.py:941 +#: common/models.py:733 part/models.py:943 #: templates/js/translated/table_filters.js:446 msgid "Salable" -msgstr "" +msgstr "판매 가능" -#: common/models.py:726 +#: common/models.py:734 msgid "Parts are salable by default" msgstr "" -#: common/models.py:732 part/models.py:931 +#: common/models.py:740 part/models.py:933 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 #: templates/js/translated/table_filters.js:450 msgid "Trackable" msgstr "" -#: common/models.py:733 +#: common/models.py:741 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:739 part/models.py:951 +#: common/models.py:747 part/models.py:953 #: part/templates/part/part_base.html:147 #: templates/js/translated/table_filters.js:42 msgid "Virtual" msgstr "" -#: common/models.py:740 +#: common/models.py:748 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:746 +#: common/models.py:754 msgid "Show Import in Views" msgstr "" -#: common/models.py:747 +#: common/models.py:755 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:753 +#: common/models.py:761 msgid "Show Price in Forms" msgstr "" -#: common/models.py:754 +#: common/models.py:762 msgid "Display part price in some forms" msgstr "" -#: common/models.py:765 +#: common/models.py:773 msgid "Show Price in BOM" msgstr "" -#: common/models.py:766 +#: common/models.py:774 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:772 +#: common/models.py:780 msgid "Show related parts" msgstr "" -#: common/models.py:773 +#: common/models.py:781 msgid "Display related parts for a part" msgstr "" -#: common/models.py:779 +#: common/models.py:787 msgid "Create initial stock" msgstr "" -#: common/models.py:780 +#: common/models.py:788 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:786 +#: common/models.py:794 msgid "Internal Prices" msgstr "" -#: common/models.py:787 +#: common/models.py:795 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:793 +#: common/models.py:801 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:794 +#: common/models.py:802 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:800 +#: common/models.py:808 msgid "Part Name Display Format" msgstr "" -#: common/models.py:801 +#: common/models.py:809 msgid "Format to display the part name" msgstr "" -#: common/models.py:808 +#: common/models.py:816 msgid "Enable Reports" msgstr "" -#: common/models.py:809 +#: common/models.py:817 msgid "Enable generation of reports" msgstr "" -#: common/models.py:815 templates/stats.html:25 +#: common/models.py:823 templates/stats.html:25 msgid "Debug Mode" -msgstr "" +msgstr "디버그 모드" -#: common/models.py:816 +#: common/models.py:824 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:822 +#: common/models.py:830 msgid "Page Size" -msgstr "" +msgstr "페이지 크기" -#: common/models.py:823 +#: common/models.py:831 msgid "Default page size for PDF reports" -msgstr "" +msgstr "PDF 보고서 기본 페이지 크기" -#: common/models.py:833 +#: common/models.py:841 msgid "Test Reports" msgstr "" -#: common/models.py:834 +#: common/models.py:842 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:840 +#: common/models.py:848 msgid "Stock Expiry" msgstr "" -#: common/models.py:841 +#: common/models.py:849 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:847 +#: common/models.py:855 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:848 +#: common/models.py:856 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:854 +#: common/models.py:862 msgid "Stock Stale Time" msgstr "" -#: common/models.py:855 +#: common/models.py:863 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:857 +#: common/models.py:865 msgid "days" msgstr "" -#: common/models.py:862 +#: common/models.py:870 msgid "Build Expired Stock" msgstr "" -#: common/models.py:863 +#: common/models.py:871 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:869 +#: common/models.py:877 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:870 +#: common/models.py:878 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:876 -msgid "Group by Part" -msgstr "" - -#: common/models.py:877 -msgid "Group stock items by part reference in table views" -msgstr "" - -#: common/models.py:883 +#: common/models.py:884 msgid "Build Order Reference Prefix" msgstr "" -#: common/models.py:884 +#: common/models.py:885 msgid "Prefix value for build order reference" msgstr "" -#: common/models.py:889 +#: common/models.py:890 msgid "Build Order Reference Regex" msgstr "" -#: common/models.py:890 +#: common/models.py:891 msgid "Regular expression pattern for matching build order reference" msgstr "" -#: common/models.py:894 +#: common/models.py:895 msgid "Sales Order Reference Prefix" msgstr "" -#: common/models.py:895 +#: common/models.py:896 msgid "Prefix value for sales order reference" msgstr "" -#: common/models.py:900 +#: common/models.py:901 msgid "Purchase Order Reference Prefix" msgstr "" -#: common/models.py:901 +#: common/models.py:902 msgid "Prefix value for purchase order reference" msgstr "" -#: common/models.py:907 +#: common/models.py:908 msgid "Enable password forgot" msgstr "" -#: common/models.py:908 +#: common/models.py:909 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:913 +#: common/models.py:914 msgid "Enable registration" msgstr "" -#: common/models.py:914 +#: common/models.py:915 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:919 -msgid "Enable SSO" -msgstr "" - #: common/models.py:920 +msgid "Enable SSO" +msgstr "SSO 활성화" + +#: common/models.py:921 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:925 -msgid "Email required" -msgstr "" - #: common/models.py:926 +msgid "Email required" +msgstr "이메일 필요" + +#: common/models.py:927 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:931 +#: common/models.py:932 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:932 +#: common/models.py:933 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:937 +#: common/models.py:938 msgid "Mail twice" msgstr "" -#: common/models.py:938 +#: common/models.py:939 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:943 +#: common/models.py:944 msgid "Password twice" msgstr "" -#: common/models.py:944 +#: common/models.py:945 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:949 +#: common/models.py:950 msgid "Group on signup" msgstr "" -#: common/models.py:950 +#: common/models.py:951 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:955 +#: common/models.py:956 msgid "Enforce MFA" msgstr "" -#: common/models.py:956 +#: common/models.py:957 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:961 +#: common/models.py:964 msgid "Enable URL integration" msgstr "" -#: common/models.py:962 +#: common/models.py:965 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:968 +#: common/models.py:971 msgid "Enable navigation integration" msgstr "" -#: common/models.py:969 +#: common/models.py:972 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:975 +#: common/models.py:978 msgid "Enable app integration" msgstr "" -#: common/models.py:976 +#: common/models.py:979 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:982 +#: common/models.py:985 msgid "Enable schedule integration" msgstr "" -#: common/models.py:983 +#: common/models.py:986 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1029 +#: common/models.py:992 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:993 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:1008 common/models.py:1216 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1039 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1030 +#: common/models.py:1040 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1035 +#: common/models.py:1045 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1036 +#: common/models.py:1046 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1041 +#: common/models.py:1051 msgid "Show latest parts" msgstr "" -#: common/models.py:1042 +#: common/models.py:1052 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1047 +#: common/models.py:1057 msgid "Recent Part Count" msgstr "" -#: common/models.py:1048 +#: common/models.py:1058 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1054 +#: common/models.py:1064 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1055 +#: common/models.py:1065 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1060 +#: common/models.py:1070 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1061 +#: common/models.py:1071 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1066 +#: common/models.py:1076 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1067 +#: common/models.py:1077 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1072 +#: common/models.py:1082 msgid "Show low stock" msgstr "" -#: common/models.py:1073 +#: common/models.py:1083 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1078 +#: common/models.py:1088 msgid "Show depleted stock" msgstr "" -#: common/models.py:1079 +#: common/models.py:1089 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1084 +#: common/models.py:1094 msgid "Show needed stock" msgstr "" -#: common/models.py:1085 +#: common/models.py:1095 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1090 +#: common/models.py:1100 msgid "Show expired stock" msgstr "" -#: common/models.py:1091 +#: common/models.py:1101 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1096 +#: common/models.py:1106 msgid "Show stale stock" msgstr "" -#: common/models.py:1097 +#: common/models.py:1107 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1102 +#: common/models.py:1112 msgid "Show pending builds" msgstr "" -#: common/models.py:1103 +#: common/models.py:1113 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1108 +#: common/models.py:1118 msgid "Show overdue builds" msgstr "" -#: common/models.py:1109 +#: common/models.py:1119 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1114 +#: common/models.py:1124 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1115 +#: common/models.py:1125 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1120 +#: common/models.py:1130 msgid "Show overdue POs" msgstr "" -#: common/models.py:1121 +#: common/models.py:1131 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1126 +#: common/models.py:1136 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1127 +#: common/models.py:1137 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1132 +#: common/models.py:1142 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1133 +#: common/models.py:1143 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1139 +#: common/models.py:1149 msgid "Inline label display" msgstr "" -#: common/models.py:1140 +#: common/models.py:1150 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1146 +#: common/models.py:1156 msgid "Inline report display" msgstr "" -#: common/models.py:1147 +#: common/models.py:1157 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1153 +#: common/models.py:1163 msgid "Search Preview Results" msgstr "" -#: common/models.py:1154 +#: common/models.py:1164 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1160 +#: common/models.py:1170 msgid "Search Show Stock" msgstr "" -#: common/models.py:1161 +#: common/models.py:1171 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1167 +#: common/models.py:1177 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1168 +#: common/models.py:1178 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1174 +#: common/models.py:1184 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1175 +#: common/models.py:1185 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1181 +#: common/models.py:1191 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1182 +#: common/models.py:1192 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1188 +#: common/models.py:1198 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1189 +#: common/models.py:1199 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1254 company/forms.py:43 +#: common/models.py:1264 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1261 company/serializers.py:264 +#: common/models.py:1271 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 -#: templates/js/translated/part.js:909 templates/js/translated/part.js:1860 +#: templates/js/translated/part.js:915 templates/js/translated/part.js:1867 msgid "Price" msgstr "" -#: common/models.py:1262 +#: common/models.py:1272 msgid "Unit price at specified quantity" msgstr "" +#: common/models.py:1429 common/models.py:1568 +msgid "Endpoint" +msgstr "" + +#: common/models.py:1430 +msgid "Endpoint at which this webhook is received" +msgstr "" + +#: common/models.py:1439 +msgid "Name for this webhook" +msgstr "" + +#: common/models.py:1444 part/models.py:948 plugin/models.py:46 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:96 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:417 +msgid "Active" +msgstr "" + +#: common/models.py:1445 +msgid "Is this webhook active" +msgstr "" + +#: common/models.py:1459 +msgid "Token" +msgstr "" + +#: common/models.py:1460 +msgid "Token for access" +msgstr "" + +#: common/models.py:1467 +msgid "Secret" +msgstr "" + +#: common/models.py:1468 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:1535 +msgid "Message ID" +msgstr "" + +#: common/models.py:1536 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:1544 +msgid "Host" +msgstr "" + +#: common/models.py:1545 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:1552 +msgid "Header" +msgstr "" + +#: common/models.py:1553 +msgid "Header of this message" +msgstr "" + +#: common/models.py:1559 +msgid "Body" +msgstr "" + +#: common/models.py:1560 +msgid "Body of this message" +msgstr "" + +#: common/models.py:1569 +msgid "Endpoint on which this message was received" +msgstr "" + +#: common/models.py:1574 +msgid "Worked on" +msgstr "" + +#: common/models.py:1575 +msgid "Was the work on this message finished?" +msgstr "" + #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 #: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 -#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 -#: part/views.py:764 +#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:213 +#: part/views.py:773 msgid "Upload File" -msgstr "" +msgstr "파일 업로드" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 #: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 -#: part/views.py:765 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:214 +#: part/views.py:774 msgid "Match Fields" msgstr "" @@ -2254,15 +2343,15 @@ msgstr "" #: company/forms.py:24 part/forms.py:46 #: templates/InvenTree/settings/mixins/urls.html:14 msgid "URL" -msgstr "" +msgstr "URL" #: company/forms.py:25 part/forms.py:47 msgid "Image URL" -msgstr "" +msgstr "이미지 URL" #: company/models.py:105 msgid "Company description" -msgstr "" +msgstr "회사 소개" #: company/models.py:106 msgid "Description of the company" @@ -2272,23 +2361,23 @@ msgstr "" #: templates/InvenTree/settings/plugin_settings.html:55 #: templates/js/translated/company.js:349 msgid "Website" -msgstr "" +msgstr "웹사이트" #: company/models.py:113 msgid "Company website URL" -msgstr "" +msgstr "회사 웹사이트 URL" #: company/models.py:117 company/templates/company/company_base.html:115 msgid "Address" -msgstr "" +msgstr "주소" #: company/models.py:118 msgid "Company address" -msgstr "" +msgstr "회사 주소" #: company/models.py:121 msgid "Phone number" -msgstr "" +msgstr "전화번호" #: company/models.py:122 msgid "Contact phone number" @@ -2297,7 +2386,7 @@ msgstr "" #: company/models.py:125 company/templates/company/company_base.html:129 #: templates/InvenTree/settings/user.html:48 msgid "Email" -msgstr "" +msgstr "이메일" #: company/models.py:125 msgid "Contact email address" @@ -2315,9 +2404,9 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:139 part/models.py:838 +#: company/models.py:139 part/models.py:840 msgid "Image" -msgstr "" +msgstr "이미지" #: company/models.py:144 msgid "is customer" @@ -2352,8 +2441,8 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:469 -#: stock/templates/stock/item_base.html:142 +#: company/models.py:320 company/models.py:535 stock/models.py:471 +#: stock/templates/stock/item_base.html:142 templates/js/translated/bom.js:328 msgid "Base Part" msgstr "" @@ -2380,7 +2469,7 @@ msgstr "" #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:533 #: templates/js/translated/company.js:818 templates/js/translated/order.js:1038 -#: templates/js/translated/part.js:245 templates/js/translated/part.js:889 +#: templates/js/translated/part.js:245 templates/js/translated/part.js:895 msgid "MPN" msgstr "" @@ -2409,8 +2498,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1960 templates/js/translated/company.js:647 -#: templates/js/translated/part.js:709 templates/js/translated/stock.js:1296 +#: stock/models.py:1988 templates/js/translated/company.js:647 +#: templates/js/translated/part.js:715 templates/js/translated/stock.js:1304 msgid "Value" msgstr "" @@ -2418,10 +2507,10 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:429 part/models.py:913 part/models.py:2450 +#: company/models.py:429 part/models.py:915 part/models.py:2457 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:284 -#: templates/js/translated/company.js:653 templates/js/translated/part.js:715 +#: templates/InvenTree/settings/settings.html:287 +#: templates/js/translated/company.js:653 templates/js/translated/part.js:721 msgid "Units" msgstr "" @@ -2434,13 +2523,13 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:224 +#: company/templates/company/supplier_part.html:87 order/models.py:227 #: order/templates/order/order_base.html:112 -#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 -#: part/bom.py:247 stock/templates/stock/item_base.html:397 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:237 +#: part/bom.py:265 stock/templates/stock/item_base.html:397 #: templates/js/translated/company.js:337 #: templates/js/translated/company.js:774 templates/js/translated/order.js:823 -#: templates/js/translated/part.js:215 templates/js/translated/part.js:857 +#: templates/js/translated/part.js:215 templates/js/translated/part.js:863 #: templates/js/translated/table_filters.js:393 msgid "Supplier" msgstr "" @@ -2450,10 +2539,10 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 -#: templates/js/translated/part.js:226 templates/js/translated/part.js:875 +#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1025 +#: templates/js/translated/part.js:226 templates/js/translated/part.js:881 msgid "SKU" -msgstr "" +msgstr "SKU" #: company/models.py:552 templates/js/translated/part.js:227 msgid "Supplier stock keeping unit" @@ -2472,22 +2561,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:576 company/templates/company/supplier_part.html:119 -#: part/models.py:2641 report/templates/report/inventree_po_report.html:93 +#: part/models.py:2648 report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "base cost" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:493 stock/templates/stock/item_base.html:338 -#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1791 +#: stock/models.py:495 stock/templates/stock/item_base.html:338 +#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1799 msgid "Packaging" msgstr "" @@ -2495,7 +2584,7 @@ msgstr "" msgid "Part packaging" msgstr "" -#: company/models.py:584 part/models.py:1781 +#: company/models.py:584 part/models.py:1783 msgid "multiple" msgstr "" @@ -2515,7 +2604,7 @@ msgstr "" #: company/templates/company/company_base.html:12 #: templates/InvenTree/search.html:176 templates/js/translated/company.js:322 msgid "Company" -msgstr "" +msgstr "회사" #: company/templates/company/company_base.html:22 #: templates/js/translated/order.js:279 @@ -2528,41 +2617,41 @@ msgstr "" #: company/templates/company/company_base.html:31 msgid "Edit company information" -msgstr "" +msgstr "회사 정보 수정" #: company/templates/company/company_base.html:32 #: templates/js/translated/company.js:265 msgid "Edit Company" -msgstr "" +msgstr "회사 수정" #: company/templates/company/company_base.html:36 msgid "Delete company" -msgstr "" +msgstr "회사 삭제" #: company/templates/company/company_base.html:37 #: company/templates/company/company_base.html:159 msgid "Delete Company" -msgstr "" +msgstr "회사 삭제" #: company/templates/company/company_base.html:53 #: part/templates/part/part_thumb.html:12 msgid "Upload new image" -msgstr "" +msgstr "새 이미지 업로드" #: company/templates/company/company_base.html:56 #: part/templates/part/part_thumb.html:14 msgid "Download image from URL" -msgstr "" +msgstr "URL에서 이미지 다운로드" -#: company/templates/company/company_base.html:83 order/models.py:547 -#: order/templates/order/sales_order_base.html:115 stock/models.py:512 -#: stock/models.py:513 stock/serializers.py:625 +#: company/templates/company/company_base.html:83 order/models.py:552 +#: order/templates/order/sales_order_base.html:115 stock/models.py:514 +#: stock/models.py:515 stock/serializers.py:626 #: stock/templates/stock/item_base.html:290 #: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 -#: templates/js/translated/stock.js:2452 +#: templates/js/translated/stock.js:2610 #: templates/js/translated/table_filters.js:397 msgid "Customer" -msgstr "" +msgstr "고객" #: company/templates/company/company_base.html:108 msgid "Uses default currency" @@ -2570,12 +2659,12 @@ msgstr "" #: company/templates/company/company_base.html:122 msgid "Phone" -msgstr "" +msgstr "전화번호" #: company/templates/company/company_base.html:205 #: part/templates/part/part_base.html:471 msgid "Upload Image" -msgstr "" +msgstr "이미지 업로드" #: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 @@ -2590,7 +2679,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:118 -#: part/templates/part/detail.html:336 +#: part/templates/part/detail.html:353 msgid "New Supplier Part" msgstr "" @@ -2598,8 +2687,8 @@ msgstr "" #: company/templates/company/detail.html:79 #: company/templates/company/manufacturer_part.html:127 #: company/templates/company/manufacturer_part.html:156 -#: part/templates/part/category.html:171 part/templates/part/detail.html:345 -#: part/templates/part/detail.html:374 +#: part/templates/part/category.html:171 part/templates/part/detail.html:362 +#: part/templates/part/detail.html:391 msgid "Options" msgstr "" @@ -2627,7 +2716,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:67 part/templates/part/detail.html:364 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:381 msgid "New Manufacturer Part" msgstr "" @@ -2641,7 +2730,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:68 part/templates/part/part_sidebar.html:33 +#: part/templates/part/detail.html:85 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197 #: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 @@ -2663,7 +2752,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:91 part/templates/part/part_sidebar.html:37 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:41 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217 #: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 @@ -2691,13 +2780,13 @@ msgstr "" #: company/templates/company/detail.html:384 #: company/templates/company/manufacturer_part.html:215 -#: part/templates/part/detail.html:418 +#: part/templates/part/detail.html:435 msgid "Delete Supplier Parts?" msgstr "" #: company/templates/company/detail.html:385 #: company/templates/company/manufacturer_part.html:216 -#: part/templates/part/detail.html:419 +#: part/templates/part/detail.html:436 msgid "All selected supplier parts will be deleted" msgstr "" @@ -2714,7 +2803,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:34 #: company/templates/company/supplier_part.html:159 -#: part/templates/part/detail.html:71 part/templates/part/part_base.html:76 +#: part/templates/part/detail.html:88 part/templates/part/part_base.html:76 msgid "Order part" msgstr "" @@ -2735,34 +2824,34 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 -#: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 +#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:163 #: templates/InvenTree/search.html:188 templates/navbar.html:45 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:129 -#: part/templates/part/detail.html:347 +#: part/templates/part/detail.html:364 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:129 #: company/templates/company/manufacturer_part.html:158 #: company/templates/company/manufacturer_part.html:254 -#: part/templates/part/detail.html:347 part/templates/part/detail.html:376 +#: part/templates/part/detail.html:364 part/templates/part/detail.html:393 #: templates/js/translated/company.js:426 templates/js/translated/helpers.js:31 -#: users/models.py:210 +#: users/models.py:212 msgid "Delete" -msgstr "" +msgstr "삭제" #: company/templates/company/manufacturer_part.html:143 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:17 -#: part/templates/part/detail.html:170 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:187 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:147 -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:192 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part.html:65 msgid "New Parameter" @@ -2773,7 +2862,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:191 -#: part/templates/part/detail.html:862 +#: part/templates/part/detail.html:892 msgid "Add Parameter" msgstr "" @@ -2802,9 +2891,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:477 +#: company/templates/company/supplier_part.html:24 stock/models.py:479 #: stock/templates/stock/item_base.html:402 -#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1748 +#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1756 msgid "Supplier Part" msgstr "" @@ -2830,7 +2919,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:167 -#: templates/js/translated/stock.js:360 +#: templates/js/translated/stock.js:368 msgid "New Stock Item" msgstr "" @@ -2840,7 +2929,7 @@ msgid "Supplier Part Orders" msgstr "" #: company/templates/company/supplier_part.html:160 -#: part/templates/part/detail.html:72 +#: part/templates/part/detail.html:89 msgid "Order Part" msgstr "" @@ -2851,7 +2940,7 @@ msgstr "" #: company/templates/company/supplier_part.html:184 #: company/templates/company/supplier_part.html:290 -#: part/templates/part/prices.html:271 part/views.py:1619 +#: part/templates/part/prices.html:271 part/views.py:1628 msgid "Add Price Break" msgstr "" @@ -2859,11 +2948,11 @@ msgstr "" msgid "No price break information found" msgstr "" -#: company/templates/company/supplier_part.html:224 part/views.py:1681 +#: company/templates/company/supplier_part.html:224 part/views.py:1690 msgid "Delete Price Break" msgstr "" -#: company/templates/company/supplier_part.html:238 part/views.py:1667 +#: company/templates/company/supplier_part.html:238 part/views.py:1676 msgid "Edit Price Break" msgstr "" @@ -2881,10 +2970,10 @@ msgstr "" #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:150 #: templates/InvenTree/settings/sidebar.html:41 -#: templates/js/translated/bom.js:328 templates/js/translated/part.js:489 -#: templates/js/translated/part.js:624 templates/js/translated/part.js:1118 -#: templates/js/translated/part.js:1279 templates/js/translated/stock.js:927 -#: templates/js/translated/stock.js:1580 templates/navbar.html:28 +#: templates/js/translated/bom.js:340 templates/js/translated/part.js:495 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1125 +#: templates/js/translated/part.js:1286 templates/js/translated/stock.js:935 +#: templates/js/translated/stock.js:1588 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2907,8 +2996,8 @@ msgstr "" #: stock/templates/stock/location.html:151 #: stock/templates/stock/location.html:163 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2351 -#: templates/stats.html:93 templates/stats.html:102 users/models.py:43 +#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2509 +#: templates/stats.html:105 templates/stats.html:114 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2927,7 +3016,7 @@ msgstr "" #: company/views.py:62 msgid "New Customer" -msgstr "" +msgstr "신규 고객" #: company/views.py:69 msgid "Companies" @@ -2935,22 +3024,22 @@ msgstr "" #: company/views.py:70 msgid "New Company" -msgstr "" +msgstr "새 회사" -#: company/views.py:129 part/views.py:584 +#: company/views.py:129 part/views.py:593 msgid "Download Image" -msgstr "" +msgstr "이미지 다운로드" -#: company/views.py:158 part/views.py:616 +#: company/views.py:158 part/views.py:625 msgid "Image size exceeds maximum allowable size for download" msgstr "" -#: company/views.py:165 part/views.py:623 +#: company/views.py:165 part/views.py:632 #, python-brace-format msgid "Invalid response: {code}" msgstr "" -#: company/views.py:174 part/views.py:632 +#: company/views.py:174 part/views.py:641 msgid "Supplied URL is not a valid image file" msgstr "" @@ -3036,282 +3125,282 @@ msgstr "" msgid "Cancel order" msgstr "" -#: order/models.py:122 +#: order/models.py:125 msgid "Order description" msgstr "" -#: order/models.py:124 +#: order/models.py:127 msgid "Link to external page" msgstr "" -#: order/models.py:132 +#: order/models.py:135 msgid "Created By" msgstr "" -#: order/models.py:139 +#: order/models.py:142 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:144 +#: order/models.py:147 msgid "Order notes" msgstr "" -#: order/models.py:211 order/models.py:537 +#: order/models.py:214 order/models.py:542 msgid "Order reference" msgstr "" -#: order/models.py:216 order/models.py:552 +#: order/models.py:219 order/models.py:557 msgid "Purchase order status" msgstr "" -#: order/models.py:225 +#: order/models.py:228 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:228 order/templates/order/order_base.html:118 +#: order/models.py:231 order/templates/order/order_base.html:118 #: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:228 +#: order/models.py:231 msgid "Supplier order reference code" msgstr "" -#: order/models.py:235 +#: order/models.py:238 msgid "received by" msgstr "" -#: order/models.py:240 +#: order/models.py:243 msgid "Issue Date" msgstr "" -#: order/models.py:241 +#: order/models.py:244 msgid "Date order was issued" msgstr "" -#: order/models.py:246 +#: order/models.py:249 msgid "Target Delivery Date" msgstr "" -#: order/models.py:247 +#: order/models.py:250 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:253 +#: order/models.py:256 msgid "Date order was completed" msgstr "" -#: order/models.py:282 +#: order/models.py:285 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:411 -msgid "Quantity must be an integer" -msgstr "" - -#: order/models.py:415 +#: order/models.py:420 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:548 +#: order/models.py:553 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer Reference " msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer order reference code" msgstr "" -#: order/models.py:559 +#: order/models.py:564 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:562 order/models.py:1028 +#: order/models.py:567 order/models.py:1048 #: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:569 +#: order/models.py:574 msgid "shipped by" msgstr "" -#: order/models.py:635 +#: order/models.py:640 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:639 +#: order/models.py:644 msgid "Only a pending order can be marked as complete" msgstr "" -#: order/models.py:642 +#: order/models.py:647 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:645 +#: order/models.py:650 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:797 +#: order/models.py:806 msgid "Item quantity" msgstr "" -#: order/models.py:803 +#: order/models.py:812 msgid "Line item reference" msgstr "" -#: order/models.py:805 +#: order/models.py:814 msgid "Line item notes" msgstr "" -#: order/models.py:835 order/models.py:926 order/models.py:1022 -#: templates/js/translated/order.js:1820 +#: order/models.py:842 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:855 order/models.py:946 order/models.py:1042 +#: templates/js/translated/order.js:1820 templates/js/translated/stock.js:2271 msgid "Order" msgstr "" -#: order/models.py:836 order/templates/order/order_base.html:9 +#: order/models.py:856 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:352 -#: templates/js/translated/order.js:801 templates/js/translated/part.js:832 -#: templates/js/translated/stock.js:1725 templates/js/translated/stock.js:2433 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:838 +#: templates/js/translated/stock.js:1733 templates/js/translated/stock.js:2591 msgid "Purchase Order" msgstr "" -#: order/models.py:857 +#: order/models.py:877 msgid "Supplier part" msgstr "" -#: order/models.py:864 order/templates/order/order_base.html:163 +#: order/models.py:884 order/templates/order/order_base.html:163 #: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 -#: templates/js/translated/part.js:904 templates/js/translated/part.js:930 +#: templates/js/translated/part.js:910 templates/js/translated/part.js:937 #: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:865 +#: order/models.py:885 msgid "Number of items received" msgstr "" -#: order/models.py:872 part/templates/part/prices.html:176 stock/models.py:606 +#: order/models.py:892 part/templates/part/prices.html:176 stock/models.py:608 #: stock/serializers.py:170 stock/templates/stock/item_base.html:359 -#: templates/js/translated/stock.js:1779 +#: templates/js/translated/stock.js:1787 msgid "Purchase Price" msgstr "" -#: order/models.py:873 +#: order/models.py:893 msgid "Unit purchase price" msgstr "" -#: order/models.py:881 +#: order/models.py:901 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:936 part/templates/part/part_pricing.html:112 +#: order/models.py:956 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:937 +#: order/models.py:957 msgid "Unit sale price" msgstr "" -#: order/models.py:942 +#: order/models.py:962 msgid "Shipped quantity" msgstr "" -#: order/models.py:1029 +#: order/models.py:1049 msgid "Date of shipment" msgstr "" -#: order/models.py:1036 +#: order/models.py:1056 msgid "Checked By" msgstr "" -#: order/models.py:1037 +#: order/models.py:1057 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1045 +#: order/models.py:1065 msgid "Shipment number" msgstr "" -#: order/models.py:1052 +#: order/models.py:1072 msgid "Shipment notes" msgstr "" -#: order/models.py:1059 +#: order/models.py:1079 msgid "Tracking Number" msgstr "" -#: order/models.py:1060 +#: order/models.py:1080 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1070 +#: order/models.py:1090 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1073 +#: order/models.py:1093 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1149 order/models.py:1151 +#: order/models.py:1171 order/models.py:1173 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1155 +#: order/models.py:1177 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1157 +#: order/models.py:1179 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1160 +#: order/models.py:1182 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1164 +#: order/models.py:1186 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:1170 order/serializers.py:734 +#: order/models.py:1192 order/serializers.py:740 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1173 +#: order/models.py:1195 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1174 +#: order/models.py:1196 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1182 +#: order/models.py:1204 msgid "Line" msgstr "" -#: order/models.py:1190 order/serializers.py:825 order/serializers.py:953 -#: templates/js/translated/model_renderers.js:251 +#: order/models.py:1212 order/serializers.py:831 order/serializers.py:959 +#: templates/js/translated/model_renderers.js:285 msgid "Shipment" msgstr "" -#: order/models.py:1191 +#: order/models.py:1213 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1203 +#: order/models.py:1225 msgid "Item" msgstr "" -#: order/models.py:1204 +#: order/models.py:1226 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1207 +#: order/models.py:1229 msgid "Enter stock allocation quantity" msgstr "" @@ -3319,7 +3408,7 @@ msgstr "" msgid "Purchase price currency" msgstr "" -#: order/serializers.py:211 order/serializers.py:790 +#: order/serializers.py:211 order/serializers.py:796 msgid "Line Item" msgstr "" @@ -3355,39 +3444,39 @@ msgstr "" msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:587 msgid "Sale price currency" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:655 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:699 order/serializers.py:802 +#: order/serializers.py:705 order/serializers.py:808 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:721 +#: order/serializers.py:727 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:815 +#: order/serializers.py:821 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:839 order/serializers.py:964 +#: order/serializers.py:845 order/serializers.py:970 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:842 order/serializers.py:967 +#: order/serializers.py:848 order/serializers.py:973 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:894 +#: order/serializers.py:900 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:910 msgid "The following serial numbers are already allocated" msgstr "" @@ -3441,6 +3530,7 @@ msgstr "" #: order/templates/order/order_base.html:94 #: order/templates/order/sales_order_base.html:89 +#: templates/js/translated/stock.js:2327 msgid "Order Status" msgstr "" @@ -3538,7 +3628,7 @@ msgstr "" #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/build.js:300 templates/js/translated/build.js:1311 #: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 -#: templates/js/translated/stock.js:593 templates/js/translated/stock.js:761 +#: templates/js/translated/stock.js:601 templates/js/translated/stock.js:769 msgid "Remove row" msgstr "" @@ -3713,7 +3803,7 @@ msgstr "" #: order/templates/order/sales_order_cancel.html:8 #: stock/templates/stock/stockitem_convert.html:13 msgid "Warning" -msgstr "" +msgstr "경고" #: order/templates/order/sales_order_cancel.html:9 msgid "Cancelling this order means that the order will no longer be editable." @@ -3729,7 +3819,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:48 -#: templates/js/translated/bom.js:720 templates/js/translated/build.js:1243 +#: templates/js/translated/bom.js:732 templates/js/translated/build.js:1243 msgid "Actions" msgstr "" @@ -3832,447 +3922,448 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:125 part/models.py:81 part/models.py:847 +#: part/bom.py:125 part/models.py:83 part/models.py:849 #: part/templates/part/category.html:108 part/templates/part/part_base.html:338 msgid "Default Location" msgstr "" -#: part/bom.py:126 part/templates/part/part_base.html:185 +#: part/bom.py:126 templates/email/low_stock_notification.html:17 +msgid "Total Stock" +msgstr "" + +#: part/bom.py:127 part/templates/part/part_base.html:185 msgid "Available Stock" msgstr "" -#: part/forms.py:85 +#: part/bom.py:128 part/templates/part/part_base.html:203 +#: templates/js/translated/part.js:1301 +msgid "On Order" +msgstr "" + +#: part/forms.py:84 msgid "Select part category" msgstr "" -#: part/forms.py:122 +#: part/forms.py:121 msgid "Add parameter template to same level categories" msgstr "" -#: part/forms.py:126 +#: part/forms.py:125 msgid "Add parameter template to all categories" msgstr "" -#: part/forms.py:146 +#: part/forms.py:145 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 +#: part/models.py:84 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:95 part/models.py:2526 part/templates/part/category.html:15 +#: part/models.py:97 part/models.py:2533 part/templates/part/category.html:15 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:96 part/templates/part/category.html:128 -#: templates/InvenTree/search.html:95 templates/stats.html:84 +#: part/models.py:98 part/templates/part/category.html:128 +#: templates/InvenTree/search.html:95 templates/stats.html:96 #: users/models.py:40 msgid "Part Categories" msgstr "" -#: part/models.py:358 part/templates/part/cat_link.html:3 +#: part/models.py:360 part/templates/part/cat_link.html:3 #: part/templates/part/category.html:17 part/templates/part/category.html:133 #: part/templates/part/category.html:153 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82 #: templates/InvenTree/settings/sidebar.html:37 -#: templates/js/translated/part.js:1656 templates/navbar.html:21 -#: templates/stats.html:80 templates/stats.html:89 users/models.py:41 +#: templates/js/translated/part.js:1663 templates/navbar.html:21 +#: templates/stats.html:92 templates/stats.html:101 users/models.py:41 msgid "Parts" msgstr "" -#: part/models.py:450 +#: part/models.py:452 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:500 part/models.py:512 +#: part/models.py:502 part/models.py:514 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:642 +#: part/models.py:644 msgid "Next available serial numbers are" msgstr "" -#: part/models.py:646 +#: part/models.py:648 msgid "Next available serial number is" msgstr "" -#: part/models.py:651 +#: part/models.py:653 msgid "Most recent serial number is" msgstr "" -#: part/models.py:746 +#: part/models.py:748 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:771 +#: part/models.py:773 msgid "Part name" msgstr "" -#: part/models.py:778 +#: part/models.py:780 msgid "Is Template" msgstr "" -#: part/models.py:779 +#: part/models.py:781 msgid "Is this part a template part?" msgstr "" -#: part/models.py:789 +#: part/models.py:791 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:790 +#: part/models.py:792 msgid "Variant Of" msgstr "" -#: part/models.py:796 +#: part/models.py:798 msgid "Part description" msgstr "" -#: part/models.py:801 part/templates/part/category.html:86 +#: part/models.py:803 part/templates/part/category.html:86 #: part/templates/part/part_base.html:302 msgid "Keywords" msgstr "" -#: part/models.py:802 +#: part/models.py:804 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:809 part/models.py:2276 part/models.py:2525 +#: part/models.py:811 part/models.py:2283 part/models.py:2532 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:183 -#: templates/js/translated/part.js:1261 +#: templates/InvenTree/settings/settings.html:186 +#: templates/js/translated/part.js:1268 msgid "Category" msgstr "" -#: part/models.py:810 +#: part/models.py:812 msgid "Part category" msgstr "" -#: part/models.py:815 part/templates/part/part_base.html:274 -#: templates/js/translated/part.js:612 templates/js/translated/part.js:1214 -#: templates/js/translated/stock.js:1552 +#: part/models.py:817 part/templates/part/part_base.html:274 +#: templates/js/translated/part.js:618 templates/js/translated/part.js:1221 +#: templates/js/translated/stock.js:1560 msgid "IPN" msgstr "" -#: part/models.py:816 +#: part/models.py:818 msgid "Internal Part Number" msgstr "" -#: part/models.py:822 +#: part/models.py:824 msgid "Part revision or version number" msgstr "" -#: part/models.py:823 part/templates/part/part_base.html:281 -#: report/models.py:200 templates/js/translated/part.js:616 +#: part/models.py:825 part/templates/part/part_base.html:281 +#: report/models.py:200 templates/js/translated/part.js:622 msgid "Revision" msgstr "" -#: part/models.py:845 +#: part/models.py:847 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:892 part/templates/part/part_base.html:347 +#: part/models.py:894 part/templates/part/part_base.html:347 msgid "Default Supplier" msgstr "" -#: part/models.py:893 +#: part/models.py:895 msgid "Default supplier part" msgstr "" -#: part/models.py:900 +#: part/models.py:902 msgid "Default Expiry" msgstr "" -#: part/models.py:901 +#: part/models.py:903 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:906 part/templates/part/part_base.html:196 +#: part/models.py:908 part/templates/part/part_base.html:196 msgid "Minimum Stock" msgstr "" -#: part/models.py:907 +#: part/models.py:909 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:914 +#: part/models.py:916 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:920 +#: part/models.py:922 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:926 +#: part/models.py:928 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:932 +#: part/models.py:934 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:937 +#: part/models.py:939 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:942 +#: part/models.py:944 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:946 plugin/models.py:46 -#: templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:295 -#: templates/js/translated/table_filters.js:417 -msgid "Active" -msgstr "" - -#: part/models.py:947 +#: part/models.py:949 msgid "Is this part active?" msgstr "" -#: part/models.py:952 +#: part/models.py:954 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:957 +#: part/models.py:959 msgid "Part notes - supports Markdown formatting" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "BOM checksum" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:963 +#: part/models.py:965 msgid "BOM checked by" msgstr "" -#: part/models.py:965 +#: part/models.py:967 msgid "BOM checked date" msgstr "" -#: part/models.py:969 +#: part/models.py:971 msgid "Creation User" msgstr "" -#: part/models.py:1781 +#: part/models.py:1783 msgid "Sell multiple" msgstr "" -#: part/models.py:2326 +#: part/models.py:2333 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2343 +#: part/models.py:2350 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2363 templates/js/translated/part.js:1707 -#: templates/js/translated/stock.js:1276 +#: part/models.py:2370 templates/js/translated/part.js:1714 +#: templates/js/translated/stock.js:1284 msgid "Test Name" msgstr "" -#: part/models.py:2364 +#: part/models.py:2371 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2369 +#: part/models.py:2376 msgid "Test Description" msgstr "" -#: part/models.py:2370 +#: part/models.py:2377 msgid "Enter description for this test" msgstr "" -#: part/models.py:2375 templates/js/translated/part.js:1716 +#: part/models.py:2382 templates/js/translated/part.js:1723 #: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" -#: part/models.py:2376 +#: part/models.py:2383 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2381 templates/js/translated/part.js:1724 +#: part/models.py:2388 templates/js/translated/part.js:1731 msgid "Requires Value" msgstr "" -#: part/models.py:2382 +#: part/models.py:2389 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2387 templates/js/translated/part.js:1731 +#: part/models.py:2394 templates/js/translated/part.js:1738 msgid "Requires Attachment" msgstr "" -#: part/models.py:2388 +#: part/models.py:2395 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2399 +#: part/models.py:2406 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2435 +#: part/models.py:2442 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2443 +#: part/models.py:2450 msgid "Parameter Name" msgstr "" -#: part/models.py:2450 +#: part/models.py:2457 msgid "Parameter Units" msgstr "" -#: part/models.py:2480 +#: part/models.py:2487 msgid "Parent Part" msgstr "" -#: part/models.py:2482 part/models.py:2531 part/models.py:2532 -#: templates/InvenTree/settings/settings.html:178 +#: part/models.py:2489 part/models.py:2538 part/models.py:2539 +#: templates/InvenTree/settings/settings.html:181 msgid "Parameter Template" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Data" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Parameter Value" msgstr "" -#: part/models.py:2536 templates/InvenTree/settings/settings.html:187 +#: part/models.py:2543 templates/InvenTree/settings/settings.html:190 msgid "Default Value" msgstr "" -#: part/models.py:2537 +#: part/models.py:2544 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2614 +#: part/models.py:2621 msgid "Select parent part" msgstr "" -#: part/models.py:2622 +#: part/models.py:2629 msgid "Sub part" msgstr "" -#: part/models.py:2623 +#: part/models.py:2630 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2629 +#: part/models.py:2636 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2631 templates/js/translated/bom.js:566 -#: templates/js/translated/bom.js:640 +#: part/models.py:2638 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:652 #: templates/js/translated/table_filters.js:92 msgid "Optional" msgstr "" -#: part/models.py:2631 +#: part/models.py:2638 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2634 +#: part/models.py:2641 msgid "Overage" msgstr "" -#: part/models.py:2635 +#: part/models.py:2642 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2638 +#: part/models.py:2645 msgid "BOM item reference" msgstr "" -#: part/models.py:2641 +#: part/models.py:2648 msgid "BOM item notes" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "Checksum" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "BOM line checksum" msgstr "" -#: part/models.py:2647 templates/js/translated/bom.js:657 +#: part/models.py:2654 templates/js/translated/bom.js:669 #: templates/js/translated/table_filters.js:68 #: templates/js/translated/table_filters.js:88 msgid "Inherited" msgstr "" -#: part/models.py:2648 +#: part/models.py:2655 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2653 templates/js/translated/bom.js:649 +#: part/models.py:2660 templates/js/translated/bom.js:661 msgid "Allow Variants" msgstr "" -#: part/models.py:2654 +#: part/models.py:2661 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2739 stock/models.py:355 +#: part/models.py:2746 stock/models.py:357 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2748 part/models.py:2750 +#: part/models.py:2755 part/models.py:2757 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2879 +#: part/models.py:2886 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2901 +#: part/models.py:2908 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2913 +#: part/models.py:2920 msgid "Parent BOM item" msgstr "" -#: part/models.py:2921 +#: part/models.py:2928 msgid "Substitute part" msgstr "" -#: part/models.py:2932 +#: part/models.py:2939 msgid "Part 1" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Part 2" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Select Related Part" msgstr "" -#: part/models.py:2968 +#: part/models.py:2975 msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique" msgstr "" @@ -4327,7 +4418,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:253 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:270 msgid "BOM actions" msgstr "" @@ -4499,7 +4590,7 @@ msgstr "" msgid "Import Parts" msgstr "" -#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:375 +#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:348 msgid "Duplicate Part" msgstr "" @@ -4533,145 +4624,149 @@ msgid "Showing stock for all variants of %(full_name)s" msgstr "" #: part/templates/part/detail.html:43 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/detail.html:60 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:48 +#: part/templates/part/detail.html:65 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:105 +#: part/templates/part/detail.html:122 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:142 +#: part/templates/part/detail.html:159 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:146 +#: part/templates/part/detail.html:163 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:147 +#: part/templates/part/detail.html:164 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:174 +#: part/templates/part/detail.html:191 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:45 +#: part/templates/part/detail.html:228 part/templates/part/part_sidebar.html:49 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:215 part/templates/part/detail.html:216 +#: part/templates/part/detail.html:232 part/templates/part/detail.html:233 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:253 part/templates/part/part_sidebar.html:17 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:241 +#: part/templates/part/detail.html:258 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:245 templates/js/translated/bom.js:70 +#: part/templates/part/detail.html:262 templates/js/translated/bom.js:70 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:247 +#: part/templates/part/detail.html:264 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:257 +#: part/templates/part/detail.html:274 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:259 templates/js/translated/part.js:272 +#: part/templates/part/detail.html:276 templates/js/translated/part.js:272 msgid "Copy BOM" msgstr "" -#: part/templates/part/detail.html:261 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:283 msgid "New BOM Item" msgstr "" -#: part/templates/part/detail.html:267 +#: part/templates/part/detail.html:284 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:280 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:314 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:322 +#: part/templates/part/detail.html:339 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:332 +#: part/templates/part/detail.html:349 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:360 +#: part/templates/part/detail.html:377 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:393 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:558 +#: part/templates/part/detail.html:575 msgid "Delete selected BOM items?" msgstr "" -#: part/templates/part/detail.html:559 +#: part/templates/part/detail.html:576 msgid "All selected BOM items will be deleted" msgstr "" -#: part/templates/part/detail.html:608 +#: part/templates/part/detail.html:625 msgid "Create BOM Item" msgstr "" -#: part/templates/part/detail.html:652 +#: part/templates/part/detail.html:682 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:660 +#: part/templates/part/detail.html:690 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:755 +#: part/templates/part/detail.html:785 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:812 +#: part/templates/part/detail.html:842 msgid "Edit Part Notes" msgstr "" -#: part/templates/part/detail.html:925 +#: part/templates/part/detail.html:955 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:937 +#: part/templates/part/detail.html:967 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:949 +#: part/templates/part/detail.html:979 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1038 +#: part/templates/part/detail.html:1068 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -4786,7 +4881,7 @@ msgstr "" #: templates/js/translated/company.js:508 #: templates/js/translated/company.js:765 #: templates/js/translated/model_renderers.js:175 -#: templates/js/translated/part.js:527 templates/js/translated/part.js:604 +#: templates/js/translated/part.js:533 templates/js/translated/part.js:610 msgid "Inactive" msgstr "" @@ -4805,10 +4900,6 @@ msgstr "" msgid "In Stock" msgstr "" -#: part/templates/part/part_base.html:203 templates/js/translated/part.js:1294 -msgid "On Order" -msgstr "" - #: part/templates/part/part_base.html:210 templates/InvenTree/index.html:178 msgid "Required for Build Orders" msgstr "" @@ -4821,12 +4912,12 @@ msgstr "" msgid "Allocated to Orders" msgstr "" -#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:678 +#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:690 msgid "Can Build" msgstr "" -#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1125 -#: templates/js/translated/part.js:1298 +#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1132 +#: templates/js/translated/part.js:1305 msgid "Building" msgstr "" @@ -4878,7 +4969,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:40 -#: templates/js/translated/bom.js:632 +#: templates/js/translated/bom.js:644 msgid "No supplier pricing available" msgstr "" @@ -4920,7 +5011,12 @@ msgstr "" msgid "Used In" msgstr "" -#: part/templates/part/part_sidebar.html:41 +#: part/templates/part/part_sidebar.html:31 +#: stock/templates/stock/stock_sidebar.html:8 +msgid "Allocations" +msgstr "" + +#: part/templates/part/part_sidebar.html:45 msgid "Test Templates" msgstr "" @@ -4993,7 +5089,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:155 templates/js/translated/bom.js:626 +#: part/templates/part/prices.html:155 templates/js/translated/bom.js:638 msgid "Supplier Cost" msgstr "" @@ -5015,7 +5111,7 @@ msgstr "" msgid "Internal Cost" msgstr "" -#: part/templates/part/prices.html:215 part/views.py:1690 +#: part/templates/part/prices.html:215 part/views.py:1699 msgid "Add Internal Price Break" msgstr "" @@ -5035,9 +5131,9 @@ msgstr "" msgid "Set category for the following parts" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:588 -#: templates/js/translated/part.js:491 templates/js/translated/part.js:1115 -#: templates/js/translated/part.js:1302 +#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:600 +#: templates/js/translated/part.js:497 templates/js/translated/part.js:1122 +#: templates/js/translated/part.js:1309 msgid "No Stock" msgstr "" @@ -5054,116 +5150,116 @@ msgstr "" msgid "Create a new variant of template '%(full_name)s'." msgstr "" -#: part/templatetags/inventree_extras.py:116 +#: part/templatetags/inventree_extras.py:125 msgid "Unknown database" msgstr "" -#: part/views.py:92 +#: part/views.py:93 msgid "Set Part Category" msgstr "" -#: part/views.py:142 +#: part/views.py:143 #, python-brace-format msgid "Set category for {n} parts" msgstr "" -#: part/views.py:214 +#: part/views.py:215 msgid "Match References" msgstr "" -#: part/views.py:502 +#: part/views.py:511 msgid "None" msgstr "" -#: part/views.py:561 +#: part/views.py:570 msgid "Part QR Code" msgstr "" -#: part/views.py:663 +#: part/views.py:672 msgid "Select Part Image" msgstr "" -#: part/views.py:689 +#: part/views.py:698 msgid "Updated part image" msgstr "" -#: part/views.py:692 +#: part/views.py:701 msgid "Part image not found" msgstr "" -#: part/views.py:766 +#: part/views.py:775 msgid "Match Parts" msgstr "" -#: part/views.py:1101 +#: part/views.py:1110 msgid "Export Bill of Materials" msgstr "" -#: part/views.py:1150 +#: part/views.py:1159 msgid "Confirm Part Deletion" msgstr "" -#: part/views.py:1157 +#: part/views.py:1166 msgid "Part was deleted" msgstr "" -#: part/views.py:1166 +#: part/views.py:1175 msgid "Part Pricing" msgstr "" -#: part/views.py:1315 +#: part/views.py:1324 msgid "Create Part Parameter Template" msgstr "" -#: part/views.py:1325 +#: part/views.py:1334 msgid "Edit Part Parameter Template" msgstr "" -#: part/views.py:1332 +#: part/views.py:1341 msgid "Delete Part Parameter Template" msgstr "" -#: part/views.py:1391 templates/js/translated/part.js:315 +#: part/views.py:1400 templates/js/translated/part.js:315 msgid "Edit Part Category" msgstr "" -#: part/views.py:1429 +#: part/views.py:1438 msgid "Delete Part Category" msgstr "" -#: part/views.py:1435 +#: part/views.py:1444 msgid "Part category was deleted" msgstr "" -#: part/views.py:1444 +#: part/views.py:1453 msgid "Create Category Parameter Template" msgstr "" -#: part/views.py:1545 +#: part/views.py:1554 msgid "Edit Category Parameter Template" msgstr "" -#: part/views.py:1601 +#: part/views.py:1610 msgid "Delete Category Parameter Template" msgstr "" -#: part/views.py:1623 +#: part/views.py:1632 msgid "Added new price break" msgstr "" -#: part/views.py:1699 +#: part/views.py:1708 msgid "Edit Internal Price Break" msgstr "" -#: part/views.py:1707 +#: part/views.py:1716 msgid "Delete Internal Price Break" msgstr "" -#: plugin/integration.py:124 +#: plugin/integration.py:138 msgid "No author found" msgstr "" -#: plugin/integration.py:136 +#: plugin/integration.py:152 msgid "No date found" msgstr "" @@ -5191,7 +5287,7 @@ msgstr "" msgid "Is the plugin active" msgstr "" -#: plugin/models.py:195 +#: plugin/models.py:199 msgid "Plugin" msgstr "" @@ -5357,33 +5453,33 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:517 stock/templates/stock/item_base.html:156 +#: stock/models.py:519 stock/templates/stock/item_base.html:156 #: templates/js/translated/build.js:293 templates/js/translated/build.js:697 #: templates/js/translated/build.js:1073 #: templates/js/translated/model_renderers.js:95 #: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 -#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:415 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:423 msgid "Serial Number" -msgstr "" +msgstr "일련번호" #: report/templates/report/inventree_test_report_base.html:88 msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1948 +#: stock/models.py:1976 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1954 +#: stock/models.py:1982 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin.html:50 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2367 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2525 msgid "Date" msgstr "" @@ -5396,23 +5492,27 @@ msgid "Fail" msgstr "" #: report/templates/report/inventree_test_report_base.html:123 -#: stock/templates/stock/stock_sidebar.html:12 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:578 templates/js/translated/stock.js:748 -#: templates/js/translated/stock.js:2627 +#: templates/js/translated/stock.js:586 templates/js/translated/stock.js:756 +#: templates/js/translated/stock.js:2785 msgid "Serial" msgstr "" -#: stock/api.py:478 +#: stock/api.py:476 msgid "Quantity is required" msgstr "" -#: stock/forms.py:77 stock/forms.py:251 stock/models.py:574 +#: stock/api.py:483 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:576 #: stock/templates/stock/item_base.html:193 -#: templates/js/translated/stock.js:1701 +#: templates/js/translated/stock.js:1709 msgid "Expiry Date" msgstr "" @@ -5460,228 +5560,228 @@ msgstr "" msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:611 +#: stock/models.py:62 stock/models.py:613 #: stock/templates/stock/item_base.html:416 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:612 +#: stock/models.py:63 stock/models.py:614 msgid "Select Owner" msgstr "" -#: stock/models.py:336 +#: stock/models.py:338 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:372 +#: stock/models.py:374 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:382 stock/models.py:391 +#: stock/models.py:384 stock/models.py:393 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:383 +#: stock/models.py:385 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:405 +#: stock/models.py:407 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:411 +#: stock/models.py:413 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:418 +#: stock/models.py:420 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:461 +#: stock/models.py:463 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:470 +#: stock/models.py:472 msgid "Base part" msgstr "" -#: stock/models.py:478 +#: stock/models.py:480 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:484 stock/templates/stock/location.html:16 +#: stock/models.py:486 stock/templates/stock/location.html:16 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:494 +#: stock/models.py:496 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:500 stock/templates/stock/item_base.html:298 +#: stock/models.py:502 stock/templates/stock/item_base.html:298 msgid "Installed In" msgstr "" -#: stock/models.py:503 +#: stock/models.py:505 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:519 +#: stock/models.py:521 msgid "Serial number for this item" msgstr "" -#: stock/models.py:533 +#: stock/models.py:535 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:537 +#: stock/models.py:539 msgid "Stock Quantity" msgstr "" -#: stock/models.py:546 +#: stock/models.py:548 msgid "Source Build" msgstr "" -#: stock/models.py:548 +#: stock/models.py:550 msgid "Build for this stock item" msgstr "" -#: stock/models.py:559 +#: stock/models.py:561 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:562 +#: stock/models.py:564 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:568 +#: stock/models.py:570 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:575 +#: stock/models.py:577 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete on deplete" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:598 stock/templates/stock/item.html:111 +#: stock/models.py:600 stock/templates/stock/item.html:128 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:607 +#: stock/models.py:609 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1096 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1074 +#: stock/models.py:1102 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1080 +#: stock/models.py:1108 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1083 +#: stock/models.py:1111 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1086 +#: stock/models.py:1114 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1093 +#: stock/models.py:1121 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1164 +#: stock/models.py:1192 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1195 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1170 +#: stock/models.py:1198 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1173 +#: stock/models.py:1201 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1176 +#: stock/models.py:1204 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1179 +#: stock/models.py:1207 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1186 stock/serializers.py:774 +#: stock/models.py:1214 stock/serializers.py:775 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1190 +#: stock/models.py:1218 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1222 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1198 +#: stock/models.py:1226 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1369 +#: stock/models.py:1397 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1868 +#: stock/models.py:1896 msgid "Entry notes" msgstr "" -#: stock/models.py:1925 +#: stock/models.py:1953 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1931 +#: stock/models.py:1959 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1949 +#: stock/models.py:1977 msgid "Test name" msgstr "" -#: stock/models.py:1955 templates/js/translated/table_filters.js:271 +#: stock/models.py:1983 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1961 +#: stock/models.py:1989 msgid "Test output value" msgstr "" -#: stock/models.py:1968 +#: stock/models.py:1996 msgid "Test result attachment" msgstr "" -#: stock/models.py:1974 +#: stock/models.py:2002 msgid "Test notes" msgstr "" @@ -5706,7 +5806,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:326 stock/serializers.py:731 stock/serializers.py:972 +#: stock/serializers.py:326 stock/serializers.py:732 stock/serializers.py:973 msgid "Destination stock location" msgstr "" @@ -5718,63 +5818,63 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:589 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:592 +#: stock/serializers.py:593 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:597 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:626 +#: stock/serializers.py:627 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:632 +#: stock/serializers.py:633 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:640 +#: stock/serializers.py:641 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:650 stock/serializers.py:880 +#: stock/serializers.py:651 stock/serializers.py:881 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:738 +#: stock/serializers.py:739 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:743 +#: stock/serializers.py:744 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:744 +#: stock/serializers.py:745 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:749 +#: stock/serializers.py:750 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:750 +#: stock/serializers.py:751 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:760 +#: stock/serializers.py:761 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:842 +#: stock/serializers.py:843 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:870 +#: stock/serializers.py:871 msgid "Stock transaction notes" msgstr "" @@ -5787,47 +5887,51 @@ msgid "New Entry" msgstr "" #: stock/templates/stock/item.html:48 -msgid "Child Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:55 -msgid "This stock item does not have any child items" +msgid "Stock Item Allocations" msgstr "" #: stock/templates/stock/item.html:64 -#: stock/templates/stock/stock_sidebar.html:8 -msgid "Test Data" -msgstr "" - -#: stock/templates/stock/item.html:68 stock/templates/stock/item_base.html:57 -msgid "Test Report" +msgid "Child Stock Items" msgstr "" #: stock/templates/stock/item.html:72 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item.html:81 +#: stock/templates/stock/stock_sidebar.html:12 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:57 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item.html:89 msgid "Delete Test Data" msgstr "" -#: stock/templates/stock/item.html:76 +#: stock/templates/stock/item.html:93 msgid "Add Test Data" msgstr "" -#: stock/templates/stock/item.html:133 +#: stock/templates/stock/item.html:150 msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:482 +#: stock/templates/stock/item.html:154 stock/views.py:482 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:279 stock/templates/stock/item.html:304 +#: stock/templates/stock/item.html:309 stock/templates/stock/item.html:334 msgid "Add Test Result" msgstr "" -#: stock/templates/stock/item.html:324 +#: stock/templates/stock/item.html:354 msgid "Edit Test Result" msgstr "" -#: stock/templates/stock/item.html:338 +#: stock/templates/stock/item.html:368 msgid "Delete Test Result" msgstr "" @@ -5952,7 +6056,7 @@ msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:206 -#: templates/js/translated/stock.js:1714 +#: templates/js/translated/stock.js:1722 msgid "Last Updated" msgstr "" @@ -6111,7 +6215,7 @@ msgid "Sublocations" msgstr "" #: stock/templates/stock/location.html:146 templates/InvenTree/search.html:164 -#: templates/stats.html:97 users/models.py:42 +#: templates/stats.html:109 users/models.py:42 msgid "Stock Locations" msgstr "" @@ -6135,7 +6239,7 @@ msgstr "" msgid "Stock Tracking" msgstr "" -#: stock/templates/stock/stock_sidebar.html:16 +#: stock/templates/stock/stock_sidebar.html:20 msgid "Child Items" msgstr "" @@ -6164,7 +6268,7 @@ msgstr "" msgid "Are you sure you want to delete this stock tracking entry?" msgstr "" -#: stock/views.py:162 +#: stock/views.py:162 templates/js/translated/stock.js:139 msgid "Edit Stock Location" msgstr "" @@ -6204,7 +6308,7 @@ msgstr "" msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:727 templates/js/translated/stock.js:1066 +#: stock/views.py:727 templates/js/translated/stock.js:1074 msgid "Confirm stock adjustment" msgstr "" @@ -6212,7 +6316,7 @@ msgstr "" msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:324 +#: stock/views.py:760 templates/js/translated/stock.js:332 msgid "Edit Stock Item" msgstr "" @@ -6224,7 +6328,7 @@ msgstr "" msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1153 templates/js/translated/stock.js:304 +#: stock/views.py:1153 templates/js/translated/stock.js:312 msgid "Duplicate Stock Item" msgstr "" @@ -6262,12 +6366,24 @@ msgstr "" #: templates/404.html:5 templates/404.html:11 msgid "Page Not Found" -msgstr "" +msgstr "페이지를 찾을 수 없습니다." #: templates/404.html:14 msgid "The requested page does not exist" msgstr "" +#: templates/500.html:5 templates/500.html:11 +msgid "Internal Server Error" +msgstr "내부 서버 오류" + +#: templates/500.html:14 +msgid "The InvenTree server raised an internal error" +msgstr "" + +#: templates/500.html:15 +msgid "Refer to the error log in the admin interface for further details" +msgstr "" + #: templates/503.html:10 templates/503.html:35 msgid "Site is in Maintenance" msgstr "" @@ -6374,25 +6490,25 @@ msgstr "" #: templates/InvenTree/settings/currencies.html:49 msgid "Update Now" -msgstr "" +msgstr "지금 업데이트" #: templates/InvenTree/settings/global.html:9 msgid "Server Settings" -msgstr "" +msgstr "서버 설정" #: templates/InvenTree/settings/login.html:9 #: templates/InvenTree/settings/sidebar.html:29 msgid "Login Settings" -msgstr "" +msgstr "로그인 설정" #: templates/InvenTree/settings/login.html:21 templates/account/signup.html:5 msgid "Signup" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:113 msgid "Settings" -msgstr "" +msgstr "설정" #: templates/InvenTree/settings/mixins/urls.html:5 msgid "URLs" @@ -6431,45 +6547,45 @@ msgstr "" msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:32 +#: templates/InvenTree/settings/plugin.html:33 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:37 +#: templates/InvenTree/settings/plugin.html:38 #: templates/js/translated/plugin.js:15 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: templates/InvenTree/settings/plugin.html:47 templates/navbar.html:111 #: users/models.py:39 msgid "Admin" msgstr "" -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:49 #: templates/InvenTree/settings/plugin_settings.html:28 msgid "Author" msgstr "" -#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin_settings.html:43 msgid "Version" -msgstr "" +msgstr "버전" -#: templates/InvenTree/settings/plugin.html:91 +#: templates/InvenTree/settings/plugin.html:92 msgid "Inactive plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:114 +#: templates/InvenTree/settings/plugin.html:115 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:123 +#: templates/InvenTree/settings/plugin.html:124 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:125 +#: templates/InvenTree/settings/plugin.html:126 msgid "Message" -msgstr "" +msgstr "메시지" #: templates/InvenTree/settings/plugin_settings.html:10 #, python-format @@ -6555,37 +6671,37 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:75 +#: templates/InvenTree/settings/settings.html:78 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:77 +#: templates/InvenTree/settings/settings.html:80 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:79 +#: templates/InvenTree/settings/settings.html:82 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:168 +#: templates/InvenTree/settings/settings.html:171 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:190 -#: templates/InvenTree/settings/settings.html:289 +#: templates/InvenTree/settings/settings.html:193 +#: templates/InvenTree/settings/settings.html:292 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:191 -#: templates/InvenTree/settings/settings.html:290 +#: templates/InvenTree/settings/settings.html:194 +#: templates/InvenTree/settings/settings.html:293 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:272 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:273 +#: templates/InvenTree/settings/settings.html:276 msgid "ID" msgstr "" @@ -6663,11 +6779,11 @@ msgstr "" #: templates/InvenTree/settings/user.html:36 msgid "First Name" -msgstr "" +msgstr "이름" #: templates/InvenTree/settings/user.html:40 msgid "Last Name" -msgstr "" +msgstr "성" #: templates/InvenTree/settings/user.html:54 msgid "The following email addresses are associated with your account:" @@ -6763,124 +6879,105 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:219 -#: templates/InvenTree/settings/user_display.html:25 -msgid "Theme Settings" +#: templates/InvenTree/settings/user.html:220 +msgid "Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:226 +msgid "Log out active sessions (except this one)" msgstr "" #: templates/InvenTree/settings/user.html:227 -#: templates/InvenTree/settings/user_display.html:35 -msgid "Select theme" +msgid "Log Out Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:236 +msgid "unknown on unknown" msgstr "" #: templates/InvenTree/settings/user.html:237 +msgid "unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:241 +msgid "IP Address" +msgstr "IP 주소" + +#: templates/InvenTree/settings/user.html:242 +msgid "Device" +msgstr "" + +#: templates/InvenTree/settings/user.html:243 +msgid "Last Activity" +msgstr "" + +#: templates/InvenTree/settings/user.html:252 +#, python-format +msgid "%(time)s ago (this session)" +msgstr "" + +#: templates/InvenTree/settings/user.html:254 +#, python-format +msgid "%(time)s ago" +msgstr "" + +#: templates/InvenTree/settings/user.html:266 +msgid "Do you really want to remove the selected email address?" +msgstr "선택한 이메일 주소를 정말로 제거하시겠습니까?" + +#: templates/InvenTree/settings/user_display.html:25 +msgid "Theme Settings" +msgstr "테마 설정" + +#: templates/InvenTree/settings/user_display.html:35 +msgid "Select theme" +msgstr "테마 선택" + #: templates/InvenTree/settings/user_display.html:46 msgid "Set Theme" msgstr "" -#: templates/InvenTree/settings/user.html:246 #: templates/InvenTree/settings/user_display.html:54 msgid "Language Settings" msgstr "" -#: templates/InvenTree/settings/user.html:254 #: templates/InvenTree/settings/user_display.html:63 msgid "Select language" msgstr "" -#: templates/InvenTree/settings/user.html:270 #: templates/InvenTree/settings/user_display.html:79 #, python-format msgid "%(lang_translated)s%% translated" msgstr "" -#: templates/InvenTree/settings/user.html:272 #: templates/InvenTree/settings/user_display.html:81 msgid "No translations available" msgstr "" -#: templates/InvenTree/settings/user.html:279 #: templates/InvenTree/settings/user_display.html:88 msgid "Set Language" msgstr "" -#: templates/InvenTree/settings/user.html:281 #: templates/InvenTree/settings/user_display.html:91 msgid "Some languages are not complete" msgstr "" -#: templates/InvenTree/settings/user.html:283 #: templates/InvenTree/settings/user_display.html:93 msgid "Show only sufficent" msgstr "" -#: templates/InvenTree/settings/user.html:285 +#: templates/InvenTree/settings/user_display.html:95 +msgid "and hidden." +msgstr "" + #: templates/InvenTree/settings/user_display.html:95 msgid "Show them too" msgstr "" -#: templates/InvenTree/settings/user.html:292 #: templates/InvenTree/settings/user_display.html:101 msgid "Help the translation efforts!" msgstr "" -#: templates/InvenTree/settings/user.html:293 -#, python-format -msgid "Native language translation of the\n" -" InvenTree web application is community contributed via crowdin. Contributions are\n" -" welcomed and encouraged." -msgstr "" - -#: templates/InvenTree/settings/user.html:302 -msgid "Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:308 -msgid "Log out active sessions (except this one)" -msgstr "" - -#: templates/InvenTree/settings/user.html:309 -msgid "Log Out Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:318 -msgid "unknown on unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:319 -msgid "unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:323 -msgid "IP Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:324 -msgid "Device" -msgstr "" - -#: templates/InvenTree/settings/user.html:325 -msgid "Last Activity" -msgstr "" - -#: templates/InvenTree/settings/user.html:334 -#, python-format -msgid "%(time)s ago (this session)" -msgstr "" - -#: templates/InvenTree/settings/user.html:336 -#, python-format -msgid "%(time)s ago" -msgstr "" - -#: templates/InvenTree/settings/user.html:348 -msgid "Do you really want to remove the selected email address?" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:95 -msgid "and hidden." -msgstr "" - #: templates/InvenTree/settings/user_display.html:102 #, python-format msgid "Native language translation of the InvenTree web application is community contributed via crowdin. Contributions are welcomed and encouraged." @@ -6888,7 +6985,7 @@ msgstr "" #: templates/InvenTree/settings/user_homepage.html:9 msgid "Home Page Settings" -msgstr "" +msgstr "홈 페이지 설정" #: templates/InvenTree/settings/user_labels.html:9 msgid "Label Settings" @@ -6899,9 +6996,9 @@ msgid "InvenTree Version Information" msgstr "" #: templates/about.html:11 templates/about.html:105 -#: templates/js/translated/bom.js:395 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:573 templates/js/translated/modals.js:667 -#: templates/js/translated/modals.js:970 templates/modals.html:15 +#: templates/js/translated/bom.js:407 templates/js/translated/modals.js:53 +#: templates/js/translated/modals.js:584 templates/js/translated/modals.js:678 +#: templates/js/translated/modals.js:983 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -6928,7 +7025,7 @@ msgstr "" #: templates/about.html:58 msgid "API Version" -msgstr "" +msgstr "API 버전" #: templates/about.html:63 msgid "Python Version" @@ -7027,7 +7124,7 @@ msgstr "" #: templates/account/password_reset.html:5 #: templates/account/password_reset.html:12 msgid "Password Reset" -msgstr "" +msgstr "비밀번호 재설정" #: templates/account/password_reset.html:18 msgid "Forgotten your password? Enter your email address below, and we'll send you an email allowing you to reset it." @@ -7052,11 +7149,11 @@ msgstr "" #: templates/account/password_reset_from_key.html:18 msgid "Change password" -msgstr "" +msgstr "비밀번호 변경" #: templates/account/password_reset_from_key.html:22 msgid "Your password is now changed." -msgstr "" +msgstr "비밀번호가 변경되었습니다." #: templates/account/signup.html:11 templates/account/signup.html:22 msgid "Sign Up" @@ -7065,7 +7162,7 @@ msgstr "" #: templates/account/signup.html:13 #, python-format msgid "Already have an account? Then please sign in." -msgstr "" +msgstr "이미 계정을 가지고 계십니까? 그렇다면 로그인 하세요." #: templates/account/signup.html:27 msgid "Or use a SSO-provider for signup" @@ -7142,15 +7239,15 @@ msgstr "" #: templates/attachment_button.html:4 templates/js/translated/attachment.js:54 msgid "Add Link" -msgstr "" +msgstr "링크 추가" #: templates/attachment_button.html:7 templates/js/translated/attachment.js:36 msgid "Add Attachment" -msgstr "" +msgstr "첨부파일 추가" #: templates/base.html:97 msgid "Server Restart Required" -msgstr "" +msgstr "서버 재시작 필요" #: templates/base.html:100 msgid "A configuration option has been changed which requires a server restart" @@ -7178,13 +7275,13 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1103 +#: templates/js/translated/bom.js:1117 msgid "Required Quantity" msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:579 templates/js/translated/build.js:1189 +#: templates/js/translated/bom.js:591 templates/js/translated/build.js:1189 #: templates/js/translated/build.js:1810 #: templates/js/translated/table_filters.js:178 msgid "Available" @@ -7208,10 +7305,6 @@ msgstr "" msgid "Click on the following link to view this part" msgstr "" -#: templates/email/low_stock_notification.html:17 -msgid "Total Stock" -msgstr "" - #: templates/email/low_stock_notification.html:19 msgid "Minimum Quantity" msgstr "" @@ -7232,11 +7325,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1040 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1053 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1041 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1054 msgid "No response from the InvenTree server" msgstr "" @@ -7248,27 +7341,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1063 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1051 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1064 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1068 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1056 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1069 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1073 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1061 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1074 msgid "The requested resource could not be located on the server" msgstr "" @@ -7280,11 +7373,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1065 +#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1078 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1066 +#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1079 msgid "Connection timeout while requesting data from server" msgstr "" @@ -7353,7 +7446,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "Invalid server response" msgstr "" @@ -7381,7 +7474,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1018 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1026 msgid "Remove stock item" msgstr "" @@ -7428,12 +7521,12 @@ msgid "Download BOM Template" msgstr "" #: templates/js/translated/bom.js:39 templates/js/translated/bom.js:73 -#: templates/js/translated/order.js:369 templates/js/translated/stock.js:510 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:518 msgid "Format" msgstr "" #: templates/js/translated/bom.js:40 templates/js/translated/bom.js:74 -#: templates/js/translated/order.js:370 templates/js/translated/stock.js:511 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:519 msgid "Select file format" msgstr "" @@ -7489,87 +7582,87 @@ msgstr "" msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:340 -msgid "Select and add a new variant item using the input below" +#: templates/js/translated/bom.js:352 +msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:351 +#: templates/js/translated/bom.js:363 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:357 +#: templates/js/translated/bom.js:369 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:396 +#: templates/js/translated/bom.js:408 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:397 +#: templates/js/translated/bom.js:409 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:516 +#: templates/js/translated/bom.js:528 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:520 templates/js/translated/build.js:1171 +#: templates/js/translated/bom.js:532 templates/js/translated/build.js:1171 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:525 +#: templates/js/translated/bom.js:537 msgid "Open subassembly" msgstr "" -#: templates/js/translated/bom.js:597 +#: templates/js/translated/bom.js:609 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:612 +#: templates/js/translated/bom.js:624 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:619 +#: templates/js/translated/bom.js:631 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:668 templates/js/translated/bom.js:757 +#: templates/js/translated/bom.js:680 templates/js/translated/bom.js:769 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:728 +#: templates/js/translated/bom.js:740 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:742 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:732 +#: templates/js/translated/bom.js:744 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:734 templates/js/translated/bom.js:908 +#: templates/js/translated/bom.js:746 templates/js/translated/bom.js:920 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:891 +#: templates/js/translated/bom.js:748 templates/js/translated/bom.js:903 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:830 templates/js/translated/build.js:915 +#: templates/js/translated/bom.js:842 templates/js/translated/build.js:915 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:886 +#: templates/js/translated/bom.js:898 msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:1086 templates/js/translated/build.js:1155 +#: templates/js/translated/bom.js:1100 templates/js/translated/build.js:1155 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1108 +#: templates/js/translated/bom.js:1122 msgid "Inherited from parent BOM" msgstr "" @@ -7725,9 +7818,9 @@ msgstr "" msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1206 -#: templates/js/translated/part.js:1617 templates/js/translated/stock.js:1512 -#: templates/js/translated/stock.js:2321 +#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:1624 templates/js/translated/stock.js:1520 +#: templates/js/translated/stock.js:2479 msgid "Select" msgstr "" @@ -7735,7 +7828,7 @@ msgstr "" msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2540 +#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2698 msgid "No user information" msgstr "" @@ -7808,34 +7901,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:500 -#: templates/js/translated/company.js:757 templates/js/translated/part.js:511 -#: templates/js/translated/part.js:596 +#: templates/js/translated/company.js:757 templates/js/translated/part.js:517 +#: templates/js/translated/part.js:602 msgid "Template part" msgstr "" #: templates/js/translated/company.js:504 -#: templates/js/translated/company.js:761 templates/js/translated/part.js:515 -#: templates/js/translated/part.js:600 +#: templates/js/translated/company.js:761 templates/js/translated/part.js:521 +#: templates/js/translated/part.js:606 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:631 templates/js/translated/part.js:690 +#: templates/js/translated/company.js:631 templates/js/translated/part.js:696 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:668 templates/js/translated/part.js:732 +#: templates/js/translated/company.js:668 templates/js/translated/part.js:738 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:669 templates/js/translated/part.js:733 +#: templates/js/translated/company.js:669 templates/js/translated/part.js:739 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:688 templates/js/translated/part.js:750 +#: templates/js/translated/company.js:688 templates/js/translated/part.js:756 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:699 templates/js/translated/part.js:762 +#: templates/js/translated/company.js:699 templates/js/translated/part.js:768 msgid "Delete Parameter" msgstr "" @@ -7844,12 +7937,12 @@ msgid "No supplier parts found" msgstr "" #: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:420 +#: templates/js/translated/filters.js:429 msgid "true" msgstr "" #: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:421 +#: templates/js/translated/filters.js:430 msgid "false" msgstr "" @@ -7869,7 +7962,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:329 +#: templates/js/translated/filters.js:338 msgid "Create filter" msgstr "" @@ -7898,33 +7991,33 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1080 templates/modals.html:19 +#: templates/js/translated/forms.js:1082 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1471 +#: templates/js/translated/forms.js:1487 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1675 +#: templates/js/translated/forms.js:1691 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1895 +#: templates/js/translated/forms.js:1930 msgid "Clear input" msgstr "" #: templates/js/translated/helpers.js:19 msgid "YES" -msgstr "" +msgstr "예" #: templates/js/translated/helpers.js:21 msgid "NO" -msgstr "" +msgstr "아니오" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1042 +#: templates/js/translated/stock.js:1050 msgid "Select Stock Items" msgstr "" @@ -7974,61 +8067,61 @@ msgid "Select Label Template" msgstr "" #: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 -#: templates/js/translated/modals.js:599 +#: templates/js/translated/modals.js:610 msgid "Cancel" -msgstr "" +msgstr "취소" #: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:666 templates/js/translated/modals.js:969 +#: templates/js/translated/modals.js:677 templates/js/translated/modals.js:982 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" -msgstr "" +msgstr "제출" #: templates/js/translated/modals.js:118 msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:381 +#: templates/js/translated/modals.js:392 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:540 +#: templates/js/translated/modals.js:551 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:598 +#: templates/js/translated/modals.js:609 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:655 +#: templates/js/translated/modals.js:666 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:933 +#: templates/js/translated/modals.js:946 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1045 +#: templates/js/translated/modals.js:1058 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1046 +#: templates/js/translated/modals.js:1059 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1069 +#: templates/js/translated/modals.js:1082 msgid "Error requesting form data" msgstr "" @@ -8052,23 +8145,24 @@ msgstr "" msgid "Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:236 +#: templates/js/translated/model_renderers.js:249 +#: templates/js/translated/model_renderers.js:270 msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:253 +#: templates/js/translated/model_renderers.js:287 msgid "Shipment ID" msgstr "" -#: templates/js/translated/model_renderers.js:273 +#: templates/js/translated/model_renderers.js:307 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:310 +#: templates/js/translated/model_renderers.js:344 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:339 +#: templates/js/translated/model_renderers.js:373 msgid "Supplier Part ID" msgstr "" @@ -8116,7 +8210,7 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2123 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2131 msgid "Stock Status" msgstr "" @@ -8140,7 +8234,7 @@ msgstr "" msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:790 templates/js/translated/part.js:803 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:809 msgid "No purchase orders found" msgstr "" @@ -8165,9 +8259,9 @@ msgid "Total" msgstr "" #: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 -#: templates/js/translated/part.js:1834 templates/js/translated/part.js:2045 +#: templates/js/translated/part.js:1841 templates/js/translated/part.js:2052 msgid "Unit Price" -msgstr "" +msgstr "단가" #: templates/js/translated/order.js:1083 templates/js/translated/order.js:2179 msgid "Total Price" @@ -8181,7 +8275,7 @@ msgstr "" msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1166 templates/js/translated/part.js:935 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:942 msgid "Receive line item" msgstr "" @@ -8250,7 +8344,7 @@ msgid "Delete Stock Allocation" msgstr "" #: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 -#: templates/js/translated/stock.js:1428 +#: templates/js/translated/stock.js:1436 msgid "Shipped to customer" msgstr "" @@ -8348,7 +8442,7 @@ msgstr "" #: templates/js/translated/part.js:264 msgid "Copy Image" -msgstr "" +msgstr "이미지 복사" #: templates/js/translated/part.js:265 msgid "Copy image from original part" @@ -8378,144 +8472,148 @@ msgstr "" msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:412 +#: templates/js/translated/part.js:351 +msgid "Create Part Variant" +msgstr "" + +#: templates/js/translated/part.js:418 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:414 +#: templates/js/translated/part.js:420 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:419 +#: templates/js/translated/part.js:425 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:421 +#: templates/js/translated/part.js:427 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:444 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:448 +#: templates/js/translated/part.js:454 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:451 +#: templates/js/translated/part.js:457 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:481 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:503 templates/js/translated/part.js:588 +#: templates/js/translated/part.js:509 templates/js/translated/part.js:594 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:507 templates/js/translated/part.js:592 +#: templates/js/translated/part.js:513 templates/js/translated/part.js:598 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:519 +#: templates/js/translated/part.js:525 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:523 +#: templates/js/translated/part.js:529 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:638 +#: templates/js/translated/part.js:644 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1005 +#: templates/js/translated/part.js:1012 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1029 +#: templates/js/translated/part.js:1036 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1096 templates/js/translated/part.js:1356 +#: templates/js/translated/part.js:1103 templates/js/translated/part.js:1363 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1266 +#: templates/js/translated/part.js:1273 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1289 +#: templates/js/translated/part.js:1296 #: templates/js/translated/table_filters.js:430 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:1380 templates/js/translated/part.js:1552 -#: templates/js/translated/stock.js:2282 +#: templates/js/translated/part.js:1387 templates/js/translated/part.js:1559 +#: templates/js/translated/stock.js:2440 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1396 +#: templates/js/translated/part.js:1403 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1571 templates/js/translated/stock.js:2301 +#: templates/js/translated/part.js:1578 templates/js/translated/stock.js:2459 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:1635 +#: templates/js/translated/part.js:1642 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1649 templates/js/translated/stock.js:2345 +#: templates/js/translated/part.js:1656 templates/js/translated/stock.js:2503 msgid "Path" msgstr "" -#: templates/js/translated/part.js:1693 +#: templates/js/translated/part.js:1700 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1744 templates/js/translated/stock.js:1234 +#: templates/js/translated/part.js:1751 templates/js/translated/stock.js:1242 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1745 templates/js/translated/stock.js:1235 +#: templates/js/translated/part.js:1752 templates/js/translated/stock.js:1243 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:1751 +#: templates/js/translated/part.js:1758 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:1773 +#: templates/js/translated/part.js:1780 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:1787 +#: templates/js/translated/part.js:1794 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:1812 +#: templates/js/translated/part.js:1819 #, python-brace-format msgid "No ${human_name} information found" msgstr "" -#: templates/js/translated/part.js:1867 +#: templates/js/translated/part.js:1874 #, python-brace-format msgid "Edit ${human_name}" msgstr "" -#: templates/js/translated/part.js:1868 +#: templates/js/translated/part.js:1875 #, python-brace-format msgid "Delete ${human_name}" msgstr "" -#: templates/js/translated/part.js:1969 +#: templates/js/translated/part.js:1976 msgid "Single Price" msgstr "" -#: templates/js/translated/part.js:1988 +#: templates/js/translated/part.js:1995 msgid "Single Price Difference" msgstr "" @@ -8589,340 +8687,344 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:74 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:181 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:93 templates/js/translated/stock.js:175 +#: templates/js/translated/stock.js:94 templates/js/translated/stock.js:183 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:101 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:110 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:146 +#: templates/js/translated/stock.js:154 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:186 +#: templates/js/translated/stock.js:194 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:225 +#: templates/js/translated/stock.js:233 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:231 +#: templates/js/translated/stock.js:239 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:382 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:387 +#: templates/js/translated/stock.js:395 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:420 msgid "Find Serial Number" -msgstr "" +msgstr "일련번호 찾기" -#: templates/js/translated/stock.js:416 templates/js/translated/stock.js:417 +#: templates/js/translated/stock.js:424 templates/js/translated/stock.js:425 msgid "Enter serial number" -msgstr "" +msgstr "일련번호를 입력하세요" -#: templates/js/translated/stock.js:433 +#: templates/js/translated/stock.js:441 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:453 +#: templates/js/translated/stock.js:461 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:462 +#: templates/js/translated/stock.js:470 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:515 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:526 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:519 +#: templates/js/translated/stock.js:527 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:628 +#: templates/js/translated/stock.js:636 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:629 +#: templates/js/translated/stock.js:637 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:714 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:715 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:709 +#: templates/js/translated/stock.js:717 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:710 +#: templates/js/translated/stock.js:718 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:796 +#: templates/js/translated/stock.js:804 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:797 +#: templates/js/translated/stock.js:805 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:892 +#: templates/js/translated/stock.js:900 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:893 +#: templates/js/translated/stock.js:901 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:899 +#: templates/js/translated/stock.js:907 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:900 +#: templates/js/translated/stock.js:908 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:904 +#: templates/js/translated/stock.js:912 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:905 +#: templates/js/translated/stock.js:913 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:909 +#: templates/js/translated/stock.js:917 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:910 users/models.py:206 +#: templates/js/translated/stock.js:918 users/models.py:208 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:914 templates/stock_table.html:58 +#: templates/js/translated/stock.js:922 templates/stock_table.html:58 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1051 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1201 +#: templates/js/translated/stock.js:1209 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1203 +#: templates/js/translated/stock.js:1211 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1208 +#: templates/js/translated/stock.js:1216 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1230 +#: templates/js/translated/stock.js:1238 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1256 +#: templates/js/translated/stock.js:1264 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1313 +#: templates/js/translated/stock.js:1321 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1428 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1424 +#: templates/js/translated/stock.js:1432 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1432 +#: templates/js/translated/stock.js:1440 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1438 +#: templates/js/translated/stock.js:1446 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1604 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1601 +#: templates/js/translated/stock.js:1609 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1604 +#: templates/js/translated/stock.js:1612 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1608 +#: templates/js/translated/stock.js:1616 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1610 +#: templates/js/translated/stock.js:1618 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1616 +#: templates/js/translated/stock.js:1624 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1618 +#: templates/js/translated/stock.js:1626 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1620 +#: templates/js/translated/stock.js:1628 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1633 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1632 +#: templates/js/translated/stock.js:1640 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1634 +#: templates/js/translated/stock.js:1642 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1636 +#: templates/js/translated/stock.js:1644 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1648 #: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1690 +#: templates/js/translated/stock.js:1698 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1763 +#: templates/js/translated/stock.js:1771 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1809 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1822 templates/js/translated/stock.js:1870 +#: templates/js/translated/stock.js:1830 templates/js/translated/stock.js:1878 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1910 +#: templates/js/translated/stock.js:1918 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1937 +#: templates/js/translated/stock.js:1945 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1939 +#: templates/js/translated/stock.js:1947 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:2138 +#: templates/js/translated/stock.js:2146 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2152 +#: templates/js/translated/stock.js:2160 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2153 +#: templates/js/translated/stock.js:2161 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2377 +#: templates/js/translated/stock.js:2340 +msgid "Allocated Quantity" +msgstr "" + +#: templates/js/translated/stock.js:2535 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2399 +#: templates/js/translated/stock.js:2557 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2424 +#: templates/js/translated/stock.js:2582 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2443 +#: templates/js/translated/stock.js:2601 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2462 +#: templates/js/translated/stock.js:2620 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2480 +#: templates/js/translated/stock.js:2638 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2503 +#: templates/js/translated/stock.js:2661 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2511 +#: templates/js/translated/stock.js:2669 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2552 +#: templates/js/translated/stock.js:2710 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2553 +#: templates/js/translated/stock.js:2711 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2604 +#: templates/js/translated/stock.js:2762 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2655 +#: templates/js/translated/stock.js:2813 msgid "Uninstall Stock Item" msgstr "" @@ -9194,11 +9296,11 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:113 +#: templates/navbar.html:114 msgid "Logout" msgstr "" -#: templates/navbar.html:115 +#: templates/navbar.html:116 msgid "Login" msgstr "" @@ -9246,31 +9348,43 @@ msgstr "" msgid "Server is deployed using docker" msgstr "" -#: templates/stats.html:40 -msgid "Server status" +#: templates/stats.html:39 +msgid "Plugin Support" msgstr "" #: templates/stats.html:43 -msgid "Healthy" +msgid "Plugin support enabled" msgstr "" #: templates/stats.html:45 -msgid "Issues detected" +msgid "Plugin support disabled" msgstr "" #: templates/stats.html:52 -msgid "Background Worker" +msgid "Server status" msgstr "" #: templates/stats.html:55 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:57 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:64 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:67 msgid "Background worker not running" msgstr "" -#: templates/stats.html:63 +#: templates/stats.html:75 msgid "Email Settings" msgstr "" -#: templates/stats.html:66 +#: templates/stats.html:78 msgid "Email settings not configured" msgstr "" @@ -9366,35 +9480,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:193 +#: users/models.py:195 msgid "Permission set" msgstr "" -#: users/models.py:201 +#: users/models.py:203 msgid "Group" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "View" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to view items" msgstr "" -#: users/models.py:206 +#: users/models.py:208 msgid "Permission to add items" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Change" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Permissions to edit items" msgstr "" -#: users/models.py:210 +#: users/models.py:212 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/nl/LC_MESSAGES/django.po b/InvenTree/locale/nl/LC_MESSAGES/django.po index 65bba6b9d6..73f5ea6755 100644 --- a/InvenTree/locale/nl/LC_MESSAGES/django.po +++ b/InvenTree/locale/nl/LC_MESSAGES/django.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-10 03:54+0000\n" -"PO-Revision-Date: 2022-01-10 03:57\n" +"POT-Creation-Date: 2022-01-29 00:17+0000\n" +"PO-Revision-Date: 2022-01-29 01:11\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -18,15 +18,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 138\n" -#: InvenTree/api.py:64 +#: InvenTree/api.py:55 msgid "API endpoint not found" msgstr "API eindpunt niet gevonden" -#: InvenTree/api.py:110 +#: InvenTree/api.py:101 msgid "No action specified" msgstr "Geen actie gespecificeerd" -#: InvenTree/api.py:124 +#: InvenTree/api.py:116 msgid "No matching action found" msgstr "Geen overeenkomende actie gevonden" @@ -80,41 +80,41 @@ msgstr "E-mailadres bevestiging" msgid "You must type the same email each time." msgstr "Er moet hetzelfde e-mailadres ingevoerd worden." -#: InvenTree/helpers.py:437 +#: InvenTree/helpers.py:439 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "Dubbel serienummer: {n}" -#: InvenTree/helpers.py:444 order/models.py:279 order/models.py:420 +#: InvenTree/helpers.py:446 order/models.py:282 order/models.py:425 #: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "Ongeldige hoeveeldheid ingevoerd" -#: InvenTree/helpers.py:447 +#: InvenTree/helpers.py:449 msgid "Empty serial number string" msgstr "Leeg serienummer" -#: InvenTree/helpers.py:469 InvenTree/helpers.py:472 InvenTree/helpers.py:475 -#: InvenTree/helpers.py:500 +#: InvenTree/helpers.py:471 InvenTree/helpers.py:474 InvenTree/helpers.py:477 +#: InvenTree/helpers.py:502 #, python-brace-format msgid "Invalid group: {g}" msgstr "Ongeldige groep: {g}" -#: InvenTree/helpers.py:510 +#: InvenTree/helpers.py:512 #, python-brace-format msgid "Invalid group {group}" msgstr "" -#: InvenTree/helpers.py:516 +#: InvenTree/helpers.py:518 #, python-brace-format msgid "Invalid/no group {group}" msgstr "" -#: InvenTree/helpers.py:522 +#: InvenTree/helpers.py:524 msgid "No serial numbers found" msgstr "Geen serienummers gevonden" -#: InvenTree/helpers.py:526 +#: InvenTree/helpers.py:528 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "Aantal unieke serienummer ({s}) moet overeenkomen met de hoeveelheid ({q})" @@ -127,7 +127,7 @@ msgstr "Ontbrekend bestand" msgid "Missing external link" msgstr "Externe link ontbreekt" -#: InvenTree/models.py:132 stock/models.py:1967 +#: InvenTree/models.py:132 stock/models.py:1995 #: templates/js/translated/attachment.js:119 msgid "Attachment" msgstr "Bijlage" @@ -137,15 +137,15 @@ msgid "Select file to attach" msgstr "Bestand als bijlage selecteren" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:124 part/models.py:828 +#: company/models.py:564 order/models.py:127 part/models.py:830 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:540 -#: templates/js/translated/company.js:829 templates/js/translated/part.js:1317 +#: templates/js/translated/company.js:829 templates/js/translated/part.js:1324 msgid "Link" msgstr "Link" -#: InvenTree/models.py:140 build/models.py:330 part/models.py:829 -#: stock/models.py:527 +#: InvenTree/models.py:140 build/models.py:332 part/models.py:831 +#: stock/models.py:529 msgid "Link to external URL" msgstr "Link naar externe URL" @@ -157,10 +157,11 @@ msgstr "Opmerking" msgid "File comment" msgstr "Bijlage opmerking" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 -#: common/models.py:1214 part/models.py:2258 part/models.py:2278 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1223 +#: common/models.py:1224 common/models.py:1452 common/models.py:1453 +#: part/models.py:2265 part/models.py:2285 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2534 +#: templates/js/translated/stock.js:2692 msgid "User" msgstr "Gebruiker" @@ -197,42 +198,42 @@ msgstr "Fout bij hernoemen bestand" msgid "Invalid choice" msgstr "Ongeldige keuze" -#: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 -#: label/models.py:112 part/models.py:772 part/models.py:2442 -#: plugin/models.py:40 report/models.py:181 +#: InvenTree/models.py:277 InvenTree/models.py:278 common/models.py:1438 +#: company/models.py:415 label/models.py:112 part/models.py:774 +#: part/models.py:2449 plugin/models.py:40 report/models.py:181 #: templates/InvenTree/settings/mixins/urls.html:13 -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:125 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:279 -#: templates/js/translated/company.js:641 templates/js/translated/part.js:561 -#: templates/js/translated/part.js:700 templates/js/translated/part.js:1624 -#: templates/js/translated/stock.js:2327 +#: templates/InvenTree/settings/settings.html:282 +#: templates/js/translated/company.js:641 templates/js/translated/part.js:567 +#: templates/js/translated/part.js:706 templates/js/translated/part.js:1631 +#: templates/js/translated/stock.js:2485 msgid "Name" msgstr "Naam" -#: InvenTree/models.py:284 build/models.py:207 +#: InvenTree/models.py:284 build/models.py:209 #: build/templates/build/detail.html:25 company/models.py:354 #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:122 part/models.py:795 part/templates/part/category.html:74 +#: order/models.py:125 part/models.py:797 part/templates/part/category.html:74 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 #: stock/templates/stock/location.html:93 #: templates/InvenTree/settings/plugin_settings.html:33 -#: templates/js/translated/bom.js:327 templates/js/translated/bom.js:540 +#: templates/js/translated/bom.js:339 templates/js/translated/bom.js:552 #: templates/js/translated/build.js:1682 templates/js/translated/company.js:345 #: templates/js/translated/company.js:551 #: templates/js/translated/company.js:840 templates/js/translated/order.js:836 #: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 -#: templates/js/translated/part.js:620 templates/js/translated/part.js:992 -#: templates/js/translated/part.js:1077 templates/js/translated/part.js:1247 -#: templates/js/translated/part.js:1643 templates/js/translated/part.js:1712 -#: templates/js/translated/stock.js:1569 templates/js/translated/stock.js:2339 -#: templates/js/translated/stock.js:2384 +#: templates/js/translated/part.js:626 templates/js/translated/part.js:999 +#: templates/js/translated/part.js:1084 templates/js/translated/part.js:1254 +#: templates/js/translated/part.js:1650 templates/js/translated/part.js:1719 +#: templates/js/translated/stock.js:1577 templates/js/translated/stock.js:2314 +#: templates/js/translated/stock.js:2497 templates/js/translated/stock.js:2542 msgid "Description" msgstr "Omschrijving" @@ -244,7 +245,7 @@ msgstr "Omschrijving (optioneel)" msgid "parent" msgstr "overkoepelend" -#: InvenTree/serializers.py:65 part/models.py:2727 +#: InvenTree/serializers.py:65 part/models.py:2734 msgid "Must be a valid number" msgstr "Moet een geldig nummer zijn" @@ -252,83 +253,83 @@ msgstr "Moet een geldig nummer zijn" msgid "Filename" msgstr "Bestandsnaam" -#: InvenTree/settings.py:663 +#: InvenTree/settings.py:661 msgid "German" msgstr "Duits" -#: InvenTree/settings.py:664 +#: InvenTree/settings.py:662 msgid "Greek" msgstr "Grieks" -#: InvenTree/settings.py:665 +#: InvenTree/settings.py:663 msgid "English" msgstr "Engels" -#: InvenTree/settings.py:666 +#: InvenTree/settings.py:664 msgid "Spanish" msgstr "Spaans" -#: InvenTree/settings.py:667 +#: InvenTree/settings.py:665 msgid "Spanish (Mexican)" msgstr "Spaans (Mexicaans)" -#: InvenTree/settings.py:668 +#: InvenTree/settings.py:666 msgid "French" msgstr "Frans" -#: InvenTree/settings.py:669 +#: InvenTree/settings.py:667 msgid "Hebrew" msgstr "Hebreeuws" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:668 msgid "Italian" msgstr "Italiaans" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:669 msgid "Japanese" msgstr "Japans" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:670 msgid "Korean" msgstr "Koreaans" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:671 msgid "Dutch" msgstr "Nederlands" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:672 msgid "Norwegian" msgstr "Noors" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:673 msgid "Polish" msgstr "Pools" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:674 msgid "Portugese" msgstr "Portugees" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:675 msgid "Russian" msgstr "Russisch" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:676 msgid "Swedish" msgstr "Zweeds" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:677 msgid "Thai" msgstr "Thais" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:678 msgid "Turkish" msgstr "Turks" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:679 msgid "Vietnamese" msgstr "Vietnamees" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:680 msgid "Chinese" msgstr "Chinees" @@ -374,7 +375,7 @@ msgstr "Kwijt" msgid "Returned" msgstr "Retour" -#: InvenTree/status_codes.py:143 order/models.py:941 +#: InvenTree/status_codes.py:143 order/models.py:961 #: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "Verzonden" @@ -455,7 +456,7 @@ msgstr "Splits van bovenliggend item" msgid "Split child item" msgstr "Splits onderliggende item" -#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2064 +#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2072 msgid "Merged stock items" msgstr "" @@ -543,56 +544,56 @@ msgstr "Wachtwoordvelden komen niet overeen" msgid "System Information" msgstr "Systeeminformatie" -#: barcodes/api.py:54 barcodes/api.py:151 +#: barcodes/api.py:54 barcodes/api.py:152 msgid "Must provide barcode_data parameter" msgstr "De paramenter barcode_data moet worden aangeleverd" -#: barcodes/api.py:127 +#: barcodes/api.py:128 msgid "No match found for barcode data" msgstr "Geen overeenkomst gevonden voor barcode gegevens" -#: barcodes/api.py:129 +#: barcodes/api.py:130 msgid "Match found for barcode data" msgstr "Overeenkomst gevonden voor barcode gegevens" -#: barcodes/api.py:154 +#: barcodes/api.py:155 msgid "Must provide stockitem parameter" msgstr "Moet voorraaditem parameter aanleveren" -#: barcodes/api.py:161 +#: barcodes/api.py:162 msgid "No matching stock item found" msgstr "Geen overeenkomend voorraaditem gevonden" -#: barcodes/api.py:191 +#: barcodes/api.py:193 msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:195 +#: barcodes/api.py:197 msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:199 +#: barcodes/api.py:201 msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:205 barcodes/api.py:217 +#: barcodes/api.py:207 barcodes/api.py:219 msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:223 +#: barcodes/api.py:225 msgid "Barcode associated with Stock Item" msgstr "" -#: build/forms.py:36 build/models.py:1286 +#: build/forms.py:36 build/models.py:1293 #: build/templates/build/build_base.html:82 -#: build/templates/build/detail.html:35 common/models.py:1253 +#: build/templates/build/detail.html:35 common/models.py:1263 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/models.py:796 order/models.py:1207 order/serializers.py:810 +#: order/models.py:805 order/models.py:1229 order/serializers.py:816 #: order/templates/order/order_wizard/match_parts.html:30 -#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:145 -#: part/forms.py:161 part/forms.py:177 part/models.py:2629 +#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:144 +#: part/forms.py:160 part/forms.py:176 part/models.py:2636 #: part/templates/part/bom_upload/match_parts.html:31 -#: part/templates/part/detail.html:962 part/templates/part/detail.html:1048 +#: part/templates/part/detail.html:992 part/templates/part/detail.html:1078 #: part/templates/part/part_pricing.html:16 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 @@ -603,7 +604,7 @@ msgstr "" #: stock/templates/stock/item_base.html:181 #: stock/templates/stock/item_base.html:262 #: stock/templates/stock/item_base.html:270 -#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:555 +#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:567 #: templates/js/translated/build.js:295 templates/js/translated/build.js:495 #: templates/js/translated/build.js:689 templates/js/translated/build.js:699 #: templates/js/translated/build.js:1075 templates/js/translated/build.js:1422 @@ -611,11 +612,11 @@ msgstr "" #: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 #: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 #: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 -#: templates/js/translated/order.js:2150 templates/js/translated/part.js:900 -#: templates/js/translated/part.js:1855 templates/js/translated/part.js:1978 -#: templates/js/translated/part.js:2056 templates/js/translated/stock.js:383 -#: templates/js/translated/stock.js:580 templates/js/translated/stock.js:750 -#: templates/js/translated/stock.js:2519 templates/js/translated/stock.js:2621 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:906 +#: templates/js/translated/part.js:1862 templates/js/translated/part.js:1985 +#: templates/js/translated/part.js:2063 templates/js/translated/stock.js:391 +#: templates/js/translated/stock.js:588 templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2779 msgid "Quantity" msgstr "Aantal" @@ -623,9 +624,9 @@ msgstr "Aantal" msgid "Enter quantity for build output" msgstr "Voer hoeveelheid in voor build-output" -#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 -#: stock/serializers.py:314 templates/js/translated/stock.js:230 -#: templates/js/translated/stock.js:384 +#: build/forms.py:41 order/serializers.py:820 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:238 +#: templates/js/translated/stock.js:392 msgid "Serial Numbers" msgstr "Serienummers" @@ -649,18 +650,18 @@ msgstr "Annuleren bevestigen" msgid "Confirm build cancellation" msgstr "Bevestig annulering van de build" -#: build/models.py:133 +#: build/models.py:135 msgid "Invalid choice for parent build" msgstr "Ongeldige keuze voor bovenliggende build" -#: build/models.py:137 build/templates/build/build_base.html:9 +#: build/models.py:139 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:457 +#: templates/js/translated/build.js:457 templates/js/translated/stock.js:2290 msgid "Build Order" msgstr "Productie-opdracht" -#: build/models.py:138 build/templates/build/build_base.html:13 +#: build/models.py:140 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:92 #: order/templates/order/so_sidebar.html:13 @@ -670,40 +671,40 @@ msgstr "Productie-opdracht" msgid "Build Orders" msgstr "Productie-opdrachten" -#: build/models.py:198 +#: build/models.py:200 msgid "Build Order Reference" msgstr "Productie-opdracht referentie" -#: build/models.py:199 order/models.py:210 order/models.py:536 -#: order/models.py:803 part/models.py:2638 +#: build/models.py:201 order/models.py:213 order/models.py:541 +#: order/models.py:812 part/models.py:2645 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:547 templates/js/translated/build.js:1179 +#: templates/js/translated/bom.js:559 templates/js/translated/build.js:1179 #: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "Referentie" -#: build/models.py:210 +#: build/models.py:212 msgid "Brief description of the build" msgstr "Korte beschrijving van de build" -#: build/models.py:219 build/templates/build/build_base.html:164 +#: build/models.py:221 build/templates/build/build_base.html:164 #: build/templates/build/detail.html:88 msgid "Parent Build" msgstr "Bovenliggende bouw" -#: build/models.py:220 +#: build/models.py:222 msgid "BuildOrder to which this build is allocated" msgstr "Productie-opdracht waar dit product aan is toegewezen" -#: build/models.py:225 build/templates/build/build_base.html:77 +#: build/models.py:227 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:856 order/models.py:930 -#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 -#: part/models.py:2204 part/models.py:2220 part/models.py:2239 -#: part/models.py:2256 part/models.py:2358 part/models.py:2480 -#: part/models.py:2613 part/models.py:2920 part/serializers.py:658 +#: order/models.py:876 order/models.py:950 +#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:359 +#: part/models.py:2211 part/models.py:2227 part/models.py:2246 +#: part/models.py:2263 part/models.py:2365 part/models.py:2487 +#: part/models.py:2620 part/models.py:2927 part/serializers.py:658 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/set_category.html:13 @@ -713,205 +714,205 @@ msgstr "Productie-opdracht waar dit product aan is toegewezen" #: templates/InvenTree/search.html:80 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 -#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:326 -#: templates/js/translated/bom.js:505 templates/js/translated/build.js:680 +#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:338 +#: templates/js/translated/bom.js:517 templates/js/translated/build.js:680 #: templates/js/translated/build.js:1048 templates/js/translated/build.js:1419 #: templates/js/translated/build.js:1687 templates/js/translated/company.js:492 #: templates/js/translated/company.js:749 templates/js/translated/order.js:84 #: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 #: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 -#: templates/js/translated/order.js:2128 templates/js/translated/part.js:977 -#: templates/js/translated/part.js:1058 templates/js/translated/part.js:1225 -#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:719 -#: templates/js/translated/stock.js:926 templates/js/translated/stock.js:1526 -#: templates/js/translated/stock.js:2609 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:984 +#: templates/js/translated/part.js:1065 templates/js/translated/part.js:1232 +#: templates/js/translated/stock.js:562 templates/js/translated/stock.js:727 +#: templates/js/translated/stock.js:934 templates/js/translated/stock.js:1534 +#: templates/js/translated/stock.js:2767 msgid "Part" msgstr "Onderdeel" -#: build/models.py:233 +#: build/models.py:235 msgid "Select part to build" msgstr "Selecteer onderdeel om te bouwen" -#: build/models.py:238 +#: build/models.py:240 msgid "Sales Order Reference" msgstr "Verkooporder referentie" -#: build/models.py:242 +#: build/models.py:244 msgid "SalesOrder to which this build is allocated" msgstr "Verkooporder waar dit product aan is toegewezen" -#: build/models.py:247 templates/js/translated/build.js:1407 +#: build/models.py:249 templates/js/translated/build.js:1407 #: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "Bron Locatie" -#: build/models.py:251 +#: build/models.py:253 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Selecteer de locatie waar de voorraad van de build vandaan moet komen (laat leeg om vanaf elke standaard locatie te nemen)" -#: build/models.py:256 +#: build/models.py:258 msgid "Destination Location" msgstr "Bestemmings Locatie" -#: build/models.py:260 +#: build/models.py:262 msgid "Select location where the completed items will be stored" msgstr "Selecteer locatie waar de voltooide items zullen worden opgeslagen" -#: build/models.py:264 +#: build/models.py:266 msgid "Build Quantity" msgstr "Bouwkwaliteit" -#: build/models.py:267 +#: build/models.py:269 msgid "Number of stock items to build" msgstr "Aantal voorraaditems om te bouwen" -#: build/models.py:271 +#: build/models.py:273 msgid "Completed items" msgstr "Voltooide voorraadartikelen" -#: build/models.py:273 +#: build/models.py:275 msgid "Number of stock items which have been completed" msgstr "Aantal voorraadartikelen die zijn voltooid" -#: build/models.py:277 part/templates/part/part_base.html:234 +#: build/models.py:279 part/templates/part/part_base.html:234 msgid "Build Status" msgstr "Bouwstatus" -#: build/models.py:281 +#: build/models.py:283 msgid "Build status code" msgstr "Bouwstatuscode" -#: build/models.py:285 stock/models.py:531 +#: build/models.py:287 stock/models.py:533 msgid "Batch Code" msgstr "" -#: build/models.py:289 +#: build/models.py:291 msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:126 part/models.py:967 +#: build/models.py:294 order/models.py:129 part/models.py:969 #: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "Aanmaakdatum" -#: build/models.py:296 order/models.py:558 +#: build/models.py:298 order/models.py:563 msgid "Target completion date" msgstr "Verwachte opleveringsdatum" -#: build/models.py:297 +#: build/models.py:299 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:252 +#: build/models.py:302 order/models.py:255 #: templates/js/translated/build.js:1758 msgid "Completion Date" msgstr "Opleveringsdatum" -#: build/models.py:306 +#: build/models.py:308 msgid "completed by" msgstr "voltooid door" -#: build/models.py:314 templates/js/translated/build.js:1729 +#: build/models.py:316 templates/js/translated/build.js:1729 msgid "Issued by" msgstr "" -#: build/models.py:315 +#: build/models.py:317 msgid "User who issued this build order" msgstr "Gebruiker die de productie-opdracht heeft gegeven" -#: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:140 +#: build/models.py:325 build/templates/build/build_base.html:185 +#: build/templates/build/detail.html:116 order/models.py:143 #: order/templates/order/order_base.html:170 -#: order/templates/order/sales_order_base.html:182 part/models.py:971 +#: order/templates/order/sales_order_base.html:182 part/models.py:973 #: report/templates/report/inventree_build_order_base.html:159 #: templates/js/translated/build.js:1741 templates/js/translated/order.js:864 msgid "Responsible" msgstr "Verantwoordelijke" -#: build/models.py:324 +#: build/models.py:326 msgid "User responsible for this build order" msgstr "Gebruiker verantwoordelijk voor deze productie-opdracht" -#: build/models.py:329 build/templates/build/detail.html:102 +#: build/models.py:331 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:525 +#: part/templates/part/part_base.html:354 stock/models.py:527 #: stock/templates/stock/item_base.html:373 msgid "External Link" msgstr "Externe Link" -#: build/models.py:334 build/serializers.py:201 +#: build/models.py:336 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:144 order/models.py:805 order/models.py:1051 +#: order/models.py:147 order/models.py:814 order/models.py:1071 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/models.py:956 -#: part/templates/part/detail.html:120 part/templates/part/part_sidebar.html:50 +#: order/templates/order/so_sidebar.html:17 part/models.py:958 +#: part/templates/part/detail.html:137 part/templates/part/part_sidebar.html:54 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:597 -#: stock/models.py:1867 stock/models.py:1973 stock/serializers.py:332 -#: stock/serializers.py:639 stock/serializers.py:737 stock/serializers.py:869 -#: stock/templates/stock/stock_sidebar.html:21 -#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:711 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:599 +#: stock/models.py:1895 stock/models.py:2001 stock/serializers.py:332 +#: stock/serializers.py:640 stock/serializers.py:738 stock/serializers.py:870 +#: stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:723 #: templates/js/translated/company.js:845 templates/js/translated/order.js:1149 #: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 -#: templates/js/translated/stock.js:1309 templates/js/translated/stock.js:1795 +#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1803 msgid "Notes" msgstr "Opmerkingen" -#: build/models.py:335 +#: build/models.py:337 msgid "Extra build notes" msgstr "Opmerkingen over de bouw" -#: build/models.py:710 +#: build/models.py:717 msgid "No build output specified" msgstr "Geen bouwuitvoer opgegeven" -#: build/models.py:713 +#: build/models.py:720 msgid "Build output is already completed" msgstr "Bouwuitvoer is al voltooid" -#: build/models.py:716 +#: build/models.py:723 msgid "Build output does not match Build Order" msgstr "Product komt niet overeen met de productie-opdracht" -#: build/models.py:1108 +#: build/models.py:1115 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1117 +#: build/models.py:1124 #, python-brace-format msgid "Allocated quantity ({q}) must not execed available stock quantity ({a})" msgstr "" -#: build/models.py:1127 +#: build/models.py:1134 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:1167 +#: build/models.py:1140 order/models.py:1189 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1139 +#: build/models.py:1146 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1196 +#: build/models.py:1203 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1256 stock/templates/stock/item_base.html:345 +#: build/models.py:1263 stock/templates/stock/item_base.html:345 #: templates/InvenTree/search.html:137 templates/js/translated/build.js:1660 #: templates/navbar.html:35 msgid "Build" msgstr "Product" -#: build/models.py:1257 +#: build/models.py:1264 msgid "Build to allocate parts" msgstr "Bouw om onderdelen toe te wijzen" -#: build/models.py:1273 build/serializers.py:388 order/serializers.py:690 -#: order/serializers.py:708 stock/serializers.py:577 stock/serializers.py:695 +#: build/models.py:1280 build/serializers.py:388 order/serializers.py:696 +#: order/serializers.py:714 stock/serializers.py:578 stock/serializers.py:696 #: stock/templates/stock/item_base.html:9 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:367 @@ -920,24 +921,24 @@ msgstr "Bouw om onderdelen toe te wijzen" #: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 #: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 #: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 -#: templates/js/translated/stock.js:555 templates/js/translated/stock.js:720 -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:563 templates/js/translated/stock.js:728 +#: templates/js/translated/stock.js:2628 msgid "Stock Item" msgstr "Voorraadartikel" -#: build/models.py:1274 +#: build/models.py:1281 msgid "Source stock item" msgstr "Bron voorraadartikel" -#: build/models.py:1287 +#: build/models.py:1294 msgid "Stock quantity to allocate to build" msgstr "Voorraad hoeveelheid te alloceren aan bouw" -#: build/models.py:1295 +#: build/models.py:1302 msgid "Install into" msgstr "Installeren in" -#: build/models.py:1296 +#: build/models.py:1303 msgid "Destination stock item" msgstr "Bestemming voorraadartikel" @@ -962,16 +963,16 @@ msgid "This build output is not fully allocated" msgstr "" #: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 -#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:730 -#: stock/serializers.py:971 stock/templates/stock/item_base.html:313 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:731 +#: stock/serializers.py:972 stock/templates/stock/item_base.html:313 #: templates/js/translated/barcode.js:384 #: templates/js/translated/barcode.js:557 templates/js/translated/build.js:480 #: templates/js/translated/build.js:1087 templates/js/translated/order.js:508 #: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 #: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 -#: templates/js/translated/part.js:179 templates/js/translated/stock.js:556 -#: templates/js/translated/stock.js:721 templates/js/translated/stock.js:928 -#: templates/js/translated/stock.js:1676 templates/js/translated/stock.js:2411 +#: templates/js/translated/part.js:179 templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:729 templates/js/translated/stock.js:936 +#: templates/js/translated/stock.js:1684 templates/js/translated/stock.js:2569 msgid "Location" msgstr "Locatie" @@ -980,12 +981,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:552 +#: build/templates/build/detail.html:63 order/models.py:557 #: order/serializers.py:247 stock/templates/stock/item_base.html:187 #: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1716 #: templates/js/translated/order.js:591 templates/js/translated/order.js:840 -#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1651 -#: templates/js/translated/stock.js:2488 templates/js/translated/stock.js:2637 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1659 +#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2795 msgid "Status" msgstr "Status" @@ -1021,8 +1022,8 @@ msgstr "" msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:313 build/serializers.py:362 part/models.py:2753 -#: part/models.py:2912 +#: build/serializers.py:313 build/serializers.py:362 part/models.py:2760 +#: part/models.py:2919 msgid "BOM Item" msgstr "" @@ -1038,16 +1039,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:394 stock/serializers.py:584 +#: build/serializers.py:394 stock/serializers.py:585 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:408 order/models.py:277 order/serializers.py:240 -#: stock/models.py:365 stock/models.py:1077 stock/serializers.py:305 +#: build/serializers.py:408 order/models.py:280 order/serializers.py:240 +#: stock/models.py:367 stock/models.py:1105 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:450 order/serializers.py:741 +#: build/serializers.py:450 order/serializers.py:747 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1060,7 +1061,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:491 order/serializers.py:984 +#: build/serializers.py:491 order/serializers.py:990 msgid "Allocation items must be provided" msgstr "" @@ -1164,13 +1165,13 @@ msgid "Completed" msgstr "Voltooid" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:927 -#: order/models.py:1023 order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:947 +#: order/models.py:1043 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:307 -#: templates/js/translated/order.js:1218 +#: templates/js/translated/order.js:1218 templates/js/translated/stock.js:2304 msgid "Sales Order" msgstr "Verkooporder" @@ -1224,7 +1225,7 @@ msgstr "Voorraadbron" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:878 stock/forms.py:136 +#: build/templates/build/detail.html:50 order/models.py:898 stock/forms.py:136 #: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "Bestemming" @@ -1239,7 +1240,7 @@ msgstr "Toegewezen onderdelen" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:331 -#: templates/js/translated/stock.js:1665 templates/js/translated/stock.js:2644 +#: templates/js/translated/stock.js:1673 templates/js/translated/stock.js:2802 #: templates/js/translated/table_filters.js:151 #: templates/js/translated/table_filters.js:238 msgid "Batch" @@ -1343,9 +1344,9 @@ msgstr "" #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 #: order/templates/order/sales_order_detail.html:107 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:196 -#: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 -#: stock/templates/stock/stock_sidebar.html:19 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:213 +#: part/templates/part/part_sidebar.html:52 stock/templates/stock/item.html:112 +#: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Bijlagen" @@ -1360,8 +1361,8 @@ msgstr "Bouw notities" #: order/templates/order/purchase_order_detail.html:108 #: order/templates/order/sales_order_detail.html:127 #: order/templates/order/sales_order_detail.html:186 -#: part/templates/part/detail.html:124 stock/templates/stock/item.html:115 -#: stock/templates/stock/item.html:205 +#: part/templates/part/detail.html:141 stock/templates/stock/item.html:132 +#: stock/templates/stock/item.html:235 msgid "Edit Notes" msgstr "Notities Bewerken" @@ -1373,7 +1374,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:303 +#: build/templates/build/index.html:18 part/templates/part/detail.html:320 msgid "New Build Order" msgstr "" @@ -1453,23 +1454,23 @@ msgstr "" msgid "Delete Build Order" msgstr "" -#: common/files.py:67 +#: common/files.py:65 msgid "Unsupported file format: {ext.upper()}" msgstr "" -#: common/files.py:69 +#: common/files.py:67 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:74 +#: common/files.py:72 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:76 +#: common/files.py:74 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:78 +#: common/files.py:76 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1490,740 +1491,828 @@ msgstr "" msgid "Select {name} file to upload" msgstr "Kies {name} bestand om te uploaden" -#: common/models.py:344 common/models.py:998 common/models.py:1206 -msgid "Settings key (must be unique - case insensitive" -msgstr "Instellingssleutel (moet uniek zijn - hoofdletter ongevoelig" +#: common/models.py:352 +msgid "Settings key (must be unique - case insensitive)" +msgstr "" -#: common/models.py:346 +#: common/models.py:354 msgid "Settings value" msgstr "Waarde van de instelling" -#: common/models.py:380 +#: common/models.py:388 msgid "Chosen value is not a valid option" msgstr "Gekozen waarde is geen geldige optie" -#: common/models.py:400 +#: common/models.py:408 msgid "Value must be a boolean value" msgstr "Waarde moet een booleaanse waarde zijn" -#: common/models.py:411 +#: common/models.py:419 msgid "Value must be an integer value" msgstr "Waarde moet een geheel getal zijn" -#: common/models.py:434 +#: common/models.py:442 msgid "Key string must be unique" msgstr "Sleutelreeks moet uniek zijn" -#: common/models.py:553 +#: common/models.py:561 msgid "No group" msgstr "" -#: common/models.py:595 +#: common/models.py:603 msgid "Restart required" msgstr "" -#: common/models.py:596 +#: common/models.py:604 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:603 +#: common/models.py:611 msgid "InvenTree Instance Name" msgstr "Inventree Instantie Naam" -#: common/models.py:605 +#: common/models.py:613 msgid "String descriptor for the server instance" msgstr "String-beschrijving voor de server instantie" -#: common/models.py:609 +#: common/models.py:617 msgid "Use instance name" msgstr "Gebruik de instantie naam" -#: common/models.py:610 +#: common/models.py:618 msgid "Use the instance name in the title-bar" msgstr "Gebruik de naam van de instantie in de titelbalk" -#: common/models.py:616 company/models.py:100 company/models.py:101 +#: common/models.py:624 company/models.py:100 company/models.py:101 msgid "Company name" msgstr "Bedrijfsnaam" -#: common/models.py:617 +#: common/models.py:625 msgid "Internal company name" msgstr "Interne bedrijfsnaam" -#: common/models.py:622 +#: common/models.py:630 msgid "Base URL" msgstr "Basis URL" -#: common/models.py:623 +#: common/models.py:631 msgid "Base URL for server instance" msgstr "Basis URL voor serverinstantie" -#: common/models.py:629 +#: common/models.py:637 msgid "Default Currency" msgstr "Standaard valuta" -#: common/models.py:630 +#: common/models.py:638 msgid "Default currency" msgstr "Standaard valuta" -#: common/models.py:636 +#: common/models.py:644 msgid "Download from URL" msgstr "Download van URL" -#: common/models.py:637 +#: common/models.py:645 msgid "Allow download of remote images and files from external URL" msgstr "Download van afbeeldingen en bestanden vanaf een externe URL toestaan" -#: common/models.py:643 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:651 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Barcode ondersteuning" -#: common/models.py:644 +#: common/models.py:652 msgid "Enable barcode scanner support" msgstr "Barcodescanner ondersteuning inschakelen" -#: common/models.py:650 +#: common/models.py:658 msgid "IPN Regex" msgstr "IPN Regex" -#: common/models.py:651 +#: common/models.py:659 msgid "Regular expression pattern for matching Part IPN" msgstr "Reguliere expressiepatroon voor het corresponderen van deel IPN" -#: common/models.py:655 +#: common/models.py:663 msgid "Allow Duplicate IPN" msgstr "Dubbele IPN toestaan" -#: common/models.py:656 +#: common/models.py:664 msgid "Allow multiple parts to share the same IPN" msgstr "Toestaan dat meerdere onderdelen dezelfde IPN gebruiken" -#: common/models.py:662 +#: common/models.py:670 msgid "Allow Editing IPN" msgstr "Bewerken IPN toestaan" -#: common/models.py:663 +#: common/models.py:671 msgid "Allow changing the IPN value while editing a part" msgstr "Sta het wijzigen van de IPN toe tijdens het bewerken van een onderdeel" -#: common/models.py:669 +#: common/models.py:677 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:670 +#: common/models.py:678 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:676 +#: common/models.py:684 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:677 +#: common/models.py:685 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:683 +#: common/models.py:691 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:684 +#: common/models.py:692 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:690 +#: common/models.py:698 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:691 +#: common/models.py:699 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:697 part/models.py:2482 report/models.py:187 +#: common/models.py:705 part/models.py:2489 report/models.py:187 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:422 msgid "Template" msgstr "" -#: common/models.py:698 +#: common/models.py:706 msgid "Parts are templates by default" msgstr "" -#: common/models.py:704 part/models.py:919 templates/js/translated/bom.js:1068 +#: common/models.py:712 part/models.py:921 templates/js/translated/bom.js:1082 #: templates/js/translated/table_filters.js:168 #: templates/js/translated/table_filters.js:434 msgid "Assembly" msgstr "Samenstelling" -#: common/models.py:705 +#: common/models.py:713 msgid "Parts can be assembled from other components by default" msgstr "Onderdelen kunnen standaard vanuit andere delen worden samengesteld" -#: common/models.py:711 part/models.py:925 +#: common/models.py:719 part/models.py:927 #: templates/js/translated/table_filters.js:438 msgid "Component" msgstr "" -#: common/models.py:712 +#: common/models.py:720 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:718 part/models.py:936 +#: common/models.py:726 part/models.py:938 msgid "Purchaseable" msgstr "" -#: common/models.py:719 +#: common/models.py:727 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:725 part/models.py:941 +#: common/models.py:733 part/models.py:943 #: templates/js/translated/table_filters.js:446 msgid "Salable" msgstr "" -#: common/models.py:726 +#: common/models.py:734 msgid "Parts are salable by default" msgstr "" -#: common/models.py:732 part/models.py:931 +#: common/models.py:740 part/models.py:933 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 #: templates/js/translated/table_filters.js:450 msgid "Trackable" msgstr "" -#: common/models.py:733 +#: common/models.py:741 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:739 part/models.py:951 +#: common/models.py:747 part/models.py:953 #: part/templates/part/part_base.html:147 #: templates/js/translated/table_filters.js:42 msgid "Virtual" msgstr "" -#: common/models.py:740 +#: common/models.py:748 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:746 +#: common/models.py:754 msgid "Show Import in Views" msgstr "" -#: common/models.py:747 +#: common/models.py:755 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:753 +#: common/models.py:761 msgid "Show Price in Forms" msgstr "" -#: common/models.py:754 +#: common/models.py:762 msgid "Display part price in some forms" msgstr "" -#: common/models.py:765 +#: common/models.py:773 msgid "Show Price in BOM" msgstr "" -#: common/models.py:766 +#: common/models.py:774 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:772 +#: common/models.py:780 msgid "Show related parts" msgstr "" -#: common/models.py:773 +#: common/models.py:781 msgid "Display related parts for a part" msgstr "" -#: common/models.py:779 +#: common/models.py:787 msgid "Create initial stock" msgstr "" -#: common/models.py:780 +#: common/models.py:788 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:786 +#: common/models.py:794 msgid "Internal Prices" msgstr "Interne prijzen" -#: common/models.py:787 +#: common/models.py:795 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:793 +#: common/models.py:801 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:794 +#: common/models.py:802 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:800 +#: common/models.py:808 msgid "Part Name Display Format" msgstr "" -#: common/models.py:801 +#: common/models.py:809 msgid "Format to display the part name" msgstr "" -#: common/models.py:808 +#: common/models.py:816 msgid "Enable Reports" msgstr "" -#: common/models.py:809 +#: common/models.py:817 msgid "Enable generation of reports" msgstr "" -#: common/models.py:815 templates/stats.html:25 +#: common/models.py:823 templates/stats.html:25 msgid "Debug Mode" msgstr "Foutopsporingsmodus" -#: common/models.py:816 +#: common/models.py:824 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:822 +#: common/models.py:830 msgid "Page Size" msgstr "Paginagrootte" -#: common/models.py:823 +#: common/models.py:831 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:833 +#: common/models.py:841 msgid "Test Reports" msgstr "Testrapport" -#: common/models.py:834 +#: common/models.py:842 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:840 +#: common/models.py:848 msgid "Stock Expiry" msgstr "Verlopen voorraad" -#: common/models.py:841 +#: common/models.py:849 msgid "Enable stock expiry functionality" msgstr "Verlopen voorraad functionaliteit inschakelen" -#: common/models.py:847 +#: common/models.py:855 msgid "Sell Expired Stock" msgstr "Verkoop verlopen voorraad" -#: common/models.py:848 +#: common/models.py:856 msgid "Allow sale of expired stock" msgstr "Verkoop verlopen voorraad toestaan" -#: common/models.py:854 +#: common/models.py:862 msgid "Stock Stale Time" msgstr "" -#: common/models.py:855 +#: common/models.py:863 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:857 +#: common/models.py:865 msgid "days" msgstr "dagen" -#: common/models.py:862 +#: common/models.py:870 msgid "Build Expired Stock" msgstr "" -#: common/models.py:863 +#: common/models.py:871 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:869 +#: common/models.py:877 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:870 +#: common/models.py:878 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:876 -msgid "Group by Part" -msgstr "" - -#: common/models.py:877 -msgid "Group stock items by part reference in table views" -msgstr "" - -#: common/models.py:883 +#: common/models.py:884 msgid "Build Order Reference Prefix" msgstr "" -#: common/models.py:884 +#: common/models.py:885 msgid "Prefix value for build order reference" msgstr "" -#: common/models.py:889 +#: common/models.py:890 msgid "Build Order Reference Regex" msgstr "" -#: common/models.py:890 +#: common/models.py:891 msgid "Regular expression pattern for matching build order reference" msgstr "" -#: common/models.py:894 +#: common/models.py:895 msgid "Sales Order Reference Prefix" msgstr "" -#: common/models.py:895 +#: common/models.py:896 msgid "Prefix value for sales order reference" msgstr "" -#: common/models.py:900 +#: common/models.py:901 msgid "Purchase Order Reference Prefix" msgstr "" -#: common/models.py:901 +#: common/models.py:902 msgid "Prefix value for purchase order reference" msgstr "" -#: common/models.py:907 +#: common/models.py:908 msgid "Enable password forgot" msgstr "" -#: common/models.py:908 +#: common/models.py:909 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:913 +#: common/models.py:914 msgid "Enable registration" msgstr "" -#: common/models.py:914 +#: common/models.py:915 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:919 +#: common/models.py:920 msgid "Enable SSO" msgstr "" -#: common/models.py:920 +#: common/models.py:921 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:925 +#: common/models.py:926 msgid "Email required" msgstr "" -#: common/models.py:926 +#: common/models.py:927 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:931 +#: common/models.py:932 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:932 +#: common/models.py:933 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:937 +#: common/models.py:938 msgid "Mail twice" msgstr "" -#: common/models.py:938 +#: common/models.py:939 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:943 +#: common/models.py:944 msgid "Password twice" msgstr "" -#: common/models.py:944 +#: common/models.py:945 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:949 +#: common/models.py:950 msgid "Group on signup" msgstr "" -#: common/models.py:950 +#: common/models.py:951 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:955 +#: common/models.py:956 msgid "Enforce MFA" msgstr "" -#: common/models.py:956 +#: common/models.py:957 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:961 +#: common/models.py:964 msgid "Enable URL integration" msgstr "" -#: common/models.py:962 +#: common/models.py:965 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:968 +#: common/models.py:971 msgid "Enable navigation integration" msgstr "" -#: common/models.py:969 +#: common/models.py:972 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:975 +#: common/models.py:978 msgid "Enable app integration" msgstr "" -#: common/models.py:976 +#: common/models.py:979 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:982 +#: common/models.py:985 msgid "Enable schedule integration" msgstr "" -#: common/models.py:983 +#: common/models.py:986 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1029 +#: common/models.py:992 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:993 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:1008 common/models.py:1216 +msgid "Settings key (must be unique - case insensitive" +msgstr "Instellingssleutel (moet uniek zijn - hoofdletter ongevoelig" + +#: common/models.py:1039 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1030 +#: common/models.py:1040 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1035 +#: common/models.py:1045 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1036 +#: common/models.py:1046 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1041 +#: common/models.py:1051 msgid "Show latest parts" msgstr "" -#: common/models.py:1042 +#: common/models.py:1052 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1047 +#: common/models.py:1057 msgid "Recent Part Count" msgstr "" -#: common/models.py:1048 +#: common/models.py:1058 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1054 +#: common/models.py:1064 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1055 +#: common/models.py:1065 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1060 +#: common/models.py:1070 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1061 +#: common/models.py:1071 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1066 +#: common/models.py:1076 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1067 +#: common/models.py:1077 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1072 +#: common/models.py:1082 msgid "Show low stock" msgstr "" -#: common/models.py:1073 +#: common/models.py:1083 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1078 +#: common/models.py:1088 msgid "Show depleted stock" msgstr "" -#: common/models.py:1079 +#: common/models.py:1089 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1084 +#: common/models.py:1094 msgid "Show needed stock" msgstr "" -#: common/models.py:1085 +#: common/models.py:1095 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1090 +#: common/models.py:1100 msgid "Show expired stock" msgstr "" -#: common/models.py:1091 +#: common/models.py:1101 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1096 +#: common/models.py:1106 msgid "Show stale stock" msgstr "" -#: common/models.py:1097 +#: common/models.py:1107 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1102 +#: common/models.py:1112 msgid "Show pending builds" msgstr "" -#: common/models.py:1103 +#: common/models.py:1113 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1108 +#: common/models.py:1118 msgid "Show overdue builds" msgstr "" -#: common/models.py:1109 +#: common/models.py:1119 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1114 +#: common/models.py:1124 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1115 +#: common/models.py:1125 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1120 +#: common/models.py:1130 msgid "Show overdue POs" msgstr "" -#: common/models.py:1121 +#: common/models.py:1131 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1126 +#: common/models.py:1136 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1127 +#: common/models.py:1137 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1132 +#: common/models.py:1142 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1133 +#: common/models.py:1143 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1139 +#: common/models.py:1149 msgid "Inline label display" msgstr "" -#: common/models.py:1140 +#: common/models.py:1150 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1146 +#: common/models.py:1156 msgid "Inline report display" msgstr "" -#: common/models.py:1147 +#: common/models.py:1157 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1153 +#: common/models.py:1163 msgid "Search Preview Results" msgstr "" -#: common/models.py:1154 +#: common/models.py:1164 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1160 +#: common/models.py:1170 msgid "Search Show Stock" msgstr "" -#: common/models.py:1161 +#: common/models.py:1171 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1167 +#: common/models.py:1177 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1168 +#: common/models.py:1178 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1174 +#: common/models.py:1184 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1175 +#: common/models.py:1185 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1181 +#: common/models.py:1191 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1182 +#: common/models.py:1192 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1188 +#: common/models.py:1198 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1189 +#: common/models.py:1199 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1254 company/forms.py:43 +#: common/models.py:1264 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1261 company/serializers.py:264 +#: common/models.py:1271 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 -#: templates/js/translated/part.js:909 templates/js/translated/part.js:1860 +#: templates/js/translated/part.js:915 templates/js/translated/part.js:1867 msgid "Price" msgstr "" -#: common/models.py:1262 +#: common/models.py:1272 msgid "Unit price at specified quantity" msgstr "" +#: common/models.py:1429 common/models.py:1568 +msgid "Endpoint" +msgstr "" + +#: common/models.py:1430 +msgid "Endpoint at which this webhook is received" +msgstr "" + +#: common/models.py:1439 +msgid "Name for this webhook" +msgstr "" + +#: common/models.py:1444 part/models.py:948 plugin/models.py:46 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:96 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:417 +msgid "Active" +msgstr "" + +#: common/models.py:1445 +msgid "Is this webhook active" +msgstr "" + +#: common/models.py:1459 +msgid "Token" +msgstr "" + +#: common/models.py:1460 +msgid "Token for access" +msgstr "" + +#: common/models.py:1467 +msgid "Secret" +msgstr "" + +#: common/models.py:1468 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:1535 +msgid "Message ID" +msgstr "" + +#: common/models.py:1536 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:1544 +msgid "Host" +msgstr "" + +#: common/models.py:1545 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:1552 +msgid "Header" +msgstr "" + +#: common/models.py:1553 +msgid "Header of this message" +msgstr "" + +#: common/models.py:1559 +msgid "Body" +msgstr "" + +#: common/models.py:1560 +msgid "Body of this message" +msgstr "" + +#: common/models.py:1569 +msgid "Endpoint on which this message was received" +msgstr "" + +#: common/models.py:1574 +msgid "Worked on" +msgstr "" + +#: common/models.py:1575 +msgid "Was the work on this message finished?" +msgstr "" + #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 #: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 -#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 -#: part/views.py:764 +#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:213 +#: part/views.py:773 msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 #: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 -#: part/views.py:765 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:214 +#: part/views.py:774 msgid "Match Fields" msgstr "" @@ -2315,7 +2404,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:139 part/models.py:838 +#: company/models.py:139 part/models.py:840 msgid "Image" msgstr "" @@ -2352,8 +2441,8 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:469 -#: stock/templates/stock/item_base.html:142 +#: company/models.py:320 company/models.py:535 stock/models.py:471 +#: stock/templates/stock/item_base.html:142 templates/js/translated/bom.js:328 msgid "Base Part" msgstr "" @@ -2380,7 +2469,7 @@ msgstr "Fabrikant selecteren" #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:533 #: templates/js/translated/company.js:818 templates/js/translated/order.js:1038 -#: templates/js/translated/part.js:245 templates/js/translated/part.js:889 +#: templates/js/translated/part.js:245 templates/js/translated/part.js:895 msgid "MPN" msgstr "MPN" @@ -2409,8 +2498,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1960 templates/js/translated/company.js:647 -#: templates/js/translated/part.js:709 templates/js/translated/stock.js:1296 +#: stock/models.py:1988 templates/js/translated/company.js:647 +#: templates/js/translated/part.js:715 templates/js/translated/stock.js:1304 msgid "Value" msgstr "" @@ -2418,10 +2507,10 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:429 part/models.py:913 part/models.py:2450 +#: company/models.py:429 part/models.py:915 part/models.py:2457 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:284 -#: templates/js/translated/company.js:653 templates/js/translated/part.js:715 +#: templates/InvenTree/settings/settings.html:287 +#: templates/js/translated/company.js:653 templates/js/translated/part.js:721 msgid "Units" msgstr "" @@ -2434,13 +2523,13 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "Gekoppeld fabrikant onderdeel moet verwijzen naar hetzelfde basis onderdeel" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:224 +#: company/templates/company/supplier_part.html:87 order/models.py:227 #: order/templates/order/order_base.html:112 -#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 -#: part/bom.py:247 stock/templates/stock/item_base.html:397 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:237 +#: part/bom.py:265 stock/templates/stock/item_base.html:397 #: templates/js/translated/company.js:337 #: templates/js/translated/company.js:774 templates/js/translated/order.js:823 -#: templates/js/translated/part.js:215 templates/js/translated/part.js:857 +#: templates/js/translated/part.js:215 templates/js/translated/part.js:863 #: templates/js/translated/table_filters.js:393 msgid "Supplier" msgstr "" @@ -2450,8 +2539,8 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 -#: templates/js/translated/part.js:226 templates/js/translated/part.js:875 +#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1025 +#: templates/js/translated/part.js:226 templates/js/translated/part.js:881 msgid "SKU" msgstr "" @@ -2472,22 +2561,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:576 company/templates/company/supplier_part.html:119 -#: part/models.py:2641 report/templates/report/inventree_po_report.html:93 +#: part/models.py:2648 report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "base cost" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:493 stock/templates/stock/item_base.html:338 -#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1791 +#: stock/models.py:495 stock/templates/stock/item_base.html:338 +#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1799 msgid "Packaging" msgstr "" @@ -2495,7 +2584,7 @@ msgstr "" msgid "Part packaging" msgstr "" -#: company/models.py:584 part/models.py:1781 +#: company/models.py:584 part/models.py:1783 msgid "multiple" msgstr "" @@ -2554,12 +2643,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:547 -#: order/templates/order/sales_order_base.html:115 stock/models.py:512 -#: stock/models.py:513 stock/serializers.py:625 +#: company/templates/company/company_base.html:83 order/models.py:552 +#: order/templates/order/sales_order_base.html:115 stock/models.py:514 +#: stock/models.py:515 stock/serializers.py:626 #: stock/templates/stock/item_base.html:290 #: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 -#: templates/js/translated/stock.js:2452 +#: templates/js/translated/stock.js:2610 #: templates/js/translated/table_filters.js:397 msgid "Customer" msgstr "" @@ -2590,7 +2679,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:118 -#: part/templates/part/detail.html:336 +#: part/templates/part/detail.html:353 msgid "New Supplier Part" msgstr "" @@ -2598,8 +2687,8 @@ msgstr "" #: company/templates/company/detail.html:79 #: company/templates/company/manufacturer_part.html:127 #: company/templates/company/manufacturer_part.html:156 -#: part/templates/part/category.html:171 part/templates/part/detail.html:345 -#: part/templates/part/detail.html:374 +#: part/templates/part/category.html:171 part/templates/part/detail.html:362 +#: part/templates/part/detail.html:391 msgid "Options" msgstr "" @@ -2627,7 +2716,7 @@ msgstr "Fabrikant onderdelen" msgid "Create new manufacturer part" msgstr "Maak nieuw fabrikant onderdeel" -#: company/templates/company/detail.html:67 part/templates/part/detail.html:364 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:381 msgid "New Manufacturer Part" msgstr "Nieuw fabrikant onderdeel" @@ -2641,7 +2730,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:68 part/templates/part/part_sidebar.html:33 +#: part/templates/part/detail.html:85 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197 #: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 @@ -2663,7 +2752,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:91 part/templates/part/part_sidebar.html:37 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:41 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217 #: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 @@ -2691,13 +2780,13 @@ msgstr "" #: company/templates/company/detail.html:384 #: company/templates/company/manufacturer_part.html:215 -#: part/templates/part/detail.html:418 +#: part/templates/part/detail.html:435 msgid "Delete Supplier Parts?" msgstr "" #: company/templates/company/detail.html:385 #: company/templates/company/manufacturer_part.html:216 -#: part/templates/part/detail.html:419 +#: part/templates/part/detail.html:436 msgid "All selected supplier parts will be deleted" msgstr "" @@ -2714,7 +2803,7 @@ msgstr "Fabrikanten" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:34 #: company/templates/company/supplier_part.html:159 -#: part/templates/part/detail.html:71 part/templates/part/part_base.html:76 +#: part/templates/part/detail.html:88 part/templates/part/part_base.html:76 msgid "Order part" msgstr "" @@ -2735,34 +2824,34 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 -#: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 +#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:163 #: templates/InvenTree/search.html:188 templates/navbar.html:45 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:129 -#: part/templates/part/detail.html:347 +#: part/templates/part/detail.html:364 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:129 #: company/templates/company/manufacturer_part.html:158 #: company/templates/company/manufacturer_part.html:254 -#: part/templates/part/detail.html:347 part/templates/part/detail.html:376 +#: part/templates/part/detail.html:364 part/templates/part/detail.html:393 #: templates/js/translated/company.js:426 templates/js/translated/helpers.js:31 -#: users/models.py:210 +#: users/models.py:212 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:143 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:17 -#: part/templates/part/detail.html:170 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:187 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:147 -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:192 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part.html:65 msgid "New Parameter" @@ -2773,7 +2862,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:191 -#: part/templates/part/detail.html:862 +#: part/templates/part/detail.html:892 msgid "Add Parameter" msgstr "" @@ -2802,9 +2891,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:477 +#: company/templates/company/supplier_part.html:24 stock/models.py:479 #: stock/templates/stock/item_base.html:402 -#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1748 +#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1756 msgid "Supplier Part" msgstr "" @@ -2830,7 +2919,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:167 -#: templates/js/translated/stock.js:360 +#: templates/js/translated/stock.js:368 msgid "New Stock Item" msgstr "" @@ -2840,7 +2929,7 @@ msgid "Supplier Part Orders" msgstr "" #: company/templates/company/supplier_part.html:160 -#: part/templates/part/detail.html:72 +#: part/templates/part/detail.html:89 msgid "Order Part" msgstr "" @@ -2851,7 +2940,7 @@ msgstr "" #: company/templates/company/supplier_part.html:184 #: company/templates/company/supplier_part.html:290 -#: part/templates/part/prices.html:271 part/views.py:1619 +#: part/templates/part/prices.html:271 part/views.py:1628 msgid "Add Price Break" msgstr "" @@ -2859,11 +2948,11 @@ msgstr "" msgid "No price break information found" msgstr "" -#: company/templates/company/supplier_part.html:224 part/views.py:1681 +#: company/templates/company/supplier_part.html:224 part/views.py:1690 msgid "Delete Price Break" msgstr "" -#: company/templates/company/supplier_part.html:238 part/views.py:1667 +#: company/templates/company/supplier_part.html:238 part/views.py:1676 msgid "Edit Price Break" msgstr "" @@ -2881,10 +2970,10 @@ msgstr "" #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:150 #: templates/InvenTree/settings/sidebar.html:41 -#: templates/js/translated/bom.js:328 templates/js/translated/part.js:489 -#: templates/js/translated/part.js:624 templates/js/translated/part.js:1118 -#: templates/js/translated/part.js:1279 templates/js/translated/stock.js:927 -#: templates/js/translated/stock.js:1580 templates/navbar.html:28 +#: templates/js/translated/bom.js:340 templates/js/translated/part.js:495 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1125 +#: templates/js/translated/part.js:1286 templates/js/translated/stock.js:935 +#: templates/js/translated/stock.js:1588 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2907,8 +2996,8 @@ msgstr "" #: stock/templates/stock/location.html:151 #: stock/templates/stock/location.html:163 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2351 -#: templates/stats.html:93 templates/stats.html:102 users/models.py:43 +#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2509 +#: templates/stats.html:105 templates/stats.html:114 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2937,20 +3026,20 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:129 part/views.py:584 +#: company/views.py:129 part/views.py:593 msgid "Download Image" msgstr "" -#: company/views.py:158 part/views.py:616 +#: company/views.py:158 part/views.py:625 msgid "Image size exceeds maximum allowable size for download" msgstr "" -#: company/views.py:165 part/views.py:623 +#: company/views.py:165 part/views.py:632 #, python-brace-format msgid "Invalid response: {code}" msgstr "" -#: company/views.py:174 part/views.py:632 +#: company/views.py:174 part/views.py:641 msgid "Supplied URL is not a valid image file" msgstr "" @@ -3036,282 +3125,282 @@ msgstr "" msgid "Cancel order" msgstr "" -#: order/models.py:122 +#: order/models.py:125 msgid "Order description" msgstr "" -#: order/models.py:124 +#: order/models.py:127 msgid "Link to external page" msgstr "" -#: order/models.py:132 +#: order/models.py:135 msgid "Created By" msgstr "" -#: order/models.py:139 +#: order/models.py:142 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:144 +#: order/models.py:147 msgid "Order notes" msgstr "" -#: order/models.py:211 order/models.py:537 +#: order/models.py:214 order/models.py:542 msgid "Order reference" msgstr "" -#: order/models.py:216 order/models.py:552 +#: order/models.py:219 order/models.py:557 msgid "Purchase order status" msgstr "" -#: order/models.py:225 +#: order/models.py:228 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:228 order/templates/order/order_base.html:118 +#: order/models.py:231 order/templates/order/order_base.html:118 #: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:228 +#: order/models.py:231 msgid "Supplier order reference code" msgstr "" -#: order/models.py:235 +#: order/models.py:238 msgid "received by" msgstr "" -#: order/models.py:240 +#: order/models.py:243 msgid "Issue Date" msgstr "" -#: order/models.py:241 +#: order/models.py:244 msgid "Date order was issued" msgstr "" -#: order/models.py:246 +#: order/models.py:249 msgid "Target Delivery Date" msgstr "" -#: order/models.py:247 +#: order/models.py:250 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:253 +#: order/models.py:256 msgid "Date order was completed" msgstr "" -#: order/models.py:282 +#: order/models.py:285 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:411 -msgid "Quantity must be an integer" -msgstr "" - -#: order/models.py:415 +#: order/models.py:420 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:548 +#: order/models.py:553 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer Reference " msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer order reference code" msgstr "" -#: order/models.py:559 +#: order/models.py:564 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:562 order/models.py:1028 +#: order/models.py:567 order/models.py:1048 #: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:569 +#: order/models.py:574 msgid "shipped by" msgstr "" -#: order/models.py:635 +#: order/models.py:640 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:639 +#: order/models.py:644 msgid "Only a pending order can be marked as complete" msgstr "" -#: order/models.py:642 +#: order/models.py:647 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:645 +#: order/models.py:650 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:797 +#: order/models.py:806 msgid "Item quantity" msgstr "" -#: order/models.py:803 +#: order/models.py:812 msgid "Line item reference" msgstr "" -#: order/models.py:805 +#: order/models.py:814 msgid "Line item notes" msgstr "" -#: order/models.py:835 order/models.py:926 order/models.py:1022 -#: templates/js/translated/order.js:1820 +#: order/models.py:842 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:855 order/models.py:946 order/models.py:1042 +#: templates/js/translated/order.js:1820 templates/js/translated/stock.js:2271 msgid "Order" msgstr "" -#: order/models.py:836 order/templates/order/order_base.html:9 +#: order/models.py:856 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:352 -#: templates/js/translated/order.js:801 templates/js/translated/part.js:832 -#: templates/js/translated/stock.js:1725 templates/js/translated/stock.js:2433 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:838 +#: templates/js/translated/stock.js:1733 templates/js/translated/stock.js:2591 msgid "Purchase Order" msgstr "" -#: order/models.py:857 +#: order/models.py:877 msgid "Supplier part" msgstr "" -#: order/models.py:864 order/templates/order/order_base.html:163 +#: order/models.py:884 order/templates/order/order_base.html:163 #: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 -#: templates/js/translated/part.js:904 templates/js/translated/part.js:930 +#: templates/js/translated/part.js:910 templates/js/translated/part.js:937 #: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:865 +#: order/models.py:885 msgid "Number of items received" msgstr "" -#: order/models.py:872 part/templates/part/prices.html:176 stock/models.py:606 +#: order/models.py:892 part/templates/part/prices.html:176 stock/models.py:608 #: stock/serializers.py:170 stock/templates/stock/item_base.html:359 -#: templates/js/translated/stock.js:1779 +#: templates/js/translated/stock.js:1787 msgid "Purchase Price" msgstr "" -#: order/models.py:873 +#: order/models.py:893 msgid "Unit purchase price" msgstr "" -#: order/models.py:881 +#: order/models.py:901 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:936 part/templates/part/part_pricing.html:112 +#: order/models.py:956 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:937 +#: order/models.py:957 msgid "Unit sale price" msgstr "" -#: order/models.py:942 +#: order/models.py:962 msgid "Shipped quantity" msgstr "" -#: order/models.py:1029 +#: order/models.py:1049 msgid "Date of shipment" msgstr "" -#: order/models.py:1036 +#: order/models.py:1056 msgid "Checked By" msgstr "" -#: order/models.py:1037 +#: order/models.py:1057 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1045 +#: order/models.py:1065 msgid "Shipment number" msgstr "" -#: order/models.py:1052 +#: order/models.py:1072 msgid "Shipment notes" msgstr "" -#: order/models.py:1059 +#: order/models.py:1079 msgid "Tracking Number" msgstr "" -#: order/models.py:1060 +#: order/models.py:1080 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1070 +#: order/models.py:1090 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1073 +#: order/models.py:1093 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1149 order/models.py:1151 +#: order/models.py:1171 order/models.py:1173 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1155 +#: order/models.py:1177 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1157 +#: order/models.py:1179 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1160 +#: order/models.py:1182 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1164 +#: order/models.py:1186 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:1170 order/serializers.py:734 +#: order/models.py:1192 order/serializers.py:740 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1173 +#: order/models.py:1195 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1174 +#: order/models.py:1196 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1182 +#: order/models.py:1204 msgid "Line" msgstr "" -#: order/models.py:1190 order/serializers.py:825 order/serializers.py:953 -#: templates/js/translated/model_renderers.js:251 +#: order/models.py:1212 order/serializers.py:831 order/serializers.py:959 +#: templates/js/translated/model_renderers.js:285 msgid "Shipment" msgstr "" -#: order/models.py:1191 +#: order/models.py:1213 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1203 +#: order/models.py:1225 msgid "Item" msgstr "" -#: order/models.py:1204 +#: order/models.py:1226 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1207 +#: order/models.py:1229 msgid "Enter stock allocation quantity" msgstr "" @@ -3319,7 +3408,7 @@ msgstr "" msgid "Purchase price currency" msgstr "" -#: order/serializers.py:211 order/serializers.py:790 +#: order/serializers.py:211 order/serializers.py:796 msgid "Line Item" msgstr "" @@ -3355,39 +3444,39 @@ msgstr "" msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:587 msgid "Sale price currency" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:655 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:699 order/serializers.py:802 +#: order/serializers.py:705 order/serializers.py:808 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:721 +#: order/serializers.py:727 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:815 +#: order/serializers.py:821 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:839 order/serializers.py:964 +#: order/serializers.py:845 order/serializers.py:970 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:842 order/serializers.py:967 +#: order/serializers.py:848 order/serializers.py:973 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:894 +#: order/serializers.py:900 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:910 msgid "The following serial numbers are already allocated" msgstr "" @@ -3441,6 +3530,7 @@ msgstr "" #: order/templates/order/order_base.html:94 #: order/templates/order/sales_order_base.html:89 +#: templates/js/translated/stock.js:2327 msgid "Order Status" msgstr "" @@ -3538,7 +3628,7 @@ msgstr "" #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/build.js:300 templates/js/translated/build.js:1311 #: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 -#: templates/js/translated/stock.js:593 templates/js/translated/stock.js:761 +#: templates/js/translated/stock.js:601 templates/js/translated/stock.js:769 msgid "Remove row" msgstr "" @@ -3729,7 +3819,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:48 -#: templates/js/translated/bom.js:720 templates/js/translated/build.js:1243 +#: templates/js/translated/bom.js:732 templates/js/translated/build.js:1243 msgid "Actions" msgstr "" @@ -3832,447 +3922,448 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:125 part/models.py:81 part/models.py:847 +#: part/bom.py:125 part/models.py:83 part/models.py:849 #: part/templates/part/category.html:108 part/templates/part/part_base.html:338 msgid "Default Location" msgstr "Standaard locatie" -#: part/bom.py:126 part/templates/part/part_base.html:185 +#: part/bom.py:126 templates/email/low_stock_notification.html:17 +msgid "Total Stock" +msgstr "" + +#: part/bom.py:127 part/templates/part/part_base.html:185 msgid "Available Stock" msgstr "" -#: part/forms.py:85 +#: part/bom.py:128 part/templates/part/part_base.html:203 +#: templates/js/translated/part.js:1301 +msgid "On Order" +msgstr "" + +#: part/forms.py:84 msgid "Select part category" msgstr "" -#: part/forms.py:122 +#: part/forms.py:121 msgid "Add parameter template to same level categories" msgstr "" -#: part/forms.py:126 +#: part/forms.py:125 msgid "Add parameter template to all categories" msgstr "" -#: part/forms.py:146 +#: part/forms.py:145 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 +#: part/models.py:84 msgid "Default location for parts in this category" msgstr "Standaard locatie voor onderdelen in deze categorie" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:95 part/models.py:2526 part/templates/part/category.html:15 +#: part/models.py:97 part/models.py:2533 part/templates/part/category.html:15 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:96 part/templates/part/category.html:128 -#: templates/InvenTree/search.html:95 templates/stats.html:84 +#: part/models.py:98 part/templates/part/category.html:128 +#: templates/InvenTree/search.html:95 templates/stats.html:96 #: users/models.py:40 msgid "Part Categories" msgstr "" -#: part/models.py:358 part/templates/part/cat_link.html:3 +#: part/models.py:360 part/templates/part/cat_link.html:3 #: part/templates/part/category.html:17 part/templates/part/category.html:133 #: part/templates/part/category.html:153 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82 #: templates/InvenTree/settings/sidebar.html:37 -#: templates/js/translated/part.js:1656 templates/navbar.html:21 -#: templates/stats.html:80 templates/stats.html:89 users/models.py:41 +#: templates/js/translated/part.js:1663 templates/navbar.html:21 +#: templates/stats.html:92 templates/stats.html:101 users/models.py:41 msgid "Parts" msgstr "" -#: part/models.py:450 +#: part/models.py:452 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:500 part/models.py:512 +#: part/models.py:502 part/models.py:514 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:642 +#: part/models.py:644 msgid "Next available serial numbers are" msgstr "" -#: part/models.py:646 +#: part/models.py:648 msgid "Next available serial number is" msgstr "" -#: part/models.py:651 +#: part/models.py:653 msgid "Most recent serial number is" msgstr "" -#: part/models.py:746 +#: part/models.py:748 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:771 +#: part/models.py:773 msgid "Part name" msgstr "" -#: part/models.py:778 +#: part/models.py:780 msgid "Is Template" msgstr "" -#: part/models.py:779 +#: part/models.py:781 msgid "Is this part a template part?" msgstr "" -#: part/models.py:789 +#: part/models.py:791 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:790 +#: part/models.py:792 msgid "Variant Of" msgstr "" -#: part/models.py:796 +#: part/models.py:798 msgid "Part description" msgstr "" -#: part/models.py:801 part/templates/part/category.html:86 +#: part/models.py:803 part/templates/part/category.html:86 #: part/templates/part/part_base.html:302 msgid "Keywords" msgstr "" -#: part/models.py:802 +#: part/models.py:804 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:809 part/models.py:2276 part/models.py:2525 +#: part/models.py:811 part/models.py:2283 part/models.py:2532 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:183 -#: templates/js/translated/part.js:1261 +#: templates/InvenTree/settings/settings.html:186 +#: templates/js/translated/part.js:1268 msgid "Category" msgstr "" -#: part/models.py:810 +#: part/models.py:812 msgid "Part category" msgstr "" -#: part/models.py:815 part/templates/part/part_base.html:274 -#: templates/js/translated/part.js:612 templates/js/translated/part.js:1214 -#: templates/js/translated/stock.js:1552 +#: part/models.py:817 part/templates/part/part_base.html:274 +#: templates/js/translated/part.js:618 templates/js/translated/part.js:1221 +#: templates/js/translated/stock.js:1560 msgid "IPN" msgstr "" -#: part/models.py:816 +#: part/models.py:818 msgid "Internal Part Number" msgstr "" -#: part/models.py:822 +#: part/models.py:824 msgid "Part revision or version number" msgstr "" -#: part/models.py:823 part/templates/part/part_base.html:281 -#: report/models.py:200 templates/js/translated/part.js:616 +#: part/models.py:825 part/templates/part/part_base.html:281 +#: report/models.py:200 templates/js/translated/part.js:622 msgid "Revision" msgstr "" -#: part/models.py:845 +#: part/models.py:847 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:892 part/templates/part/part_base.html:347 +#: part/models.py:894 part/templates/part/part_base.html:347 msgid "Default Supplier" msgstr "" -#: part/models.py:893 +#: part/models.py:895 msgid "Default supplier part" msgstr "" -#: part/models.py:900 +#: part/models.py:902 msgid "Default Expiry" msgstr "" -#: part/models.py:901 +#: part/models.py:903 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:906 part/templates/part/part_base.html:196 +#: part/models.py:908 part/templates/part/part_base.html:196 msgid "Minimum Stock" msgstr "" -#: part/models.py:907 +#: part/models.py:909 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:914 +#: part/models.py:916 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:920 +#: part/models.py:922 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:926 +#: part/models.py:928 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:932 +#: part/models.py:934 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:937 +#: part/models.py:939 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:942 +#: part/models.py:944 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:946 plugin/models.py:46 -#: templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:295 -#: templates/js/translated/table_filters.js:417 -msgid "Active" -msgstr "" - -#: part/models.py:947 +#: part/models.py:949 msgid "Is this part active?" msgstr "" -#: part/models.py:952 +#: part/models.py:954 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:957 +#: part/models.py:959 msgid "Part notes - supports Markdown formatting" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "BOM checksum" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:963 +#: part/models.py:965 msgid "BOM checked by" msgstr "" -#: part/models.py:965 +#: part/models.py:967 msgid "BOM checked date" msgstr "" -#: part/models.py:969 +#: part/models.py:971 msgid "Creation User" msgstr "" -#: part/models.py:1781 +#: part/models.py:1783 msgid "Sell multiple" msgstr "" -#: part/models.py:2326 +#: part/models.py:2333 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2343 +#: part/models.py:2350 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2363 templates/js/translated/part.js:1707 -#: templates/js/translated/stock.js:1276 +#: part/models.py:2370 templates/js/translated/part.js:1714 +#: templates/js/translated/stock.js:1284 msgid "Test Name" msgstr "" -#: part/models.py:2364 +#: part/models.py:2371 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2369 +#: part/models.py:2376 msgid "Test Description" msgstr "" -#: part/models.py:2370 +#: part/models.py:2377 msgid "Enter description for this test" msgstr "" -#: part/models.py:2375 templates/js/translated/part.js:1716 +#: part/models.py:2382 templates/js/translated/part.js:1723 #: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" -#: part/models.py:2376 +#: part/models.py:2383 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2381 templates/js/translated/part.js:1724 +#: part/models.py:2388 templates/js/translated/part.js:1731 msgid "Requires Value" msgstr "" -#: part/models.py:2382 +#: part/models.py:2389 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2387 templates/js/translated/part.js:1731 +#: part/models.py:2394 templates/js/translated/part.js:1738 msgid "Requires Attachment" msgstr "" -#: part/models.py:2388 +#: part/models.py:2395 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2399 +#: part/models.py:2406 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2435 +#: part/models.py:2442 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2443 +#: part/models.py:2450 msgid "Parameter Name" msgstr "" -#: part/models.py:2450 +#: part/models.py:2457 msgid "Parameter Units" msgstr "" -#: part/models.py:2480 +#: part/models.py:2487 msgid "Parent Part" msgstr "" -#: part/models.py:2482 part/models.py:2531 part/models.py:2532 -#: templates/InvenTree/settings/settings.html:178 +#: part/models.py:2489 part/models.py:2538 part/models.py:2539 +#: templates/InvenTree/settings/settings.html:181 msgid "Parameter Template" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Data" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Parameter Value" msgstr "" -#: part/models.py:2536 templates/InvenTree/settings/settings.html:187 +#: part/models.py:2543 templates/InvenTree/settings/settings.html:190 msgid "Default Value" msgstr "" -#: part/models.py:2537 +#: part/models.py:2544 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2614 +#: part/models.py:2621 msgid "Select parent part" msgstr "" -#: part/models.py:2622 +#: part/models.py:2629 msgid "Sub part" msgstr "" -#: part/models.py:2623 +#: part/models.py:2630 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2629 +#: part/models.py:2636 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2631 templates/js/translated/bom.js:566 -#: templates/js/translated/bom.js:640 +#: part/models.py:2638 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:652 #: templates/js/translated/table_filters.js:92 msgid "Optional" msgstr "" -#: part/models.py:2631 +#: part/models.py:2638 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2634 +#: part/models.py:2641 msgid "Overage" msgstr "" -#: part/models.py:2635 +#: part/models.py:2642 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2638 +#: part/models.py:2645 msgid "BOM item reference" msgstr "" -#: part/models.py:2641 +#: part/models.py:2648 msgid "BOM item notes" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "Checksum" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "BOM line checksum" msgstr "" -#: part/models.py:2647 templates/js/translated/bom.js:657 +#: part/models.py:2654 templates/js/translated/bom.js:669 #: templates/js/translated/table_filters.js:68 #: templates/js/translated/table_filters.js:88 msgid "Inherited" msgstr "" -#: part/models.py:2648 +#: part/models.py:2655 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2653 templates/js/translated/bom.js:649 +#: part/models.py:2660 templates/js/translated/bom.js:661 msgid "Allow Variants" msgstr "" -#: part/models.py:2654 +#: part/models.py:2661 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2739 stock/models.py:355 +#: part/models.py:2746 stock/models.py:357 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2748 part/models.py:2750 +#: part/models.py:2755 part/models.py:2757 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2879 +#: part/models.py:2886 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2901 +#: part/models.py:2908 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2913 +#: part/models.py:2920 msgid "Parent BOM item" msgstr "" -#: part/models.py:2921 +#: part/models.py:2928 msgid "Substitute part" msgstr "" -#: part/models.py:2932 +#: part/models.py:2939 msgid "Part 1" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Part 2" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Select Related Part" msgstr "" -#: part/models.py:2968 +#: part/models.py:2975 msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique" msgstr "" @@ -4327,7 +4418,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:253 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:270 msgid "BOM actions" msgstr "" @@ -4499,7 +4590,7 @@ msgstr "" msgid "Import Parts" msgstr "" -#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:375 +#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:348 msgid "Duplicate Part" msgstr "" @@ -4533,145 +4624,149 @@ msgid "Showing stock for all variants of %(full_name)s" msgstr "" #: part/templates/part/detail.html:43 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/detail.html:60 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:48 +#: part/templates/part/detail.html:65 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:105 +#: part/templates/part/detail.html:122 msgid "Sales Order Allocations" msgstr "Toewijzingen verkoopopdracht" -#: part/templates/part/detail.html:142 +#: part/templates/part/detail.html:159 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:146 +#: part/templates/part/detail.html:163 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:147 +#: part/templates/part/detail.html:164 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:174 +#: part/templates/part/detail.html:191 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:45 +#: part/templates/part/detail.html:228 part/templates/part/part_sidebar.html:49 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:215 part/templates/part/detail.html:216 +#: part/templates/part/detail.html:232 part/templates/part/detail.html:233 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:253 part/templates/part/part_sidebar.html:17 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:241 +#: part/templates/part/detail.html:258 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:245 templates/js/translated/bom.js:70 +#: part/templates/part/detail.html:262 templates/js/translated/bom.js:70 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:247 +#: part/templates/part/detail.html:264 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:257 +#: part/templates/part/detail.html:274 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:259 templates/js/translated/part.js:272 +#: part/templates/part/detail.html:276 templates/js/translated/part.js:272 msgid "Copy BOM" msgstr "" -#: part/templates/part/detail.html:261 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:283 msgid "New BOM Item" msgstr "Nieuw stuklijstitem" -#: part/templates/part/detail.html:267 +#: part/templates/part/detail.html:284 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:280 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "Samenstellingen" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:314 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:322 +#: part/templates/part/detail.html:339 msgid "Build Order Allocations" msgstr "Productie-opdracht toewijzingen" -#: part/templates/part/detail.html:332 +#: part/templates/part/detail.html:349 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:360 +#: part/templates/part/detail.html:377 msgid "Part Manufacturers" msgstr "Fabrikanten" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:393 msgid "Delete manufacturer parts" msgstr "Fabrikant onderdeel verwijderen" -#: part/templates/part/detail.html:558 +#: part/templates/part/detail.html:575 msgid "Delete selected BOM items?" msgstr "" -#: part/templates/part/detail.html:559 +#: part/templates/part/detail.html:576 msgid "All selected BOM items will be deleted" msgstr "" -#: part/templates/part/detail.html:608 +#: part/templates/part/detail.html:625 msgid "Create BOM Item" msgstr "" -#: part/templates/part/detail.html:652 +#: part/templates/part/detail.html:682 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:660 +#: part/templates/part/detail.html:690 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:755 +#: part/templates/part/detail.html:785 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:812 +#: part/templates/part/detail.html:842 msgid "Edit Part Notes" msgstr "" -#: part/templates/part/detail.html:925 +#: part/templates/part/detail.html:955 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:937 +#: part/templates/part/detail.html:967 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:949 +#: part/templates/part/detail.html:979 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1038 +#: part/templates/part/detail.html:1068 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -4786,7 +4881,7 @@ msgstr "" #: templates/js/translated/company.js:508 #: templates/js/translated/company.js:765 #: templates/js/translated/model_renderers.js:175 -#: templates/js/translated/part.js:527 templates/js/translated/part.js:604 +#: templates/js/translated/part.js:533 templates/js/translated/part.js:610 msgid "Inactive" msgstr "" @@ -4805,10 +4900,6 @@ msgstr "" msgid "In Stock" msgstr "" -#: part/templates/part/part_base.html:203 templates/js/translated/part.js:1294 -msgid "On Order" -msgstr "" - #: part/templates/part/part_base.html:210 templates/InvenTree/index.html:178 msgid "Required for Build Orders" msgstr "" @@ -4821,12 +4912,12 @@ msgstr "" msgid "Allocated to Orders" msgstr "" -#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:678 +#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:690 msgid "Can Build" msgstr "" -#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1125 -#: templates/js/translated/part.js:1298 +#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1132 +#: templates/js/translated/part.js:1305 msgid "Building" msgstr "" @@ -4878,7 +4969,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:40 -#: templates/js/translated/bom.js:632 +#: templates/js/translated/bom.js:644 msgid "No supplier pricing available" msgstr "" @@ -4920,7 +5011,12 @@ msgstr "" msgid "Used In" msgstr "" -#: part/templates/part/part_sidebar.html:41 +#: part/templates/part/part_sidebar.html:31 +#: stock/templates/stock/stock_sidebar.html:8 +msgid "Allocations" +msgstr "" + +#: part/templates/part/part_sidebar.html:45 msgid "Test Templates" msgstr "" @@ -4993,7 +5089,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:155 templates/js/translated/bom.js:626 +#: part/templates/part/prices.html:155 templates/js/translated/bom.js:638 msgid "Supplier Cost" msgstr "" @@ -5015,7 +5111,7 @@ msgstr "" msgid "Internal Cost" msgstr "" -#: part/templates/part/prices.html:215 part/views.py:1690 +#: part/templates/part/prices.html:215 part/views.py:1699 msgid "Add Internal Price Break" msgstr "" @@ -5035,9 +5131,9 @@ msgstr "" msgid "Set category for the following parts" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:588 -#: templates/js/translated/part.js:491 templates/js/translated/part.js:1115 -#: templates/js/translated/part.js:1302 +#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:600 +#: templates/js/translated/part.js:497 templates/js/translated/part.js:1122 +#: templates/js/translated/part.js:1309 msgid "No Stock" msgstr "" @@ -5054,116 +5150,116 @@ msgstr "" msgid "Create a new variant of template '%(full_name)s'." msgstr "" -#: part/templatetags/inventree_extras.py:116 +#: part/templatetags/inventree_extras.py:125 msgid "Unknown database" msgstr "" -#: part/views.py:92 +#: part/views.py:93 msgid "Set Part Category" msgstr "" -#: part/views.py:142 +#: part/views.py:143 #, python-brace-format msgid "Set category for {n} parts" msgstr "" -#: part/views.py:214 +#: part/views.py:215 msgid "Match References" msgstr "" -#: part/views.py:502 +#: part/views.py:511 msgid "None" msgstr "" -#: part/views.py:561 +#: part/views.py:570 msgid "Part QR Code" msgstr "" -#: part/views.py:663 +#: part/views.py:672 msgid "Select Part Image" msgstr "" -#: part/views.py:689 +#: part/views.py:698 msgid "Updated part image" msgstr "" -#: part/views.py:692 +#: part/views.py:701 msgid "Part image not found" msgstr "" -#: part/views.py:766 +#: part/views.py:775 msgid "Match Parts" msgstr "" -#: part/views.py:1101 +#: part/views.py:1110 msgid "Export Bill of Materials" msgstr "" -#: part/views.py:1150 +#: part/views.py:1159 msgid "Confirm Part Deletion" msgstr "" -#: part/views.py:1157 +#: part/views.py:1166 msgid "Part was deleted" msgstr "" -#: part/views.py:1166 +#: part/views.py:1175 msgid "Part Pricing" msgstr "" -#: part/views.py:1315 +#: part/views.py:1324 msgid "Create Part Parameter Template" msgstr "" -#: part/views.py:1325 +#: part/views.py:1334 msgid "Edit Part Parameter Template" msgstr "" -#: part/views.py:1332 +#: part/views.py:1341 msgid "Delete Part Parameter Template" msgstr "" -#: part/views.py:1391 templates/js/translated/part.js:315 +#: part/views.py:1400 templates/js/translated/part.js:315 msgid "Edit Part Category" msgstr "" -#: part/views.py:1429 +#: part/views.py:1438 msgid "Delete Part Category" msgstr "" -#: part/views.py:1435 +#: part/views.py:1444 msgid "Part category was deleted" msgstr "" -#: part/views.py:1444 +#: part/views.py:1453 msgid "Create Category Parameter Template" msgstr "" -#: part/views.py:1545 +#: part/views.py:1554 msgid "Edit Category Parameter Template" msgstr "" -#: part/views.py:1601 +#: part/views.py:1610 msgid "Delete Category Parameter Template" msgstr "" -#: part/views.py:1623 +#: part/views.py:1632 msgid "Added new price break" msgstr "" -#: part/views.py:1699 +#: part/views.py:1708 msgid "Edit Internal Price Break" msgstr "" -#: part/views.py:1707 +#: part/views.py:1716 msgid "Delete Internal Price Break" msgstr "" -#: plugin/integration.py:124 +#: plugin/integration.py:138 msgid "No author found" msgstr "" -#: plugin/integration.py:136 +#: plugin/integration.py:152 msgid "No date found" msgstr "" @@ -5191,7 +5287,7 @@ msgstr "" msgid "Is the plugin active" msgstr "" -#: plugin/models.py:195 +#: plugin/models.py:199 msgid "Plugin" msgstr "" @@ -5357,12 +5453,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:517 stock/templates/stock/item_base.html:156 +#: stock/models.py:519 stock/templates/stock/item_base.html:156 #: templates/js/translated/build.js:293 templates/js/translated/build.js:697 #: templates/js/translated/build.js:1073 #: templates/js/translated/model_renderers.js:95 #: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 -#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:415 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:423 msgid "Serial Number" msgstr "Serienummer" @@ -5371,19 +5467,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1948 +#: stock/models.py:1976 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1954 +#: stock/models.py:1982 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin.html:50 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2367 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2525 msgid "Date" msgstr "" @@ -5396,23 +5492,27 @@ msgid "Fail" msgstr "" #: report/templates/report/inventree_test_report_base.html:123 -#: stock/templates/stock/stock_sidebar.html:12 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:578 templates/js/translated/stock.js:748 -#: templates/js/translated/stock.js:2627 +#: templates/js/translated/stock.js:586 templates/js/translated/stock.js:756 +#: templates/js/translated/stock.js:2785 msgid "Serial" msgstr "" -#: stock/api.py:478 +#: stock/api.py:476 msgid "Quantity is required" msgstr "" -#: stock/forms.py:77 stock/forms.py:251 stock/models.py:574 +#: stock/api.py:483 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:576 #: stock/templates/stock/item_base.html:193 -#: templates/js/translated/stock.js:1701 +#: templates/js/translated/stock.js:1709 msgid "Expiry Date" msgstr "" @@ -5460,228 +5560,228 @@ msgstr "" msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:611 +#: stock/models.py:62 stock/models.py:613 #: stock/templates/stock/item_base.html:416 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:612 +#: stock/models.py:63 stock/models.py:614 msgid "Select Owner" msgstr "" -#: stock/models.py:336 +#: stock/models.py:338 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:372 +#: stock/models.py:374 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:382 stock/models.py:391 +#: stock/models.py:384 stock/models.py:393 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:383 +#: stock/models.py:385 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:405 +#: stock/models.py:407 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:411 +#: stock/models.py:413 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:418 +#: stock/models.py:420 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:461 +#: stock/models.py:463 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:470 +#: stock/models.py:472 msgid "Base part" msgstr "" -#: stock/models.py:478 +#: stock/models.py:480 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:484 stock/templates/stock/location.html:16 +#: stock/models.py:486 stock/templates/stock/location.html:16 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Voorraadlocatie" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:494 +#: stock/models.py:496 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:500 stock/templates/stock/item_base.html:298 +#: stock/models.py:502 stock/templates/stock/item_base.html:298 msgid "Installed In" msgstr "" -#: stock/models.py:503 +#: stock/models.py:505 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:519 +#: stock/models.py:521 msgid "Serial number for this item" msgstr "" -#: stock/models.py:533 +#: stock/models.py:535 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:537 +#: stock/models.py:539 msgid "Stock Quantity" msgstr "" -#: stock/models.py:546 +#: stock/models.py:548 msgid "Source Build" msgstr "" -#: stock/models.py:548 +#: stock/models.py:550 msgid "Build for this stock item" msgstr "" -#: stock/models.py:559 +#: stock/models.py:561 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:562 +#: stock/models.py:564 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:568 +#: stock/models.py:570 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:575 +#: stock/models.py:577 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete on deplete" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:598 stock/templates/stock/item.html:111 +#: stock/models.py:600 stock/templates/stock/item.html:128 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:607 +#: stock/models.py:609 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1096 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1074 +#: stock/models.py:1102 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1080 +#: stock/models.py:1108 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1083 +#: stock/models.py:1111 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1086 +#: stock/models.py:1114 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1093 +#: stock/models.py:1121 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1164 +#: stock/models.py:1192 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1195 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1170 +#: stock/models.py:1198 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1173 +#: stock/models.py:1201 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1176 +#: stock/models.py:1204 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1179 +#: stock/models.py:1207 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1186 stock/serializers.py:774 +#: stock/models.py:1214 stock/serializers.py:775 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1190 +#: stock/models.py:1218 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1222 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1198 +#: stock/models.py:1226 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1369 +#: stock/models.py:1397 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1868 +#: stock/models.py:1896 msgid "Entry notes" msgstr "" -#: stock/models.py:1925 +#: stock/models.py:1953 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1931 +#: stock/models.py:1959 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1949 +#: stock/models.py:1977 msgid "Test name" msgstr "" -#: stock/models.py:1955 templates/js/translated/table_filters.js:271 +#: stock/models.py:1983 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1961 +#: stock/models.py:1989 msgid "Test output value" msgstr "" -#: stock/models.py:1968 +#: stock/models.py:1996 msgid "Test result attachment" msgstr "" -#: stock/models.py:1974 +#: stock/models.py:2002 msgid "Test notes" msgstr "" @@ -5706,7 +5806,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:326 stock/serializers.py:731 stock/serializers.py:972 +#: stock/serializers.py:326 stock/serializers.py:732 stock/serializers.py:973 msgid "Destination stock location" msgstr "" @@ -5718,63 +5818,63 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:589 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:592 +#: stock/serializers.py:593 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:597 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:626 +#: stock/serializers.py:627 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:632 +#: stock/serializers.py:633 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:640 +#: stock/serializers.py:641 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:650 stock/serializers.py:880 +#: stock/serializers.py:651 stock/serializers.py:881 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:738 +#: stock/serializers.py:739 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:743 +#: stock/serializers.py:744 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:744 +#: stock/serializers.py:745 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:749 +#: stock/serializers.py:750 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:750 +#: stock/serializers.py:751 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:760 +#: stock/serializers.py:761 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:842 +#: stock/serializers.py:843 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:870 +#: stock/serializers.py:871 msgid "Stock transaction notes" msgstr "" @@ -5787,47 +5887,51 @@ msgid "New Entry" msgstr "" #: stock/templates/stock/item.html:48 -msgid "Child Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:55 -msgid "This stock item does not have any child items" +msgid "Stock Item Allocations" msgstr "" #: stock/templates/stock/item.html:64 -#: stock/templates/stock/stock_sidebar.html:8 -msgid "Test Data" -msgstr "" - -#: stock/templates/stock/item.html:68 stock/templates/stock/item_base.html:57 -msgid "Test Report" +msgid "Child Stock Items" msgstr "" #: stock/templates/stock/item.html:72 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item.html:81 +#: stock/templates/stock/stock_sidebar.html:12 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:57 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item.html:89 msgid "Delete Test Data" msgstr "" -#: stock/templates/stock/item.html:76 +#: stock/templates/stock/item.html:93 msgid "Add Test Data" msgstr "" -#: stock/templates/stock/item.html:133 +#: stock/templates/stock/item.html:150 msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:482 +#: stock/templates/stock/item.html:154 stock/views.py:482 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:279 stock/templates/stock/item.html:304 +#: stock/templates/stock/item.html:309 stock/templates/stock/item.html:334 msgid "Add Test Result" msgstr "" -#: stock/templates/stock/item.html:324 +#: stock/templates/stock/item.html:354 msgid "Edit Test Result" msgstr "" -#: stock/templates/stock/item.html:338 +#: stock/templates/stock/item.html:368 msgid "Delete Test Result" msgstr "" @@ -5952,7 +6056,7 @@ msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:206 -#: templates/js/translated/stock.js:1714 +#: templates/js/translated/stock.js:1722 msgid "Last Updated" msgstr "" @@ -6111,7 +6215,7 @@ msgid "Sublocations" msgstr "Sublocaties" #: stock/templates/stock/location.html:146 templates/InvenTree/search.html:164 -#: templates/stats.html:97 users/models.py:42 +#: templates/stats.html:109 users/models.py:42 msgid "Stock Locations" msgstr "Voorraadlocaties" @@ -6135,7 +6239,7 @@ msgstr "" msgid "Stock Tracking" msgstr "" -#: stock/templates/stock/stock_sidebar.html:16 +#: stock/templates/stock/stock_sidebar.html:20 msgid "Child Items" msgstr "" @@ -6164,7 +6268,7 @@ msgstr "" msgid "Are you sure you want to delete this stock tracking entry?" msgstr "" -#: stock/views.py:162 +#: stock/views.py:162 templates/js/translated/stock.js:139 msgid "Edit Stock Location" msgstr "Bewerk voorraadlocatie" @@ -6204,7 +6308,7 @@ msgstr "" msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:727 templates/js/translated/stock.js:1066 +#: stock/views.py:727 templates/js/translated/stock.js:1074 msgid "Confirm stock adjustment" msgstr "" @@ -6212,7 +6316,7 @@ msgstr "" msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:324 +#: stock/views.py:760 templates/js/translated/stock.js:332 msgid "Edit Stock Item" msgstr "" @@ -6224,7 +6328,7 @@ msgstr "Maak nieuwe voorraadlocatie" msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1153 templates/js/translated/stock.js:304 +#: stock/views.py:1153 templates/js/translated/stock.js:312 msgid "Duplicate Stock Item" msgstr "" @@ -6268,6 +6372,18 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/500.html:5 templates/500.html:11 +msgid "Internal Server Error" +msgstr "" + +#: templates/500.html:14 +msgid "The InvenTree server raised an internal error" +msgstr "" + +#: templates/500.html:15 +msgid "Refer to the error log in the admin interface for further details" +msgstr "" + #: templates/503.html:10 templates/503.html:35 msgid "Site is in Maintenance" msgstr "" @@ -6390,7 +6506,7 @@ msgid "Signup" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:113 msgid "Settings" msgstr "" @@ -6431,43 +6547,43 @@ msgstr "" msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:32 +#: templates/InvenTree/settings/plugin.html:33 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:37 +#: templates/InvenTree/settings/plugin.html:38 #: templates/js/translated/plugin.js:15 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: templates/InvenTree/settings/plugin.html:47 templates/navbar.html:111 #: users/models.py:39 msgid "Admin" msgstr "" -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:49 #: templates/InvenTree/settings/plugin_settings.html:28 msgid "Author" msgstr "" -#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin_settings.html:43 msgid "Version" msgstr "" -#: templates/InvenTree/settings/plugin.html:91 +#: templates/InvenTree/settings/plugin.html:92 msgid "Inactive plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:114 +#: templates/InvenTree/settings/plugin.html:115 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:123 +#: templates/InvenTree/settings/plugin.html:124 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:125 +#: templates/InvenTree/settings/plugin.html:126 msgid "Message" msgstr "" @@ -6555,37 +6671,37 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:75 +#: templates/InvenTree/settings/settings.html:78 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:77 +#: templates/InvenTree/settings/settings.html:80 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:79 +#: templates/InvenTree/settings/settings.html:82 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:168 +#: templates/InvenTree/settings/settings.html:171 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:190 -#: templates/InvenTree/settings/settings.html:289 +#: templates/InvenTree/settings/settings.html:193 +#: templates/InvenTree/settings/settings.html:292 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:191 -#: templates/InvenTree/settings/settings.html:290 +#: templates/InvenTree/settings/settings.html:194 +#: templates/InvenTree/settings/settings.html:293 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:272 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:273 +#: templates/InvenTree/settings/settings.html:276 msgid "ID" msgstr "" @@ -6763,124 +6879,105 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:219 +#: templates/InvenTree/settings/user.html:220 +msgid "Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:226 +msgid "Log out active sessions (except this one)" +msgstr "" + +#: templates/InvenTree/settings/user.html:227 +msgid "Log Out Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:236 +msgid "unknown on unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:237 +msgid "unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:241 +msgid "IP Address" +msgstr "" + +#: templates/InvenTree/settings/user.html:242 +msgid "Device" +msgstr "" + +#: templates/InvenTree/settings/user.html:243 +msgid "Last Activity" +msgstr "" + +#: templates/InvenTree/settings/user.html:252 +#, python-format +msgid "%(time)s ago (this session)" +msgstr "" + +#: templates/InvenTree/settings/user.html:254 +#, python-format +msgid "%(time)s ago" +msgstr "" + +#: templates/InvenTree/settings/user.html:266 +msgid "Do you really want to remove the selected email address?" +msgstr "" + #: templates/InvenTree/settings/user_display.html:25 msgid "Theme Settings" msgstr "" -#: templates/InvenTree/settings/user.html:227 #: templates/InvenTree/settings/user_display.html:35 msgid "Select theme" msgstr "" -#: templates/InvenTree/settings/user.html:237 #: templates/InvenTree/settings/user_display.html:46 msgid "Set Theme" msgstr "" -#: templates/InvenTree/settings/user.html:246 #: templates/InvenTree/settings/user_display.html:54 msgid "Language Settings" msgstr "" -#: templates/InvenTree/settings/user.html:254 #: templates/InvenTree/settings/user_display.html:63 msgid "Select language" msgstr "" -#: templates/InvenTree/settings/user.html:270 #: templates/InvenTree/settings/user_display.html:79 #, python-format msgid "%(lang_translated)s%% translated" msgstr "" -#: templates/InvenTree/settings/user.html:272 #: templates/InvenTree/settings/user_display.html:81 msgid "No translations available" msgstr "" -#: templates/InvenTree/settings/user.html:279 #: templates/InvenTree/settings/user_display.html:88 msgid "Set Language" msgstr "" -#: templates/InvenTree/settings/user.html:281 #: templates/InvenTree/settings/user_display.html:91 msgid "Some languages are not complete" msgstr "" -#: templates/InvenTree/settings/user.html:283 #: templates/InvenTree/settings/user_display.html:93 msgid "Show only sufficent" msgstr "" -#: templates/InvenTree/settings/user.html:285 +#: templates/InvenTree/settings/user_display.html:95 +msgid "and hidden." +msgstr "" + #: templates/InvenTree/settings/user_display.html:95 msgid "Show them too" msgstr "" -#: templates/InvenTree/settings/user.html:292 #: templates/InvenTree/settings/user_display.html:101 msgid "Help the translation efforts!" msgstr "" -#: templates/InvenTree/settings/user.html:293 -#, python-format -msgid "Native language translation of the\n" -" InvenTree web application is community contributed via crowdin. Contributions are\n" -" welcomed and encouraged." -msgstr "" - -#: templates/InvenTree/settings/user.html:302 -msgid "Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:308 -msgid "Log out active sessions (except this one)" -msgstr "" - -#: templates/InvenTree/settings/user.html:309 -msgid "Log Out Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:318 -msgid "unknown on unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:319 -msgid "unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:323 -msgid "IP Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:324 -msgid "Device" -msgstr "" - -#: templates/InvenTree/settings/user.html:325 -msgid "Last Activity" -msgstr "" - -#: templates/InvenTree/settings/user.html:334 -#, python-format -msgid "%(time)s ago (this session)" -msgstr "" - -#: templates/InvenTree/settings/user.html:336 -#, python-format -msgid "%(time)s ago" -msgstr "" - -#: templates/InvenTree/settings/user.html:348 -msgid "Do you really want to remove the selected email address?" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:95 -msgid "and hidden." -msgstr "" - #: templates/InvenTree/settings/user_display.html:102 #, python-format msgid "Native language translation of the InvenTree web application is community contributed via crowdin. Contributions are welcomed and encouraged." @@ -6899,9 +6996,9 @@ msgid "InvenTree Version Information" msgstr "" #: templates/about.html:11 templates/about.html:105 -#: templates/js/translated/bom.js:395 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:573 templates/js/translated/modals.js:667 -#: templates/js/translated/modals.js:970 templates/modals.html:15 +#: templates/js/translated/bom.js:407 templates/js/translated/modals.js:53 +#: templates/js/translated/modals.js:584 templates/js/translated/modals.js:678 +#: templates/js/translated/modals.js:983 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -7178,13 +7275,13 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1103 +#: templates/js/translated/bom.js:1117 msgid "Required Quantity" msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:579 templates/js/translated/build.js:1189 +#: templates/js/translated/bom.js:591 templates/js/translated/build.js:1189 #: templates/js/translated/build.js:1810 #: templates/js/translated/table_filters.js:178 msgid "Available" @@ -7208,10 +7305,6 @@ msgstr "" msgid "Click on the following link to view this part" msgstr "" -#: templates/email/low_stock_notification.html:17 -msgid "Total Stock" -msgstr "" - #: templates/email/low_stock_notification.html:19 msgid "Minimum Quantity" msgstr "" @@ -7232,11 +7325,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1040 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1053 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1041 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1054 msgid "No response from the InvenTree server" msgstr "" @@ -7248,27 +7341,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1063 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1051 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1064 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1068 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1056 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1069 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1073 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1061 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1074 msgid "The requested resource could not be located on the server" msgstr "" @@ -7280,11 +7373,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1065 +#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1078 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1066 +#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1079 msgid "Connection timeout while requesting data from server" msgstr "" @@ -7353,7 +7446,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "Invalid server response" msgstr "" @@ -7381,7 +7474,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1018 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1026 msgid "Remove stock item" msgstr "" @@ -7428,12 +7521,12 @@ msgid "Download BOM Template" msgstr "" #: templates/js/translated/bom.js:39 templates/js/translated/bom.js:73 -#: templates/js/translated/order.js:369 templates/js/translated/stock.js:510 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:518 msgid "Format" msgstr "" #: templates/js/translated/bom.js:40 templates/js/translated/bom.js:74 -#: templates/js/translated/order.js:370 templates/js/translated/stock.js:511 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:519 msgid "Select file format" msgstr "" @@ -7489,87 +7582,87 @@ msgstr "" msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:340 -msgid "Select and add a new variant item using the input below" +#: templates/js/translated/bom.js:352 +msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:351 +#: templates/js/translated/bom.js:363 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:357 +#: templates/js/translated/bom.js:369 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:396 +#: templates/js/translated/bom.js:408 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:397 +#: templates/js/translated/bom.js:409 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:516 +#: templates/js/translated/bom.js:528 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:520 templates/js/translated/build.js:1171 +#: templates/js/translated/bom.js:532 templates/js/translated/build.js:1171 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:525 +#: templates/js/translated/bom.js:537 msgid "Open subassembly" msgstr "" -#: templates/js/translated/bom.js:597 +#: templates/js/translated/bom.js:609 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:612 +#: templates/js/translated/bom.js:624 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:619 +#: templates/js/translated/bom.js:631 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:668 templates/js/translated/bom.js:757 +#: templates/js/translated/bom.js:680 templates/js/translated/bom.js:769 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:728 +#: templates/js/translated/bom.js:740 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:742 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:732 +#: templates/js/translated/bom.js:744 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:734 templates/js/translated/bom.js:908 +#: templates/js/translated/bom.js:746 templates/js/translated/bom.js:920 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:891 +#: templates/js/translated/bom.js:748 templates/js/translated/bom.js:903 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:830 templates/js/translated/build.js:915 +#: templates/js/translated/bom.js:842 templates/js/translated/build.js:915 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:886 +#: templates/js/translated/bom.js:898 msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:1086 templates/js/translated/build.js:1155 +#: templates/js/translated/bom.js:1100 templates/js/translated/build.js:1155 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1108 +#: templates/js/translated/bom.js:1122 msgid "Inherited from parent BOM" msgstr "" @@ -7725,9 +7818,9 @@ msgstr "" msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1206 -#: templates/js/translated/part.js:1617 templates/js/translated/stock.js:1512 -#: templates/js/translated/stock.js:2321 +#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:1624 templates/js/translated/stock.js:1520 +#: templates/js/translated/stock.js:2479 msgid "Select" msgstr "" @@ -7735,7 +7828,7 @@ msgstr "" msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2540 +#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2698 msgid "No user information" msgstr "" @@ -7808,34 +7901,34 @@ msgid "No manufacturer parts found" msgstr "Geen fabricage onderdelen gevonden" #: templates/js/translated/company.js:500 -#: templates/js/translated/company.js:757 templates/js/translated/part.js:511 -#: templates/js/translated/part.js:596 +#: templates/js/translated/company.js:757 templates/js/translated/part.js:517 +#: templates/js/translated/part.js:602 msgid "Template part" msgstr "" #: templates/js/translated/company.js:504 -#: templates/js/translated/company.js:761 templates/js/translated/part.js:515 -#: templates/js/translated/part.js:600 +#: templates/js/translated/company.js:761 templates/js/translated/part.js:521 +#: templates/js/translated/part.js:606 msgid "Assembled part" msgstr "Samengesteld onderdeel" -#: templates/js/translated/company.js:631 templates/js/translated/part.js:690 +#: templates/js/translated/company.js:631 templates/js/translated/part.js:696 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:668 templates/js/translated/part.js:732 +#: templates/js/translated/company.js:668 templates/js/translated/part.js:738 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:669 templates/js/translated/part.js:733 +#: templates/js/translated/company.js:669 templates/js/translated/part.js:739 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:688 templates/js/translated/part.js:750 +#: templates/js/translated/company.js:688 templates/js/translated/part.js:756 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:699 templates/js/translated/part.js:762 +#: templates/js/translated/company.js:699 templates/js/translated/part.js:768 msgid "Delete Parameter" msgstr "" @@ -7844,12 +7937,12 @@ msgid "No supplier parts found" msgstr "" #: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:420 +#: templates/js/translated/filters.js:429 msgid "true" msgstr "" #: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:421 +#: templates/js/translated/filters.js:430 msgid "false" msgstr "" @@ -7869,7 +7962,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:329 +#: templates/js/translated/filters.js:338 msgid "Create filter" msgstr "" @@ -7898,20 +7991,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1080 templates/modals.html:19 +#: templates/js/translated/forms.js:1082 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1471 +#: templates/js/translated/forms.js:1487 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1675 +#: templates/js/translated/forms.js:1691 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1895 +#: templates/js/translated/forms.js:1930 msgid "Clear input" msgstr "" @@ -7924,7 +8017,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1042 +#: templates/js/translated/stock.js:1050 msgid "Select Stock Items" msgstr "" @@ -7974,12 +8067,12 @@ msgid "Select Label Template" msgstr "" #: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 -#: templates/js/translated/modals.js:599 +#: templates/js/translated/modals.js:610 msgid "Cancel" msgstr "" #: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:666 templates/js/translated/modals.js:969 +#: templates/js/translated/modals.js:677 templates/js/translated/modals.js:982 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" @@ -7988,47 +8081,47 @@ msgstr "" msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:381 +#: templates/js/translated/modals.js:392 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:540 +#: templates/js/translated/modals.js:551 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:598 +#: templates/js/translated/modals.js:609 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:655 +#: templates/js/translated/modals.js:666 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:933 +#: templates/js/translated/modals.js:946 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1045 +#: templates/js/translated/modals.js:1058 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1046 +#: templates/js/translated/modals.js:1059 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1069 +#: templates/js/translated/modals.js:1082 msgid "Error requesting form data" msgstr "" @@ -8052,23 +8145,24 @@ msgstr "" msgid "Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:236 +#: templates/js/translated/model_renderers.js:249 +#: templates/js/translated/model_renderers.js:270 msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:253 +#: templates/js/translated/model_renderers.js:287 msgid "Shipment ID" msgstr "" -#: templates/js/translated/model_renderers.js:273 +#: templates/js/translated/model_renderers.js:307 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:310 +#: templates/js/translated/model_renderers.js:344 msgid "Manufacturer Part ID" msgstr "Onderdeelnummer fabrikant" -#: templates/js/translated/model_renderers.js:339 +#: templates/js/translated/model_renderers.js:373 msgid "Supplier Part ID" msgstr "" @@ -8116,7 +8210,7 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2123 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2131 msgid "Stock Status" msgstr "" @@ -8140,7 +8234,7 @@ msgstr "" msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:790 templates/js/translated/part.js:803 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:809 msgid "No purchase orders found" msgstr "" @@ -8165,7 +8259,7 @@ msgid "Total" msgstr "" #: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 -#: templates/js/translated/part.js:1834 templates/js/translated/part.js:2045 +#: templates/js/translated/part.js:1841 templates/js/translated/part.js:2052 msgid "Unit Price" msgstr "" @@ -8181,7 +8275,7 @@ msgstr "" msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1166 templates/js/translated/part.js:935 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:942 msgid "Receive line item" msgstr "" @@ -8250,7 +8344,7 @@ msgid "Delete Stock Allocation" msgstr "" #: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 -#: templates/js/translated/stock.js:1428 +#: templates/js/translated/stock.js:1436 msgid "Shipped to customer" msgstr "" @@ -8378,144 +8472,148 @@ msgstr "" msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:412 +#: templates/js/translated/part.js:351 +msgid "Create Part Variant" +msgstr "" + +#: templates/js/translated/part.js:418 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:414 +#: templates/js/translated/part.js:420 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:419 +#: templates/js/translated/part.js:425 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:421 +#: templates/js/translated/part.js:427 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:444 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:448 +#: templates/js/translated/part.js:454 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:451 +#: templates/js/translated/part.js:457 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:481 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:503 templates/js/translated/part.js:588 +#: templates/js/translated/part.js:509 templates/js/translated/part.js:594 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:507 templates/js/translated/part.js:592 +#: templates/js/translated/part.js:513 templates/js/translated/part.js:598 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:519 +#: templates/js/translated/part.js:525 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:523 +#: templates/js/translated/part.js:529 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:638 +#: templates/js/translated/part.js:644 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1005 +#: templates/js/translated/part.js:1012 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1029 +#: templates/js/translated/part.js:1036 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1096 templates/js/translated/part.js:1356 +#: templates/js/translated/part.js:1103 templates/js/translated/part.js:1363 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1266 +#: templates/js/translated/part.js:1273 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1289 +#: templates/js/translated/part.js:1296 #: templates/js/translated/table_filters.js:430 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:1380 templates/js/translated/part.js:1552 -#: templates/js/translated/stock.js:2282 +#: templates/js/translated/part.js:1387 templates/js/translated/part.js:1559 +#: templates/js/translated/stock.js:2440 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1396 +#: templates/js/translated/part.js:1403 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1571 templates/js/translated/stock.js:2301 +#: templates/js/translated/part.js:1578 templates/js/translated/stock.js:2459 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:1635 +#: templates/js/translated/part.js:1642 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1649 templates/js/translated/stock.js:2345 +#: templates/js/translated/part.js:1656 templates/js/translated/stock.js:2503 msgid "Path" msgstr "" -#: templates/js/translated/part.js:1693 +#: templates/js/translated/part.js:1700 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1744 templates/js/translated/stock.js:1234 +#: templates/js/translated/part.js:1751 templates/js/translated/stock.js:1242 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1745 templates/js/translated/stock.js:1235 +#: templates/js/translated/part.js:1752 templates/js/translated/stock.js:1243 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:1751 +#: templates/js/translated/part.js:1758 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:1773 +#: templates/js/translated/part.js:1780 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:1787 +#: templates/js/translated/part.js:1794 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:1812 +#: templates/js/translated/part.js:1819 #, python-brace-format msgid "No ${human_name} information found" msgstr "" -#: templates/js/translated/part.js:1867 +#: templates/js/translated/part.js:1874 #, python-brace-format msgid "Edit ${human_name}" msgstr "" -#: templates/js/translated/part.js:1868 +#: templates/js/translated/part.js:1875 #, python-brace-format msgid "Delete ${human_name}" msgstr "" -#: templates/js/translated/part.js:1969 +#: templates/js/translated/part.js:1976 msgid "Single Price" msgstr "" -#: templates/js/translated/part.js:1988 +#: templates/js/translated/part.js:1995 msgid "Single Price Difference" msgstr "" @@ -8589,340 +8687,344 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:74 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:181 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:93 templates/js/translated/stock.js:175 +#: templates/js/translated/stock.js:94 templates/js/translated/stock.js:183 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:101 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:110 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:146 +#: templates/js/translated/stock.js:154 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:186 +#: templates/js/translated/stock.js:194 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:225 +#: templates/js/translated/stock.js:233 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:231 +#: templates/js/translated/stock.js:239 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:382 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:387 +#: templates/js/translated/stock.js:395 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:420 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:416 templates/js/translated/stock.js:417 +#: templates/js/translated/stock.js:424 templates/js/translated/stock.js:425 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:433 +#: templates/js/translated/stock.js:441 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:453 +#: templates/js/translated/stock.js:461 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:462 +#: templates/js/translated/stock.js:470 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:515 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:526 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:519 +#: templates/js/translated/stock.js:527 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:628 +#: templates/js/translated/stock.js:636 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:629 +#: templates/js/translated/stock.js:637 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:714 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:715 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:709 +#: templates/js/translated/stock.js:717 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:710 +#: templates/js/translated/stock.js:718 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:796 +#: templates/js/translated/stock.js:804 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:797 +#: templates/js/translated/stock.js:805 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:892 +#: templates/js/translated/stock.js:900 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:893 +#: templates/js/translated/stock.js:901 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:899 +#: templates/js/translated/stock.js:907 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:900 +#: templates/js/translated/stock.js:908 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:904 +#: templates/js/translated/stock.js:912 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:905 +#: templates/js/translated/stock.js:913 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:909 +#: templates/js/translated/stock.js:917 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:910 users/models.py:206 +#: templates/js/translated/stock.js:918 users/models.py:208 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:914 templates/stock_table.html:58 +#: templates/js/translated/stock.js:922 templates/stock_table.html:58 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1051 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1201 +#: templates/js/translated/stock.js:1209 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1203 +#: templates/js/translated/stock.js:1211 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1208 +#: templates/js/translated/stock.js:1216 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1230 +#: templates/js/translated/stock.js:1238 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1256 +#: templates/js/translated/stock.js:1264 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1313 +#: templates/js/translated/stock.js:1321 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1428 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1424 +#: templates/js/translated/stock.js:1432 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1432 +#: templates/js/translated/stock.js:1440 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1438 +#: templates/js/translated/stock.js:1446 msgid "No stock location set" msgstr "Geen voorraadlocatie ingesteld" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1604 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1601 +#: templates/js/translated/stock.js:1609 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1604 +#: templates/js/translated/stock.js:1612 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1608 +#: templates/js/translated/stock.js:1616 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1610 +#: templates/js/translated/stock.js:1618 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1616 +#: templates/js/translated/stock.js:1624 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1618 +#: templates/js/translated/stock.js:1626 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1620 +#: templates/js/translated/stock.js:1628 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1633 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1632 +#: templates/js/translated/stock.js:1640 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1634 +#: templates/js/translated/stock.js:1642 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1636 +#: templates/js/translated/stock.js:1644 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1648 #: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1690 +#: templates/js/translated/stock.js:1698 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1763 +#: templates/js/translated/stock.js:1771 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1809 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1822 templates/js/translated/stock.js:1870 +#: templates/js/translated/stock.js:1830 templates/js/translated/stock.js:1878 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1910 +#: templates/js/translated/stock.js:1918 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1937 +#: templates/js/translated/stock.js:1945 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1939 +#: templates/js/translated/stock.js:1947 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:2138 +#: templates/js/translated/stock.js:2146 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2152 +#: templates/js/translated/stock.js:2160 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2153 +#: templates/js/translated/stock.js:2161 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2377 +#: templates/js/translated/stock.js:2340 +msgid "Allocated Quantity" +msgstr "" + +#: templates/js/translated/stock.js:2535 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2399 +#: templates/js/translated/stock.js:2557 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2424 +#: templates/js/translated/stock.js:2582 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2443 +#: templates/js/translated/stock.js:2601 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2462 +#: templates/js/translated/stock.js:2620 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2480 +#: templates/js/translated/stock.js:2638 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2503 +#: templates/js/translated/stock.js:2661 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2511 +#: templates/js/translated/stock.js:2669 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2552 +#: templates/js/translated/stock.js:2710 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2553 +#: templates/js/translated/stock.js:2711 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2604 +#: templates/js/translated/stock.js:2762 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2655 +#: templates/js/translated/stock.js:2813 msgid "Uninstall Stock Item" msgstr "" @@ -9194,11 +9296,11 @@ msgstr "Inkoop" msgid "Sell" msgstr "Verkoop" -#: templates/navbar.html:113 +#: templates/navbar.html:114 msgid "Logout" msgstr "" -#: templates/navbar.html:115 +#: templates/navbar.html:116 msgid "Login" msgstr "" @@ -9246,31 +9348,43 @@ msgstr "" msgid "Server is deployed using docker" msgstr "" -#: templates/stats.html:40 -msgid "Server status" +#: templates/stats.html:39 +msgid "Plugin Support" msgstr "" #: templates/stats.html:43 -msgid "Healthy" +msgid "Plugin support enabled" msgstr "" #: templates/stats.html:45 -msgid "Issues detected" +msgid "Plugin support disabled" msgstr "" #: templates/stats.html:52 -msgid "Background Worker" +msgid "Server status" msgstr "" #: templates/stats.html:55 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:57 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:64 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:67 msgid "Background worker not running" msgstr "" -#: templates/stats.html:63 +#: templates/stats.html:75 msgid "Email Settings" msgstr "" -#: templates/stats.html:66 +#: templates/stats.html:78 msgid "Email settings not configured" msgstr "" @@ -9366,35 +9480,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:193 +#: users/models.py:195 msgid "Permission set" msgstr "" -#: users/models.py:201 +#: users/models.py:203 msgid "Group" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "View" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to view items" msgstr "" -#: users/models.py:206 +#: users/models.py:208 msgid "Permission to add items" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Change" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Permissions to edit items" msgstr "" -#: users/models.py:210 +#: users/models.py:212 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/no/LC_MESSAGES/django.po b/InvenTree/locale/no/LC_MESSAGES/django.po index 340a4b4fc7..9af733aa18 100644 --- a/InvenTree/locale/no/LC_MESSAGES/django.po +++ b/InvenTree/locale/no/LC_MESSAGES/django.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-10 03:54+0000\n" -"PO-Revision-Date: 2022-01-10 03:57\n" +"POT-Creation-Date: 2022-01-29 00:17+0000\n" +"PO-Revision-Date: 2022-01-29 01:11\n" "Last-Translator: \n" "Language-Team: Norwegian\n" "Language: no_NO\n" @@ -18,15 +18,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 138\n" -#: InvenTree/api.py:64 +#: InvenTree/api.py:55 msgid "API endpoint not found" msgstr "API endepunkt ikke funnet" -#: InvenTree/api.py:110 +#: InvenTree/api.py:101 msgid "No action specified" msgstr "Ingen handling spesifisert" -#: InvenTree/api.py:124 +#: InvenTree/api.py:116 msgid "No matching action found" msgstr "Ingen samsvarende handling funnet" @@ -46,7 +46,7 @@ msgstr "Bekreft sletting" #: InvenTree/forms.py:143 msgid "Confirm item deletion" -msgstr "" +msgstr "Bekfret sletting av element" #: InvenTree/forms.py:174 msgid "Enter password" @@ -70,64 +70,64 @@ msgstr "Velg kategori" #: InvenTree/forms.py:236 msgid "Email (again)" -msgstr "" +msgstr "E-post (gjenta)" #: InvenTree/forms.py:240 msgid "Email address confirmation" -msgstr "" +msgstr "Bekreftelsen på e-postaddresse" #: InvenTree/forms.py:260 msgid "You must type the same email each time." -msgstr "" +msgstr "Du må angi samme e-post hver gang." -#: InvenTree/helpers.py:437 +#: InvenTree/helpers.py:439 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "Dupliser serie: {n}" -#: InvenTree/helpers.py:444 order/models.py:279 order/models.py:420 +#: InvenTree/helpers.py:446 order/models.py:282 order/models.py:425 #: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "Ugyldig mengde oppgitt" -#: InvenTree/helpers.py:447 +#: InvenTree/helpers.py:449 msgid "Empty serial number string" msgstr "Tom serienummerstreng" -#: InvenTree/helpers.py:469 InvenTree/helpers.py:472 InvenTree/helpers.py:475 -#: InvenTree/helpers.py:500 +#: InvenTree/helpers.py:471 InvenTree/helpers.py:474 InvenTree/helpers.py:477 +#: InvenTree/helpers.py:502 #, python-brace-format msgid "Invalid group: {g}" msgstr "Ugyldig gruppe: {g}" -#: InvenTree/helpers.py:510 +#: InvenTree/helpers.py:512 #, python-brace-format msgid "Invalid group {group}" -msgstr "" +msgstr "Ugyldig gruppe {group}" -#: InvenTree/helpers.py:516 +#: InvenTree/helpers.py:518 #, python-brace-format msgid "Invalid/no group {group}" -msgstr "" +msgstr "Ugyldig/ingen gruppe {group}" -#: InvenTree/helpers.py:522 +#: InvenTree/helpers.py:524 msgid "No serial numbers found" msgstr "Ingen serienummer funnet" -#: InvenTree/helpers.py:526 +#: InvenTree/helpers.py:528 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "Antall unike serienummer ({s}) må samsvare mengde ({q})" #: InvenTree/models.py:120 msgid "Missing file" -msgstr "" +msgstr "Fil mangler" #: InvenTree/models.py:121 msgid "Missing external link" -msgstr "" +msgstr "Mangler eksternlenke" -#: InvenTree/models.py:132 stock/models.py:1967 +#: InvenTree/models.py:132 stock/models.py:1995 #: templates/js/translated/attachment.js:119 msgid "Attachment" msgstr "Vedlegg" @@ -137,17 +137,17 @@ msgid "Select file to attach" msgstr "Velg fil å legge ved" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:124 part/models.py:828 +#: company/models.py:564 order/models.py:127 part/models.py:830 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:540 -#: templates/js/translated/company.js:829 templates/js/translated/part.js:1317 +#: templates/js/translated/company.js:829 templates/js/translated/part.js:1324 msgid "Link" -msgstr "" +msgstr "Lenke" -#: InvenTree/models.py:140 build/models.py:330 part/models.py:829 -#: stock/models.py:527 +#: InvenTree/models.py:140 build/models.py:332 part/models.py:831 +#: stock/models.py:529 msgid "Link to external URL" -msgstr "" +msgstr "Lenke til ekstern URL" #: InvenTree/models.py:143 templates/js/translated/attachment.js:163 msgid "Comment" @@ -157,10 +157,11 @@ msgstr "Kommenter" msgid "File comment" msgstr "Kommentar til fil" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 -#: common/models.py:1214 part/models.py:2258 part/models.py:2278 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1223 +#: common/models.py:1224 common/models.py:1452 common/models.py:1453 +#: part/models.py:2265 part/models.py:2285 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2534 +#: templates/js/translated/stock.js:2692 msgid "User" msgstr "Bruker" @@ -170,69 +171,69 @@ msgstr "opplastet dato" #: InvenTree/models.py:176 msgid "Filename must not be empty" -msgstr "" +msgstr "Filnavn må ikke være tom" #: InvenTree/models.py:199 msgid "Invalid attachment directory" -msgstr "" +msgstr "Ugyldig vedleggskatalog" #: InvenTree/models.py:209 #, python-brace-format msgid "Filename contains illegal character '{c}'" -msgstr "" +msgstr "Filnavn inneholder ugyldig tegn '{c}'" #: InvenTree/models.py:212 msgid "Filename missing extension" -msgstr "" +msgstr "Filnavn mangler filtype" #: InvenTree/models.py:219 msgid "Attachment with this filename already exists" -msgstr "" +msgstr "Vedlegg med dette filnavnet finnes allerede" #: InvenTree/models.py:226 msgid "Error renaming file" -msgstr "" +msgstr "Feil ved endring av navn" #: InvenTree/models.py:261 msgid "Invalid choice" msgstr "Ugyldig valg" -#: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 -#: label/models.py:112 part/models.py:772 part/models.py:2442 -#: plugin/models.py:40 report/models.py:181 +#: InvenTree/models.py:277 InvenTree/models.py:278 common/models.py:1438 +#: company/models.py:415 label/models.py:112 part/models.py:774 +#: part/models.py:2449 plugin/models.py:40 report/models.py:181 #: templates/InvenTree/settings/mixins/urls.html:13 -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:125 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:279 -#: templates/js/translated/company.js:641 templates/js/translated/part.js:561 -#: templates/js/translated/part.js:700 templates/js/translated/part.js:1624 -#: templates/js/translated/stock.js:2327 +#: templates/InvenTree/settings/settings.html:282 +#: templates/js/translated/company.js:641 templates/js/translated/part.js:567 +#: templates/js/translated/part.js:706 templates/js/translated/part.js:1631 +#: templates/js/translated/stock.js:2485 msgid "Name" msgstr "Navn" -#: InvenTree/models.py:284 build/models.py:207 +#: InvenTree/models.py:284 build/models.py:209 #: build/templates/build/detail.html:25 company/models.py:354 #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:122 part/models.py:795 part/templates/part/category.html:74 +#: order/models.py:125 part/models.py:797 part/templates/part/category.html:74 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 #: stock/templates/stock/location.html:93 #: templates/InvenTree/settings/plugin_settings.html:33 -#: templates/js/translated/bom.js:327 templates/js/translated/bom.js:540 +#: templates/js/translated/bom.js:339 templates/js/translated/bom.js:552 #: templates/js/translated/build.js:1682 templates/js/translated/company.js:345 #: templates/js/translated/company.js:551 #: templates/js/translated/company.js:840 templates/js/translated/order.js:836 #: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 -#: templates/js/translated/part.js:620 templates/js/translated/part.js:992 -#: templates/js/translated/part.js:1077 templates/js/translated/part.js:1247 -#: templates/js/translated/part.js:1643 templates/js/translated/part.js:1712 -#: templates/js/translated/stock.js:1569 templates/js/translated/stock.js:2339 -#: templates/js/translated/stock.js:2384 +#: templates/js/translated/part.js:626 templates/js/translated/part.js:999 +#: templates/js/translated/part.js:1084 templates/js/translated/part.js:1254 +#: templates/js/translated/part.js:1650 templates/js/translated/part.js:1719 +#: templates/js/translated/stock.js:1577 templates/js/translated/stock.js:2314 +#: templates/js/translated/stock.js:2497 templates/js/translated/stock.js:2542 msgid "Description" msgstr "Beskrivelse" @@ -242,93 +243,93 @@ msgstr "Beskrivelse (valgfritt)" #: InvenTree/models.py:293 msgid "parent" -msgstr "" +msgstr "overkategori" -#: InvenTree/serializers.py:65 part/models.py:2727 +#: InvenTree/serializers.py:65 part/models.py:2734 msgid "Must be a valid number" msgstr "Nummer må være gyldig" #: InvenTree/serializers.py:299 msgid "Filename" -msgstr "" +msgstr "Filnavn" -#: InvenTree/settings.py:663 +#: InvenTree/settings.py:661 msgid "German" msgstr "Tysk" -#: InvenTree/settings.py:664 +#: InvenTree/settings.py:662 msgid "Greek" msgstr "Gresk" -#: InvenTree/settings.py:665 +#: InvenTree/settings.py:663 msgid "English" msgstr "Engelsk" -#: InvenTree/settings.py:666 +#: InvenTree/settings.py:664 msgid "Spanish" msgstr "Spansk" -#: InvenTree/settings.py:667 +#: InvenTree/settings.py:665 msgid "Spanish (Mexican)" -msgstr "" +msgstr "Spansk (Meksikansk)" -#: InvenTree/settings.py:668 +#: InvenTree/settings.py:666 msgid "French" msgstr "Fransk" -#: InvenTree/settings.py:669 +#: InvenTree/settings.py:667 msgid "Hebrew" msgstr "Hebraisk" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:668 msgid "Italian" msgstr "Italiensk" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:669 msgid "Japanese" msgstr "Japansk" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:670 msgid "Korean" msgstr "Koreansk" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:671 msgid "Dutch" msgstr "Nederlandsk" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:672 msgid "Norwegian" msgstr "Norsk" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:673 msgid "Polish" msgstr "Polsk" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:674 msgid "Portugese" -msgstr "" +msgstr "Portugesisk" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:675 msgid "Russian" msgstr "Russisk" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:676 msgid "Swedish" msgstr "Svensk" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:677 msgid "Thai" msgstr "Thailandsk" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:678 msgid "Turkish" msgstr "Tyrkisk" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:679 msgid "Vietnamese" msgstr "Vietnamesisk" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:680 msgid "Chinese" msgstr "Kinesisk" @@ -338,261 +339,261 @@ msgstr "Bakgrunnsarbeiderkontroll mislyktes" #: InvenTree/status.py:98 msgid "Email backend not configured" -msgstr "" +msgstr "E-post backend ikke konfigurert" #: InvenTree/status.py:101 msgid "InvenTree system health checks failed" -msgstr "" +msgstr "Helsekontroll av IvenTree system mislyktes" #: InvenTree/status_codes.py:101 InvenTree/status_codes.py:142 #: InvenTree/status_codes.py:316 templates/js/translated/table_filters.js:313 msgid "Pending" -msgstr "" +msgstr "Ventende" #: InvenTree/status_codes.py:102 msgid "Placed" -msgstr "" +msgstr "Plassert" #: InvenTree/status_codes.py:103 InvenTree/status_codes.py:319 #: order/templates/order/order_base.html:128 #: order/templates/order/sales_order_base.html:132 msgid "Complete" -msgstr "" +msgstr "Fullført" #: InvenTree/status_codes.py:104 InvenTree/status_codes.py:144 #: InvenTree/status_codes.py:318 msgid "Cancelled" -msgstr "" +msgstr "Kansellert" #: InvenTree/status_codes.py:105 InvenTree/status_codes.py:145 #: InvenTree/status_codes.py:187 msgid "Lost" -msgstr "" +msgstr "Tapt" #: InvenTree/status_codes.py:106 InvenTree/status_codes.py:146 #: InvenTree/status_codes.py:189 msgid "Returned" -msgstr "" +msgstr "Returnert" -#: InvenTree/status_codes.py:143 order/models.py:941 +#: InvenTree/status_codes.py:143 order/models.py:961 #: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" -msgstr "" +msgstr "Sendt" #: InvenTree/status_codes.py:183 msgid "OK" -msgstr "" +msgstr "OK" #: InvenTree/status_codes.py:184 msgid "Attention needed" -msgstr "" +msgstr "Merknad nødvendig" #: InvenTree/status_codes.py:185 msgid "Damaged" -msgstr "" +msgstr "Skadet" #: InvenTree/status_codes.py:186 msgid "Destroyed" -msgstr "" +msgstr "Ødelagt" #: InvenTree/status_codes.py:188 msgid "Rejected" -msgstr "" +msgstr "Avvist" #: InvenTree/status_codes.py:272 msgid "Legacy stock tracking entry" -msgstr "" +msgstr "Legacy stock sporingsoppføring" #: InvenTree/status_codes.py:274 msgid "Stock item created" -msgstr "" +msgstr "Lagevare opprettet" #: InvenTree/status_codes.py:276 msgid "Edited stock item" -msgstr "" +msgstr "Redigerte lagervare" #: InvenTree/status_codes.py:277 msgid "Assigned serial number" -msgstr "" +msgstr "Tildelt serienummer" #: InvenTree/status_codes.py:279 msgid "Stock counted" -msgstr "" +msgstr "Lager tellet" #: InvenTree/status_codes.py:280 msgid "Stock manually added" -msgstr "" +msgstr "Lager manuelt lagt til" #: InvenTree/status_codes.py:281 msgid "Stock manually removed" -msgstr "" +msgstr "Lager manuelt fjernet" #: InvenTree/status_codes.py:283 msgid "Location changed" -msgstr "" +msgstr "Posisjon endret" #: InvenTree/status_codes.py:285 msgid "Installed into assembly" -msgstr "" +msgstr "Installert i montering" #: InvenTree/status_codes.py:286 msgid "Removed from assembly" -msgstr "" +msgstr "Fjernet fra montering" #: InvenTree/status_codes.py:288 msgid "Installed component item" -msgstr "" +msgstr "Installert komponentelement" #: InvenTree/status_codes.py:289 msgid "Removed component item" -msgstr "" +msgstr "Fjernet komponentelement" #: InvenTree/status_codes.py:291 msgid "Split from parent item" -msgstr "" +msgstr "Delt fra overordnet element" #: InvenTree/status_codes.py:292 msgid "Split child item" -msgstr "" +msgstr "Delt fra underelement" -#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2064 +#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2072 msgid "Merged stock items" -msgstr "" +msgstr "Sammenslått lagervare" #: InvenTree/status_codes.py:296 templates/js/translated/table_filters.js:213 msgid "Sent to customer" -msgstr "" +msgstr "Sendt til kunde" #: InvenTree/status_codes.py:297 msgid "Returned from customer" -msgstr "" +msgstr "Returnert av kunde" #: InvenTree/status_codes.py:299 msgid "Build order output created" -msgstr "" +msgstr "Build ordreutgang opprettet" #: InvenTree/status_codes.py:300 msgid "Build order output completed" -msgstr "" +msgstr "Build ordreutg fullført" #: InvenTree/status_codes.py:302 msgid "Received against purchase order" -msgstr "" +msgstr "Mottatt mot innkjøpsordre" #: InvenTree/status_codes.py:317 msgid "Production" -msgstr "" +msgstr "Produksjon" #: InvenTree/validators.py:23 msgid "Not a valid currency code" -msgstr "" +msgstr "Ikke en gyldig valutanr" #: InvenTree/validators.py:51 msgid "Invalid character in part name" -msgstr "" +msgstr "Ugylding tegn i varenavn" #: InvenTree/validators.py:64 #, python-brace-format msgid "IPN must match regex pattern {pat}" -msgstr "" +msgstr "IPN må matche regex-mønster {pat}" #: InvenTree/validators.py:78 InvenTree/validators.py:92 #: InvenTree/validators.py:106 #, python-brace-format msgid "Reference must match pattern {pattern}" -msgstr "" +msgstr "Referansen må samsvare med mønster {pattern}" #: InvenTree/validators.py:114 #, python-brace-format msgid "Illegal character in name ({x})" -msgstr "" +msgstr "Ugyldig tegn i navn ({x})" #: InvenTree/validators.py:133 InvenTree/validators.py:149 msgid "Overage value must not be negative" -msgstr "" +msgstr "Overde-verdien må ikke være negativ" #: InvenTree/validators.py:151 msgid "Overage must not exceed 100%" -msgstr "" +msgstr "Overde må ikke overstige 100%" #: InvenTree/validators.py:158 msgid "Overage must be an integer value or a percentage" -msgstr "" +msgstr "Overde må være en heltallsverdi eller en prosentandel" #: InvenTree/views.py:538 msgid "Delete Item" -msgstr "" +msgstr "Slett element" #: InvenTree/views.py:587 msgid "Check box to confirm item deletion" -msgstr "" +msgstr "Kryss av i boksen for å bekrefte sletting av element" #: InvenTree/views.py:602 templates/InvenTree/settings/user.html:21 msgid "Edit User Information" -msgstr "" +msgstr "Rediger brukerinformasjon" #: InvenTree/views.py:613 templates/InvenTree/settings/user.html:19 msgid "Set Password" -msgstr "" +msgstr "Velg passord" #: InvenTree/views.py:632 msgid "Password fields must match" -msgstr "" +msgstr "Passordfeltene må samsvare" #: InvenTree/views.py:883 templates/navbar.html:126 msgid "System Information" -msgstr "" +msgstr "Systeminformasjon" -#: barcodes/api.py:54 barcodes/api.py:151 +#: barcodes/api.py:54 barcodes/api.py:152 msgid "Must provide barcode_data parameter" msgstr "Må oppgi gyldig strekkode_data parameter" -#: barcodes/api.py:127 +#: barcodes/api.py:128 msgid "No match found for barcode data" msgstr "Ingen treff funnet for strekkodedata" -#: barcodes/api.py:129 +#: barcodes/api.py:130 msgid "Match found for barcode data" msgstr "Treff funnet for strekkodedata" -#: barcodes/api.py:154 +#: barcodes/api.py:155 msgid "Must provide stockitem parameter" msgstr "Må oppgi lagervareparameter" -#: barcodes/api.py:161 +#: barcodes/api.py:162 msgid "No matching stock item found" msgstr "Ingen samsvarende lagervare funnet" -#: barcodes/api.py:191 +#: barcodes/api.py:193 msgid "Barcode already matches Stock Item" -msgstr "" +msgstr "Strekkoden samsvarer allerede med lagervare" -#: barcodes/api.py:195 +#: barcodes/api.py:197 msgid "Barcode already matches Stock Location" -msgstr "" +msgstr "Strekkode samsvarer allerede med lagerplassering" -#: barcodes/api.py:199 +#: barcodes/api.py:201 msgid "Barcode already matches Part" -msgstr "" +msgstr "Strekkode samsvarer allerede med delen" -#: barcodes/api.py:205 barcodes/api.py:217 +#: barcodes/api.py:207 barcodes/api.py:219 msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:223 +#: barcodes/api.py:225 msgid "Barcode associated with Stock Item" -msgstr "" +msgstr "Strekkode tilknyttet lagervare" -#: build/forms.py:36 build/models.py:1286 +#: build/forms.py:36 build/models.py:1293 #: build/templates/build/build_base.html:82 -#: build/templates/build/detail.html:35 common/models.py:1253 +#: build/templates/build/detail.html:35 common/models.py:1263 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/models.py:796 order/models.py:1207 order/serializers.py:810 +#: order/models.py:805 order/models.py:1229 order/serializers.py:816 #: order/templates/order/order_wizard/match_parts.html:30 -#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:145 -#: part/forms.py:161 part/forms.py:177 part/models.py:2629 +#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:144 +#: part/forms.py:160 part/forms.py:176 part/models.py:2636 #: part/templates/part/bom_upload/match_parts.html:31 -#: part/templates/part/detail.html:962 part/templates/part/detail.html:1048 +#: part/templates/part/detail.html:992 part/templates/part/detail.html:1078 #: part/templates/part/part_pricing.html:16 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 @@ -603,7 +604,7 @@ msgstr "" #: stock/templates/stock/item_base.html:181 #: stock/templates/stock/item_base.html:262 #: stock/templates/stock/item_base.html:270 -#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:555 +#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:567 #: templates/js/translated/build.js:295 templates/js/translated/build.js:495 #: templates/js/translated/build.js:689 templates/js/translated/build.js:699 #: templates/js/translated/build.js:1075 templates/js/translated/build.js:1422 @@ -611,23 +612,23 @@ msgstr "" #: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 #: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 #: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 -#: templates/js/translated/order.js:2150 templates/js/translated/part.js:900 -#: templates/js/translated/part.js:1855 templates/js/translated/part.js:1978 -#: templates/js/translated/part.js:2056 templates/js/translated/stock.js:383 -#: templates/js/translated/stock.js:580 templates/js/translated/stock.js:750 -#: templates/js/translated/stock.js:2519 templates/js/translated/stock.js:2621 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:906 +#: templates/js/translated/part.js:1862 templates/js/translated/part.js:1985 +#: templates/js/translated/part.js:2063 templates/js/translated/stock.js:391 +#: templates/js/translated/stock.js:588 templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2779 msgid "Quantity" -msgstr "" +msgstr "Antall" #: build/forms.py:37 msgid "Enter quantity for build output" -msgstr "" +msgstr "Angi antall for build utgang" -#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 -#: stock/serializers.py:314 templates/js/translated/stock.js:230 -#: templates/js/translated/stock.js:384 +#: build/forms.py:41 order/serializers.py:820 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:238 +#: templates/js/translated/stock.js:392 msgid "Serial Numbers" -msgstr "" +msgstr "Serienummer" #: build/forms.py:43 msgid "Enter serial numbers for build outputs" @@ -649,18 +650,18 @@ msgstr "" msgid "Confirm build cancellation" msgstr "" -#: build/models.py:133 +#: build/models.py:135 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:137 build/templates/build/build_base.html:9 +#: build/models.py:139 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:457 +#: templates/js/translated/build.js:457 templates/js/translated/stock.js:2290 msgid "Build Order" msgstr "" -#: build/models.py:138 build/templates/build/build_base.html:13 +#: build/models.py:140 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:92 #: order/templates/order/so_sidebar.html:13 @@ -670,40 +671,40 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:198 +#: build/models.py:200 msgid "Build Order Reference" msgstr "" -#: build/models.py:199 order/models.py:210 order/models.py:536 -#: order/models.py:803 part/models.py:2638 +#: build/models.py:201 order/models.py:213 order/models.py:541 +#: order/models.py:812 part/models.py:2645 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:547 templates/js/translated/build.js:1179 +#: templates/js/translated/bom.js:559 templates/js/translated/build.js:1179 #: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "" -#: build/models.py:210 +#: build/models.py:212 msgid "Brief description of the build" msgstr "" -#: build/models.py:219 build/templates/build/build_base.html:164 +#: build/models.py:221 build/templates/build/build_base.html:164 #: build/templates/build/detail.html:88 msgid "Parent Build" msgstr "" -#: build/models.py:220 +#: build/models.py:222 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:225 build/templates/build/build_base.html:77 +#: build/models.py:227 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:856 order/models.py:930 -#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 -#: part/models.py:2204 part/models.py:2220 part/models.py:2239 -#: part/models.py:2256 part/models.py:2358 part/models.py:2480 -#: part/models.py:2613 part/models.py:2920 part/serializers.py:658 +#: order/models.py:876 order/models.py:950 +#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:359 +#: part/models.py:2211 part/models.py:2227 part/models.py:2246 +#: part/models.py:2263 part/models.py:2365 part/models.py:2487 +#: part/models.py:2620 part/models.py:2927 part/serializers.py:658 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/set_category.html:13 @@ -713,205 +714,205 @@ msgstr "" #: templates/InvenTree/search.html:80 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 -#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:326 -#: templates/js/translated/bom.js:505 templates/js/translated/build.js:680 +#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:338 +#: templates/js/translated/bom.js:517 templates/js/translated/build.js:680 #: templates/js/translated/build.js:1048 templates/js/translated/build.js:1419 #: templates/js/translated/build.js:1687 templates/js/translated/company.js:492 #: templates/js/translated/company.js:749 templates/js/translated/order.js:84 #: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 #: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 -#: templates/js/translated/order.js:2128 templates/js/translated/part.js:977 -#: templates/js/translated/part.js:1058 templates/js/translated/part.js:1225 -#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:719 -#: templates/js/translated/stock.js:926 templates/js/translated/stock.js:1526 -#: templates/js/translated/stock.js:2609 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:984 +#: templates/js/translated/part.js:1065 templates/js/translated/part.js:1232 +#: templates/js/translated/stock.js:562 templates/js/translated/stock.js:727 +#: templates/js/translated/stock.js:934 templates/js/translated/stock.js:1534 +#: templates/js/translated/stock.js:2767 msgid "Part" msgstr "" -#: build/models.py:233 +#: build/models.py:235 msgid "Select part to build" msgstr "" -#: build/models.py:238 +#: build/models.py:240 msgid "Sales Order Reference" msgstr "" -#: build/models.py:242 +#: build/models.py:244 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1407 +#: build/models.py:249 templates/js/translated/build.js:1407 #: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "" -#: build/models.py:251 +#: build/models.py:253 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:256 +#: build/models.py:258 msgid "Destination Location" msgstr "" -#: build/models.py:260 +#: build/models.py:262 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:264 +#: build/models.py:266 msgid "Build Quantity" msgstr "" -#: build/models.py:267 +#: build/models.py:269 msgid "Number of stock items to build" msgstr "" -#: build/models.py:271 -msgid "Completed items" -msgstr "" - #: build/models.py:273 +msgid "Completed items" +msgstr "Fullførte elementer" + +#: build/models.py:275 msgid "Number of stock items which have been completed" -msgstr "" +msgstr "Antall lagervarer som er fullført" -#: build/models.py:277 part/templates/part/part_base.html:234 +#: build/models.py:279 part/templates/part/part_base.html:234 msgid "Build Status" -msgstr "" +msgstr "Byggstatus" -#: build/models.py:281 +#: build/models.py:283 msgid "Build status code" -msgstr "" +msgstr "Byggstatuskode" -#: build/models.py:285 stock/models.py:531 +#: build/models.py:287 stock/models.py:533 msgid "Batch Code" -msgstr "" +msgstr "Batch kode" -#: build/models.py:289 +#: build/models.py:291 msgid "Batch code for this build output" -msgstr "" +msgstr "Batch kode for denne build output" -#: build/models.py:292 order/models.py:126 part/models.py:967 +#: build/models.py:294 order/models.py:129 part/models.py:969 #: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" -msgstr "" +msgstr "Opprettelsesdato" -#: build/models.py:296 order/models.py:558 +#: build/models.py:298 order/models.py:563 msgid "Target completion date" -msgstr "" +msgstr "Forventet sluttdato" -#: build/models.py:297 +#: build/models.py:299 msgid "Target date for build completion. Build will be overdue after this date." -msgstr "" +msgstr "Forventet dato for ferdigstillelse. Build er forvalt etter denne datoen." -#: build/models.py:300 order/models.py:252 +#: build/models.py:302 order/models.py:255 #: templates/js/translated/build.js:1758 msgid "Completion Date" -msgstr "" +msgstr "Fullført dato" -#: build/models.py:306 +#: build/models.py:308 msgid "completed by" msgstr "" -#: build/models.py:314 templates/js/translated/build.js:1729 +#: build/models.py:316 templates/js/translated/build.js:1729 msgid "Issued by" msgstr "" -#: build/models.py:315 +#: build/models.py:317 msgid "User who issued this build order" msgstr "" -#: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:140 +#: build/models.py:325 build/templates/build/build_base.html:185 +#: build/templates/build/detail.html:116 order/models.py:143 #: order/templates/order/order_base.html:170 -#: order/templates/order/sales_order_base.html:182 part/models.py:971 +#: order/templates/order/sales_order_base.html:182 part/models.py:973 #: report/templates/report/inventree_build_order_base.html:159 #: templates/js/translated/build.js:1741 templates/js/translated/order.js:864 msgid "Responsible" msgstr "" -#: build/models.py:324 +#: build/models.py:326 msgid "User responsible for this build order" msgstr "" -#: build/models.py:329 build/templates/build/detail.html:102 +#: build/models.py:331 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:525 +#: part/templates/part/part_base.html:354 stock/models.py:527 #: stock/templates/stock/item_base.html:373 msgid "External Link" msgstr "" -#: build/models.py:334 build/serializers.py:201 +#: build/models.py:336 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:144 order/models.py:805 order/models.py:1051 +#: order/models.py:147 order/models.py:814 order/models.py:1071 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/models.py:956 -#: part/templates/part/detail.html:120 part/templates/part/part_sidebar.html:50 +#: order/templates/order/so_sidebar.html:17 part/models.py:958 +#: part/templates/part/detail.html:137 part/templates/part/part_sidebar.html:54 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:597 -#: stock/models.py:1867 stock/models.py:1973 stock/serializers.py:332 -#: stock/serializers.py:639 stock/serializers.py:737 stock/serializers.py:869 -#: stock/templates/stock/stock_sidebar.html:21 -#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:711 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:599 +#: stock/models.py:1895 stock/models.py:2001 stock/serializers.py:332 +#: stock/serializers.py:640 stock/serializers.py:738 stock/serializers.py:870 +#: stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:723 #: templates/js/translated/company.js:845 templates/js/translated/order.js:1149 #: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 -#: templates/js/translated/stock.js:1309 templates/js/translated/stock.js:1795 +#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1803 msgid "Notes" msgstr "" -#: build/models.py:335 +#: build/models.py:337 msgid "Extra build notes" msgstr "" -#: build/models.py:710 +#: build/models.py:717 msgid "No build output specified" msgstr "" -#: build/models.py:713 +#: build/models.py:720 msgid "Build output is already completed" msgstr "" -#: build/models.py:716 +#: build/models.py:723 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1108 +#: build/models.py:1115 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1117 +#: build/models.py:1124 #, python-brace-format msgid "Allocated quantity ({q}) must not execed available stock quantity ({a})" msgstr "" -#: build/models.py:1127 +#: build/models.py:1134 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:1167 +#: build/models.py:1140 order/models.py:1189 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1139 +#: build/models.py:1146 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1196 +#: build/models.py:1203 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1256 stock/templates/stock/item_base.html:345 +#: build/models.py:1263 stock/templates/stock/item_base.html:345 #: templates/InvenTree/search.html:137 templates/js/translated/build.js:1660 #: templates/navbar.html:35 msgid "Build" msgstr "" -#: build/models.py:1257 +#: build/models.py:1264 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1273 build/serializers.py:388 order/serializers.py:690 -#: order/serializers.py:708 stock/serializers.py:577 stock/serializers.py:695 +#: build/models.py:1280 build/serializers.py:388 order/serializers.py:696 +#: order/serializers.py:714 stock/serializers.py:578 stock/serializers.py:696 #: stock/templates/stock/item_base.html:9 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:367 @@ -920,24 +921,24 @@ msgstr "" #: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 #: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 #: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 -#: templates/js/translated/stock.js:555 templates/js/translated/stock.js:720 -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:563 templates/js/translated/stock.js:728 +#: templates/js/translated/stock.js:2628 msgid "Stock Item" msgstr "" -#: build/models.py:1274 +#: build/models.py:1281 msgid "Source stock item" msgstr "" -#: build/models.py:1287 +#: build/models.py:1294 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1295 +#: build/models.py:1302 msgid "Install into" msgstr "" -#: build/models.py:1296 +#: build/models.py:1303 msgid "Destination stock item" msgstr "" @@ -962,16 +963,16 @@ msgid "This build output is not fully allocated" msgstr "" #: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 -#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:730 -#: stock/serializers.py:971 stock/templates/stock/item_base.html:313 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:731 +#: stock/serializers.py:972 stock/templates/stock/item_base.html:313 #: templates/js/translated/barcode.js:384 #: templates/js/translated/barcode.js:557 templates/js/translated/build.js:480 #: templates/js/translated/build.js:1087 templates/js/translated/order.js:508 #: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 #: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 -#: templates/js/translated/part.js:179 templates/js/translated/stock.js:556 -#: templates/js/translated/stock.js:721 templates/js/translated/stock.js:928 -#: templates/js/translated/stock.js:1676 templates/js/translated/stock.js:2411 +#: templates/js/translated/part.js:179 templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:729 templates/js/translated/stock.js:936 +#: templates/js/translated/stock.js:1684 templates/js/translated/stock.js:2569 msgid "Location" msgstr "" @@ -980,12 +981,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:552 +#: build/templates/build/detail.html:63 order/models.py:557 #: order/serializers.py:247 stock/templates/stock/item_base.html:187 #: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1716 #: templates/js/translated/order.js:591 templates/js/translated/order.js:840 -#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1651 -#: templates/js/translated/stock.js:2488 templates/js/translated/stock.js:2637 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1659 +#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2795 msgid "Status" msgstr "" @@ -1021,8 +1022,8 @@ msgstr "" msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:313 build/serializers.py:362 part/models.py:2753 -#: part/models.py:2912 +#: build/serializers.py:313 build/serializers.py:362 part/models.py:2760 +#: part/models.py:2919 msgid "BOM Item" msgstr "" @@ -1038,16 +1039,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:394 stock/serializers.py:584 +#: build/serializers.py:394 stock/serializers.py:585 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:408 order/models.py:277 order/serializers.py:240 -#: stock/models.py:365 stock/models.py:1077 stock/serializers.py:305 +#: build/serializers.py:408 order/models.py:280 order/serializers.py:240 +#: stock/models.py:367 stock/models.py:1105 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:450 order/serializers.py:741 +#: build/serializers.py:450 order/serializers.py:747 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1060,7 +1061,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:491 order/serializers.py:984 +#: build/serializers.py:491 order/serializers.py:990 msgid "Allocation items must be provided" msgstr "" @@ -1164,13 +1165,13 @@ msgid "Completed" msgstr "" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:927 -#: order/models.py:1023 order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:947 +#: order/models.py:1043 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:307 -#: templates/js/translated/order.js:1218 +#: templates/js/translated/order.js:1218 templates/js/translated/stock.js:2304 msgid "Sales Order" msgstr "" @@ -1224,7 +1225,7 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:878 stock/forms.py:136 +#: build/templates/build/detail.html:50 order/models.py:898 stock/forms.py:136 #: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1239,7 +1240,7 @@ msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:331 -#: templates/js/translated/stock.js:1665 templates/js/translated/stock.js:2644 +#: templates/js/translated/stock.js:1673 templates/js/translated/stock.js:2802 #: templates/js/translated/table_filters.js:151 #: templates/js/translated/table_filters.js:238 msgid "Batch" @@ -1343,9 +1344,9 @@ msgstr "" #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 #: order/templates/order/sales_order_detail.html:107 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:196 -#: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 -#: stock/templates/stock/stock_sidebar.html:19 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:213 +#: part/templates/part/part_sidebar.html:52 stock/templates/stock/item.html:112 +#: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" @@ -1360,8 +1361,8 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:108 #: order/templates/order/sales_order_detail.html:127 #: order/templates/order/sales_order_detail.html:186 -#: part/templates/part/detail.html:124 stock/templates/stock/item.html:115 -#: stock/templates/stock/item.html:205 +#: part/templates/part/detail.html:141 stock/templates/stock/item.html:132 +#: stock/templates/stock/item.html:235 msgid "Edit Notes" msgstr "" @@ -1373,7 +1374,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:303 +#: build/templates/build/index.html:18 part/templates/part/detail.html:320 msgid "New Build Order" msgstr "" @@ -1453,23 +1454,23 @@ msgstr "" msgid "Delete Build Order" msgstr "" -#: common/files.py:67 +#: common/files.py:65 msgid "Unsupported file format: {ext.upper()}" msgstr "" -#: common/files.py:69 +#: common/files.py:67 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:74 +#: common/files.py:72 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:76 +#: common/files.py:74 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:78 +#: common/files.py:76 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1490,740 +1491,828 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:344 common/models.py:998 common/models.py:1206 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:352 +msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:346 +#: common/models.py:354 msgid "Settings value" msgstr "" -#: common/models.py:380 +#: common/models.py:388 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:400 +#: common/models.py:408 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:411 +#: common/models.py:419 msgid "Value must be an integer value" msgstr "" -#: common/models.py:434 +#: common/models.py:442 msgid "Key string must be unique" msgstr "" -#: common/models.py:553 +#: common/models.py:561 msgid "No group" msgstr "" -#: common/models.py:595 +#: common/models.py:603 msgid "Restart required" msgstr "" -#: common/models.py:596 +#: common/models.py:604 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:603 +#: common/models.py:611 msgid "InvenTree Instance Name" msgstr "" -#: common/models.py:605 +#: common/models.py:613 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:609 +#: common/models.py:617 msgid "Use instance name" msgstr "" -#: common/models.py:610 +#: common/models.py:618 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:616 company/models.py:100 company/models.py:101 +#: common/models.py:624 company/models.py:100 company/models.py:101 msgid "Company name" msgstr "" -#: common/models.py:617 +#: common/models.py:625 msgid "Internal company name" msgstr "" -#: common/models.py:622 +#: common/models.py:630 msgid "Base URL" msgstr "" -#: common/models.py:623 +#: common/models.py:631 msgid "Base URL for server instance" msgstr "" -#: common/models.py:629 +#: common/models.py:637 msgid "Default Currency" msgstr "" -#: common/models.py:630 +#: common/models.py:638 msgid "Default currency" msgstr "" -#: common/models.py:636 +#: common/models.py:644 msgid "Download from URL" msgstr "" -#: common/models.py:637 +#: common/models.py:645 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:643 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:651 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:644 +#: common/models.py:652 msgid "Enable barcode scanner support" msgstr "" -#: common/models.py:650 +#: common/models.py:658 msgid "IPN Regex" msgstr "" -#: common/models.py:651 +#: common/models.py:659 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:655 +#: common/models.py:663 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:656 +#: common/models.py:664 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:662 +#: common/models.py:670 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:663 +#: common/models.py:671 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:669 +#: common/models.py:677 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:670 +#: common/models.py:678 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:676 +#: common/models.py:684 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:677 +#: common/models.py:685 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:683 +#: common/models.py:691 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:684 +#: common/models.py:692 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:690 +#: common/models.py:698 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:691 +#: common/models.py:699 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:697 part/models.py:2482 report/models.py:187 +#: common/models.py:705 part/models.py:2489 report/models.py:187 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:422 msgid "Template" msgstr "" -#: common/models.py:698 +#: common/models.py:706 msgid "Parts are templates by default" msgstr "" -#: common/models.py:704 part/models.py:919 templates/js/translated/bom.js:1068 +#: common/models.py:712 part/models.py:921 templates/js/translated/bom.js:1082 #: templates/js/translated/table_filters.js:168 #: templates/js/translated/table_filters.js:434 msgid "Assembly" msgstr "" -#: common/models.py:705 +#: common/models.py:713 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:711 part/models.py:925 +#: common/models.py:719 part/models.py:927 #: templates/js/translated/table_filters.js:438 msgid "Component" msgstr "" -#: common/models.py:712 +#: common/models.py:720 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:718 part/models.py:936 +#: common/models.py:726 part/models.py:938 msgid "Purchaseable" msgstr "" -#: common/models.py:719 +#: common/models.py:727 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:725 part/models.py:941 +#: common/models.py:733 part/models.py:943 #: templates/js/translated/table_filters.js:446 msgid "Salable" msgstr "" -#: common/models.py:726 +#: common/models.py:734 msgid "Parts are salable by default" msgstr "" -#: common/models.py:732 part/models.py:931 +#: common/models.py:740 part/models.py:933 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 #: templates/js/translated/table_filters.js:450 msgid "Trackable" msgstr "" -#: common/models.py:733 +#: common/models.py:741 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:739 part/models.py:951 +#: common/models.py:747 part/models.py:953 #: part/templates/part/part_base.html:147 #: templates/js/translated/table_filters.js:42 msgid "Virtual" msgstr "" -#: common/models.py:740 +#: common/models.py:748 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:746 +#: common/models.py:754 msgid "Show Import in Views" msgstr "" -#: common/models.py:747 +#: common/models.py:755 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:753 +#: common/models.py:761 msgid "Show Price in Forms" msgstr "" -#: common/models.py:754 +#: common/models.py:762 msgid "Display part price in some forms" msgstr "" -#: common/models.py:765 +#: common/models.py:773 msgid "Show Price in BOM" msgstr "" -#: common/models.py:766 +#: common/models.py:774 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:772 +#: common/models.py:780 msgid "Show related parts" msgstr "" -#: common/models.py:773 +#: common/models.py:781 msgid "Display related parts for a part" msgstr "" -#: common/models.py:779 +#: common/models.py:787 msgid "Create initial stock" msgstr "" -#: common/models.py:780 +#: common/models.py:788 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:786 +#: common/models.py:794 msgid "Internal Prices" msgstr "" -#: common/models.py:787 +#: common/models.py:795 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:793 +#: common/models.py:801 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:794 +#: common/models.py:802 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:800 +#: common/models.py:808 msgid "Part Name Display Format" msgstr "" -#: common/models.py:801 +#: common/models.py:809 msgid "Format to display the part name" msgstr "" -#: common/models.py:808 +#: common/models.py:816 msgid "Enable Reports" msgstr "" -#: common/models.py:809 +#: common/models.py:817 msgid "Enable generation of reports" msgstr "" -#: common/models.py:815 templates/stats.html:25 +#: common/models.py:823 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:816 +#: common/models.py:824 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:822 +#: common/models.py:830 msgid "Page Size" msgstr "" -#: common/models.py:823 +#: common/models.py:831 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:833 +#: common/models.py:841 msgid "Test Reports" msgstr "" -#: common/models.py:834 +#: common/models.py:842 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:840 +#: common/models.py:848 msgid "Stock Expiry" msgstr "" -#: common/models.py:841 +#: common/models.py:849 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:847 +#: common/models.py:855 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:848 +#: common/models.py:856 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:854 +#: common/models.py:862 msgid "Stock Stale Time" msgstr "" -#: common/models.py:855 +#: common/models.py:863 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:857 +#: common/models.py:865 msgid "days" msgstr "" -#: common/models.py:862 +#: common/models.py:870 msgid "Build Expired Stock" msgstr "" -#: common/models.py:863 +#: common/models.py:871 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:869 +#: common/models.py:877 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:870 +#: common/models.py:878 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:876 -msgid "Group by Part" -msgstr "" - -#: common/models.py:877 -msgid "Group stock items by part reference in table views" -msgstr "" - -#: common/models.py:883 +#: common/models.py:884 msgid "Build Order Reference Prefix" msgstr "" -#: common/models.py:884 +#: common/models.py:885 msgid "Prefix value for build order reference" msgstr "" -#: common/models.py:889 +#: common/models.py:890 msgid "Build Order Reference Regex" msgstr "" -#: common/models.py:890 +#: common/models.py:891 msgid "Regular expression pattern for matching build order reference" msgstr "" -#: common/models.py:894 +#: common/models.py:895 msgid "Sales Order Reference Prefix" msgstr "" -#: common/models.py:895 +#: common/models.py:896 msgid "Prefix value for sales order reference" msgstr "" -#: common/models.py:900 +#: common/models.py:901 msgid "Purchase Order Reference Prefix" msgstr "" -#: common/models.py:901 +#: common/models.py:902 msgid "Prefix value for purchase order reference" msgstr "" -#: common/models.py:907 +#: common/models.py:908 msgid "Enable password forgot" msgstr "" -#: common/models.py:908 +#: common/models.py:909 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:913 +#: common/models.py:914 msgid "Enable registration" msgstr "" -#: common/models.py:914 +#: common/models.py:915 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:919 +#: common/models.py:920 msgid "Enable SSO" msgstr "" -#: common/models.py:920 +#: common/models.py:921 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:925 +#: common/models.py:926 msgid "Email required" msgstr "" -#: common/models.py:926 +#: common/models.py:927 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:931 +#: common/models.py:932 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:932 +#: common/models.py:933 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:937 +#: common/models.py:938 msgid "Mail twice" msgstr "" -#: common/models.py:938 +#: common/models.py:939 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:943 +#: common/models.py:944 msgid "Password twice" msgstr "" -#: common/models.py:944 +#: common/models.py:945 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:949 +#: common/models.py:950 msgid "Group on signup" msgstr "" -#: common/models.py:950 +#: common/models.py:951 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:955 +#: common/models.py:956 msgid "Enforce MFA" msgstr "" -#: common/models.py:956 +#: common/models.py:957 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:961 +#: common/models.py:964 msgid "Enable URL integration" msgstr "" -#: common/models.py:962 +#: common/models.py:965 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:968 +#: common/models.py:971 msgid "Enable navigation integration" msgstr "" -#: common/models.py:969 +#: common/models.py:972 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:975 +#: common/models.py:978 msgid "Enable app integration" msgstr "" -#: common/models.py:976 +#: common/models.py:979 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:982 +#: common/models.py:985 msgid "Enable schedule integration" msgstr "" -#: common/models.py:983 +#: common/models.py:986 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1029 +#: common/models.py:992 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:993 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:1008 common/models.py:1216 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1039 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1030 +#: common/models.py:1040 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1035 +#: common/models.py:1045 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1036 +#: common/models.py:1046 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1041 +#: common/models.py:1051 msgid "Show latest parts" msgstr "" -#: common/models.py:1042 +#: common/models.py:1052 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1047 +#: common/models.py:1057 msgid "Recent Part Count" msgstr "" -#: common/models.py:1048 +#: common/models.py:1058 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1054 +#: common/models.py:1064 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1055 +#: common/models.py:1065 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1060 +#: common/models.py:1070 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1061 +#: common/models.py:1071 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1066 +#: common/models.py:1076 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1067 +#: common/models.py:1077 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1072 +#: common/models.py:1082 msgid "Show low stock" msgstr "" -#: common/models.py:1073 +#: common/models.py:1083 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1078 +#: common/models.py:1088 msgid "Show depleted stock" msgstr "" -#: common/models.py:1079 +#: common/models.py:1089 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1084 +#: common/models.py:1094 msgid "Show needed stock" msgstr "" -#: common/models.py:1085 +#: common/models.py:1095 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1090 +#: common/models.py:1100 msgid "Show expired stock" msgstr "" -#: common/models.py:1091 +#: common/models.py:1101 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1096 +#: common/models.py:1106 msgid "Show stale stock" msgstr "" -#: common/models.py:1097 +#: common/models.py:1107 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1102 +#: common/models.py:1112 msgid "Show pending builds" msgstr "" -#: common/models.py:1103 +#: common/models.py:1113 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1108 +#: common/models.py:1118 msgid "Show overdue builds" msgstr "" -#: common/models.py:1109 +#: common/models.py:1119 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1114 +#: common/models.py:1124 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1115 +#: common/models.py:1125 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1120 +#: common/models.py:1130 msgid "Show overdue POs" msgstr "" -#: common/models.py:1121 +#: common/models.py:1131 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1126 +#: common/models.py:1136 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1127 +#: common/models.py:1137 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1132 +#: common/models.py:1142 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1133 +#: common/models.py:1143 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1139 +#: common/models.py:1149 msgid "Inline label display" msgstr "" -#: common/models.py:1140 +#: common/models.py:1150 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1146 +#: common/models.py:1156 msgid "Inline report display" msgstr "" -#: common/models.py:1147 +#: common/models.py:1157 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1153 +#: common/models.py:1163 msgid "Search Preview Results" msgstr "" -#: common/models.py:1154 +#: common/models.py:1164 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1160 +#: common/models.py:1170 msgid "Search Show Stock" msgstr "" -#: common/models.py:1161 +#: common/models.py:1171 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1167 +#: common/models.py:1177 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1168 +#: common/models.py:1178 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1174 +#: common/models.py:1184 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1175 +#: common/models.py:1185 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1181 +#: common/models.py:1191 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1182 +#: common/models.py:1192 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1188 +#: common/models.py:1198 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1189 +#: common/models.py:1199 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1254 company/forms.py:43 +#: common/models.py:1264 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1261 company/serializers.py:264 +#: common/models.py:1271 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 -#: templates/js/translated/part.js:909 templates/js/translated/part.js:1860 +#: templates/js/translated/part.js:915 templates/js/translated/part.js:1867 msgid "Price" msgstr "" -#: common/models.py:1262 +#: common/models.py:1272 msgid "Unit price at specified quantity" msgstr "" +#: common/models.py:1429 common/models.py:1568 +msgid "Endpoint" +msgstr "" + +#: common/models.py:1430 +msgid "Endpoint at which this webhook is received" +msgstr "" + +#: common/models.py:1439 +msgid "Name for this webhook" +msgstr "" + +#: common/models.py:1444 part/models.py:948 plugin/models.py:46 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:96 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:417 +msgid "Active" +msgstr "" + +#: common/models.py:1445 +msgid "Is this webhook active" +msgstr "" + +#: common/models.py:1459 +msgid "Token" +msgstr "" + +#: common/models.py:1460 +msgid "Token for access" +msgstr "" + +#: common/models.py:1467 +msgid "Secret" +msgstr "" + +#: common/models.py:1468 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:1535 +msgid "Message ID" +msgstr "" + +#: common/models.py:1536 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:1544 +msgid "Host" +msgstr "" + +#: common/models.py:1545 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:1552 +msgid "Header" +msgstr "" + +#: common/models.py:1553 +msgid "Header of this message" +msgstr "" + +#: common/models.py:1559 +msgid "Body" +msgstr "" + +#: common/models.py:1560 +msgid "Body of this message" +msgstr "" + +#: common/models.py:1569 +msgid "Endpoint on which this message was received" +msgstr "" + +#: common/models.py:1574 +msgid "Worked on" +msgstr "" + +#: common/models.py:1575 +msgid "Was the work on this message finished?" +msgstr "" + #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 #: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 -#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 -#: part/views.py:764 +#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:213 +#: part/views.py:773 msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 #: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 -#: part/views.py:765 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:214 +#: part/views.py:774 msgid "Match Fields" msgstr "" @@ -2315,7 +2404,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:139 part/models.py:838 +#: company/models.py:139 part/models.py:840 msgid "Image" msgstr "" @@ -2352,8 +2441,8 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:469 -#: stock/templates/stock/item_base.html:142 +#: company/models.py:320 company/models.py:535 stock/models.py:471 +#: stock/templates/stock/item_base.html:142 templates/js/translated/bom.js:328 msgid "Base Part" msgstr "" @@ -2380,7 +2469,7 @@ msgstr "" #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:533 #: templates/js/translated/company.js:818 templates/js/translated/order.js:1038 -#: templates/js/translated/part.js:245 templates/js/translated/part.js:889 +#: templates/js/translated/part.js:245 templates/js/translated/part.js:895 msgid "MPN" msgstr "" @@ -2409,8 +2498,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1960 templates/js/translated/company.js:647 -#: templates/js/translated/part.js:709 templates/js/translated/stock.js:1296 +#: stock/models.py:1988 templates/js/translated/company.js:647 +#: templates/js/translated/part.js:715 templates/js/translated/stock.js:1304 msgid "Value" msgstr "" @@ -2418,10 +2507,10 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:429 part/models.py:913 part/models.py:2450 +#: company/models.py:429 part/models.py:915 part/models.py:2457 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:284 -#: templates/js/translated/company.js:653 templates/js/translated/part.js:715 +#: templates/InvenTree/settings/settings.html:287 +#: templates/js/translated/company.js:653 templates/js/translated/part.js:721 msgid "Units" msgstr "" @@ -2434,13 +2523,13 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:224 +#: company/templates/company/supplier_part.html:87 order/models.py:227 #: order/templates/order/order_base.html:112 -#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 -#: part/bom.py:247 stock/templates/stock/item_base.html:397 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:237 +#: part/bom.py:265 stock/templates/stock/item_base.html:397 #: templates/js/translated/company.js:337 #: templates/js/translated/company.js:774 templates/js/translated/order.js:823 -#: templates/js/translated/part.js:215 templates/js/translated/part.js:857 +#: templates/js/translated/part.js:215 templates/js/translated/part.js:863 #: templates/js/translated/table_filters.js:393 msgid "Supplier" msgstr "" @@ -2450,8 +2539,8 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 -#: templates/js/translated/part.js:226 templates/js/translated/part.js:875 +#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1025 +#: templates/js/translated/part.js:226 templates/js/translated/part.js:881 msgid "SKU" msgstr "" @@ -2472,22 +2561,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:576 company/templates/company/supplier_part.html:119 -#: part/models.py:2641 report/templates/report/inventree_po_report.html:93 +#: part/models.py:2648 report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "base cost" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:493 stock/templates/stock/item_base.html:338 -#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1791 +#: stock/models.py:495 stock/templates/stock/item_base.html:338 +#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1799 msgid "Packaging" msgstr "" @@ -2495,7 +2584,7 @@ msgstr "" msgid "Part packaging" msgstr "" -#: company/models.py:584 part/models.py:1781 +#: company/models.py:584 part/models.py:1783 msgid "multiple" msgstr "" @@ -2554,12 +2643,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:547 -#: order/templates/order/sales_order_base.html:115 stock/models.py:512 -#: stock/models.py:513 stock/serializers.py:625 +#: company/templates/company/company_base.html:83 order/models.py:552 +#: order/templates/order/sales_order_base.html:115 stock/models.py:514 +#: stock/models.py:515 stock/serializers.py:626 #: stock/templates/stock/item_base.html:290 #: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 -#: templates/js/translated/stock.js:2452 +#: templates/js/translated/stock.js:2610 #: templates/js/translated/table_filters.js:397 msgid "Customer" msgstr "" @@ -2590,7 +2679,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:118 -#: part/templates/part/detail.html:336 +#: part/templates/part/detail.html:353 msgid "New Supplier Part" msgstr "" @@ -2598,8 +2687,8 @@ msgstr "" #: company/templates/company/detail.html:79 #: company/templates/company/manufacturer_part.html:127 #: company/templates/company/manufacturer_part.html:156 -#: part/templates/part/category.html:171 part/templates/part/detail.html:345 -#: part/templates/part/detail.html:374 +#: part/templates/part/category.html:171 part/templates/part/detail.html:362 +#: part/templates/part/detail.html:391 msgid "Options" msgstr "" @@ -2627,7 +2716,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:67 part/templates/part/detail.html:364 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:381 msgid "New Manufacturer Part" msgstr "" @@ -2641,7 +2730,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:68 part/templates/part/part_sidebar.html:33 +#: part/templates/part/detail.html:85 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197 #: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 @@ -2663,7 +2752,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:91 part/templates/part/part_sidebar.html:37 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:41 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217 #: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 @@ -2691,13 +2780,13 @@ msgstr "" #: company/templates/company/detail.html:384 #: company/templates/company/manufacturer_part.html:215 -#: part/templates/part/detail.html:418 +#: part/templates/part/detail.html:435 msgid "Delete Supplier Parts?" msgstr "" #: company/templates/company/detail.html:385 #: company/templates/company/manufacturer_part.html:216 -#: part/templates/part/detail.html:419 +#: part/templates/part/detail.html:436 msgid "All selected supplier parts will be deleted" msgstr "" @@ -2714,7 +2803,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:34 #: company/templates/company/supplier_part.html:159 -#: part/templates/part/detail.html:71 part/templates/part/part_base.html:76 +#: part/templates/part/detail.html:88 part/templates/part/part_base.html:76 msgid "Order part" msgstr "" @@ -2735,34 +2824,34 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 -#: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 +#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:163 #: templates/InvenTree/search.html:188 templates/navbar.html:45 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:129 -#: part/templates/part/detail.html:347 +#: part/templates/part/detail.html:364 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:129 #: company/templates/company/manufacturer_part.html:158 #: company/templates/company/manufacturer_part.html:254 -#: part/templates/part/detail.html:347 part/templates/part/detail.html:376 +#: part/templates/part/detail.html:364 part/templates/part/detail.html:393 #: templates/js/translated/company.js:426 templates/js/translated/helpers.js:31 -#: users/models.py:210 +#: users/models.py:212 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:143 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:17 -#: part/templates/part/detail.html:170 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:187 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:147 -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:192 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part.html:65 msgid "New Parameter" @@ -2773,7 +2862,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:191 -#: part/templates/part/detail.html:862 +#: part/templates/part/detail.html:892 msgid "Add Parameter" msgstr "" @@ -2802,9 +2891,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:477 +#: company/templates/company/supplier_part.html:24 stock/models.py:479 #: stock/templates/stock/item_base.html:402 -#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1748 +#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1756 msgid "Supplier Part" msgstr "" @@ -2830,7 +2919,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:167 -#: templates/js/translated/stock.js:360 +#: templates/js/translated/stock.js:368 msgid "New Stock Item" msgstr "" @@ -2840,7 +2929,7 @@ msgid "Supplier Part Orders" msgstr "" #: company/templates/company/supplier_part.html:160 -#: part/templates/part/detail.html:72 +#: part/templates/part/detail.html:89 msgid "Order Part" msgstr "" @@ -2851,7 +2940,7 @@ msgstr "" #: company/templates/company/supplier_part.html:184 #: company/templates/company/supplier_part.html:290 -#: part/templates/part/prices.html:271 part/views.py:1619 +#: part/templates/part/prices.html:271 part/views.py:1628 msgid "Add Price Break" msgstr "" @@ -2859,11 +2948,11 @@ msgstr "" msgid "No price break information found" msgstr "" -#: company/templates/company/supplier_part.html:224 part/views.py:1681 +#: company/templates/company/supplier_part.html:224 part/views.py:1690 msgid "Delete Price Break" msgstr "" -#: company/templates/company/supplier_part.html:238 part/views.py:1667 +#: company/templates/company/supplier_part.html:238 part/views.py:1676 msgid "Edit Price Break" msgstr "" @@ -2881,10 +2970,10 @@ msgstr "" #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:150 #: templates/InvenTree/settings/sidebar.html:41 -#: templates/js/translated/bom.js:328 templates/js/translated/part.js:489 -#: templates/js/translated/part.js:624 templates/js/translated/part.js:1118 -#: templates/js/translated/part.js:1279 templates/js/translated/stock.js:927 -#: templates/js/translated/stock.js:1580 templates/navbar.html:28 +#: templates/js/translated/bom.js:340 templates/js/translated/part.js:495 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1125 +#: templates/js/translated/part.js:1286 templates/js/translated/stock.js:935 +#: templates/js/translated/stock.js:1588 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2907,8 +2996,8 @@ msgstr "" #: stock/templates/stock/location.html:151 #: stock/templates/stock/location.html:163 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2351 -#: templates/stats.html:93 templates/stats.html:102 users/models.py:43 +#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2509 +#: templates/stats.html:105 templates/stats.html:114 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2937,20 +3026,20 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:129 part/views.py:584 +#: company/views.py:129 part/views.py:593 msgid "Download Image" msgstr "" -#: company/views.py:158 part/views.py:616 +#: company/views.py:158 part/views.py:625 msgid "Image size exceeds maximum allowable size for download" msgstr "" -#: company/views.py:165 part/views.py:623 +#: company/views.py:165 part/views.py:632 #, python-brace-format msgid "Invalid response: {code}" msgstr "" -#: company/views.py:174 part/views.py:632 +#: company/views.py:174 part/views.py:641 msgid "Supplied URL is not a valid image file" msgstr "" @@ -3036,282 +3125,282 @@ msgstr "" msgid "Cancel order" msgstr "" -#: order/models.py:122 +#: order/models.py:125 msgid "Order description" msgstr "" -#: order/models.py:124 +#: order/models.py:127 msgid "Link to external page" msgstr "" -#: order/models.py:132 +#: order/models.py:135 msgid "Created By" msgstr "" -#: order/models.py:139 +#: order/models.py:142 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:144 +#: order/models.py:147 msgid "Order notes" msgstr "" -#: order/models.py:211 order/models.py:537 +#: order/models.py:214 order/models.py:542 msgid "Order reference" msgstr "" -#: order/models.py:216 order/models.py:552 +#: order/models.py:219 order/models.py:557 msgid "Purchase order status" msgstr "" -#: order/models.py:225 +#: order/models.py:228 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:228 order/templates/order/order_base.html:118 +#: order/models.py:231 order/templates/order/order_base.html:118 #: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:228 +#: order/models.py:231 msgid "Supplier order reference code" msgstr "" -#: order/models.py:235 +#: order/models.py:238 msgid "received by" msgstr "" -#: order/models.py:240 +#: order/models.py:243 msgid "Issue Date" msgstr "" -#: order/models.py:241 +#: order/models.py:244 msgid "Date order was issued" msgstr "" -#: order/models.py:246 +#: order/models.py:249 msgid "Target Delivery Date" msgstr "" -#: order/models.py:247 +#: order/models.py:250 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:253 +#: order/models.py:256 msgid "Date order was completed" msgstr "" -#: order/models.py:282 +#: order/models.py:285 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:411 -msgid "Quantity must be an integer" -msgstr "" - -#: order/models.py:415 +#: order/models.py:420 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:548 +#: order/models.py:553 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer Reference " msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer order reference code" msgstr "" -#: order/models.py:559 +#: order/models.py:564 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:562 order/models.py:1028 +#: order/models.py:567 order/models.py:1048 #: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:569 +#: order/models.py:574 msgid "shipped by" msgstr "" -#: order/models.py:635 +#: order/models.py:640 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:639 +#: order/models.py:644 msgid "Only a pending order can be marked as complete" msgstr "" -#: order/models.py:642 +#: order/models.py:647 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:645 +#: order/models.py:650 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:797 +#: order/models.py:806 msgid "Item quantity" msgstr "" -#: order/models.py:803 +#: order/models.py:812 msgid "Line item reference" msgstr "" -#: order/models.py:805 +#: order/models.py:814 msgid "Line item notes" msgstr "" -#: order/models.py:835 order/models.py:926 order/models.py:1022 -#: templates/js/translated/order.js:1820 +#: order/models.py:842 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:855 order/models.py:946 order/models.py:1042 +#: templates/js/translated/order.js:1820 templates/js/translated/stock.js:2271 msgid "Order" msgstr "" -#: order/models.py:836 order/templates/order/order_base.html:9 +#: order/models.py:856 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:352 -#: templates/js/translated/order.js:801 templates/js/translated/part.js:832 -#: templates/js/translated/stock.js:1725 templates/js/translated/stock.js:2433 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:838 +#: templates/js/translated/stock.js:1733 templates/js/translated/stock.js:2591 msgid "Purchase Order" msgstr "" -#: order/models.py:857 +#: order/models.py:877 msgid "Supplier part" msgstr "" -#: order/models.py:864 order/templates/order/order_base.html:163 +#: order/models.py:884 order/templates/order/order_base.html:163 #: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 -#: templates/js/translated/part.js:904 templates/js/translated/part.js:930 +#: templates/js/translated/part.js:910 templates/js/translated/part.js:937 #: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:865 +#: order/models.py:885 msgid "Number of items received" msgstr "" -#: order/models.py:872 part/templates/part/prices.html:176 stock/models.py:606 +#: order/models.py:892 part/templates/part/prices.html:176 stock/models.py:608 #: stock/serializers.py:170 stock/templates/stock/item_base.html:359 -#: templates/js/translated/stock.js:1779 +#: templates/js/translated/stock.js:1787 msgid "Purchase Price" msgstr "" -#: order/models.py:873 +#: order/models.py:893 msgid "Unit purchase price" msgstr "" -#: order/models.py:881 +#: order/models.py:901 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:936 part/templates/part/part_pricing.html:112 +#: order/models.py:956 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:937 +#: order/models.py:957 msgid "Unit sale price" msgstr "" -#: order/models.py:942 +#: order/models.py:962 msgid "Shipped quantity" msgstr "" -#: order/models.py:1029 +#: order/models.py:1049 msgid "Date of shipment" msgstr "" -#: order/models.py:1036 +#: order/models.py:1056 msgid "Checked By" msgstr "" -#: order/models.py:1037 +#: order/models.py:1057 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1045 +#: order/models.py:1065 msgid "Shipment number" msgstr "" -#: order/models.py:1052 +#: order/models.py:1072 msgid "Shipment notes" msgstr "" -#: order/models.py:1059 +#: order/models.py:1079 msgid "Tracking Number" msgstr "" -#: order/models.py:1060 +#: order/models.py:1080 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1070 +#: order/models.py:1090 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1073 +#: order/models.py:1093 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1149 order/models.py:1151 +#: order/models.py:1171 order/models.py:1173 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1155 +#: order/models.py:1177 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1157 +#: order/models.py:1179 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1160 +#: order/models.py:1182 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1164 +#: order/models.py:1186 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:1170 order/serializers.py:734 +#: order/models.py:1192 order/serializers.py:740 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1173 +#: order/models.py:1195 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1174 +#: order/models.py:1196 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1182 +#: order/models.py:1204 msgid "Line" msgstr "" -#: order/models.py:1190 order/serializers.py:825 order/serializers.py:953 -#: templates/js/translated/model_renderers.js:251 +#: order/models.py:1212 order/serializers.py:831 order/serializers.py:959 +#: templates/js/translated/model_renderers.js:285 msgid "Shipment" msgstr "" -#: order/models.py:1191 +#: order/models.py:1213 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1203 +#: order/models.py:1225 msgid "Item" msgstr "" -#: order/models.py:1204 +#: order/models.py:1226 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1207 +#: order/models.py:1229 msgid "Enter stock allocation quantity" msgstr "" @@ -3319,7 +3408,7 @@ msgstr "" msgid "Purchase price currency" msgstr "" -#: order/serializers.py:211 order/serializers.py:790 +#: order/serializers.py:211 order/serializers.py:796 msgid "Line Item" msgstr "" @@ -3355,39 +3444,39 @@ msgstr "" msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:587 msgid "Sale price currency" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:655 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:699 order/serializers.py:802 +#: order/serializers.py:705 order/serializers.py:808 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:721 +#: order/serializers.py:727 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:815 +#: order/serializers.py:821 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:839 order/serializers.py:964 +#: order/serializers.py:845 order/serializers.py:970 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:842 order/serializers.py:967 +#: order/serializers.py:848 order/serializers.py:973 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:894 +#: order/serializers.py:900 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:910 msgid "The following serial numbers are already allocated" msgstr "" @@ -3441,6 +3530,7 @@ msgstr "" #: order/templates/order/order_base.html:94 #: order/templates/order/sales_order_base.html:89 +#: templates/js/translated/stock.js:2327 msgid "Order Status" msgstr "" @@ -3538,7 +3628,7 @@ msgstr "" #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/build.js:300 templates/js/translated/build.js:1311 #: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 -#: templates/js/translated/stock.js:593 templates/js/translated/stock.js:761 +#: templates/js/translated/stock.js:601 templates/js/translated/stock.js:769 msgid "Remove row" msgstr "" @@ -3729,7 +3819,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:48 -#: templates/js/translated/bom.js:720 templates/js/translated/build.js:1243 +#: templates/js/translated/bom.js:732 templates/js/translated/build.js:1243 msgid "Actions" msgstr "" @@ -3832,447 +3922,448 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:125 part/models.py:81 part/models.py:847 +#: part/bom.py:125 part/models.py:83 part/models.py:849 #: part/templates/part/category.html:108 part/templates/part/part_base.html:338 msgid "Default Location" msgstr "" -#: part/bom.py:126 part/templates/part/part_base.html:185 +#: part/bom.py:126 templates/email/low_stock_notification.html:17 +msgid "Total Stock" +msgstr "" + +#: part/bom.py:127 part/templates/part/part_base.html:185 msgid "Available Stock" msgstr "" -#: part/forms.py:85 +#: part/bom.py:128 part/templates/part/part_base.html:203 +#: templates/js/translated/part.js:1301 +msgid "On Order" +msgstr "" + +#: part/forms.py:84 msgid "Select part category" msgstr "" -#: part/forms.py:122 +#: part/forms.py:121 msgid "Add parameter template to same level categories" msgstr "" -#: part/forms.py:126 +#: part/forms.py:125 msgid "Add parameter template to all categories" msgstr "" -#: part/forms.py:146 +#: part/forms.py:145 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 +#: part/models.py:84 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:95 part/models.py:2526 part/templates/part/category.html:15 +#: part/models.py:97 part/models.py:2533 part/templates/part/category.html:15 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:96 part/templates/part/category.html:128 -#: templates/InvenTree/search.html:95 templates/stats.html:84 +#: part/models.py:98 part/templates/part/category.html:128 +#: templates/InvenTree/search.html:95 templates/stats.html:96 #: users/models.py:40 msgid "Part Categories" msgstr "" -#: part/models.py:358 part/templates/part/cat_link.html:3 +#: part/models.py:360 part/templates/part/cat_link.html:3 #: part/templates/part/category.html:17 part/templates/part/category.html:133 #: part/templates/part/category.html:153 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82 #: templates/InvenTree/settings/sidebar.html:37 -#: templates/js/translated/part.js:1656 templates/navbar.html:21 -#: templates/stats.html:80 templates/stats.html:89 users/models.py:41 +#: templates/js/translated/part.js:1663 templates/navbar.html:21 +#: templates/stats.html:92 templates/stats.html:101 users/models.py:41 msgid "Parts" msgstr "" -#: part/models.py:450 +#: part/models.py:452 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:500 part/models.py:512 +#: part/models.py:502 part/models.py:514 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:642 +#: part/models.py:644 msgid "Next available serial numbers are" msgstr "" -#: part/models.py:646 +#: part/models.py:648 msgid "Next available serial number is" msgstr "" -#: part/models.py:651 +#: part/models.py:653 msgid "Most recent serial number is" msgstr "" -#: part/models.py:746 +#: part/models.py:748 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:771 +#: part/models.py:773 msgid "Part name" msgstr "" -#: part/models.py:778 +#: part/models.py:780 msgid "Is Template" msgstr "" -#: part/models.py:779 +#: part/models.py:781 msgid "Is this part a template part?" msgstr "" -#: part/models.py:789 +#: part/models.py:791 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:790 +#: part/models.py:792 msgid "Variant Of" msgstr "" -#: part/models.py:796 +#: part/models.py:798 msgid "Part description" msgstr "" -#: part/models.py:801 part/templates/part/category.html:86 +#: part/models.py:803 part/templates/part/category.html:86 #: part/templates/part/part_base.html:302 msgid "Keywords" msgstr "" -#: part/models.py:802 +#: part/models.py:804 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:809 part/models.py:2276 part/models.py:2525 +#: part/models.py:811 part/models.py:2283 part/models.py:2532 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:183 -#: templates/js/translated/part.js:1261 +#: templates/InvenTree/settings/settings.html:186 +#: templates/js/translated/part.js:1268 msgid "Category" msgstr "" -#: part/models.py:810 +#: part/models.py:812 msgid "Part category" msgstr "" -#: part/models.py:815 part/templates/part/part_base.html:274 -#: templates/js/translated/part.js:612 templates/js/translated/part.js:1214 -#: templates/js/translated/stock.js:1552 +#: part/models.py:817 part/templates/part/part_base.html:274 +#: templates/js/translated/part.js:618 templates/js/translated/part.js:1221 +#: templates/js/translated/stock.js:1560 msgid "IPN" msgstr "" -#: part/models.py:816 +#: part/models.py:818 msgid "Internal Part Number" msgstr "" -#: part/models.py:822 +#: part/models.py:824 msgid "Part revision or version number" msgstr "" -#: part/models.py:823 part/templates/part/part_base.html:281 -#: report/models.py:200 templates/js/translated/part.js:616 +#: part/models.py:825 part/templates/part/part_base.html:281 +#: report/models.py:200 templates/js/translated/part.js:622 msgid "Revision" msgstr "" -#: part/models.py:845 +#: part/models.py:847 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:892 part/templates/part/part_base.html:347 +#: part/models.py:894 part/templates/part/part_base.html:347 msgid "Default Supplier" msgstr "" -#: part/models.py:893 +#: part/models.py:895 msgid "Default supplier part" msgstr "" -#: part/models.py:900 +#: part/models.py:902 msgid "Default Expiry" msgstr "" -#: part/models.py:901 +#: part/models.py:903 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:906 part/templates/part/part_base.html:196 +#: part/models.py:908 part/templates/part/part_base.html:196 msgid "Minimum Stock" msgstr "" -#: part/models.py:907 +#: part/models.py:909 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:914 +#: part/models.py:916 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:920 +#: part/models.py:922 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:926 +#: part/models.py:928 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:932 +#: part/models.py:934 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:937 +#: part/models.py:939 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:942 +#: part/models.py:944 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:946 plugin/models.py:46 -#: templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:295 -#: templates/js/translated/table_filters.js:417 -msgid "Active" -msgstr "" - -#: part/models.py:947 +#: part/models.py:949 msgid "Is this part active?" msgstr "" -#: part/models.py:952 +#: part/models.py:954 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:957 +#: part/models.py:959 msgid "Part notes - supports Markdown formatting" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "BOM checksum" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:963 +#: part/models.py:965 msgid "BOM checked by" msgstr "" -#: part/models.py:965 +#: part/models.py:967 msgid "BOM checked date" msgstr "" -#: part/models.py:969 +#: part/models.py:971 msgid "Creation User" msgstr "" -#: part/models.py:1781 +#: part/models.py:1783 msgid "Sell multiple" msgstr "" -#: part/models.py:2326 +#: part/models.py:2333 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2343 +#: part/models.py:2350 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2363 templates/js/translated/part.js:1707 -#: templates/js/translated/stock.js:1276 +#: part/models.py:2370 templates/js/translated/part.js:1714 +#: templates/js/translated/stock.js:1284 msgid "Test Name" msgstr "" -#: part/models.py:2364 +#: part/models.py:2371 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2369 +#: part/models.py:2376 msgid "Test Description" msgstr "" -#: part/models.py:2370 +#: part/models.py:2377 msgid "Enter description for this test" msgstr "" -#: part/models.py:2375 templates/js/translated/part.js:1716 +#: part/models.py:2382 templates/js/translated/part.js:1723 #: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" -#: part/models.py:2376 +#: part/models.py:2383 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2381 templates/js/translated/part.js:1724 +#: part/models.py:2388 templates/js/translated/part.js:1731 msgid "Requires Value" msgstr "" -#: part/models.py:2382 +#: part/models.py:2389 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2387 templates/js/translated/part.js:1731 +#: part/models.py:2394 templates/js/translated/part.js:1738 msgid "Requires Attachment" msgstr "" -#: part/models.py:2388 +#: part/models.py:2395 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2399 +#: part/models.py:2406 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2435 +#: part/models.py:2442 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2443 +#: part/models.py:2450 msgid "Parameter Name" msgstr "" -#: part/models.py:2450 +#: part/models.py:2457 msgid "Parameter Units" msgstr "" -#: part/models.py:2480 +#: part/models.py:2487 msgid "Parent Part" msgstr "" -#: part/models.py:2482 part/models.py:2531 part/models.py:2532 -#: templates/InvenTree/settings/settings.html:178 +#: part/models.py:2489 part/models.py:2538 part/models.py:2539 +#: templates/InvenTree/settings/settings.html:181 msgid "Parameter Template" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Data" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Parameter Value" msgstr "" -#: part/models.py:2536 templates/InvenTree/settings/settings.html:187 +#: part/models.py:2543 templates/InvenTree/settings/settings.html:190 msgid "Default Value" msgstr "" -#: part/models.py:2537 +#: part/models.py:2544 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2614 +#: part/models.py:2621 msgid "Select parent part" msgstr "" -#: part/models.py:2622 +#: part/models.py:2629 msgid "Sub part" msgstr "" -#: part/models.py:2623 +#: part/models.py:2630 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2629 +#: part/models.py:2636 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2631 templates/js/translated/bom.js:566 -#: templates/js/translated/bom.js:640 +#: part/models.py:2638 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:652 #: templates/js/translated/table_filters.js:92 msgid "Optional" msgstr "" -#: part/models.py:2631 +#: part/models.py:2638 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2634 +#: part/models.py:2641 msgid "Overage" msgstr "" -#: part/models.py:2635 +#: part/models.py:2642 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2638 +#: part/models.py:2645 msgid "BOM item reference" msgstr "" -#: part/models.py:2641 +#: part/models.py:2648 msgid "BOM item notes" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "Checksum" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "BOM line checksum" msgstr "" -#: part/models.py:2647 templates/js/translated/bom.js:657 +#: part/models.py:2654 templates/js/translated/bom.js:669 #: templates/js/translated/table_filters.js:68 #: templates/js/translated/table_filters.js:88 msgid "Inherited" msgstr "" -#: part/models.py:2648 +#: part/models.py:2655 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2653 templates/js/translated/bom.js:649 +#: part/models.py:2660 templates/js/translated/bom.js:661 msgid "Allow Variants" msgstr "" -#: part/models.py:2654 +#: part/models.py:2661 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2739 stock/models.py:355 +#: part/models.py:2746 stock/models.py:357 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2748 part/models.py:2750 +#: part/models.py:2755 part/models.py:2757 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2879 +#: part/models.py:2886 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2901 +#: part/models.py:2908 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2913 +#: part/models.py:2920 msgid "Parent BOM item" msgstr "" -#: part/models.py:2921 +#: part/models.py:2928 msgid "Substitute part" msgstr "" -#: part/models.py:2932 +#: part/models.py:2939 msgid "Part 1" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Part 2" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Select Related Part" msgstr "" -#: part/models.py:2968 +#: part/models.py:2975 msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique" msgstr "" @@ -4327,7 +4418,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:253 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:270 msgid "BOM actions" msgstr "" @@ -4499,7 +4590,7 @@ msgstr "" msgid "Import Parts" msgstr "" -#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:375 +#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:348 msgid "Duplicate Part" msgstr "" @@ -4533,145 +4624,149 @@ msgid "Showing stock for all variants of %(full_name)s" msgstr "" #: part/templates/part/detail.html:43 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/detail.html:60 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:48 +#: part/templates/part/detail.html:65 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:105 +#: part/templates/part/detail.html:122 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:142 +#: part/templates/part/detail.html:159 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:146 +#: part/templates/part/detail.html:163 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:147 +#: part/templates/part/detail.html:164 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:174 +#: part/templates/part/detail.html:191 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:45 +#: part/templates/part/detail.html:228 part/templates/part/part_sidebar.html:49 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:215 part/templates/part/detail.html:216 +#: part/templates/part/detail.html:232 part/templates/part/detail.html:233 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:253 part/templates/part/part_sidebar.html:17 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:241 +#: part/templates/part/detail.html:258 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:245 templates/js/translated/bom.js:70 +#: part/templates/part/detail.html:262 templates/js/translated/bom.js:70 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:247 +#: part/templates/part/detail.html:264 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:257 +#: part/templates/part/detail.html:274 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:259 templates/js/translated/part.js:272 +#: part/templates/part/detail.html:276 templates/js/translated/part.js:272 msgid "Copy BOM" msgstr "" -#: part/templates/part/detail.html:261 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:283 msgid "New BOM Item" msgstr "" -#: part/templates/part/detail.html:267 +#: part/templates/part/detail.html:284 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:280 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:314 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:322 +#: part/templates/part/detail.html:339 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:332 +#: part/templates/part/detail.html:349 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:360 +#: part/templates/part/detail.html:377 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:393 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:558 +#: part/templates/part/detail.html:575 msgid "Delete selected BOM items?" msgstr "" -#: part/templates/part/detail.html:559 +#: part/templates/part/detail.html:576 msgid "All selected BOM items will be deleted" msgstr "" -#: part/templates/part/detail.html:608 +#: part/templates/part/detail.html:625 msgid "Create BOM Item" msgstr "" -#: part/templates/part/detail.html:652 +#: part/templates/part/detail.html:682 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:660 +#: part/templates/part/detail.html:690 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:755 +#: part/templates/part/detail.html:785 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:812 +#: part/templates/part/detail.html:842 msgid "Edit Part Notes" msgstr "" -#: part/templates/part/detail.html:925 +#: part/templates/part/detail.html:955 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:937 +#: part/templates/part/detail.html:967 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:949 +#: part/templates/part/detail.html:979 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1038 +#: part/templates/part/detail.html:1068 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -4786,7 +4881,7 @@ msgstr "" #: templates/js/translated/company.js:508 #: templates/js/translated/company.js:765 #: templates/js/translated/model_renderers.js:175 -#: templates/js/translated/part.js:527 templates/js/translated/part.js:604 +#: templates/js/translated/part.js:533 templates/js/translated/part.js:610 msgid "Inactive" msgstr "" @@ -4805,10 +4900,6 @@ msgstr "" msgid "In Stock" msgstr "" -#: part/templates/part/part_base.html:203 templates/js/translated/part.js:1294 -msgid "On Order" -msgstr "" - #: part/templates/part/part_base.html:210 templates/InvenTree/index.html:178 msgid "Required for Build Orders" msgstr "" @@ -4821,12 +4912,12 @@ msgstr "" msgid "Allocated to Orders" msgstr "" -#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:678 +#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:690 msgid "Can Build" msgstr "" -#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1125 -#: templates/js/translated/part.js:1298 +#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1132 +#: templates/js/translated/part.js:1305 msgid "Building" msgstr "" @@ -4878,7 +4969,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:40 -#: templates/js/translated/bom.js:632 +#: templates/js/translated/bom.js:644 msgid "No supplier pricing available" msgstr "" @@ -4920,7 +5011,12 @@ msgstr "" msgid "Used In" msgstr "" -#: part/templates/part/part_sidebar.html:41 +#: part/templates/part/part_sidebar.html:31 +#: stock/templates/stock/stock_sidebar.html:8 +msgid "Allocations" +msgstr "" + +#: part/templates/part/part_sidebar.html:45 msgid "Test Templates" msgstr "" @@ -4993,7 +5089,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:155 templates/js/translated/bom.js:626 +#: part/templates/part/prices.html:155 templates/js/translated/bom.js:638 msgid "Supplier Cost" msgstr "" @@ -5015,7 +5111,7 @@ msgstr "" msgid "Internal Cost" msgstr "" -#: part/templates/part/prices.html:215 part/views.py:1690 +#: part/templates/part/prices.html:215 part/views.py:1699 msgid "Add Internal Price Break" msgstr "" @@ -5035,9 +5131,9 @@ msgstr "" msgid "Set category for the following parts" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:588 -#: templates/js/translated/part.js:491 templates/js/translated/part.js:1115 -#: templates/js/translated/part.js:1302 +#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:600 +#: templates/js/translated/part.js:497 templates/js/translated/part.js:1122 +#: templates/js/translated/part.js:1309 msgid "No Stock" msgstr "" @@ -5054,116 +5150,116 @@ msgstr "" msgid "Create a new variant of template '%(full_name)s'." msgstr "" -#: part/templatetags/inventree_extras.py:116 +#: part/templatetags/inventree_extras.py:125 msgid "Unknown database" msgstr "" -#: part/views.py:92 +#: part/views.py:93 msgid "Set Part Category" msgstr "" -#: part/views.py:142 +#: part/views.py:143 #, python-brace-format msgid "Set category for {n} parts" msgstr "" -#: part/views.py:214 +#: part/views.py:215 msgid "Match References" msgstr "" -#: part/views.py:502 +#: part/views.py:511 msgid "None" msgstr "" -#: part/views.py:561 +#: part/views.py:570 msgid "Part QR Code" msgstr "" -#: part/views.py:663 +#: part/views.py:672 msgid "Select Part Image" msgstr "" -#: part/views.py:689 +#: part/views.py:698 msgid "Updated part image" msgstr "" -#: part/views.py:692 +#: part/views.py:701 msgid "Part image not found" msgstr "" -#: part/views.py:766 +#: part/views.py:775 msgid "Match Parts" msgstr "" -#: part/views.py:1101 +#: part/views.py:1110 msgid "Export Bill of Materials" msgstr "" -#: part/views.py:1150 +#: part/views.py:1159 msgid "Confirm Part Deletion" msgstr "" -#: part/views.py:1157 +#: part/views.py:1166 msgid "Part was deleted" msgstr "" -#: part/views.py:1166 +#: part/views.py:1175 msgid "Part Pricing" msgstr "" -#: part/views.py:1315 +#: part/views.py:1324 msgid "Create Part Parameter Template" msgstr "" -#: part/views.py:1325 +#: part/views.py:1334 msgid "Edit Part Parameter Template" msgstr "" -#: part/views.py:1332 +#: part/views.py:1341 msgid "Delete Part Parameter Template" msgstr "" -#: part/views.py:1391 templates/js/translated/part.js:315 +#: part/views.py:1400 templates/js/translated/part.js:315 msgid "Edit Part Category" msgstr "" -#: part/views.py:1429 +#: part/views.py:1438 msgid "Delete Part Category" msgstr "" -#: part/views.py:1435 +#: part/views.py:1444 msgid "Part category was deleted" msgstr "" -#: part/views.py:1444 +#: part/views.py:1453 msgid "Create Category Parameter Template" msgstr "" -#: part/views.py:1545 +#: part/views.py:1554 msgid "Edit Category Parameter Template" msgstr "" -#: part/views.py:1601 +#: part/views.py:1610 msgid "Delete Category Parameter Template" msgstr "" -#: part/views.py:1623 +#: part/views.py:1632 msgid "Added new price break" msgstr "" -#: part/views.py:1699 +#: part/views.py:1708 msgid "Edit Internal Price Break" msgstr "" -#: part/views.py:1707 +#: part/views.py:1716 msgid "Delete Internal Price Break" msgstr "" -#: plugin/integration.py:124 +#: plugin/integration.py:138 msgid "No author found" msgstr "" -#: plugin/integration.py:136 +#: plugin/integration.py:152 msgid "No date found" msgstr "" @@ -5191,7 +5287,7 @@ msgstr "" msgid "Is the plugin active" msgstr "" -#: plugin/models.py:195 +#: plugin/models.py:199 msgid "Plugin" msgstr "" @@ -5357,12 +5453,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:517 stock/templates/stock/item_base.html:156 +#: stock/models.py:519 stock/templates/stock/item_base.html:156 #: templates/js/translated/build.js:293 templates/js/translated/build.js:697 #: templates/js/translated/build.js:1073 #: templates/js/translated/model_renderers.js:95 #: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 -#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:415 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:423 msgid "Serial Number" msgstr "" @@ -5371,19 +5467,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1948 +#: stock/models.py:1976 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1954 +#: stock/models.py:1982 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin.html:50 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2367 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2525 msgid "Date" msgstr "" @@ -5396,23 +5492,27 @@ msgid "Fail" msgstr "" #: report/templates/report/inventree_test_report_base.html:123 -#: stock/templates/stock/stock_sidebar.html:12 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:578 templates/js/translated/stock.js:748 -#: templates/js/translated/stock.js:2627 +#: templates/js/translated/stock.js:586 templates/js/translated/stock.js:756 +#: templates/js/translated/stock.js:2785 msgid "Serial" msgstr "" -#: stock/api.py:478 +#: stock/api.py:476 msgid "Quantity is required" msgstr "" -#: stock/forms.py:77 stock/forms.py:251 stock/models.py:574 +#: stock/api.py:483 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:576 #: stock/templates/stock/item_base.html:193 -#: templates/js/translated/stock.js:1701 +#: templates/js/translated/stock.js:1709 msgid "Expiry Date" msgstr "" @@ -5460,228 +5560,228 @@ msgstr "" msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:611 +#: stock/models.py:62 stock/models.py:613 #: stock/templates/stock/item_base.html:416 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:612 +#: stock/models.py:63 stock/models.py:614 msgid "Select Owner" msgstr "" -#: stock/models.py:336 +#: stock/models.py:338 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:372 +#: stock/models.py:374 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:382 stock/models.py:391 +#: stock/models.py:384 stock/models.py:393 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:383 +#: stock/models.py:385 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:405 +#: stock/models.py:407 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:411 +#: stock/models.py:413 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:418 +#: stock/models.py:420 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:461 +#: stock/models.py:463 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:470 +#: stock/models.py:472 msgid "Base part" msgstr "" -#: stock/models.py:478 +#: stock/models.py:480 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:484 stock/templates/stock/location.html:16 +#: stock/models.py:486 stock/templates/stock/location.html:16 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:494 +#: stock/models.py:496 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:500 stock/templates/stock/item_base.html:298 +#: stock/models.py:502 stock/templates/stock/item_base.html:298 msgid "Installed In" msgstr "" -#: stock/models.py:503 +#: stock/models.py:505 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:519 +#: stock/models.py:521 msgid "Serial number for this item" msgstr "" -#: stock/models.py:533 +#: stock/models.py:535 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:537 +#: stock/models.py:539 msgid "Stock Quantity" msgstr "" -#: stock/models.py:546 +#: stock/models.py:548 msgid "Source Build" msgstr "" -#: stock/models.py:548 +#: stock/models.py:550 msgid "Build for this stock item" msgstr "" -#: stock/models.py:559 +#: stock/models.py:561 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:562 +#: stock/models.py:564 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:568 +#: stock/models.py:570 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:575 +#: stock/models.py:577 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete on deplete" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:598 stock/templates/stock/item.html:111 +#: stock/models.py:600 stock/templates/stock/item.html:128 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:607 +#: stock/models.py:609 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1096 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1074 +#: stock/models.py:1102 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1080 +#: stock/models.py:1108 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1083 +#: stock/models.py:1111 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1086 +#: stock/models.py:1114 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1093 +#: stock/models.py:1121 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1164 +#: stock/models.py:1192 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1195 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1170 +#: stock/models.py:1198 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1173 +#: stock/models.py:1201 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1176 +#: stock/models.py:1204 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1179 +#: stock/models.py:1207 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1186 stock/serializers.py:774 +#: stock/models.py:1214 stock/serializers.py:775 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1190 +#: stock/models.py:1218 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1222 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1198 +#: stock/models.py:1226 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1369 +#: stock/models.py:1397 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1868 +#: stock/models.py:1896 msgid "Entry notes" msgstr "" -#: stock/models.py:1925 +#: stock/models.py:1953 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1931 +#: stock/models.py:1959 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1949 +#: stock/models.py:1977 msgid "Test name" msgstr "" -#: stock/models.py:1955 templates/js/translated/table_filters.js:271 +#: stock/models.py:1983 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1961 +#: stock/models.py:1989 msgid "Test output value" msgstr "" -#: stock/models.py:1968 +#: stock/models.py:1996 msgid "Test result attachment" msgstr "" -#: stock/models.py:1974 +#: stock/models.py:2002 msgid "Test notes" msgstr "" @@ -5706,7 +5806,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:326 stock/serializers.py:731 stock/serializers.py:972 +#: stock/serializers.py:326 stock/serializers.py:732 stock/serializers.py:973 msgid "Destination stock location" msgstr "" @@ -5718,63 +5818,63 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:589 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:592 +#: stock/serializers.py:593 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:597 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:626 +#: stock/serializers.py:627 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:632 +#: stock/serializers.py:633 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:640 +#: stock/serializers.py:641 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:650 stock/serializers.py:880 +#: stock/serializers.py:651 stock/serializers.py:881 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:738 +#: stock/serializers.py:739 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:743 +#: stock/serializers.py:744 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:744 +#: stock/serializers.py:745 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:749 +#: stock/serializers.py:750 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:750 +#: stock/serializers.py:751 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:760 +#: stock/serializers.py:761 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:842 +#: stock/serializers.py:843 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:870 +#: stock/serializers.py:871 msgid "Stock transaction notes" msgstr "" @@ -5787,47 +5887,51 @@ msgid "New Entry" msgstr "" #: stock/templates/stock/item.html:48 -msgid "Child Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:55 -msgid "This stock item does not have any child items" +msgid "Stock Item Allocations" msgstr "" #: stock/templates/stock/item.html:64 -#: stock/templates/stock/stock_sidebar.html:8 -msgid "Test Data" -msgstr "" - -#: stock/templates/stock/item.html:68 stock/templates/stock/item_base.html:57 -msgid "Test Report" +msgid "Child Stock Items" msgstr "" #: stock/templates/stock/item.html:72 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item.html:81 +#: stock/templates/stock/stock_sidebar.html:12 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:57 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item.html:89 msgid "Delete Test Data" msgstr "" -#: stock/templates/stock/item.html:76 +#: stock/templates/stock/item.html:93 msgid "Add Test Data" msgstr "" -#: stock/templates/stock/item.html:133 +#: stock/templates/stock/item.html:150 msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:482 +#: stock/templates/stock/item.html:154 stock/views.py:482 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:279 stock/templates/stock/item.html:304 +#: stock/templates/stock/item.html:309 stock/templates/stock/item.html:334 msgid "Add Test Result" msgstr "" -#: stock/templates/stock/item.html:324 +#: stock/templates/stock/item.html:354 msgid "Edit Test Result" msgstr "" -#: stock/templates/stock/item.html:338 +#: stock/templates/stock/item.html:368 msgid "Delete Test Result" msgstr "" @@ -5952,7 +6056,7 @@ msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:206 -#: templates/js/translated/stock.js:1714 +#: templates/js/translated/stock.js:1722 msgid "Last Updated" msgstr "" @@ -6111,7 +6215,7 @@ msgid "Sublocations" msgstr "" #: stock/templates/stock/location.html:146 templates/InvenTree/search.html:164 -#: templates/stats.html:97 users/models.py:42 +#: templates/stats.html:109 users/models.py:42 msgid "Stock Locations" msgstr "" @@ -6135,7 +6239,7 @@ msgstr "" msgid "Stock Tracking" msgstr "" -#: stock/templates/stock/stock_sidebar.html:16 +#: stock/templates/stock/stock_sidebar.html:20 msgid "Child Items" msgstr "" @@ -6164,7 +6268,7 @@ msgstr "" msgid "Are you sure you want to delete this stock tracking entry?" msgstr "" -#: stock/views.py:162 +#: stock/views.py:162 templates/js/translated/stock.js:139 msgid "Edit Stock Location" msgstr "" @@ -6204,7 +6308,7 @@ msgstr "" msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:727 templates/js/translated/stock.js:1066 +#: stock/views.py:727 templates/js/translated/stock.js:1074 msgid "Confirm stock adjustment" msgstr "" @@ -6212,7 +6316,7 @@ msgstr "" msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:324 +#: stock/views.py:760 templates/js/translated/stock.js:332 msgid "Edit Stock Item" msgstr "" @@ -6224,7 +6328,7 @@ msgstr "" msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1153 templates/js/translated/stock.js:304 +#: stock/views.py:1153 templates/js/translated/stock.js:312 msgid "Duplicate Stock Item" msgstr "" @@ -6268,6 +6372,18 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/500.html:5 templates/500.html:11 +msgid "Internal Server Error" +msgstr "" + +#: templates/500.html:14 +msgid "The InvenTree server raised an internal error" +msgstr "" + +#: templates/500.html:15 +msgid "Refer to the error log in the admin interface for further details" +msgstr "" + #: templates/503.html:10 templates/503.html:35 msgid "Site is in Maintenance" msgstr "" @@ -6390,7 +6506,7 @@ msgid "Signup" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:113 msgid "Settings" msgstr "" @@ -6431,43 +6547,43 @@ msgstr "" msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:32 +#: templates/InvenTree/settings/plugin.html:33 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:37 +#: templates/InvenTree/settings/plugin.html:38 #: templates/js/translated/plugin.js:15 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: templates/InvenTree/settings/plugin.html:47 templates/navbar.html:111 #: users/models.py:39 msgid "Admin" msgstr "" -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:49 #: templates/InvenTree/settings/plugin_settings.html:28 msgid "Author" msgstr "" -#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin_settings.html:43 msgid "Version" msgstr "" -#: templates/InvenTree/settings/plugin.html:91 +#: templates/InvenTree/settings/plugin.html:92 msgid "Inactive plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:114 +#: templates/InvenTree/settings/plugin.html:115 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:123 +#: templates/InvenTree/settings/plugin.html:124 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:125 +#: templates/InvenTree/settings/plugin.html:126 msgid "Message" msgstr "" @@ -6555,37 +6671,37 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:75 +#: templates/InvenTree/settings/settings.html:78 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:77 +#: templates/InvenTree/settings/settings.html:80 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:79 +#: templates/InvenTree/settings/settings.html:82 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:168 +#: templates/InvenTree/settings/settings.html:171 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:190 -#: templates/InvenTree/settings/settings.html:289 +#: templates/InvenTree/settings/settings.html:193 +#: templates/InvenTree/settings/settings.html:292 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:191 -#: templates/InvenTree/settings/settings.html:290 +#: templates/InvenTree/settings/settings.html:194 +#: templates/InvenTree/settings/settings.html:293 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:272 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:273 +#: templates/InvenTree/settings/settings.html:276 msgid "ID" msgstr "" @@ -6763,124 +6879,105 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:219 +#: templates/InvenTree/settings/user.html:220 +msgid "Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:226 +msgid "Log out active sessions (except this one)" +msgstr "" + +#: templates/InvenTree/settings/user.html:227 +msgid "Log Out Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:236 +msgid "unknown on unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:237 +msgid "unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:241 +msgid "IP Address" +msgstr "" + +#: templates/InvenTree/settings/user.html:242 +msgid "Device" +msgstr "" + +#: templates/InvenTree/settings/user.html:243 +msgid "Last Activity" +msgstr "" + +#: templates/InvenTree/settings/user.html:252 +#, python-format +msgid "%(time)s ago (this session)" +msgstr "" + +#: templates/InvenTree/settings/user.html:254 +#, python-format +msgid "%(time)s ago" +msgstr "" + +#: templates/InvenTree/settings/user.html:266 +msgid "Do you really want to remove the selected email address?" +msgstr "" + #: templates/InvenTree/settings/user_display.html:25 msgid "Theme Settings" msgstr "" -#: templates/InvenTree/settings/user.html:227 #: templates/InvenTree/settings/user_display.html:35 msgid "Select theme" msgstr "" -#: templates/InvenTree/settings/user.html:237 #: templates/InvenTree/settings/user_display.html:46 msgid "Set Theme" msgstr "" -#: templates/InvenTree/settings/user.html:246 #: templates/InvenTree/settings/user_display.html:54 msgid "Language Settings" msgstr "" -#: templates/InvenTree/settings/user.html:254 #: templates/InvenTree/settings/user_display.html:63 msgid "Select language" msgstr "" -#: templates/InvenTree/settings/user.html:270 #: templates/InvenTree/settings/user_display.html:79 #, python-format msgid "%(lang_translated)s%% translated" msgstr "" -#: templates/InvenTree/settings/user.html:272 #: templates/InvenTree/settings/user_display.html:81 msgid "No translations available" msgstr "" -#: templates/InvenTree/settings/user.html:279 #: templates/InvenTree/settings/user_display.html:88 msgid "Set Language" msgstr "" -#: templates/InvenTree/settings/user.html:281 #: templates/InvenTree/settings/user_display.html:91 msgid "Some languages are not complete" msgstr "" -#: templates/InvenTree/settings/user.html:283 #: templates/InvenTree/settings/user_display.html:93 msgid "Show only sufficent" msgstr "" -#: templates/InvenTree/settings/user.html:285 +#: templates/InvenTree/settings/user_display.html:95 +msgid "and hidden." +msgstr "" + #: templates/InvenTree/settings/user_display.html:95 msgid "Show them too" msgstr "" -#: templates/InvenTree/settings/user.html:292 #: templates/InvenTree/settings/user_display.html:101 msgid "Help the translation efforts!" msgstr "" -#: templates/InvenTree/settings/user.html:293 -#, python-format -msgid "Native language translation of the\n" -" InvenTree web application is community contributed via crowdin. Contributions are\n" -" welcomed and encouraged." -msgstr "" - -#: templates/InvenTree/settings/user.html:302 -msgid "Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:308 -msgid "Log out active sessions (except this one)" -msgstr "" - -#: templates/InvenTree/settings/user.html:309 -msgid "Log Out Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:318 -msgid "unknown on unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:319 -msgid "unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:323 -msgid "IP Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:324 -msgid "Device" -msgstr "" - -#: templates/InvenTree/settings/user.html:325 -msgid "Last Activity" -msgstr "" - -#: templates/InvenTree/settings/user.html:334 -#, python-format -msgid "%(time)s ago (this session)" -msgstr "" - -#: templates/InvenTree/settings/user.html:336 -#, python-format -msgid "%(time)s ago" -msgstr "" - -#: templates/InvenTree/settings/user.html:348 -msgid "Do you really want to remove the selected email address?" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:95 -msgid "and hidden." -msgstr "" - #: templates/InvenTree/settings/user_display.html:102 #, python-format msgid "Native language translation of the InvenTree web application is community contributed via crowdin. Contributions are welcomed and encouraged." @@ -6899,9 +6996,9 @@ msgid "InvenTree Version Information" msgstr "" #: templates/about.html:11 templates/about.html:105 -#: templates/js/translated/bom.js:395 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:573 templates/js/translated/modals.js:667 -#: templates/js/translated/modals.js:970 templates/modals.html:15 +#: templates/js/translated/bom.js:407 templates/js/translated/modals.js:53 +#: templates/js/translated/modals.js:584 templates/js/translated/modals.js:678 +#: templates/js/translated/modals.js:983 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -7178,13 +7275,13 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1103 +#: templates/js/translated/bom.js:1117 msgid "Required Quantity" msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:579 templates/js/translated/build.js:1189 +#: templates/js/translated/bom.js:591 templates/js/translated/build.js:1189 #: templates/js/translated/build.js:1810 #: templates/js/translated/table_filters.js:178 msgid "Available" @@ -7208,10 +7305,6 @@ msgstr "" msgid "Click on the following link to view this part" msgstr "" -#: templates/email/low_stock_notification.html:17 -msgid "Total Stock" -msgstr "" - #: templates/email/low_stock_notification.html:19 msgid "Minimum Quantity" msgstr "" @@ -7232,11 +7325,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1040 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1053 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1041 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1054 msgid "No response from the InvenTree server" msgstr "" @@ -7248,27 +7341,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1063 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1051 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1064 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1068 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1056 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1069 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1073 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1061 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1074 msgid "The requested resource could not be located on the server" msgstr "" @@ -7280,11 +7373,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1065 +#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1078 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1066 +#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1079 msgid "Connection timeout while requesting data from server" msgstr "" @@ -7353,7 +7446,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "Invalid server response" msgstr "" @@ -7381,7 +7474,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1018 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1026 msgid "Remove stock item" msgstr "" @@ -7428,12 +7521,12 @@ msgid "Download BOM Template" msgstr "" #: templates/js/translated/bom.js:39 templates/js/translated/bom.js:73 -#: templates/js/translated/order.js:369 templates/js/translated/stock.js:510 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:518 msgid "Format" msgstr "" #: templates/js/translated/bom.js:40 templates/js/translated/bom.js:74 -#: templates/js/translated/order.js:370 templates/js/translated/stock.js:511 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:519 msgid "Select file format" msgstr "" @@ -7489,87 +7582,87 @@ msgstr "" msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:340 -msgid "Select and add a new variant item using the input below" +#: templates/js/translated/bom.js:352 +msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:351 +#: templates/js/translated/bom.js:363 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:357 +#: templates/js/translated/bom.js:369 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:396 +#: templates/js/translated/bom.js:408 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:397 +#: templates/js/translated/bom.js:409 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:516 +#: templates/js/translated/bom.js:528 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:520 templates/js/translated/build.js:1171 +#: templates/js/translated/bom.js:532 templates/js/translated/build.js:1171 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:525 +#: templates/js/translated/bom.js:537 msgid "Open subassembly" msgstr "" -#: templates/js/translated/bom.js:597 +#: templates/js/translated/bom.js:609 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:612 +#: templates/js/translated/bom.js:624 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:619 +#: templates/js/translated/bom.js:631 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:668 templates/js/translated/bom.js:757 +#: templates/js/translated/bom.js:680 templates/js/translated/bom.js:769 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:728 +#: templates/js/translated/bom.js:740 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:742 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:732 +#: templates/js/translated/bom.js:744 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:734 templates/js/translated/bom.js:908 +#: templates/js/translated/bom.js:746 templates/js/translated/bom.js:920 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:891 +#: templates/js/translated/bom.js:748 templates/js/translated/bom.js:903 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:830 templates/js/translated/build.js:915 +#: templates/js/translated/bom.js:842 templates/js/translated/build.js:915 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:886 +#: templates/js/translated/bom.js:898 msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:1086 templates/js/translated/build.js:1155 +#: templates/js/translated/bom.js:1100 templates/js/translated/build.js:1155 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1108 +#: templates/js/translated/bom.js:1122 msgid "Inherited from parent BOM" msgstr "" @@ -7725,9 +7818,9 @@ msgstr "" msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1206 -#: templates/js/translated/part.js:1617 templates/js/translated/stock.js:1512 -#: templates/js/translated/stock.js:2321 +#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:1624 templates/js/translated/stock.js:1520 +#: templates/js/translated/stock.js:2479 msgid "Select" msgstr "" @@ -7735,7 +7828,7 @@ msgstr "" msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2540 +#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2698 msgid "No user information" msgstr "" @@ -7808,34 +7901,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:500 -#: templates/js/translated/company.js:757 templates/js/translated/part.js:511 -#: templates/js/translated/part.js:596 +#: templates/js/translated/company.js:757 templates/js/translated/part.js:517 +#: templates/js/translated/part.js:602 msgid "Template part" msgstr "" #: templates/js/translated/company.js:504 -#: templates/js/translated/company.js:761 templates/js/translated/part.js:515 -#: templates/js/translated/part.js:600 +#: templates/js/translated/company.js:761 templates/js/translated/part.js:521 +#: templates/js/translated/part.js:606 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:631 templates/js/translated/part.js:690 +#: templates/js/translated/company.js:631 templates/js/translated/part.js:696 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:668 templates/js/translated/part.js:732 +#: templates/js/translated/company.js:668 templates/js/translated/part.js:738 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:669 templates/js/translated/part.js:733 +#: templates/js/translated/company.js:669 templates/js/translated/part.js:739 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:688 templates/js/translated/part.js:750 +#: templates/js/translated/company.js:688 templates/js/translated/part.js:756 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:699 templates/js/translated/part.js:762 +#: templates/js/translated/company.js:699 templates/js/translated/part.js:768 msgid "Delete Parameter" msgstr "" @@ -7844,12 +7937,12 @@ msgid "No supplier parts found" msgstr "" #: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:420 +#: templates/js/translated/filters.js:429 msgid "true" msgstr "" #: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:421 +#: templates/js/translated/filters.js:430 msgid "false" msgstr "" @@ -7869,7 +7962,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:329 +#: templates/js/translated/filters.js:338 msgid "Create filter" msgstr "" @@ -7898,20 +7991,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1080 templates/modals.html:19 +#: templates/js/translated/forms.js:1082 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1471 +#: templates/js/translated/forms.js:1487 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1675 +#: templates/js/translated/forms.js:1691 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1895 +#: templates/js/translated/forms.js:1930 msgid "Clear input" msgstr "" @@ -7924,7 +8017,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1042 +#: templates/js/translated/stock.js:1050 msgid "Select Stock Items" msgstr "" @@ -7974,12 +8067,12 @@ msgid "Select Label Template" msgstr "" #: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 -#: templates/js/translated/modals.js:599 +#: templates/js/translated/modals.js:610 msgid "Cancel" msgstr "" #: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:666 templates/js/translated/modals.js:969 +#: templates/js/translated/modals.js:677 templates/js/translated/modals.js:982 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" @@ -7988,47 +8081,47 @@ msgstr "" msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:381 +#: templates/js/translated/modals.js:392 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:540 +#: templates/js/translated/modals.js:551 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:598 +#: templates/js/translated/modals.js:609 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:655 +#: templates/js/translated/modals.js:666 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:933 +#: templates/js/translated/modals.js:946 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1045 +#: templates/js/translated/modals.js:1058 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1046 +#: templates/js/translated/modals.js:1059 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1069 +#: templates/js/translated/modals.js:1082 msgid "Error requesting form data" msgstr "" @@ -8052,23 +8145,24 @@ msgstr "" msgid "Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:236 +#: templates/js/translated/model_renderers.js:249 +#: templates/js/translated/model_renderers.js:270 msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:253 +#: templates/js/translated/model_renderers.js:287 msgid "Shipment ID" msgstr "" -#: templates/js/translated/model_renderers.js:273 +#: templates/js/translated/model_renderers.js:307 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:310 +#: templates/js/translated/model_renderers.js:344 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:339 +#: templates/js/translated/model_renderers.js:373 msgid "Supplier Part ID" msgstr "" @@ -8116,7 +8210,7 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2123 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2131 msgid "Stock Status" msgstr "" @@ -8140,7 +8234,7 @@ msgstr "" msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:790 templates/js/translated/part.js:803 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:809 msgid "No purchase orders found" msgstr "" @@ -8165,7 +8259,7 @@ msgid "Total" msgstr "" #: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 -#: templates/js/translated/part.js:1834 templates/js/translated/part.js:2045 +#: templates/js/translated/part.js:1841 templates/js/translated/part.js:2052 msgid "Unit Price" msgstr "" @@ -8181,7 +8275,7 @@ msgstr "" msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1166 templates/js/translated/part.js:935 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:942 msgid "Receive line item" msgstr "" @@ -8250,7 +8344,7 @@ msgid "Delete Stock Allocation" msgstr "" #: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 -#: templates/js/translated/stock.js:1428 +#: templates/js/translated/stock.js:1436 msgid "Shipped to customer" msgstr "" @@ -8378,144 +8472,148 @@ msgstr "" msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:412 +#: templates/js/translated/part.js:351 +msgid "Create Part Variant" +msgstr "" + +#: templates/js/translated/part.js:418 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:414 +#: templates/js/translated/part.js:420 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:419 +#: templates/js/translated/part.js:425 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:421 +#: templates/js/translated/part.js:427 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:444 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:448 +#: templates/js/translated/part.js:454 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:451 +#: templates/js/translated/part.js:457 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:481 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:503 templates/js/translated/part.js:588 +#: templates/js/translated/part.js:509 templates/js/translated/part.js:594 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:507 templates/js/translated/part.js:592 +#: templates/js/translated/part.js:513 templates/js/translated/part.js:598 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:519 +#: templates/js/translated/part.js:525 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:523 +#: templates/js/translated/part.js:529 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:638 +#: templates/js/translated/part.js:644 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1005 +#: templates/js/translated/part.js:1012 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1029 +#: templates/js/translated/part.js:1036 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1096 templates/js/translated/part.js:1356 +#: templates/js/translated/part.js:1103 templates/js/translated/part.js:1363 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1266 +#: templates/js/translated/part.js:1273 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1289 +#: templates/js/translated/part.js:1296 #: templates/js/translated/table_filters.js:430 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:1380 templates/js/translated/part.js:1552 -#: templates/js/translated/stock.js:2282 +#: templates/js/translated/part.js:1387 templates/js/translated/part.js:1559 +#: templates/js/translated/stock.js:2440 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1396 +#: templates/js/translated/part.js:1403 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1571 templates/js/translated/stock.js:2301 +#: templates/js/translated/part.js:1578 templates/js/translated/stock.js:2459 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:1635 +#: templates/js/translated/part.js:1642 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1649 templates/js/translated/stock.js:2345 +#: templates/js/translated/part.js:1656 templates/js/translated/stock.js:2503 msgid "Path" msgstr "" -#: templates/js/translated/part.js:1693 +#: templates/js/translated/part.js:1700 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1744 templates/js/translated/stock.js:1234 +#: templates/js/translated/part.js:1751 templates/js/translated/stock.js:1242 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1745 templates/js/translated/stock.js:1235 +#: templates/js/translated/part.js:1752 templates/js/translated/stock.js:1243 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:1751 +#: templates/js/translated/part.js:1758 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:1773 +#: templates/js/translated/part.js:1780 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:1787 +#: templates/js/translated/part.js:1794 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:1812 +#: templates/js/translated/part.js:1819 #, python-brace-format msgid "No ${human_name} information found" msgstr "" -#: templates/js/translated/part.js:1867 +#: templates/js/translated/part.js:1874 #, python-brace-format msgid "Edit ${human_name}" msgstr "" -#: templates/js/translated/part.js:1868 +#: templates/js/translated/part.js:1875 #, python-brace-format msgid "Delete ${human_name}" msgstr "" -#: templates/js/translated/part.js:1969 +#: templates/js/translated/part.js:1976 msgid "Single Price" msgstr "" -#: templates/js/translated/part.js:1988 +#: templates/js/translated/part.js:1995 msgid "Single Price Difference" msgstr "" @@ -8589,340 +8687,344 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:74 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:181 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:93 templates/js/translated/stock.js:175 +#: templates/js/translated/stock.js:94 templates/js/translated/stock.js:183 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:101 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:110 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:146 +#: templates/js/translated/stock.js:154 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:186 +#: templates/js/translated/stock.js:194 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:225 +#: templates/js/translated/stock.js:233 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:231 +#: templates/js/translated/stock.js:239 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:382 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:387 +#: templates/js/translated/stock.js:395 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:420 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:416 templates/js/translated/stock.js:417 +#: templates/js/translated/stock.js:424 templates/js/translated/stock.js:425 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:433 +#: templates/js/translated/stock.js:441 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:453 +#: templates/js/translated/stock.js:461 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:462 +#: templates/js/translated/stock.js:470 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:515 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:526 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:519 +#: templates/js/translated/stock.js:527 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:628 +#: templates/js/translated/stock.js:636 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:629 +#: templates/js/translated/stock.js:637 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:714 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:715 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:709 +#: templates/js/translated/stock.js:717 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:710 +#: templates/js/translated/stock.js:718 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:796 +#: templates/js/translated/stock.js:804 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:797 +#: templates/js/translated/stock.js:805 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:892 +#: templates/js/translated/stock.js:900 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:893 +#: templates/js/translated/stock.js:901 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:899 +#: templates/js/translated/stock.js:907 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:900 +#: templates/js/translated/stock.js:908 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:904 +#: templates/js/translated/stock.js:912 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:905 +#: templates/js/translated/stock.js:913 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:909 +#: templates/js/translated/stock.js:917 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:910 users/models.py:206 +#: templates/js/translated/stock.js:918 users/models.py:208 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:914 templates/stock_table.html:58 +#: templates/js/translated/stock.js:922 templates/stock_table.html:58 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1051 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1201 +#: templates/js/translated/stock.js:1209 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1203 +#: templates/js/translated/stock.js:1211 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1208 +#: templates/js/translated/stock.js:1216 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1230 +#: templates/js/translated/stock.js:1238 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1256 +#: templates/js/translated/stock.js:1264 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1313 +#: templates/js/translated/stock.js:1321 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1428 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1424 +#: templates/js/translated/stock.js:1432 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1432 +#: templates/js/translated/stock.js:1440 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1438 +#: templates/js/translated/stock.js:1446 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1604 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1601 +#: templates/js/translated/stock.js:1609 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1604 +#: templates/js/translated/stock.js:1612 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1608 +#: templates/js/translated/stock.js:1616 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1610 +#: templates/js/translated/stock.js:1618 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1616 +#: templates/js/translated/stock.js:1624 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1618 +#: templates/js/translated/stock.js:1626 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1620 +#: templates/js/translated/stock.js:1628 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1633 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1632 +#: templates/js/translated/stock.js:1640 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1634 +#: templates/js/translated/stock.js:1642 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1636 +#: templates/js/translated/stock.js:1644 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1648 #: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1690 +#: templates/js/translated/stock.js:1698 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1763 +#: templates/js/translated/stock.js:1771 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1809 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1822 templates/js/translated/stock.js:1870 +#: templates/js/translated/stock.js:1830 templates/js/translated/stock.js:1878 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1910 +#: templates/js/translated/stock.js:1918 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1937 +#: templates/js/translated/stock.js:1945 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1939 +#: templates/js/translated/stock.js:1947 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:2138 +#: templates/js/translated/stock.js:2146 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2152 +#: templates/js/translated/stock.js:2160 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2153 +#: templates/js/translated/stock.js:2161 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2377 +#: templates/js/translated/stock.js:2340 +msgid "Allocated Quantity" +msgstr "" + +#: templates/js/translated/stock.js:2535 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2399 +#: templates/js/translated/stock.js:2557 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2424 +#: templates/js/translated/stock.js:2582 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2443 +#: templates/js/translated/stock.js:2601 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2462 +#: templates/js/translated/stock.js:2620 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2480 +#: templates/js/translated/stock.js:2638 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2503 +#: templates/js/translated/stock.js:2661 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2511 +#: templates/js/translated/stock.js:2669 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2552 +#: templates/js/translated/stock.js:2710 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2553 +#: templates/js/translated/stock.js:2711 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2604 +#: templates/js/translated/stock.js:2762 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2655 +#: templates/js/translated/stock.js:2813 msgid "Uninstall Stock Item" msgstr "" @@ -9194,11 +9296,11 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:113 +#: templates/navbar.html:114 msgid "Logout" msgstr "" -#: templates/navbar.html:115 +#: templates/navbar.html:116 msgid "Login" msgstr "" @@ -9246,31 +9348,43 @@ msgstr "" msgid "Server is deployed using docker" msgstr "" -#: templates/stats.html:40 -msgid "Server status" +#: templates/stats.html:39 +msgid "Plugin Support" msgstr "" #: templates/stats.html:43 -msgid "Healthy" +msgid "Plugin support enabled" msgstr "" #: templates/stats.html:45 -msgid "Issues detected" +msgid "Plugin support disabled" msgstr "" #: templates/stats.html:52 -msgid "Background Worker" +msgid "Server status" msgstr "" #: templates/stats.html:55 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:57 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:64 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:67 msgid "Background worker not running" msgstr "" -#: templates/stats.html:63 +#: templates/stats.html:75 msgid "Email Settings" msgstr "" -#: templates/stats.html:66 +#: templates/stats.html:78 msgid "Email settings not configured" msgstr "" @@ -9366,35 +9480,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:193 +#: users/models.py:195 msgid "Permission set" msgstr "" -#: users/models.py:201 +#: users/models.py:203 msgid "Group" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "View" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to view items" msgstr "" -#: users/models.py:206 +#: users/models.py:208 msgid "Permission to add items" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Change" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Permissions to edit items" msgstr "" -#: users/models.py:210 +#: users/models.py:212 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/pl/LC_MESSAGES/django.po b/InvenTree/locale/pl/LC_MESSAGES/django.po index 794e1de29d..672efaf6e8 100644 --- a/InvenTree/locale/pl/LC_MESSAGES/django.po +++ b/InvenTree/locale/pl/LC_MESSAGES/django.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-10 03:54+0000\n" -"PO-Revision-Date: 2022-01-10 03:58\n" +"POT-Creation-Date: 2022-01-29 00:17+0000\n" +"PO-Revision-Date: 2022-01-29 01:11\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -18,15 +18,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 138\n" -#: InvenTree/api.py:64 +#: InvenTree/api.py:55 msgid "API endpoint not found" msgstr "Nie znaleziono punktu końcowego API" -#: InvenTree/api.py:110 +#: InvenTree/api.py:101 msgid "No action specified" msgstr "Nie określono działania" -#: InvenTree/api.py:124 +#: InvenTree/api.py:116 msgid "No matching action found" msgstr "Nie znaleziono pasującej akcji" @@ -80,41 +80,41 @@ msgstr "Potwierdzenie adresu email" msgid "You must type the same email each time." msgstr "Należy ponownie wpisać ten sam adres e-mail." -#: InvenTree/helpers.py:437 +#: InvenTree/helpers.py:439 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "Powtórzony numer seryjny: {n}" -#: InvenTree/helpers.py:444 order/models.py:279 order/models.py:420 +#: InvenTree/helpers.py:446 order/models.py:282 order/models.py:425 #: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "Podano nieprawidłową ilość" -#: InvenTree/helpers.py:447 +#: InvenTree/helpers.py:449 msgid "Empty serial number string" msgstr "Pusty ciąg numeru seryjnego" -#: InvenTree/helpers.py:469 InvenTree/helpers.py:472 InvenTree/helpers.py:475 -#: InvenTree/helpers.py:500 +#: InvenTree/helpers.py:471 InvenTree/helpers.py:474 InvenTree/helpers.py:477 +#: InvenTree/helpers.py:502 #, python-brace-format msgid "Invalid group: {g}" msgstr "Nieprawidłowa grupa: {g}" -#: InvenTree/helpers.py:510 +#: InvenTree/helpers.py:512 #, python-brace-format msgid "Invalid group {group}" msgstr "Nieprawidłowa grupa {group}" -#: InvenTree/helpers.py:516 +#: InvenTree/helpers.py:518 #, python-brace-format msgid "Invalid/no group {group}" msgstr "Nieprawidłowa/Brak grupy {group}" -#: InvenTree/helpers.py:522 +#: InvenTree/helpers.py:524 msgid "No serial numbers found" msgstr "Nie znaleziono numerów seryjnych" -#: InvenTree/helpers.py:526 +#: InvenTree/helpers.py:528 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "Ilość numerów seryjnych ({s}) musi odpowiadać ilości ({q})" @@ -127,7 +127,7 @@ msgstr "Brak pliku" msgid "Missing external link" msgstr "Brak zewnętrznego odnośnika" -#: InvenTree/models.py:132 stock/models.py:1967 +#: InvenTree/models.py:132 stock/models.py:1995 #: templates/js/translated/attachment.js:119 msgid "Attachment" msgstr "Załącznik" @@ -137,15 +137,15 @@ msgid "Select file to attach" msgstr "Wybierz plik do załączenia" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:124 part/models.py:828 +#: company/models.py:564 order/models.py:127 part/models.py:830 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:540 -#: templates/js/translated/company.js:829 templates/js/translated/part.js:1317 +#: templates/js/translated/company.js:829 templates/js/translated/part.js:1324 msgid "Link" msgstr "Łącze" -#: InvenTree/models.py:140 build/models.py:330 part/models.py:829 -#: stock/models.py:527 +#: InvenTree/models.py:140 build/models.py:332 part/models.py:831 +#: stock/models.py:529 msgid "Link to external URL" msgstr "Link do zewnętrznego adresu URL" @@ -157,10 +157,11 @@ msgstr "Komentarz" msgid "File comment" msgstr "Komentarz pliku" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 -#: common/models.py:1214 part/models.py:2258 part/models.py:2278 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1223 +#: common/models.py:1224 common/models.py:1452 common/models.py:1453 +#: part/models.py:2265 part/models.py:2285 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2534 +#: templates/js/translated/stock.js:2692 msgid "User" msgstr "Użytkownik" @@ -197,42 +198,42 @@ msgstr "Błąd zmiany nazwy pliku" msgid "Invalid choice" msgstr "Błędny wybór" -#: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 -#: label/models.py:112 part/models.py:772 part/models.py:2442 -#: plugin/models.py:40 report/models.py:181 +#: InvenTree/models.py:277 InvenTree/models.py:278 common/models.py:1438 +#: company/models.py:415 label/models.py:112 part/models.py:774 +#: part/models.py:2449 plugin/models.py:40 report/models.py:181 #: templates/InvenTree/settings/mixins/urls.html:13 -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:125 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:279 -#: templates/js/translated/company.js:641 templates/js/translated/part.js:561 -#: templates/js/translated/part.js:700 templates/js/translated/part.js:1624 -#: templates/js/translated/stock.js:2327 +#: templates/InvenTree/settings/settings.html:282 +#: templates/js/translated/company.js:641 templates/js/translated/part.js:567 +#: templates/js/translated/part.js:706 templates/js/translated/part.js:1631 +#: templates/js/translated/stock.js:2485 msgid "Name" msgstr "Nazwa" -#: InvenTree/models.py:284 build/models.py:207 +#: InvenTree/models.py:284 build/models.py:209 #: build/templates/build/detail.html:25 company/models.py:354 #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:122 part/models.py:795 part/templates/part/category.html:74 +#: order/models.py:125 part/models.py:797 part/templates/part/category.html:74 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 #: stock/templates/stock/location.html:93 #: templates/InvenTree/settings/plugin_settings.html:33 -#: templates/js/translated/bom.js:327 templates/js/translated/bom.js:540 +#: templates/js/translated/bom.js:339 templates/js/translated/bom.js:552 #: templates/js/translated/build.js:1682 templates/js/translated/company.js:345 #: templates/js/translated/company.js:551 #: templates/js/translated/company.js:840 templates/js/translated/order.js:836 #: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 -#: templates/js/translated/part.js:620 templates/js/translated/part.js:992 -#: templates/js/translated/part.js:1077 templates/js/translated/part.js:1247 -#: templates/js/translated/part.js:1643 templates/js/translated/part.js:1712 -#: templates/js/translated/stock.js:1569 templates/js/translated/stock.js:2339 -#: templates/js/translated/stock.js:2384 +#: templates/js/translated/part.js:626 templates/js/translated/part.js:999 +#: templates/js/translated/part.js:1084 templates/js/translated/part.js:1254 +#: templates/js/translated/part.js:1650 templates/js/translated/part.js:1719 +#: templates/js/translated/stock.js:1577 templates/js/translated/stock.js:2314 +#: templates/js/translated/stock.js:2497 templates/js/translated/stock.js:2542 msgid "Description" msgstr "Opis" @@ -244,7 +245,7 @@ msgstr "Opis (opcjonalny)" msgid "parent" msgstr "nadrzędny" -#: InvenTree/serializers.py:65 part/models.py:2727 +#: InvenTree/serializers.py:65 part/models.py:2734 msgid "Must be a valid number" msgstr "Numer musi być prawidłowy" @@ -252,83 +253,83 @@ msgstr "Numer musi być prawidłowy" msgid "Filename" msgstr "Nazwa pliku" -#: InvenTree/settings.py:663 +#: InvenTree/settings.py:661 msgid "German" msgstr "Niemiecki" -#: InvenTree/settings.py:664 +#: InvenTree/settings.py:662 msgid "Greek" msgstr "Grecki" -#: InvenTree/settings.py:665 +#: InvenTree/settings.py:663 msgid "English" msgstr "Angielski" -#: InvenTree/settings.py:666 +#: InvenTree/settings.py:664 msgid "Spanish" msgstr "Hiszpański" -#: InvenTree/settings.py:667 +#: InvenTree/settings.py:665 msgid "Spanish (Mexican)" msgstr "Hiszpański (Meksyk)" -#: InvenTree/settings.py:668 +#: InvenTree/settings.py:666 msgid "French" msgstr "Francuski" -#: InvenTree/settings.py:669 +#: InvenTree/settings.py:667 msgid "Hebrew" msgstr "Hebrajski" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:668 msgid "Italian" msgstr "Włoski" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:669 msgid "Japanese" msgstr "Japoński" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:670 msgid "Korean" msgstr "Koreański" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:671 msgid "Dutch" msgstr "Holenderski" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:672 msgid "Norwegian" msgstr "Norweski" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:673 msgid "Polish" msgstr "Polski" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:674 msgid "Portugese" msgstr "Portugalski" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:675 msgid "Russian" msgstr "Rosyjski" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:676 msgid "Swedish" msgstr "Szwedzki" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:677 msgid "Thai" msgstr "Tajski" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:678 msgid "Turkish" msgstr "Turecki" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:679 msgid "Vietnamese" msgstr "Wietnamski" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:680 msgid "Chinese" msgstr "Chiński" @@ -374,7 +375,7 @@ msgstr "Zagubiono" msgid "Returned" msgstr "Zwrócone" -#: InvenTree/status_codes.py:143 order/models.py:941 +#: InvenTree/status_codes.py:143 order/models.py:961 #: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "Wysłane" @@ -455,7 +456,7 @@ msgstr "" msgid "Split child item" msgstr "Podziel element podrzędny" -#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2064 +#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2072 msgid "Merged stock items" msgstr "" @@ -543,56 +544,56 @@ msgstr "Hasła muszą być zgodne" msgid "System Information" msgstr "Informacja systemowa" -#: barcodes/api.py:54 barcodes/api.py:151 +#: barcodes/api.py:54 barcodes/api.py:152 msgid "Must provide barcode_data parameter" msgstr "" -#: barcodes/api.py:127 +#: barcodes/api.py:128 msgid "No match found for barcode data" msgstr "" -#: barcodes/api.py:129 +#: barcodes/api.py:130 msgid "Match found for barcode data" msgstr "" -#: barcodes/api.py:154 +#: barcodes/api.py:155 msgid "Must provide stockitem parameter" msgstr "" -#: barcodes/api.py:161 +#: barcodes/api.py:162 msgid "No matching stock item found" msgstr "Nie znaleziono pasujących stanów magazynowych" -#: barcodes/api.py:191 +#: barcodes/api.py:193 msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:195 +#: barcodes/api.py:197 msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:199 +#: barcodes/api.py:201 msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:205 barcodes/api.py:217 +#: barcodes/api.py:207 barcodes/api.py:219 msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:223 +#: barcodes/api.py:225 msgid "Barcode associated with Stock Item" msgstr "" -#: build/forms.py:36 build/models.py:1286 +#: build/forms.py:36 build/models.py:1293 #: build/templates/build/build_base.html:82 -#: build/templates/build/detail.html:35 common/models.py:1253 +#: build/templates/build/detail.html:35 common/models.py:1263 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/models.py:796 order/models.py:1207 order/serializers.py:810 +#: order/models.py:805 order/models.py:1229 order/serializers.py:816 #: order/templates/order/order_wizard/match_parts.html:30 -#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:145 -#: part/forms.py:161 part/forms.py:177 part/models.py:2629 +#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:144 +#: part/forms.py:160 part/forms.py:176 part/models.py:2636 #: part/templates/part/bom_upload/match_parts.html:31 -#: part/templates/part/detail.html:962 part/templates/part/detail.html:1048 +#: part/templates/part/detail.html:992 part/templates/part/detail.html:1078 #: part/templates/part/part_pricing.html:16 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 @@ -603,7 +604,7 @@ msgstr "" #: stock/templates/stock/item_base.html:181 #: stock/templates/stock/item_base.html:262 #: stock/templates/stock/item_base.html:270 -#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:555 +#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:567 #: templates/js/translated/build.js:295 templates/js/translated/build.js:495 #: templates/js/translated/build.js:689 templates/js/translated/build.js:699 #: templates/js/translated/build.js:1075 templates/js/translated/build.js:1422 @@ -611,11 +612,11 @@ msgstr "" #: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 #: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 #: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 -#: templates/js/translated/order.js:2150 templates/js/translated/part.js:900 -#: templates/js/translated/part.js:1855 templates/js/translated/part.js:1978 -#: templates/js/translated/part.js:2056 templates/js/translated/stock.js:383 -#: templates/js/translated/stock.js:580 templates/js/translated/stock.js:750 -#: templates/js/translated/stock.js:2519 templates/js/translated/stock.js:2621 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:906 +#: templates/js/translated/part.js:1862 templates/js/translated/part.js:1985 +#: templates/js/translated/part.js:2063 templates/js/translated/stock.js:391 +#: templates/js/translated/stock.js:588 templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2779 msgid "Quantity" msgstr "Ilość" @@ -623,9 +624,9 @@ msgstr "Ilość" msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 -#: stock/serializers.py:314 templates/js/translated/stock.js:230 -#: templates/js/translated/stock.js:384 +#: build/forms.py:41 order/serializers.py:820 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:238 +#: templates/js/translated/stock.js:392 msgid "Serial Numbers" msgstr "Numer seryjny" @@ -649,18 +650,18 @@ msgstr "Na pewno anulować?" msgid "Confirm build cancellation" msgstr "" -#: build/models.py:133 +#: build/models.py:135 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:137 build/templates/build/build_base.html:9 +#: build/models.py:139 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:457 +#: templates/js/translated/build.js:457 templates/js/translated/stock.js:2290 msgid "Build Order" msgstr "Zlecenie Budowy" -#: build/models.py:138 build/templates/build/build_base.html:13 +#: build/models.py:140 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:92 #: order/templates/order/so_sidebar.html:13 @@ -670,40 +671,40 @@ msgstr "Zlecenie Budowy" msgid "Build Orders" msgstr "Zlecenia budowy" -#: build/models.py:198 +#: build/models.py:200 msgid "Build Order Reference" msgstr "Odwołanie do zamówienia wykonania" -#: build/models.py:199 order/models.py:210 order/models.py:536 -#: order/models.py:803 part/models.py:2638 +#: build/models.py:201 order/models.py:213 order/models.py:541 +#: order/models.py:812 part/models.py:2645 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:547 templates/js/translated/build.js:1179 +#: templates/js/translated/bom.js:559 templates/js/translated/build.js:1179 #: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "Referencja" -#: build/models.py:210 +#: build/models.py:212 msgid "Brief description of the build" msgstr "Krótki opis budowy" -#: build/models.py:219 build/templates/build/build_base.html:164 +#: build/models.py:221 build/templates/build/build_base.html:164 #: build/templates/build/detail.html:88 msgid "Parent Build" msgstr "Budowa nadrzędna" -#: build/models.py:220 +#: build/models.py:222 msgid "BuildOrder to which this build is allocated" msgstr "Zamówienie budowy, do którego budowa jest przypisana" -#: build/models.py:225 build/templates/build/build_base.html:77 +#: build/models.py:227 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:856 order/models.py:930 -#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 -#: part/models.py:2204 part/models.py:2220 part/models.py:2239 -#: part/models.py:2256 part/models.py:2358 part/models.py:2480 -#: part/models.py:2613 part/models.py:2920 part/serializers.py:658 +#: order/models.py:876 order/models.py:950 +#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:359 +#: part/models.py:2211 part/models.py:2227 part/models.py:2246 +#: part/models.py:2263 part/models.py:2365 part/models.py:2487 +#: part/models.py:2620 part/models.py:2927 part/serializers.py:658 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/set_category.html:13 @@ -713,205 +714,205 @@ msgstr "Zamówienie budowy, do którego budowa jest przypisana" #: templates/InvenTree/search.html:80 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 -#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:326 -#: templates/js/translated/bom.js:505 templates/js/translated/build.js:680 +#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:338 +#: templates/js/translated/bom.js:517 templates/js/translated/build.js:680 #: templates/js/translated/build.js:1048 templates/js/translated/build.js:1419 #: templates/js/translated/build.js:1687 templates/js/translated/company.js:492 #: templates/js/translated/company.js:749 templates/js/translated/order.js:84 #: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 #: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 -#: templates/js/translated/order.js:2128 templates/js/translated/part.js:977 -#: templates/js/translated/part.js:1058 templates/js/translated/part.js:1225 -#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:719 -#: templates/js/translated/stock.js:926 templates/js/translated/stock.js:1526 -#: templates/js/translated/stock.js:2609 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:984 +#: templates/js/translated/part.js:1065 templates/js/translated/part.js:1232 +#: templates/js/translated/stock.js:562 templates/js/translated/stock.js:727 +#: templates/js/translated/stock.js:934 templates/js/translated/stock.js:1534 +#: templates/js/translated/stock.js:2767 msgid "Part" msgstr "Część" -#: build/models.py:233 +#: build/models.py:235 msgid "Select part to build" msgstr "Wybierz część do budowy" -#: build/models.py:238 +#: build/models.py:240 msgid "Sales Order Reference" msgstr "Odwołanie do zamówienia sprzedaży" -#: build/models.py:242 +#: build/models.py:244 msgid "SalesOrder to which this build is allocated" msgstr "Zamówienie sprzedaży, do którego budowa jest przypisana" -#: build/models.py:247 templates/js/translated/build.js:1407 +#: build/models.py:249 templates/js/translated/build.js:1407 #: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "Lokalizacja źródła" -#: build/models.py:251 +#: build/models.py:253 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Wybierz lokalizację, z której pobrać element do budowy (pozostaw puste, aby wziąć z dowolnej lokalizacji)" -#: build/models.py:256 +#: build/models.py:258 msgid "Destination Location" msgstr "Lokalizacja docelowa" -#: build/models.py:260 +#: build/models.py:262 msgid "Select location where the completed items will be stored" msgstr "Wybierz lokalizację, w której będą przechowywane ukończone elementy" -#: build/models.py:264 +#: build/models.py:266 msgid "Build Quantity" msgstr "Ilość do stworzenia" -#: build/models.py:267 +#: build/models.py:269 msgid "Number of stock items to build" msgstr "Ilość przedmiotów do zbudowania" -#: build/models.py:271 +#: build/models.py:273 msgid "Completed items" msgstr "Ukończone elementy" -#: build/models.py:273 +#: build/models.py:275 msgid "Number of stock items which have been completed" msgstr "Ilość produktów magazynowych które zostały ukończone" -#: build/models.py:277 part/templates/part/part_base.html:234 +#: build/models.py:279 part/templates/part/part_base.html:234 msgid "Build Status" msgstr "Status budowania" -#: build/models.py:281 +#: build/models.py:283 msgid "Build status code" msgstr "Kod statusu budowania" -#: build/models.py:285 stock/models.py:531 +#: build/models.py:287 stock/models.py:533 msgid "Batch Code" msgstr "Kod partii" -#: build/models.py:289 +#: build/models.py:291 msgid "Batch code for this build output" msgstr "Kod partii dla wyjścia budowy" -#: build/models.py:292 order/models.py:126 part/models.py:967 +#: build/models.py:294 order/models.py:129 part/models.py:969 #: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "Data utworzenia" -#: build/models.py:296 order/models.py:558 +#: build/models.py:298 order/models.py:563 msgid "Target completion date" msgstr "Docelowy termin zakończenia" -#: build/models.py:297 +#: build/models.py:299 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:252 +#: build/models.py:302 order/models.py:255 #: templates/js/translated/build.js:1758 msgid "Completion Date" msgstr "Data zakończenia" -#: build/models.py:306 +#: build/models.py:308 msgid "completed by" msgstr "zrealizowane przez" -#: build/models.py:314 templates/js/translated/build.js:1729 +#: build/models.py:316 templates/js/translated/build.js:1729 msgid "Issued by" msgstr "Wydany przez" -#: build/models.py:315 +#: build/models.py:317 msgid "User who issued this build order" msgstr "Użytkownik, który wydał to zamówienie" -#: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:140 +#: build/models.py:325 build/templates/build/build_base.html:185 +#: build/templates/build/detail.html:116 order/models.py:143 #: order/templates/order/order_base.html:170 -#: order/templates/order/sales_order_base.html:182 part/models.py:971 +#: order/templates/order/sales_order_base.html:182 part/models.py:973 #: report/templates/report/inventree_build_order_base.html:159 #: templates/js/translated/build.js:1741 templates/js/translated/order.js:864 msgid "Responsible" msgstr "Odpowiedzialny" -#: build/models.py:324 +#: build/models.py:326 msgid "User responsible for this build order" msgstr "Użytkownik odpowiedzialny za to zamówienie budowy" -#: build/models.py:329 build/templates/build/detail.html:102 +#: build/models.py:331 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:525 +#: part/templates/part/part_base.html:354 stock/models.py:527 #: stock/templates/stock/item_base.html:373 msgid "External Link" msgstr "Link Zewnętrzny" -#: build/models.py:334 build/serializers.py:201 +#: build/models.py:336 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:144 order/models.py:805 order/models.py:1051 +#: order/models.py:147 order/models.py:814 order/models.py:1071 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/models.py:956 -#: part/templates/part/detail.html:120 part/templates/part/part_sidebar.html:50 +#: order/templates/order/so_sidebar.html:17 part/models.py:958 +#: part/templates/part/detail.html:137 part/templates/part/part_sidebar.html:54 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:597 -#: stock/models.py:1867 stock/models.py:1973 stock/serializers.py:332 -#: stock/serializers.py:639 stock/serializers.py:737 stock/serializers.py:869 -#: stock/templates/stock/stock_sidebar.html:21 -#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:711 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:599 +#: stock/models.py:1895 stock/models.py:2001 stock/serializers.py:332 +#: stock/serializers.py:640 stock/serializers.py:738 stock/serializers.py:870 +#: stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:723 #: templates/js/translated/company.js:845 templates/js/translated/order.js:1149 #: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 -#: templates/js/translated/stock.js:1309 templates/js/translated/stock.js:1795 +#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1803 msgid "Notes" msgstr "Uwagi" -#: build/models.py:335 +#: build/models.py:337 msgid "Extra build notes" msgstr "Dodatkowe notatki do budowy" -#: build/models.py:710 +#: build/models.py:717 msgid "No build output specified" msgstr "Nie określono danych wyjściowych budowy" -#: build/models.py:713 +#: build/models.py:720 msgid "Build output is already completed" msgstr "Budowanie wyjścia jest już ukończone" -#: build/models.py:716 +#: build/models.py:723 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1108 +#: build/models.py:1115 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1117 +#: build/models.py:1124 #, python-brace-format msgid "Allocated quantity ({q}) must not execed available stock quantity ({a})" msgstr "" -#: build/models.py:1127 +#: build/models.py:1134 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:1167 +#: build/models.py:1140 order/models.py:1189 msgid "Allocation quantity must be greater than zero" msgstr "Alokowana ilość musi być większa niż zero" -#: build/models.py:1139 +#: build/models.py:1146 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1196 +#: build/models.py:1203 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1256 stock/templates/stock/item_base.html:345 +#: build/models.py:1263 stock/templates/stock/item_base.html:345 #: templates/InvenTree/search.html:137 templates/js/translated/build.js:1660 #: templates/navbar.html:35 msgid "Build" msgstr "Budowa" -#: build/models.py:1257 +#: build/models.py:1264 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1273 build/serializers.py:388 order/serializers.py:690 -#: order/serializers.py:708 stock/serializers.py:577 stock/serializers.py:695 +#: build/models.py:1280 build/serializers.py:388 order/serializers.py:696 +#: order/serializers.py:714 stock/serializers.py:578 stock/serializers.py:696 #: stock/templates/stock/item_base.html:9 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:367 @@ -920,24 +921,24 @@ msgstr "" #: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 #: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 #: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 -#: templates/js/translated/stock.js:555 templates/js/translated/stock.js:720 -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:563 templates/js/translated/stock.js:728 +#: templates/js/translated/stock.js:2628 msgid "Stock Item" msgstr "Element magazynowy" -#: build/models.py:1274 +#: build/models.py:1281 msgid "Source stock item" msgstr "Lokalizacja magazynowania przedmiotu" -#: build/models.py:1287 +#: build/models.py:1294 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1295 +#: build/models.py:1302 msgid "Install into" msgstr "Zainstaluj do" -#: build/models.py:1296 +#: build/models.py:1303 msgid "Destination stock item" msgstr "Docelowa lokalizacja magazynowa przedmiotu" @@ -962,16 +963,16 @@ msgid "This build output is not fully allocated" msgstr "" #: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 -#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:730 -#: stock/serializers.py:971 stock/templates/stock/item_base.html:313 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:731 +#: stock/serializers.py:972 stock/templates/stock/item_base.html:313 #: templates/js/translated/barcode.js:384 #: templates/js/translated/barcode.js:557 templates/js/translated/build.js:480 #: templates/js/translated/build.js:1087 templates/js/translated/order.js:508 #: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 #: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 -#: templates/js/translated/part.js:179 templates/js/translated/stock.js:556 -#: templates/js/translated/stock.js:721 templates/js/translated/stock.js:928 -#: templates/js/translated/stock.js:1676 templates/js/translated/stock.js:2411 +#: templates/js/translated/part.js:179 templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:729 templates/js/translated/stock.js:936 +#: templates/js/translated/stock.js:1684 templates/js/translated/stock.js:2569 msgid "Location" msgstr "Lokalizacja" @@ -980,12 +981,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:552 +#: build/templates/build/detail.html:63 order/models.py:557 #: order/serializers.py:247 stock/templates/stock/item_base.html:187 #: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1716 #: templates/js/translated/order.js:591 templates/js/translated/order.js:840 -#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1651 -#: templates/js/translated/stock.js:2488 templates/js/translated/stock.js:2637 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1659 +#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2795 msgid "Status" msgstr "Status" @@ -1021,8 +1022,8 @@ msgstr "" msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:313 build/serializers.py:362 part/models.py:2753 -#: part/models.py:2912 +#: build/serializers.py:313 build/serializers.py:362 part/models.py:2760 +#: part/models.py:2919 msgid "BOM Item" msgstr "" @@ -1038,16 +1039,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:394 stock/serializers.py:584 +#: build/serializers.py:394 stock/serializers.py:585 msgid "Item must be in stock" msgstr "Towar musi znajdować się w magazynie" -#: build/serializers.py:408 order/models.py:277 order/serializers.py:240 -#: stock/models.py:365 stock/models.py:1077 stock/serializers.py:305 +#: build/serializers.py:408 order/models.py:280 order/serializers.py:240 +#: stock/models.py:367 stock/models.py:1105 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "Ilość musi być większa niż zero" -#: build/serializers.py:450 order/serializers.py:741 +#: build/serializers.py:450 order/serializers.py:747 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1060,7 +1061,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:491 order/serializers.py:984 +#: build/serializers.py:491 order/serializers.py:990 msgid "Allocation items must be provided" msgstr "" @@ -1164,13 +1165,13 @@ msgid "Completed" msgstr "Zakończone" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:927 -#: order/models.py:1023 order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:947 +#: order/models.py:1043 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:307 -#: templates/js/translated/order.js:1218 +#: templates/js/translated/order.js:1218 templates/js/translated/stock.js:2304 msgid "Sales Order" msgstr "Zamówienie zakupu" @@ -1224,7 +1225,7 @@ msgstr "Źródło magazynu" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:878 stock/forms.py:136 +#: build/templates/build/detail.html:50 order/models.py:898 stock/forms.py:136 #: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "Przeznaczenie" @@ -1239,7 +1240,7 @@ msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:331 -#: templates/js/translated/stock.js:1665 templates/js/translated/stock.js:2644 +#: templates/js/translated/stock.js:1673 templates/js/translated/stock.js:2802 #: templates/js/translated/table_filters.js:151 #: templates/js/translated/table_filters.js:238 msgid "Batch" @@ -1343,9 +1344,9 @@ msgstr "" #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 #: order/templates/order/sales_order_detail.html:107 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:196 -#: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 -#: stock/templates/stock/stock_sidebar.html:19 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:213 +#: part/templates/part/part_sidebar.html:52 stock/templates/stock/item.html:112 +#: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Załączniki" @@ -1360,8 +1361,8 @@ msgstr "Notatki tworzenia" #: order/templates/order/purchase_order_detail.html:108 #: order/templates/order/sales_order_detail.html:127 #: order/templates/order/sales_order_detail.html:186 -#: part/templates/part/detail.html:124 stock/templates/stock/item.html:115 -#: stock/templates/stock/item.html:205 +#: part/templates/part/detail.html:141 stock/templates/stock/item.html:132 +#: stock/templates/stock/item.html:235 msgid "Edit Notes" msgstr "" @@ -1373,7 +1374,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:303 +#: build/templates/build/index.html:18 part/templates/part/detail.html:320 msgid "New Build Order" msgstr "Nowe zlecenie budowy" @@ -1453,23 +1454,23 @@ msgstr "" msgid "Delete Build Order" msgstr "" -#: common/files.py:67 +#: common/files.py:65 msgid "Unsupported file format: {ext.upper()}" msgstr "" -#: common/files.py:69 +#: common/files.py:67 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:74 +#: common/files.py:72 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:76 +#: common/files.py:74 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:78 +#: common/files.py:76 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1490,740 +1491,828 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:344 common/models.py:998 common/models.py:1206 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:352 +msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:346 +#: common/models.py:354 msgid "Settings value" msgstr "Ustawienia wartości" -#: common/models.py:380 +#: common/models.py:388 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:400 +#: common/models.py:408 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:411 +#: common/models.py:419 msgid "Value must be an integer value" msgstr "" -#: common/models.py:434 +#: common/models.py:442 msgid "Key string must be unique" msgstr "" -#: common/models.py:553 +#: common/models.py:561 msgid "No group" msgstr "" -#: common/models.py:595 +#: common/models.py:603 msgid "Restart required" msgstr "" -#: common/models.py:596 +#: common/models.py:604 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:603 +#: common/models.py:611 msgid "InvenTree Instance Name" msgstr "Nazwa instancji InvenTree" -#: common/models.py:605 +#: common/models.py:613 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:609 +#: common/models.py:617 msgid "Use instance name" msgstr "" -#: common/models.py:610 +#: common/models.py:618 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:616 company/models.py:100 company/models.py:101 +#: common/models.py:624 company/models.py:100 company/models.py:101 msgid "Company name" msgstr "Nazwa firmy" -#: common/models.py:617 +#: common/models.py:625 msgid "Internal company name" msgstr "" -#: common/models.py:622 +#: common/models.py:630 msgid "Base URL" msgstr "Bazowy URL" -#: common/models.py:623 +#: common/models.py:631 msgid "Base URL for server instance" msgstr "Bazowy adres URL dla instancji serwera" -#: common/models.py:629 +#: common/models.py:637 msgid "Default Currency" msgstr "" -#: common/models.py:630 +#: common/models.py:638 msgid "Default currency" msgstr "" -#: common/models.py:636 +#: common/models.py:644 msgid "Download from URL" msgstr "Pobierz z adresu URL" -#: common/models.py:637 +#: common/models.py:645 msgid "Allow download of remote images and files from external URL" msgstr "Zezwól na pobieranie zewnętrznych obrazów i plików z zewnętrznego URL" -#: common/models.py:643 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:651 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Obsługa kodu kreskowego" -#: common/models.py:644 +#: common/models.py:652 msgid "Enable barcode scanner support" msgstr "Włącz obsługę skanera kodów" -#: common/models.py:650 +#: common/models.py:658 msgid "IPN Regex" msgstr "Wyrażenie regularne IPN" -#: common/models.py:651 +#: common/models.py:659 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:655 +#: common/models.py:663 msgid "Allow Duplicate IPN" msgstr "Zezwól na powtarzający się IPN" -#: common/models.py:656 +#: common/models.py:664 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:662 +#: common/models.py:670 msgid "Allow Editing IPN" msgstr "Zezwól na edycję IPN" -#: common/models.py:663 +#: common/models.py:671 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:669 +#: common/models.py:677 msgid "Copy Part BOM Data" msgstr "Skopiuj BOM komponentu" -#: common/models.py:670 +#: common/models.py:678 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:676 +#: common/models.py:684 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:677 +#: common/models.py:685 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:683 +#: common/models.py:691 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:684 +#: common/models.py:692 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:690 +#: common/models.py:698 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:691 +#: common/models.py:699 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:697 part/models.py:2482 report/models.py:187 +#: common/models.py:705 part/models.py:2489 report/models.py:187 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:422 msgid "Template" msgstr "Szablon" -#: common/models.py:698 +#: common/models.py:706 msgid "Parts are templates by default" msgstr "" -#: common/models.py:704 part/models.py:919 templates/js/translated/bom.js:1068 +#: common/models.py:712 part/models.py:921 templates/js/translated/bom.js:1082 #: templates/js/translated/table_filters.js:168 #: templates/js/translated/table_filters.js:434 msgid "Assembly" msgstr "Złożenie" -#: common/models.py:705 +#: common/models.py:713 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:711 part/models.py:925 +#: common/models.py:719 part/models.py:927 #: templates/js/translated/table_filters.js:438 msgid "Component" msgstr "Komponent" -#: common/models.py:712 +#: common/models.py:720 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:718 part/models.py:936 +#: common/models.py:726 part/models.py:938 msgid "Purchaseable" msgstr "Możliwość zakupu" -#: common/models.py:719 +#: common/models.py:727 msgid "Parts are purchaseable by default" msgstr "Części są domyślnie z możliwością zakupu" -#: common/models.py:725 part/models.py:941 +#: common/models.py:733 part/models.py:943 #: templates/js/translated/table_filters.js:446 msgid "Salable" msgstr "Możliwość sprzedaży" -#: common/models.py:726 +#: common/models.py:734 msgid "Parts are salable by default" msgstr "Części są domyślnie z możliwością sprzedaży" -#: common/models.py:732 part/models.py:931 +#: common/models.py:740 part/models.py:933 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 #: templates/js/translated/table_filters.js:450 msgid "Trackable" msgstr "Możliwość śledzenia" -#: common/models.py:733 +#: common/models.py:741 msgid "Parts are trackable by default" msgstr "Części są domyślnie z możliwością śledzenia" -#: common/models.py:739 part/models.py:951 +#: common/models.py:747 part/models.py:953 #: part/templates/part/part_base.html:147 #: templates/js/translated/table_filters.js:42 msgid "Virtual" msgstr "Wirtualny" -#: common/models.py:740 +#: common/models.py:748 msgid "Parts are virtual by default" msgstr "Części są domyślnie wirtualne" -#: common/models.py:746 +#: common/models.py:754 msgid "Show Import in Views" msgstr "" -#: common/models.py:747 +#: common/models.py:755 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:753 +#: common/models.py:761 msgid "Show Price in Forms" msgstr "" -#: common/models.py:754 +#: common/models.py:762 msgid "Display part price in some forms" msgstr "" -#: common/models.py:765 +#: common/models.py:773 msgid "Show Price in BOM" msgstr "" -#: common/models.py:766 +#: common/models.py:774 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:772 +#: common/models.py:780 msgid "Show related parts" msgstr "" -#: common/models.py:773 +#: common/models.py:781 msgid "Display related parts for a part" msgstr "" -#: common/models.py:779 +#: common/models.py:787 msgid "Create initial stock" msgstr "" -#: common/models.py:780 +#: common/models.py:788 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:786 +#: common/models.py:794 msgid "Internal Prices" msgstr "" -#: common/models.py:787 +#: common/models.py:795 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:793 +#: common/models.py:801 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:794 +#: common/models.py:802 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:800 +#: common/models.py:808 msgid "Part Name Display Format" msgstr "" -#: common/models.py:801 +#: common/models.py:809 msgid "Format to display the part name" msgstr "" -#: common/models.py:808 +#: common/models.py:816 msgid "Enable Reports" msgstr "" -#: common/models.py:809 +#: common/models.py:817 msgid "Enable generation of reports" msgstr "" -#: common/models.py:815 templates/stats.html:25 +#: common/models.py:823 templates/stats.html:25 msgid "Debug Mode" msgstr "Tryb Debugowania" -#: common/models.py:816 +#: common/models.py:824 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:822 +#: common/models.py:830 msgid "Page Size" msgstr "Rozmiar strony" -#: common/models.py:823 +#: common/models.py:831 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:833 +#: common/models.py:841 msgid "Test Reports" msgstr "Raporty testów" -#: common/models.py:834 +#: common/models.py:842 msgid "Enable generation of test reports" msgstr "Włącz generowanie raportów testów" -#: common/models.py:840 +#: common/models.py:848 msgid "Stock Expiry" msgstr "" -#: common/models.py:841 +#: common/models.py:849 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:847 +#: common/models.py:855 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:848 +#: common/models.py:856 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:854 +#: common/models.py:862 msgid "Stock Stale Time" msgstr "" -#: common/models.py:855 +#: common/models.py:863 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:857 +#: common/models.py:865 msgid "days" msgstr "dni" -#: common/models.py:862 +#: common/models.py:870 msgid "Build Expired Stock" msgstr "" -#: common/models.py:863 +#: common/models.py:871 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:869 +#: common/models.py:877 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:870 +#: common/models.py:878 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:876 -msgid "Group by Part" -msgstr "Grupuj według komponentu" - -#: common/models.py:877 -msgid "Group stock items by part reference in table views" -msgstr "" - -#: common/models.py:883 +#: common/models.py:884 msgid "Build Order Reference Prefix" msgstr "" -#: common/models.py:884 +#: common/models.py:885 msgid "Prefix value for build order reference" msgstr "" -#: common/models.py:889 +#: common/models.py:890 msgid "Build Order Reference Regex" msgstr "" -#: common/models.py:890 +#: common/models.py:891 msgid "Regular expression pattern for matching build order reference" msgstr "" -#: common/models.py:894 +#: common/models.py:895 msgid "Sales Order Reference Prefix" msgstr "" -#: common/models.py:895 +#: common/models.py:896 msgid "Prefix value for sales order reference" msgstr "" -#: common/models.py:900 +#: common/models.py:901 msgid "Purchase Order Reference Prefix" msgstr "" -#: common/models.py:901 +#: common/models.py:902 msgid "Prefix value for purchase order reference" msgstr "" -#: common/models.py:907 +#: common/models.py:908 msgid "Enable password forgot" msgstr "" -#: common/models.py:908 +#: common/models.py:909 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:913 +#: common/models.py:914 msgid "Enable registration" msgstr "" -#: common/models.py:914 +#: common/models.py:915 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:919 +#: common/models.py:920 msgid "Enable SSO" msgstr "" -#: common/models.py:920 +#: common/models.py:921 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:925 +#: common/models.py:926 msgid "Email required" msgstr "" -#: common/models.py:926 +#: common/models.py:927 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:931 +#: common/models.py:932 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:932 +#: common/models.py:933 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:937 +#: common/models.py:938 msgid "Mail twice" msgstr "" -#: common/models.py:938 +#: common/models.py:939 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:943 +#: common/models.py:944 msgid "Password twice" msgstr "" -#: common/models.py:944 +#: common/models.py:945 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:949 +#: common/models.py:950 msgid "Group on signup" msgstr "" -#: common/models.py:950 +#: common/models.py:951 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:955 +#: common/models.py:956 msgid "Enforce MFA" msgstr "" -#: common/models.py:956 +#: common/models.py:957 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:961 +#: common/models.py:964 msgid "Enable URL integration" msgstr "" -#: common/models.py:962 +#: common/models.py:965 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:968 +#: common/models.py:971 msgid "Enable navigation integration" msgstr "" -#: common/models.py:969 +#: common/models.py:972 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:975 +#: common/models.py:978 msgid "Enable app integration" msgstr "" -#: common/models.py:976 +#: common/models.py:979 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:982 +#: common/models.py:985 msgid "Enable schedule integration" msgstr "" -#: common/models.py:983 +#: common/models.py:986 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1029 +#: common/models.py:992 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:993 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:1008 common/models.py:1216 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1039 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1030 +#: common/models.py:1040 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1035 +#: common/models.py:1045 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1036 +#: common/models.py:1046 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1041 +#: common/models.py:1051 msgid "Show latest parts" msgstr "" -#: common/models.py:1042 +#: common/models.py:1052 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1047 +#: common/models.py:1057 msgid "Recent Part Count" msgstr "" -#: common/models.py:1048 +#: common/models.py:1058 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1054 +#: common/models.py:1064 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1055 +#: common/models.py:1065 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1060 +#: common/models.py:1070 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1061 +#: common/models.py:1071 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1066 +#: common/models.py:1076 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1067 +#: common/models.py:1077 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1072 +#: common/models.py:1082 msgid "Show low stock" msgstr "" -#: common/models.py:1073 +#: common/models.py:1083 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1078 +#: common/models.py:1088 msgid "Show depleted stock" msgstr "" -#: common/models.py:1079 +#: common/models.py:1089 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1084 +#: common/models.py:1094 msgid "Show needed stock" msgstr "" -#: common/models.py:1085 +#: common/models.py:1095 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1090 +#: common/models.py:1100 msgid "Show expired stock" msgstr "" -#: common/models.py:1091 +#: common/models.py:1101 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1096 +#: common/models.py:1106 msgid "Show stale stock" msgstr "" -#: common/models.py:1097 +#: common/models.py:1107 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1102 +#: common/models.py:1112 msgid "Show pending builds" msgstr "" -#: common/models.py:1103 +#: common/models.py:1113 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1108 +#: common/models.py:1118 msgid "Show overdue builds" msgstr "" -#: common/models.py:1109 +#: common/models.py:1119 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1114 +#: common/models.py:1124 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1115 +#: common/models.py:1125 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1120 +#: common/models.py:1130 msgid "Show overdue POs" msgstr "" -#: common/models.py:1121 +#: common/models.py:1131 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1126 +#: common/models.py:1136 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1127 +#: common/models.py:1137 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1132 +#: common/models.py:1142 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1133 +#: common/models.py:1143 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1139 +#: common/models.py:1149 msgid "Inline label display" msgstr "" -#: common/models.py:1140 +#: common/models.py:1150 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1146 +#: common/models.py:1156 msgid "Inline report display" msgstr "" -#: common/models.py:1147 +#: common/models.py:1157 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1153 +#: common/models.py:1163 msgid "Search Preview Results" msgstr "" -#: common/models.py:1154 +#: common/models.py:1164 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1160 +#: common/models.py:1170 msgid "Search Show Stock" msgstr "" -#: common/models.py:1161 +#: common/models.py:1171 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1167 +#: common/models.py:1177 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1168 +#: common/models.py:1178 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1174 +#: common/models.py:1184 msgid "Show Quantity in Forms" msgstr "Pokaż ilość w formularzach" -#: common/models.py:1175 +#: common/models.py:1185 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1181 +#: common/models.py:1191 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1182 +#: common/models.py:1192 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1188 +#: common/models.py:1198 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1189 +#: common/models.py:1199 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1254 company/forms.py:43 +#: common/models.py:1264 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1261 company/serializers.py:264 +#: common/models.py:1271 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 -#: templates/js/translated/part.js:909 templates/js/translated/part.js:1860 +#: templates/js/translated/part.js:915 templates/js/translated/part.js:1867 msgid "Price" msgstr "Cena" -#: common/models.py:1262 +#: common/models.py:1272 msgid "Unit price at specified quantity" msgstr "" +#: common/models.py:1429 common/models.py:1568 +msgid "Endpoint" +msgstr "" + +#: common/models.py:1430 +msgid "Endpoint at which this webhook is received" +msgstr "" + +#: common/models.py:1439 +msgid "Name for this webhook" +msgstr "" + +#: common/models.py:1444 part/models.py:948 plugin/models.py:46 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:96 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:417 +msgid "Active" +msgstr "Aktywny" + +#: common/models.py:1445 +msgid "Is this webhook active" +msgstr "" + +#: common/models.py:1459 +msgid "Token" +msgstr "" + +#: common/models.py:1460 +msgid "Token for access" +msgstr "" + +#: common/models.py:1467 +msgid "Secret" +msgstr "" + +#: common/models.py:1468 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:1535 +msgid "Message ID" +msgstr "" + +#: common/models.py:1536 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:1544 +msgid "Host" +msgstr "" + +#: common/models.py:1545 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:1552 +msgid "Header" +msgstr "" + +#: common/models.py:1553 +msgid "Header of this message" +msgstr "" + +#: common/models.py:1559 +msgid "Body" +msgstr "" + +#: common/models.py:1560 +msgid "Body of this message" +msgstr "" + +#: common/models.py:1569 +msgid "Endpoint on which this message was received" +msgstr "" + +#: common/models.py:1574 +msgid "Worked on" +msgstr "" + +#: common/models.py:1575 +msgid "Was the work on this message finished?" +msgstr "" + #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 #: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 -#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 -#: part/views.py:764 +#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:213 +#: part/views.py:773 msgid "Upload File" msgstr "Wyślij plik" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 #: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 -#: part/views.py:765 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:214 +#: part/views.py:774 msgid "Match Fields" msgstr "" @@ -2315,7 +2404,7 @@ msgstr "Punkt kontaktowy" msgid "Link to external company information" msgstr "Link do informacji o zewnętrznym przedsiębiorstwie" -#: company/models.py:139 part/models.py:838 +#: company/models.py:139 part/models.py:840 msgid "Image" msgstr "Obraz" @@ -2352,8 +2441,8 @@ msgstr "Waluta" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:469 -#: stock/templates/stock/item_base.html:142 +#: company/models.py:320 company/models.py:535 stock/models.py:471 +#: stock/templates/stock/item_base.html:142 templates/js/translated/bom.js:328 msgid "Base Part" msgstr "Część bazowa" @@ -2380,7 +2469,7 @@ msgstr "Wybierz producenta" #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:533 #: templates/js/translated/company.js:818 templates/js/translated/order.js:1038 -#: templates/js/translated/part.js:245 templates/js/translated/part.js:889 +#: templates/js/translated/part.js:245 templates/js/translated/part.js:895 msgid "MPN" msgstr "MPN" @@ -2409,8 +2498,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1960 templates/js/translated/company.js:647 -#: templates/js/translated/part.js:709 templates/js/translated/stock.js:1296 +#: stock/models.py:1988 templates/js/translated/company.js:647 +#: templates/js/translated/part.js:715 templates/js/translated/stock.js:1304 msgid "Value" msgstr "" @@ -2418,10 +2507,10 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:429 part/models.py:913 part/models.py:2450 +#: company/models.py:429 part/models.py:915 part/models.py:2457 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:284 -#: templates/js/translated/company.js:653 templates/js/translated/part.js:715 +#: templates/InvenTree/settings/settings.html:287 +#: templates/js/translated/company.js:653 templates/js/translated/part.js:721 msgid "Units" msgstr "Jednostki" @@ -2434,13 +2523,13 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:224 +#: company/templates/company/supplier_part.html:87 order/models.py:227 #: order/templates/order/order_base.html:112 -#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 -#: part/bom.py:247 stock/templates/stock/item_base.html:397 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:237 +#: part/bom.py:265 stock/templates/stock/item_base.html:397 #: templates/js/translated/company.js:337 #: templates/js/translated/company.js:774 templates/js/translated/order.js:823 -#: templates/js/translated/part.js:215 templates/js/translated/part.js:857 +#: templates/js/translated/part.js:215 templates/js/translated/part.js:863 #: templates/js/translated/table_filters.js:393 msgid "Supplier" msgstr "Dostawca" @@ -2450,8 +2539,8 @@ msgid "Select supplier" msgstr "Wybierz dostawcę" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 -#: templates/js/translated/part.js:226 templates/js/translated/part.js:875 +#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1025 +#: templates/js/translated/part.js:226 templates/js/translated/part.js:881 msgid "SKU" msgstr "SKU" @@ -2472,22 +2561,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:576 company/templates/company/supplier_part.html:119 -#: part/models.py:2641 report/templates/report/inventree_po_report.html:93 +#: part/models.py:2648 report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" msgstr "Uwaga" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "base cost" msgstr "koszt podstawowy" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:493 stock/templates/stock/item_base.html:338 -#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1791 +#: stock/models.py:495 stock/templates/stock/item_base.html:338 +#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1799 msgid "Packaging" msgstr "Opakowanie" @@ -2495,7 +2584,7 @@ msgstr "Opakowanie" msgid "Part packaging" msgstr "Opakowanie części" -#: company/models.py:584 part/models.py:1781 +#: company/models.py:584 part/models.py:1783 msgid "multiple" msgstr "wielokrotność" @@ -2554,12 +2643,12 @@ msgstr "Prześlij nowy obraz" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:547 -#: order/templates/order/sales_order_base.html:115 stock/models.py:512 -#: stock/models.py:513 stock/serializers.py:625 +#: company/templates/company/company_base.html:83 order/models.py:552 +#: order/templates/order/sales_order_base.html:115 stock/models.py:514 +#: stock/models.py:515 stock/serializers.py:626 #: stock/templates/stock/item_base.html:290 #: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 -#: templates/js/translated/stock.js:2452 +#: templates/js/translated/stock.js:2610 #: templates/js/translated/table_filters.js:397 msgid "Customer" msgstr "Klient" @@ -2590,7 +2679,7 @@ msgstr "Utwórz nowego dostawcę części" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:118 -#: part/templates/part/detail.html:336 +#: part/templates/part/detail.html:353 msgid "New Supplier Part" msgstr "Nowy dostawca części" @@ -2598,8 +2687,8 @@ msgstr "Nowy dostawca części" #: company/templates/company/detail.html:79 #: company/templates/company/manufacturer_part.html:127 #: company/templates/company/manufacturer_part.html:156 -#: part/templates/part/category.html:171 part/templates/part/detail.html:345 -#: part/templates/part/detail.html:374 +#: part/templates/part/category.html:171 part/templates/part/detail.html:362 +#: part/templates/part/detail.html:391 msgid "Options" msgstr "Opcje" @@ -2627,7 +2716,7 @@ msgstr "Części producenta" msgid "Create new manufacturer part" msgstr "Utwórz nową część producenta" -#: company/templates/company/detail.html:67 part/templates/part/detail.html:364 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:381 msgid "New Manufacturer Part" msgstr "Nowa część producenta" @@ -2641,7 +2730,7 @@ msgstr "Zapasy dostawcy" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:68 part/templates/part/part_sidebar.html:33 +#: part/templates/part/detail.html:85 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197 #: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 @@ -2663,7 +2752,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:91 part/templates/part/part_sidebar.html:37 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:41 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217 #: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 @@ -2691,13 +2780,13 @@ msgstr "" #: company/templates/company/detail.html:384 #: company/templates/company/manufacturer_part.html:215 -#: part/templates/part/detail.html:418 +#: part/templates/part/detail.html:435 msgid "Delete Supplier Parts?" msgstr "" #: company/templates/company/detail.html:385 #: company/templates/company/manufacturer_part.html:216 -#: part/templates/part/detail.html:419 +#: part/templates/part/detail.html:436 msgid "All selected supplier parts will be deleted" msgstr "" @@ -2714,7 +2803,7 @@ msgstr "Producenci" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:34 #: company/templates/company/supplier_part.html:159 -#: part/templates/part/detail.html:71 part/templates/part/part_base.html:76 +#: part/templates/part/detail.html:88 part/templates/part/part_base.html:76 msgid "Order part" msgstr "Zamów część" @@ -2735,34 +2824,34 @@ msgstr "Część wewnętrzna" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 -#: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 +#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:163 #: templates/InvenTree/search.html:188 templates/navbar.html:45 msgid "Suppliers" msgstr "Dostawcy" #: company/templates/company/manufacturer_part.html:129 -#: part/templates/part/detail.html:347 +#: part/templates/part/detail.html:364 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:129 #: company/templates/company/manufacturer_part.html:158 #: company/templates/company/manufacturer_part.html:254 -#: part/templates/part/detail.html:347 part/templates/part/detail.html:376 +#: part/templates/part/detail.html:364 part/templates/part/detail.html:393 #: templates/js/translated/company.js:426 templates/js/translated/helpers.js:31 -#: users/models.py:210 +#: users/models.py:212 msgid "Delete" msgstr "Usuń" #: company/templates/company/manufacturer_part.html:143 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:17 -#: part/templates/part/detail.html:170 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:187 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "Parametry" #: company/templates/company/manufacturer_part.html:147 -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:192 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part.html:65 msgid "New Parameter" @@ -2773,7 +2862,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:191 -#: part/templates/part/detail.html:862 +#: part/templates/part/detail.html:892 msgid "Add Parameter" msgstr "Dodaj parametr" @@ -2802,9 +2891,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:477 +#: company/templates/company/supplier_part.html:24 stock/models.py:479 #: stock/templates/stock/item_base.html:402 -#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1748 +#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1756 msgid "Supplier Part" msgstr "" @@ -2830,7 +2919,7 @@ msgstr "Utwórz nowy towar" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:167 -#: templates/js/translated/stock.js:360 +#: templates/js/translated/stock.js:368 msgid "New Stock Item" msgstr "Nowy towar" @@ -2840,7 +2929,7 @@ msgid "Supplier Part Orders" msgstr "" #: company/templates/company/supplier_part.html:160 -#: part/templates/part/detail.html:72 +#: part/templates/part/detail.html:89 msgid "Order Part" msgstr "" @@ -2851,7 +2940,7 @@ msgstr "Informacja cenowa" #: company/templates/company/supplier_part.html:184 #: company/templates/company/supplier_part.html:290 -#: part/templates/part/prices.html:271 part/views.py:1619 +#: part/templates/part/prices.html:271 part/views.py:1628 msgid "Add Price Break" msgstr "" @@ -2859,11 +2948,11 @@ msgstr "" msgid "No price break information found" msgstr "" -#: company/templates/company/supplier_part.html:224 part/views.py:1681 +#: company/templates/company/supplier_part.html:224 part/views.py:1690 msgid "Delete Price Break" msgstr "" -#: company/templates/company/supplier_part.html:238 part/views.py:1667 +#: company/templates/company/supplier_part.html:238 part/views.py:1676 msgid "Edit Price Break" msgstr "Edytuj przedział cenowy" @@ -2881,10 +2970,10 @@ msgstr "" #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:150 #: templates/InvenTree/settings/sidebar.html:41 -#: templates/js/translated/bom.js:328 templates/js/translated/part.js:489 -#: templates/js/translated/part.js:624 templates/js/translated/part.js:1118 -#: templates/js/translated/part.js:1279 templates/js/translated/stock.js:927 -#: templates/js/translated/stock.js:1580 templates/navbar.html:28 +#: templates/js/translated/bom.js:340 templates/js/translated/part.js:495 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1125 +#: templates/js/translated/part.js:1286 templates/js/translated/stock.js:935 +#: templates/js/translated/stock.js:1588 templates/navbar.html:28 msgid "Stock" msgstr "Stan" @@ -2907,8 +2996,8 @@ msgstr "Cennik" #: stock/templates/stock/location.html:151 #: stock/templates/stock/location.html:163 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2351 -#: templates/stats.html:93 templates/stats.html:102 users/models.py:43 +#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2509 +#: templates/stats.html:105 templates/stats.html:114 users/models.py:43 msgid "Stock Items" msgstr "Towary" @@ -2937,20 +3026,20 @@ msgstr "Firmy" msgid "New Company" msgstr "Nowa firma" -#: company/views.py:129 part/views.py:584 +#: company/views.py:129 part/views.py:593 msgid "Download Image" msgstr "Pobierz obraz" -#: company/views.py:158 part/views.py:616 +#: company/views.py:158 part/views.py:625 msgid "Image size exceeds maximum allowable size for download" msgstr "" -#: company/views.py:165 part/views.py:623 +#: company/views.py:165 part/views.py:632 #, python-brace-format msgid "Invalid response: {code}" msgstr "" -#: company/views.py:174 part/views.py:632 +#: company/views.py:174 part/views.py:641 msgid "Supplied URL is not a valid image file" msgstr "" @@ -3036,282 +3125,282 @@ msgstr "Oznacz zamówienie jako zakończone" msgid "Cancel order" msgstr "Anuluj zamówienie" -#: order/models.py:122 +#: order/models.py:125 msgid "Order description" msgstr "Opis Zamówienia" -#: order/models.py:124 +#: order/models.py:127 msgid "Link to external page" msgstr "Link do zewnętrznej witryny" -#: order/models.py:132 +#: order/models.py:135 msgid "Created By" msgstr "Utworzony przez" -#: order/models.py:139 +#: order/models.py:142 msgid "User or group responsible for this order" msgstr "Użytkownik lub grupa odpowiedzialna za to zamówienie" -#: order/models.py:144 +#: order/models.py:147 msgid "Order notes" msgstr "Notatki do zamówienia" -#: order/models.py:211 order/models.py:537 +#: order/models.py:214 order/models.py:542 msgid "Order reference" msgstr "Odniesienie zamówienia" -#: order/models.py:216 order/models.py:552 +#: order/models.py:219 order/models.py:557 msgid "Purchase order status" msgstr "Status zamówienia zakupu" -#: order/models.py:225 +#: order/models.py:228 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:228 order/templates/order/order_base.html:118 +#: order/models.py:231 order/templates/order/order_base.html:118 #: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:228 +#: order/models.py:231 msgid "Supplier order reference code" msgstr "" -#: order/models.py:235 +#: order/models.py:238 msgid "received by" msgstr "odebrane przez" -#: order/models.py:240 +#: order/models.py:243 msgid "Issue Date" msgstr "Data wydania" -#: order/models.py:241 +#: order/models.py:244 msgid "Date order was issued" msgstr "Data wystawienia zamówienia" -#: order/models.py:246 +#: order/models.py:249 msgid "Target Delivery Date" msgstr "Data Dostawy Towaru" -#: order/models.py:247 +#: order/models.py:250 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:253 +#: order/models.py:256 msgid "Date order was completed" msgstr "" -#: order/models.py:282 +#: order/models.py:285 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:411 -msgid "Quantity must be an integer" -msgstr "Wartość musi być liczbą całkowitą" - -#: order/models.py:415 +#: order/models.py:420 msgid "Quantity must be a positive number" msgstr "Wartość musi być liczbą dodatnią" -#: order/models.py:548 +#: order/models.py:553 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer Reference " msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer order reference code" msgstr "" -#: order/models.py:559 +#: order/models.py:564 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:562 order/models.py:1028 +#: order/models.py:567 order/models.py:1048 #: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "Data wysyłki" -#: order/models.py:569 +#: order/models.py:574 msgid "shipped by" msgstr "wysłane przez" -#: order/models.py:635 +#: order/models.py:640 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:639 +#: order/models.py:644 msgid "Only a pending order can be marked as complete" msgstr "" -#: order/models.py:642 +#: order/models.py:647 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:645 +#: order/models.py:650 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:797 +#: order/models.py:806 msgid "Item quantity" msgstr "Ilość elementów" -#: order/models.py:803 +#: order/models.py:812 msgid "Line item reference" msgstr "" -#: order/models.py:805 +#: order/models.py:814 msgid "Line item notes" msgstr "" -#: order/models.py:835 order/models.py:926 order/models.py:1022 -#: templates/js/translated/order.js:1820 +#: order/models.py:842 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:855 order/models.py:946 order/models.py:1042 +#: templates/js/translated/order.js:1820 templates/js/translated/stock.js:2271 msgid "Order" msgstr "Zamówienie" -#: order/models.py:836 order/templates/order/order_base.html:9 +#: order/models.py:856 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:352 -#: templates/js/translated/order.js:801 templates/js/translated/part.js:832 -#: templates/js/translated/stock.js:1725 templates/js/translated/stock.js:2433 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:838 +#: templates/js/translated/stock.js:1733 templates/js/translated/stock.js:2591 msgid "Purchase Order" msgstr "Zlecenie zakupu" -#: order/models.py:857 +#: order/models.py:877 msgid "Supplier part" msgstr "" -#: order/models.py:864 order/templates/order/order_base.html:163 +#: order/models.py:884 order/templates/order/order_base.html:163 #: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 -#: templates/js/translated/part.js:904 templates/js/translated/part.js:930 +#: templates/js/translated/part.js:910 templates/js/translated/part.js:937 #: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "Odebrane" -#: order/models.py:865 +#: order/models.py:885 msgid "Number of items received" msgstr "" -#: order/models.py:872 part/templates/part/prices.html:176 stock/models.py:606 +#: order/models.py:892 part/templates/part/prices.html:176 stock/models.py:608 #: stock/serializers.py:170 stock/templates/stock/item_base.html:359 -#: templates/js/translated/stock.js:1779 +#: templates/js/translated/stock.js:1787 msgid "Purchase Price" msgstr "Cena zakupu" -#: order/models.py:873 +#: order/models.py:893 msgid "Unit purchase price" msgstr "Cena zakupu jednostkowego" -#: order/models.py:881 +#: order/models.py:901 msgid "Where does the Purchaser want this item to be stored?" msgstr "Gdzie kupujący chce przechowywać ten przedmiot?" -#: order/models.py:936 part/templates/part/part_pricing.html:112 +#: order/models.py:956 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "Cena sprzedaży" -#: order/models.py:937 +#: order/models.py:957 msgid "Unit sale price" msgstr "Jednostkowa cena sprzedaży" -#: order/models.py:942 +#: order/models.py:962 msgid "Shipped quantity" msgstr "" -#: order/models.py:1029 +#: order/models.py:1049 msgid "Date of shipment" msgstr "" -#: order/models.py:1036 +#: order/models.py:1056 msgid "Checked By" msgstr "" -#: order/models.py:1037 +#: order/models.py:1057 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1045 +#: order/models.py:1065 msgid "Shipment number" msgstr "" -#: order/models.py:1052 +#: order/models.py:1072 msgid "Shipment notes" msgstr "" -#: order/models.py:1059 +#: order/models.py:1079 msgid "Tracking Number" msgstr "" -#: order/models.py:1060 +#: order/models.py:1080 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1070 +#: order/models.py:1090 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1073 +#: order/models.py:1093 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1149 order/models.py:1151 +#: order/models.py:1171 order/models.py:1173 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1155 +#: order/models.py:1177 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1157 +#: order/models.py:1179 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1160 +#: order/models.py:1182 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Zarezerwowana ilość nie może przekraczać ilości na stanie" -#: order/models.py:1164 +#: order/models.py:1186 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:1170 order/serializers.py:734 +#: order/models.py:1192 order/serializers.py:740 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1173 +#: order/models.py:1195 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1174 +#: order/models.py:1196 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1182 +#: order/models.py:1204 msgid "Line" msgstr "Linia" -#: order/models.py:1190 order/serializers.py:825 order/serializers.py:953 -#: templates/js/translated/model_renderers.js:251 +#: order/models.py:1212 order/serializers.py:831 order/serializers.py:959 +#: templates/js/translated/model_renderers.js:285 msgid "Shipment" msgstr "" -#: order/models.py:1191 +#: order/models.py:1213 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1203 +#: order/models.py:1225 msgid "Item" msgstr "Komponent" -#: order/models.py:1204 +#: order/models.py:1226 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1207 +#: order/models.py:1229 msgid "Enter stock allocation quantity" msgstr "" @@ -3319,7 +3408,7 @@ msgstr "" msgid "Purchase price currency" msgstr "" -#: order/serializers.py:211 order/serializers.py:790 +#: order/serializers.py:211 order/serializers.py:796 msgid "Line Item" msgstr "" @@ -3355,39 +3444,39 @@ msgstr "" msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:587 msgid "Sale price currency" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:655 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:699 order/serializers.py:802 +#: order/serializers.py:705 order/serializers.py:808 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:721 +#: order/serializers.py:727 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:815 +#: order/serializers.py:821 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:839 order/serializers.py:964 +#: order/serializers.py:845 order/serializers.py:970 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:842 order/serializers.py:967 +#: order/serializers.py:848 order/serializers.py:973 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:894 +#: order/serializers.py:900 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:910 msgid "The following serial numbers are already allocated" msgstr "" @@ -3441,6 +3530,7 @@ msgstr "" #: order/templates/order/order_base.html:94 #: order/templates/order/sales_order_base.html:89 +#: templates/js/translated/stock.js:2327 msgid "Order Status" msgstr "Status zamówienia" @@ -3538,7 +3628,7 @@ msgstr "" #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/build.js:300 templates/js/translated/build.js:1311 #: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 -#: templates/js/translated/stock.js:593 templates/js/translated/stock.js:761 +#: templates/js/translated/stock.js:601 templates/js/translated/stock.js:769 msgid "Remove row" msgstr "" @@ -3729,7 +3819,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:48 -#: templates/js/translated/bom.js:720 templates/js/translated/build.js:1243 +#: templates/js/translated/bom.js:732 templates/js/translated/build.js:1243 msgid "Actions" msgstr "Akcje" @@ -3832,447 +3922,448 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:125 part/models.py:81 part/models.py:847 +#: part/bom.py:125 part/models.py:83 part/models.py:849 #: part/templates/part/category.html:108 part/templates/part/part_base.html:338 msgid "Default Location" msgstr "Domyślna lokalizacja" -#: part/bom.py:126 part/templates/part/part_base.html:185 +#: part/bom.py:126 templates/email/low_stock_notification.html:17 +msgid "Total Stock" +msgstr "" + +#: part/bom.py:127 part/templates/part/part_base.html:185 msgid "Available Stock" msgstr "Dostępna ilość" -#: part/forms.py:85 +#: part/bom.py:128 part/templates/part/part_base.html:203 +#: templates/js/translated/part.js:1301 +msgid "On Order" +msgstr "" + +#: part/forms.py:84 msgid "Select part category" msgstr "Wybierz kategorię części" -#: part/forms.py:122 +#: part/forms.py:121 msgid "Add parameter template to same level categories" msgstr "" -#: part/forms.py:126 +#: part/forms.py:125 msgid "Add parameter template to all categories" msgstr "" -#: part/forms.py:146 +#: part/forms.py:145 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 +#: part/models.py:84 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords" msgstr "Domyślne słowa kluczowe" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:95 part/models.py:2526 part/templates/part/category.html:15 +#: part/models.py:97 part/models.py:2533 part/templates/part/category.html:15 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:96 part/templates/part/category.html:128 -#: templates/InvenTree/search.html:95 templates/stats.html:84 +#: part/models.py:98 part/templates/part/category.html:128 +#: templates/InvenTree/search.html:95 templates/stats.html:96 #: users/models.py:40 msgid "Part Categories" msgstr "" -#: part/models.py:358 part/templates/part/cat_link.html:3 +#: part/models.py:360 part/templates/part/cat_link.html:3 #: part/templates/part/category.html:17 part/templates/part/category.html:133 #: part/templates/part/category.html:153 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82 #: templates/InvenTree/settings/sidebar.html:37 -#: templates/js/translated/part.js:1656 templates/navbar.html:21 -#: templates/stats.html:80 templates/stats.html:89 users/models.py:41 +#: templates/js/translated/part.js:1663 templates/navbar.html:21 +#: templates/stats.html:92 templates/stats.html:101 users/models.py:41 msgid "Parts" msgstr "Części" -#: part/models.py:450 +#: part/models.py:452 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:500 part/models.py:512 +#: part/models.py:502 part/models.py:514 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:642 +#: part/models.py:644 msgid "Next available serial numbers are" msgstr "" -#: part/models.py:646 +#: part/models.py:648 msgid "Next available serial number is" msgstr "" -#: part/models.py:651 +#: part/models.py:653 msgid "Most recent serial number is" msgstr "" -#: part/models.py:746 +#: part/models.py:748 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:771 +#: part/models.py:773 msgid "Part name" msgstr "Nazwa części" -#: part/models.py:778 +#: part/models.py:780 msgid "Is Template" msgstr "" -#: part/models.py:779 +#: part/models.py:781 msgid "Is this part a template part?" msgstr "" -#: part/models.py:789 +#: part/models.py:791 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:790 +#: part/models.py:792 msgid "Variant Of" msgstr "Wariant" -#: part/models.py:796 +#: part/models.py:798 msgid "Part description" msgstr "Opis części" -#: part/models.py:801 part/templates/part/category.html:86 +#: part/models.py:803 part/templates/part/category.html:86 #: part/templates/part/part_base.html:302 msgid "Keywords" msgstr "Słowa kluczowe" -#: part/models.py:802 +#: part/models.py:804 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:809 part/models.py:2276 part/models.py:2525 +#: part/models.py:811 part/models.py:2283 part/models.py:2532 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:183 -#: templates/js/translated/part.js:1261 +#: templates/InvenTree/settings/settings.html:186 +#: templates/js/translated/part.js:1268 msgid "Category" msgstr "Kategoria" -#: part/models.py:810 +#: part/models.py:812 msgid "Part category" msgstr "" -#: part/models.py:815 part/templates/part/part_base.html:274 -#: templates/js/translated/part.js:612 templates/js/translated/part.js:1214 -#: templates/js/translated/stock.js:1552 +#: part/models.py:817 part/templates/part/part_base.html:274 +#: templates/js/translated/part.js:618 templates/js/translated/part.js:1221 +#: templates/js/translated/stock.js:1560 msgid "IPN" msgstr "IPN" -#: part/models.py:816 +#: part/models.py:818 msgid "Internal Part Number" msgstr "" -#: part/models.py:822 +#: part/models.py:824 msgid "Part revision or version number" msgstr "" -#: part/models.py:823 part/templates/part/part_base.html:281 -#: report/models.py:200 templates/js/translated/part.js:616 +#: part/models.py:825 part/templates/part/part_base.html:281 +#: report/models.py:200 templates/js/translated/part.js:622 msgid "Revision" msgstr "Wersja" -#: part/models.py:845 +#: part/models.py:847 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:892 part/templates/part/part_base.html:347 +#: part/models.py:894 part/templates/part/part_base.html:347 msgid "Default Supplier" msgstr "" -#: part/models.py:893 +#: part/models.py:895 msgid "Default supplier part" msgstr "" -#: part/models.py:900 +#: part/models.py:902 msgid "Default Expiry" msgstr "" -#: part/models.py:901 +#: part/models.py:903 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:906 part/templates/part/part_base.html:196 +#: part/models.py:908 part/templates/part/part_base.html:196 msgid "Minimum Stock" msgstr "Minimalny stan magazynowy" -#: part/models.py:907 +#: part/models.py:909 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:914 +#: part/models.py:916 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:920 +#: part/models.py:922 msgid "Can this part be built from other parts?" msgstr "Czy ta część może być zbudowana z innych części?" -#: part/models.py:926 +#: part/models.py:928 msgid "Can this part be used to build other parts?" msgstr "Czy ta część może być użyta do budowy innych części?" -#: part/models.py:932 +#: part/models.py:934 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:937 +#: part/models.py:939 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:942 +#: part/models.py:944 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:946 plugin/models.py:46 -#: templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:295 -#: templates/js/translated/table_filters.js:417 -msgid "Active" -msgstr "Aktywny" - -#: part/models.py:947 +#: part/models.py:949 msgid "Is this part active?" msgstr "Czy ta część jest aktywna?" -#: part/models.py:952 +#: part/models.py:954 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:957 +#: part/models.py:959 msgid "Part notes - supports Markdown formatting" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "BOM checksum" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:963 +#: part/models.py:965 msgid "BOM checked by" msgstr "" -#: part/models.py:965 +#: part/models.py:967 msgid "BOM checked date" msgstr "" -#: part/models.py:969 +#: part/models.py:971 msgid "Creation User" msgstr "" -#: part/models.py:1781 +#: part/models.py:1783 msgid "Sell multiple" msgstr "Sprzedaj wiele" -#: part/models.py:2326 +#: part/models.py:2333 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2343 +#: part/models.py:2350 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2363 templates/js/translated/part.js:1707 -#: templates/js/translated/stock.js:1276 +#: part/models.py:2370 templates/js/translated/part.js:1714 +#: templates/js/translated/stock.js:1284 msgid "Test Name" msgstr "Nazwa testu" -#: part/models.py:2364 +#: part/models.py:2371 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2369 +#: part/models.py:2376 msgid "Test Description" msgstr "" -#: part/models.py:2370 +#: part/models.py:2377 msgid "Enter description for this test" msgstr "" -#: part/models.py:2375 templates/js/translated/part.js:1716 +#: part/models.py:2382 templates/js/translated/part.js:1723 #: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "Wymagane" -#: part/models.py:2376 +#: part/models.py:2383 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2381 templates/js/translated/part.js:1724 +#: part/models.py:2388 templates/js/translated/part.js:1731 msgid "Requires Value" msgstr "" -#: part/models.py:2382 +#: part/models.py:2389 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2387 templates/js/translated/part.js:1731 +#: part/models.py:2394 templates/js/translated/part.js:1738 msgid "Requires Attachment" msgstr "" -#: part/models.py:2388 +#: part/models.py:2395 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2399 +#: part/models.py:2406 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2435 +#: part/models.py:2442 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2443 +#: part/models.py:2450 msgid "Parameter Name" msgstr "" -#: part/models.py:2450 +#: part/models.py:2457 msgid "Parameter Units" msgstr "" -#: part/models.py:2480 +#: part/models.py:2487 msgid "Parent Part" msgstr "Część nadrzędna" -#: part/models.py:2482 part/models.py:2531 part/models.py:2532 -#: templates/InvenTree/settings/settings.html:178 +#: part/models.py:2489 part/models.py:2538 part/models.py:2539 +#: templates/InvenTree/settings/settings.html:181 msgid "Parameter Template" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Data" msgstr "Dane" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Parameter Value" msgstr "" -#: part/models.py:2536 templates/InvenTree/settings/settings.html:187 +#: part/models.py:2543 templates/InvenTree/settings/settings.html:190 msgid "Default Value" msgstr "Wartość domyślna" -#: part/models.py:2537 +#: part/models.py:2544 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2614 +#: part/models.py:2621 msgid "Select parent part" msgstr "Wybierz część nadrzędną" -#: part/models.py:2622 +#: part/models.py:2629 msgid "Sub part" msgstr "Podczęść" -#: part/models.py:2623 +#: part/models.py:2630 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2629 +#: part/models.py:2636 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2631 templates/js/translated/bom.js:566 -#: templates/js/translated/bom.js:640 +#: part/models.py:2638 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:652 #: templates/js/translated/table_filters.js:92 msgid "Optional" msgstr "" -#: part/models.py:2631 +#: part/models.py:2638 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2634 +#: part/models.py:2641 msgid "Overage" msgstr "" -#: part/models.py:2635 +#: part/models.py:2642 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2638 +#: part/models.py:2645 msgid "BOM item reference" msgstr "" -#: part/models.py:2641 +#: part/models.py:2648 msgid "BOM item notes" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "Checksum" msgstr "Suma kontrolna" -#: part/models.py:2643 +#: part/models.py:2650 msgid "BOM line checksum" msgstr "" -#: part/models.py:2647 templates/js/translated/bom.js:657 +#: part/models.py:2654 templates/js/translated/bom.js:669 #: templates/js/translated/table_filters.js:68 #: templates/js/translated/table_filters.js:88 msgid "Inherited" msgstr "" -#: part/models.py:2648 +#: part/models.py:2655 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2653 templates/js/translated/bom.js:649 +#: part/models.py:2660 templates/js/translated/bom.js:661 msgid "Allow Variants" msgstr "" -#: part/models.py:2654 +#: part/models.py:2661 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2739 stock/models.py:355 +#: part/models.py:2746 stock/models.py:357 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2748 part/models.py:2750 +#: part/models.py:2755 part/models.py:2757 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2879 +#: part/models.py:2886 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2901 +#: part/models.py:2908 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2913 +#: part/models.py:2920 msgid "Parent BOM item" msgstr "" -#: part/models.py:2921 +#: part/models.py:2928 msgid "Substitute part" msgstr "" -#: part/models.py:2932 +#: part/models.py:2939 msgid "Part 1" msgstr "Część 1" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Part 2" msgstr "Część 2" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Select Related Part" msgstr "Wybierz powiązaną część" -#: part/models.py:2968 +#: part/models.py:2975 msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique" msgstr "" @@ -4327,7 +4418,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:253 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:270 msgid "BOM actions" msgstr "" @@ -4499,7 +4590,7 @@ msgstr "" msgid "Import Parts" msgstr "" -#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:375 +#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:348 msgid "Duplicate Part" msgstr "Duplikuj część" @@ -4533,145 +4624,149 @@ msgid "Showing stock for all variants of %(full_name)s" msgstr "" #: part/templates/part/detail.html:43 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/detail.html:60 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:48 +#: part/templates/part/detail.html:65 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:105 +#: part/templates/part/detail.html:122 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:142 +#: part/templates/part/detail.html:159 msgid "Part Variants" msgstr "Warianty Części" -#: part/templates/part/detail.html:146 +#: part/templates/part/detail.html:163 msgid "Create new variant" msgstr "Utwórz nowy wariant" -#: part/templates/part/detail.html:147 +#: part/templates/part/detail.html:164 msgid "New Variant" msgstr "Nowy wariant" -#: part/templates/part/detail.html:174 +#: part/templates/part/detail.html:191 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:45 +#: part/templates/part/detail.html:228 part/templates/part/part_sidebar.html:49 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:215 part/templates/part/detail.html:216 +#: part/templates/part/detail.html:232 part/templates/part/detail.html:233 msgid "Add Related" msgstr "Dodaj powiązane" -#: part/templates/part/detail.html:236 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:253 part/templates/part/part_sidebar.html:17 msgid "Bill of Materials" msgstr "Zestawienie materiałowe" -#: part/templates/part/detail.html:241 +#: part/templates/part/detail.html:258 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:245 templates/js/translated/bom.js:70 +#: part/templates/part/detail.html:262 templates/js/translated/bom.js:70 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:247 +#: part/templates/part/detail.html:264 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:257 +#: part/templates/part/detail.html:274 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:259 templates/js/translated/part.js:272 +#: part/templates/part/detail.html:276 templates/js/translated/part.js:272 msgid "Copy BOM" msgstr "Kopiuj BOM" -#: part/templates/part/detail.html:261 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:283 msgid "New BOM Item" msgstr "" -#: part/templates/part/detail.html:267 +#: part/templates/part/detail.html:284 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:280 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:314 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:322 +#: part/templates/part/detail.html:339 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:332 +#: part/templates/part/detail.html:349 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:360 +#: part/templates/part/detail.html:377 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:393 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:558 +#: part/templates/part/detail.html:575 msgid "Delete selected BOM items?" msgstr "" -#: part/templates/part/detail.html:559 +#: part/templates/part/detail.html:576 msgid "All selected BOM items will be deleted" msgstr "" -#: part/templates/part/detail.html:608 +#: part/templates/part/detail.html:625 msgid "Create BOM Item" msgstr "" -#: part/templates/part/detail.html:652 +#: part/templates/part/detail.html:682 msgid "Related Part" msgstr "Powiązane części" -#: part/templates/part/detail.html:660 +#: part/templates/part/detail.html:690 msgid "Add Related Part" msgstr "Dodaj powiązaną część" -#: part/templates/part/detail.html:755 +#: part/templates/part/detail.html:785 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:812 +#: part/templates/part/detail.html:842 msgid "Edit Part Notes" msgstr "" -#: part/templates/part/detail.html:925 +#: part/templates/part/detail.html:955 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:937 +#: part/templates/part/detail.html:967 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:949 +#: part/templates/part/detail.html:979 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1038 +#: part/templates/part/detail.html:1068 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -4786,7 +4881,7 @@ msgstr "Część jest wirtualna (nie fizyczna)" #: templates/js/translated/company.js:508 #: templates/js/translated/company.js:765 #: templates/js/translated/model_renderers.js:175 -#: templates/js/translated/part.js:527 templates/js/translated/part.js:604 +#: templates/js/translated/part.js:533 templates/js/translated/part.js:610 msgid "Inactive" msgstr "Nieaktywny" @@ -4805,10 +4900,6 @@ msgstr "" msgid "In Stock" msgstr "" -#: part/templates/part/part_base.html:203 templates/js/translated/part.js:1294 -msgid "On Order" -msgstr "" - #: part/templates/part/part_base.html:210 templates/InvenTree/index.html:178 msgid "Required for Build Orders" msgstr "" @@ -4821,12 +4912,12 @@ msgstr "" msgid "Allocated to Orders" msgstr "" -#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:678 +#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:690 msgid "Can Build" msgstr "" -#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1125 -#: templates/js/translated/part.js:1298 +#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1132 +#: templates/js/translated/part.js:1305 msgid "Building" msgstr "" @@ -4878,7 +4969,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:40 -#: templates/js/translated/bom.js:632 +#: templates/js/translated/bom.js:644 msgid "No supplier pricing available" msgstr "" @@ -4920,7 +5011,12 @@ msgstr "" msgid "Used In" msgstr "" -#: part/templates/part/part_sidebar.html:41 +#: part/templates/part/part_sidebar.html:31 +#: stock/templates/stock/stock_sidebar.html:8 +msgid "Allocations" +msgstr "" + +#: part/templates/part/part_sidebar.html:45 msgid "Test Templates" msgstr "" @@ -4993,7 +5089,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:155 templates/js/translated/bom.js:626 +#: part/templates/part/prices.html:155 templates/js/translated/bom.js:638 msgid "Supplier Cost" msgstr "" @@ -5015,7 +5111,7 @@ msgstr "" msgid "Internal Cost" msgstr "" -#: part/templates/part/prices.html:215 part/views.py:1690 +#: part/templates/part/prices.html:215 part/views.py:1699 msgid "Add Internal Price Break" msgstr "" @@ -5035,9 +5131,9 @@ msgstr "" msgid "Set category for the following parts" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:588 -#: templates/js/translated/part.js:491 templates/js/translated/part.js:1115 -#: templates/js/translated/part.js:1302 +#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:600 +#: templates/js/translated/part.js:497 templates/js/translated/part.js:1122 +#: templates/js/translated/part.js:1309 msgid "No Stock" msgstr "Brak w magazynie" @@ -5054,116 +5150,116 @@ msgstr "" msgid "Create a new variant of template '%(full_name)s'." msgstr "" -#: part/templatetags/inventree_extras.py:116 +#: part/templatetags/inventree_extras.py:125 msgid "Unknown database" msgstr "" -#: part/views.py:92 +#: part/views.py:93 msgid "Set Part Category" msgstr "" -#: part/views.py:142 +#: part/views.py:143 #, python-brace-format msgid "Set category for {n} parts" msgstr "" -#: part/views.py:214 +#: part/views.py:215 msgid "Match References" msgstr "" -#: part/views.py:502 +#: part/views.py:511 msgid "None" msgstr "" -#: part/views.py:561 +#: part/views.py:570 msgid "Part QR Code" msgstr "" -#: part/views.py:663 +#: part/views.py:672 msgid "Select Part Image" msgstr "" -#: part/views.py:689 +#: part/views.py:698 msgid "Updated part image" msgstr "" -#: part/views.py:692 +#: part/views.py:701 msgid "Part image not found" msgstr "" -#: part/views.py:766 +#: part/views.py:775 msgid "Match Parts" msgstr "" -#: part/views.py:1101 +#: part/views.py:1110 msgid "Export Bill of Materials" msgstr "" -#: part/views.py:1150 +#: part/views.py:1159 msgid "Confirm Part Deletion" msgstr "" -#: part/views.py:1157 +#: part/views.py:1166 msgid "Part was deleted" msgstr "" -#: part/views.py:1166 +#: part/views.py:1175 msgid "Part Pricing" msgstr "" -#: part/views.py:1315 +#: part/views.py:1324 msgid "Create Part Parameter Template" msgstr "" -#: part/views.py:1325 +#: part/views.py:1334 msgid "Edit Part Parameter Template" msgstr "" -#: part/views.py:1332 +#: part/views.py:1341 msgid "Delete Part Parameter Template" msgstr "" -#: part/views.py:1391 templates/js/translated/part.js:315 +#: part/views.py:1400 templates/js/translated/part.js:315 msgid "Edit Part Category" msgstr "Edytuj kategorię części" -#: part/views.py:1429 +#: part/views.py:1438 msgid "Delete Part Category" msgstr "" -#: part/views.py:1435 +#: part/views.py:1444 msgid "Part category was deleted" msgstr "" -#: part/views.py:1444 +#: part/views.py:1453 msgid "Create Category Parameter Template" msgstr "" -#: part/views.py:1545 +#: part/views.py:1554 msgid "Edit Category Parameter Template" msgstr "" -#: part/views.py:1601 +#: part/views.py:1610 msgid "Delete Category Parameter Template" msgstr "" -#: part/views.py:1623 +#: part/views.py:1632 msgid "Added new price break" msgstr "" -#: part/views.py:1699 +#: part/views.py:1708 msgid "Edit Internal Price Break" msgstr "" -#: part/views.py:1707 +#: part/views.py:1716 msgid "Delete Internal Price Break" msgstr "" -#: plugin/integration.py:124 +#: plugin/integration.py:138 msgid "No author found" msgstr "" -#: plugin/integration.py:136 +#: plugin/integration.py:152 msgid "No date found" msgstr "" @@ -5191,7 +5287,7 @@ msgstr "" msgid "Is the plugin active" msgstr "" -#: plugin/models.py:195 +#: plugin/models.py:199 msgid "Plugin" msgstr "" @@ -5357,12 +5453,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:517 stock/templates/stock/item_base.html:156 +#: stock/models.py:519 stock/templates/stock/item_base.html:156 #: templates/js/translated/build.js:293 templates/js/translated/build.js:697 #: templates/js/translated/build.js:1073 #: templates/js/translated/model_renderers.js:95 #: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 -#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:415 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:423 msgid "Serial Number" msgstr "Numer Seryjny" @@ -5371,19 +5467,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1948 +#: stock/models.py:1976 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1954 +#: stock/models.py:1982 msgid "Result" msgstr "Wynik" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin.html:50 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2367 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2525 msgid "Date" msgstr "Data" @@ -5396,23 +5492,27 @@ msgid "Fail" msgstr "Niezaliczone" #: report/templates/report/inventree_test_report_base.html:123 -#: stock/templates/stock/stock_sidebar.html:12 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:578 templates/js/translated/stock.js:748 -#: templates/js/translated/stock.js:2627 +#: templates/js/translated/stock.js:586 templates/js/translated/stock.js:756 +#: templates/js/translated/stock.js:2785 msgid "Serial" msgstr "" -#: stock/api.py:478 +#: stock/api.py:476 msgid "Quantity is required" msgstr "" -#: stock/forms.py:77 stock/forms.py:251 stock/models.py:574 +#: stock/api.py:483 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:576 #: stock/templates/stock/item_base.html:193 -#: templates/js/translated/stock.js:1701 +#: templates/js/translated/stock.js:1709 msgid "Expiry Date" msgstr "Data ważności" @@ -5460,228 +5560,228 @@ msgstr "" msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:611 +#: stock/models.py:62 stock/models.py:613 #: stock/templates/stock/item_base.html:416 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:612 +#: stock/models.py:63 stock/models.py:614 msgid "Select Owner" msgstr "" -#: stock/models.py:336 +#: stock/models.py:338 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:372 +#: stock/models.py:374 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:382 stock/models.py:391 +#: stock/models.py:384 stock/models.py:393 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:383 +#: stock/models.py:385 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:405 +#: stock/models.py:407 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:411 +#: stock/models.py:413 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:418 +#: stock/models.py:420 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:461 +#: stock/models.py:463 msgid "Parent Stock Item" msgstr "Nadrzędny towar" -#: stock/models.py:470 +#: stock/models.py:472 msgid "Base part" msgstr "Część podstawowa" -#: stock/models.py:478 +#: stock/models.py:480 msgid "Select a matching supplier part for this stock item" msgstr "Wybierz pasującą część dostawcy dla tego towaru" -#: stock/models.py:484 stock/templates/stock/location.html:16 +#: stock/models.py:486 stock/templates/stock/location.html:16 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:494 +#: stock/models.py:496 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:500 stock/templates/stock/item_base.html:298 +#: stock/models.py:502 stock/templates/stock/item_base.html:298 msgid "Installed In" msgstr "" -#: stock/models.py:503 +#: stock/models.py:505 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:519 +#: stock/models.py:521 msgid "Serial number for this item" msgstr "" -#: stock/models.py:533 +#: stock/models.py:535 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:537 +#: stock/models.py:539 msgid "Stock Quantity" msgstr "Ilość w magazynie" -#: stock/models.py:546 +#: stock/models.py:548 msgid "Source Build" msgstr "" -#: stock/models.py:548 +#: stock/models.py:550 msgid "Build for this stock item" msgstr "" -#: stock/models.py:559 +#: stock/models.py:561 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:562 +#: stock/models.py:564 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:568 +#: stock/models.py:570 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:575 +#: stock/models.py:577 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete on deplete" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:598 stock/templates/stock/item.html:111 +#: stock/models.py:600 stock/templates/stock/item.html:128 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:607 +#: stock/models.py:609 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1096 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1074 +#: stock/models.py:1102 msgid "Quantity must be integer" msgstr "Ilość musi być liczbą całkowitą" -#: stock/models.py:1080 +#: stock/models.py:1108 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "Ilość nie może przekraczać dostępnej ilości towaru ({n})" -#: stock/models.py:1083 +#: stock/models.py:1111 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1086 +#: stock/models.py:1114 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1093 +#: stock/models.py:1121 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1164 +#: stock/models.py:1192 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1195 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1170 +#: stock/models.py:1198 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1173 +#: stock/models.py:1201 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1176 +#: stock/models.py:1204 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1179 +#: stock/models.py:1207 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1186 stock/serializers.py:774 +#: stock/models.py:1214 stock/serializers.py:775 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1190 +#: stock/models.py:1218 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1222 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1198 +#: stock/models.py:1226 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1369 +#: stock/models.py:1397 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1868 +#: stock/models.py:1896 msgid "Entry notes" msgstr "" -#: stock/models.py:1925 +#: stock/models.py:1953 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1931 +#: stock/models.py:1959 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1949 +#: stock/models.py:1977 msgid "Test name" msgstr "" -#: stock/models.py:1955 templates/js/translated/table_filters.js:271 +#: stock/models.py:1983 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1961 +#: stock/models.py:1989 msgid "Test output value" msgstr "" -#: stock/models.py:1968 +#: stock/models.py:1996 msgid "Test result attachment" msgstr "" -#: stock/models.py:1974 +#: stock/models.py:2002 msgid "Test notes" msgstr "" @@ -5706,7 +5806,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:326 stock/serializers.py:731 stock/serializers.py:972 +#: stock/serializers.py:326 stock/serializers.py:732 stock/serializers.py:973 msgid "Destination stock location" msgstr "" @@ -5718,63 +5818,63 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:589 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:592 +#: stock/serializers.py:593 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:597 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:626 +#: stock/serializers.py:627 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:632 +#: stock/serializers.py:633 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:640 +#: stock/serializers.py:641 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:650 stock/serializers.py:880 +#: stock/serializers.py:651 stock/serializers.py:881 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:738 +#: stock/serializers.py:739 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:743 +#: stock/serializers.py:744 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:744 +#: stock/serializers.py:745 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:749 +#: stock/serializers.py:750 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:750 +#: stock/serializers.py:751 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:760 +#: stock/serializers.py:761 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:842 +#: stock/serializers.py:843 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:870 +#: stock/serializers.py:871 msgid "Stock transaction notes" msgstr "" @@ -5787,47 +5887,51 @@ msgid "New Entry" msgstr "" #: stock/templates/stock/item.html:48 -msgid "Child Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:55 -msgid "This stock item does not have any child items" +msgid "Stock Item Allocations" msgstr "" #: stock/templates/stock/item.html:64 -#: stock/templates/stock/stock_sidebar.html:8 -msgid "Test Data" -msgstr "" - -#: stock/templates/stock/item.html:68 stock/templates/stock/item_base.html:57 -msgid "Test Report" +msgid "Child Stock Items" msgstr "" #: stock/templates/stock/item.html:72 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item.html:81 +#: stock/templates/stock/stock_sidebar.html:12 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:57 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item.html:89 msgid "Delete Test Data" msgstr "" -#: stock/templates/stock/item.html:76 +#: stock/templates/stock/item.html:93 msgid "Add Test Data" msgstr "" -#: stock/templates/stock/item.html:133 +#: stock/templates/stock/item.html:150 msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:482 +#: stock/templates/stock/item.html:154 stock/views.py:482 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:279 stock/templates/stock/item.html:304 +#: stock/templates/stock/item.html:309 stock/templates/stock/item.html:334 msgid "Add Test Result" msgstr "" -#: stock/templates/stock/item.html:324 +#: stock/templates/stock/item.html:354 msgid "Edit Test Result" msgstr "" -#: stock/templates/stock/item.html:338 +#: stock/templates/stock/item.html:368 msgid "Delete Test Result" msgstr "" @@ -5952,7 +6056,7 @@ msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:206 -#: templates/js/translated/stock.js:1714 +#: templates/js/translated/stock.js:1722 msgid "Last Updated" msgstr "Ostatnia aktualizacja" @@ -6111,7 +6215,7 @@ msgid "Sublocations" msgstr "" #: stock/templates/stock/location.html:146 templates/InvenTree/search.html:164 -#: templates/stats.html:97 users/models.py:42 +#: templates/stats.html:109 users/models.py:42 msgid "Stock Locations" msgstr "" @@ -6135,7 +6239,7 @@ msgstr "" msgid "Stock Tracking" msgstr "" -#: stock/templates/stock/stock_sidebar.html:16 +#: stock/templates/stock/stock_sidebar.html:20 msgid "Child Items" msgstr "" @@ -6164,7 +6268,7 @@ msgstr "" msgid "Are you sure you want to delete this stock tracking entry?" msgstr "" -#: stock/views.py:162 +#: stock/views.py:162 templates/js/translated/stock.js:139 msgid "Edit Stock Location" msgstr "" @@ -6204,7 +6308,7 @@ msgstr "" msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:727 templates/js/translated/stock.js:1066 +#: stock/views.py:727 templates/js/translated/stock.js:1074 msgid "Confirm stock adjustment" msgstr "" @@ -6212,7 +6316,7 @@ msgstr "" msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:324 +#: stock/views.py:760 templates/js/translated/stock.js:332 msgid "Edit Stock Item" msgstr "" @@ -6224,7 +6328,7 @@ msgstr "Utwórz nową lokalizację magazynową" msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1153 templates/js/translated/stock.js:304 +#: stock/views.py:1153 templates/js/translated/stock.js:312 msgid "Duplicate Stock Item" msgstr "" @@ -6268,6 +6372,18 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/500.html:5 templates/500.html:11 +msgid "Internal Server Error" +msgstr "" + +#: templates/500.html:14 +msgid "The InvenTree server raised an internal error" +msgstr "" + +#: templates/500.html:15 +msgid "Refer to the error log in the admin interface for further details" +msgstr "" + #: templates/503.html:10 templates/503.html:35 msgid "Site is in Maintenance" msgstr "" @@ -6390,7 +6506,7 @@ msgid "Signup" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:113 msgid "Settings" msgstr "" @@ -6431,43 +6547,43 @@ msgstr "" msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:32 +#: templates/InvenTree/settings/plugin.html:33 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:37 +#: templates/InvenTree/settings/plugin.html:38 #: templates/js/translated/plugin.js:15 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: templates/InvenTree/settings/plugin.html:47 templates/navbar.html:111 #: users/models.py:39 msgid "Admin" msgstr "" -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:49 #: templates/InvenTree/settings/plugin_settings.html:28 msgid "Author" msgstr "" -#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin_settings.html:43 msgid "Version" msgstr "" -#: templates/InvenTree/settings/plugin.html:91 +#: templates/InvenTree/settings/plugin.html:92 msgid "Inactive plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:114 +#: templates/InvenTree/settings/plugin.html:115 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:123 +#: templates/InvenTree/settings/plugin.html:124 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:125 +#: templates/InvenTree/settings/plugin.html:126 msgid "Message" msgstr "" @@ -6555,37 +6671,37 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:75 +#: templates/InvenTree/settings/settings.html:78 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:77 +#: templates/InvenTree/settings/settings.html:80 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:79 +#: templates/InvenTree/settings/settings.html:82 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:168 +#: templates/InvenTree/settings/settings.html:171 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:190 -#: templates/InvenTree/settings/settings.html:289 +#: templates/InvenTree/settings/settings.html:193 +#: templates/InvenTree/settings/settings.html:292 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:191 -#: templates/InvenTree/settings/settings.html:290 +#: templates/InvenTree/settings/settings.html:194 +#: templates/InvenTree/settings/settings.html:293 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:272 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:273 +#: templates/InvenTree/settings/settings.html:276 msgid "ID" msgstr "" @@ -6763,124 +6879,105 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:219 +#: templates/InvenTree/settings/user.html:220 +msgid "Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:226 +msgid "Log out active sessions (except this one)" +msgstr "" + +#: templates/InvenTree/settings/user.html:227 +msgid "Log Out Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:236 +msgid "unknown on unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:237 +msgid "unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:241 +msgid "IP Address" +msgstr "" + +#: templates/InvenTree/settings/user.html:242 +msgid "Device" +msgstr "" + +#: templates/InvenTree/settings/user.html:243 +msgid "Last Activity" +msgstr "" + +#: templates/InvenTree/settings/user.html:252 +#, python-format +msgid "%(time)s ago (this session)" +msgstr "" + +#: templates/InvenTree/settings/user.html:254 +#, python-format +msgid "%(time)s ago" +msgstr "" + +#: templates/InvenTree/settings/user.html:266 +msgid "Do you really want to remove the selected email address?" +msgstr "" + #: templates/InvenTree/settings/user_display.html:25 msgid "Theme Settings" msgstr "" -#: templates/InvenTree/settings/user.html:227 #: templates/InvenTree/settings/user_display.html:35 msgid "Select theme" msgstr "" -#: templates/InvenTree/settings/user.html:237 #: templates/InvenTree/settings/user_display.html:46 msgid "Set Theme" msgstr "" -#: templates/InvenTree/settings/user.html:246 #: templates/InvenTree/settings/user_display.html:54 msgid "Language Settings" msgstr "" -#: templates/InvenTree/settings/user.html:254 #: templates/InvenTree/settings/user_display.html:63 msgid "Select language" msgstr "" -#: templates/InvenTree/settings/user.html:270 #: templates/InvenTree/settings/user_display.html:79 #, python-format msgid "%(lang_translated)s%% translated" msgstr "" -#: templates/InvenTree/settings/user.html:272 #: templates/InvenTree/settings/user_display.html:81 msgid "No translations available" msgstr "" -#: templates/InvenTree/settings/user.html:279 #: templates/InvenTree/settings/user_display.html:88 msgid "Set Language" msgstr "" -#: templates/InvenTree/settings/user.html:281 #: templates/InvenTree/settings/user_display.html:91 msgid "Some languages are not complete" msgstr "" -#: templates/InvenTree/settings/user.html:283 #: templates/InvenTree/settings/user_display.html:93 msgid "Show only sufficent" msgstr "" -#: templates/InvenTree/settings/user.html:285 +#: templates/InvenTree/settings/user_display.html:95 +msgid "and hidden." +msgstr "" + #: templates/InvenTree/settings/user_display.html:95 msgid "Show them too" msgstr "" -#: templates/InvenTree/settings/user.html:292 #: templates/InvenTree/settings/user_display.html:101 msgid "Help the translation efforts!" msgstr "" -#: templates/InvenTree/settings/user.html:293 -#, python-format -msgid "Native language translation of the\n" -" InvenTree web application is community contributed via crowdin. Contributions are\n" -" welcomed and encouraged." -msgstr "" - -#: templates/InvenTree/settings/user.html:302 -msgid "Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:308 -msgid "Log out active sessions (except this one)" -msgstr "" - -#: templates/InvenTree/settings/user.html:309 -msgid "Log Out Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:318 -msgid "unknown on unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:319 -msgid "unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:323 -msgid "IP Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:324 -msgid "Device" -msgstr "" - -#: templates/InvenTree/settings/user.html:325 -msgid "Last Activity" -msgstr "" - -#: templates/InvenTree/settings/user.html:334 -#, python-format -msgid "%(time)s ago (this session)" -msgstr "" - -#: templates/InvenTree/settings/user.html:336 -#, python-format -msgid "%(time)s ago" -msgstr "" - -#: templates/InvenTree/settings/user.html:348 -msgid "Do you really want to remove the selected email address?" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:95 -msgid "and hidden." -msgstr "" - #: templates/InvenTree/settings/user_display.html:102 #, python-format msgid "Native language translation of the InvenTree web application is community contributed via crowdin. Contributions are welcomed and encouraged." @@ -6899,9 +6996,9 @@ msgid "InvenTree Version Information" msgstr "" #: templates/about.html:11 templates/about.html:105 -#: templates/js/translated/bom.js:395 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:573 templates/js/translated/modals.js:667 -#: templates/js/translated/modals.js:970 templates/modals.html:15 +#: templates/js/translated/bom.js:407 templates/js/translated/modals.js:53 +#: templates/js/translated/modals.js:584 templates/js/translated/modals.js:678 +#: templates/js/translated/modals.js:983 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -7178,13 +7275,13 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1103 +#: templates/js/translated/bom.js:1117 msgid "Required Quantity" msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:579 templates/js/translated/build.js:1189 +#: templates/js/translated/bom.js:591 templates/js/translated/build.js:1189 #: templates/js/translated/build.js:1810 #: templates/js/translated/table_filters.js:178 msgid "Available" @@ -7208,10 +7305,6 @@ msgstr "" msgid "Click on the following link to view this part" msgstr "" -#: templates/email/low_stock_notification.html:17 -msgid "Total Stock" -msgstr "" - #: templates/email/low_stock_notification.html:19 msgid "Minimum Quantity" msgstr "" @@ -7232,11 +7325,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1040 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1053 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1041 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1054 msgid "No response from the InvenTree server" msgstr "" @@ -7248,27 +7341,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1063 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1051 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1064 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1068 msgid "Error 403: Permission Denied" msgstr "Błąd 403: Odmowa dostępu" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1056 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1069 msgid "You do not have the required permissions to access this function" msgstr "Nie masz uprawnień wymaganych do dostępu do tej funkcji" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1073 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1061 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1074 msgid "The requested resource could not be located on the server" msgstr "" @@ -7280,11 +7373,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1065 +#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1078 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1066 +#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1079 msgid "Connection timeout while requesting data from server" msgstr "" @@ -7353,7 +7446,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "Invalid server response" msgstr "" @@ -7381,7 +7474,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1018 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1026 msgid "Remove stock item" msgstr "" @@ -7428,12 +7521,12 @@ msgid "Download BOM Template" msgstr "" #: templates/js/translated/bom.js:39 templates/js/translated/bom.js:73 -#: templates/js/translated/order.js:369 templates/js/translated/stock.js:510 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:518 msgid "Format" msgstr "" #: templates/js/translated/bom.js:40 templates/js/translated/bom.js:74 -#: templates/js/translated/order.js:370 templates/js/translated/stock.js:511 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:519 msgid "Select file format" msgstr "" @@ -7489,87 +7582,87 @@ msgstr "" msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:340 -msgid "Select and add a new variant item using the input below" +#: templates/js/translated/bom.js:352 +msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:351 +#: templates/js/translated/bom.js:363 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:357 +#: templates/js/translated/bom.js:369 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:396 +#: templates/js/translated/bom.js:408 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:397 +#: templates/js/translated/bom.js:409 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:516 +#: templates/js/translated/bom.js:528 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:520 templates/js/translated/build.js:1171 +#: templates/js/translated/bom.js:532 templates/js/translated/build.js:1171 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:525 +#: templates/js/translated/bom.js:537 msgid "Open subassembly" msgstr "" -#: templates/js/translated/bom.js:597 +#: templates/js/translated/bom.js:609 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:612 +#: templates/js/translated/bom.js:624 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:619 +#: templates/js/translated/bom.js:631 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:668 templates/js/translated/bom.js:757 +#: templates/js/translated/bom.js:680 templates/js/translated/bom.js:769 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:728 +#: templates/js/translated/bom.js:740 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:742 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:732 +#: templates/js/translated/bom.js:744 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:734 templates/js/translated/bom.js:908 +#: templates/js/translated/bom.js:746 templates/js/translated/bom.js:920 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:891 +#: templates/js/translated/bom.js:748 templates/js/translated/bom.js:903 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:830 templates/js/translated/build.js:915 +#: templates/js/translated/bom.js:842 templates/js/translated/build.js:915 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:886 +#: templates/js/translated/bom.js:898 msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:1086 templates/js/translated/build.js:1155 +#: templates/js/translated/bom.js:1100 templates/js/translated/build.js:1155 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1108 +#: templates/js/translated/bom.js:1122 msgid "Inherited from parent BOM" msgstr "" @@ -7725,9 +7818,9 @@ msgstr "" msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1206 -#: templates/js/translated/part.js:1617 templates/js/translated/stock.js:1512 -#: templates/js/translated/stock.js:2321 +#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:1624 templates/js/translated/stock.js:1520 +#: templates/js/translated/stock.js:2479 msgid "Select" msgstr "" @@ -7735,7 +7828,7 @@ msgstr "" msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2540 +#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2698 msgid "No user information" msgstr "" @@ -7808,34 +7901,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:500 -#: templates/js/translated/company.js:757 templates/js/translated/part.js:511 -#: templates/js/translated/part.js:596 +#: templates/js/translated/company.js:757 templates/js/translated/part.js:517 +#: templates/js/translated/part.js:602 msgid "Template part" msgstr "" #: templates/js/translated/company.js:504 -#: templates/js/translated/company.js:761 templates/js/translated/part.js:515 -#: templates/js/translated/part.js:600 +#: templates/js/translated/company.js:761 templates/js/translated/part.js:521 +#: templates/js/translated/part.js:606 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:631 templates/js/translated/part.js:690 +#: templates/js/translated/company.js:631 templates/js/translated/part.js:696 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:668 templates/js/translated/part.js:732 +#: templates/js/translated/company.js:668 templates/js/translated/part.js:738 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:669 templates/js/translated/part.js:733 +#: templates/js/translated/company.js:669 templates/js/translated/part.js:739 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:688 templates/js/translated/part.js:750 +#: templates/js/translated/company.js:688 templates/js/translated/part.js:756 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:699 templates/js/translated/part.js:762 +#: templates/js/translated/company.js:699 templates/js/translated/part.js:768 msgid "Delete Parameter" msgstr "" @@ -7844,12 +7937,12 @@ msgid "No supplier parts found" msgstr "" #: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:420 +#: templates/js/translated/filters.js:429 msgid "true" msgstr "" #: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:421 +#: templates/js/translated/filters.js:430 msgid "false" msgstr "" @@ -7869,7 +7962,7 @@ msgstr "Dodaj nowy filtr" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:329 +#: templates/js/translated/filters.js:338 msgid "Create filter" msgstr "" @@ -7898,20 +7991,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1080 templates/modals.html:19 +#: templates/js/translated/forms.js:1082 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1471 +#: templates/js/translated/forms.js:1487 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1675 +#: templates/js/translated/forms.js:1691 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1895 +#: templates/js/translated/forms.js:1930 msgid "Clear input" msgstr "" @@ -7924,7 +8017,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1042 +#: templates/js/translated/stock.js:1050 msgid "Select Stock Items" msgstr "" @@ -7974,12 +8067,12 @@ msgid "Select Label Template" msgstr "" #: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 -#: templates/js/translated/modals.js:599 +#: templates/js/translated/modals.js:610 msgid "Cancel" msgstr "" #: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:666 templates/js/translated/modals.js:969 +#: templates/js/translated/modals.js:677 templates/js/translated/modals.js:982 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" @@ -7988,47 +8081,47 @@ msgstr "" msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:381 +#: templates/js/translated/modals.js:392 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:540 +#: templates/js/translated/modals.js:551 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:598 +#: templates/js/translated/modals.js:609 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:655 +#: templates/js/translated/modals.js:666 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:933 +#: templates/js/translated/modals.js:946 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1045 +#: templates/js/translated/modals.js:1058 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1046 +#: templates/js/translated/modals.js:1059 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1069 +#: templates/js/translated/modals.js:1082 msgid "Error requesting form data" msgstr "" @@ -8052,23 +8145,24 @@ msgstr "" msgid "Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:236 +#: templates/js/translated/model_renderers.js:249 +#: templates/js/translated/model_renderers.js:270 msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:253 +#: templates/js/translated/model_renderers.js:287 msgid "Shipment ID" msgstr "" -#: templates/js/translated/model_renderers.js:273 +#: templates/js/translated/model_renderers.js:307 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:310 +#: templates/js/translated/model_renderers.js:344 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:339 +#: templates/js/translated/model_renderers.js:373 msgid "Supplier Part ID" msgstr "" @@ -8116,7 +8210,7 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2123 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2131 msgid "Stock Status" msgstr "" @@ -8140,7 +8234,7 @@ msgstr "" msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:790 templates/js/translated/part.js:803 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:809 msgid "No purchase orders found" msgstr "" @@ -8165,7 +8259,7 @@ msgid "Total" msgstr "" #: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 -#: templates/js/translated/part.js:1834 templates/js/translated/part.js:2045 +#: templates/js/translated/part.js:1841 templates/js/translated/part.js:2052 msgid "Unit Price" msgstr "Cena jednostkowa" @@ -8181,7 +8275,7 @@ msgstr "" msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1166 templates/js/translated/part.js:935 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:942 msgid "Receive line item" msgstr "" @@ -8250,7 +8344,7 @@ msgid "Delete Stock Allocation" msgstr "" #: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 -#: templates/js/translated/stock.js:1428 +#: templates/js/translated/stock.js:1436 msgid "Shipped to customer" msgstr "" @@ -8378,144 +8472,148 @@ msgstr "" msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:412 +#: templates/js/translated/part.js:351 +msgid "Create Part Variant" +msgstr "" + +#: templates/js/translated/part.js:418 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:414 +#: templates/js/translated/part.js:420 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:419 +#: templates/js/translated/part.js:425 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:421 +#: templates/js/translated/part.js:427 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:444 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:448 +#: templates/js/translated/part.js:454 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:451 +#: templates/js/translated/part.js:457 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:481 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:503 templates/js/translated/part.js:588 +#: templates/js/translated/part.js:509 templates/js/translated/part.js:594 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:507 templates/js/translated/part.js:592 +#: templates/js/translated/part.js:513 templates/js/translated/part.js:598 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:519 +#: templates/js/translated/part.js:525 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:523 +#: templates/js/translated/part.js:529 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:638 +#: templates/js/translated/part.js:644 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1005 +#: templates/js/translated/part.js:1012 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1029 +#: templates/js/translated/part.js:1036 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1096 templates/js/translated/part.js:1356 +#: templates/js/translated/part.js:1103 templates/js/translated/part.js:1363 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1266 +#: templates/js/translated/part.js:1273 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1289 +#: templates/js/translated/part.js:1296 #: templates/js/translated/table_filters.js:430 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:1380 templates/js/translated/part.js:1552 -#: templates/js/translated/stock.js:2282 +#: templates/js/translated/part.js:1387 templates/js/translated/part.js:1559 +#: templates/js/translated/stock.js:2440 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1396 +#: templates/js/translated/part.js:1403 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1571 templates/js/translated/stock.js:2301 +#: templates/js/translated/part.js:1578 templates/js/translated/stock.js:2459 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:1635 +#: templates/js/translated/part.js:1642 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1649 templates/js/translated/stock.js:2345 +#: templates/js/translated/part.js:1656 templates/js/translated/stock.js:2503 msgid "Path" msgstr "" -#: templates/js/translated/part.js:1693 +#: templates/js/translated/part.js:1700 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1744 templates/js/translated/stock.js:1234 +#: templates/js/translated/part.js:1751 templates/js/translated/stock.js:1242 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1745 templates/js/translated/stock.js:1235 +#: templates/js/translated/part.js:1752 templates/js/translated/stock.js:1243 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:1751 +#: templates/js/translated/part.js:1758 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:1773 +#: templates/js/translated/part.js:1780 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:1787 +#: templates/js/translated/part.js:1794 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:1812 +#: templates/js/translated/part.js:1819 #, python-brace-format msgid "No ${human_name} information found" msgstr "" -#: templates/js/translated/part.js:1867 +#: templates/js/translated/part.js:1874 #, python-brace-format msgid "Edit ${human_name}" msgstr "" -#: templates/js/translated/part.js:1868 +#: templates/js/translated/part.js:1875 #, python-brace-format msgid "Delete ${human_name}" msgstr "" -#: templates/js/translated/part.js:1969 +#: templates/js/translated/part.js:1976 msgid "Single Price" msgstr "Cena jednostkowa" -#: templates/js/translated/part.js:1988 +#: templates/js/translated/part.js:1995 msgid "Single Price Difference" msgstr "" @@ -8589,340 +8687,344 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:74 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:181 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:93 templates/js/translated/stock.js:175 +#: templates/js/translated/stock.js:94 templates/js/translated/stock.js:183 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:101 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:110 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:146 +#: templates/js/translated/stock.js:154 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:186 +#: templates/js/translated/stock.js:194 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:225 +#: templates/js/translated/stock.js:233 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:231 +#: templates/js/translated/stock.js:239 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:382 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:387 +#: templates/js/translated/stock.js:395 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:420 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:416 templates/js/translated/stock.js:417 +#: templates/js/translated/stock.js:424 templates/js/translated/stock.js:425 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:433 +#: templates/js/translated/stock.js:441 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:453 +#: templates/js/translated/stock.js:461 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:462 +#: templates/js/translated/stock.js:470 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:515 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:526 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:519 +#: templates/js/translated/stock.js:527 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:628 +#: templates/js/translated/stock.js:636 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:629 +#: templates/js/translated/stock.js:637 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:714 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:715 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:709 +#: templates/js/translated/stock.js:717 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:710 +#: templates/js/translated/stock.js:718 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:796 +#: templates/js/translated/stock.js:804 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:797 +#: templates/js/translated/stock.js:805 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:892 +#: templates/js/translated/stock.js:900 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:893 +#: templates/js/translated/stock.js:901 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:899 +#: templates/js/translated/stock.js:907 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:900 +#: templates/js/translated/stock.js:908 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:904 +#: templates/js/translated/stock.js:912 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:905 +#: templates/js/translated/stock.js:913 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:909 +#: templates/js/translated/stock.js:917 msgid "Add Stock" msgstr "Dodaj stan" -#: templates/js/translated/stock.js:910 users/models.py:206 +#: templates/js/translated/stock.js:918 users/models.py:208 msgid "Add" msgstr "Dodaj" -#: templates/js/translated/stock.js:914 templates/stock_table.html:58 +#: templates/js/translated/stock.js:922 templates/stock_table.html:58 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1051 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1201 +#: templates/js/translated/stock.js:1209 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1203 +#: templates/js/translated/stock.js:1211 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1208 +#: templates/js/translated/stock.js:1216 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1230 +#: templates/js/translated/stock.js:1238 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1256 +#: templates/js/translated/stock.js:1264 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1313 +#: templates/js/translated/stock.js:1321 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1428 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1424 +#: templates/js/translated/stock.js:1432 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1432 +#: templates/js/translated/stock.js:1440 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1438 +#: templates/js/translated/stock.js:1446 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1604 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1601 +#: templates/js/translated/stock.js:1609 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1604 +#: templates/js/translated/stock.js:1612 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1608 +#: templates/js/translated/stock.js:1616 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1610 +#: templates/js/translated/stock.js:1618 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1616 +#: templates/js/translated/stock.js:1624 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1618 +#: templates/js/translated/stock.js:1626 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1620 +#: templates/js/translated/stock.js:1628 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1633 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1632 +#: templates/js/translated/stock.js:1640 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1634 +#: templates/js/translated/stock.js:1642 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1636 +#: templates/js/translated/stock.js:1644 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1648 #: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1690 +#: templates/js/translated/stock.js:1698 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1763 +#: templates/js/translated/stock.js:1771 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1809 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1822 templates/js/translated/stock.js:1870 +#: templates/js/translated/stock.js:1830 templates/js/translated/stock.js:1878 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1910 +#: templates/js/translated/stock.js:1918 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1937 +#: templates/js/translated/stock.js:1945 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1939 +#: templates/js/translated/stock.js:1947 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:2138 +#: templates/js/translated/stock.js:2146 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2152 +#: templates/js/translated/stock.js:2160 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2153 +#: templates/js/translated/stock.js:2161 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2377 +#: templates/js/translated/stock.js:2340 +msgid "Allocated Quantity" +msgstr "" + +#: templates/js/translated/stock.js:2535 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2399 +#: templates/js/translated/stock.js:2557 msgid "Details" msgstr "Szczegóły" -#: templates/js/translated/stock.js:2424 +#: templates/js/translated/stock.js:2582 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2443 +#: templates/js/translated/stock.js:2601 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2462 +#: templates/js/translated/stock.js:2620 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2480 +#: templates/js/translated/stock.js:2638 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2503 +#: templates/js/translated/stock.js:2661 msgid "Added" msgstr "Dodano" -#: templates/js/translated/stock.js:2511 +#: templates/js/translated/stock.js:2669 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2552 +#: templates/js/translated/stock.js:2710 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2553 +#: templates/js/translated/stock.js:2711 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2604 +#: templates/js/translated/stock.js:2762 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2655 +#: templates/js/translated/stock.js:2813 msgid "Uninstall Stock Item" msgstr "" @@ -9194,11 +9296,11 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:113 +#: templates/navbar.html:114 msgid "Logout" msgstr "" -#: templates/navbar.html:115 +#: templates/navbar.html:116 msgid "Login" msgstr "" @@ -9246,31 +9348,43 @@ msgstr "" msgid "Server is deployed using docker" msgstr "" -#: templates/stats.html:40 -msgid "Server status" +#: templates/stats.html:39 +msgid "Plugin Support" msgstr "" #: templates/stats.html:43 -msgid "Healthy" +msgid "Plugin support enabled" msgstr "" #: templates/stats.html:45 -msgid "Issues detected" +msgid "Plugin support disabled" msgstr "" #: templates/stats.html:52 -msgid "Background Worker" +msgid "Server status" msgstr "" #: templates/stats.html:55 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:57 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:64 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:67 msgid "Background worker not running" msgstr "" -#: templates/stats.html:63 +#: templates/stats.html:75 msgid "Email Settings" msgstr "" -#: templates/stats.html:66 +#: templates/stats.html:78 msgid "Email settings not configured" msgstr "" @@ -9366,35 +9480,35 @@ msgstr "Uprawnienia" msgid "Important dates" msgstr "" -#: users/models.py:193 +#: users/models.py:195 msgid "Permission set" msgstr "Uprawnienia nadane" -#: users/models.py:201 +#: users/models.py:203 msgid "Group" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "View" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to view items" msgstr "Uprawnienie do wyświetlania przedmiotów" -#: users/models.py:206 +#: users/models.py:208 msgid "Permission to add items" msgstr "Uprawnienie do dodawania przedmiotów" -#: users/models.py:208 +#: users/models.py:210 msgid "Change" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Permissions to edit items" msgstr "Uprawnienie do edycji przedmiotów" -#: users/models.py:210 +#: users/models.py:212 msgid "Permission to delete items" msgstr "Uprawnienie do usuwania przedmiotów" diff --git a/InvenTree/locale/pt/LC_MESSAGES/django.po b/InvenTree/locale/pt/LC_MESSAGES/django.po index c7cba4671b..f65a3cf8c2 100644 --- a/InvenTree/locale/pt/LC_MESSAGES/django.po +++ b/InvenTree/locale/pt/LC_MESSAGES/django.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-10 03:54+0000\n" -"PO-Revision-Date: 2022-01-10 03:57\n" +"POT-Creation-Date: 2022-01-29 00:17+0000\n" +"PO-Revision-Date: 2022-01-29 01:10\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -18,15 +18,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 138\n" -#: InvenTree/api.py:64 +#: InvenTree/api.py:55 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:110 +#: InvenTree/api.py:101 msgid "No action specified" msgstr "" -#: InvenTree/api.py:124 +#: InvenTree/api.py:116 msgid "No matching action found" msgstr "" @@ -80,41 +80,41 @@ msgstr "" msgid "You must type the same email each time." msgstr "" -#: InvenTree/helpers.py:437 +#: InvenTree/helpers.py:439 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:444 order/models.py:279 order/models.py:420 +#: InvenTree/helpers.py:446 order/models.py:282 order/models.py:425 #: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:447 +#: InvenTree/helpers.py:449 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:469 InvenTree/helpers.py:472 InvenTree/helpers.py:475 -#: InvenTree/helpers.py:500 +#: InvenTree/helpers.py:471 InvenTree/helpers.py:474 InvenTree/helpers.py:477 +#: InvenTree/helpers.py:502 #, python-brace-format msgid "Invalid group: {g}" msgstr "" -#: InvenTree/helpers.py:510 +#: InvenTree/helpers.py:512 #, python-brace-format msgid "Invalid group {group}" msgstr "" -#: InvenTree/helpers.py:516 +#: InvenTree/helpers.py:518 #, python-brace-format msgid "Invalid/no group {group}" msgstr "" -#: InvenTree/helpers.py:522 +#: InvenTree/helpers.py:524 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:526 +#: InvenTree/helpers.py:528 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" @@ -127,7 +127,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1967 +#: InvenTree/models.py:132 stock/models.py:1995 #: templates/js/translated/attachment.js:119 msgid "Attachment" msgstr "" @@ -137,15 +137,15 @@ msgid "Select file to attach" msgstr "" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:124 part/models.py:828 +#: company/models.py:564 order/models.py:127 part/models.py:830 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:540 -#: templates/js/translated/company.js:829 templates/js/translated/part.js:1317 +#: templates/js/translated/company.js:829 templates/js/translated/part.js:1324 msgid "Link" msgstr "" -#: InvenTree/models.py:140 build/models.py:330 part/models.py:829 -#: stock/models.py:527 +#: InvenTree/models.py:140 build/models.py:332 part/models.py:831 +#: stock/models.py:529 msgid "Link to external URL" msgstr "" @@ -157,10 +157,11 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 -#: common/models.py:1214 part/models.py:2258 part/models.py:2278 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1223 +#: common/models.py:1224 common/models.py:1452 common/models.py:1453 +#: part/models.py:2265 part/models.py:2285 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2534 +#: templates/js/translated/stock.js:2692 msgid "User" msgstr "" @@ -197,42 +198,42 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 -#: label/models.py:112 part/models.py:772 part/models.py:2442 -#: plugin/models.py:40 report/models.py:181 +#: InvenTree/models.py:277 InvenTree/models.py:278 common/models.py:1438 +#: company/models.py:415 label/models.py:112 part/models.py:774 +#: part/models.py:2449 plugin/models.py:40 report/models.py:181 #: templates/InvenTree/settings/mixins/urls.html:13 -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:125 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:279 -#: templates/js/translated/company.js:641 templates/js/translated/part.js:561 -#: templates/js/translated/part.js:700 templates/js/translated/part.js:1624 -#: templates/js/translated/stock.js:2327 +#: templates/InvenTree/settings/settings.html:282 +#: templates/js/translated/company.js:641 templates/js/translated/part.js:567 +#: templates/js/translated/part.js:706 templates/js/translated/part.js:1631 +#: templates/js/translated/stock.js:2485 msgid "Name" msgstr "" -#: InvenTree/models.py:284 build/models.py:207 +#: InvenTree/models.py:284 build/models.py:209 #: build/templates/build/detail.html:25 company/models.py:354 #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:122 part/models.py:795 part/templates/part/category.html:74 +#: order/models.py:125 part/models.py:797 part/templates/part/category.html:74 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 #: stock/templates/stock/location.html:93 #: templates/InvenTree/settings/plugin_settings.html:33 -#: templates/js/translated/bom.js:327 templates/js/translated/bom.js:540 +#: templates/js/translated/bom.js:339 templates/js/translated/bom.js:552 #: templates/js/translated/build.js:1682 templates/js/translated/company.js:345 #: templates/js/translated/company.js:551 #: templates/js/translated/company.js:840 templates/js/translated/order.js:836 #: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 -#: templates/js/translated/part.js:620 templates/js/translated/part.js:992 -#: templates/js/translated/part.js:1077 templates/js/translated/part.js:1247 -#: templates/js/translated/part.js:1643 templates/js/translated/part.js:1712 -#: templates/js/translated/stock.js:1569 templates/js/translated/stock.js:2339 -#: templates/js/translated/stock.js:2384 +#: templates/js/translated/part.js:626 templates/js/translated/part.js:999 +#: templates/js/translated/part.js:1084 templates/js/translated/part.js:1254 +#: templates/js/translated/part.js:1650 templates/js/translated/part.js:1719 +#: templates/js/translated/stock.js:1577 templates/js/translated/stock.js:2314 +#: templates/js/translated/stock.js:2497 templates/js/translated/stock.js:2542 msgid "Description" msgstr "" @@ -244,7 +245,7 @@ msgstr "" msgid "parent" msgstr "" -#: InvenTree/serializers.py:65 part/models.py:2727 +#: InvenTree/serializers.py:65 part/models.py:2734 msgid "Must be a valid number" msgstr "" @@ -252,83 +253,83 @@ msgstr "" msgid "Filename" msgstr "" -#: InvenTree/settings.py:663 +#: InvenTree/settings.py:661 msgid "German" msgstr "" -#: InvenTree/settings.py:664 +#: InvenTree/settings.py:662 msgid "Greek" msgstr "" -#: InvenTree/settings.py:665 +#: InvenTree/settings.py:663 msgid "English" msgstr "" -#: InvenTree/settings.py:666 +#: InvenTree/settings.py:664 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:667 +#: InvenTree/settings.py:665 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:668 +#: InvenTree/settings.py:666 msgid "French" msgstr "" -#: InvenTree/settings.py:669 +#: InvenTree/settings.py:667 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:668 msgid "Italian" msgstr "" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:669 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:670 msgid "Korean" msgstr "" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:671 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:672 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:673 msgid "Polish" msgstr "" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:674 msgid "Portugese" msgstr "" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:675 msgid "Russian" msgstr "" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:676 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:677 msgid "Thai" msgstr "" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:678 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:679 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:680 msgid "Chinese" msgstr "" @@ -374,7 +375,7 @@ msgstr "" msgid "Returned" msgstr "" -#: InvenTree/status_codes.py:143 order/models.py:941 +#: InvenTree/status_codes.py:143 order/models.py:961 #: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "" @@ -455,7 +456,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2064 +#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2072 msgid "Merged stock items" msgstr "" @@ -543,56 +544,56 @@ msgstr "" msgid "System Information" msgstr "" -#: barcodes/api.py:54 barcodes/api.py:151 +#: barcodes/api.py:54 barcodes/api.py:152 msgid "Must provide barcode_data parameter" msgstr "" -#: barcodes/api.py:127 +#: barcodes/api.py:128 msgid "No match found for barcode data" msgstr "" -#: barcodes/api.py:129 +#: barcodes/api.py:130 msgid "Match found for barcode data" msgstr "" -#: barcodes/api.py:154 +#: barcodes/api.py:155 msgid "Must provide stockitem parameter" msgstr "" -#: barcodes/api.py:161 +#: barcodes/api.py:162 msgid "No matching stock item found" msgstr "" -#: barcodes/api.py:191 +#: barcodes/api.py:193 msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:195 +#: barcodes/api.py:197 msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:199 +#: barcodes/api.py:201 msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:205 barcodes/api.py:217 +#: barcodes/api.py:207 barcodes/api.py:219 msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:223 +#: barcodes/api.py:225 msgid "Barcode associated with Stock Item" msgstr "" -#: build/forms.py:36 build/models.py:1286 +#: build/forms.py:36 build/models.py:1293 #: build/templates/build/build_base.html:82 -#: build/templates/build/detail.html:35 common/models.py:1253 +#: build/templates/build/detail.html:35 common/models.py:1263 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/models.py:796 order/models.py:1207 order/serializers.py:810 +#: order/models.py:805 order/models.py:1229 order/serializers.py:816 #: order/templates/order/order_wizard/match_parts.html:30 -#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:145 -#: part/forms.py:161 part/forms.py:177 part/models.py:2629 +#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:144 +#: part/forms.py:160 part/forms.py:176 part/models.py:2636 #: part/templates/part/bom_upload/match_parts.html:31 -#: part/templates/part/detail.html:962 part/templates/part/detail.html:1048 +#: part/templates/part/detail.html:992 part/templates/part/detail.html:1078 #: part/templates/part/part_pricing.html:16 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 @@ -603,7 +604,7 @@ msgstr "" #: stock/templates/stock/item_base.html:181 #: stock/templates/stock/item_base.html:262 #: stock/templates/stock/item_base.html:270 -#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:555 +#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:567 #: templates/js/translated/build.js:295 templates/js/translated/build.js:495 #: templates/js/translated/build.js:689 templates/js/translated/build.js:699 #: templates/js/translated/build.js:1075 templates/js/translated/build.js:1422 @@ -611,11 +612,11 @@ msgstr "" #: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 #: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 #: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 -#: templates/js/translated/order.js:2150 templates/js/translated/part.js:900 -#: templates/js/translated/part.js:1855 templates/js/translated/part.js:1978 -#: templates/js/translated/part.js:2056 templates/js/translated/stock.js:383 -#: templates/js/translated/stock.js:580 templates/js/translated/stock.js:750 -#: templates/js/translated/stock.js:2519 templates/js/translated/stock.js:2621 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:906 +#: templates/js/translated/part.js:1862 templates/js/translated/part.js:1985 +#: templates/js/translated/part.js:2063 templates/js/translated/stock.js:391 +#: templates/js/translated/stock.js:588 templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2779 msgid "Quantity" msgstr "" @@ -623,9 +624,9 @@ msgstr "" msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 -#: stock/serializers.py:314 templates/js/translated/stock.js:230 -#: templates/js/translated/stock.js:384 +#: build/forms.py:41 order/serializers.py:820 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:238 +#: templates/js/translated/stock.js:392 msgid "Serial Numbers" msgstr "" @@ -649,18 +650,18 @@ msgstr "" msgid "Confirm build cancellation" msgstr "" -#: build/models.py:133 +#: build/models.py:135 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:137 build/templates/build/build_base.html:9 +#: build/models.py:139 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:457 +#: templates/js/translated/build.js:457 templates/js/translated/stock.js:2290 msgid "Build Order" msgstr "" -#: build/models.py:138 build/templates/build/build_base.html:13 +#: build/models.py:140 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:92 #: order/templates/order/so_sidebar.html:13 @@ -670,40 +671,40 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:198 +#: build/models.py:200 msgid "Build Order Reference" msgstr "" -#: build/models.py:199 order/models.py:210 order/models.py:536 -#: order/models.py:803 part/models.py:2638 +#: build/models.py:201 order/models.py:213 order/models.py:541 +#: order/models.py:812 part/models.py:2645 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:547 templates/js/translated/build.js:1179 +#: templates/js/translated/bom.js:559 templates/js/translated/build.js:1179 #: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "" -#: build/models.py:210 +#: build/models.py:212 msgid "Brief description of the build" msgstr "" -#: build/models.py:219 build/templates/build/build_base.html:164 +#: build/models.py:221 build/templates/build/build_base.html:164 #: build/templates/build/detail.html:88 msgid "Parent Build" msgstr "" -#: build/models.py:220 +#: build/models.py:222 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:225 build/templates/build/build_base.html:77 +#: build/models.py:227 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:856 order/models.py:930 -#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 -#: part/models.py:2204 part/models.py:2220 part/models.py:2239 -#: part/models.py:2256 part/models.py:2358 part/models.py:2480 -#: part/models.py:2613 part/models.py:2920 part/serializers.py:658 +#: order/models.py:876 order/models.py:950 +#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:359 +#: part/models.py:2211 part/models.py:2227 part/models.py:2246 +#: part/models.py:2263 part/models.py:2365 part/models.py:2487 +#: part/models.py:2620 part/models.py:2927 part/serializers.py:658 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/set_category.html:13 @@ -713,205 +714,205 @@ msgstr "" #: templates/InvenTree/search.html:80 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 -#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:326 -#: templates/js/translated/bom.js:505 templates/js/translated/build.js:680 +#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:338 +#: templates/js/translated/bom.js:517 templates/js/translated/build.js:680 #: templates/js/translated/build.js:1048 templates/js/translated/build.js:1419 #: templates/js/translated/build.js:1687 templates/js/translated/company.js:492 #: templates/js/translated/company.js:749 templates/js/translated/order.js:84 #: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 #: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 -#: templates/js/translated/order.js:2128 templates/js/translated/part.js:977 -#: templates/js/translated/part.js:1058 templates/js/translated/part.js:1225 -#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:719 -#: templates/js/translated/stock.js:926 templates/js/translated/stock.js:1526 -#: templates/js/translated/stock.js:2609 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:984 +#: templates/js/translated/part.js:1065 templates/js/translated/part.js:1232 +#: templates/js/translated/stock.js:562 templates/js/translated/stock.js:727 +#: templates/js/translated/stock.js:934 templates/js/translated/stock.js:1534 +#: templates/js/translated/stock.js:2767 msgid "Part" msgstr "" -#: build/models.py:233 +#: build/models.py:235 msgid "Select part to build" msgstr "" -#: build/models.py:238 +#: build/models.py:240 msgid "Sales Order Reference" msgstr "" -#: build/models.py:242 +#: build/models.py:244 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1407 +#: build/models.py:249 templates/js/translated/build.js:1407 #: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "" -#: build/models.py:251 +#: build/models.py:253 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:256 +#: build/models.py:258 msgid "Destination Location" msgstr "" -#: build/models.py:260 +#: build/models.py:262 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:264 +#: build/models.py:266 msgid "Build Quantity" msgstr "" -#: build/models.py:267 +#: build/models.py:269 msgid "Number of stock items to build" msgstr "" -#: build/models.py:271 +#: build/models.py:273 msgid "Completed items" msgstr "" -#: build/models.py:273 +#: build/models.py:275 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:277 part/templates/part/part_base.html:234 +#: build/models.py:279 part/templates/part/part_base.html:234 msgid "Build Status" msgstr "" -#: build/models.py:281 +#: build/models.py:283 msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:531 +#: build/models.py:287 stock/models.py:533 msgid "Batch Code" msgstr "" -#: build/models.py:289 +#: build/models.py:291 msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:126 part/models.py:967 +#: build/models.py:294 order/models.py:129 part/models.py:969 #: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "" -#: build/models.py:296 order/models.py:558 +#: build/models.py:298 order/models.py:563 msgid "Target completion date" msgstr "" -#: build/models.py:297 +#: build/models.py:299 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:252 +#: build/models.py:302 order/models.py:255 #: templates/js/translated/build.js:1758 msgid "Completion Date" msgstr "" -#: build/models.py:306 +#: build/models.py:308 msgid "completed by" msgstr "" -#: build/models.py:314 templates/js/translated/build.js:1729 +#: build/models.py:316 templates/js/translated/build.js:1729 msgid "Issued by" msgstr "" -#: build/models.py:315 +#: build/models.py:317 msgid "User who issued this build order" msgstr "" -#: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:140 +#: build/models.py:325 build/templates/build/build_base.html:185 +#: build/templates/build/detail.html:116 order/models.py:143 #: order/templates/order/order_base.html:170 -#: order/templates/order/sales_order_base.html:182 part/models.py:971 +#: order/templates/order/sales_order_base.html:182 part/models.py:973 #: report/templates/report/inventree_build_order_base.html:159 #: templates/js/translated/build.js:1741 templates/js/translated/order.js:864 msgid "Responsible" msgstr "" -#: build/models.py:324 +#: build/models.py:326 msgid "User responsible for this build order" msgstr "" -#: build/models.py:329 build/templates/build/detail.html:102 +#: build/models.py:331 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:525 +#: part/templates/part/part_base.html:354 stock/models.py:527 #: stock/templates/stock/item_base.html:373 msgid "External Link" msgstr "" -#: build/models.py:334 build/serializers.py:201 +#: build/models.py:336 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:144 order/models.py:805 order/models.py:1051 +#: order/models.py:147 order/models.py:814 order/models.py:1071 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/models.py:956 -#: part/templates/part/detail.html:120 part/templates/part/part_sidebar.html:50 +#: order/templates/order/so_sidebar.html:17 part/models.py:958 +#: part/templates/part/detail.html:137 part/templates/part/part_sidebar.html:54 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:597 -#: stock/models.py:1867 stock/models.py:1973 stock/serializers.py:332 -#: stock/serializers.py:639 stock/serializers.py:737 stock/serializers.py:869 -#: stock/templates/stock/stock_sidebar.html:21 -#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:711 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:599 +#: stock/models.py:1895 stock/models.py:2001 stock/serializers.py:332 +#: stock/serializers.py:640 stock/serializers.py:738 stock/serializers.py:870 +#: stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:723 #: templates/js/translated/company.js:845 templates/js/translated/order.js:1149 #: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 -#: templates/js/translated/stock.js:1309 templates/js/translated/stock.js:1795 +#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1803 msgid "Notes" msgstr "" -#: build/models.py:335 +#: build/models.py:337 msgid "Extra build notes" msgstr "" -#: build/models.py:710 +#: build/models.py:717 msgid "No build output specified" msgstr "" -#: build/models.py:713 +#: build/models.py:720 msgid "Build output is already completed" msgstr "" -#: build/models.py:716 +#: build/models.py:723 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1108 +#: build/models.py:1115 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1117 +#: build/models.py:1124 #, python-brace-format msgid "Allocated quantity ({q}) must not execed available stock quantity ({a})" msgstr "" -#: build/models.py:1127 +#: build/models.py:1134 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:1167 +#: build/models.py:1140 order/models.py:1189 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1139 +#: build/models.py:1146 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1196 +#: build/models.py:1203 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1256 stock/templates/stock/item_base.html:345 +#: build/models.py:1263 stock/templates/stock/item_base.html:345 #: templates/InvenTree/search.html:137 templates/js/translated/build.js:1660 #: templates/navbar.html:35 msgid "Build" msgstr "" -#: build/models.py:1257 +#: build/models.py:1264 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1273 build/serializers.py:388 order/serializers.py:690 -#: order/serializers.py:708 stock/serializers.py:577 stock/serializers.py:695 +#: build/models.py:1280 build/serializers.py:388 order/serializers.py:696 +#: order/serializers.py:714 stock/serializers.py:578 stock/serializers.py:696 #: stock/templates/stock/item_base.html:9 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:367 @@ -920,24 +921,24 @@ msgstr "" #: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 #: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 #: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 -#: templates/js/translated/stock.js:555 templates/js/translated/stock.js:720 -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:563 templates/js/translated/stock.js:728 +#: templates/js/translated/stock.js:2628 msgid "Stock Item" msgstr "" -#: build/models.py:1274 +#: build/models.py:1281 msgid "Source stock item" msgstr "" -#: build/models.py:1287 +#: build/models.py:1294 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1295 +#: build/models.py:1302 msgid "Install into" msgstr "" -#: build/models.py:1296 +#: build/models.py:1303 msgid "Destination stock item" msgstr "" @@ -962,16 +963,16 @@ msgid "This build output is not fully allocated" msgstr "" #: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 -#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:730 -#: stock/serializers.py:971 stock/templates/stock/item_base.html:313 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:731 +#: stock/serializers.py:972 stock/templates/stock/item_base.html:313 #: templates/js/translated/barcode.js:384 #: templates/js/translated/barcode.js:557 templates/js/translated/build.js:480 #: templates/js/translated/build.js:1087 templates/js/translated/order.js:508 #: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 #: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 -#: templates/js/translated/part.js:179 templates/js/translated/stock.js:556 -#: templates/js/translated/stock.js:721 templates/js/translated/stock.js:928 -#: templates/js/translated/stock.js:1676 templates/js/translated/stock.js:2411 +#: templates/js/translated/part.js:179 templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:729 templates/js/translated/stock.js:936 +#: templates/js/translated/stock.js:1684 templates/js/translated/stock.js:2569 msgid "Location" msgstr "" @@ -980,12 +981,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:552 +#: build/templates/build/detail.html:63 order/models.py:557 #: order/serializers.py:247 stock/templates/stock/item_base.html:187 #: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1716 #: templates/js/translated/order.js:591 templates/js/translated/order.js:840 -#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1651 -#: templates/js/translated/stock.js:2488 templates/js/translated/stock.js:2637 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1659 +#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2795 msgid "Status" msgstr "" @@ -1021,8 +1022,8 @@ msgstr "" msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:313 build/serializers.py:362 part/models.py:2753 -#: part/models.py:2912 +#: build/serializers.py:313 build/serializers.py:362 part/models.py:2760 +#: part/models.py:2919 msgid "BOM Item" msgstr "" @@ -1038,16 +1039,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:394 stock/serializers.py:584 +#: build/serializers.py:394 stock/serializers.py:585 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:408 order/models.py:277 order/serializers.py:240 -#: stock/models.py:365 stock/models.py:1077 stock/serializers.py:305 +#: build/serializers.py:408 order/models.py:280 order/serializers.py:240 +#: stock/models.py:367 stock/models.py:1105 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:450 order/serializers.py:741 +#: build/serializers.py:450 order/serializers.py:747 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1060,7 +1061,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:491 order/serializers.py:984 +#: build/serializers.py:491 order/serializers.py:990 msgid "Allocation items must be provided" msgstr "" @@ -1164,13 +1165,13 @@ msgid "Completed" msgstr "" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:927 -#: order/models.py:1023 order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:947 +#: order/models.py:1043 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:307 -#: templates/js/translated/order.js:1218 +#: templates/js/translated/order.js:1218 templates/js/translated/stock.js:2304 msgid "Sales Order" msgstr "" @@ -1224,7 +1225,7 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:878 stock/forms.py:136 +#: build/templates/build/detail.html:50 order/models.py:898 stock/forms.py:136 #: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1239,7 +1240,7 @@ msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:331 -#: templates/js/translated/stock.js:1665 templates/js/translated/stock.js:2644 +#: templates/js/translated/stock.js:1673 templates/js/translated/stock.js:2802 #: templates/js/translated/table_filters.js:151 #: templates/js/translated/table_filters.js:238 msgid "Batch" @@ -1343,9 +1344,9 @@ msgstr "" #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 #: order/templates/order/sales_order_detail.html:107 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:196 -#: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 -#: stock/templates/stock/stock_sidebar.html:19 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:213 +#: part/templates/part/part_sidebar.html:52 stock/templates/stock/item.html:112 +#: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" @@ -1360,8 +1361,8 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:108 #: order/templates/order/sales_order_detail.html:127 #: order/templates/order/sales_order_detail.html:186 -#: part/templates/part/detail.html:124 stock/templates/stock/item.html:115 -#: stock/templates/stock/item.html:205 +#: part/templates/part/detail.html:141 stock/templates/stock/item.html:132 +#: stock/templates/stock/item.html:235 msgid "Edit Notes" msgstr "" @@ -1373,7 +1374,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:303 +#: build/templates/build/index.html:18 part/templates/part/detail.html:320 msgid "New Build Order" msgstr "" @@ -1453,23 +1454,23 @@ msgstr "" msgid "Delete Build Order" msgstr "" -#: common/files.py:67 +#: common/files.py:65 msgid "Unsupported file format: {ext.upper()}" msgstr "" -#: common/files.py:69 +#: common/files.py:67 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:74 +#: common/files.py:72 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:76 +#: common/files.py:74 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:78 +#: common/files.py:76 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1490,740 +1491,828 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:344 common/models.py:998 common/models.py:1206 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:352 +msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:346 +#: common/models.py:354 msgid "Settings value" msgstr "" -#: common/models.py:380 +#: common/models.py:388 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:400 +#: common/models.py:408 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:411 +#: common/models.py:419 msgid "Value must be an integer value" msgstr "" -#: common/models.py:434 +#: common/models.py:442 msgid "Key string must be unique" msgstr "" -#: common/models.py:553 +#: common/models.py:561 msgid "No group" msgstr "" -#: common/models.py:595 +#: common/models.py:603 msgid "Restart required" msgstr "" -#: common/models.py:596 +#: common/models.py:604 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:603 +#: common/models.py:611 msgid "InvenTree Instance Name" msgstr "" -#: common/models.py:605 +#: common/models.py:613 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:609 +#: common/models.py:617 msgid "Use instance name" msgstr "" -#: common/models.py:610 +#: common/models.py:618 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:616 company/models.py:100 company/models.py:101 +#: common/models.py:624 company/models.py:100 company/models.py:101 msgid "Company name" msgstr "" -#: common/models.py:617 +#: common/models.py:625 msgid "Internal company name" msgstr "" -#: common/models.py:622 +#: common/models.py:630 msgid "Base URL" msgstr "" -#: common/models.py:623 +#: common/models.py:631 msgid "Base URL for server instance" msgstr "" -#: common/models.py:629 +#: common/models.py:637 msgid "Default Currency" msgstr "" -#: common/models.py:630 +#: common/models.py:638 msgid "Default currency" msgstr "" -#: common/models.py:636 +#: common/models.py:644 msgid "Download from URL" msgstr "" -#: common/models.py:637 +#: common/models.py:645 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:643 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:651 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:644 +#: common/models.py:652 msgid "Enable barcode scanner support" msgstr "" -#: common/models.py:650 +#: common/models.py:658 msgid "IPN Regex" msgstr "" -#: common/models.py:651 +#: common/models.py:659 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:655 +#: common/models.py:663 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:656 +#: common/models.py:664 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:662 +#: common/models.py:670 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:663 +#: common/models.py:671 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:669 +#: common/models.py:677 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:670 +#: common/models.py:678 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:676 +#: common/models.py:684 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:677 +#: common/models.py:685 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:683 +#: common/models.py:691 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:684 +#: common/models.py:692 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:690 +#: common/models.py:698 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:691 +#: common/models.py:699 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:697 part/models.py:2482 report/models.py:187 +#: common/models.py:705 part/models.py:2489 report/models.py:187 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:422 msgid "Template" msgstr "" -#: common/models.py:698 +#: common/models.py:706 msgid "Parts are templates by default" msgstr "" -#: common/models.py:704 part/models.py:919 templates/js/translated/bom.js:1068 +#: common/models.py:712 part/models.py:921 templates/js/translated/bom.js:1082 #: templates/js/translated/table_filters.js:168 #: templates/js/translated/table_filters.js:434 msgid "Assembly" msgstr "" -#: common/models.py:705 +#: common/models.py:713 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:711 part/models.py:925 +#: common/models.py:719 part/models.py:927 #: templates/js/translated/table_filters.js:438 msgid "Component" msgstr "" -#: common/models.py:712 +#: common/models.py:720 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:718 part/models.py:936 +#: common/models.py:726 part/models.py:938 msgid "Purchaseable" msgstr "" -#: common/models.py:719 +#: common/models.py:727 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:725 part/models.py:941 +#: common/models.py:733 part/models.py:943 #: templates/js/translated/table_filters.js:446 msgid "Salable" msgstr "" -#: common/models.py:726 +#: common/models.py:734 msgid "Parts are salable by default" msgstr "" -#: common/models.py:732 part/models.py:931 +#: common/models.py:740 part/models.py:933 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 #: templates/js/translated/table_filters.js:450 msgid "Trackable" msgstr "" -#: common/models.py:733 +#: common/models.py:741 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:739 part/models.py:951 +#: common/models.py:747 part/models.py:953 #: part/templates/part/part_base.html:147 #: templates/js/translated/table_filters.js:42 msgid "Virtual" msgstr "" -#: common/models.py:740 +#: common/models.py:748 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:746 +#: common/models.py:754 msgid "Show Import in Views" msgstr "" -#: common/models.py:747 +#: common/models.py:755 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:753 +#: common/models.py:761 msgid "Show Price in Forms" msgstr "" -#: common/models.py:754 +#: common/models.py:762 msgid "Display part price in some forms" msgstr "" -#: common/models.py:765 +#: common/models.py:773 msgid "Show Price in BOM" msgstr "" -#: common/models.py:766 +#: common/models.py:774 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:772 +#: common/models.py:780 msgid "Show related parts" msgstr "" -#: common/models.py:773 +#: common/models.py:781 msgid "Display related parts for a part" msgstr "" -#: common/models.py:779 +#: common/models.py:787 msgid "Create initial stock" msgstr "" -#: common/models.py:780 +#: common/models.py:788 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:786 +#: common/models.py:794 msgid "Internal Prices" msgstr "" -#: common/models.py:787 +#: common/models.py:795 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:793 +#: common/models.py:801 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:794 +#: common/models.py:802 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:800 +#: common/models.py:808 msgid "Part Name Display Format" msgstr "" -#: common/models.py:801 +#: common/models.py:809 msgid "Format to display the part name" msgstr "" -#: common/models.py:808 +#: common/models.py:816 msgid "Enable Reports" msgstr "" -#: common/models.py:809 +#: common/models.py:817 msgid "Enable generation of reports" msgstr "" -#: common/models.py:815 templates/stats.html:25 +#: common/models.py:823 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:816 +#: common/models.py:824 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:822 +#: common/models.py:830 msgid "Page Size" msgstr "" -#: common/models.py:823 +#: common/models.py:831 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:833 +#: common/models.py:841 msgid "Test Reports" msgstr "" -#: common/models.py:834 +#: common/models.py:842 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:840 +#: common/models.py:848 msgid "Stock Expiry" msgstr "" -#: common/models.py:841 +#: common/models.py:849 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:847 +#: common/models.py:855 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:848 +#: common/models.py:856 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:854 +#: common/models.py:862 msgid "Stock Stale Time" msgstr "" -#: common/models.py:855 +#: common/models.py:863 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:857 +#: common/models.py:865 msgid "days" msgstr "" -#: common/models.py:862 +#: common/models.py:870 msgid "Build Expired Stock" msgstr "" -#: common/models.py:863 +#: common/models.py:871 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:869 +#: common/models.py:877 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:870 +#: common/models.py:878 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:876 -msgid "Group by Part" -msgstr "" - -#: common/models.py:877 -msgid "Group stock items by part reference in table views" -msgstr "" - -#: common/models.py:883 +#: common/models.py:884 msgid "Build Order Reference Prefix" msgstr "" -#: common/models.py:884 +#: common/models.py:885 msgid "Prefix value for build order reference" msgstr "" -#: common/models.py:889 +#: common/models.py:890 msgid "Build Order Reference Regex" msgstr "" -#: common/models.py:890 +#: common/models.py:891 msgid "Regular expression pattern for matching build order reference" msgstr "" -#: common/models.py:894 +#: common/models.py:895 msgid "Sales Order Reference Prefix" msgstr "" -#: common/models.py:895 +#: common/models.py:896 msgid "Prefix value for sales order reference" msgstr "" -#: common/models.py:900 +#: common/models.py:901 msgid "Purchase Order Reference Prefix" msgstr "" -#: common/models.py:901 +#: common/models.py:902 msgid "Prefix value for purchase order reference" msgstr "" -#: common/models.py:907 +#: common/models.py:908 msgid "Enable password forgot" msgstr "" -#: common/models.py:908 +#: common/models.py:909 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:913 +#: common/models.py:914 msgid "Enable registration" msgstr "" -#: common/models.py:914 +#: common/models.py:915 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:919 +#: common/models.py:920 msgid "Enable SSO" msgstr "" -#: common/models.py:920 +#: common/models.py:921 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:925 +#: common/models.py:926 msgid "Email required" msgstr "" -#: common/models.py:926 +#: common/models.py:927 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:931 +#: common/models.py:932 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:932 +#: common/models.py:933 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:937 +#: common/models.py:938 msgid "Mail twice" msgstr "" -#: common/models.py:938 +#: common/models.py:939 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:943 +#: common/models.py:944 msgid "Password twice" msgstr "" -#: common/models.py:944 +#: common/models.py:945 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:949 +#: common/models.py:950 msgid "Group on signup" msgstr "" -#: common/models.py:950 +#: common/models.py:951 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:955 +#: common/models.py:956 msgid "Enforce MFA" msgstr "" -#: common/models.py:956 +#: common/models.py:957 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:961 +#: common/models.py:964 msgid "Enable URL integration" msgstr "" -#: common/models.py:962 +#: common/models.py:965 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:968 +#: common/models.py:971 msgid "Enable navigation integration" msgstr "" -#: common/models.py:969 +#: common/models.py:972 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:975 +#: common/models.py:978 msgid "Enable app integration" msgstr "" -#: common/models.py:976 +#: common/models.py:979 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:982 +#: common/models.py:985 msgid "Enable schedule integration" msgstr "" -#: common/models.py:983 +#: common/models.py:986 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1029 +#: common/models.py:992 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:993 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:1008 common/models.py:1216 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1039 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1030 +#: common/models.py:1040 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1035 +#: common/models.py:1045 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1036 +#: common/models.py:1046 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1041 +#: common/models.py:1051 msgid "Show latest parts" msgstr "" -#: common/models.py:1042 +#: common/models.py:1052 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1047 +#: common/models.py:1057 msgid "Recent Part Count" msgstr "" -#: common/models.py:1048 +#: common/models.py:1058 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1054 +#: common/models.py:1064 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1055 +#: common/models.py:1065 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1060 +#: common/models.py:1070 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1061 +#: common/models.py:1071 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1066 +#: common/models.py:1076 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1067 +#: common/models.py:1077 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1072 +#: common/models.py:1082 msgid "Show low stock" msgstr "" -#: common/models.py:1073 +#: common/models.py:1083 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1078 +#: common/models.py:1088 msgid "Show depleted stock" msgstr "" -#: common/models.py:1079 +#: common/models.py:1089 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1084 +#: common/models.py:1094 msgid "Show needed stock" msgstr "" -#: common/models.py:1085 +#: common/models.py:1095 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1090 +#: common/models.py:1100 msgid "Show expired stock" msgstr "" -#: common/models.py:1091 +#: common/models.py:1101 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1096 +#: common/models.py:1106 msgid "Show stale stock" msgstr "" -#: common/models.py:1097 +#: common/models.py:1107 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1102 +#: common/models.py:1112 msgid "Show pending builds" msgstr "" -#: common/models.py:1103 +#: common/models.py:1113 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1108 +#: common/models.py:1118 msgid "Show overdue builds" msgstr "" -#: common/models.py:1109 +#: common/models.py:1119 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1114 +#: common/models.py:1124 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1115 +#: common/models.py:1125 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1120 +#: common/models.py:1130 msgid "Show overdue POs" msgstr "" -#: common/models.py:1121 +#: common/models.py:1131 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1126 +#: common/models.py:1136 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1127 +#: common/models.py:1137 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1132 +#: common/models.py:1142 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1133 +#: common/models.py:1143 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1139 +#: common/models.py:1149 msgid "Inline label display" msgstr "" -#: common/models.py:1140 +#: common/models.py:1150 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1146 +#: common/models.py:1156 msgid "Inline report display" msgstr "" -#: common/models.py:1147 +#: common/models.py:1157 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1153 +#: common/models.py:1163 msgid "Search Preview Results" msgstr "" -#: common/models.py:1154 +#: common/models.py:1164 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1160 +#: common/models.py:1170 msgid "Search Show Stock" msgstr "" -#: common/models.py:1161 +#: common/models.py:1171 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1167 +#: common/models.py:1177 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1168 +#: common/models.py:1178 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1174 +#: common/models.py:1184 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1175 +#: common/models.py:1185 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1181 +#: common/models.py:1191 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1182 +#: common/models.py:1192 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1188 +#: common/models.py:1198 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1189 +#: common/models.py:1199 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1254 company/forms.py:43 +#: common/models.py:1264 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1261 company/serializers.py:264 +#: common/models.py:1271 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 -#: templates/js/translated/part.js:909 templates/js/translated/part.js:1860 +#: templates/js/translated/part.js:915 templates/js/translated/part.js:1867 msgid "Price" msgstr "" -#: common/models.py:1262 +#: common/models.py:1272 msgid "Unit price at specified quantity" msgstr "" +#: common/models.py:1429 common/models.py:1568 +msgid "Endpoint" +msgstr "" + +#: common/models.py:1430 +msgid "Endpoint at which this webhook is received" +msgstr "" + +#: common/models.py:1439 +msgid "Name for this webhook" +msgstr "" + +#: common/models.py:1444 part/models.py:948 plugin/models.py:46 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:96 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:417 +msgid "Active" +msgstr "" + +#: common/models.py:1445 +msgid "Is this webhook active" +msgstr "" + +#: common/models.py:1459 +msgid "Token" +msgstr "" + +#: common/models.py:1460 +msgid "Token for access" +msgstr "" + +#: common/models.py:1467 +msgid "Secret" +msgstr "" + +#: common/models.py:1468 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:1535 +msgid "Message ID" +msgstr "" + +#: common/models.py:1536 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:1544 +msgid "Host" +msgstr "" + +#: common/models.py:1545 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:1552 +msgid "Header" +msgstr "" + +#: common/models.py:1553 +msgid "Header of this message" +msgstr "" + +#: common/models.py:1559 +msgid "Body" +msgstr "" + +#: common/models.py:1560 +msgid "Body of this message" +msgstr "" + +#: common/models.py:1569 +msgid "Endpoint on which this message was received" +msgstr "" + +#: common/models.py:1574 +msgid "Worked on" +msgstr "" + +#: common/models.py:1575 +msgid "Was the work on this message finished?" +msgstr "" + #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 #: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 -#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 -#: part/views.py:764 +#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:213 +#: part/views.py:773 msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 #: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 -#: part/views.py:765 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:214 +#: part/views.py:774 msgid "Match Fields" msgstr "" @@ -2315,7 +2404,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:139 part/models.py:838 +#: company/models.py:139 part/models.py:840 msgid "Image" msgstr "" @@ -2352,8 +2441,8 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:469 -#: stock/templates/stock/item_base.html:142 +#: company/models.py:320 company/models.py:535 stock/models.py:471 +#: stock/templates/stock/item_base.html:142 templates/js/translated/bom.js:328 msgid "Base Part" msgstr "" @@ -2380,7 +2469,7 @@ msgstr "" #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:533 #: templates/js/translated/company.js:818 templates/js/translated/order.js:1038 -#: templates/js/translated/part.js:245 templates/js/translated/part.js:889 +#: templates/js/translated/part.js:245 templates/js/translated/part.js:895 msgid "MPN" msgstr "" @@ -2409,8 +2498,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1960 templates/js/translated/company.js:647 -#: templates/js/translated/part.js:709 templates/js/translated/stock.js:1296 +#: stock/models.py:1988 templates/js/translated/company.js:647 +#: templates/js/translated/part.js:715 templates/js/translated/stock.js:1304 msgid "Value" msgstr "" @@ -2418,10 +2507,10 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:429 part/models.py:913 part/models.py:2450 +#: company/models.py:429 part/models.py:915 part/models.py:2457 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:284 -#: templates/js/translated/company.js:653 templates/js/translated/part.js:715 +#: templates/InvenTree/settings/settings.html:287 +#: templates/js/translated/company.js:653 templates/js/translated/part.js:721 msgid "Units" msgstr "" @@ -2434,13 +2523,13 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:224 +#: company/templates/company/supplier_part.html:87 order/models.py:227 #: order/templates/order/order_base.html:112 -#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 -#: part/bom.py:247 stock/templates/stock/item_base.html:397 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:237 +#: part/bom.py:265 stock/templates/stock/item_base.html:397 #: templates/js/translated/company.js:337 #: templates/js/translated/company.js:774 templates/js/translated/order.js:823 -#: templates/js/translated/part.js:215 templates/js/translated/part.js:857 +#: templates/js/translated/part.js:215 templates/js/translated/part.js:863 #: templates/js/translated/table_filters.js:393 msgid "Supplier" msgstr "" @@ -2450,8 +2539,8 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 -#: templates/js/translated/part.js:226 templates/js/translated/part.js:875 +#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1025 +#: templates/js/translated/part.js:226 templates/js/translated/part.js:881 msgid "SKU" msgstr "" @@ -2472,22 +2561,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:576 company/templates/company/supplier_part.html:119 -#: part/models.py:2641 report/templates/report/inventree_po_report.html:93 +#: part/models.py:2648 report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "base cost" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:493 stock/templates/stock/item_base.html:338 -#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1791 +#: stock/models.py:495 stock/templates/stock/item_base.html:338 +#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1799 msgid "Packaging" msgstr "" @@ -2495,7 +2584,7 @@ msgstr "" msgid "Part packaging" msgstr "" -#: company/models.py:584 part/models.py:1781 +#: company/models.py:584 part/models.py:1783 msgid "multiple" msgstr "" @@ -2554,12 +2643,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:547 -#: order/templates/order/sales_order_base.html:115 stock/models.py:512 -#: stock/models.py:513 stock/serializers.py:625 +#: company/templates/company/company_base.html:83 order/models.py:552 +#: order/templates/order/sales_order_base.html:115 stock/models.py:514 +#: stock/models.py:515 stock/serializers.py:626 #: stock/templates/stock/item_base.html:290 #: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 -#: templates/js/translated/stock.js:2452 +#: templates/js/translated/stock.js:2610 #: templates/js/translated/table_filters.js:397 msgid "Customer" msgstr "" @@ -2590,7 +2679,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:118 -#: part/templates/part/detail.html:336 +#: part/templates/part/detail.html:353 msgid "New Supplier Part" msgstr "" @@ -2598,8 +2687,8 @@ msgstr "" #: company/templates/company/detail.html:79 #: company/templates/company/manufacturer_part.html:127 #: company/templates/company/manufacturer_part.html:156 -#: part/templates/part/category.html:171 part/templates/part/detail.html:345 -#: part/templates/part/detail.html:374 +#: part/templates/part/category.html:171 part/templates/part/detail.html:362 +#: part/templates/part/detail.html:391 msgid "Options" msgstr "" @@ -2627,7 +2716,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:67 part/templates/part/detail.html:364 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:381 msgid "New Manufacturer Part" msgstr "" @@ -2641,7 +2730,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:68 part/templates/part/part_sidebar.html:33 +#: part/templates/part/detail.html:85 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197 #: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 @@ -2663,7 +2752,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:91 part/templates/part/part_sidebar.html:37 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:41 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217 #: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 @@ -2691,13 +2780,13 @@ msgstr "" #: company/templates/company/detail.html:384 #: company/templates/company/manufacturer_part.html:215 -#: part/templates/part/detail.html:418 +#: part/templates/part/detail.html:435 msgid "Delete Supplier Parts?" msgstr "" #: company/templates/company/detail.html:385 #: company/templates/company/manufacturer_part.html:216 -#: part/templates/part/detail.html:419 +#: part/templates/part/detail.html:436 msgid "All selected supplier parts will be deleted" msgstr "" @@ -2714,7 +2803,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:34 #: company/templates/company/supplier_part.html:159 -#: part/templates/part/detail.html:71 part/templates/part/part_base.html:76 +#: part/templates/part/detail.html:88 part/templates/part/part_base.html:76 msgid "Order part" msgstr "" @@ -2735,34 +2824,34 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 -#: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 +#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:163 #: templates/InvenTree/search.html:188 templates/navbar.html:45 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:129 -#: part/templates/part/detail.html:347 +#: part/templates/part/detail.html:364 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:129 #: company/templates/company/manufacturer_part.html:158 #: company/templates/company/manufacturer_part.html:254 -#: part/templates/part/detail.html:347 part/templates/part/detail.html:376 +#: part/templates/part/detail.html:364 part/templates/part/detail.html:393 #: templates/js/translated/company.js:426 templates/js/translated/helpers.js:31 -#: users/models.py:210 +#: users/models.py:212 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:143 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:17 -#: part/templates/part/detail.html:170 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:187 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:147 -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:192 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part.html:65 msgid "New Parameter" @@ -2773,7 +2862,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:191 -#: part/templates/part/detail.html:862 +#: part/templates/part/detail.html:892 msgid "Add Parameter" msgstr "" @@ -2802,9 +2891,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:477 +#: company/templates/company/supplier_part.html:24 stock/models.py:479 #: stock/templates/stock/item_base.html:402 -#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1748 +#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1756 msgid "Supplier Part" msgstr "" @@ -2830,7 +2919,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:167 -#: templates/js/translated/stock.js:360 +#: templates/js/translated/stock.js:368 msgid "New Stock Item" msgstr "" @@ -2840,7 +2929,7 @@ msgid "Supplier Part Orders" msgstr "" #: company/templates/company/supplier_part.html:160 -#: part/templates/part/detail.html:72 +#: part/templates/part/detail.html:89 msgid "Order Part" msgstr "" @@ -2851,7 +2940,7 @@ msgstr "" #: company/templates/company/supplier_part.html:184 #: company/templates/company/supplier_part.html:290 -#: part/templates/part/prices.html:271 part/views.py:1619 +#: part/templates/part/prices.html:271 part/views.py:1628 msgid "Add Price Break" msgstr "" @@ -2859,11 +2948,11 @@ msgstr "" msgid "No price break information found" msgstr "" -#: company/templates/company/supplier_part.html:224 part/views.py:1681 +#: company/templates/company/supplier_part.html:224 part/views.py:1690 msgid "Delete Price Break" msgstr "" -#: company/templates/company/supplier_part.html:238 part/views.py:1667 +#: company/templates/company/supplier_part.html:238 part/views.py:1676 msgid "Edit Price Break" msgstr "" @@ -2881,10 +2970,10 @@ msgstr "" #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:150 #: templates/InvenTree/settings/sidebar.html:41 -#: templates/js/translated/bom.js:328 templates/js/translated/part.js:489 -#: templates/js/translated/part.js:624 templates/js/translated/part.js:1118 -#: templates/js/translated/part.js:1279 templates/js/translated/stock.js:927 -#: templates/js/translated/stock.js:1580 templates/navbar.html:28 +#: templates/js/translated/bom.js:340 templates/js/translated/part.js:495 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1125 +#: templates/js/translated/part.js:1286 templates/js/translated/stock.js:935 +#: templates/js/translated/stock.js:1588 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2907,8 +2996,8 @@ msgstr "" #: stock/templates/stock/location.html:151 #: stock/templates/stock/location.html:163 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2351 -#: templates/stats.html:93 templates/stats.html:102 users/models.py:43 +#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2509 +#: templates/stats.html:105 templates/stats.html:114 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2937,20 +3026,20 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:129 part/views.py:584 +#: company/views.py:129 part/views.py:593 msgid "Download Image" msgstr "" -#: company/views.py:158 part/views.py:616 +#: company/views.py:158 part/views.py:625 msgid "Image size exceeds maximum allowable size for download" msgstr "" -#: company/views.py:165 part/views.py:623 +#: company/views.py:165 part/views.py:632 #, python-brace-format msgid "Invalid response: {code}" msgstr "" -#: company/views.py:174 part/views.py:632 +#: company/views.py:174 part/views.py:641 msgid "Supplied URL is not a valid image file" msgstr "" @@ -3036,282 +3125,282 @@ msgstr "" msgid "Cancel order" msgstr "" -#: order/models.py:122 +#: order/models.py:125 msgid "Order description" msgstr "" -#: order/models.py:124 +#: order/models.py:127 msgid "Link to external page" msgstr "" -#: order/models.py:132 +#: order/models.py:135 msgid "Created By" msgstr "" -#: order/models.py:139 +#: order/models.py:142 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:144 +#: order/models.py:147 msgid "Order notes" msgstr "" -#: order/models.py:211 order/models.py:537 +#: order/models.py:214 order/models.py:542 msgid "Order reference" msgstr "" -#: order/models.py:216 order/models.py:552 +#: order/models.py:219 order/models.py:557 msgid "Purchase order status" msgstr "" -#: order/models.py:225 +#: order/models.py:228 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:228 order/templates/order/order_base.html:118 +#: order/models.py:231 order/templates/order/order_base.html:118 #: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:228 +#: order/models.py:231 msgid "Supplier order reference code" msgstr "" -#: order/models.py:235 +#: order/models.py:238 msgid "received by" msgstr "" -#: order/models.py:240 +#: order/models.py:243 msgid "Issue Date" msgstr "" -#: order/models.py:241 +#: order/models.py:244 msgid "Date order was issued" msgstr "" -#: order/models.py:246 +#: order/models.py:249 msgid "Target Delivery Date" msgstr "" -#: order/models.py:247 +#: order/models.py:250 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:253 +#: order/models.py:256 msgid "Date order was completed" msgstr "" -#: order/models.py:282 +#: order/models.py:285 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:411 -msgid "Quantity must be an integer" -msgstr "" - -#: order/models.py:415 +#: order/models.py:420 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:548 +#: order/models.py:553 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer Reference " msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer order reference code" msgstr "" -#: order/models.py:559 +#: order/models.py:564 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:562 order/models.py:1028 +#: order/models.py:567 order/models.py:1048 #: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:569 +#: order/models.py:574 msgid "shipped by" msgstr "" -#: order/models.py:635 +#: order/models.py:640 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:639 +#: order/models.py:644 msgid "Only a pending order can be marked as complete" msgstr "" -#: order/models.py:642 +#: order/models.py:647 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:645 +#: order/models.py:650 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:797 +#: order/models.py:806 msgid "Item quantity" msgstr "" -#: order/models.py:803 +#: order/models.py:812 msgid "Line item reference" msgstr "" -#: order/models.py:805 +#: order/models.py:814 msgid "Line item notes" msgstr "" -#: order/models.py:835 order/models.py:926 order/models.py:1022 -#: templates/js/translated/order.js:1820 +#: order/models.py:842 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:855 order/models.py:946 order/models.py:1042 +#: templates/js/translated/order.js:1820 templates/js/translated/stock.js:2271 msgid "Order" msgstr "" -#: order/models.py:836 order/templates/order/order_base.html:9 +#: order/models.py:856 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:352 -#: templates/js/translated/order.js:801 templates/js/translated/part.js:832 -#: templates/js/translated/stock.js:1725 templates/js/translated/stock.js:2433 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:838 +#: templates/js/translated/stock.js:1733 templates/js/translated/stock.js:2591 msgid "Purchase Order" msgstr "" -#: order/models.py:857 +#: order/models.py:877 msgid "Supplier part" msgstr "" -#: order/models.py:864 order/templates/order/order_base.html:163 +#: order/models.py:884 order/templates/order/order_base.html:163 #: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 -#: templates/js/translated/part.js:904 templates/js/translated/part.js:930 +#: templates/js/translated/part.js:910 templates/js/translated/part.js:937 #: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:865 +#: order/models.py:885 msgid "Number of items received" msgstr "" -#: order/models.py:872 part/templates/part/prices.html:176 stock/models.py:606 +#: order/models.py:892 part/templates/part/prices.html:176 stock/models.py:608 #: stock/serializers.py:170 stock/templates/stock/item_base.html:359 -#: templates/js/translated/stock.js:1779 +#: templates/js/translated/stock.js:1787 msgid "Purchase Price" msgstr "" -#: order/models.py:873 +#: order/models.py:893 msgid "Unit purchase price" msgstr "" -#: order/models.py:881 +#: order/models.py:901 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:936 part/templates/part/part_pricing.html:112 +#: order/models.py:956 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:937 +#: order/models.py:957 msgid "Unit sale price" msgstr "" -#: order/models.py:942 +#: order/models.py:962 msgid "Shipped quantity" msgstr "" -#: order/models.py:1029 +#: order/models.py:1049 msgid "Date of shipment" msgstr "" -#: order/models.py:1036 +#: order/models.py:1056 msgid "Checked By" msgstr "" -#: order/models.py:1037 +#: order/models.py:1057 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1045 +#: order/models.py:1065 msgid "Shipment number" msgstr "" -#: order/models.py:1052 +#: order/models.py:1072 msgid "Shipment notes" msgstr "" -#: order/models.py:1059 +#: order/models.py:1079 msgid "Tracking Number" msgstr "" -#: order/models.py:1060 +#: order/models.py:1080 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1070 +#: order/models.py:1090 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1073 +#: order/models.py:1093 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1149 order/models.py:1151 +#: order/models.py:1171 order/models.py:1173 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1155 +#: order/models.py:1177 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1157 +#: order/models.py:1179 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1160 +#: order/models.py:1182 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1164 +#: order/models.py:1186 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:1170 order/serializers.py:734 +#: order/models.py:1192 order/serializers.py:740 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1173 +#: order/models.py:1195 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1174 +#: order/models.py:1196 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1182 +#: order/models.py:1204 msgid "Line" msgstr "" -#: order/models.py:1190 order/serializers.py:825 order/serializers.py:953 -#: templates/js/translated/model_renderers.js:251 +#: order/models.py:1212 order/serializers.py:831 order/serializers.py:959 +#: templates/js/translated/model_renderers.js:285 msgid "Shipment" msgstr "" -#: order/models.py:1191 +#: order/models.py:1213 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1203 +#: order/models.py:1225 msgid "Item" msgstr "" -#: order/models.py:1204 +#: order/models.py:1226 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1207 +#: order/models.py:1229 msgid "Enter stock allocation quantity" msgstr "" @@ -3319,7 +3408,7 @@ msgstr "" msgid "Purchase price currency" msgstr "" -#: order/serializers.py:211 order/serializers.py:790 +#: order/serializers.py:211 order/serializers.py:796 msgid "Line Item" msgstr "" @@ -3355,39 +3444,39 @@ msgstr "" msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:587 msgid "Sale price currency" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:655 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:699 order/serializers.py:802 +#: order/serializers.py:705 order/serializers.py:808 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:721 +#: order/serializers.py:727 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:815 +#: order/serializers.py:821 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:839 order/serializers.py:964 +#: order/serializers.py:845 order/serializers.py:970 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:842 order/serializers.py:967 +#: order/serializers.py:848 order/serializers.py:973 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:894 +#: order/serializers.py:900 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:910 msgid "The following serial numbers are already allocated" msgstr "" @@ -3441,6 +3530,7 @@ msgstr "" #: order/templates/order/order_base.html:94 #: order/templates/order/sales_order_base.html:89 +#: templates/js/translated/stock.js:2327 msgid "Order Status" msgstr "" @@ -3538,7 +3628,7 @@ msgstr "" #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/build.js:300 templates/js/translated/build.js:1311 #: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 -#: templates/js/translated/stock.js:593 templates/js/translated/stock.js:761 +#: templates/js/translated/stock.js:601 templates/js/translated/stock.js:769 msgid "Remove row" msgstr "" @@ -3729,7 +3819,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:48 -#: templates/js/translated/bom.js:720 templates/js/translated/build.js:1243 +#: templates/js/translated/bom.js:732 templates/js/translated/build.js:1243 msgid "Actions" msgstr "" @@ -3832,447 +3922,448 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:125 part/models.py:81 part/models.py:847 +#: part/bom.py:125 part/models.py:83 part/models.py:849 #: part/templates/part/category.html:108 part/templates/part/part_base.html:338 msgid "Default Location" msgstr "" -#: part/bom.py:126 part/templates/part/part_base.html:185 +#: part/bom.py:126 templates/email/low_stock_notification.html:17 +msgid "Total Stock" +msgstr "" + +#: part/bom.py:127 part/templates/part/part_base.html:185 msgid "Available Stock" msgstr "" -#: part/forms.py:85 +#: part/bom.py:128 part/templates/part/part_base.html:203 +#: templates/js/translated/part.js:1301 +msgid "On Order" +msgstr "" + +#: part/forms.py:84 msgid "Select part category" msgstr "" -#: part/forms.py:122 +#: part/forms.py:121 msgid "Add parameter template to same level categories" msgstr "" -#: part/forms.py:126 +#: part/forms.py:125 msgid "Add parameter template to all categories" msgstr "" -#: part/forms.py:146 +#: part/forms.py:145 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 +#: part/models.py:84 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:95 part/models.py:2526 part/templates/part/category.html:15 +#: part/models.py:97 part/models.py:2533 part/templates/part/category.html:15 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:96 part/templates/part/category.html:128 -#: templates/InvenTree/search.html:95 templates/stats.html:84 +#: part/models.py:98 part/templates/part/category.html:128 +#: templates/InvenTree/search.html:95 templates/stats.html:96 #: users/models.py:40 msgid "Part Categories" msgstr "" -#: part/models.py:358 part/templates/part/cat_link.html:3 +#: part/models.py:360 part/templates/part/cat_link.html:3 #: part/templates/part/category.html:17 part/templates/part/category.html:133 #: part/templates/part/category.html:153 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82 #: templates/InvenTree/settings/sidebar.html:37 -#: templates/js/translated/part.js:1656 templates/navbar.html:21 -#: templates/stats.html:80 templates/stats.html:89 users/models.py:41 +#: templates/js/translated/part.js:1663 templates/navbar.html:21 +#: templates/stats.html:92 templates/stats.html:101 users/models.py:41 msgid "Parts" msgstr "" -#: part/models.py:450 +#: part/models.py:452 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:500 part/models.py:512 +#: part/models.py:502 part/models.py:514 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:642 +#: part/models.py:644 msgid "Next available serial numbers are" msgstr "" -#: part/models.py:646 +#: part/models.py:648 msgid "Next available serial number is" msgstr "" -#: part/models.py:651 +#: part/models.py:653 msgid "Most recent serial number is" msgstr "" -#: part/models.py:746 +#: part/models.py:748 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:771 +#: part/models.py:773 msgid "Part name" msgstr "" -#: part/models.py:778 +#: part/models.py:780 msgid "Is Template" msgstr "" -#: part/models.py:779 +#: part/models.py:781 msgid "Is this part a template part?" msgstr "" -#: part/models.py:789 +#: part/models.py:791 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:790 +#: part/models.py:792 msgid "Variant Of" msgstr "" -#: part/models.py:796 +#: part/models.py:798 msgid "Part description" msgstr "" -#: part/models.py:801 part/templates/part/category.html:86 +#: part/models.py:803 part/templates/part/category.html:86 #: part/templates/part/part_base.html:302 msgid "Keywords" msgstr "" -#: part/models.py:802 +#: part/models.py:804 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:809 part/models.py:2276 part/models.py:2525 +#: part/models.py:811 part/models.py:2283 part/models.py:2532 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:183 -#: templates/js/translated/part.js:1261 +#: templates/InvenTree/settings/settings.html:186 +#: templates/js/translated/part.js:1268 msgid "Category" msgstr "" -#: part/models.py:810 +#: part/models.py:812 msgid "Part category" msgstr "" -#: part/models.py:815 part/templates/part/part_base.html:274 -#: templates/js/translated/part.js:612 templates/js/translated/part.js:1214 -#: templates/js/translated/stock.js:1552 +#: part/models.py:817 part/templates/part/part_base.html:274 +#: templates/js/translated/part.js:618 templates/js/translated/part.js:1221 +#: templates/js/translated/stock.js:1560 msgid "IPN" msgstr "" -#: part/models.py:816 +#: part/models.py:818 msgid "Internal Part Number" msgstr "" -#: part/models.py:822 +#: part/models.py:824 msgid "Part revision or version number" msgstr "" -#: part/models.py:823 part/templates/part/part_base.html:281 -#: report/models.py:200 templates/js/translated/part.js:616 +#: part/models.py:825 part/templates/part/part_base.html:281 +#: report/models.py:200 templates/js/translated/part.js:622 msgid "Revision" msgstr "" -#: part/models.py:845 +#: part/models.py:847 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:892 part/templates/part/part_base.html:347 +#: part/models.py:894 part/templates/part/part_base.html:347 msgid "Default Supplier" msgstr "" -#: part/models.py:893 +#: part/models.py:895 msgid "Default supplier part" msgstr "" -#: part/models.py:900 +#: part/models.py:902 msgid "Default Expiry" msgstr "" -#: part/models.py:901 +#: part/models.py:903 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:906 part/templates/part/part_base.html:196 +#: part/models.py:908 part/templates/part/part_base.html:196 msgid "Minimum Stock" msgstr "" -#: part/models.py:907 +#: part/models.py:909 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:914 +#: part/models.py:916 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:920 +#: part/models.py:922 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:926 +#: part/models.py:928 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:932 +#: part/models.py:934 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:937 +#: part/models.py:939 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:942 +#: part/models.py:944 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:946 plugin/models.py:46 -#: templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:295 -#: templates/js/translated/table_filters.js:417 -msgid "Active" -msgstr "" - -#: part/models.py:947 +#: part/models.py:949 msgid "Is this part active?" msgstr "" -#: part/models.py:952 +#: part/models.py:954 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:957 +#: part/models.py:959 msgid "Part notes - supports Markdown formatting" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "BOM checksum" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:963 +#: part/models.py:965 msgid "BOM checked by" msgstr "" -#: part/models.py:965 +#: part/models.py:967 msgid "BOM checked date" msgstr "" -#: part/models.py:969 +#: part/models.py:971 msgid "Creation User" msgstr "" -#: part/models.py:1781 +#: part/models.py:1783 msgid "Sell multiple" msgstr "" -#: part/models.py:2326 +#: part/models.py:2333 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2343 +#: part/models.py:2350 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2363 templates/js/translated/part.js:1707 -#: templates/js/translated/stock.js:1276 +#: part/models.py:2370 templates/js/translated/part.js:1714 +#: templates/js/translated/stock.js:1284 msgid "Test Name" msgstr "" -#: part/models.py:2364 +#: part/models.py:2371 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2369 +#: part/models.py:2376 msgid "Test Description" msgstr "" -#: part/models.py:2370 +#: part/models.py:2377 msgid "Enter description for this test" msgstr "" -#: part/models.py:2375 templates/js/translated/part.js:1716 +#: part/models.py:2382 templates/js/translated/part.js:1723 #: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" -#: part/models.py:2376 +#: part/models.py:2383 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2381 templates/js/translated/part.js:1724 +#: part/models.py:2388 templates/js/translated/part.js:1731 msgid "Requires Value" msgstr "" -#: part/models.py:2382 +#: part/models.py:2389 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2387 templates/js/translated/part.js:1731 +#: part/models.py:2394 templates/js/translated/part.js:1738 msgid "Requires Attachment" msgstr "" -#: part/models.py:2388 +#: part/models.py:2395 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2399 +#: part/models.py:2406 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2435 +#: part/models.py:2442 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2443 +#: part/models.py:2450 msgid "Parameter Name" msgstr "" -#: part/models.py:2450 +#: part/models.py:2457 msgid "Parameter Units" msgstr "" -#: part/models.py:2480 +#: part/models.py:2487 msgid "Parent Part" msgstr "" -#: part/models.py:2482 part/models.py:2531 part/models.py:2532 -#: templates/InvenTree/settings/settings.html:178 +#: part/models.py:2489 part/models.py:2538 part/models.py:2539 +#: templates/InvenTree/settings/settings.html:181 msgid "Parameter Template" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Data" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Parameter Value" msgstr "" -#: part/models.py:2536 templates/InvenTree/settings/settings.html:187 +#: part/models.py:2543 templates/InvenTree/settings/settings.html:190 msgid "Default Value" msgstr "" -#: part/models.py:2537 +#: part/models.py:2544 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2614 +#: part/models.py:2621 msgid "Select parent part" msgstr "" -#: part/models.py:2622 +#: part/models.py:2629 msgid "Sub part" msgstr "" -#: part/models.py:2623 +#: part/models.py:2630 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2629 +#: part/models.py:2636 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2631 templates/js/translated/bom.js:566 -#: templates/js/translated/bom.js:640 +#: part/models.py:2638 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:652 #: templates/js/translated/table_filters.js:92 msgid "Optional" msgstr "" -#: part/models.py:2631 +#: part/models.py:2638 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2634 +#: part/models.py:2641 msgid "Overage" msgstr "" -#: part/models.py:2635 +#: part/models.py:2642 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2638 +#: part/models.py:2645 msgid "BOM item reference" msgstr "" -#: part/models.py:2641 +#: part/models.py:2648 msgid "BOM item notes" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "Checksum" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "BOM line checksum" msgstr "" -#: part/models.py:2647 templates/js/translated/bom.js:657 +#: part/models.py:2654 templates/js/translated/bom.js:669 #: templates/js/translated/table_filters.js:68 #: templates/js/translated/table_filters.js:88 msgid "Inherited" msgstr "" -#: part/models.py:2648 +#: part/models.py:2655 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2653 templates/js/translated/bom.js:649 +#: part/models.py:2660 templates/js/translated/bom.js:661 msgid "Allow Variants" msgstr "" -#: part/models.py:2654 +#: part/models.py:2661 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2739 stock/models.py:355 +#: part/models.py:2746 stock/models.py:357 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2748 part/models.py:2750 +#: part/models.py:2755 part/models.py:2757 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2879 +#: part/models.py:2886 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2901 +#: part/models.py:2908 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2913 +#: part/models.py:2920 msgid "Parent BOM item" msgstr "" -#: part/models.py:2921 +#: part/models.py:2928 msgid "Substitute part" msgstr "" -#: part/models.py:2932 +#: part/models.py:2939 msgid "Part 1" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Part 2" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Select Related Part" msgstr "" -#: part/models.py:2968 +#: part/models.py:2975 msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique" msgstr "" @@ -4327,7 +4418,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:253 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:270 msgid "BOM actions" msgstr "" @@ -4499,7 +4590,7 @@ msgstr "" msgid "Import Parts" msgstr "" -#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:375 +#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:348 msgid "Duplicate Part" msgstr "" @@ -4533,145 +4624,149 @@ msgid "Showing stock for all variants of %(full_name)s" msgstr "" #: part/templates/part/detail.html:43 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/detail.html:60 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:48 +#: part/templates/part/detail.html:65 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:105 +#: part/templates/part/detail.html:122 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:142 +#: part/templates/part/detail.html:159 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:146 +#: part/templates/part/detail.html:163 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:147 +#: part/templates/part/detail.html:164 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:174 +#: part/templates/part/detail.html:191 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:45 +#: part/templates/part/detail.html:228 part/templates/part/part_sidebar.html:49 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:215 part/templates/part/detail.html:216 +#: part/templates/part/detail.html:232 part/templates/part/detail.html:233 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:253 part/templates/part/part_sidebar.html:17 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:241 +#: part/templates/part/detail.html:258 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:245 templates/js/translated/bom.js:70 +#: part/templates/part/detail.html:262 templates/js/translated/bom.js:70 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:247 +#: part/templates/part/detail.html:264 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:257 +#: part/templates/part/detail.html:274 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:259 templates/js/translated/part.js:272 +#: part/templates/part/detail.html:276 templates/js/translated/part.js:272 msgid "Copy BOM" msgstr "" -#: part/templates/part/detail.html:261 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:283 msgid "New BOM Item" msgstr "" -#: part/templates/part/detail.html:267 +#: part/templates/part/detail.html:284 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:280 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:314 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:322 +#: part/templates/part/detail.html:339 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:332 +#: part/templates/part/detail.html:349 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:360 +#: part/templates/part/detail.html:377 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:393 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:558 +#: part/templates/part/detail.html:575 msgid "Delete selected BOM items?" msgstr "" -#: part/templates/part/detail.html:559 +#: part/templates/part/detail.html:576 msgid "All selected BOM items will be deleted" msgstr "" -#: part/templates/part/detail.html:608 +#: part/templates/part/detail.html:625 msgid "Create BOM Item" msgstr "" -#: part/templates/part/detail.html:652 +#: part/templates/part/detail.html:682 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:660 +#: part/templates/part/detail.html:690 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:755 +#: part/templates/part/detail.html:785 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:812 +#: part/templates/part/detail.html:842 msgid "Edit Part Notes" msgstr "" -#: part/templates/part/detail.html:925 +#: part/templates/part/detail.html:955 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:937 +#: part/templates/part/detail.html:967 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:949 +#: part/templates/part/detail.html:979 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1038 +#: part/templates/part/detail.html:1068 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -4786,7 +4881,7 @@ msgstr "" #: templates/js/translated/company.js:508 #: templates/js/translated/company.js:765 #: templates/js/translated/model_renderers.js:175 -#: templates/js/translated/part.js:527 templates/js/translated/part.js:604 +#: templates/js/translated/part.js:533 templates/js/translated/part.js:610 msgid "Inactive" msgstr "" @@ -4805,10 +4900,6 @@ msgstr "" msgid "In Stock" msgstr "" -#: part/templates/part/part_base.html:203 templates/js/translated/part.js:1294 -msgid "On Order" -msgstr "" - #: part/templates/part/part_base.html:210 templates/InvenTree/index.html:178 msgid "Required for Build Orders" msgstr "" @@ -4821,12 +4912,12 @@ msgstr "" msgid "Allocated to Orders" msgstr "" -#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:678 +#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:690 msgid "Can Build" msgstr "" -#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1125 -#: templates/js/translated/part.js:1298 +#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1132 +#: templates/js/translated/part.js:1305 msgid "Building" msgstr "" @@ -4878,7 +4969,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:40 -#: templates/js/translated/bom.js:632 +#: templates/js/translated/bom.js:644 msgid "No supplier pricing available" msgstr "" @@ -4920,7 +5011,12 @@ msgstr "" msgid "Used In" msgstr "" -#: part/templates/part/part_sidebar.html:41 +#: part/templates/part/part_sidebar.html:31 +#: stock/templates/stock/stock_sidebar.html:8 +msgid "Allocations" +msgstr "" + +#: part/templates/part/part_sidebar.html:45 msgid "Test Templates" msgstr "" @@ -4993,7 +5089,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:155 templates/js/translated/bom.js:626 +#: part/templates/part/prices.html:155 templates/js/translated/bom.js:638 msgid "Supplier Cost" msgstr "" @@ -5015,7 +5111,7 @@ msgstr "" msgid "Internal Cost" msgstr "" -#: part/templates/part/prices.html:215 part/views.py:1690 +#: part/templates/part/prices.html:215 part/views.py:1699 msgid "Add Internal Price Break" msgstr "" @@ -5035,9 +5131,9 @@ msgstr "" msgid "Set category for the following parts" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:588 -#: templates/js/translated/part.js:491 templates/js/translated/part.js:1115 -#: templates/js/translated/part.js:1302 +#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:600 +#: templates/js/translated/part.js:497 templates/js/translated/part.js:1122 +#: templates/js/translated/part.js:1309 msgid "No Stock" msgstr "" @@ -5054,116 +5150,116 @@ msgstr "" msgid "Create a new variant of template '%(full_name)s'." msgstr "" -#: part/templatetags/inventree_extras.py:116 +#: part/templatetags/inventree_extras.py:125 msgid "Unknown database" msgstr "" -#: part/views.py:92 +#: part/views.py:93 msgid "Set Part Category" msgstr "" -#: part/views.py:142 +#: part/views.py:143 #, python-brace-format msgid "Set category for {n} parts" msgstr "" -#: part/views.py:214 +#: part/views.py:215 msgid "Match References" msgstr "" -#: part/views.py:502 +#: part/views.py:511 msgid "None" msgstr "" -#: part/views.py:561 +#: part/views.py:570 msgid "Part QR Code" msgstr "" -#: part/views.py:663 +#: part/views.py:672 msgid "Select Part Image" msgstr "" -#: part/views.py:689 +#: part/views.py:698 msgid "Updated part image" msgstr "" -#: part/views.py:692 +#: part/views.py:701 msgid "Part image not found" msgstr "" -#: part/views.py:766 +#: part/views.py:775 msgid "Match Parts" msgstr "" -#: part/views.py:1101 +#: part/views.py:1110 msgid "Export Bill of Materials" msgstr "" -#: part/views.py:1150 +#: part/views.py:1159 msgid "Confirm Part Deletion" msgstr "" -#: part/views.py:1157 +#: part/views.py:1166 msgid "Part was deleted" msgstr "" -#: part/views.py:1166 +#: part/views.py:1175 msgid "Part Pricing" msgstr "" -#: part/views.py:1315 +#: part/views.py:1324 msgid "Create Part Parameter Template" msgstr "" -#: part/views.py:1325 +#: part/views.py:1334 msgid "Edit Part Parameter Template" msgstr "" -#: part/views.py:1332 +#: part/views.py:1341 msgid "Delete Part Parameter Template" msgstr "" -#: part/views.py:1391 templates/js/translated/part.js:315 +#: part/views.py:1400 templates/js/translated/part.js:315 msgid "Edit Part Category" msgstr "" -#: part/views.py:1429 +#: part/views.py:1438 msgid "Delete Part Category" msgstr "" -#: part/views.py:1435 +#: part/views.py:1444 msgid "Part category was deleted" msgstr "" -#: part/views.py:1444 +#: part/views.py:1453 msgid "Create Category Parameter Template" msgstr "" -#: part/views.py:1545 +#: part/views.py:1554 msgid "Edit Category Parameter Template" msgstr "" -#: part/views.py:1601 +#: part/views.py:1610 msgid "Delete Category Parameter Template" msgstr "" -#: part/views.py:1623 +#: part/views.py:1632 msgid "Added new price break" msgstr "" -#: part/views.py:1699 +#: part/views.py:1708 msgid "Edit Internal Price Break" msgstr "" -#: part/views.py:1707 +#: part/views.py:1716 msgid "Delete Internal Price Break" msgstr "" -#: plugin/integration.py:124 +#: plugin/integration.py:138 msgid "No author found" msgstr "" -#: plugin/integration.py:136 +#: plugin/integration.py:152 msgid "No date found" msgstr "" @@ -5191,7 +5287,7 @@ msgstr "" msgid "Is the plugin active" msgstr "" -#: plugin/models.py:195 +#: plugin/models.py:199 msgid "Plugin" msgstr "" @@ -5357,12 +5453,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:517 stock/templates/stock/item_base.html:156 +#: stock/models.py:519 stock/templates/stock/item_base.html:156 #: templates/js/translated/build.js:293 templates/js/translated/build.js:697 #: templates/js/translated/build.js:1073 #: templates/js/translated/model_renderers.js:95 #: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 -#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:415 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:423 msgid "Serial Number" msgstr "" @@ -5371,19 +5467,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1948 +#: stock/models.py:1976 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1954 +#: stock/models.py:1982 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin.html:50 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2367 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2525 msgid "Date" msgstr "" @@ -5396,23 +5492,27 @@ msgid "Fail" msgstr "" #: report/templates/report/inventree_test_report_base.html:123 -#: stock/templates/stock/stock_sidebar.html:12 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:578 templates/js/translated/stock.js:748 -#: templates/js/translated/stock.js:2627 +#: templates/js/translated/stock.js:586 templates/js/translated/stock.js:756 +#: templates/js/translated/stock.js:2785 msgid "Serial" msgstr "" -#: stock/api.py:478 +#: stock/api.py:476 msgid "Quantity is required" msgstr "" -#: stock/forms.py:77 stock/forms.py:251 stock/models.py:574 +#: stock/api.py:483 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:576 #: stock/templates/stock/item_base.html:193 -#: templates/js/translated/stock.js:1701 +#: templates/js/translated/stock.js:1709 msgid "Expiry Date" msgstr "" @@ -5460,228 +5560,228 @@ msgstr "" msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:611 +#: stock/models.py:62 stock/models.py:613 #: stock/templates/stock/item_base.html:416 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:612 +#: stock/models.py:63 stock/models.py:614 msgid "Select Owner" msgstr "" -#: stock/models.py:336 +#: stock/models.py:338 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:372 +#: stock/models.py:374 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:382 stock/models.py:391 +#: stock/models.py:384 stock/models.py:393 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:383 +#: stock/models.py:385 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:405 +#: stock/models.py:407 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:411 +#: stock/models.py:413 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:418 +#: stock/models.py:420 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:461 +#: stock/models.py:463 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:470 +#: stock/models.py:472 msgid "Base part" msgstr "" -#: stock/models.py:478 +#: stock/models.py:480 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:484 stock/templates/stock/location.html:16 +#: stock/models.py:486 stock/templates/stock/location.html:16 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:494 +#: stock/models.py:496 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:500 stock/templates/stock/item_base.html:298 +#: stock/models.py:502 stock/templates/stock/item_base.html:298 msgid "Installed In" msgstr "" -#: stock/models.py:503 +#: stock/models.py:505 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:519 +#: stock/models.py:521 msgid "Serial number for this item" msgstr "" -#: stock/models.py:533 +#: stock/models.py:535 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:537 +#: stock/models.py:539 msgid "Stock Quantity" msgstr "" -#: stock/models.py:546 +#: stock/models.py:548 msgid "Source Build" msgstr "" -#: stock/models.py:548 +#: stock/models.py:550 msgid "Build for this stock item" msgstr "" -#: stock/models.py:559 +#: stock/models.py:561 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:562 +#: stock/models.py:564 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:568 +#: stock/models.py:570 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:575 +#: stock/models.py:577 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete on deplete" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:598 stock/templates/stock/item.html:111 +#: stock/models.py:600 stock/templates/stock/item.html:128 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:607 +#: stock/models.py:609 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1096 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1074 +#: stock/models.py:1102 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1080 +#: stock/models.py:1108 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1083 +#: stock/models.py:1111 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1086 +#: stock/models.py:1114 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1093 +#: stock/models.py:1121 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1164 +#: stock/models.py:1192 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1195 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1170 +#: stock/models.py:1198 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1173 +#: stock/models.py:1201 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1176 +#: stock/models.py:1204 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1179 +#: stock/models.py:1207 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1186 stock/serializers.py:774 +#: stock/models.py:1214 stock/serializers.py:775 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1190 +#: stock/models.py:1218 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1222 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1198 +#: stock/models.py:1226 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1369 +#: stock/models.py:1397 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1868 +#: stock/models.py:1896 msgid "Entry notes" msgstr "" -#: stock/models.py:1925 +#: stock/models.py:1953 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1931 +#: stock/models.py:1959 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1949 +#: stock/models.py:1977 msgid "Test name" msgstr "" -#: stock/models.py:1955 templates/js/translated/table_filters.js:271 +#: stock/models.py:1983 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1961 +#: stock/models.py:1989 msgid "Test output value" msgstr "" -#: stock/models.py:1968 +#: stock/models.py:1996 msgid "Test result attachment" msgstr "" -#: stock/models.py:1974 +#: stock/models.py:2002 msgid "Test notes" msgstr "" @@ -5706,7 +5806,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:326 stock/serializers.py:731 stock/serializers.py:972 +#: stock/serializers.py:326 stock/serializers.py:732 stock/serializers.py:973 msgid "Destination stock location" msgstr "" @@ -5718,63 +5818,63 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:589 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:592 +#: stock/serializers.py:593 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:597 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:626 +#: stock/serializers.py:627 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:632 +#: stock/serializers.py:633 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:640 +#: stock/serializers.py:641 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:650 stock/serializers.py:880 +#: stock/serializers.py:651 stock/serializers.py:881 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:738 +#: stock/serializers.py:739 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:743 +#: stock/serializers.py:744 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:744 +#: stock/serializers.py:745 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:749 +#: stock/serializers.py:750 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:750 +#: stock/serializers.py:751 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:760 +#: stock/serializers.py:761 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:842 +#: stock/serializers.py:843 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:870 +#: stock/serializers.py:871 msgid "Stock transaction notes" msgstr "" @@ -5787,47 +5887,51 @@ msgid "New Entry" msgstr "" #: stock/templates/stock/item.html:48 -msgid "Child Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:55 -msgid "This stock item does not have any child items" +msgid "Stock Item Allocations" msgstr "" #: stock/templates/stock/item.html:64 -#: stock/templates/stock/stock_sidebar.html:8 -msgid "Test Data" -msgstr "" - -#: stock/templates/stock/item.html:68 stock/templates/stock/item_base.html:57 -msgid "Test Report" +msgid "Child Stock Items" msgstr "" #: stock/templates/stock/item.html:72 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item.html:81 +#: stock/templates/stock/stock_sidebar.html:12 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:57 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item.html:89 msgid "Delete Test Data" msgstr "" -#: stock/templates/stock/item.html:76 +#: stock/templates/stock/item.html:93 msgid "Add Test Data" msgstr "" -#: stock/templates/stock/item.html:133 +#: stock/templates/stock/item.html:150 msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:482 +#: stock/templates/stock/item.html:154 stock/views.py:482 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:279 stock/templates/stock/item.html:304 +#: stock/templates/stock/item.html:309 stock/templates/stock/item.html:334 msgid "Add Test Result" msgstr "" -#: stock/templates/stock/item.html:324 +#: stock/templates/stock/item.html:354 msgid "Edit Test Result" msgstr "" -#: stock/templates/stock/item.html:338 +#: stock/templates/stock/item.html:368 msgid "Delete Test Result" msgstr "" @@ -5952,7 +6056,7 @@ msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:206 -#: templates/js/translated/stock.js:1714 +#: templates/js/translated/stock.js:1722 msgid "Last Updated" msgstr "" @@ -6111,7 +6215,7 @@ msgid "Sublocations" msgstr "" #: stock/templates/stock/location.html:146 templates/InvenTree/search.html:164 -#: templates/stats.html:97 users/models.py:42 +#: templates/stats.html:109 users/models.py:42 msgid "Stock Locations" msgstr "" @@ -6135,7 +6239,7 @@ msgstr "" msgid "Stock Tracking" msgstr "" -#: stock/templates/stock/stock_sidebar.html:16 +#: stock/templates/stock/stock_sidebar.html:20 msgid "Child Items" msgstr "" @@ -6164,7 +6268,7 @@ msgstr "" msgid "Are you sure you want to delete this stock tracking entry?" msgstr "" -#: stock/views.py:162 +#: stock/views.py:162 templates/js/translated/stock.js:139 msgid "Edit Stock Location" msgstr "" @@ -6204,7 +6308,7 @@ msgstr "" msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:727 templates/js/translated/stock.js:1066 +#: stock/views.py:727 templates/js/translated/stock.js:1074 msgid "Confirm stock adjustment" msgstr "" @@ -6212,7 +6316,7 @@ msgstr "" msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:324 +#: stock/views.py:760 templates/js/translated/stock.js:332 msgid "Edit Stock Item" msgstr "" @@ -6224,7 +6328,7 @@ msgstr "" msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1153 templates/js/translated/stock.js:304 +#: stock/views.py:1153 templates/js/translated/stock.js:312 msgid "Duplicate Stock Item" msgstr "" @@ -6268,6 +6372,18 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/500.html:5 templates/500.html:11 +msgid "Internal Server Error" +msgstr "" + +#: templates/500.html:14 +msgid "The InvenTree server raised an internal error" +msgstr "" + +#: templates/500.html:15 +msgid "Refer to the error log in the admin interface for further details" +msgstr "" + #: templates/503.html:10 templates/503.html:35 msgid "Site is in Maintenance" msgstr "" @@ -6390,7 +6506,7 @@ msgid "Signup" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:113 msgid "Settings" msgstr "" @@ -6431,43 +6547,43 @@ msgstr "" msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:32 +#: templates/InvenTree/settings/plugin.html:33 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:37 +#: templates/InvenTree/settings/plugin.html:38 #: templates/js/translated/plugin.js:15 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: templates/InvenTree/settings/plugin.html:47 templates/navbar.html:111 #: users/models.py:39 msgid "Admin" msgstr "" -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:49 #: templates/InvenTree/settings/plugin_settings.html:28 msgid "Author" msgstr "" -#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin_settings.html:43 msgid "Version" msgstr "" -#: templates/InvenTree/settings/plugin.html:91 +#: templates/InvenTree/settings/plugin.html:92 msgid "Inactive plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:114 +#: templates/InvenTree/settings/plugin.html:115 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:123 +#: templates/InvenTree/settings/plugin.html:124 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:125 +#: templates/InvenTree/settings/plugin.html:126 msgid "Message" msgstr "" @@ -6555,37 +6671,37 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:75 +#: templates/InvenTree/settings/settings.html:78 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:77 +#: templates/InvenTree/settings/settings.html:80 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:79 +#: templates/InvenTree/settings/settings.html:82 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:168 +#: templates/InvenTree/settings/settings.html:171 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:190 -#: templates/InvenTree/settings/settings.html:289 +#: templates/InvenTree/settings/settings.html:193 +#: templates/InvenTree/settings/settings.html:292 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:191 -#: templates/InvenTree/settings/settings.html:290 +#: templates/InvenTree/settings/settings.html:194 +#: templates/InvenTree/settings/settings.html:293 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:272 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:273 +#: templates/InvenTree/settings/settings.html:276 msgid "ID" msgstr "" @@ -6763,124 +6879,105 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:219 +#: templates/InvenTree/settings/user.html:220 +msgid "Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:226 +msgid "Log out active sessions (except this one)" +msgstr "" + +#: templates/InvenTree/settings/user.html:227 +msgid "Log Out Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:236 +msgid "unknown on unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:237 +msgid "unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:241 +msgid "IP Address" +msgstr "" + +#: templates/InvenTree/settings/user.html:242 +msgid "Device" +msgstr "" + +#: templates/InvenTree/settings/user.html:243 +msgid "Last Activity" +msgstr "" + +#: templates/InvenTree/settings/user.html:252 +#, python-format +msgid "%(time)s ago (this session)" +msgstr "" + +#: templates/InvenTree/settings/user.html:254 +#, python-format +msgid "%(time)s ago" +msgstr "" + +#: templates/InvenTree/settings/user.html:266 +msgid "Do you really want to remove the selected email address?" +msgstr "" + #: templates/InvenTree/settings/user_display.html:25 msgid "Theme Settings" msgstr "" -#: templates/InvenTree/settings/user.html:227 #: templates/InvenTree/settings/user_display.html:35 msgid "Select theme" msgstr "" -#: templates/InvenTree/settings/user.html:237 #: templates/InvenTree/settings/user_display.html:46 msgid "Set Theme" msgstr "" -#: templates/InvenTree/settings/user.html:246 #: templates/InvenTree/settings/user_display.html:54 msgid "Language Settings" msgstr "" -#: templates/InvenTree/settings/user.html:254 #: templates/InvenTree/settings/user_display.html:63 msgid "Select language" msgstr "" -#: templates/InvenTree/settings/user.html:270 #: templates/InvenTree/settings/user_display.html:79 #, python-format msgid "%(lang_translated)s%% translated" msgstr "" -#: templates/InvenTree/settings/user.html:272 #: templates/InvenTree/settings/user_display.html:81 msgid "No translations available" msgstr "" -#: templates/InvenTree/settings/user.html:279 #: templates/InvenTree/settings/user_display.html:88 msgid "Set Language" msgstr "" -#: templates/InvenTree/settings/user.html:281 #: templates/InvenTree/settings/user_display.html:91 msgid "Some languages are not complete" msgstr "" -#: templates/InvenTree/settings/user.html:283 #: templates/InvenTree/settings/user_display.html:93 msgid "Show only sufficent" msgstr "" -#: templates/InvenTree/settings/user.html:285 +#: templates/InvenTree/settings/user_display.html:95 +msgid "and hidden." +msgstr "" + #: templates/InvenTree/settings/user_display.html:95 msgid "Show them too" msgstr "" -#: templates/InvenTree/settings/user.html:292 #: templates/InvenTree/settings/user_display.html:101 msgid "Help the translation efforts!" msgstr "" -#: templates/InvenTree/settings/user.html:293 -#, python-format -msgid "Native language translation of the\n" -" InvenTree web application is community contributed via crowdin. Contributions are\n" -" welcomed and encouraged." -msgstr "" - -#: templates/InvenTree/settings/user.html:302 -msgid "Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:308 -msgid "Log out active sessions (except this one)" -msgstr "" - -#: templates/InvenTree/settings/user.html:309 -msgid "Log Out Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:318 -msgid "unknown on unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:319 -msgid "unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:323 -msgid "IP Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:324 -msgid "Device" -msgstr "" - -#: templates/InvenTree/settings/user.html:325 -msgid "Last Activity" -msgstr "" - -#: templates/InvenTree/settings/user.html:334 -#, python-format -msgid "%(time)s ago (this session)" -msgstr "" - -#: templates/InvenTree/settings/user.html:336 -#, python-format -msgid "%(time)s ago" -msgstr "" - -#: templates/InvenTree/settings/user.html:348 -msgid "Do you really want to remove the selected email address?" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:95 -msgid "and hidden." -msgstr "" - #: templates/InvenTree/settings/user_display.html:102 #, python-format msgid "Native language translation of the InvenTree web application is community contributed via crowdin. Contributions are welcomed and encouraged." @@ -6899,9 +6996,9 @@ msgid "InvenTree Version Information" msgstr "" #: templates/about.html:11 templates/about.html:105 -#: templates/js/translated/bom.js:395 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:573 templates/js/translated/modals.js:667 -#: templates/js/translated/modals.js:970 templates/modals.html:15 +#: templates/js/translated/bom.js:407 templates/js/translated/modals.js:53 +#: templates/js/translated/modals.js:584 templates/js/translated/modals.js:678 +#: templates/js/translated/modals.js:983 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -7178,13 +7275,13 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1103 +#: templates/js/translated/bom.js:1117 msgid "Required Quantity" msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:579 templates/js/translated/build.js:1189 +#: templates/js/translated/bom.js:591 templates/js/translated/build.js:1189 #: templates/js/translated/build.js:1810 #: templates/js/translated/table_filters.js:178 msgid "Available" @@ -7208,10 +7305,6 @@ msgstr "" msgid "Click on the following link to view this part" msgstr "" -#: templates/email/low_stock_notification.html:17 -msgid "Total Stock" -msgstr "" - #: templates/email/low_stock_notification.html:19 msgid "Minimum Quantity" msgstr "" @@ -7232,11 +7325,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1040 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1053 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1041 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1054 msgid "No response from the InvenTree server" msgstr "" @@ -7248,27 +7341,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1063 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1051 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1064 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1068 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1056 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1069 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1073 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1061 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1074 msgid "The requested resource could not be located on the server" msgstr "" @@ -7280,11 +7373,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1065 +#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1078 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1066 +#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1079 msgid "Connection timeout while requesting data from server" msgstr "" @@ -7353,7 +7446,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "Invalid server response" msgstr "" @@ -7381,7 +7474,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1018 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1026 msgid "Remove stock item" msgstr "" @@ -7428,12 +7521,12 @@ msgid "Download BOM Template" msgstr "" #: templates/js/translated/bom.js:39 templates/js/translated/bom.js:73 -#: templates/js/translated/order.js:369 templates/js/translated/stock.js:510 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:518 msgid "Format" msgstr "" #: templates/js/translated/bom.js:40 templates/js/translated/bom.js:74 -#: templates/js/translated/order.js:370 templates/js/translated/stock.js:511 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:519 msgid "Select file format" msgstr "" @@ -7489,87 +7582,87 @@ msgstr "" msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:340 -msgid "Select and add a new variant item using the input below" +#: templates/js/translated/bom.js:352 +msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:351 +#: templates/js/translated/bom.js:363 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:357 +#: templates/js/translated/bom.js:369 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:396 +#: templates/js/translated/bom.js:408 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:397 +#: templates/js/translated/bom.js:409 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:516 +#: templates/js/translated/bom.js:528 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:520 templates/js/translated/build.js:1171 +#: templates/js/translated/bom.js:532 templates/js/translated/build.js:1171 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:525 +#: templates/js/translated/bom.js:537 msgid "Open subassembly" msgstr "" -#: templates/js/translated/bom.js:597 +#: templates/js/translated/bom.js:609 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:612 +#: templates/js/translated/bom.js:624 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:619 +#: templates/js/translated/bom.js:631 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:668 templates/js/translated/bom.js:757 +#: templates/js/translated/bom.js:680 templates/js/translated/bom.js:769 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:728 +#: templates/js/translated/bom.js:740 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:742 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:732 +#: templates/js/translated/bom.js:744 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:734 templates/js/translated/bom.js:908 +#: templates/js/translated/bom.js:746 templates/js/translated/bom.js:920 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:891 +#: templates/js/translated/bom.js:748 templates/js/translated/bom.js:903 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:830 templates/js/translated/build.js:915 +#: templates/js/translated/bom.js:842 templates/js/translated/build.js:915 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:886 +#: templates/js/translated/bom.js:898 msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:1086 templates/js/translated/build.js:1155 +#: templates/js/translated/bom.js:1100 templates/js/translated/build.js:1155 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1108 +#: templates/js/translated/bom.js:1122 msgid "Inherited from parent BOM" msgstr "" @@ -7725,9 +7818,9 @@ msgstr "" msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1206 -#: templates/js/translated/part.js:1617 templates/js/translated/stock.js:1512 -#: templates/js/translated/stock.js:2321 +#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:1624 templates/js/translated/stock.js:1520 +#: templates/js/translated/stock.js:2479 msgid "Select" msgstr "" @@ -7735,7 +7828,7 @@ msgstr "" msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2540 +#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2698 msgid "No user information" msgstr "" @@ -7808,34 +7901,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:500 -#: templates/js/translated/company.js:757 templates/js/translated/part.js:511 -#: templates/js/translated/part.js:596 +#: templates/js/translated/company.js:757 templates/js/translated/part.js:517 +#: templates/js/translated/part.js:602 msgid "Template part" msgstr "" #: templates/js/translated/company.js:504 -#: templates/js/translated/company.js:761 templates/js/translated/part.js:515 -#: templates/js/translated/part.js:600 +#: templates/js/translated/company.js:761 templates/js/translated/part.js:521 +#: templates/js/translated/part.js:606 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:631 templates/js/translated/part.js:690 +#: templates/js/translated/company.js:631 templates/js/translated/part.js:696 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:668 templates/js/translated/part.js:732 +#: templates/js/translated/company.js:668 templates/js/translated/part.js:738 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:669 templates/js/translated/part.js:733 +#: templates/js/translated/company.js:669 templates/js/translated/part.js:739 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:688 templates/js/translated/part.js:750 +#: templates/js/translated/company.js:688 templates/js/translated/part.js:756 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:699 templates/js/translated/part.js:762 +#: templates/js/translated/company.js:699 templates/js/translated/part.js:768 msgid "Delete Parameter" msgstr "" @@ -7844,12 +7937,12 @@ msgid "No supplier parts found" msgstr "" #: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:420 +#: templates/js/translated/filters.js:429 msgid "true" msgstr "" #: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:421 +#: templates/js/translated/filters.js:430 msgid "false" msgstr "" @@ -7869,7 +7962,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:329 +#: templates/js/translated/filters.js:338 msgid "Create filter" msgstr "" @@ -7898,20 +7991,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1080 templates/modals.html:19 +#: templates/js/translated/forms.js:1082 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1471 +#: templates/js/translated/forms.js:1487 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1675 +#: templates/js/translated/forms.js:1691 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1895 +#: templates/js/translated/forms.js:1930 msgid "Clear input" msgstr "" @@ -7924,7 +8017,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1042 +#: templates/js/translated/stock.js:1050 msgid "Select Stock Items" msgstr "" @@ -7974,12 +8067,12 @@ msgid "Select Label Template" msgstr "" #: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 -#: templates/js/translated/modals.js:599 +#: templates/js/translated/modals.js:610 msgid "Cancel" msgstr "" #: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:666 templates/js/translated/modals.js:969 +#: templates/js/translated/modals.js:677 templates/js/translated/modals.js:982 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" @@ -7988,47 +8081,47 @@ msgstr "" msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:381 +#: templates/js/translated/modals.js:392 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:540 +#: templates/js/translated/modals.js:551 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:598 +#: templates/js/translated/modals.js:609 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:655 +#: templates/js/translated/modals.js:666 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:933 +#: templates/js/translated/modals.js:946 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1045 +#: templates/js/translated/modals.js:1058 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1046 +#: templates/js/translated/modals.js:1059 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1069 +#: templates/js/translated/modals.js:1082 msgid "Error requesting form data" msgstr "" @@ -8052,23 +8145,24 @@ msgstr "" msgid "Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:236 +#: templates/js/translated/model_renderers.js:249 +#: templates/js/translated/model_renderers.js:270 msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:253 +#: templates/js/translated/model_renderers.js:287 msgid "Shipment ID" msgstr "" -#: templates/js/translated/model_renderers.js:273 +#: templates/js/translated/model_renderers.js:307 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:310 +#: templates/js/translated/model_renderers.js:344 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:339 +#: templates/js/translated/model_renderers.js:373 msgid "Supplier Part ID" msgstr "" @@ -8116,7 +8210,7 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2123 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2131 msgid "Stock Status" msgstr "" @@ -8140,7 +8234,7 @@ msgstr "" msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:790 templates/js/translated/part.js:803 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:809 msgid "No purchase orders found" msgstr "" @@ -8165,7 +8259,7 @@ msgid "Total" msgstr "" #: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 -#: templates/js/translated/part.js:1834 templates/js/translated/part.js:2045 +#: templates/js/translated/part.js:1841 templates/js/translated/part.js:2052 msgid "Unit Price" msgstr "" @@ -8181,7 +8275,7 @@ msgstr "" msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1166 templates/js/translated/part.js:935 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:942 msgid "Receive line item" msgstr "" @@ -8250,7 +8344,7 @@ msgid "Delete Stock Allocation" msgstr "" #: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 -#: templates/js/translated/stock.js:1428 +#: templates/js/translated/stock.js:1436 msgid "Shipped to customer" msgstr "" @@ -8378,144 +8472,148 @@ msgstr "" msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:412 +#: templates/js/translated/part.js:351 +msgid "Create Part Variant" +msgstr "" + +#: templates/js/translated/part.js:418 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:414 +#: templates/js/translated/part.js:420 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:419 +#: templates/js/translated/part.js:425 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:421 +#: templates/js/translated/part.js:427 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:444 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:448 +#: templates/js/translated/part.js:454 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:451 +#: templates/js/translated/part.js:457 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:481 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:503 templates/js/translated/part.js:588 +#: templates/js/translated/part.js:509 templates/js/translated/part.js:594 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:507 templates/js/translated/part.js:592 +#: templates/js/translated/part.js:513 templates/js/translated/part.js:598 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:519 +#: templates/js/translated/part.js:525 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:523 +#: templates/js/translated/part.js:529 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:638 +#: templates/js/translated/part.js:644 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1005 +#: templates/js/translated/part.js:1012 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1029 +#: templates/js/translated/part.js:1036 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1096 templates/js/translated/part.js:1356 +#: templates/js/translated/part.js:1103 templates/js/translated/part.js:1363 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1266 +#: templates/js/translated/part.js:1273 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1289 +#: templates/js/translated/part.js:1296 #: templates/js/translated/table_filters.js:430 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:1380 templates/js/translated/part.js:1552 -#: templates/js/translated/stock.js:2282 +#: templates/js/translated/part.js:1387 templates/js/translated/part.js:1559 +#: templates/js/translated/stock.js:2440 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1396 +#: templates/js/translated/part.js:1403 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1571 templates/js/translated/stock.js:2301 +#: templates/js/translated/part.js:1578 templates/js/translated/stock.js:2459 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:1635 +#: templates/js/translated/part.js:1642 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1649 templates/js/translated/stock.js:2345 +#: templates/js/translated/part.js:1656 templates/js/translated/stock.js:2503 msgid "Path" msgstr "" -#: templates/js/translated/part.js:1693 +#: templates/js/translated/part.js:1700 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1744 templates/js/translated/stock.js:1234 +#: templates/js/translated/part.js:1751 templates/js/translated/stock.js:1242 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1745 templates/js/translated/stock.js:1235 +#: templates/js/translated/part.js:1752 templates/js/translated/stock.js:1243 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:1751 +#: templates/js/translated/part.js:1758 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:1773 +#: templates/js/translated/part.js:1780 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:1787 +#: templates/js/translated/part.js:1794 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:1812 +#: templates/js/translated/part.js:1819 #, python-brace-format msgid "No ${human_name} information found" msgstr "" -#: templates/js/translated/part.js:1867 +#: templates/js/translated/part.js:1874 #, python-brace-format msgid "Edit ${human_name}" msgstr "" -#: templates/js/translated/part.js:1868 +#: templates/js/translated/part.js:1875 #, python-brace-format msgid "Delete ${human_name}" msgstr "" -#: templates/js/translated/part.js:1969 +#: templates/js/translated/part.js:1976 msgid "Single Price" msgstr "" -#: templates/js/translated/part.js:1988 +#: templates/js/translated/part.js:1995 msgid "Single Price Difference" msgstr "" @@ -8589,340 +8687,344 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:74 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:181 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:93 templates/js/translated/stock.js:175 +#: templates/js/translated/stock.js:94 templates/js/translated/stock.js:183 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:101 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:110 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:146 +#: templates/js/translated/stock.js:154 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:186 +#: templates/js/translated/stock.js:194 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:225 +#: templates/js/translated/stock.js:233 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:231 +#: templates/js/translated/stock.js:239 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:382 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:387 +#: templates/js/translated/stock.js:395 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:420 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:416 templates/js/translated/stock.js:417 +#: templates/js/translated/stock.js:424 templates/js/translated/stock.js:425 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:433 +#: templates/js/translated/stock.js:441 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:453 +#: templates/js/translated/stock.js:461 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:462 +#: templates/js/translated/stock.js:470 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:515 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:526 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:519 +#: templates/js/translated/stock.js:527 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:628 +#: templates/js/translated/stock.js:636 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:629 +#: templates/js/translated/stock.js:637 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:714 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:715 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:709 +#: templates/js/translated/stock.js:717 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:710 +#: templates/js/translated/stock.js:718 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:796 +#: templates/js/translated/stock.js:804 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:797 +#: templates/js/translated/stock.js:805 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:892 +#: templates/js/translated/stock.js:900 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:893 +#: templates/js/translated/stock.js:901 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:899 +#: templates/js/translated/stock.js:907 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:900 +#: templates/js/translated/stock.js:908 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:904 +#: templates/js/translated/stock.js:912 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:905 +#: templates/js/translated/stock.js:913 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:909 +#: templates/js/translated/stock.js:917 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:910 users/models.py:206 +#: templates/js/translated/stock.js:918 users/models.py:208 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:914 templates/stock_table.html:58 +#: templates/js/translated/stock.js:922 templates/stock_table.html:58 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1051 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1201 +#: templates/js/translated/stock.js:1209 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1203 +#: templates/js/translated/stock.js:1211 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1208 +#: templates/js/translated/stock.js:1216 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1230 +#: templates/js/translated/stock.js:1238 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1256 +#: templates/js/translated/stock.js:1264 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1313 +#: templates/js/translated/stock.js:1321 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1428 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1424 +#: templates/js/translated/stock.js:1432 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1432 +#: templates/js/translated/stock.js:1440 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1438 +#: templates/js/translated/stock.js:1446 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1604 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1601 +#: templates/js/translated/stock.js:1609 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1604 +#: templates/js/translated/stock.js:1612 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1608 +#: templates/js/translated/stock.js:1616 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1610 +#: templates/js/translated/stock.js:1618 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1616 +#: templates/js/translated/stock.js:1624 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1618 +#: templates/js/translated/stock.js:1626 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1620 +#: templates/js/translated/stock.js:1628 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1633 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1632 +#: templates/js/translated/stock.js:1640 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1634 +#: templates/js/translated/stock.js:1642 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1636 +#: templates/js/translated/stock.js:1644 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1648 #: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1690 +#: templates/js/translated/stock.js:1698 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1763 +#: templates/js/translated/stock.js:1771 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1809 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1822 templates/js/translated/stock.js:1870 +#: templates/js/translated/stock.js:1830 templates/js/translated/stock.js:1878 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1910 +#: templates/js/translated/stock.js:1918 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1937 +#: templates/js/translated/stock.js:1945 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1939 +#: templates/js/translated/stock.js:1947 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:2138 +#: templates/js/translated/stock.js:2146 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2152 +#: templates/js/translated/stock.js:2160 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2153 +#: templates/js/translated/stock.js:2161 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2377 +#: templates/js/translated/stock.js:2340 +msgid "Allocated Quantity" +msgstr "" + +#: templates/js/translated/stock.js:2535 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2399 +#: templates/js/translated/stock.js:2557 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2424 +#: templates/js/translated/stock.js:2582 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2443 +#: templates/js/translated/stock.js:2601 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2462 +#: templates/js/translated/stock.js:2620 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2480 +#: templates/js/translated/stock.js:2638 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2503 +#: templates/js/translated/stock.js:2661 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2511 +#: templates/js/translated/stock.js:2669 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2552 +#: templates/js/translated/stock.js:2710 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2553 +#: templates/js/translated/stock.js:2711 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2604 +#: templates/js/translated/stock.js:2762 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2655 +#: templates/js/translated/stock.js:2813 msgid "Uninstall Stock Item" msgstr "" @@ -9194,11 +9296,11 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:113 +#: templates/navbar.html:114 msgid "Logout" msgstr "" -#: templates/navbar.html:115 +#: templates/navbar.html:116 msgid "Login" msgstr "" @@ -9246,31 +9348,43 @@ msgstr "" msgid "Server is deployed using docker" msgstr "" -#: templates/stats.html:40 -msgid "Server status" +#: templates/stats.html:39 +msgid "Plugin Support" msgstr "" #: templates/stats.html:43 -msgid "Healthy" +msgid "Plugin support enabled" msgstr "" #: templates/stats.html:45 -msgid "Issues detected" +msgid "Plugin support disabled" msgstr "" #: templates/stats.html:52 -msgid "Background Worker" +msgid "Server status" msgstr "" #: templates/stats.html:55 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:57 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:64 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:67 msgid "Background worker not running" msgstr "" -#: templates/stats.html:63 +#: templates/stats.html:75 msgid "Email Settings" msgstr "" -#: templates/stats.html:66 +#: templates/stats.html:78 msgid "Email settings not configured" msgstr "" @@ -9366,35 +9480,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:193 +#: users/models.py:195 msgid "Permission set" msgstr "" -#: users/models.py:201 +#: users/models.py:203 msgid "Group" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "View" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to view items" msgstr "" -#: users/models.py:206 +#: users/models.py:208 msgid "Permission to add items" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Change" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Permissions to edit items" msgstr "" -#: users/models.py:210 +#: users/models.py:212 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/ru/LC_MESSAGES/django.po b/InvenTree/locale/ru/LC_MESSAGES/django.po index 4a369c47ae..0f1af70cb7 100644 --- a/InvenTree/locale/ru/LC_MESSAGES/django.po +++ b/InvenTree/locale/ru/LC_MESSAGES/django.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-10 03:54+0000\n" -"PO-Revision-Date: 2022-01-10 03:58\n" +"POT-Creation-Date: 2022-01-29 00:17+0000\n" +"PO-Revision-Date: 2022-01-29 01:11\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -18,15 +18,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 138\n" -#: InvenTree/api.py:64 +#: InvenTree/api.py:55 msgid "API endpoint not found" msgstr "Конечная точка API не обнаружена" -#: InvenTree/api.py:110 +#: InvenTree/api.py:101 msgid "No action specified" msgstr "Действие не указано" -#: InvenTree/api.py:124 +#: InvenTree/api.py:116 msgid "No matching action found" msgstr "Соответствующее действие не найдено" @@ -80,41 +80,41 @@ msgstr "Подтверждение адреса электронной почт msgid "You must type the same email each time." msgstr "Вы должны вводить один и тот же адрес электронной почты." -#: InvenTree/helpers.py:437 +#: InvenTree/helpers.py:439 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "Дублировать серийный номер: {n}" -#: InvenTree/helpers.py:444 order/models.py:279 order/models.py:420 +#: InvenTree/helpers.py:446 order/models.py:282 order/models.py:425 #: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "недопустимое количество" -#: InvenTree/helpers.py:447 +#: InvenTree/helpers.py:449 msgid "Empty serial number string" msgstr "Пустая строка серийного номера" -#: InvenTree/helpers.py:469 InvenTree/helpers.py:472 InvenTree/helpers.py:475 -#: InvenTree/helpers.py:500 +#: InvenTree/helpers.py:471 InvenTree/helpers.py:474 InvenTree/helpers.py:477 +#: InvenTree/helpers.py:502 #, python-brace-format msgid "Invalid group: {g}" msgstr "Некорректный идентификатор группы {g}" -#: InvenTree/helpers.py:510 +#: InvenTree/helpers.py:512 #, python-brace-format msgid "Invalid group {group}" -msgstr "" +msgstr "Недопустимая группа {group}" -#: InvenTree/helpers.py:516 +#: InvenTree/helpers.py:518 #, python-brace-format msgid "Invalid/no group {group}" -msgstr "" +msgstr "Недопустимая/несуществующая группа {group}" -#: InvenTree/helpers.py:522 +#: InvenTree/helpers.py:524 msgid "No serial numbers found" msgstr "Серийных номеров не найдено" -#: InvenTree/helpers.py:526 +#: InvenTree/helpers.py:528 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "Число уникальных серийных номеров ({s}) должно соответствовать количеству ({q})" @@ -127,7 +127,7 @@ msgstr "Файл не найден" msgid "Missing external link" msgstr "Отсутствует внешняя ссылка" -#: InvenTree/models.py:132 stock/models.py:1967 +#: InvenTree/models.py:132 stock/models.py:1995 #: templates/js/translated/attachment.js:119 msgid "Attachment" msgstr "Вложения" @@ -137,15 +137,15 @@ msgid "Select file to attach" msgstr "Выберите файл для вложения" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:124 part/models.py:828 +#: company/models.py:564 order/models.py:127 part/models.py:830 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:540 -#: templates/js/translated/company.js:829 templates/js/translated/part.js:1317 +#: templates/js/translated/company.js:829 templates/js/translated/part.js:1324 msgid "Link" msgstr "Ссылка" -#: InvenTree/models.py:140 build/models.py:330 part/models.py:829 -#: stock/models.py:527 +#: InvenTree/models.py:140 build/models.py:332 part/models.py:831 +#: stock/models.py:529 msgid "Link to external URL" msgstr "Ссылка на внешний URL" @@ -157,10 +157,11 @@ msgstr "Комментарий" msgid "File comment" msgstr "Комментарий к файлу" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 -#: common/models.py:1214 part/models.py:2258 part/models.py:2278 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1223 +#: common/models.py:1224 common/models.py:1452 common/models.py:1453 +#: part/models.py:2265 part/models.py:2285 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2534 +#: templates/js/translated/stock.js:2692 msgid "User" msgstr "Пользователь" @@ -197,42 +198,42 @@ msgstr "Ошибка переименования файла" msgid "Invalid choice" msgstr "Неверный выбор" -#: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 -#: label/models.py:112 part/models.py:772 part/models.py:2442 -#: plugin/models.py:40 report/models.py:181 +#: InvenTree/models.py:277 InvenTree/models.py:278 common/models.py:1438 +#: company/models.py:415 label/models.py:112 part/models.py:774 +#: part/models.py:2449 plugin/models.py:40 report/models.py:181 #: templates/InvenTree/settings/mixins/urls.html:13 -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:125 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:279 -#: templates/js/translated/company.js:641 templates/js/translated/part.js:561 -#: templates/js/translated/part.js:700 templates/js/translated/part.js:1624 -#: templates/js/translated/stock.js:2327 +#: templates/InvenTree/settings/settings.html:282 +#: templates/js/translated/company.js:641 templates/js/translated/part.js:567 +#: templates/js/translated/part.js:706 templates/js/translated/part.js:1631 +#: templates/js/translated/stock.js:2485 msgid "Name" msgstr "Название" -#: InvenTree/models.py:284 build/models.py:207 +#: InvenTree/models.py:284 build/models.py:209 #: build/templates/build/detail.html:25 company/models.py:354 #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:122 part/models.py:795 part/templates/part/category.html:74 +#: order/models.py:125 part/models.py:797 part/templates/part/category.html:74 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 #: stock/templates/stock/location.html:93 #: templates/InvenTree/settings/plugin_settings.html:33 -#: templates/js/translated/bom.js:327 templates/js/translated/bom.js:540 +#: templates/js/translated/bom.js:339 templates/js/translated/bom.js:552 #: templates/js/translated/build.js:1682 templates/js/translated/company.js:345 #: templates/js/translated/company.js:551 #: templates/js/translated/company.js:840 templates/js/translated/order.js:836 #: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 -#: templates/js/translated/part.js:620 templates/js/translated/part.js:992 -#: templates/js/translated/part.js:1077 templates/js/translated/part.js:1247 -#: templates/js/translated/part.js:1643 templates/js/translated/part.js:1712 -#: templates/js/translated/stock.js:1569 templates/js/translated/stock.js:2339 -#: templates/js/translated/stock.js:2384 +#: templates/js/translated/part.js:626 templates/js/translated/part.js:999 +#: templates/js/translated/part.js:1084 templates/js/translated/part.js:1254 +#: templates/js/translated/part.js:1650 templates/js/translated/part.js:1719 +#: templates/js/translated/stock.js:1577 templates/js/translated/stock.js:2314 +#: templates/js/translated/stock.js:2497 templates/js/translated/stock.js:2542 msgid "Description" msgstr "Описание" @@ -244,7 +245,7 @@ msgstr "Описание (необязательно)" msgid "parent" msgstr "родитель" -#: InvenTree/serializers.py:65 part/models.py:2727 +#: InvenTree/serializers.py:65 part/models.py:2734 msgid "Must be a valid number" msgstr "Должно быть действительным номером" @@ -252,83 +253,83 @@ msgstr "Должно быть действительным номером" msgid "Filename" msgstr "Имя файла" -#: InvenTree/settings.py:663 +#: InvenTree/settings.py:661 msgid "German" msgstr "Немецкий" -#: InvenTree/settings.py:664 +#: InvenTree/settings.py:662 msgid "Greek" msgstr "Греческий" -#: InvenTree/settings.py:665 +#: InvenTree/settings.py:663 msgid "English" msgstr "Английский" -#: InvenTree/settings.py:666 +#: InvenTree/settings.py:664 msgid "Spanish" msgstr "Испанский" -#: InvenTree/settings.py:667 +#: InvenTree/settings.py:665 msgid "Spanish (Mexican)" msgstr "Испанский (Мексика)" -#: InvenTree/settings.py:668 +#: InvenTree/settings.py:666 msgid "French" msgstr "Французский" -#: InvenTree/settings.py:669 +#: InvenTree/settings.py:667 msgid "Hebrew" msgstr "Иврит" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:668 msgid "Italian" msgstr "Итальянский" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:669 msgid "Japanese" msgstr "Японский" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:670 msgid "Korean" msgstr "Корейский" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:671 msgid "Dutch" msgstr "Голландский" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:672 msgid "Norwegian" msgstr "Норвежский" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:673 msgid "Polish" msgstr "Польский" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:674 msgid "Portugese" msgstr "Португальский" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:675 msgid "Russian" msgstr "Русский" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:676 msgid "Swedish" msgstr "Шведский" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:677 msgid "Thai" msgstr "Тайский" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:678 msgid "Turkish" msgstr "Турецкий" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:679 msgid "Vietnamese" msgstr "Вьетнамский" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:680 msgid "Chinese" msgstr "Китайский" @@ -374,7 +375,7 @@ msgstr "Потерян" msgid "Returned" msgstr "Возвращено" -#: InvenTree/status_codes.py:143 order/models.py:941 +#: InvenTree/status_codes.py:143 order/models.py:961 #: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "Доставлено" @@ -455,7 +456,7 @@ msgstr "Отделить от родительского элемента" msgid "Split child item" msgstr "Разбить дочерний элемент" -#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2064 +#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2072 msgid "Merged stock items" msgstr "Объединенные позиции на складе" @@ -543,56 +544,56 @@ msgstr "Пароли должны совпадать" msgid "System Information" msgstr "Информация о системе" -#: barcodes/api.py:54 barcodes/api.py:151 +#: barcodes/api.py:54 barcodes/api.py:152 msgid "Must provide barcode_data parameter" msgstr "Должен быть предоставлен параметр штрихкода" -#: barcodes/api.py:127 +#: barcodes/api.py:128 msgid "No match found for barcode data" msgstr "Не найдено совпадений для данных штрих-кода" -#: barcodes/api.py:129 +#: barcodes/api.py:130 msgid "Match found for barcode data" msgstr "Найдено совпадение по штрих-коду" -#: barcodes/api.py:154 +#: barcodes/api.py:155 msgid "Must provide stockitem parameter" msgstr "Необходимо предоставить параметр инвентаря" -#: barcodes/api.py:161 +#: barcodes/api.py:162 msgid "No matching stock item found" msgstr "Не найдено совпадающих элементов инвентаря" -#: barcodes/api.py:191 +#: barcodes/api.py:193 msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:195 +#: barcodes/api.py:197 msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:199 +#: barcodes/api.py:201 msgid "Barcode already matches Part" msgstr "Штрих-код уже совпадает с Компонентом" -#: barcodes/api.py:205 barcodes/api.py:217 +#: barcodes/api.py:207 barcodes/api.py:219 msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:223 +#: barcodes/api.py:225 msgid "Barcode associated with Stock Item" msgstr "" -#: build/forms.py:36 build/models.py:1286 +#: build/forms.py:36 build/models.py:1293 #: build/templates/build/build_base.html:82 -#: build/templates/build/detail.html:35 common/models.py:1253 +#: build/templates/build/detail.html:35 common/models.py:1263 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/models.py:796 order/models.py:1207 order/serializers.py:810 +#: order/models.py:805 order/models.py:1229 order/serializers.py:816 #: order/templates/order/order_wizard/match_parts.html:30 -#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:145 -#: part/forms.py:161 part/forms.py:177 part/models.py:2629 +#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:144 +#: part/forms.py:160 part/forms.py:176 part/models.py:2636 #: part/templates/part/bom_upload/match_parts.html:31 -#: part/templates/part/detail.html:962 part/templates/part/detail.html:1048 +#: part/templates/part/detail.html:992 part/templates/part/detail.html:1078 #: part/templates/part/part_pricing.html:16 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 @@ -603,7 +604,7 @@ msgstr "" #: stock/templates/stock/item_base.html:181 #: stock/templates/stock/item_base.html:262 #: stock/templates/stock/item_base.html:270 -#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:555 +#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:567 #: templates/js/translated/build.js:295 templates/js/translated/build.js:495 #: templates/js/translated/build.js:689 templates/js/translated/build.js:699 #: templates/js/translated/build.js:1075 templates/js/translated/build.js:1422 @@ -611,11 +612,11 @@ msgstr "" #: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 #: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 #: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 -#: templates/js/translated/order.js:2150 templates/js/translated/part.js:900 -#: templates/js/translated/part.js:1855 templates/js/translated/part.js:1978 -#: templates/js/translated/part.js:2056 templates/js/translated/stock.js:383 -#: templates/js/translated/stock.js:580 templates/js/translated/stock.js:750 -#: templates/js/translated/stock.js:2519 templates/js/translated/stock.js:2621 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:906 +#: templates/js/translated/part.js:1862 templates/js/translated/part.js:1985 +#: templates/js/translated/part.js:2063 templates/js/translated/stock.js:391 +#: templates/js/translated/stock.js:588 templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2779 msgid "Quantity" msgstr "Количество" @@ -623,9 +624,9 @@ msgstr "Количество" msgid "Enter quantity for build output" msgstr "Введите количество для вывода сборки" -#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 -#: stock/serializers.py:314 templates/js/translated/stock.js:230 -#: templates/js/translated/stock.js:384 +#: build/forms.py:41 order/serializers.py:820 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:238 +#: templates/js/translated/stock.js:392 msgid "Serial Numbers" msgstr "Серийные номера" @@ -649,18 +650,18 @@ msgstr "Подтвердите отмену" msgid "Confirm build cancellation" msgstr "Подтвердите отмену сборки" -#: build/models.py:133 +#: build/models.py:135 msgid "Invalid choice for parent build" msgstr "Неверный выбор для родительской сборки" -#: build/models.py:137 build/templates/build/build_base.html:9 +#: build/models.py:139 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:457 +#: templates/js/translated/build.js:457 templates/js/translated/stock.js:2290 msgid "Build Order" msgstr "Порядок сборки" -#: build/models.py:138 build/templates/build/build_base.html:13 +#: build/models.py:140 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:92 #: order/templates/order/so_sidebar.html:13 @@ -670,40 +671,40 @@ msgstr "Порядок сборки" msgid "Build Orders" msgstr "Порядок сборки" -#: build/models.py:198 +#: build/models.py:200 msgid "Build Order Reference" msgstr "Ссылка на заказ" -#: build/models.py:199 order/models.py:210 order/models.py:536 -#: order/models.py:803 part/models.py:2638 +#: build/models.py:201 order/models.py:213 order/models.py:541 +#: order/models.py:812 part/models.py:2645 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:547 templates/js/translated/build.js:1179 +#: templates/js/translated/bom.js:559 templates/js/translated/build.js:1179 #: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "Отсылка" -#: build/models.py:210 +#: build/models.py:212 msgid "Brief description of the build" msgstr "Краткое описание сборки" -#: build/models.py:219 build/templates/build/build_base.html:164 +#: build/models.py:221 build/templates/build/build_base.html:164 #: build/templates/build/detail.html:88 msgid "Parent Build" msgstr "Родительская сборка" -#: build/models.py:220 +#: build/models.py:222 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:225 build/templates/build/build_base.html:77 +#: build/models.py:227 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:856 order/models.py:930 -#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 -#: part/models.py:2204 part/models.py:2220 part/models.py:2239 -#: part/models.py:2256 part/models.py:2358 part/models.py:2480 -#: part/models.py:2613 part/models.py:2920 part/serializers.py:658 +#: order/models.py:876 order/models.py:950 +#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:359 +#: part/models.py:2211 part/models.py:2227 part/models.py:2246 +#: part/models.py:2263 part/models.py:2365 part/models.py:2487 +#: part/models.py:2620 part/models.py:2927 part/serializers.py:658 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/set_category.html:13 @@ -713,205 +714,205 @@ msgstr "" #: templates/InvenTree/search.html:80 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 -#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:326 -#: templates/js/translated/bom.js:505 templates/js/translated/build.js:680 +#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:338 +#: templates/js/translated/bom.js:517 templates/js/translated/build.js:680 #: templates/js/translated/build.js:1048 templates/js/translated/build.js:1419 #: templates/js/translated/build.js:1687 templates/js/translated/company.js:492 #: templates/js/translated/company.js:749 templates/js/translated/order.js:84 #: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 #: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 -#: templates/js/translated/order.js:2128 templates/js/translated/part.js:977 -#: templates/js/translated/part.js:1058 templates/js/translated/part.js:1225 -#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:719 -#: templates/js/translated/stock.js:926 templates/js/translated/stock.js:1526 -#: templates/js/translated/stock.js:2609 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:984 +#: templates/js/translated/part.js:1065 templates/js/translated/part.js:1232 +#: templates/js/translated/stock.js:562 templates/js/translated/stock.js:727 +#: templates/js/translated/stock.js:934 templates/js/translated/stock.js:1534 +#: templates/js/translated/stock.js:2767 msgid "Part" msgstr "Детали" -#: build/models.py:233 +#: build/models.py:235 msgid "Select part to build" msgstr "Выберите часть для сборки" -#: build/models.py:238 +#: build/models.py:240 msgid "Sales Order Reference" msgstr "Отсылка на заказ" -#: build/models.py:242 +#: build/models.py:244 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1407 +#: build/models.py:249 templates/js/translated/build.js:1407 #: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "Расположение источника" -#: build/models.py:251 +#: build/models.py:253 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:256 +#: build/models.py:258 msgid "Destination Location" msgstr "Место назначения" -#: build/models.py:260 +#: build/models.py:262 msgid "Select location where the completed items will be stored" msgstr "Выберите место хранения завершенных элементов" -#: build/models.py:264 +#: build/models.py:266 msgid "Build Quantity" msgstr "Количество сборки" -#: build/models.py:267 +#: build/models.py:269 msgid "Number of stock items to build" msgstr "Количество складских предметов для сборки" -#: build/models.py:271 +#: build/models.py:273 msgid "Completed items" msgstr "Завершенные предметы" -#: build/models.py:273 +#: build/models.py:275 msgid "Number of stock items which have been completed" msgstr "Количество предметов на складе, которые были завершены" -#: build/models.py:277 part/templates/part/part_base.html:234 +#: build/models.py:279 part/templates/part/part_base.html:234 msgid "Build Status" msgstr "Статус сборки" -#: build/models.py:281 +#: build/models.py:283 msgid "Build status code" msgstr "Код статуса сборки" -#: build/models.py:285 stock/models.py:531 +#: build/models.py:287 stock/models.py:533 msgid "Batch Code" msgstr "Штрих код" -#: build/models.py:289 +#: build/models.py:291 msgid "Batch code for this build output" msgstr "Штрих код для этого вывода сборки" -#: build/models.py:292 order/models.py:126 part/models.py:967 +#: build/models.py:294 order/models.py:129 part/models.py:969 #: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "Дата создания" -#: build/models.py:296 order/models.py:558 +#: build/models.py:298 order/models.py:563 msgid "Target completion date" msgstr "Целевая дата завершения" -#: build/models.py:297 +#: build/models.py:299 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Целевая дата для сборки. Сборка будет просрочена после этой даты." -#: build/models.py:300 order/models.py:252 +#: build/models.py:302 order/models.py:255 #: templates/js/translated/build.js:1758 msgid "Completion Date" msgstr "Дата завершения" -#: build/models.py:306 +#: build/models.py:308 msgid "completed by" msgstr "выполнено" -#: build/models.py:314 templates/js/translated/build.js:1729 +#: build/models.py:316 templates/js/translated/build.js:1729 msgid "Issued by" msgstr "Выдал/ла" -#: build/models.py:315 +#: build/models.py:317 msgid "User who issued this build order" msgstr "Пользователь, выпустивший этот заказ на сборку" -#: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:140 +#: build/models.py:325 build/templates/build/build_base.html:185 +#: build/templates/build/detail.html:116 order/models.py:143 #: order/templates/order/order_base.html:170 -#: order/templates/order/sales_order_base.html:182 part/models.py:971 +#: order/templates/order/sales_order_base.html:182 part/models.py:973 #: report/templates/report/inventree_build_order_base.html:159 #: templates/js/translated/build.js:1741 templates/js/translated/order.js:864 msgid "Responsible" msgstr "Ответственный" -#: build/models.py:324 +#: build/models.py:326 msgid "User responsible for this build order" msgstr "Пользователь ответственный за этот заказ сборки" -#: build/models.py:329 build/templates/build/detail.html:102 +#: build/models.py:331 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:525 +#: part/templates/part/part_base.html:354 stock/models.py:527 #: stock/templates/stock/item_base.html:373 msgid "External Link" msgstr "Внешняя ссылка" -#: build/models.py:334 build/serializers.py:201 +#: build/models.py:336 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:144 order/models.py:805 order/models.py:1051 +#: order/models.py:147 order/models.py:814 order/models.py:1071 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/models.py:956 -#: part/templates/part/detail.html:120 part/templates/part/part_sidebar.html:50 +#: order/templates/order/so_sidebar.html:17 part/models.py:958 +#: part/templates/part/detail.html:137 part/templates/part/part_sidebar.html:54 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:597 -#: stock/models.py:1867 stock/models.py:1973 stock/serializers.py:332 -#: stock/serializers.py:639 stock/serializers.py:737 stock/serializers.py:869 -#: stock/templates/stock/stock_sidebar.html:21 -#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:711 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:599 +#: stock/models.py:1895 stock/models.py:2001 stock/serializers.py:332 +#: stock/serializers.py:640 stock/serializers.py:738 stock/serializers.py:870 +#: stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:723 #: templates/js/translated/company.js:845 templates/js/translated/order.js:1149 #: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 -#: templates/js/translated/stock.js:1309 templates/js/translated/stock.js:1795 +#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1803 msgid "Notes" msgstr "Заметки" -#: build/models.py:335 +#: build/models.py:337 msgid "Extra build notes" msgstr "Дополнительные заметки к сборке" -#: build/models.py:710 +#: build/models.py:717 msgid "No build output specified" msgstr "Вывод сборки не указан" -#: build/models.py:713 +#: build/models.py:720 msgid "Build output is already completed" msgstr "Вывод сборки уже завершен" -#: build/models.py:716 +#: build/models.py:723 msgid "Build output does not match Build Order" msgstr "Вывод сборки не совпадает с порядком сборки" -#: build/models.py:1108 +#: build/models.py:1115 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Элемент сборки должен указать вывод сборки, так как основная часть помечена как отслеживаемая" -#: build/models.py:1117 +#: build/models.py:1124 #, python-brace-format msgid "Allocated quantity ({q}) must not execed available stock quantity ({a})" msgstr "Выделенное количество ({q}) не должно превышать доступное количество на складе ({a})" -#: build/models.py:1127 +#: build/models.py:1134 msgid "Stock item is over-allocated" msgstr "Предмет на складе перераспределен" -#: build/models.py:1133 order/models.py:1167 +#: build/models.py:1140 order/models.py:1189 msgid "Allocation quantity must be greater than zero" msgstr "Выделенное количество должно быть больше нуля" -#: build/models.py:1139 +#: build/models.py:1146 msgid "Quantity must be 1 for serialized stock" msgstr "Количество должно быть 1 для сериализованных запасов" -#: build/models.py:1196 +#: build/models.py:1203 msgid "Selected stock item not found in BOM" msgstr "Выбранный предмет со складом не найден в BOM" -#: build/models.py:1256 stock/templates/stock/item_base.html:345 +#: build/models.py:1263 stock/templates/stock/item_base.html:345 #: templates/InvenTree/search.html:137 templates/js/translated/build.js:1660 #: templates/navbar.html:35 msgid "Build" msgstr "Сборка" -#: build/models.py:1257 +#: build/models.py:1264 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1273 build/serializers.py:388 order/serializers.py:690 -#: order/serializers.py:708 stock/serializers.py:577 stock/serializers.py:695 +#: build/models.py:1280 build/serializers.py:388 order/serializers.py:696 +#: order/serializers.py:714 stock/serializers.py:578 stock/serializers.py:696 #: stock/templates/stock/item_base.html:9 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:367 @@ -920,24 +921,24 @@ msgstr "" #: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 #: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 #: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 -#: templates/js/translated/stock.js:555 templates/js/translated/stock.js:720 -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:563 templates/js/translated/stock.js:728 +#: templates/js/translated/stock.js:2628 msgid "Stock Item" msgstr "Предметы на складе" -#: build/models.py:1274 +#: build/models.py:1281 msgid "Source stock item" msgstr "Исходный складской предмет" -#: build/models.py:1287 +#: build/models.py:1294 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1295 +#: build/models.py:1302 msgid "Install into" msgstr "" -#: build/models.py:1296 +#: build/models.py:1303 msgid "Destination stock item" msgstr "" @@ -962,16 +963,16 @@ msgid "This build output is not fully allocated" msgstr "" #: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 -#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:730 -#: stock/serializers.py:971 stock/templates/stock/item_base.html:313 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:731 +#: stock/serializers.py:972 stock/templates/stock/item_base.html:313 #: templates/js/translated/barcode.js:384 #: templates/js/translated/barcode.js:557 templates/js/translated/build.js:480 #: templates/js/translated/build.js:1087 templates/js/translated/order.js:508 #: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 #: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 -#: templates/js/translated/part.js:179 templates/js/translated/stock.js:556 -#: templates/js/translated/stock.js:721 templates/js/translated/stock.js:928 -#: templates/js/translated/stock.js:1676 templates/js/translated/stock.js:2411 +#: templates/js/translated/part.js:179 templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:729 templates/js/translated/stock.js:936 +#: templates/js/translated/stock.js:1684 templates/js/translated/stock.js:2569 msgid "Location" msgstr "Расположение" @@ -980,12 +981,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:552 +#: build/templates/build/detail.html:63 order/models.py:557 #: order/serializers.py:247 stock/templates/stock/item_base.html:187 #: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1716 #: templates/js/translated/order.js:591 templates/js/translated/order.js:840 -#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1651 -#: templates/js/translated/stock.js:2488 templates/js/translated/stock.js:2637 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1659 +#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2795 msgid "Status" msgstr "Статус" @@ -1021,8 +1022,8 @@ msgstr "" msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:313 build/serializers.py:362 part/models.py:2753 -#: part/models.py:2912 +#: build/serializers.py:313 build/serializers.py:362 part/models.py:2760 +#: part/models.py:2919 msgid "BOM Item" msgstr "BOM Компонент" @@ -1038,16 +1039,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:394 stock/serializers.py:584 +#: build/serializers.py:394 stock/serializers.py:585 msgid "Item must be in stock" msgstr "Компонент должен быть в наличии" -#: build/serializers.py:408 order/models.py:277 order/serializers.py:240 -#: stock/models.py:365 stock/models.py:1077 stock/serializers.py:305 +#: build/serializers.py:408 order/models.py:280 order/serializers.py:240 +#: stock/models.py:367 stock/models.py:1105 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "Количество должно быть больше нуля" -#: build/serializers.py:450 order/serializers.py:741 +#: build/serializers.py:450 order/serializers.py:747 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Превышено доступное количество ({q})" @@ -1060,7 +1061,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:491 order/serializers.py:984 +#: build/serializers.py:491 order/serializers.py:990 msgid "Allocation items must be provided" msgstr "" @@ -1164,13 +1165,13 @@ msgid "Completed" msgstr "Завершённые" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:927 -#: order/models.py:1023 order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:947 +#: order/models.py:1043 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:307 -#: templates/js/translated/order.js:1218 +#: templates/js/translated/order.js:1218 templates/js/translated/stock.js:2304 msgid "Sales Order" msgstr "Заказ покупателя" @@ -1224,7 +1225,7 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:878 stock/forms.py:136 +#: build/templates/build/detail.html:50 order/models.py:898 stock/forms.py:136 #: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1239,7 +1240,7 @@ msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:331 -#: templates/js/translated/stock.js:1665 templates/js/translated/stock.js:2644 +#: templates/js/translated/stock.js:1673 templates/js/translated/stock.js:2802 #: templates/js/translated/table_filters.js:151 #: templates/js/translated/table_filters.js:238 msgid "Batch" @@ -1343,9 +1344,9 @@ msgstr "" #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 #: order/templates/order/sales_order_detail.html:107 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:196 -#: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 -#: stock/templates/stock/stock_sidebar.html:19 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:213 +#: part/templates/part/part_sidebar.html:52 stock/templates/stock/item.html:112 +#: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Приложения" @@ -1360,8 +1361,8 @@ msgstr "Заметки сборки" #: order/templates/order/purchase_order_detail.html:108 #: order/templates/order/sales_order_detail.html:127 #: order/templates/order/sales_order_detail.html:186 -#: part/templates/part/detail.html:124 stock/templates/stock/item.html:115 -#: stock/templates/stock/item.html:205 +#: part/templates/part/detail.html:141 stock/templates/stock/item.html:132 +#: stock/templates/stock/item.html:235 msgid "Edit Notes" msgstr "" @@ -1373,7 +1374,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:303 +#: build/templates/build/index.html:18 part/templates/part/detail.html:320 msgid "New Build Order" msgstr "" @@ -1453,23 +1454,23 @@ msgstr "" msgid "Delete Build Order" msgstr "" -#: common/files.py:67 +#: common/files.py:65 msgid "Unsupported file format: {ext.upper()}" msgstr "" -#: common/files.py:69 +#: common/files.py:67 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:74 +#: common/files.py:72 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:76 +#: common/files.py:74 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:78 +#: common/files.py:76 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1490,740 +1491,828 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:344 common/models.py:998 common/models.py:1206 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:352 +msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:346 +#: common/models.py:354 msgid "Settings value" msgstr "" -#: common/models.py:380 +#: common/models.py:388 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:400 +#: common/models.py:408 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:411 +#: common/models.py:419 msgid "Value must be an integer value" msgstr "" -#: common/models.py:434 +#: common/models.py:442 msgid "Key string must be unique" msgstr "" -#: common/models.py:553 +#: common/models.py:561 msgid "No group" msgstr "" -#: common/models.py:595 +#: common/models.py:603 msgid "Restart required" msgstr "" -#: common/models.py:596 +#: common/models.py:604 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:603 +#: common/models.py:611 msgid "InvenTree Instance Name" msgstr "" -#: common/models.py:605 +#: common/models.py:613 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:609 +#: common/models.py:617 msgid "Use instance name" msgstr "" -#: common/models.py:610 +#: common/models.py:618 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:616 company/models.py:100 company/models.py:101 +#: common/models.py:624 company/models.py:100 company/models.py:101 msgid "Company name" msgstr "" -#: common/models.py:617 +#: common/models.py:625 msgid "Internal company name" msgstr "" -#: common/models.py:622 +#: common/models.py:630 msgid "Base URL" msgstr "" -#: common/models.py:623 +#: common/models.py:631 msgid "Base URL for server instance" msgstr "" -#: common/models.py:629 +#: common/models.py:637 msgid "Default Currency" msgstr "" -#: common/models.py:630 +#: common/models.py:638 msgid "Default currency" msgstr "" -#: common/models.py:636 +#: common/models.py:644 msgid "Download from URL" msgstr "" -#: common/models.py:637 +#: common/models.py:645 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:643 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:651 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:644 +#: common/models.py:652 msgid "Enable barcode scanner support" msgstr "" -#: common/models.py:650 +#: common/models.py:658 msgid "IPN Regex" msgstr "" -#: common/models.py:651 +#: common/models.py:659 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:655 +#: common/models.py:663 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:656 +#: common/models.py:664 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:662 +#: common/models.py:670 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:663 +#: common/models.py:671 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:669 +#: common/models.py:677 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:670 +#: common/models.py:678 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:676 +#: common/models.py:684 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:677 +#: common/models.py:685 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:683 +#: common/models.py:691 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:684 +#: common/models.py:692 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:690 +#: common/models.py:698 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:691 +#: common/models.py:699 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:697 part/models.py:2482 report/models.py:187 +#: common/models.py:705 part/models.py:2489 report/models.py:187 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:422 msgid "Template" msgstr "" -#: common/models.py:698 +#: common/models.py:706 msgid "Parts are templates by default" msgstr "" -#: common/models.py:704 part/models.py:919 templates/js/translated/bom.js:1068 +#: common/models.py:712 part/models.py:921 templates/js/translated/bom.js:1082 #: templates/js/translated/table_filters.js:168 #: templates/js/translated/table_filters.js:434 msgid "Assembly" msgstr "" -#: common/models.py:705 +#: common/models.py:713 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:711 part/models.py:925 +#: common/models.py:719 part/models.py:927 #: templates/js/translated/table_filters.js:438 msgid "Component" msgstr "" -#: common/models.py:712 +#: common/models.py:720 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:718 part/models.py:936 +#: common/models.py:726 part/models.py:938 msgid "Purchaseable" msgstr "" -#: common/models.py:719 +#: common/models.py:727 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:725 part/models.py:941 +#: common/models.py:733 part/models.py:943 #: templates/js/translated/table_filters.js:446 msgid "Salable" msgstr "" -#: common/models.py:726 +#: common/models.py:734 msgid "Parts are salable by default" msgstr "" -#: common/models.py:732 part/models.py:931 +#: common/models.py:740 part/models.py:933 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 #: templates/js/translated/table_filters.js:450 msgid "Trackable" msgstr "" -#: common/models.py:733 +#: common/models.py:741 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:739 part/models.py:951 +#: common/models.py:747 part/models.py:953 #: part/templates/part/part_base.html:147 #: templates/js/translated/table_filters.js:42 msgid "Virtual" msgstr "" -#: common/models.py:740 +#: common/models.py:748 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:746 +#: common/models.py:754 msgid "Show Import in Views" msgstr "" -#: common/models.py:747 +#: common/models.py:755 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:753 +#: common/models.py:761 msgid "Show Price in Forms" msgstr "" -#: common/models.py:754 +#: common/models.py:762 msgid "Display part price in some forms" msgstr "" -#: common/models.py:765 +#: common/models.py:773 msgid "Show Price in BOM" msgstr "" -#: common/models.py:766 +#: common/models.py:774 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:772 +#: common/models.py:780 msgid "Show related parts" msgstr "" -#: common/models.py:773 +#: common/models.py:781 msgid "Display related parts for a part" msgstr "" -#: common/models.py:779 +#: common/models.py:787 msgid "Create initial stock" msgstr "" -#: common/models.py:780 +#: common/models.py:788 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:786 +#: common/models.py:794 msgid "Internal Prices" msgstr "" -#: common/models.py:787 +#: common/models.py:795 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:793 +#: common/models.py:801 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:794 +#: common/models.py:802 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:800 +#: common/models.py:808 msgid "Part Name Display Format" msgstr "" -#: common/models.py:801 +#: common/models.py:809 msgid "Format to display the part name" msgstr "" -#: common/models.py:808 +#: common/models.py:816 msgid "Enable Reports" msgstr "" -#: common/models.py:809 +#: common/models.py:817 msgid "Enable generation of reports" msgstr "" -#: common/models.py:815 templates/stats.html:25 +#: common/models.py:823 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:816 +#: common/models.py:824 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:822 +#: common/models.py:830 msgid "Page Size" msgstr "" -#: common/models.py:823 +#: common/models.py:831 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:833 +#: common/models.py:841 msgid "Test Reports" msgstr "" -#: common/models.py:834 +#: common/models.py:842 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:840 +#: common/models.py:848 msgid "Stock Expiry" msgstr "" -#: common/models.py:841 +#: common/models.py:849 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:847 +#: common/models.py:855 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:848 +#: common/models.py:856 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:854 +#: common/models.py:862 msgid "Stock Stale Time" msgstr "" -#: common/models.py:855 +#: common/models.py:863 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:857 +#: common/models.py:865 msgid "days" msgstr "" -#: common/models.py:862 +#: common/models.py:870 msgid "Build Expired Stock" msgstr "" -#: common/models.py:863 +#: common/models.py:871 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:869 +#: common/models.py:877 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:870 +#: common/models.py:878 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:876 -msgid "Group by Part" -msgstr "" - -#: common/models.py:877 -msgid "Group stock items by part reference in table views" -msgstr "" - -#: common/models.py:883 +#: common/models.py:884 msgid "Build Order Reference Prefix" msgstr "" -#: common/models.py:884 +#: common/models.py:885 msgid "Prefix value for build order reference" msgstr "" -#: common/models.py:889 +#: common/models.py:890 msgid "Build Order Reference Regex" msgstr "" -#: common/models.py:890 +#: common/models.py:891 msgid "Regular expression pattern for matching build order reference" msgstr "" -#: common/models.py:894 +#: common/models.py:895 msgid "Sales Order Reference Prefix" msgstr "" -#: common/models.py:895 +#: common/models.py:896 msgid "Prefix value for sales order reference" msgstr "" -#: common/models.py:900 +#: common/models.py:901 msgid "Purchase Order Reference Prefix" msgstr "" -#: common/models.py:901 +#: common/models.py:902 msgid "Prefix value for purchase order reference" msgstr "" -#: common/models.py:907 +#: common/models.py:908 msgid "Enable password forgot" msgstr "" -#: common/models.py:908 +#: common/models.py:909 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:913 +#: common/models.py:914 msgid "Enable registration" msgstr "" -#: common/models.py:914 +#: common/models.py:915 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:919 +#: common/models.py:920 msgid "Enable SSO" msgstr "" -#: common/models.py:920 +#: common/models.py:921 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:925 +#: common/models.py:926 msgid "Email required" msgstr "" -#: common/models.py:926 +#: common/models.py:927 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:931 +#: common/models.py:932 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:932 +#: common/models.py:933 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:937 +#: common/models.py:938 msgid "Mail twice" msgstr "" -#: common/models.py:938 +#: common/models.py:939 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:943 +#: common/models.py:944 msgid "Password twice" msgstr "" -#: common/models.py:944 +#: common/models.py:945 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:949 +#: common/models.py:950 msgid "Group on signup" msgstr "" -#: common/models.py:950 +#: common/models.py:951 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:955 +#: common/models.py:956 msgid "Enforce MFA" msgstr "" -#: common/models.py:956 +#: common/models.py:957 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:961 +#: common/models.py:964 msgid "Enable URL integration" msgstr "" -#: common/models.py:962 +#: common/models.py:965 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:968 +#: common/models.py:971 msgid "Enable navigation integration" msgstr "" -#: common/models.py:969 +#: common/models.py:972 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:975 +#: common/models.py:978 msgid "Enable app integration" msgstr "" -#: common/models.py:976 +#: common/models.py:979 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:982 +#: common/models.py:985 msgid "Enable schedule integration" msgstr "" -#: common/models.py:983 +#: common/models.py:986 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1029 +#: common/models.py:992 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:993 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:1008 common/models.py:1216 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1039 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1030 +#: common/models.py:1040 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1035 +#: common/models.py:1045 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1036 +#: common/models.py:1046 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1041 +#: common/models.py:1051 msgid "Show latest parts" msgstr "" -#: common/models.py:1042 +#: common/models.py:1052 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1047 +#: common/models.py:1057 msgid "Recent Part Count" msgstr "" -#: common/models.py:1048 +#: common/models.py:1058 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1054 +#: common/models.py:1064 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1055 +#: common/models.py:1065 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1060 +#: common/models.py:1070 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1061 +#: common/models.py:1071 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1066 +#: common/models.py:1076 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1067 +#: common/models.py:1077 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1072 +#: common/models.py:1082 msgid "Show low stock" msgstr "" -#: common/models.py:1073 +#: common/models.py:1083 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1078 +#: common/models.py:1088 msgid "Show depleted stock" msgstr "" -#: common/models.py:1079 +#: common/models.py:1089 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1084 +#: common/models.py:1094 msgid "Show needed stock" msgstr "" -#: common/models.py:1085 +#: common/models.py:1095 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1090 +#: common/models.py:1100 msgid "Show expired stock" msgstr "" -#: common/models.py:1091 +#: common/models.py:1101 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1096 +#: common/models.py:1106 msgid "Show stale stock" msgstr "" -#: common/models.py:1097 +#: common/models.py:1107 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1102 +#: common/models.py:1112 msgid "Show pending builds" msgstr "" -#: common/models.py:1103 +#: common/models.py:1113 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1108 +#: common/models.py:1118 msgid "Show overdue builds" msgstr "" -#: common/models.py:1109 +#: common/models.py:1119 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1114 +#: common/models.py:1124 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1115 +#: common/models.py:1125 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1120 +#: common/models.py:1130 msgid "Show overdue POs" msgstr "" -#: common/models.py:1121 +#: common/models.py:1131 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1126 +#: common/models.py:1136 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1127 +#: common/models.py:1137 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1132 +#: common/models.py:1142 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1133 +#: common/models.py:1143 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1139 +#: common/models.py:1149 msgid "Inline label display" msgstr "" -#: common/models.py:1140 +#: common/models.py:1150 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1146 +#: common/models.py:1156 msgid "Inline report display" msgstr "" -#: common/models.py:1147 +#: common/models.py:1157 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1153 +#: common/models.py:1163 msgid "Search Preview Results" msgstr "" -#: common/models.py:1154 +#: common/models.py:1164 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1160 +#: common/models.py:1170 msgid "Search Show Stock" msgstr "" -#: common/models.py:1161 +#: common/models.py:1171 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1167 +#: common/models.py:1177 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1168 +#: common/models.py:1178 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1174 +#: common/models.py:1184 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1175 +#: common/models.py:1185 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1181 +#: common/models.py:1191 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1182 +#: common/models.py:1192 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1188 +#: common/models.py:1198 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1189 +#: common/models.py:1199 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1254 company/forms.py:43 +#: common/models.py:1264 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1261 company/serializers.py:264 +#: common/models.py:1271 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 -#: templates/js/translated/part.js:909 templates/js/translated/part.js:1860 +#: templates/js/translated/part.js:915 templates/js/translated/part.js:1867 msgid "Price" msgstr "" -#: common/models.py:1262 +#: common/models.py:1272 msgid "Unit price at specified quantity" msgstr "" +#: common/models.py:1429 common/models.py:1568 +msgid "Endpoint" +msgstr "" + +#: common/models.py:1430 +msgid "Endpoint at which this webhook is received" +msgstr "" + +#: common/models.py:1439 +msgid "Name for this webhook" +msgstr "" + +#: common/models.py:1444 part/models.py:948 plugin/models.py:46 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:96 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:417 +msgid "Active" +msgstr "" + +#: common/models.py:1445 +msgid "Is this webhook active" +msgstr "" + +#: common/models.py:1459 +msgid "Token" +msgstr "" + +#: common/models.py:1460 +msgid "Token for access" +msgstr "" + +#: common/models.py:1467 +msgid "Secret" +msgstr "" + +#: common/models.py:1468 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:1535 +msgid "Message ID" +msgstr "" + +#: common/models.py:1536 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:1544 +msgid "Host" +msgstr "" + +#: common/models.py:1545 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:1552 +msgid "Header" +msgstr "" + +#: common/models.py:1553 +msgid "Header of this message" +msgstr "" + +#: common/models.py:1559 +msgid "Body" +msgstr "" + +#: common/models.py:1560 +msgid "Body of this message" +msgstr "" + +#: common/models.py:1569 +msgid "Endpoint on which this message was received" +msgstr "" + +#: common/models.py:1574 +msgid "Worked on" +msgstr "" + +#: common/models.py:1575 +msgid "Was the work on this message finished?" +msgstr "" + #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 #: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 -#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 -#: part/views.py:764 +#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:213 +#: part/views.py:773 msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 #: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 -#: part/views.py:765 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:214 +#: part/views.py:774 msgid "Match Fields" msgstr "" @@ -2315,7 +2404,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:139 part/models.py:838 +#: company/models.py:139 part/models.py:840 msgid "Image" msgstr "" @@ -2352,8 +2441,8 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:469 -#: stock/templates/stock/item_base.html:142 +#: company/models.py:320 company/models.py:535 stock/models.py:471 +#: stock/templates/stock/item_base.html:142 templates/js/translated/bom.js:328 msgid "Base Part" msgstr "" @@ -2380,7 +2469,7 @@ msgstr "" #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:533 #: templates/js/translated/company.js:818 templates/js/translated/order.js:1038 -#: templates/js/translated/part.js:245 templates/js/translated/part.js:889 +#: templates/js/translated/part.js:245 templates/js/translated/part.js:895 msgid "MPN" msgstr "" @@ -2409,8 +2498,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1960 templates/js/translated/company.js:647 -#: templates/js/translated/part.js:709 templates/js/translated/stock.js:1296 +#: stock/models.py:1988 templates/js/translated/company.js:647 +#: templates/js/translated/part.js:715 templates/js/translated/stock.js:1304 msgid "Value" msgstr "" @@ -2418,10 +2507,10 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:429 part/models.py:913 part/models.py:2450 +#: company/models.py:429 part/models.py:915 part/models.py:2457 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:284 -#: templates/js/translated/company.js:653 templates/js/translated/part.js:715 +#: templates/InvenTree/settings/settings.html:287 +#: templates/js/translated/company.js:653 templates/js/translated/part.js:721 msgid "Units" msgstr "" @@ -2434,13 +2523,13 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:224 +#: company/templates/company/supplier_part.html:87 order/models.py:227 #: order/templates/order/order_base.html:112 -#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 -#: part/bom.py:247 stock/templates/stock/item_base.html:397 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:237 +#: part/bom.py:265 stock/templates/stock/item_base.html:397 #: templates/js/translated/company.js:337 #: templates/js/translated/company.js:774 templates/js/translated/order.js:823 -#: templates/js/translated/part.js:215 templates/js/translated/part.js:857 +#: templates/js/translated/part.js:215 templates/js/translated/part.js:863 #: templates/js/translated/table_filters.js:393 msgid "Supplier" msgstr "" @@ -2450,8 +2539,8 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 -#: templates/js/translated/part.js:226 templates/js/translated/part.js:875 +#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1025 +#: templates/js/translated/part.js:226 templates/js/translated/part.js:881 msgid "SKU" msgstr "" @@ -2472,22 +2561,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:576 company/templates/company/supplier_part.html:119 -#: part/models.py:2641 report/templates/report/inventree_po_report.html:93 +#: part/models.py:2648 report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "base cost" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:493 stock/templates/stock/item_base.html:338 -#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1791 +#: stock/models.py:495 stock/templates/stock/item_base.html:338 +#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1799 msgid "Packaging" msgstr "" @@ -2495,7 +2584,7 @@ msgstr "" msgid "Part packaging" msgstr "" -#: company/models.py:584 part/models.py:1781 +#: company/models.py:584 part/models.py:1783 msgid "multiple" msgstr "" @@ -2554,12 +2643,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:547 -#: order/templates/order/sales_order_base.html:115 stock/models.py:512 -#: stock/models.py:513 stock/serializers.py:625 +#: company/templates/company/company_base.html:83 order/models.py:552 +#: order/templates/order/sales_order_base.html:115 stock/models.py:514 +#: stock/models.py:515 stock/serializers.py:626 #: stock/templates/stock/item_base.html:290 #: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 -#: templates/js/translated/stock.js:2452 +#: templates/js/translated/stock.js:2610 #: templates/js/translated/table_filters.js:397 msgid "Customer" msgstr "" @@ -2590,7 +2679,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:118 -#: part/templates/part/detail.html:336 +#: part/templates/part/detail.html:353 msgid "New Supplier Part" msgstr "" @@ -2598,8 +2687,8 @@ msgstr "" #: company/templates/company/detail.html:79 #: company/templates/company/manufacturer_part.html:127 #: company/templates/company/manufacturer_part.html:156 -#: part/templates/part/category.html:171 part/templates/part/detail.html:345 -#: part/templates/part/detail.html:374 +#: part/templates/part/category.html:171 part/templates/part/detail.html:362 +#: part/templates/part/detail.html:391 msgid "Options" msgstr "" @@ -2627,7 +2716,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:67 part/templates/part/detail.html:364 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:381 msgid "New Manufacturer Part" msgstr "" @@ -2641,7 +2730,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:68 part/templates/part/part_sidebar.html:33 +#: part/templates/part/detail.html:85 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197 #: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 @@ -2663,7 +2752,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:91 part/templates/part/part_sidebar.html:37 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:41 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217 #: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 @@ -2691,13 +2780,13 @@ msgstr "" #: company/templates/company/detail.html:384 #: company/templates/company/manufacturer_part.html:215 -#: part/templates/part/detail.html:418 +#: part/templates/part/detail.html:435 msgid "Delete Supplier Parts?" msgstr "" #: company/templates/company/detail.html:385 #: company/templates/company/manufacturer_part.html:216 -#: part/templates/part/detail.html:419 +#: part/templates/part/detail.html:436 msgid "All selected supplier parts will be deleted" msgstr "" @@ -2714,7 +2803,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:34 #: company/templates/company/supplier_part.html:159 -#: part/templates/part/detail.html:71 part/templates/part/part_base.html:76 +#: part/templates/part/detail.html:88 part/templates/part/part_base.html:76 msgid "Order part" msgstr "" @@ -2735,34 +2824,34 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 -#: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 +#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:163 #: templates/InvenTree/search.html:188 templates/navbar.html:45 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:129 -#: part/templates/part/detail.html:347 +#: part/templates/part/detail.html:364 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:129 #: company/templates/company/manufacturer_part.html:158 #: company/templates/company/manufacturer_part.html:254 -#: part/templates/part/detail.html:347 part/templates/part/detail.html:376 +#: part/templates/part/detail.html:364 part/templates/part/detail.html:393 #: templates/js/translated/company.js:426 templates/js/translated/helpers.js:31 -#: users/models.py:210 +#: users/models.py:212 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:143 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:17 -#: part/templates/part/detail.html:170 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:187 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:147 -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:192 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part.html:65 msgid "New Parameter" @@ -2773,7 +2862,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:191 -#: part/templates/part/detail.html:862 +#: part/templates/part/detail.html:892 msgid "Add Parameter" msgstr "" @@ -2802,9 +2891,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:477 +#: company/templates/company/supplier_part.html:24 stock/models.py:479 #: stock/templates/stock/item_base.html:402 -#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1748 +#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1756 msgid "Supplier Part" msgstr "" @@ -2830,7 +2919,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:167 -#: templates/js/translated/stock.js:360 +#: templates/js/translated/stock.js:368 msgid "New Stock Item" msgstr "" @@ -2840,7 +2929,7 @@ msgid "Supplier Part Orders" msgstr "" #: company/templates/company/supplier_part.html:160 -#: part/templates/part/detail.html:72 +#: part/templates/part/detail.html:89 msgid "Order Part" msgstr "" @@ -2851,7 +2940,7 @@ msgstr "" #: company/templates/company/supplier_part.html:184 #: company/templates/company/supplier_part.html:290 -#: part/templates/part/prices.html:271 part/views.py:1619 +#: part/templates/part/prices.html:271 part/views.py:1628 msgid "Add Price Break" msgstr "" @@ -2859,11 +2948,11 @@ msgstr "" msgid "No price break information found" msgstr "" -#: company/templates/company/supplier_part.html:224 part/views.py:1681 +#: company/templates/company/supplier_part.html:224 part/views.py:1690 msgid "Delete Price Break" msgstr "" -#: company/templates/company/supplier_part.html:238 part/views.py:1667 +#: company/templates/company/supplier_part.html:238 part/views.py:1676 msgid "Edit Price Break" msgstr "" @@ -2881,10 +2970,10 @@ msgstr "" #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:150 #: templates/InvenTree/settings/sidebar.html:41 -#: templates/js/translated/bom.js:328 templates/js/translated/part.js:489 -#: templates/js/translated/part.js:624 templates/js/translated/part.js:1118 -#: templates/js/translated/part.js:1279 templates/js/translated/stock.js:927 -#: templates/js/translated/stock.js:1580 templates/navbar.html:28 +#: templates/js/translated/bom.js:340 templates/js/translated/part.js:495 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1125 +#: templates/js/translated/part.js:1286 templates/js/translated/stock.js:935 +#: templates/js/translated/stock.js:1588 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2907,8 +2996,8 @@ msgstr "" #: stock/templates/stock/location.html:151 #: stock/templates/stock/location.html:163 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2351 -#: templates/stats.html:93 templates/stats.html:102 users/models.py:43 +#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2509 +#: templates/stats.html:105 templates/stats.html:114 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2937,20 +3026,20 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:129 part/views.py:584 +#: company/views.py:129 part/views.py:593 msgid "Download Image" msgstr "" -#: company/views.py:158 part/views.py:616 +#: company/views.py:158 part/views.py:625 msgid "Image size exceeds maximum allowable size for download" msgstr "" -#: company/views.py:165 part/views.py:623 +#: company/views.py:165 part/views.py:632 #, python-brace-format msgid "Invalid response: {code}" msgstr "" -#: company/views.py:174 part/views.py:632 +#: company/views.py:174 part/views.py:641 msgid "Supplied URL is not a valid image file" msgstr "" @@ -3036,282 +3125,282 @@ msgstr "" msgid "Cancel order" msgstr "" -#: order/models.py:122 +#: order/models.py:125 msgid "Order description" msgstr "" -#: order/models.py:124 +#: order/models.py:127 msgid "Link to external page" msgstr "" -#: order/models.py:132 +#: order/models.py:135 msgid "Created By" msgstr "" -#: order/models.py:139 +#: order/models.py:142 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:144 +#: order/models.py:147 msgid "Order notes" msgstr "" -#: order/models.py:211 order/models.py:537 +#: order/models.py:214 order/models.py:542 msgid "Order reference" msgstr "" -#: order/models.py:216 order/models.py:552 +#: order/models.py:219 order/models.py:557 msgid "Purchase order status" msgstr "" -#: order/models.py:225 +#: order/models.py:228 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:228 order/templates/order/order_base.html:118 +#: order/models.py:231 order/templates/order/order_base.html:118 #: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:228 +#: order/models.py:231 msgid "Supplier order reference code" msgstr "" -#: order/models.py:235 +#: order/models.py:238 msgid "received by" msgstr "" -#: order/models.py:240 +#: order/models.py:243 msgid "Issue Date" msgstr "" -#: order/models.py:241 +#: order/models.py:244 msgid "Date order was issued" msgstr "" -#: order/models.py:246 +#: order/models.py:249 msgid "Target Delivery Date" msgstr "" -#: order/models.py:247 +#: order/models.py:250 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:253 +#: order/models.py:256 msgid "Date order was completed" msgstr "" -#: order/models.py:282 +#: order/models.py:285 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:411 -msgid "Quantity must be an integer" -msgstr "" - -#: order/models.py:415 +#: order/models.py:420 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:548 +#: order/models.py:553 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer Reference " msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer order reference code" msgstr "" -#: order/models.py:559 +#: order/models.py:564 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:562 order/models.py:1028 +#: order/models.py:567 order/models.py:1048 #: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:569 +#: order/models.py:574 msgid "shipped by" msgstr "" -#: order/models.py:635 +#: order/models.py:640 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:639 +#: order/models.py:644 msgid "Only a pending order can be marked as complete" msgstr "" -#: order/models.py:642 +#: order/models.py:647 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:645 +#: order/models.py:650 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:797 +#: order/models.py:806 msgid "Item quantity" msgstr "" -#: order/models.py:803 +#: order/models.py:812 msgid "Line item reference" msgstr "" -#: order/models.py:805 +#: order/models.py:814 msgid "Line item notes" msgstr "" -#: order/models.py:835 order/models.py:926 order/models.py:1022 -#: templates/js/translated/order.js:1820 +#: order/models.py:842 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:855 order/models.py:946 order/models.py:1042 +#: templates/js/translated/order.js:1820 templates/js/translated/stock.js:2271 msgid "Order" msgstr "" -#: order/models.py:836 order/templates/order/order_base.html:9 +#: order/models.py:856 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:352 -#: templates/js/translated/order.js:801 templates/js/translated/part.js:832 -#: templates/js/translated/stock.js:1725 templates/js/translated/stock.js:2433 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:838 +#: templates/js/translated/stock.js:1733 templates/js/translated/stock.js:2591 msgid "Purchase Order" msgstr "" -#: order/models.py:857 +#: order/models.py:877 msgid "Supplier part" msgstr "" -#: order/models.py:864 order/templates/order/order_base.html:163 +#: order/models.py:884 order/templates/order/order_base.html:163 #: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 -#: templates/js/translated/part.js:904 templates/js/translated/part.js:930 +#: templates/js/translated/part.js:910 templates/js/translated/part.js:937 #: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:865 +#: order/models.py:885 msgid "Number of items received" msgstr "" -#: order/models.py:872 part/templates/part/prices.html:176 stock/models.py:606 +#: order/models.py:892 part/templates/part/prices.html:176 stock/models.py:608 #: stock/serializers.py:170 stock/templates/stock/item_base.html:359 -#: templates/js/translated/stock.js:1779 +#: templates/js/translated/stock.js:1787 msgid "Purchase Price" msgstr "" -#: order/models.py:873 +#: order/models.py:893 msgid "Unit purchase price" msgstr "" -#: order/models.py:881 +#: order/models.py:901 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:936 part/templates/part/part_pricing.html:112 +#: order/models.py:956 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:937 +#: order/models.py:957 msgid "Unit sale price" msgstr "" -#: order/models.py:942 +#: order/models.py:962 msgid "Shipped quantity" msgstr "" -#: order/models.py:1029 +#: order/models.py:1049 msgid "Date of shipment" msgstr "" -#: order/models.py:1036 +#: order/models.py:1056 msgid "Checked By" msgstr "" -#: order/models.py:1037 +#: order/models.py:1057 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1045 +#: order/models.py:1065 msgid "Shipment number" msgstr "" -#: order/models.py:1052 +#: order/models.py:1072 msgid "Shipment notes" msgstr "" -#: order/models.py:1059 +#: order/models.py:1079 msgid "Tracking Number" msgstr "" -#: order/models.py:1060 +#: order/models.py:1080 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1070 +#: order/models.py:1090 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1073 +#: order/models.py:1093 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1149 order/models.py:1151 +#: order/models.py:1171 order/models.py:1173 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1155 +#: order/models.py:1177 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1157 +#: order/models.py:1179 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1160 +#: order/models.py:1182 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1164 +#: order/models.py:1186 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:1170 order/serializers.py:734 +#: order/models.py:1192 order/serializers.py:740 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1173 +#: order/models.py:1195 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1174 +#: order/models.py:1196 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1182 +#: order/models.py:1204 msgid "Line" msgstr "" -#: order/models.py:1190 order/serializers.py:825 order/serializers.py:953 -#: templates/js/translated/model_renderers.js:251 +#: order/models.py:1212 order/serializers.py:831 order/serializers.py:959 +#: templates/js/translated/model_renderers.js:285 msgid "Shipment" msgstr "" -#: order/models.py:1191 +#: order/models.py:1213 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1203 +#: order/models.py:1225 msgid "Item" msgstr "" -#: order/models.py:1204 +#: order/models.py:1226 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1207 +#: order/models.py:1229 msgid "Enter stock allocation quantity" msgstr "" @@ -3319,7 +3408,7 @@ msgstr "" msgid "Purchase price currency" msgstr "" -#: order/serializers.py:211 order/serializers.py:790 +#: order/serializers.py:211 order/serializers.py:796 msgid "Line Item" msgstr "" @@ -3355,39 +3444,39 @@ msgstr "" msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:587 msgid "Sale price currency" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:655 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:699 order/serializers.py:802 +#: order/serializers.py:705 order/serializers.py:808 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:721 +#: order/serializers.py:727 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:815 +#: order/serializers.py:821 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:839 order/serializers.py:964 +#: order/serializers.py:845 order/serializers.py:970 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:842 order/serializers.py:967 +#: order/serializers.py:848 order/serializers.py:973 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:894 +#: order/serializers.py:900 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:910 msgid "The following serial numbers are already allocated" msgstr "" @@ -3441,6 +3530,7 @@ msgstr "" #: order/templates/order/order_base.html:94 #: order/templates/order/sales_order_base.html:89 +#: templates/js/translated/stock.js:2327 msgid "Order Status" msgstr "" @@ -3538,7 +3628,7 @@ msgstr "" #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/build.js:300 templates/js/translated/build.js:1311 #: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 -#: templates/js/translated/stock.js:593 templates/js/translated/stock.js:761 +#: templates/js/translated/stock.js:601 templates/js/translated/stock.js:769 msgid "Remove row" msgstr "" @@ -3729,7 +3819,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:48 -#: templates/js/translated/bom.js:720 templates/js/translated/build.js:1243 +#: templates/js/translated/bom.js:732 templates/js/translated/build.js:1243 msgid "Actions" msgstr "" @@ -3832,447 +3922,448 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:125 part/models.py:81 part/models.py:847 +#: part/bom.py:125 part/models.py:83 part/models.py:849 #: part/templates/part/category.html:108 part/templates/part/part_base.html:338 msgid "Default Location" msgstr "" -#: part/bom.py:126 part/templates/part/part_base.html:185 +#: part/bom.py:126 templates/email/low_stock_notification.html:17 +msgid "Total Stock" +msgstr "" + +#: part/bom.py:127 part/templates/part/part_base.html:185 msgid "Available Stock" msgstr "" -#: part/forms.py:85 +#: part/bom.py:128 part/templates/part/part_base.html:203 +#: templates/js/translated/part.js:1301 +msgid "On Order" +msgstr "" + +#: part/forms.py:84 msgid "Select part category" msgstr "" -#: part/forms.py:122 +#: part/forms.py:121 msgid "Add parameter template to same level categories" msgstr "" -#: part/forms.py:126 +#: part/forms.py:125 msgid "Add parameter template to all categories" msgstr "" -#: part/forms.py:146 +#: part/forms.py:145 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 +#: part/models.py:84 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:95 part/models.py:2526 part/templates/part/category.html:15 +#: part/models.py:97 part/models.py:2533 part/templates/part/category.html:15 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:96 part/templates/part/category.html:128 -#: templates/InvenTree/search.html:95 templates/stats.html:84 +#: part/models.py:98 part/templates/part/category.html:128 +#: templates/InvenTree/search.html:95 templates/stats.html:96 #: users/models.py:40 msgid "Part Categories" msgstr "" -#: part/models.py:358 part/templates/part/cat_link.html:3 +#: part/models.py:360 part/templates/part/cat_link.html:3 #: part/templates/part/category.html:17 part/templates/part/category.html:133 #: part/templates/part/category.html:153 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82 #: templates/InvenTree/settings/sidebar.html:37 -#: templates/js/translated/part.js:1656 templates/navbar.html:21 -#: templates/stats.html:80 templates/stats.html:89 users/models.py:41 +#: templates/js/translated/part.js:1663 templates/navbar.html:21 +#: templates/stats.html:92 templates/stats.html:101 users/models.py:41 msgid "Parts" msgstr "" -#: part/models.py:450 +#: part/models.py:452 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:500 part/models.py:512 +#: part/models.py:502 part/models.py:514 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:642 +#: part/models.py:644 msgid "Next available serial numbers are" msgstr "" -#: part/models.py:646 +#: part/models.py:648 msgid "Next available serial number is" msgstr "" -#: part/models.py:651 +#: part/models.py:653 msgid "Most recent serial number is" msgstr "" -#: part/models.py:746 +#: part/models.py:748 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:771 +#: part/models.py:773 msgid "Part name" msgstr "" -#: part/models.py:778 +#: part/models.py:780 msgid "Is Template" msgstr "" -#: part/models.py:779 +#: part/models.py:781 msgid "Is this part a template part?" msgstr "" -#: part/models.py:789 +#: part/models.py:791 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:790 +#: part/models.py:792 msgid "Variant Of" msgstr "" -#: part/models.py:796 +#: part/models.py:798 msgid "Part description" msgstr "" -#: part/models.py:801 part/templates/part/category.html:86 +#: part/models.py:803 part/templates/part/category.html:86 #: part/templates/part/part_base.html:302 msgid "Keywords" msgstr "" -#: part/models.py:802 +#: part/models.py:804 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:809 part/models.py:2276 part/models.py:2525 +#: part/models.py:811 part/models.py:2283 part/models.py:2532 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:183 -#: templates/js/translated/part.js:1261 +#: templates/InvenTree/settings/settings.html:186 +#: templates/js/translated/part.js:1268 msgid "Category" msgstr "" -#: part/models.py:810 +#: part/models.py:812 msgid "Part category" msgstr "" -#: part/models.py:815 part/templates/part/part_base.html:274 -#: templates/js/translated/part.js:612 templates/js/translated/part.js:1214 -#: templates/js/translated/stock.js:1552 +#: part/models.py:817 part/templates/part/part_base.html:274 +#: templates/js/translated/part.js:618 templates/js/translated/part.js:1221 +#: templates/js/translated/stock.js:1560 msgid "IPN" msgstr "" -#: part/models.py:816 +#: part/models.py:818 msgid "Internal Part Number" msgstr "" -#: part/models.py:822 +#: part/models.py:824 msgid "Part revision or version number" msgstr "" -#: part/models.py:823 part/templates/part/part_base.html:281 -#: report/models.py:200 templates/js/translated/part.js:616 +#: part/models.py:825 part/templates/part/part_base.html:281 +#: report/models.py:200 templates/js/translated/part.js:622 msgid "Revision" msgstr "" -#: part/models.py:845 +#: part/models.py:847 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:892 part/templates/part/part_base.html:347 +#: part/models.py:894 part/templates/part/part_base.html:347 msgid "Default Supplier" msgstr "" -#: part/models.py:893 +#: part/models.py:895 msgid "Default supplier part" msgstr "" -#: part/models.py:900 +#: part/models.py:902 msgid "Default Expiry" msgstr "" -#: part/models.py:901 +#: part/models.py:903 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:906 part/templates/part/part_base.html:196 +#: part/models.py:908 part/templates/part/part_base.html:196 msgid "Minimum Stock" msgstr "" -#: part/models.py:907 +#: part/models.py:909 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:914 +#: part/models.py:916 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:920 +#: part/models.py:922 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:926 +#: part/models.py:928 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:932 +#: part/models.py:934 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:937 +#: part/models.py:939 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:942 +#: part/models.py:944 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:946 plugin/models.py:46 -#: templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:295 -#: templates/js/translated/table_filters.js:417 -msgid "Active" -msgstr "" - -#: part/models.py:947 +#: part/models.py:949 msgid "Is this part active?" msgstr "" -#: part/models.py:952 +#: part/models.py:954 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:957 +#: part/models.py:959 msgid "Part notes - supports Markdown formatting" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "BOM checksum" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:963 +#: part/models.py:965 msgid "BOM checked by" msgstr "" -#: part/models.py:965 +#: part/models.py:967 msgid "BOM checked date" msgstr "" -#: part/models.py:969 +#: part/models.py:971 msgid "Creation User" msgstr "" -#: part/models.py:1781 +#: part/models.py:1783 msgid "Sell multiple" msgstr "" -#: part/models.py:2326 +#: part/models.py:2333 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2343 +#: part/models.py:2350 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2363 templates/js/translated/part.js:1707 -#: templates/js/translated/stock.js:1276 +#: part/models.py:2370 templates/js/translated/part.js:1714 +#: templates/js/translated/stock.js:1284 msgid "Test Name" msgstr "" -#: part/models.py:2364 +#: part/models.py:2371 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2369 +#: part/models.py:2376 msgid "Test Description" msgstr "" -#: part/models.py:2370 +#: part/models.py:2377 msgid "Enter description for this test" msgstr "" -#: part/models.py:2375 templates/js/translated/part.js:1716 +#: part/models.py:2382 templates/js/translated/part.js:1723 #: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" -#: part/models.py:2376 +#: part/models.py:2383 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2381 templates/js/translated/part.js:1724 +#: part/models.py:2388 templates/js/translated/part.js:1731 msgid "Requires Value" msgstr "" -#: part/models.py:2382 +#: part/models.py:2389 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2387 templates/js/translated/part.js:1731 +#: part/models.py:2394 templates/js/translated/part.js:1738 msgid "Requires Attachment" msgstr "" -#: part/models.py:2388 +#: part/models.py:2395 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2399 +#: part/models.py:2406 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2435 +#: part/models.py:2442 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2443 +#: part/models.py:2450 msgid "Parameter Name" msgstr "" -#: part/models.py:2450 +#: part/models.py:2457 msgid "Parameter Units" msgstr "" -#: part/models.py:2480 +#: part/models.py:2487 msgid "Parent Part" msgstr "" -#: part/models.py:2482 part/models.py:2531 part/models.py:2532 -#: templates/InvenTree/settings/settings.html:178 +#: part/models.py:2489 part/models.py:2538 part/models.py:2539 +#: templates/InvenTree/settings/settings.html:181 msgid "Parameter Template" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Data" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Parameter Value" msgstr "" -#: part/models.py:2536 templates/InvenTree/settings/settings.html:187 +#: part/models.py:2543 templates/InvenTree/settings/settings.html:190 msgid "Default Value" msgstr "" -#: part/models.py:2537 +#: part/models.py:2544 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2614 +#: part/models.py:2621 msgid "Select parent part" msgstr "" -#: part/models.py:2622 +#: part/models.py:2629 msgid "Sub part" msgstr "" -#: part/models.py:2623 +#: part/models.py:2630 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2629 +#: part/models.py:2636 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2631 templates/js/translated/bom.js:566 -#: templates/js/translated/bom.js:640 +#: part/models.py:2638 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:652 #: templates/js/translated/table_filters.js:92 msgid "Optional" msgstr "" -#: part/models.py:2631 +#: part/models.py:2638 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2634 +#: part/models.py:2641 msgid "Overage" msgstr "" -#: part/models.py:2635 +#: part/models.py:2642 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2638 +#: part/models.py:2645 msgid "BOM item reference" msgstr "" -#: part/models.py:2641 +#: part/models.py:2648 msgid "BOM item notes" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "Checksum" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "BOM line checksum" msgstr "" -#: part/models.py:2647 templates/js/translated/bom.js:657 +#: part/models.py:2654 templates/js/translated/bom.js:669 #: templates/js/translated/table_filters.js:68 #: templates/js/translated/table_filters.js:88 msgid "Inherited" msgstr "" -#: part/models.py:2648 +#: part/models.py:2655 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2653 templates/js/translated/bom.js:649 +#: part/models.py:2660 templates/js/translated/bom.js:661 msgid "Allow Variants" msgstr "" -#: part/models.py:2654 +#: part/models.py:2661 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2739 stock/models.py:355 +#: part/models.py:2746 stock/models.py:357 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2748 part/models.py:2750 +#: part/models.py:2755 part/models.py:2757 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2879 +#: part/models.py:2886 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2901 +#: part/models.py:2908 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2913 +#: part/models.py:2920 msgid "Parent BOM item" msgstr "" -#: part/models.py:2921 +#: part/models.py:2928 msgid "Substitute part" msgstr "" -#: part/models.py:2932 +#: part/models.py:2939 msgid "Part 1" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Part 2" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Select Related Part" msgstr "" -#: part/models.py:2968 +#: part/models.py:2975 msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique" msgstr "" @@ -4327,7 +4418,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:253 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:270 msgid "BOM actions" msgstr "" @@ -4499,7 +4590,7 @@ msgstr "" msgid "Import Parts" msgstr "" -#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:375 +#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:348 msgid "Duplicate Part" msgstr "" @@ -4533,145 +4624,149 @@ msgid "Showing stock for all variants of %(full_name)s" msgstr "" #: part/templates/part/detail.html:43 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/detail.html:60 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:48 +#: part/templates/part/detail.html:65 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:105 +#: part/templates/part/detail.html:122 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:142 +#: part/templates/part/detail.html:159 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:146 +#: part/templates/part/detail.html:163 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:147 +#: part/templates/part/detail.html:164 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:174 +#: part/templates/part/detail.html:191 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:45 +#: part/templates/part/detail.html:228 part/templates/part/part_sidebar.html:49 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:215 part/templates/part/detail.html:216 +#: part/templates/part/detail.html:232 part/templates/part/detail.html:233 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:253 part/templates/part/part_sidebar.html:17 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:241 +#: part/templates/part/detail.html:258 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:245 templates/js/translated/bom.js:70 +#: part/templates/part/detail.html:262 templates/js/translated/bom.js:70 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:247 +#: part/templates/part/detail.html:264 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:257 +#: part/templates/part/detail.html:274 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:259 templates/js/translated/part.js:272 +#: part/templates/part/detail.html:276 templates/js/translated/part.js:272 msgid "Copy BOM" msgstr "" -#: part/templates/part/detail.html:261 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:283 msgid "New BOM Item" msgstr "" -#: part/templates/part/detail.html:267 +#: part/templates/part/detail.html:284 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:280 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:314 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:322 +#: part/templates/part/detail.html:339 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:332 +#: part/templates/part/detail.html:349 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:360 +#: part/templates/part/detail.html:377 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:393 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:558 +#: part/templates/part/detail.html:575 msgid "Delete selected BOM items?" msgstr "" -#: part/templates/part/detail.html:559 +#: part/templates/part/detail.html:576 msgid "All selected BOM items will be deleted" msgstr "" -#: part/templates/part/detail.html:608 +#: part/templates/part/detail.html:625 msgid "Create BOM Item" msgstr "" -#: part/templates/part/detail.html:652 +#: part/templates/part/detail.html:682 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:660 +#: part/templates/part/detail.html:690 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:755 +#: part/templates/part/detail.html:785 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:812 +#: part/templates/part/detail.html:842 msgid "Edit Part Notes" msgstr "" -#: part/templates/part/detail.html:925 +#: part/templates/part/detail.html:955 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:937 +#: part/templates/part/detail.html:967 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:949 +#: part/templates/part/detail.html:979 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1038 +#: part/templates/part/detail.html:1068 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -4786,7 +4881,7 @@ msgstr "" #: templates/js/translated/company.js:508 #: templates/js/translated/company.js:765 #: templates/js/translated/model_renderers.js:175 -#: templates/js/translated/part.js:527 templates/js/translated/part.js:604 +#: templates/js/translated/part.js:533 templates/js/translated/part.js:610 msgid "Inactive" msgstr "" @@ -4805,10 +4900,6 @@ msgstr "" msgid "In Stock" msgstr "" -#: part/templates/part/part_base.html:203 templates/js/translated/part.js:1294 -msgid "On Order" -msgstr "" - #: part/templates/part/part_base.html:210 templates/InvenTree/index.html:178 msgid "Required for Build Orders" msgstr "" @@ -4821,12 +4912,12 @@ msgstr "" msgid "Allocated to Orders" msgstr "" -#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:678 +#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:690 msgid "Can Build" msgstr "" -#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1125 -#: templates/js/translated/part.js:1298 +#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1132 +#: templates/js/translated/part.js:1305 msgid "Building" msgstr "" @@ -4878,7 +4969,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:40 -#: templates/js/translated/bom.js:632 +#: templates/js/translated/bom.js:644 msgid "No supplier pricing available" msgstr "" @@ -4920,7 +5011,12 @@ msgstr "" msgid "Used In" msgstr "" -#: part/templates/part/part_sidebar.html:41 +#: part/templates/part/part_sidebar.html:31 +#: stock/templates/stock/stock_sidebar.html:8 +msgid "Allocations" +msgstr "" + +#: part/templates/part/part_sidebar.html:45 msgid "Test Templates" msgstr "" @@ -4993,7 +5089,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:155 templates/js/translated/bom.js:626 +#: part/templates/part/prices.html:155 templates/js/translated/bom.js:638 msgid "Supplier Cost" msgstr "" @@ -5015,7 +5111,7 @@ msgstr "" msgid "Internal Cost" msgstr "" -#: part/templates/part/prices.html:215 part/views.py:1690 +#: part/templates/part/prices.html:215 part/views.py:1699 msgid "Add Internal Price Break" msgstr "" @@ -5035,9 +5131,9 @@ msgstr "" msgid "Set category for the following parts" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:588 -#: templates/js/translated/part.js:491 templates/js/translated/part.js:1115 -#: templates/js/translated/part.js:1302 +#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:600 +#: templates/js/translated/part.js:497 templates/js/translated/part.js:1122 +#: templates/js/translated/part.js:1309 msgid "No Stock" msgstr "" @@ -5054,116 +5150,116 @@ msgstr "" msgid "Create a new variant of template '%(full_name)s'." msgstr "" -#: part/templatetags/inventree_extras.py:116 +#: part/templatetags/inventree_extras.py:125 msgid "Unknown database" msgstr "" -#: part/views.py:92 +#: part/views.py:93 msgid "Set Part Category" msgstr "" -#: part/views.py:142 +#: part/views.py:143 #, python-brace-format msgid "Set category for {n} parts" msgstr "" -#: part/views.py:214 +#: part/views.py:215 msgid "Match References" msgstr "" -#: part/views.py:502 +#: part/views.py:511 msgid "None" msgstr "" -#: part/views.py:561 +#: part/views.py:570 msgid "Part QR Code" msgstr "" -#: part/views.py:663 +#: part/views.py:672 msgid "Select Part Image" msgstr "" -#: part/views.py:689 +#: part/views.py:698 msgid "Updated part image" msgstr "" -#: part/views.py:692 +#: part/views.py:701 msgid "Part image not found" msgstr "" -#: part/views.py:766 +#: part/views.py:775 msgid "Match Parts" msgstr "" -#: part/views.py:1101 +#: part/views.py:1110 msgid "Export Bill of Materials" msgstr "" -#: part/views.py:1150 +#: part/views.py:1159 msgid "Confirm Part Deletion" msgstr "" -#: part/views.py:1157 +#: part/views.py:1166 msgid "Part was deleted" msgstr "" -#: part/views.py:1166 +#: part/views.py:1175 msgid "Part Pricing" msgstr "" -#: part/views.py:1315 +#: part/views.py:1324 msgid "Create Part Parameter Template" msgstr "" -#: part/views.py:1325 +#: part/views.py:1334 msgid "Edit Part Parameter Template" msgstr "" -#: part/views.py:1332 +#: part/views.py:1341 msgid "Delete Part Parameter Template" msgstr "" -#: part/views.py:1391 templates/js/translated/part.js:315 +#: part/views.py:1400 templates/js/translated/part.js:315 msgid "Edit Part Category" msgstr "" -#: part/views.py:1429 +#: part/views.py:1438 msgid "Delete Part Category" msgstr "" -#: part/views.py:1435 +#: part/views.py:1444 msgid "Part category was deleted" msgstr "" -#: part/views.py:1444 +#: part/views.py:1453 msgid "Create Category Parameter Template" msgstr "" -#: part/views.py:1545 +#: part/views.py:1554 msgid "Edit Category Parameter Template" msgstr "" -#: part/views.py:1601 +#: part/views.py:1610 msgid "Delete Category Parameter Template" msgstr "" -#: part/views.py:1623 +#: part/views.py:1632 msgid "Added new price break" msgstr "" -#: part/views.py:1699 +#: part/views.py:1708 msgid "Edit Internal Price Break" msgstr "" -#: part/views.py:1707 +#: part/views.py:1716 msgid "Delete Internal Price Break" msgstr "" -#: plugin/integration.py:124 +#: plugin/integration.py:138 msgid "No author found" msgstr "" -#: plugin/integration.py:136 +#: plugin/integration.py:152 msgid "No date found" msgstr "" @@ -5191,7 +5287,7 @@ msgstr "" msgid "Is the plugin active" msgstr "" -#: plugin/models.py:195 +#: plugin/models.py:199 msgid "Plugin" msgstr "" @@ -5357,12 +5453,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:517 stock/templates/stock/item_base.html:156 +#: stock/models.py:519 stock/templates/stock/item_base.html:156 #: templates/js/translated/build.js:293 templates/js/translated/build.js:697 #: templates/js/translated/build.js:1073 #: templates/js/translated/model_renderers.js:95 #: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 -#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:415 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:423 msgid "Serial Number" msgstr "" @@ -5371,19 +5467,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1948 +#: stock/models.py:1976 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1954 +#: stock/models.py:1982 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin.html:50 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2367 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2525 msgid "Date" msgstr "" @@ -5396,23 +5492,27 @@ msgid "Fail" msgstr "" #: report/templates/report/inventree_test_report_base.html:123 -#: stock/templates/stock/stock_sidebar.html:12 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:578 templates/js/translated/stock.js:748 -#: templates/js/translated/stock.js:2627 +#: templates/js/translated/stock.js:586 templates/js/translated/stock.js:756 +#: templates/js/translated/stock.js:2785 msgid "Serial" msgstr "" -#: stock/api.py:478 +#: stock/api.py:476 msgid "Quantity is required" msgstr "" -#: stock/forms.py:77 stock/forms.py:251 stock/models.py:574 +#: stock/api.py:483 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:576 #: stock/templates/stock/item_base.html:193 -#: templates/js/translated/stock.js:1701 +#: templates/js/translated/stock.js:1709 msgid "Expiry Date" msgstr "" @@ -5460,228 +5560,228 @@ msgstr "" msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:611 +#: stock/models.py:62 stock/models.py:613 #: stock/templates/stock/item_base.html:416 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:612 +#: stock/models.py:63 stock/models.py:614 msgid "Select Owner" msgstr "" -#: stock/models.py:336 +#: stock/models.py:338 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:372 +#: stock/models.py:374 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:382 stock/models.py:391 +#: stock/models.py:384 stock/models.py:393 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:383 +#: stock/models.py:385 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:405 +#: stock/models.py:407 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:411 +#: stock/models.py:413 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:418 +#: stock/models.py:420 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:461 +#: stock/models.py:463 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:470 +#: stock/models.py:472 msgid "Base part" msgstr "" -#: stock/models.py:478 +#: stock/models.py:480 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:484 stock/templates/stock/location.html:16 +#: stock/models.py:486 stock/templates/stock/location.html:16 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:494 +#: stock/models.py:496 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:500 stock/templates/stock/item_base.html:298 +#: stock/models.py:502 stock/templates/stock/item_base.html:298 msgid "Installed In" msgstr "" -#: stock/models.py:503 +#: stock/models.py:505 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:519 +#: stock/models.py:521 msgid "Serial number for this item" msgstr "" -#: stock/models.py:533 +#: stock/models.py:535 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:537 +#: stock/models.py:539 msgid "Stock Quantity" msgstr "" -#: stock/models.py:546 +#: stock/models.py:548 msgid "Source Build" msgstr "" -#: stock/models.py:548 +#: stock/models.py:550 msgid "Build for this stock item" msgstr "" -#: stock/models.py:559 +#: stock/models.py:561 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:562 +#: stock/models.py:564 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:568 +#: stock/models.py:570 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:575 +#: stock/models.py:577 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete on deplete" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:598 stock/templates/stock/item.html:111 +#: stock/models.py:600 stock/templates/stock/item.html:128 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:607 +#: stock/models.py:609 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1096 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1074 +#: stock/models.py:1102 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1080 +#: stock/models.py:1108 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1083 +#: stock/models.py:1111 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1086 +#: stock/models.py:1114 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1093 +#: stock/models.py:1121 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1164 +#: stock/models.py:1192 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1195 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1170 +#: stock/models.py:1198 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1173 +#: stock/models.py:1201 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1176 +#: stock/models.py:1204 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1179 +#: stock/models.py:1207 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1186 stock/serializers.py:774 +#: stock/models.py:1214 stock/serializers.py:775 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1190 +#: stock/models.py:1218 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1222 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1198 +#: stock/models.py:1226 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1369 +#: stock/models.py:1397 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1868 +#: stock/models.py:1896 msgid "Entry notes" msgstr "" -#: stock/models.py:1925 +#: stock/models.py:1953 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1931 +#: stock/models.py:1959 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1949 +#: stock/models.py:1977 msgid "Test name" msgstr "" -#: stock/models.py:1955 templates/js/translated/table_filters.js:271 +#: stock/models.py:1983 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1961 +#: stock/models.py:1989 msgid "Test output value" msgstr "" -#: stock/models.py:1968 +#: stock/models.py:1996 msgid "Test result attachment" msgstr "" -#: stock/models.py:1974 +#: stock/models.py:2002 msgid "Test notes" msgstr "" @@ -5706,7 +5806,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:326 stock/serializers.py:731 stock/serializers.py:972 +#: stock/serializers.py:326 stock/serializers.py:732 stock/serializers.py:973 msgid "Destination stock location" msgstr "" @@ -5718,63 +5818,63 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:589 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:592 +#: stock/serializers.py:593 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:597 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:626 +#: stock/serializers.py:627 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:632 +#: stock/serializers.py:633 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:640 +#: stock/serializers.py:641 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:650 stock/serializers.py:880 +#: stock/serializers.py:651 stock/serializers.py:881 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:738 +#: stock/serializers.py:739 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:743 +#: stock/serializers.py:744 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:744 +#: stock/serializers.py:745 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:749 +#: stock/serializers.py:750 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:750 +#: stock/serializers.py:751 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:760 +#: stock/serializers.py:761 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:842 +#: stock/serializers.py:843 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:870 +#: stock/serializers.py:871 msgid "Stock transaction notes" msgstr "" @@ -5787,47 +5887,51 @@ msgid "New Entry" msgstr "" #: stock/templates/stock/item.html:48 -msgid "Child Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:55 -msgid "This stock item does not have any child items" +msgid "Stock Item Allocations" msgstr "" #: stock/templates/stock/item.html:64 -#: stock/templates/stock/stock_sidebar.html:8 -msgid "Test Data" -msgstr "" - -#: stock/templates/stock/item.html:68 stock/templates/stock/item_base.html:57 -msgid "Test Report" +msgid "Child Stock Items" msgstr "" #: stock/templates/stock/item.html:72 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item.html:81 +#: stock/templates/stock/stock_sidebar.html:12 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:57 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item.html:89 msgid "Delete Test Data" msgstr "" -#: stock/templates/stock/item.html:76 +#: stock/templates/stock/item.html:93 msgid "Add Test Data" msgstr "" -#: stock/templates/stock/item.html:133 +#: stock/templates/stock/item.html:150 msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:482 +#: stock/templates/stock/item.html:154 stock/views.py:482 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:279 stock/templates/stock/item.html:304 +#: stock/templates/stock/item.html:309 stock/templates/stock/item.html:334 msgid "Add Test Result" msgstr "" -#: stock/templates/stock/item.html:324 +#: stock/templates/stock/item.html:354 msgid "Edit Test Result" msgstr "" -#: stock/templates/stock/item.html:338 +#: stock/templates/stock/item.html:368 msgid "Delete Test Result" msgstr "" @@ -5952,7 +6056,7 @@ msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:206 -#: templates/js/translated/stock.js:1714 +#: templates/js/translated/stock.js:1722 msgid "Last Updated" msgstr "" @@ -6111,7 +6215,7 @@ msgid "Sublocations" msgstr "" #: stock/templates/stock/location.html:146 templates/InvenTree/search.html:164 -#: templates/stats.html:97 users/models.py:42 +#: templates/stats.html:109 users/models.py:42 msgid "Stock Locations" msgstr "" @@ -6135,7 +6239,7 @@ msgstr "" msgid "Stock Tracking" msgstr "" -#: stock/templates/stock/stock_sidebar.html:16 +#: stock/templates/stock/stock_sidebar.html:20 msgid "Child Items" msgstr "" @@ -6164,7 +6268,7 @@ msgstr "" msgid "Are you sure you want to delete this stock tracking entry?" msgstr "" -#: stock/views.py:162 +#: stock/views.py:162 templates/js/translated/stock.js:139 msgid "Edit Stock Location" msgstr "" @@ -6204,7 +6308,7 @@ msgstr "" msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:727 templates/js/translated/stock.js:1066 +#: stock/views.py:727 templates/js/translated/stock.js:1074 msgid "Confirm stock adjustment" msgstr "" @@ -6212,7 +6316,7 @@ msgstr "" msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:324 +#: stock/views.py:760 templates/js/translated/stock.js:332 msgid "Edit Stock Item" msgstr "" @@ -6224,7 +6328,7 @@ msgstr "" msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1153 templates/js/translated/stock.js:304 +#: stock/views.py:1153 templates/js/translated/stock.js:312 msgid "Duplicate Stock Item" msgstr "" @@ -6268,6 +6372,18 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/500.html:5 templates/500.html:11 +msgid "Internal Server Error" +msgstr "" + +#: templates/500.html:14 +msgid "The InvenTree server raised an internal error" +msgstr "" + +#: templates/500.html:15 +msgid "Refer to the error log in the admin interface for further details" +msgstr "" + #: templates/503.html:10 templates/503.html:35 msgid "Site is in Maintenance" msgstr "" @@ -6390,7 +6506,7 @@ msgid "Signup" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:113 msgid "Settings" msgstr "" @@ -6431,43 +6547,43 @@ msgstr "" msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:32 +#: templates/InvenTree/settings/plugin.html:33 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:37 +#: templates/InvenTree/settings/plugin.html:38 #: templates/js/translated/plugin.js:15 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: templates/InvenTree/settings/plugin.html:47 templates/navbar.html:111 #: users/models.py:39 msgid "Admin" msgstr "" -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:49 #: templates/InvenTree/settings/plugin_settings.html:28 msgid "Author" msgstr "" -#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin_settings.html:43 msgid "Version" msgstr "" -#: templates/InvenTree/settings/plugin.html:91 +#: templates/InvenTree/settings/plugin.html:92 msgid "Inactive plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:114 +#: templates/InvenTree/settings/plugin.html:115 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:123 +#: templates/InvenTree/settings/plugin.html:124 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:125 +#: templates/InvenTree/settings/plugin.html:126 msgid "Message" msgstr "" @@ -6555,37 +6671,37 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:75 +#: templates/InvenTree/settings/settings.html:78 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:77 +#: templates/InvenTree/settings/settings.html:80 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:79 +#: templates/InvenTree/settings/settings.html:82 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:168 +#: templates/InvenTree/settings/settings.html:171 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:190 -#: templates/InvenTree/settings/settings.html:289 +#: templates/InvenTree/settings/settings.html:193 +#: templates/InvenTree/settings/settings.html:292 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:191 -#: templates/InvenTree/settings/settings.html:290 +#: templates/InvenTree/settings/settings.html:194 +#: templates/InvenTree/settings/settings.html:293 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:272 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:273 +#: templates/InvenTree/settings/settings.html:276 msgid "ID" msgstr "" @@ -6763,124 +6879,105 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:219 +#: templates/InvenTree/settings/user.html:220 +msgid "Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:226 +msgid "Log out active sessions (except this one)" +msgstr "" + +#: templates/InvenTree/settings/user.html:227 +msgid "Log Out Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:236 +msgid "unknown on unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:237 +msgid "unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:241 +msgid "IP Address" +msgstr "" + +#: templates/InvenTree/settings/user.html:242 +msgid "Device" +msgstr "" + +#: templates/InvenTree/settings/user.html:243 +msgid "Last Activity" +msgstr "" + +#: templates/InvenTree/settings/user.html:252 +#, python-format +msgid "%(time)s ago (this session)" +msgstr "" + +#: templates/InvenTree/settings/user.html:254 +#, python-format +msgid "%(time)s ago" +msgstr "" + +#: templates/InvenTree/settings/user.html:266 +msgid "Do you really want to remove the selected email address?" +msgstr "" + #: templates/InvenTree/settings/user_display.html:25 msgid "Theme Settings" msgstr "" -#: templates/InvenTree/settings/user.html:227 #: templates/InvenTree/settings/user_display.html:35 msgid "Select theme" msgstr "" -#: templates/InvenTree/settings/user.html:237 #: templates/InvenTree/settings/user_display.html:46 msgid "Set Theme" msgstr "" -#: templates/InvenTree/settings/user.html:246 #: templates/InvenTree/settings/user_display.html:54 msgid "Language Settings" msgstr "" -#: templates/InvenTree/settings/user.html:254 #: templates/InvenTree/settings/user_display.html:63 msgid "Select language" msgstr "" -#: templates/InvenTree/settings/user.html:270 #: templates/InvenTree/settings/user_display.html:79 #, python-format msgid "%(lang_translated)s%% translated" msgstr "" -#: templates/InvenTree/settings/user.html:272 #: templates/InvenTree/settings/user_display.html:81 msgid "No translations available" msgstr "" -#: templates/InvenTree/settings/user.html:279 #: templates/InvenTree/settings/user_display.html:88 msgid "Set Language" msgstr "" -#: templates/InvenTree/settings/user.html:281 #: templates/InvenTree/settings/user_display.html:91 msgid "Some languages are not complete" msgstr "" -#: templates/InvenTree/settings/user.html:283 #: templates/InvenTree/settings/user_display.html:93 msgid "Show only sufficent" msgstr "" -#: templates/InvenTree/settings/user.html:285 +#: templates/InvenTree/settings/user_display.html:95 +msgid "and hidden." +msgstr "" + #: templates/InvenTree/settings/user_display.html:95 msgid "Show them too" msgstr "" -#: templates/InvenTree/settings/user.html:292 #: templates/InvenTree/settings/user_display.html:101 msgid "Help the translation efforts!" msgstr "" -#: templates/InvenTree/settings/user.html:293 -#, python-format -msgid "Native language translation of the\n" -" InvenTree web application is community contributed via crowdin. Contributions are\n" -" welcomed and encouraged." -msgstr "" - -#: templates/InvenTree/settings/user.html:302 -msgid "Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:308 -msgid "Log out active sessions (except this one)" -msgstr "" - -#: templates/InvenTree/settings/user.html:309 -msgid "Log Out Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:318 -msgid "unknown on unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:319 -msgid "unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:323 -msgid "IP Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:324 -msgid "Device" -msgstr "" - -#: templates/InvenTree/settings/user.html:325 -msgid "Last Activity" -msgstr "" - -#: templates/InvenTree/settings/user.html:334 -#, python-format -msgid "%(time)s ago (this session)" -msgstr "" - -#: templates/InvenTree/settings/user.html:336 -#, python-format -msgid "%(time)s ago" -msgstr "" - -#: templates/InvenTree/settings/user.html:348 -msgid "Do you really want to remove the selected email address?" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:95 -msgid "and hidden." -msgstr "" - #: templates/InvenTree/settings/user_display.html:102 #, python-format msgid "Native language translation of the InvenTree web application is community contributed via crowdin. Contributions are welcomed and encouraged." @@ -6899,9 +6996,9 @@ msgid "InvenTree Version Information" msgstr "" #: templates/about.html:11 templates/about.html:105 -#: templates/js/translated/bom.js:395 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:573 templates/js/translated/modals.js:667 -#: templates/js/translated/modals.js:970 templates/modals.html:15 +#: templates/js/translated/bom.js:407 templates/js/translated/modals.js:53 +#: templates/js/translated/modals.js:584 templates/js/translated/modals.js:678 +#: templates/js/translated/modals.js:983 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -7178,13 +7275,13 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1103 +#: templates/js/translated/bom.js:1117 msgid "Required Quantity" msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:579 templates/js/translated/build.js:1189 +#: templates/js/translated/bom.js:591 templates/js/translated/build.js:1189 #: templates/js/translated/build.js:1810 #: templates/js/translated/table_filters.js:178 msgid "Available" @@ -7208,10 +7305,6 @@ msgstr "" msgid "Click on the following link to view this part" msgstr "" -#: templates/email/low_stock_notification.html:17 -msgid "Total Stock" -msgstr "" - #: templates/email/low_stock_notification.html:19 msgid "Minimum Quantity" msgstr "" @@ -7232,11 +7325,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1040 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1053 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1041 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1054 msgid "No response from the InvenTree server" msgstr "" @@ -7248,27 +7341,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1063 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1051 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1064 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1068 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1056 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1069 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1073 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1061 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1074 msgid "The requested resource could not be located on the server" msgstr "" @@ -7280,11 +7373,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1065 +#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1078 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1066 +#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1079 msgid "Connection timeout while requesting data from server" msgstr "" @@ -7353,7 +7446,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "Invalid server response" msgstr "" @@ -7381,7 +7474,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1018 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1026 msgid "Remove stock item" msgstr "" @@ -7428,12 +7521,12 @@ msgid "Download BOM Template" msgstr "" #: templates/js/translated/bom.js:39 templates/js/translated/bom.js:73 -#: templates/js/translated/order.js:369 templates/js/translated/stock.js:510 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:518 msgid "Format" msgstr "" #: templates/js/translated/bom.js:40 templates/js/translated/bom.js:74 -#: templates/js/translated/order.js:370 templates/js/translated/stock.js:511 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:519 msgid "Select file format" msgstr "" @@ -7489,87 +7582,87 @@ msgstr "" msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:340 -msgid "Select and add a new variant item using the input below" +#: templates/js/translated/bom.js:352 +msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:351 +#: templates/js/translated/bom.js:363 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:357 +#: templates/js/translated/bom.js:369 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:396 +#: templates/js/translated/bom.js:408 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:397 +#: templates/js/translated/bom.js:409 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:516 +#: templates/js/translated/bom.js:528 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:520 templates/js/translated/build.js:1171 +#: templates/js/translated/bom.js:532 templates/js/translated/build.js:1171 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:525 +#: templates/js/translated/bom.js:537 msgid "Open subassembly" msgstr "" -#: templates/js/translated/bom.js:597 +#: templates/js/translated/bom.js:609 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:612 +#: templates/js/translated/bom.js:624 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:619 +#: templates/js/translated/bom.js:631 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:668 templates/js/translated/bom.js:757 +#: templates/js/translated/bom.js:680 templates/js/translated/bom.js:769 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:728 +#: templates/js/translated/bom.js:740 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:742 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:732 +#: templates/js/translated/bom.js:744 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:734 templates/js/translated/bom.js:908 +#: templates/js/translated/bom.js:746 templates/js/translated/bom.js:920 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:891 +#: templates/js/translated/bom.js:748 templates/js/translated/bom.js:903 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:830 templates/js/translated/build.js:915 +#: templates/js/translated/bom.js:842 templates/js/translated/build.js:915 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:886 +#: templates/js/translated/bom.js:898 msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:1086 templates/js/translated/build.js:1155 +#: templates/js/translated/bom.js:1100 templates/js/translated/build.js:1155 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1108 +#: templates/js/translated/bom.js:1122 msgid "Inherited from parent BOM" msgstr "" @@ -7725,9 +7818,9 @@ msgstr "" msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1206 -#: templates/js/translated/part.js:1617 templates/js/translated/stock.js:1512 -#: templates/js/translated/stock.js:2321 +#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:1624 templates/js/translated/stock.js:1520 +#: templates/js/translated/stock.js:2479 msgid "Select" msgstr "" @@ -7735,7 +7828,7 @@ msgstr "" msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2540 +#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2698 msgid "No user information" msgstr "" @@ -7808,34 +7901,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:500 -#: templates/js/translated/company.js:757 templates/js/translated/part.js:511 -#: templates/js/translated/part.js:596 +#: templates/js/translated/company.js:757 templates/js/translated/part.js:517 +#: templates/js/translated/part.js:602 msgid "Template part" msgstr "" #: templates/js/translated/company.js:504 -#: templates/js/translated/company.js:761 templates/js/translated/part.js:515 -#: templates/js/translated/part.js:600 +#: templates/js/translated/company.js:761 templates/js/translated/part.js:521 +#: templates/js/translated/part.js:606 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:631 templates/js/translated/part.js:690 +#: templates/js/translated/company.js:631 templates/js/translated/part.js:696 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:668 templates/js/translated/part.js:732 +#: templates/js/translated/company.js:668 templates/js/translated/part.js:738 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:669 templates/js/translated/part.js:733 +#: templates/js/translated/company.js:669 templates/js/translated/part.js:739 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:688 templates/js/translated/part.js:750 +#: templates/js/translated/company.js:688 templates/js/translated/part.js:756 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:699 templates/js/translated/part.js:762 +#: templates/js/translated/company.js:699 templates/js/translated/part.js:768 msgid "Delete Parameter" msgstr "" @@ -7844,12 +7937,12 @@ msgid "No supplier parts found" msgstr "" #: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:420 +#: templates/js/translated/filters.js:429 msgid "true" msgstr "" #: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:421 +#: templates/js/translated/filters.js:430 msgid "false" msgstr "" @@ -7869,7 +7962,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:329 +#: templates/js/translated/filters.js:338 msgid "Create filter" msgstr "" @@ -7898,20 +7991,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1080 templates/modals.html:19 +#: templates/js/translated/forms.js:1082 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1471 +#: templates/js/translated/forms.js:1487 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1675 +#: templates/js/translated/forms.js:1691 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1895 +#: templates/js/translated/forms.js:1930 msgid "Clear input" msgstr "" @@ -7924,7 +8017,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1042 +#: templates/js/translated/stock.js:1050 msgid "Select Stock Items" msgstr "" @@ -7974,12 +8067,12 @@ msgid "Select Label Template" msgstr "" #: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 -#: templates/js/translated/modals.js:599 +#: templates/js/translated/modals.js:610 msgid "Cancel" msgstr "" #: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:666 templates/js/translated/modals.js:969 +#: templates/js/translated/modals.js:677 templates/js/translated/modals.js:982 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" @@ -7988,47 +8081,47 @@ msgstr "" msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:381 +#: templates/js/translated/modals.js:392 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:540 +#: templates/js/translated/modals.js:551 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:598 +#: templates/js/translated/modals.js:609 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:655 +#: templates/js/translated/modals.js:666 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:933 +#: templates/js/translated/modals.js:946 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1045 +#: templates/js/translated/modals.js:1058 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1046 +#: templates/js/translated/modals.js:1059 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1069 +#: templates/js/translated/modals.js:1082 msgid "Error requesting form data" msgstr "" @@ -8052,23 +8145,24 @@ msgstr "" msgid "Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:236 +#: templates/js/translated/model_renderers.js:249 +#: templates/js/translated/model_renderers.js:270 msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:253 +#: templates/js/translated/model_renderers.js:287 msgid "Shipment ID" msgstr "" -#: templates/js/translated/model_renderers.js:273 +#: templates/js/translated/model_renderers.js:307 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:310 +#: templates/js/translated/model_renderers.js:344 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:339 +#: templates/js/translated/model_renderers.js:373 msgid "Supplier Part ID" msgstr "" @@ -8116,7 +8210,7 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2123 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2131 msgid "Stock Status" msgstr "" @@ -8140,7 +8234,7 @@ msgstr "" msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:790 templates/js/translated/part.js:803 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:809 msgid "No purchase orders found" msgstr "" @@ -8165,7 +8259,7 @@ msgid "Total" msgstr "" #: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 -#: templates/js/translated/part.js:1834 templates/js/translated/part.js:2045 +#: templates/js/translated/part.js:1841 templates/js/translated/part.js:2052 msgid "Unit Price" msgstr "" @@ -8181,7 +8275,7 @@ msgstr "" msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1166 templates/js/translated/part.js:935 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:942 msgid "Receive line item" msgstr "" @@ -8250,7 +8344,7 @@ msgid "Delete Stock Allocation" msgstr "" #: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 -#: templates/js/translated/stock.js:1428 +#: templates/js/translated/stock.js:1436 msgid "Shipped to customer" msgstr "" @@ -8378,144 +8472,148 @@ msgstr "" msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:412 +#: templates/js/translated/part.js:351 +msgid "Create Part Variant" +msgstr "" + +#: templates/js/translated/part.js:418 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:414 +#: templates/js/translated/part.js:420 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:419 +#: templates/js/translated/part.js:425 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:421 +#: templates/js/translated/part.js:427 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:444 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:448 +#: templates/js/translated/part.js:454 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:451 +#: templates/js/translated/part.js:457 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:481 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:503 templates/js/translated/part.js:588 +#: templates/js/translated/part.js:509 templates/js/translated/part.js:594 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:507 templates/js/translated/part.js:592 +#: templates/js/translated/part.js:513 templates/js/translated/part.js:598 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:519 +#: templates/js/translated/part.js:525 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:523 +#: templates/js/translated/part.js:529 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:638 +#: templates/js/translated/part.js:644 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1005 +#: templates/js/translated/part.js:1012 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1029 +#: templates/js/translated/part.js:1036 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1096 templates/js/translated/part.js:1356 +#: templates/js/translated/part.js:1103 templates/js/translated/part.js:1363 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1266 +#: templates/js/translated/part.js:1273 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1289 +#: templates/js/translated/part.js:1296 #: templates/js/translated/table_filters.js:430 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:1380 templates/js/translated/part.js:1552 -#: templates/js/translated/stock.js:2282 +#: templates/js/translated/part.js:1387 templates/js/translated/part.js:1559 +#: templates/js/translated/stock.js:2440 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1396 +#: templates/js/translated/part.js:1403 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1571 templates/js/translated/stock.js:2301 +#: templates/js/translated/part.js:1578 templates/js/translated/stock.js:2459 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:1635 +#: templates/js/translated/part.js:1642 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1649 templates/js/translated/stock.js:2345 +#: templates/js/translated/part.js:1656 templates/js/translated/stock.js:2503 msgid "Path" msgstr "" -#: templates/js/translated/part.js:1693 +#: templates/js/translated/part.js:1700 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1744 templates/js/translated/stock.js:1234 +#: templates/js/translated/part.js:1751 templates/js/translated/stock.js:1242 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1745 templates/js/translated/stock.js:1235 +#: templates/js/translated/part.js:1752 templates/js/translated/stock.js:1243 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:1751 +#: templates/js/translated/part.js:1758 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:1773 +#: templates/js/translated/part.js:1780 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:1787 +#: templates/js/translated/part.js:1794 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:1812 +#: templates/js/translated/part.js:1819 #, python-brace-format msgid "No ${human_name} information found" msgstr "" -#: templates/js/translated/part.js:1867 +#: templates/js/translated/part.js:1874 #, python-brace-format msgid "Edit ${human_name}" msgstr "" -#: templates/js/translated/part.js:1868 +#: templates/js/translated/part.js:1875 #, python-brace-format msgid "Delete ${human_name}" msgstr "" -#: templates/js/translated/part.js:1969 +#: templates/js/translated/part.js:1976 msgid "Single Price" msgstr "" -#: templates/js/translated/part.js:1988 +#: templates/js/translated/part.js:1995 msgid "Single Price Difference" msgstr "" @@ -8589,340 +8687,344 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:74 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:181 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:93 templates/js/translated/stock.js:175 +#: templates/js/translated/stock.js:94 templates/js/translated/stock.js:183 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:101 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:110 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:146 +#: templates/js/translated/stock.js:154 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:186 +#: templates/js/translated/stock.js:194 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:225 +#: templates/js/translated/stock.js:233 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:231 +#: templates/js/translated/stock.js:239 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:382 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:387 +#: templates/js/translated/stock.js:395 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:420 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:416 templates/js/translated/stock.js:417 +#: templates/js/translated/stock.js:424 templates/js/translated/stock.js:425 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:433 +#: templates/js/translated/stock.js:441 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:453 +#: templates/js/translated/stock.js:461 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:462 +#: templates/js/translated/stock.js:470 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:515 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:526 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:519 +#: templates/js/translated/stock.js:527 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:628 +#: templates/js/translated/stock.js:636 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:629 +#: templates/js/translated/stock.js:637 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:714 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:715 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:709 +#: templates/js/translated/stock.js:717 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:710 +#: templates/js/translated/stock.js:718 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:796 +#: templates/js/translated/stock.js:804 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:797 +#: templates/js/translated/stock.js:805 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:892 +#: templates/js/translated/stock.js:900 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:893 +#: templates/js/translated/stock.js:901 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:899 +#: templates/js/translated/stock.js:907 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:900 +#: templates/js/translated/stock.js:908 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:904 +#: templates/js/translated/stock.js:912 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:905 +#: templates/js/translated/stock.js:913 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:909 +#: templates/js/translated/stock.js:917 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:910 users/models.py:206 +#: templates/js/translated/stock.js:918 users/models.py:208 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:914 templates/stock_table.html:58 +#: templates/js/translated/stock.js:922 templates/stock_table.html:58 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1051 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1201 +#: templates/js/translated/stock.js:1209 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1203 +#: templates/js/translated/stock.js:1211 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1208 +#: templates/js/translated/stock.js:1216 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1230 +#: templates/js/translated/stock.js:1238 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1256 +#: templates/js/translated/stock.js:1264 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1313 +#: templates/js/translated/stock.js:1321 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1428 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1424 +#: templates/js/translated/stock.js:1432 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1432 +#: templates/js/translated/stock.js:1440 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1438 +#: templates/js/translated/stock.js:1446 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1604 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1601 +#: templates/js/translated/stock.js:1609 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1604 +#: templates/js/translated/stock.js:1612 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1608 +#: templates/js/translated/stock.js:1616 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1610 +#: templates/js/translated/stock.js:1618 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1616 +#: templates/js/translated/stock.js:1624 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1618 +#: templates/js/translated/stock.js:1626 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1620 +#: templates/js/translated/stock.js:1628 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1633 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1632 +#: templates/js/translated/stock.js:1640 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1634 +#: templates/js/translated/stock.js:1642 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1636 +#: templates/js/translated/stock.js:1644 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1648 #: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1690 +#: templates/js/translated/stock.js:1698 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1763 +#: templates/js/translated/stock.js:1771 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1809 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1822 templates/js/translated/stock.js:1870 +#: templates/js/translated/stock.js:1830 templates/js/translated/stock.js:1878 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1910 +#: templates/js/translated/stock.js:1918 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1937 +#: templates/js/translated/stock.js:1945 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1939 +#: templates/js/translated/stock.js:1947 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:2138 +#: templates/js/translated/stock.js:2146 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2152 +#: templates/js/translated/stock.js:2160 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2153 +#: templates/js/translated/stock.js:2161 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2377 +#: templates/js/translated/stock.js:2340 +msgid "Allocated Quantity" +msgstr "" + +#: templates/js/translated/stock.js:2535 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2399 +#: templates/js/translated/stock.js:2557 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2424 +#: templates/js/translated/stock.js:2582 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2443 +#: templates/js/translated/stock.js:2601 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2462 +#: templates/js/translated/stock.js:2620 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2480 +#: templates/js/translated/stock.js:2638 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2503 +#: templates/js/translated/stock.js:2661 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2511 +#: templates/js/translated/stock.js:2669 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2552 +#: templates/js/translated/stock.js:2710 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2553 +#: templates/js/translated/stock.js:2711 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2604 +#: templates/js/translated/stock.js:2762 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2655 +#: templates/js/translated/stock.js:2813 msgid "Uninstall Stock Item" msgstr "" @@ -9194,11 +9296,11 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:113 +#: templates/navbar.html:114 msgid "Logout" msgstr "" -#: templates/navbar.html:115 +#: templates/navbar.html:116 msgid "Login" msgstr "" @@ -9246,31 +9348,43 @@ msgstr "" msgid "Server is deployed using docker" msgstr "" -#: templates/stats.html:40 -msgid "Server status" +#: templates/stats.html:39 +msgid "Plugin Support" msgstr "" #: templates/stats.html:43 -msgid "Healthy" +msgid "Plugin support enabled" msgstr "" #: templates/stats.html:45 -msgid "Issues detected" +msgid "Plugin support disabled" msgstr "" #: templates/stats.html:52 -msgid "Background Worker" +msgid "Server status" msgstr "" #: templates/stats.html:55 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:57 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:64 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:67 msgid "Background worker not running" msgstr "" -#: templates/stats.html:63 +#: templates/stats.html:75 msgid "Email Settings" msgstr "" -#: templates/stats.html:66 +#: templates/stats.html:78 msgid "Email settings not configured" msgstr "" @@ -9366,35 +9480,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:193 +#: users/models.py:195 msgid "Permission set" msgstr "" -#: users/models.py:201 +#: users/models.py:203 msgid "Group" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "View" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to view items" msgstr "" -#: users/models.py:206 +#: users/models.py:208 msgid "Permission to add items" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Change" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Permissions to edit items" msgstr "" -#: users/models.py:210 +#: users/models.py:212 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/sv/LC_MESSAGES/django.po b/InvenTree/locale/sv/LC_MESSAGES/django.po index 01ce4d0e48..9779928cb1 100644 --- a/InvenTree/locale/sv/LC_MESSAGES/django.po +++ b/InvenTree/locale/sv/LC_MESSAGES/django.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-10 03:54+0000\n" -"PO-Revision-Date: 2022-01-10 03:57\n" +"POT-Creation-Date: 2022-01-29 00:17+0000\n" +"PO-Revision-Date: 2022-01-29 01:11\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" @@ -18,15 +18,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 138\n" -#: InvenTree/api.py:64 +#: InvenTree/api.py:55 msgid "API endpoint not found" msgstr "API-slutpunkt hittades inte" -#: InvenTree/api.py:110 +#: InvenTree/api.py:101 msgid "No action specified" msgstr "Ingen åtgärd specificerad" -#: InvenTree/api.py:124 +#: InvenTree/api.py:116 msgid "No matching action found" msgstr "Ingen matchande åtgärd hittades" @@ -80,41 +80,41 @@ msgstr "" msgid "You must type the same email each time." msgstr "" -#: InvenTree/helpers.py:437 +#: InvenTree/helpers.py:439 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:444 order/models.py:279 order/models.py:420 +#: InvenTree/helpers.py:446 order/models.py:282 order/models.py:425 #: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "Ogiltigt antal angivet" -#: InvenTree/helpers.py:447 +#: InvenTree/helpers.py:449 msgid "Empty serial number string" msgstr "Tom serienummersträng" -#: InvenTree/helpers.py:469 InvenTree/helpers.py:472 InvenTree/helpers.py:475 -#: InvenTree/helpers.py:500 +#: InvenTree/helpers.py:471 InvenTree/helpers.py:474 InvenTree/helpers.py:477 +#: InvenTree/helpers.py:502 #, python-brace-format msgid "Invalid group: {g}" msgstr "Ogiltig grupp: {g}" -#: InvenTree/helpers.py:510 +#: InvenTree/helpers.py:512 #, python-brace-format msgid "Invalid group {group}" msgstr "" -#: InvenTree/helpers.py:516 +#: InvenTree/helpers.py:518 #, python-brace-format msgid "Invalid/no group {group}" msgstr "" -#: InvenTree/helpers.py:522 +#: InvenTree/helpers.py:524 msgid "No serial numbers found" msgstr "Inga serienummer hittades" -#: InvenTree/helpers.py:526 +#: InvenTree/helpers.py:528 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" @@ -127,7 +127,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1967 +#: InvenTree/models.py:132 stock/models.py:1995 #: templates/js/translated/attachment.js:119 msgid "Attachment" msgstr "Bilaga" @@ -137,15 +137,15 @@ msgid "Select file to attach" msgstr "Välj fil att bifoga" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:124 part/models.py:828 +#: company/models.py:564 order/models.py:127 part/models.py:830 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:540 -#: templates/js/translated/company.js:829 templates/js/translated/part.js:1317 +#: templates/js/translated/company.js:829 templates/js/translated/part.js:1324 msgid "Link" msgstr "" -#: InvenTree/models.py:140 build/models.py:330 part/models.py:829 -#: stock/models.py:527 +#: InvenTree/models.py:140 build/models.py:332 part/models.py:831 +#: stock/models.py:529 msgid "Link to external URL" msgstr "" @@ -157,10 +157,11 @@ msgstr "Kommentar" msgid "File comment" msgstr "Fil kommentar" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 -#: common/models.py:1214 part/models.py:2258 part/models.py:2278 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1223 +#: common/models.py:1224 common/models.py:1452 common/models.py:1453 +#: part/models.py:2265 part/models.py:2285 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2534 +#: templates/js/translated/stock.js:2692 msgid "User" msgstr "Användare" @@ -197,42 +198,42 @@ msgstr "Fel vid namnbyte av fil" msgid "Invalid choice" msgstr "Ogiltigt val" -#: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 -#: label/models.py:112 part/models.py:772 part/models.py:2442 -#: plugin/models.py:40 report/models.py:181 +#: InvenTree/models.py:277 InvenTree/models.py:278 common/models.py:1438 +#: company/models.py:415 label/models.py:112 part/models.py:774 +#: part/models.py:2449 plugin/models.py:40 report/models.py:181 #: templates/InvenTree/settings/mixins/urls.html:13 -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:125 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:279 -#: templates/js/translated/company.js:641 templates/js/translated/part.js:561 -#: templates/js/translated/part.js:700 templates/js/translated/part.js:1624 -#: templates/js/translated/stock.js:2327 +#: templates/InvenTree/settings/settings.html:282 +#: templates/js/translated/company.js:641 templates/js/translated/part.js:567 +#: templates/js/translated/part.js:706 templates/js/translated/part.js:1631 +#: templates/js/translated/stock.js:2485 msgid "Name" msgstr "Namn" -#: InvenTree/models.py:284 build/models.py:207 +#: InvenTree/models.py:284 build/models.py:209 #: build/templates/build/detail.html:25 company/models.py:354 #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:122 part/models.py:795 part/templates/part/category.html:74 +#: order/models.py:125 part/models.py:797 part/templates/part/category.html:74 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 #: stock/templates/stock/location.html:93 #: templates/InvenTree/settings/plugin_settings.html:33 -#: templates/js/translated/bom.js:327 templates/js/translated/bom.js:540 +#: templates/js/translated/bom.js:339 templates/js/translated/bom.js:552 #: templates/js/translated/build.js:1682 templates/js/translated/company.js:345 #: templates/js/translated/company.js:551 #: templates/js/translated/company.js:840 templates/js/translated/order.js:836 #: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 -#: templates/js/translated/part.js:620 templates/js/translated/part.js:992 -#: templates/js/translated/part.js:1077 templates/js/translated/part.js:1247 -#: templates/js/translated/part.js:1643 templates/js/translated/part.js:1712 -#: templates/js/translated/stock.js:1569 templates/js/translated/stock.js:2339 -#: templates/js/translated/stock.js:2384 +#: templates/js/translated/part.js:626 templates/js/translated/part.js:999 +#: templates/js/translated/part.js:1084 templates/js/translated/part.js:1254 +#: templates/js/translated/part.js:1650 templates/js/translated/part.js:1719 +#: templates/js/translated/stock.js:1577 templates/js/translated/stock.js:2314 +#: templates/js/translated/stock.js:2497 templates/js/translated/stock.js:2542 msgid "Description" msgstr "Beskrivning" @@ -244,7 +245,7 @@ msgstr "Beskrivning (valfritt)" msgid "parent" msgstr "överordnad" -#: InvenTree/serializers.py:65 part/models.py:2727 +#: InvenTree/serializers.py:65 part/models.py:2734 msgid "Must be a valid number" msgstr "Måste vara ett giltigt nummer" @@ -252,83 +253,83 @@ msgstr "Måste vara ett giltigt nummer" msgid "Filename" msgstr "Filnamn" -#: InvenTree/settings.py:663 +#: InvenTree/settings.py:661 msgid "German" msgstr "Tyska" -#: InvenTree/settings.py:664 +#: InvenTree/settings.py:662 msgid "Greek" msgstr "Grekiska" -#: InvenTree/settings.py:665 +#: InvenTree/settings.py:663 msgid "English" msgstr "Engelska" -#: InvenTree/settings.py:666 +#: InvenTree/settings.py:664 msgid "Spanish" msgstr "Spanska" -#: InvenTree/settings.py:667 +#: InvenTree/settings.py:665 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:668 +#: InvenTree/settings.py:666 msgid "French" msgstr "Franska" -#: InvenTree/settings.py:669 +#: InvenTree/settings.py:667 msgid "Hebrew" msgstr "Hebreiska" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:668 msgid "Italian" msgstr "Italienska" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:669 msgid "Japanese" msgstr "Japanska" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:670 msgid "Korean" msgstr "Koreanska" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:671 msgid "Dutch" msgstr "Nederländska" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:672 msgid "Norwegian" msgstr "Norska" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:673 msgid "Polish" msgstr "Polska" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:674 msgid "Portugese" msgstr "" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:675 msgid "Russian" msgstr "Ryska" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:676 msgid "Swedish" msgstr "Svenska" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:677 msgid "Thai" msgstr "Thailändska" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:678 msgid "Turkish" msgstr "Turkiska" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:679 msgid "Vietnamese" msgstr "Vietnamesiska" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:680 msgid "Chinese" msgstr "Kinesiska" @@ -374,7 +375,7 @@ msgstr "Förlorad" msgid "Returned" msgstr "Återlämnad" -#: InvenTree/status_codes.py:143 order/models.py:941 +#: InvenTree/status_codes.py:143 order/models.py:961 #: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "Skickad" @@ -455,7 +456,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2064 +#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2072 msgid "Merged stock items" msgstr "" @@ -543,56 +544,56 @@ msgstr "" msgid "System Information" msgstr "" -#: barcodes/api.py:54 barcodes/api.py:151 +#: barcodes/api.py:54 barcodes/api.py:152 msgid "Must provide barcode_data parameter" msgstr "" -#: barcodes/api.py:127 +#: barcodes/api.py:128 msgid "No match found for barcode data" msgstr "" -#: barcodes/api.py:129 +#: barcodes/api.py:130 msgid "Match found for barcode data" msgstr "" -#: barcodes/api.py:154 +#: barcodes/api.py:155 msgid "Must provide stockitem parameter" msgstr "" -#: barcodes/api.py:161 +#: barcodes/api.py:162 msgid "No matching stock item found" msgstr "" -#: barcodes/api.py:191 +#: barcodes/api.py:193 msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:195 +#: barcodes/api.py:197 msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:199 +#: barcodes/api.py:201 msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:205 barcodes/api.py:217 +#: barcodes/api.py:207 barcodes/api.py:219 msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:223 +#: barcodes/api.py:225 msgid "Barcode associated with Stock Item" msgstr "" -#: build/forms.py:36 build/models.py:1286 +#: build/forms.py:36 build/models.py:1293 #: build/templates/build/build_base.html:82 -#: build/templates/build/detail.html:35 common/models.py:1253 +#: build/templates/build/detail.html:35 common/models.py:1263 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/models.py:796 order/models.py:1207 order/serializers.py:810 +#: order/models.py:805 order/models.py:1229 order/serializers.py:816 #: order/templates/order/order_wizard/match_parts.html:30 -#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:145 -#: part/forms.py:161 part/forms.py:177 part/models.py:2629 +#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:144 +#: part/forms.py:160 part/forms.py:176 part/models.py:2636 #: part/templates/part/bom_upload/match_parts.html:31 -#: part/templates/part/detail.html:962 part/templates/part/detail.html:1048 +#: part/templates/part/detail.html:992 part/templates/part/detail.html:1078 #: part/templates/part/part_pricing.html:16 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 @@ -603,7 +604,7 @@ msgstr "" #: stock/templates/stock/item_base.html:181 #: stock/templates/stock/item_base.html:262 #: stock/templates/stock/item_base.html:270 -#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:555 +#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:567 #: templates/js/translated/build.js:295 templates/js/translated/build.js:495 #: templates/js/translated/build.js:689 templates/js/translated/build.js:699 #: templates/js/translated/build.js:1075 templates/js/translated/build.js:1422 @@ -611,11 +612,11 @@ msgstr "" #: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 #: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 #: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 -#: templates/js/translated/order.js:2150 templates/js/translated/part.js:900 -#: templates/js/translated/part.js:1855 templates/js/translated/part.js:1978 -#: templates/js/translated/part.js:2056 templates/js/translated/stock.js:383 -#: templates/js/translated/stock.js:580 templates/js/translated/stock.js:750 -#: templates/js/translated/stock.js:2519 templates/js/translated/stock.js:2621 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:906 +#: templates/js/translated/part.js:1862 templates/js/translated/part.js:1985 +#: templates/js/translated/part.js:2063 templates/js/translated/stock.js:391 +#: templates/js/translated/stock.js:588 templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2779 msgid "Quantity" msgstr "" @@ -623,9 +624,9 @@ msgstr "" msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 -#: stock/serializers.py:314 templates/js/translated/stock.js:230 -#: templates/js/translated/stock.js:384 +#: build/forms.py:41 order/serializers.py:820 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:238 +#: templates/js/translated/stock.js:392 msgid "Serial Numbers" msgstr "" @@ -649,18 +650,18 @@ msgstr "" msgid "Confirm build cancellation" msgstr "" -#: build/models.py:133 +#: build/models.py:135 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:137 build/templates/build/build_base.html:9 +#: build/models.py:139 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:457 +#: templates/js/translated/build.js:457 templates/js/translated/stock.js:2290 msgid "Build Order" msgstr "" -#: build/models.py:138 build/templates/build/build_base.html:13 +#: build/models.py:140 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:92 #: order/templates/order/so_sidebar.html:13 @@ -670,40 +671,40 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:198 +#: build/models.py:200 msgid "Build Order Reference" msgstr "" -#: build/models.py:199 order/models.py:210 order/models.py:536 -#: order/models.py:803 part/models.py:2638 +#: build/models.py:201 order/models.py:213 order/models.py:541 +#: order/models.py:812 part/models.py:2645 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:547 templates/js/translated/build.js:1179 +#: templates/js/translated/bom.js:559 templates/js/translated/build.js:1179 #: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "" -#: build/models.py:210 +#: build/models.py:212 msgid "Brief description of the build" msgstr "" -#: build/models.py:219 build/templates/build/build_base.html:164 +#: build/models.py:221 build/templates/build/build_base.html:164 #: build/templates/build/detail.html:88 msgid "Parent Build" msgstr "" -#: build/models.py:220 +#: build/models.py:222 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:225 build/templates/build/build_base.html:77 +#: build/models.py:227 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:856 order/models.py:930 -#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 -#: part/models.py:2204 part/models.py:2220 part/models.py:2239 -#: part/models.py:2256 part/models.py:2358 part/models.py:2480 -#: part/models.py:2613 part/models.py:2920 part/serializers.py:658 +#: order/models.py:876 order/models.py:950 +#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:359 +#: part/models.py:2211 part/models.py:2227 part/models.py:2246 +#: part/models.py:2263 part/models.py:2365 part/models.py:2487 +#: part/models.py:2620 part/models.py:2927 part/serializers.py:658 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/set_category.html:13 @@ -713,205 +714,205 @@ msgstr "" #: templates/InvenTree/search.html:80 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 -#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:326 -#: templates/js/translated/bom.js:505 templates/js/translated/build.js:680 +#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:338 +#: templates/js/translated/bom.js:517 templates/js/translated/build.js:680 #: templates/js/translated/build.js:1048 templates/js/translated/build.js:1419 #: templates/js/translated/build.js:1687 templates/js/translated/company.js:492 #: templates/js/translated/company.js:749 templates/js/translated/order.js:84 #: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 #: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 -#: templates/js/translated/order.js:2128 templates/js/translated/part.js:977 -#: templates/js/translated/part.js:1058 templates/js/translated/part.js:1225 -#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:719 -#: templates/js/translated/stock.js:926 templates/js/translated/stock.js:1526 -#: templates/js/translated/stock.js:2609 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:984 +#: templates/js/translated/part.js:1065 templates/js/translated/part.js:1232 +#: templates/js/translated/stock.js:562 templates/js/translated/stock.js:727 +#: templates/js/translated/stock.js:934 templates/js/translated/stock.js:1534 +#: templates/js/translated/stock.js:2767 msgid "Part" msgstr "" -#: build/models.py:233 +#: build/models.py:235 msgid "Select part to build" msgstr "" -#: build/models.py:238 +#: build/models.py:240 msgid "Sales Order Reference" msgstr "" -#: build/models.py:242 +#: build/models.py:244 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1407 +#: build/models.py:249 templates/js/translated/build.js:1407 #: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "" -#: build/models.py:251 +#: build/models.py:253 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:256 +#: build/models.py:258 msgid "Destination Location" msgstr "" -#: build/models.py:260 +#: build/models.py:262 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:264 +#: build/models.py:266 msgid "Build Quantity" msgstr "" -#: build/models.py:267 +#: build/models.py:269 msgid "Number of stock items to build" msgstr "" -#: build/models.py:271 +#: build/models.py:273 msgid "Completed items" msgstr "" -#: build/models.py:273 +#: build/models.py:275 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:277 part/templates/part/part_base.html:234 +#: build/models.py:279 part/templates/part/part_base.html:234 msgid "Build Status" msgstr "" -#: build/models.py:281 +#: build/models.py:283 msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:531 +#: build/models.py:287 stock/models.py:533 msgid "Batch Code" msgstr "" -#: build/models.py:289 +#: build/models.py:291 msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:126 part/models.py:967 +#: build/models.py:294 order/models.py:129 part/models.py:969 #: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "" -#: build/models.py:296 order/models.py:558 +#: build/models.py:298 order/models.py:563 msgid "Target completion date" msgstr "" -#: build/models.py:297 +#: build/models.py:299 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:252 +#: build/models.py:302 order/models.py:255 #: templates/js/translated/build.js:1758 msgid "Completion Date" msgstr "" -#: build/models.py:306 +#: build/models.py:308 msgid "completed by" msgstr "" -#: build/models.py:314 templates/js/translated/build.js:1729 +#: build/models.py:316 templates/js/translated/build.js:1729 msgid "Issued by" msgstr "" -#: build/models.py:315 +#: build/models.py:317 msgid "User who issued this build order" msgstr "" -#: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:140 +#: build/models.py:325 build/templates/build/build_base.html:185 +#: build/templates/build/detail.html:116 order/models.py:143 #: order/templates/order/order_base.html:170 -#: order/templates/order/sales_order_base.html:182 part/models.py:971 +#: order/templates/order/sales_order_base.html:182 part/models.py:973 #: report/templates/report/inventree_build_order_base.html:159 #: templates/js/translated/build.js:1741 templates/js/translated/order.js:864 msgid "Responsible" msgstr "" -#: build/models.py:324 +#: build/models.py:326 msgid "User responsible for this build order" msgstr "" -#: build/models.py:329 build/templates/build/detail.html:102 +#: build/models.py:331 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:525 +#: part/templates/part/part_base.html:354 stock/models.py:527 #: stock/templates/stock/item_base.html:373 msgid "External Link" msgstr "" -#: build/models.py:334 build/serializers.py:201 +#: build/models.py:336 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:144 order/models.py:805 order/models.py:1051 +#: order/models.py:147 order/models.py:814 order/models.py:1071 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/models.py:956 -#: part/templates/part/detail.html:120 part/templates/part/part_sidebar.html:50 +#: order/templates/order/so_sidebar.html:17 part/models.py:958 +#: part/templates/part/detail.html:137 part/templates/part/part_sidebar.html:54 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:597 -#: stock/models.py:1867 stock/models.py:1973 stock/serializers.py:332 -#: stock/serializers.py:639 stock/serializers.py:737 stock/serializers.py:869 -#: stock/templates/stock/stock_sidebar.html:21 -#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:711 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:599 +#: stock/models.py:1895 stock/models.py:2001 stock/serializers.py:332 +#: stock/serializers.py:640 stock/serializers.py:738 stock/serializers.py:870 +#: stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:723 #: templates/js/translated/company.js:845 templates/js/translated/order.js:1149 #: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 -#: templates/js/translated/stock.js:1309 templates/js/translated/stock.js:1795 +#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1803 msgid "Notes" msgstr "" -#: build/models.py:335 +#: build/models.py:337 msgid "Extra build notes" msgstr "" -#: build/models.py:710 +#: build/models.py:717 msgid "No build output specified" msgstr "" -#: build/models.py:713 +#: build/models.py:720 msgid "Build output is already completed" msgstr "" -#: build/models.py:716 +#: build/models.py:723 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1108 +#: build/models.py:1115 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1117 +#: build/models.py:1124 #, python-brace-format msgid "Allocated quantity ({q}) must not execed available stock quantity ({a})" msgstr "" -#: build/models.py:1127 +#: build/models.py:1134 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:1167 +#: build/models.py:1140 order/models.py:1189 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1139 +#: build/models.py:1146 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1196 +#: build/models.py:1203 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1256 stock/templates/stock/item_base.html:345 +#: build/models.py:1263 stock/templates/stock/item_base.html:345 #: templates/InvenTree/search.html:137 templates/js/translated/build.js:1660 #: templates/navbar.html:35 msgid "Build" msgstr "" -#: build/models.py:1257 +#: build/models.py:1264 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1273 build/serializers.py:388 order/serializers.py:690 -#: order/serializers.py:708 stock/serializers.py:577 stock/serializers.py:695 +#: build/models.py:1280 build/serializers.py:388 order/serializers.py:696 +#: order/serializers.py:714 stock/serializers.py:578 stock/serializers.py:696 #: stock/templates/stock/item_base.html:9 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:367 @@ -920,24 +921,24 @@ msgstr "" #: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 #: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 #: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 -#: templates/js/translated/stock.js:555 templates/js/translated/stock.js:720 -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:563 templates/js/translated/stock.js:728 +#: templates/js/translated/stock.js:2628 msgid "Stock Item" msgstr "" -#: build/models.py:1274 +#: build/models.py:1281 msgid "Source stock item" msgstr "" -#: build/models.py:1287 +#: build/models.py:1294 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1295 +#: build/models.py:1302 msgid "Install into" msgstr "" -#: build/models.py:1296 +#: build/models.py:1303 msgid "Destination stock item" msgstr "" @@ -962,16 +963,16 @@ msgid "This build output is not fully allocated" msgstr "" #: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 -#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:730 -#: stock/serializers.py:971 stock/templates/stock/item_base.html:313 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:731 +#: stock/serializers.py:972 stock/templates/stock/item_base.html:313 #: templates/js/translated/barcode.js:384 #: templates/js/translated/barcode.js:557 templates/js/translated/build.js:480 #: templates/js/translated/build.js:1087 templates/js/translated/order.js:508 #: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 #: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 -#: templates/js/translated/part.js:179 templates/js/translated/stock.js:556 -#: templates/js/translated/stock.js:721 templates/js/translated/stock.js:928 -#: templates/js/translated/stock.js:1676 templates/js/translated/stock.js:2411 +#: templates/js/translated/part.js:179 templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:729 templates/js/translated/stock.js:936 +#: templates/js/translated/stock.js:1684 templates/js/translated/stock.js:2569 msgid "Location" msgstr "" @@ -980,12 +981,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:552 +#: build/templates/build/detail.html:63 order/models.py:557 #: order/serializers.py:247 stock/templates/stock/item_base.html:187 #: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1716 #: templates/js/translated/order.js:591 templates/js/translated/order.js:840 -#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1651 -#: templates/js/translated/stock.js:2488 templates/js/translated/stock.js:2637 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1659 +#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2795 msgid "Status" msgstr "" @@ -1021,8 +1022,8 @@ msgstr "" msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:313 build/serializers.py:362 part/models.py:2753 -#: part/models.py:2912 +#: build/serializers.py:313 build/serializers.py:362 part/models.py:2760 +#: part/models.py:2919 msgid "BOM Item" msgstr "" @@ -1038,16 +1039,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:394 stock/serializers.py:584 +#: build/serializers.py:394 stock/serializers.py:585 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:408 order/models.py:277 order/serializers.py:240 -#: stock/models.py:365 stock/models.py:1077 stock/serializers.py:305 +#: build/serializers.py:408 order/models.py:280 order/serializers.py:240 +#: stock/models.py:367 stock/models.py:1105 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:450 order/serializers.py:741 +#: build/serializers.py:450 order/serializers.py:747 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1060,7 +1061,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:491 order/serializers.py:984 +#: build/serializers.py:491 order/serializers.py:990 msgid "Allocation items must be provided" msgstr "" @@ -1164,13 +1165,13 @@ msgid "Completed" msgstr "" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:927 -#: order/models.py:1023 order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:947 +#: order/models.py:1043 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:307 -#: templates/js/translated/order.js:1218 +#: templates/js/translated/order.js:1218 templates/js/translated/stock.js:2304 msgid "Sales Order" msgstr "" @@ -1224,7 +1225,7 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:878 stock/forms.py:136 +#: build/templates/build/detail.html:50 order/models.py:898 stock/forms.py:136 #: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1239,7 +1240,7 @@ msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:331 -#: templates/js/translated/stock.js:1665 templates/js/translated/stock.js:2644 +#: templates/js/translated/stock.js:1673 templates/js/translated/stock.js:2802 #: templates/js/translated/table_filters.js:151 #: templates/js/translated/table_filters.js:238 msgid "Batch" @@ -1343,9 +1344,9 @@ msgstr "" #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 #: order/templates/order/sales_order_detail.html:107 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:196 -#: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 -#: stock/templates/stock/stock_sidebar.html:19 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:213 +#: part/templates/part/part_sidebar.html:52 stock/templates/stock/item.html:112 +#: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" @@ -1360,8 +1361,8 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:108 #: order/templates/order/sales_order_detail.html:127 #: order/templates/order/sales_order_detail.html:186 -#: part/templates/part/detail.html:124 stock/templates/stock/item.html:115 -#: stock/templates/stock/item.html:205 +#: part/templates/part/detail.html:141 stock/templates/stock/item.html:132 +#: stock/templates/stock/item.html:235 msgid "Edit Notes" msgstr "" @@ -1373,7 +1374,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:303 +#: build/templates/build/index.html:18 part/templates/part/detail.html:320 msgid "New Build Order" msgstr "" @@ -1453,23 +1454,23 @@ msgstr "" msgid "Delete Build Order" msgstr "" -#: common/files.py:67 +#: common/files.py:65 msgid "Unsupported file format: {ext.upper()}" msgstr "" -#: common/files.py:69 +#: common/files.py:67 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:74 +#: common/files.py:72 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:76 +#: common/files.py:74 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:78 +#: common/files.py:76 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1490,740 +1491,828 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:344 common/models.py:998 common/models.py:1206 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:352 +msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:346 +#: common/models.py:354 msgid "Settings value" msgstr "" -#: common/models.py:380 +#: common/models.py:388 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:400 +#: common/models.py:408 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:411 +#: common/models.py:419 msgid "Value must be an integer value" msgstr "" -#: common/models.py:434 +#: common/models.py:442 msgid "Key string must be unique" msgstr "" -#: common/models.py:553 +#: common/models.py:561 msgid "No group" msgstr "" -#: common/models.py:595 +#: common/models.py:603 msgid "Restart required" msgstr "" -#: common/models.py:596 +#: common/models.py:604 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:603 +#: common/models.py:611 msgid "InvenTree Instance Name" msgstr "" -#: common/models.py:605 +#: common/models.py:613 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:609 +#: common/models.py:617 msgid "Use instance name" msgstr "" -#: common/models.py:610 +#: common/models.py:618 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:616 company/models.py:100 company/models.py:101 +#: common/models.py:624 company/models.py:100 company/models.py:101 msgid "Company name" msgstr "" -#: common/models.py:617 +#: common/models.py:625 msgid "Internal company name" msgstr "" -#: common/models.py:622 +#: common/models.py:630 msgid "Base URL" msgstr "" -#: common/models.py:623 +#: common/models.py:631 msgid "Base URL for server instance" msgstr "" -#: common/models.py:629 +#: common/models.py:637 msgid "Default Currency" msgstr "" -#: common/models.py:630 +#: common/models.py:638 msgid "Default currency" msgstr "" -#: common/models.py:636 +#: common/models.py:644 msgid "Download from URL" msgstr "" -#: common/models.py:637 +#: common/models.py:645 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:643 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:651 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:644 +#: common/models.py:652 msgid "Enable barcode scanner support" msgstr "" -#: common/models.py:650 +#: common/models.py:658 msgid "IPN Regex" msgstr "" -#: common/models.py:651 +#: common/models.py:659 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:655 +#: common/models.py:663 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:656 +#: common/models.py:664 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:662 +#: common/models.py:670 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:663 +#: common/models.py:671 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:669 +#: common/models.py:677 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:670 +#: common/models.py:678 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:676 +#: common/models.py:684 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:677 +#: common/models.py:685 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:683 +#: common/models.py:691 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:684 +#: common/models.py:692 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:690 +#: common/models.py:698 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:691 +#: common/models.py:699 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:697 part/models.py:2482 report/models.py:187 +#: common/models.py:705 part/models.py:2489 report/models.py:187 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:422 msgid "Template" msgstr "" -#: common/models.py:698 +#: common/models.py:706 msgid "Parts are templates by default" msgstr "" -#: common/models.py:704 part/models.py:919 templates/js/translated/bom.js:1068 +#: common/models.py:712 part/models.py:921 templates/js/translated/bom.js:1082 #: templates/js/translated/table_filters.js:168 #: templates/js/translated/table_filters.js:434 msgid "Assembly" msgstr "" -#: common/models.py:705 +#: common/models.py:713 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:711 part/models.py:925 +#: common/models.py:719 part/models.py:927 #: templates/js/translated/table_filters.js:438 msgid "Component" msgstr "" -#: common/models.py:712 +#: common/models.py:720 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:718 part/models.py:936 +#: common/models.py:726 part/models.py:938 msgid "Purchaseable" msgstr "" -#: common/models.py:719 +#: common/models.py:727 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:725 part/models.py:941 +#: common/models.py:733 part/models.py:943 #: templates/js/translated/table_filters.js:446 msgid "Salable" msgstr "" -#: common/models.py:726 +#: common/models.py:734 msgid "Parts are salable by default" msgstr "" -#: common/models.py:732 part/models.py:931 +#: common/models.py:740 part/models.py:933 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 #: templates/js/translated/table_filters.js:450 msgid "Trackable" msgstr "" -#: common/models.py:733 +#: common/models.py:741 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:739 part/models.py:951 +#: common/models.py:747 part/models.py:953 #: part/templates/part/part_base.html:147 #: templates/js/translated/table_filters.js:42 msgid "Virtual" msgstr "" -#: common/models.py:740 +#: common/models.py:748 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:746 +#: common/models.py:754 msgid "Show Import in Views" msgstr "" -#: common/models.py:747 +#: common/models.py:755 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:753 +#: common/models.py:761 msgid "Show Price in Forms" msgstr "" -#: common/models.py:754 +#: common/models.py:762 msgid "Display part price in some forms" msgstr "" -#: common/models.py:765 +#: common/models.py:773 msgid "Show Price in BOM" msgstr "" -#: common/models.py:766 +#: common/models.py:774 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:772 +#: common/models.py:780 msgid "Show related parts" msgstr "" -#: common/models.py:773 +#: common/models.py:781 msgid "Display related parts for a part" msgstr "" -#: common/models.py:779 +#: common/models.py:787 msgid "Create initial stock" msgstr "" -#: common/models.py:780 +#: common/models.py:788 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:786 +#: common/models.py:794 msgid "Internal Prices" msgstr "" -#: common/models.py:787 +#: common/models.py:795 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:793 +#: common/models.py:801 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:794 +#: common/models.py:802 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:800 +#: common/models.py:808 msgid "Part Name Display Format" msgstr "" -#: common/models.py:801 +#: common/models.py:809 msgid "Format to display the part name" msgstr "" -#: common/models.py:808 +#: common/models.py:816 msgid "Enable Reports" msgstr "" -#: common/models.py:809 +#: common/models.py:817 msgid "Enable generation of reports" msgstr "" -#: common/models.py:815 templates/stats.html:25 +#: common/models.py:823 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:816 +#: common/models.py:824 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:822 +#: common/models.py:830 msgid "Page Size" msgstr "" -#: common/models.py:823 +#: common/models.py:831 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:833 +#: common/models.py:841 msgid "Test Reports" msgstr "" -#: common/models.py:834 +#: common/models.py:842 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:840 +#: common/models.py:848 msgid "Stock Expiry" msgstr "" -#: common/models.py:841 +#: common/models.py:849 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:847 +#: common/models.py:855 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:848 +#: common/models.py:856 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:854 +#: common/models.py:862 msgid "Stock Stale Time" msgstr "" -#: common/models.py:855 +#: common/models.py:863 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:857 +#: common/models.py:865 msgid "days" msgstr "" -#: common/models.py:862 +#: common/models.py:870 msgid "Build Expired Stock" msgstr "" -#: common/models.py:863 +#: common/models.py:871 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:869 +#: common/models.py:877 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:870 +#: common/models.py:878 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:876 -msgid "Group by Part" -msgstr "" - -#: common/models.py:877 -msgid "Group stock items by part reference in table views" -msgstr "" - -#: common/models.py:883 +#: common/models.py:884 msgid "Build Order Reference Prefix" msgstr "" -#: common/models.py:884 +#: common/models.py:885 msgid "Prefix value for build order reference" msgstr "" -#: common/models.py:889 +#: common/models.py:890 msgid "Build Order Reference Regex" msgstr "" -#: common/models.py:890 +#: common/models.py:891 msgid "Regular expression pattern for matching build order reference" msgstr "" -#: common/models.py:894 +#: common/models.py:895 msgid "Sales Order Reference Prefix" msgstr "" -#: common/models.py:895 +#: common/models.py:896 msgid "Prefix value for sales order reference" msgstr "" -#: common/models.py:900 +#: common/models.py:901 msgid "Purchase Order Reference Prefix" msgstr "" -#: common/models.py:901 +#: common/models.py:902 msgid "Prefix value for purchase order reference" msgstr "" -#: common/models.py:907 +#: common/models.py:908 msgid "Enable password forgot" msgstr "" -#: common/models.py:908 +#: common/models.py:909 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:913 +#: common/models.py:914 msgid "Enable registration" msgstr "" -#: common/models.py:914 +#: common/models.py:915 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:919 +#: common/models.py:920 msgid "Enable SSO" msgstr "" -#: common/models.py:920 +#: common/models.py:921 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:925 +#: common/models.py:926 msgid "Email required" msgstr "" -#: common/models.py:926 +#: common/models.py:927 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:931 +#: common/models.py:932 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:932 +#: common/models.py:933 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:937 +#: common/models.py:938 msgid "Mail twice" msgstr "" -#: common/models.py:938 +#: common/models.py:939 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:943 +#: common/models.py:944 msgid "Password twice" msgstr "" -#: common/models.py:944 +#: common/models.py:945 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:949 +#: common/models.py:950 msgid "Group on signup" msgstr "" -#: common/models.py:950 +#: common/models.py:951 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:955 +#: common/models.py:956 msgid "Enforce MFA" msgstr "" -#: common/models.py:956 +#: common/models.py:957 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:961 +#: common/models.py:964 msgid "Enable URL integration" msgstr "" -#: common/models.py:962 +#: common/models.py:965 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:968 +#: common/models.py:971 msgid "Enable navigation integration" msgstr "" -#: common/models.py:969 +#: common/models.py:972 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:975 +#: common/models.py:978 msgid "Enable app integration" msgstr "" -#: common/models.py:976 +#: common/models.py:979 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:982 +#: common/models.py:985 msgid "Enable schedule integration" msgstr "" -#: common/models.py:983 +#: common/models.py:986 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1029 +#: common/models.py:992 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:993 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:1008 common/models.py:1216 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1039 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1030 +#: common/models.py:1040 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1035 +#: common/models.py:1045 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1036 +#: common/models.py:1046 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1041 +#: common/models.py:1051 msgid "Show latest parts" msgstr "" -#: common/models.py:1042 +#: common/models.py:1052 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1047 +#: common/models.py:1057 msgid "Recent Part Count" msgstr "" -#: common/models.py:1048 +#: common/models.py:1058 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1054 +#: common/models.py:1064 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1055 +#: common/models.py:1065 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1060 +#: common/models.py:1070 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1061 +#: common/models.py:1071 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1066 +#: common/models.py:1076 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1067 +#: common/models.py:1077 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1072 +#: common/models.py:1082 msgid "Show low stock" msgstr "" -#: common/models.py:1073 +#: common/models.py:1083 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1078 +#: common/models.py:1088 msgid "Show depleted stock" msgstr "" -#: common/models.py:1079 +#: common/models.py:1089 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1084 +#: common/models.py:1094 msgid "Show needed stock" msgstr "" -#: common/models.py:1085 +#: common/models.py:1095 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1090 +#: common/models.py:1100 msgid "Show expired stock" msgstr "" -#: common/models.py:1091 +#: common/models.py:1101 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1096 +#: common/models.py:1106 msgid "Show stale stock" msgstr "" -#: common/models.py:1097 +#: common/models.py:1107 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1102 +#: common/models.py:1112 msgid "Show pending builds" msgstr "" -#: common/models.py:1103 +#: common/models.py:1113 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1108 +#: common/models.py:1118 msgid "Show overdue builds" msgstr "" -#: common/models.py:1109 +#: common/models.py:1119 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1114 +#: common/models.py:1124 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1115 +#: common/models.py:1125 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1120 +#: common/models.py:1130 msgid "Show overdue POs" msgstr "" -#: common/models.py:1121 +#: common/models.py:1131 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1126 +#: common/models.py:1136 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1127 +#: common/models.py:1137 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1132 +#: common/models.py:1142 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1133 +#: common/models.py:1143 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1139 +#: common/models.py:1149 msgid "Inline label display" msgstr "" -#: common/models.py:1140 +#: common/models.py:1150 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1146 +#: common/models.py:1156 msgid "Inline report display" msgstr "" -#: common/models.py:1147 +#: common/models.py:1157 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1153 +#: common/models.py:1163 msgid "Search Preview Results" msgstr "" -#: common/models.py:1154 +#: common/models.py:1164 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1160 +#: common/models.py:1170 msgid "Search Show Stock" msgstr "" -#: common/models.py:1161 +#: common/models.py:1171 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1167 +#: common/models.py:1177 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1168 +#: common/models.py:1178 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1174 +#: common/models.py:1184 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1175 +#: common/models.py:1185 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1181 +#: common/models.py:1191 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1182 +#: common/models.py:1192 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1188 +#: common/models.py:1198 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1189 +#: common/models.py:1199 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1254 company/forms.py:43 +#: common/models.py:1264 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1261 company/serializers.py:264 +#: common/models.py:1271 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 -#: templates/js/translated/part.js:909 templates/js/translated/part.js:1860 +#: templates/js/translated/part.js:915 templates/js/translated/part.js:1867 msgid "Price" msgstr "" -#: common/models.py:1262 +#: common/models.py:1272 msgid "Unit price at specified quantity" msgstr "" +#: common/models.py:1429 common/models.py:1568 +msgid "Endpoint" +msgstr "" + +#: common/models.py:1430 +msgid "Endpoint at which this webhook is received" +msgstr "" + +#: common/models.py:1439 +msgid "Name for this webhook" +msgstr "" + +#: common/models.py:1444 part/models.py:948 plugin/models.py:46 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:96 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:417 +msgid "Active" +msgstr "" + +#: common/models.py:1445 +msgid "Is this webhook active" +msgstr "" + +#: common/models.py:1459 +msgid "Token" +msgstr "" + +#: common/models.py:1460 +msgid "Token for access" +msgstr "" + +#: common/models.py:1467 +msgid "Secret" +msgstr "" + +#: common/models.py:1468 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:1535 +msgid "Message ID" +msgstr "" + +#: common/models.py:1536 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:1544 +msgid "Host" +msgstr "" + +#: common/models.py:1545 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:1552 +msgid "Header" +msgstr "" + +#: common/models.py:1553 +msgid "Header of this message" +msgstr "" + +#: common/models.py:1559 +msgid "Body" +msgstr "" + +#: common/models.py:1560 +msgid "Body of this message" +msgstr "" + +#: common/models.py:1569 +msgid "Endpoint on which this message was received" +msgstr "" + +#: common/models.py:1574 +msgid "Worked on" +msgstr "" + +#: common/models.py:1575 +msgid "Was the work on this message finished?" +msgstr "" + #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 #: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 -#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 -#: part/views.py:764 +#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:213 +#: part/views.py:773 msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 #: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 -#: part/views.py:765 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:214 +#: part/views.py:774 msgid "Match Fields" msgstr "" @@ -2315,7 +2404,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:139 part/models.py:838 +#: company/models.py:139 part/models.py:840 msgid "Image" msgstr "" @@ -2352,8 +2441,8 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:469 -#: stock/templates/stock/item_base.html:142 +#: company/models.py:320 company/models.py:535 stock/models.py:471 +#: stock/templates/stock/item_base.html:142 templates/js/translated/bom.js:328 msgid "Base Part" msgstr "" @@ -2380,7 +2469,7 @@ msgstr "" #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:533 #: templates/js/translated/company.js:818 templates/js/translated/order.js:1038 -#: templates/js/translated/part.js:245 templates/js/translated/part.js:889 +#: templates/js/translated/part.js:245 templates/js/translated/part.js:895 msgid "MPN" msgstr "" @@ -2409,8 +2498,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1960 templates/js/translated/company.js:647 -#: templates/js/translated/part.js:709 templates/js/translated/stock.js:1296 +#: stock/models.py:1988 templates/js/translated/company.js:647 +#: templates/js/translated/part.js:715 templates/js/translated/stock.js:1304 msgid "Value" msgstr "" @@ -2418,10 +2507,10 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:429 part/models.py:913 part/models.py:2450 +#: company/models.py:429 part/models.py:915 part/models.py:2457 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:284 -#: templates/js/translated/company.js:653 templates/js/translated/part.js:715 +#: templates/InvenTree/settings/settings.html:287 +#: templates/js/translated/company.js:653 templates/js/translated/part.js:721 msgid "Units" msgstr "" @@ -2434,13 +2523,13 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:224 +#: company/templates/company/supplier_part.html:87 order/models.py:227 #: order/templates/order/order_base.html:112 -#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 -#: part/bom.py:247 stock/templates/stock/item_base.html:397 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:237 +#: part/bom.py:265 stock/templates/stock/item_base.html:397 #: templates/js/translated/company.js:337 #: templates/js/translated/company.js:774 templates/js/translated/order.js:823 -#: templates/js/translated/part.js:215 templates/js/translated/part.js:857 +#: templates/js/translated/part.js:215 templates/js/translated/part.js:863 #: templates/js/translated/table_filters.js:393 msgid "Supplier" msgstr "" @@ -2450,8 +2539,8 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 -#: templates/js/translated/part.js:226 templates/js/translated/part.js:875 +#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1025 +#: templates/js/translated/part.js:226 templates/js/translated/part.js:881 msgid "SKU" msgstr "" @@ -2472,22 +2561,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:576 company/templates/company/supplier_part.html:119 -#: part/models.py:2641 report/templates/report/inventree_po_report.html:93 +#: part/models.py:2648 report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "base cost" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:493 stock/templates/stock/item_base.html:338 -#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1791 +#: stock/models.py:495 stock/templates/stock/item_base.html:338 +#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1799 msgid "Packaging" msgstr "" @@ -2495,7 +2584,7 @@ msgstr "" msgid "Part packaging" msgstr "" -#: company/models.py:584 part/models.py:1781 +#: company/models.py:584 part/models.py:1783 msgid "multiple" msgstr "" @@ -2554,12 +2643,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:547 -#: order/templates/order/sales_order_base.html:115 stock/models.py:512 -#: stock/models.py:513 stock/serializers.py:625 +#: company/templates/company/company_base.html:83 order/models.py:552 +#: order/templates/order/sales_order_base.html:115 stock/models.py:514 +#: stock/models.py:515 stock/serializers.py:626 #: stock/templates/stock/item_base.html:290 #: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 -#: templates/js/translated/stock.js:2452 +#: templates/js/translated/stock.js:2610 #: templates/js/translated/table_filters.js:397 msgid "Customer" msgstr "" @@ -2590,7 +2679,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:118 -#: part/templates/part/detail.html:336 +#: part/templates/part/detail.html:353 msgid "New Supplier Part" msgstr "" @@ -2598,8 +2687,8 @@ msgstr "" #: company/templates/company/detail.html:79 #: company/templates/company/manufacturer_part.html:127 #: company/templates/company/manufacturer_part.html:156 -#: part/templates/part/category.html:171 part/templates/part/detail.html:345 -#: part/templates/part/detail.html:374 +#: part/templates/part/category.html:171 part/templates/part/detail.html:362 +#: part/templates/part/detail.html:391 msgid "Options" msgstr "" @@ -2627,7 +2716,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:67 part/templates/part/detail.html:364 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:381 msgid "New Manufacturer Part" msgstr "" @@ -2641,7 +2730,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:68 part/templates/part/part_sidebar.html:33 +#: part/templates/part/detail.html:85 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197 #: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 @@ -2663,7 +2752,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:91 part/templates/part/part_sidebar.html:37 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:41 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217 #: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 @@ -2691,13 +2780,13 @@ msgstr "" #: company/templates/company/detail.html:384 #: company/templates/company/manufacturer_part.html:215 -#: part/templates/part/detail.html:418 +#: part/templates/part/detail.html:435 msgid "Delete Supplier Parts?" msgstr "" #: company/templates/company/detail.html:385 #: company/templates/company/manufacturer_part.html:216 -#: part/templates/part/detail.html:419 +#: part/templates/part/detail.html:436 msgid "All selected supplier parts will be deleted" msgstr "" @@ -2714,7 +2803,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:34 #: company/templates/company/supplier_part.html:159 -#: part/templates/part/detail.html:71 part/templates/part/part_base.html:76 +#: part/templates/part/detail.html:88 part/templates/part/part_base.html:76 msgid "Order part" msgstr "" @@ -2735,34 +2824,34 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 -#: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 +#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:163 #: templates/InvenTree/search.html:188 templates/navbar.html:45 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:129 -#: part/templates/part/detail.html:347 +#: part/templates/part/detail.html:364 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:129 #: company/templates/company/manufacturer_part.html:158 #: company/templates/company/manufacturer_part.html:254 -#: part/templates/part/detail.html:347 part/templates/part/detail.html:376 +#: part/templates/part/detail.html:364 part/templates/part/detail.html:393 #: templates/js/translated/company.js:426 templates/js/translated/helpers.js:31 -#: users/models.py:210 +#: users/models.py:212 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:143 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:17 -#: part/templates/part/detail.html:170 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:187 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:147 -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:192 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part.html:65 msgid "New Parameter" @@ -2773,7 +2862,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:191 -#: part/templates/part/detail.html:862 +#: part/templates/part/detail.html:892 msgid "Add Parameter" msgstr "" @@ -2802,9 +2891,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:477 +#: company/templates/company/supplier_part.html:24 stock/models.py:479 #: stock/templates/stock/item_base.html:402 -#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1748 +#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1756 msgid "Supplier Part" msgstr "" @@ -2830,7 +2919,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:167 -#: templates/js/translated/stock.js:360 +#: templates/js/translated/stock.js:368 msgid "New Stock Item" msgstr "" @@ -2840,7 +2929,7 @@ msgid "Supplier Part Orders" msgstr "" #: company/templates/company/supplier_part.html:160 -#: part/templates/part/detail.html:72 +#: part/templates/part/detail.html:89 msgid "Order Part" msgstr "" @@ -2851,7 +2940,7 @@ msgstr "" #: company/templates/company/supplier_part.html:184 #: company/templates/company/supplier_part.html:290 -#: part/templates/part/prices.html:271 part/views.py:1619 +#: part/templates/part/prices.html:271 part/views.py:1628 msgid "Add Price Break" msgstr "" @@ -2859,11 +2948,11 @@ msgstr "" msgid "No price break information found" msgstr "" -#: company/templates/company/supplier_part.html:224 part/views.py:1681 +#: company/templates/company/supplier_part.html:224 part/views.py:1690 msgid "Delete Price Break" msgstr "" -#: company/templates/company/supplier_part.html:238 part/views.py:1667 +#: company/templates/company/supplier_part.html:238 part/views.py:1676 msgid "Edit Price Break" msgstr "" @@ -2881,10 +2970,10 @@ msgstr "" #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:150 #: templates/InvenTree/settings/sidebar.html:41 -#: templates/js/translated/bom.js:328 templates/js/translated/part.js:489 -#: templates/js/translated/part.js:624 templates/js/translated/part.js:1118 -#: templates/js/translated/part.js:1279 templates/js/translated/stock.js:927 -#: templates/js/translated/stock.js:1580 templates/navbar.html:28 +#: templates/js/translated/bom.js:340 templates/js/translated/part.js:495 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1125 +#: templates/js/translated/part.js:1286 templates/js/translated/stock.js:935 +#: templates/js/translated/stock.js:1588 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2907,8 +2996,8 @@ msgstr "" #: stock/templates/stock/location.html:151 #: stock/templates/stock/location.html:163 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2351 -#: templates/stats.html:93 templates/stats.html:102 users/models.py:43 +#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2509 +#: templates/stats.html:105 templates/stats.html:114 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2937,20 +3026,20 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:129 part/views.py:584 +#: company/views.py:129 part/views.py:593 msgid "Download Image" msgstr "" -#: company/views.py:158 part/views.py:616 +#: company/views.py:158 part/views.py:625 msgid "Image size exceeds maximum allowable size for download" msgstr "" -#: company/views.py:165 part/views.py:623 +#: company/views.py:165 part/views.py:632 #, python-brace-format msgid "Invalid response: {code}" msgstr "" -#: company/views.py:174 part/views.py:632 +#: company/views.py:174 part/views.py:641 msgid "Supplied URL is not a valid image file" msgstr "" @@ -3036,282 +3125,282 @@ msgstr "" msgid "Cancel order" msgstr "" -#: order/models.py:122 +#: order/models.py:125 msgid "Order description" msgstr "" -#: order/models.py:124 +#: order/models.py:127 msgid "Link to external page" msgstr "" -#: order/models.py:132 +#: order/models.py:135 msgid "Created By" msgstr "" -#: order/models.py:139 +#: order/models.py:142 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:144 +#: order/models.py:147 msgid "Order notes" msgstr "" -#: order/models.py:211 order/models.py:537 +#: order/models.py:214 order/models.py:542 msgid "Order reference" msgstr "" -#: order/models.py:216 order/models.py:552 +#: order/models.py:219 order/models.py:557 msgid "Purchase order status" msgstr "" -#: order/models.py:225 +#: order/models.py:228 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:228 order/templates/order/order_base.html:118 +#: order/models.py:231 order/templates/order/order_base.html:118 #: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:228 +#: order/models.py:231 msgid "Supplier order reference code" msgstr "" -#: order/models.py:235 +#: order/models.py:238 msgid "received by" msgstr "" -#: order/models.py:240 +#: order/models.py:243 msgid "Issue Date" msgstr "" -#: order/models.py:241 +#: order/models.py:244 msgid "Date order was issued" msgstr "" -#: order/models.py:246 +#: order/models.py:249 msgid "Target Delivery Date" msgstr "" -#: order/models.py:247 +#: order/models.py:250 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:253 +#: order/models.py:256 msgid "Date order was completed" msgstr "" -#: order/models.py:282 +#: order/models.py:285 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:411 -msgid "Quantity must be an integer" -msgstr "" - -#: order/models.py:415 +#: order/models.py:420 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:548 +#: order/models.py:553 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer Reference " msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer order reference code" msgstr "" -#: order/models.py:559 +#: order/models.py:564 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:562 order/models.py:1028 +#: order/models.py:567 order/models.py:1048 #: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:569 +#: order/models.py:574 msgid "shipped by" msgstr "" -#: order/models.py:635 +#: order/models.py:640 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:639 +#: order/models.py:644 msgid "Only a pending order can be marked as complete" msgstr "" -#: order/models.py:642 +#: order/models.py:647 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:645 +#: order/models.py:650 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:797 +#: order/models.py:806 msgid "Item quantity" msgstr "" -#: order/models.py:803 +#: order/models.py:812 msgid "Line item reference" msgstr "" -#: order/models.py:805 +#: order/models.py:814 msgid "Line item notes" msgstr "" -#: order/models.py:835 order/models.py:926 order/models.py:1022 -#: templates/js/translated/order.js:1820 +#: order/models.py:842 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:855 order/models.py:946 order/models.py:1042 +#: templates/js/translated/order.js:1820 templates/js/translated/stock.js:2271 msgid "Order" msgstr "" -#: order/models.py:836 order/templates/order/order_base.html:9 +#: order/models.py:856 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:352 -#: templates/js/translated/order.js:801 templates/js/translated/part.js:832 -#: templates/js/translated/stock.js:1725 templates/js/translated/stock.js:2433 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:838 +#: templates/js/translated/stock.js:1733 templates/js/translated/stock.js:2591 msgid "Purchase Order" msgstr "" -#: order/models.py:857 +#: order/models.py:877 msgid "Supplier part" msgstr "" -#: order/models.py:864 order/templates/order/order_base.html:163 +#: order/models.py:884 order/templates/order/order_base.html:163 #: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 -#: templates/js/translated/part.js:904 templates/js/translated/part.js:930 +#: templates/js/translated/part.js:910 templates/js/translated/part.js:937 #: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:865 +#: order/models.py:885 msgid "Number of items received" msgstr "" -#: order/models.py:872 part/templates/part/prices.html:176 stock/models.py:606 +#: order/models.py:892 part/templates/part/prices.html:176 stock/models.py:608 #: stock/serializers.py:170 stock/templates/stock/item_base.html:359 -#: templates/js/translated/stock.js:1779 +#: templates/js/translated/stock.js:1787 msgid "Purchase Price" msgstr "" -#: order/models.py:873 +#: order/models.py:893 msgid "Unit purchase price" msgstr "" -#: order/models.py:881 +#: order/models.py:901 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:936 part/templates/part/part_pricing.html:112 +#: order/models.py:956 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:937 +#: order/models.py:957 msgid "Unit sale price" msgstr "" -#: order/models.py:942 +#: order/models.py:962 msgid "Shipped quantity" msgstr "" -#: order/models.py:1029 +#: order/models.py:1049 msgid "Date of shipment" msgstr "" -#: order/models.py:1036 +#: order/models.py:1056 msgid "Checked By" msgstr "" -#: order/models.py:1037 +#: order/models.py:1057 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1045 +#: order/models.py:1065 msgid "Shipment number" msgstr "" -#: order/models.py:1052 +#: order/models.py:1072 msgid "Shipment notes" msgstr "" -#: order/models.py:1059 +#: order/models.py:1079 msgid "Tracking Number" msgstr "" -#: order/models.py:1060 +#: order/models.py:1080 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1070 +#: order/models.py:1090 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1073 +#: order/models.py:1093 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1149 order/models.py:1151 +#: order/models.py:1171 order/models.py:1173 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1155 +#: order/models.py:1177 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1157 +#: order/models.py:1179 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1160 +#: order/models.py:1182 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1164 +#: order/models.py:1186 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:1170 order/serializers.py:734 +#: order/models.py:1192 order/serializers.py:740 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1173 +#: order/models.py:1195 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1174 +#: order/models.py:1196 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1182 +#: order/models.py:1204 msgid "Line" msgstr "" -#: order/models.py:1190 order/serializers.py:825 order/serializers.py:953 -#: templates/js/translated/model_renderers.js:251 +#: order/models.py:1212 order/serializers.py:831 order/serializers.py:959 +#: templates/js/translated/model_renderers.js:285 msgid "Shipment" msgstr "" -#: order/models.py:1191 +#: order/models.py:1213 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1203 +#: order/models.py:1225 msgid "Item" msgstr "" -#: order/models.py:1204 +#: order/models.py:1226 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1207 +#: order/models.py:1229 msgid "Enter stock allocation quantity" msgstr "" @@ -3319,7 +3408,7 @@ msgstr "" msgid "Purchase price currency" msgstr "" -#: order/serializers.py:211 order/serializers.py:790 +#: order/serializers.py:211 order/serializers.py:796 msgid "Line Item" msgstr "" @@ -3355,39 +3444,39 @@ msgstr "" msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:587 msgid "Sale price currency" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:655 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:699 order/serializers.py:802 +#: order/serializers.py:705 order/serializers.py:808 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:721 +#: order/serializers.py:727 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:815 +#: order/serializers.py:821 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:839 order/serializers.py:964 +#: order/serializers.py:845 order/serializers.py:970 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:842 order/serializers.py:967 +#: order/serializers.py:848 order/serializers.py:973 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:894 +#: order/serializers.py:900 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:910 msgid "The following serial numbers are already allocated" msgstr "" @@ -3441,6 +3530,7 @@ msgstr "" #: order/templates/order/order_base.html:94 #: order/templates/order/sales_order_base.html:89 +#: templates/js/translated/stock.js:2327 msgid "Order Status" msgstr "" @@ -3538,7 +3628,7 @@ msgstr "" #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/build.js:300 templates/js/translated/build.js:1311 #: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 -#: templates/js/translated/stock.js:593 templates/js/translated/stock.js:761 +#: templates/js/translated/stock.js:601 templates/js/translated/stock.js:769 msgid "Remove row" msgstr "" @@ -3729,7 +3819,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:48 -#: templates/js/translated/bom.js:720 templates/js/translated/build.js:1243 +#: templates/js/translated/bom.js:732 templates/js/translated/build.js:1243 msgid "Actions" msgstr "" @@ -3832,447 +3922,448 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:125 part/models.py:81 part/models.py:847 +#: part/bom.py:125 part/models.py:83 part/models.py:849 #: part/templates/part/category.html:108 part/templates/part/part_base.html:338 msgid "Default Location" msgstr "" -#: part/bom.py:126 part/templates/part/part_base.html:185 +#: part/bom.py:126 templates/email/low_stock_notification.html:17 +msgid "Total Stock" +msgstr "" + +#: part/bom.py:127 part/templates/part/part_base.html:185 msgid "Available Stock" msgstr "" -#: part/forms.py:85 +#: part/bom.py:128 part/templates/part/part_base.html:203 +#: templates/js/translated/part.js:1301 +msgid "On Order" +msgstr "" + +#: part/forms.py:84 msgid "Select part category" msgstr "" -#: part/forms.py:122 +#: part/forms.py:121 msgid "Add parameter template to same level categories" msgstr "" -#: part/forms.py:126 +#: part/forms.py:125 msgid "Add parameter template to all categories" msgstr "" -#: part/forms.py:146 +#: part/forms.py:145 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 +#: part/models.py:84 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:95 part/models.py:2526 part/templates/part/category.html:15 +#: part/models.py:97 part/models.py:2533 part/templates/part/category.html:15 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:96 part/templates/part/category.html:128 -#: templates/InvenTree/search.html:95 templates/stats.html:84 +#: part/models.py:98 part/templates/part/category.html:128 +#: templates/InvenTree/search.html:95 templates/stats.html:96 #: users/models.py:40 msgid "Part Categories" msgstr "" -#: part/models.py:358 part/templates/part/cat_link.html:3 +#: part/models.py:360 part/templates/part/cat_link.html:3 #: part/templates/part/category.html:17 part/templates/part/category.html:133 #: part/templates/part/category.html:153 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82 #: templates/InvenTree/settings/sidebar.html:37 -#: templates/js/translated/part.js:1656 templates/navbar.html:21 -#: templates/stats.html:80 templates/stats.html:89 users/models.py:41 +#: templates/js/translated/part.js:1663 templates/navbar.html:21 +#: templates/stats.html:92 templates/stats.html:101 users/models.py:41 msgid "Parts" msgstr "" -#: part/models.py:450 +#: part/models.py:452 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:500 part/models.py:512 +#: part/models.py:502 part/models.py:514 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:642 +#: part/models.py:644 msgid "Next available serial numbers are" msgstr "" -#: part/models.py:646 +#: part/models.py:648 msgid "Next available serial number is" msgstr "" -#: part/models.py:651 +#: part/models.py:653 msgid "Most recent serial number is" msgstr "" -#: part/models.py:746 +#: part/models.py:748 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:771 +#: part/models.py:773 msgid "Part name" msgstr "" -#: part/models.py:778 +#: part/models.py:780 msgid "Is Template" msgstr "" -#: part/models.py:779 +#: part/models.py:781 msgid "Is this part a template part?" msgstr "" -#: part/models.py:789 +#: part/models.py:791 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:790 +#: part/models.py:792 msgid "Variant Of" msgstr "" -#: part/models.py:796 +#: part/models.py:798 msgid "Part description" msgstr "" -#: part/models.py:801 part/templates/part/category.html:86 +#: part/models.py:803 part/templates/part/category.html:86 #: part/templates/part/part_base.html:302 msgid "Keywords" msgstr "" -#: part/models.py:802 +#: part/models.py:804 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:809 part/models.py:2276 part/models.py:2525 +#: part/models.py:811 part/models.py:2283 part/models.py:2532 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:183 -#: templates/js/translated/part.js:1261 +#: templates/InvenTree/settings/settings.html:186 +#: templates/js/translated/part.js:1268 msgid "Category" msgstr "" -#: part/models.py:810 +#: part/models.py:812 msgid "Part category" msgstr "" -#: part/models.py:815 part/templates/part/part_base.html:274 -#: templates/js/translated/part.js:612 templates/js/translated/part.js:1214 -#: templates/js/translated/stock.js:1552 +#: part/models.py:817 part/templates/part/part_base.html:274 +#: templates/js/translated/part.js:618 templates/js/translated/part.js:1221 +#: templates/js/translated/stock.js:1560 msgid "IPN" msgstr "" -#: part/models.py:816 +#: part/models.py:818 msgid "Internal Part Number" msgstr "" -#: part/models.py:822 +#: part/models.py:824 msgid "Part revision or version number" msgstr "" -#: part/models.py:823 part/templates/part/part_base.html:281 -#: report/models.py:200 templates/js/translated/part.js:616 +#: part/models.py:825 part/templates/part/part_base.html:281 +#: report/models.py:200 templates/js/translated/part.js:622 msgid "Revision" msgstr "" -#: part/models.py:845 +#: part/models.py:847 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:892 part/templates/part/part_base.html:347 +#: part/models.py:894 part/templates/part/part_base.html:347 msgid "Default Supplier" msgstr "" -#: part/models.py:893 +#: part/models.py:895 msgid "Default supplier part" msgstr "" -#: part/models.py:900 +#: part/models.py:902 msgid "Default Expiry" msgstr "" -#: part/models.py:901 +#: part/models.py:903 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:906 part/templates/part/part_base.html:196 +#: part/models.py:908 part/templates/part/part_base.html:196 msgid "Minimum Stock" msgstr "" -#: part/models.py:907 +#: part/models.py:909 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:914 +#: part/models.py:916 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:920 +#: part/models.py:922 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:926 +#: part/models.py:928 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:932 +#: part/models.py:934 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:937 +#: part/models.py:939 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:942 +#: part/models.py:944 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:946 plugin/models.py:46 -#: templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:295 -#: templates/js/translated/table_filters.js:417 -msgid "Active" -msgstr "" - -#: part/models.py:947 +#: part/models.py:949 msgid "Is this part active?" msgstr "" -#: part/models.py:952 +#: part/models.py:954 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:957 +#: part/models.py:959 msgid "Part notes - supports Markdown formatting" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "BOM checksum" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:963 +#: part/models.py:965 msgid "BOM checked by" msgstr "" -#: part/models.py:965 +#: part/models.py:967 msgid "BOM checked date" msgstr "" -#: part/models.py:969 +#: part/models.py:971 msgid "Creation User" msgstr "" -#: part/models.py:1781 +#: part/models.py:1783 msgid "Sell multiple" msgstr "" -#: part/models.py:2326 +#: part/models.py:2333 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2343 +#: part/models.py:2350 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2363 templates/js/translated/part.js:1707 -#: templates/js/translated/stock.js:1276 +#: part/models.py:2370 templates/js/translated/part.js:1714 +#: templates/js/translated/stock.js:1284 msgid "Test Name" msgstr "" -#: part/models.py:2364 +#: part/models.py:2371 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2369 +#: part/models.py:2376 msgid "Test Description" msgstr "" -#: part/models.py:2370 +#: part/models.py:2377 msgid "Enter description for this test" msgstr "" -#: part/models.py:2375 templates/js/translated/part.js:1716 +#: part/models.py:2382 templates/js/translated/part.js:1723 #: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" -#: part/models.py:2376 +#: part/models.py:2383 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2381 templates/js/translated/part.js:1724 +#: part/models.py:2388 templates/js/translated/part.js:1731 msgid "Requires Value" msgstr "" -#: part/models.py:2382 +#: part/models.py:2389 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2387 templates/js/translated/part.js:1731 +#: part/models.py:2394 templates/js/translated/part.js:1738 msgid "Requires Attachment" msgstr "" -#: part/models.py:2388 +#: part/models.py:2395 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2399 +#: part/models.py:2406 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2435 +#: part/models.py:2442 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2443 +#: part/models.py:2450 msgid "Parameter Name" msgstr "" -#: part/models.py:2450 +#: part/models.py:2457 msgid "Parameter Units" msgstr "" -#: part/models.py:2480 +#: part/models.py:2487 msgid "Parent Part" msgstr "" -#: part/models.py:2482 part/models.py:2531 part/models.py:2532 -#: templates/InvenTree/settings/settings.html:178 +#: part/models.py:2489 part/models.py:2538 part/models.py:2539 +#: templates/InvenTree/settings/settings.html:181 msgid "Parameter Template" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Data" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Parameter Value" msgstr "" -#: part/models.py:2536 templates/InvenTree/settings/settings.html:187 +#: part/models.py:2543 templates/InvenTree/settings/settings.html:190 msgid "Default Value" msgstr "" -#: part/models.py:2537 +#: part/models.py:2544 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2614 +#: part/models.py:2621 msgid "Select parent part" msgstr "" -#: part/models.py:2622 +#: part/models.py:2629 msgid "Sub part" msgstr "" -#: part/models.py:2623 +#: part/models.py:2630 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2629 +#: part/models.py:2636 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2631 templates/js/translated/bom.js:566 -#: templates/js/translated/bom.js:640 +#: part/models.py:2638 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:652 #: templates/js/translated/table_filters.js:92 msgid "Optional" msgstr "" -#: part/models.py:2631 +#: part/models.py:2638 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2634 +#: part/models.py:2641 msgid "Overage" msgstr "" -#: part/models.py:2635 +#: part/models.py:2642 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2638 +#: part/models.py:2645 msgid "BOM item reference" msgstr "" -#: part/models.py:2641 +#: part/models.py:2648 msgid "BOM item notes" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "Checksum" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "BOM line checksum" msgstr "" -#: part/models.py:2647 templates/js/translated/bom.js:657 +#: part/models.py:2654 templates/js/translated/bom.js:669 #: templates/js/translated/table_filters.js:68 #: templates/js/translated/table_filters.js:88 msgid "Inherited" msgstr "" -#: part/models.py:2648 +#: part/models.py:2655 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2653 templates/js/translated/bom.js:649 +#: part/models.py:2660 templates/js/translated/bom.js:661 msgid "Allow Variants" msgstr "" -#: part/models.py:2654 +#: part/models.py:2661 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2739 stock/models.py:355 +#: part/models.py:2746 stock/models.py:357 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2748 part/models.py:2750 +#: part/models.py:2755 part/models.py:2757 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2879 +#: part/models.py:2886 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2901 +#: part/models.py:2908 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2913 +#: part/models.py:2920 msgid "Parent BOM item" msgstr "" -#: part/models.py:2921 +#: part/models.py:2928 msgid "Substitute part" msgstr "" -#: part/models.py:2932 +#: part/models.py:2939 msgid "Part 1" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Part 2" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Select Related Part" msgstr "" -#: part/models.py:2968 +#: part/models.py:2975 msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique" msgstr "" @@ -4327,7 +4418,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:253 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:270 msgid "BOM actions" msgstr "" @@ -4499,7 +4590,7 @@ msgstr "" msgid "Import Parts" msgstr "" -#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:375 +#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:348 msgid "Duplicate Part" msgstr "" @@ -4533,145 +4624,149 @@ msgid "Showing stock for all variants of %(full_name)s" msgstr "" #: part/templates/part/detail.html:43 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/detail.html:60 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:48 +#: part/templates/part/detail.html:65 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:105 +#: part/templates/part/detail.html:122 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:142 +#: part/templates/part/detail.html:159 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:146 +#: part/templates/part/detail.html:163 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:147 +#: part/templates/part/detail.html:164 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:174 +#: part/templates/part/detail.html:191 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:45 +#: part/templates/part/detail.html:228 part/templates/part/part_sidebar.html:49 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:215 part/templates/part/detail.html:216 +#: part/templates/part/detail.html:232 part/templates/part/detail.html:233 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:253 part/templates/part/part_sidebar.html:17 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:241 +#: part/templates/part/detail.html:258 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:245 templates/js/translated/bom.js:70 +#: part/templates/part/detail.html:262 templates/js/translated/bom.js:70 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:247 +#: part/templates/part/detail.html:264 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:257 +#: part/templates/part/detail.html:274 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:259 templates/js/translated/part.js:272 +#: part/templates/part/detail.html:276 templates/js/translated/part.js:272 msgid "Copy BOM" msgstr "" -#: part/templates/part/detail.html:261 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:283 msgid "New BOM Item" msgstr "" -#: part/templates/part/detail.html:267 +#: part/templates/part/detail.html:284 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:280 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:314 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:322 +#: part/templates/part/detail.html:339 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:332 +#: part/templates/part/detail.html:349 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:360 +#: part/templates/part/detail.html:377 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:393 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:558 +#: part/templates/part/detail.html:575 msgid "Delete selected BOM items?" msgstr "" -#: part/templates/part/detail.html:559 +#: part/templates/part/detail.html:576 msgid "All selected BOM items will be deleted" msgstr "" -#: part/templates/part/detail.html:608 +#: part/templates/part/detail.html:625 msgid "Create BOM Item" msgstr "" -#: part/templates/part/detail.html:652 +#: part/templates/part/detail.html:682 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:660 +#: part/templates/part/detail.html:690 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:755 +#: part/templates/part/detail.html:785 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:812 +#: part/templates/part/detail.html:842 msgid "Edit Part Notes" msgstr "" -#: part/templates/part/detail.html:925 +#: part/templates/part/detail.html:955 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:937 +#: part/templates/part/detail.html:967 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:949 +#: part/templates/part/detail.html:979 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1038 +#: part/templates/part/detail.html:1068 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -4786,7 +4881,7 @@ msgstr "" #: templates/js/translated/company.js:508 #: templates/js/translated/company.js:765 #: templates/js/translated/model_renderers.js:175 -#: templates/js/translated/part.js:527 templates/js/translated/part.js:604 +#: templates/js/translated/part.js:533 templates/js/translated/part.js:610 msgid "Inactive" msgstr "" @@ -4805,10 +4900,6 @@ msgstr "" msgid "In Stock" msgstr "" -#: part/templates/part/part_base.html:203 templates/js/translated/part.js:1294 -msgid "On Order" -msgstr "" - #: part/templates/part/part_base.html:210 templates/InvenTree/index.html:178 msgid "Required for Build Orders" msgstr "" @@ -4821,12 +4912,12 @@ msgstr "" msgid "Allocated to Orders" msgstr "" -#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:678 +#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:690 msgid "Can Build" msgstr "" -#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1125 -#: templates/js/translated/part.js:1298 +#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1132 +#: templates/js/translated/part.js:1305 msgid "Building" msgstr "" @@ -4878,7 +4969,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:40 -#: templates/js/translated/bom.js:632 +#: templates/js/translated/bom.js:644 msgid "No supplier pricing available" msgstr "" @@ -4920,7 +5011,12 @@ msgstr "" msgid "Used In" msgstr "" -#: part/templates/part/part_sidebar.html:41 +#: part/templates/part/part_sidebar.html:31 +#: stock/templates/stock/stock_sidebar.html:8 +msgid "Allocations" +msgstr "" + +#: part/templates/part/part_sidebar.html:45 msgid "Test Templates" msgstr "" @@ -4993,7 +5089,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:155 templates/js/translated/bom.js:626 +#: part/templates/part/prices.html:155 templates/js/translated/bom.js:638 msgid "Supplier Cost" msgstr "" @@ -5015,7 +5111,7 @@ msgstr "" msgid "Internal Cost" msgstr "" -#: part/templates/part/prices.html:215 part/views.py:1690 +#: part/templates/part/prices.html:215 part/views.py:1699 msgid "Add Internal Price Break" msgstr "" @@ -5035,9 +5131,9 @@ msgstr "" msgid "Set category for the following parts" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:588 -#: templates/js/translated/part.js:491 templates/js/translated/part.js:1115 -#: templates/js/translated/part.js:1302 +#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:600 +#: templates/js/translated/part.js:497 templates/js/translated/part.js:1122 +#: templates/js/translated/part.js:1309 msgid "No Stock" msgstr "" @@ -5054,116 +5150,116 @@ msgstr "" msgid "Create a new variant of template '%(full_name)s'." msgstr "" -#: part/templatetags/inventree_extras.py:116 +#: part/templatetags/inventree_extras.py:125 msgid "Unknown database" msgstr "" -#: part/views.py:92 +#: part/views.py:93 msgid "Set Part Category" msgstr "" -#: part/views.py:142 +#: part/views.py:143 #, python-brace-format msgid "Set category for {n} parts" msgstr "" -#: part/views.py:214 +#: part/views.py:215 msgid "Match References" msgstr "" -#: part/views.py:502 +#: part/views.py:511 msgid "None" msgstr "" -#: part/views.py:561 +#: part/views.py:570 msgid "Part QR Code" msgstr "" -#: part/views.py:663 +#: part/views.py:672 msgid "Select Part Image" msgstr "" -#: part/views.py:689 +#: part/views.py:698 msgid "Updated part image" msgstr "" -#: part/views.py:692 +#: part/views.py:701 msgid "Part image not found" msgstr "" -#: part/views.py:766 +#: part/views.py:775 msgid "Match Parts" msgstr "" -#: part/views.py:1101 +#: part/views.py:1110 msgid "Export Bill of Materials" msgstr "" -#: part/views.py:1150 +#: part/views.py:1159 msgid "Confirm Part Deletion" msgstr "" -#: part/views.py:1157 +#: part/views.py:1166 msgid "Part was deleted" msgstr "" -#: part/views.py:1166 +#: part/views.py:1175 msgid "Part Pricing" msgstr "" -#: part/views.py:1315 +#: part/views.py:1324 msgid "Create Part Parameter Template" msgstr "" -#: part/views.py:1325 +#: part/views.py:1334 msgid "Edit Part Parameter Template" msgstr "" -#: part/views.py:1332 +#: part/views.py:1341 msgid "Delete Part Parameter Template" msgstr "" -#: part/views.py:1391 templates/js/translated/part.js:315 +#: part/views.py:1400 templates/js/translated/part.js:315 msgid "Edit Part Category" msgstr "" -#: part/views.py:1429 +#: part/views.py:1438 msgid "Delete Part Category" msgstr "" -#: part/views.py:1435 +#: part/views.py:1444 msgid "Part category was deleted" msgstr "" -#: part/views.py:1444 +#: part/views.py:1453 msgid "Create Category Parameter Template" msgstr "" -#: part/views.py:1545 +#: part/views.py:1554 msgid "Edit Category Parameter Template" msgstr "" -#: part/views.py:1601 +#: part/views.py:1610 msgid "Delete Category Parameter Template" msgstr "" -#: part/views.py:1623 +#: part/views.py:1632 msgid "Added new price break" msgstr "" -#: part/views.py:1699 +#: part/views.py:1708 msgid "Edit Internal Price Break" msgstr "" -#: part/views.py:1707 +#: part/views.py:1716 msgid "Delete Internal Price Break" msgstr "" -#: plugin/integration.py:124 +#: plugin/integration.py:138 msgid "No author found" msgstr "" -#: plugin/integration.py:136 +#: plugin/integration.py:152 msgid "No date found" msgstr "" @@ -5191,7 +5287,7 @@ msgstr "" msgid "Is the plugin active" msgstr "" -#: plugin/models.py:195 +#: plugin/models.py:199 msgid "Plugin" msgstr "" @@ -5357,12 +5453,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:517 stock/templates/stock/item_base.html:156 +#: stock/models.py:519 stock/templates/stock/item_base.html:156 #: templates/js/translated/build.js:293 templates/js/translated/build.js:697 #: templates/js/translated/build.js:1073 #: templates/js/translated/model_renderers.js:95 #: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 -#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:415 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:423 msgid "Serial Number" msgstr "" @@ -5371,19 +5467,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1948 +#: stock/models.py:1976 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1954 +#: stock/models.py:1982 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin.html:50 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2367 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2525 msgid "Date" msgstr "" @@ -5396,23 +5492,27 @@ msgid "Fail" msgstr "" #: report/templates/report/inventree_test_report_base.html:123 -#: stock/templates/stock/stock_sidebar.html:12 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:578 templates/js/translated/stock.js:748 -#: templates/js/translated/stock.js:2627 +#: templates/js/translated/stock.js:586 templates/js/translated/stock.js:756 +#: templates/js/translated/stock.js:2785 msgid "Serial" msgstr "" -#: stock/api.py:478 +#: stock/api.py:476 msgid "Quantity is required" msgstr "" -#: stock/forms.py:77 stock/forms.py:251 stock/models.py:574 +#: stock/api.py:483 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:576 #: stock/templates/stock/item_base.html:193 -#: templates/js/translated/stock.js:1701 +#: templates/js/translated/stock.js:1709 msgid "Expiry Date" msgstr "" @@ -5460,228 +5560,228 @@ msgstr "" msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:611 +#: stock/models.py:62 stock/models.py:613 #: stock/templates/stock/item_base.html:416 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:612 +#: stock/models.py:63 stock/models.py:614 msgid "Select Owner" msgstr "" -#: stock/models.py:336 +#: stock/models.py:338 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:372 +#: stock/models.py:374 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:382 stock/models.py:391 +#: stock/models.py:384 stock/models.py:393 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:383 +#: stock/models.py:385 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:405 +#: stock/models.py:407 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:411 +#: stock/models.py:413 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:418 +#: stock/models.py:420 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:461 +#: stock/models.py:463 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:470 +#: stock/models.py:472 msgid "Base part" msgstr "" -#: stock/models.py:478 +#: stock/models.py:480 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:484 stock/templates/stock/location.html:16 +#: stock/models.py:486 stock/templates/stock/location.html:16 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:494 +#: stock/models.py:496 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:500 stock/templates/stock/item_base.html:298 +#: stock/models.py:502 stock/templates/stock/item_base.html:298 msgid "Installed In" msgstr "" -#: stock/models.py:503 +#: stock/models.py:505 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:519 +#: stock/models.py:521 msgid "Serial number for this item" msgstr "" -#: stock/models.py:533 +#: stock/models.py:535 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:537 +#: stock/models.py:539 msgid "Stock Quantity" msgstr "" -#: stock/models.py:546 +#: stock/models.py:548 msgid "Source Build" msgstr "" -#: stock/models.py:548 +#: stock/models.py:550 msgid "Build for this stock item" msgstr "" -#: stock/models.py:559 +#: stock/models.py:561 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:562 +#: stock/models.py:564 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:568 +#: stock/models.py:570 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:575 +#: stock/models.py:577 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete on deplete" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:598 stock/templates/stock/item.html:111 +#: stock/models.py:600 stock/templates/stock/item.html:128 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:607 +#: stock/models.py:609 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1096 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1074 +#: stock/models.py:1102 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1080 +#: stock/models.py:1108 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1083 +#: stock/models.py:1111 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1086 +#: stock/models.py:1114 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1093 +#: stock/models.py:1121 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1164 +#: stock/models.py:1192 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1195 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1170 +#: stock/models.py:1198 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1173 +#: stock/models.py:1201 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1176 +#: stock/models.py:1204 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1179 +#: stock/models.py:1207 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1186 stock/serializers.py:774 +#: stock/models.py:1214 stock/serializers.py:775 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1190 +#: stock/models.py:1218 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1222 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1198 +#: stock/models.py:1226 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1369 +#: stock/models.py:1397 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1868 +#: stock/models.py:1896 msgid "Entry notes" msgstr "" -#: stock/models.py:1925 +#: stock/models.py:1953 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1931 +#: stock/models.py:1959 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1949 +#: stock/models.py:1977 msgid "Test name" msgstr "" -#: stock/models.py:1955 templates/js/translated/table_filters.js:271 +#: stock/models.py:1983 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1961 +#: stock/models.py:1989 msgid "Test output value" msgstr "" -#: stock/models.py:1968 +#: stock/models.py:1996 msgid "Test result attachment" msgstr "" -#: stock/models.py:1974 +#: stock/models.py:2002 msgid "Test notes" msgstr "" @@ -5706,7 +5806,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:326 stock/serializers.py:731 stock/serializers.py:972 +#: stock/serializers.py:326 stock/serializers.py:732 stock/serializers.py:973 msgid "Destination stock location" msgstr "" @@ -5718,63 +5818,63 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:589 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:592 +#: stock/serializers.py:593 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:597 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:626 +#: stock/serializers.py:627 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:632 +#: stock/serializers.py:633 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:640 +#: stock/serializers.py:641 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:650 stock/serializers.py:880 +#: stock/serializers.py:651 stock/serializers.py:881 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:738 +#: stock/serializers.py:739 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:743 +#: stock/serializers.py:744 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:744 +#: stock/serializers.py:745 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:749 +#: stock/serializers.py:750 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:750 +#: stock/serializers.py:751 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:760 +#: stock/serializers.py:761 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:842 +#: stock/serializers.py:843 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:870 +#: stock/serializers.py:871 msgid "Stock transaction notes" msgstr "" @@ -5787,47 +5887,51 @@ msgid "New Entry" msgstr "" #: stock/templates/stock/item.html:48 -msgid "Child Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:55 -msgid "This stock item does not have any child items" +msgid "Stock Item Allocations" msgstr "" #: stock/templates/stock/item.html:64 -#: stock/templates/stock/stock_sidebar.html:8 -msgid "Test Data" -msgstr "" - -#: stock/templates/stock/item.html:68 stock/templates/stock/item_base.html:57 -msgid "Test Report" +msgid "Child Stock Items" msgstr "" #: stock/templates/stock/item.html:72 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item.html:81 +#: stock/templates/stock/stock_sidebar.html:12 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:57 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item.html:89 msgid "Delete Test Data" msgstr "" -#: stock/templates/stock/item.html:76 +#: stock/templates/stock/item.html:93 msgid "Add Test Data" msgstr "" -#: stock/templates/stock/item.html:133 +#: stock/templates/stock/item.html:150 msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:482 +#: stock/templates/stock/item.html:154 stock/views.py:482 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:279 stock/templates/stock/item.html:304 +#: stock/templates/stock/item.html:309 stock/templates/stock/item.html:334 msgid "Add Test Result" msgstr "" -#: stock/templates/stock/item.html:324 +#: stock/templates/stock/item.html:354 msgid "Edit Test Result" msgstr "" -#: stock/templates/stock/item.html:338 +#: stock/templates/stock/item.html:368 msgid "Delete Test Result" msgstr "" @@ -5952,7 +6056,7 @@ msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:206 -#: templates/js/translated/stock.js:1714 +#: templates/js/translated/stock.js:1722 msgid "Last Updated" msgstr "" @@ -6111,7 +6215,7 @@ msgid "Sublocations" msgstr "" #: stock/templates/stock/location.html:146 templates/InvenTree/search.html:164 -#: templates/stats.html:97 users/models.py:42 +#: templates/stats.html:109 users/models.py:42 msgid "Stock Locations" msgstr "" @@ -6135,7 +6239,7 @@ msgstr "" msgid "Stock Tracking" msgstr "" -#: stock/templates/stock/stock_sidebar.html:16 +#: stock/templates/stock/stock_sidebar.html:20 msgid "Child Items" msgstr "" @@ -6164,7 +6268,7 @@ msgstr "" msgid "Are you sure you want to delete this stock tracking entry?" msgstr "" -#: stock/views.py:162 +#: stock/views.py:162 templates/js/translated/stock.js:139 msgid "Edit Stock Location" msgstr "" @@ -6204,7 +6308,7 @@ msgstr "" msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:727 templates/js/translated/stock.js:1066 +#: stock/views.py:727 templates/js/translated/stock.js:1074 msgid "Confirm stock adjustment" msgstr "" @@ -6212,7 +6316,7 @@ msgstr "" msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:324 +#: stock/views.py:760 templates/js/translated/stock.js:332 msgid "Edit Stock Item" msgstr "" @@ -6224,7 +6328,7 @@ msgstr "" msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1153 templates/js/translated/stock.js:304 +#: stock/views.py:1153 templates/js/translated/stock.js:312 msgid "Duplicate Stock Item" msgstr "" @@ -6268,6 +6372,18 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/500.html:5 templates/500.html:11 +msgid "Internal Server Error" +msgstr "" + +#: templates/500.html:14 +msgid "The InvenTree server raised an internal error" +msgstr "" + +#: templates/500.html:15 +msgid "Refer to the error log in the admin interface for further details" +msgstr "" + #: templates/503.html:10 templates/503.html:35 msgid "Site is in Maintenance" msgstr "" @@ -6390,7 +6506,7 @@ msgid "Signup" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:113 msgid "Settings" msgstr "" @@ -6431,43 +6547,43 @@ msgstr "" msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:32 +#: templates/InvenTree/settings/plugin.html:33 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:37 +#: templates/InvenTree/settings/plugin.html:38 #: templates/js/translated/plugin.js:15 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: templates/InvenTree/settings/plugin.html:47 templates/navbar.html:111 #: users/models.py:39 msgid "Admin" msgstr "" -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:49 #: templates/InvenTree/settings/plugin_settings.html:28 msgid "Author" msgstr "" -#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin_settings.html:43 msgid "Version" msgstr "" -#: templates/InvenTree/settings/plugin.html:91 +#: templates/InvenTree/settings/plugin.html:92 msgid "Inactive plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:114 +#: templates/InvenTree/settings/plugin.html:115 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:123 +#: templates/InvenTree/settings/plugin.html:124 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:125 +#: templates/InvenTree/settings/plugin.html:126 msgid "Message" msgstr "" @@ -6555,37 +6671,37 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:75 +#: templates/InvenTree/settings/settings.html:78 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:77 +#: templates/InvenTree/settings/settings.html:80 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:79 +#: templates/InvenTree/settings/settings.html:82 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:168 +#: templates/InvenTree/settings/settings.html:171 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:190 -#: templates/InvenTree/settings/settings.html:289 +#: templates/InvenTree/settings/settings.html:193 +#: templates/InvenTree/settings/settings.html:292 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:191 -#: templates/InvenTree/settings/settings.html:290 +#: templates/InvenTree/settings/settings.html:194 +#: templates/InvenTree/settings/settings.html:293 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:272 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:273 +#: templates/InvenTree/settings/settings.html:276 msgid "ID" msgstr "" @@ -6763,124 +6879,105 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:219 +#: templates/InvenTree/settings/user.html:220 +msgid "Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:226 +msgid "Log out active sessions (except this one)" +msgstr "" + +#: templates/InvenTree/settings/user.html:227 +msgid "Log Out Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:236 +msgid "unknown on unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:237 +msgid "unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:241 +msgid "IP Address" +msgstr "" + +#: templates/InvenTree/settings/user.html:242 +msgid "Device" +msgstr "" + +#: templates/InvenTree/settings/user.html:243 +msgid "Last Activity" +msgstr "" + +#: templates/InvenTree/settings/user.html:252 +#, python-format +msgid "%(time)s ago (this session)" +msgstr "" + +#: templates/InvenTree/settings/user.html:254 +#, python-format +msgid "%(time)s ago" +msgstr "" + +#: templates/InvenTree/settings/user.html:266 +msgid "Do you really want to remove the selected email address?" +msgstr "" + #: templates/InvenTree/settings/user_display.html:25 msgid "Theme Settings" msgstr "" -#: templates/InvenTree/settings/user.html:227 #: templates/InvenTree/settings/user_display.html:35 msgid "Select theme" msgstr "" -#: templates/InvenTree/settings/user.html:237 #: templates/InvenTree/settings/user_display.html:46 msgid "Set Theme" msgstr "" -#: templates/InvenTree/settings/user.html:246 #: templates/InvenTree/settings/user_display.html:54 msgid "Language Settings" msgstr "" -#: templates/InvenTree/settings/user.html:254 #: templates/InvenTree/settings/user_display.html:63 msgid "Select language" msgstr "" -#: templates/InvenTree/settings/user.html:270 #: templates/InvenTree/settings/user_display.html:79 #, python-format msgid "%(lang_translated)s%% translated" msgstr "" -#: templates/InvenTree/settings/user.html:272 #: templates/InvenTree/settings/user_display.html:81 msgid "No translations available" msgstr "" -#: templates/InvenTree/settings/user.html:279 #: templates/InvenTree/settings/user_display.html:88 msgid "Set Language" msgstr "" -#: templates/InvenTree/settings/user.html:281 #: templates/InvenTree/settings/user_display.html:91 msgid "Some languages are not complete" msgstr "" -#: templates/InvenTree/settings/user.html:283 #: templates/InvenTree/settings/user_display.html:93 msgid "Show only sufficent" msgstr "" -#: templates/InvenTree/settings/user.html:285 +#: templates/InvenTree/settings/user_display.html:95 +msgid "and hidden." +msgstr "" + #: templates/InvenTree/settings/user_display.html:95 msgid "Show them too" msgstr "" -#: templates/InvenTree/settings/user.html:292 #: templates/InvenTree/settings/user_display.html:101 msgid "Help the translation efforts!" msgstr "" -#: templates/InvenTree/settings/user.html:293 -#, python-format -msgid "Native language translation of the\n" -" InvenTree web application is community contributed via crowdin. Contributions are\n" -" welcomed and encouraged." -msgstr "" - -#: templates/InvenTree/settings/user.html:302 -msgid "Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:308 -msgid "Log out active sessions (except this one)" -msgstr "" - -#: templates/InvenTree/settings/user.html:309 -msgid "Log Out Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:318 -msgid "unknown on unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:319 -msgid "unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:323 -msgid "IP Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:324 -msgid "Device" -msgstr "" - -#: templates/InvenTree/settings/user.html:325 -msgid "Last Activity" -msgstr "" - -#: templates/InvenTree/settings/user.html:334 -#, python-format -msgid "%(time)s ago (this session)" -msgstr "" - -#: templates/InvenTree/settings/user.html:336 -#, python-format -msgid "%(time)s ago" -msgstr "" - -#: templates/InvenTree/settings/user.html:348 -msgid "Do you really want to remove the selected email address?" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:95 -msgid "and hidden." -msgstr "" - #: templates/InvenTree/settings/user_display.html:102 #, python-format msgid "Native language translation of the InvenTree web application is community contributed via crowdin. Contributions are welcomed and encouraged." @@ -6899,9 +6996,9 @@ msgid "InvenTree Version Information" msgstr "" #: templates/about.html:11 templates/about.html:105 -#: templates/js/translated/bom.js:395 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:573 templates/js/translated/modals.js:667 -#: templates/js/translated/modals.js:970 templates/modals.html:15 +#: templates/js/translated/bom.js:407 templates/js/translated/modals.js:53 +#: templates/js/translated/modals.js:584 templates/js/translated/modals.js:678 +#: templates/js/translated/modals.js:983 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -7178,13 +7275,13 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1103 +#: templates/js/translated/bom.js:1117 msgid "Required Quantity" msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:579 templates/js/translated/build.js:1189 +#: templates/js/translated/bom.js:591 templates/js/translated/build.js:1189 #: templates/js/translated/build.js:1810 #: templates/js/translated/table_filters.js:178 msgid "Available" @@ -7208,10 +7305,6 @@ msgstr "" msgid "Click on the following link to view this part" msgstr "" -#: templates/email/low_stock_notification.html:17 -msgid "Total Stock" -msgstr "" - #: templates/email/low_stock_notification.html:19 msgid "Minimum Quantity" msgstr "" @@ -7232,11 +7325,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1040 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1053 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1041 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1054 msgid "No response from the InvenTree server" msgstr "" @@ -7248,27 +7341,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1063 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1051 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1064 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1068 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1056 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1069 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1073 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1061 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1074 msgid "The requested resource could not be located on the server" msgstr "" @@ -7280,11 +7373,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1065 +#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1078 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1066 +#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1079 msgid "Connection timeout while requesting data from server" msgstr "" @@ -7353,7 +7446,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "Invalid server response" msgstr "" @@ -7381,7 +7474,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1018 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1026 msgid "Remove stock item" msgstr "" @@ -7428,12 +7521,12 @@ msgid "Download BOM Template" msgstr "" #: templates/js/translated/bom.js:39 templates/js/translated/bom.js:73 -#: templates/js/translated/order.js:369 templates/js/translated/stock.js:510 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:518 msgid "Format" msgstr "" #: templates/js/translated/bom.js:40 templates/js/translated/bom.js:74 -#: templates/js/translated/order.js:370 templates/js/translated/stock.js:511 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:519 msgid "Select file format" msgstr "" @@ -7489,87 +7582,87 @@ msgstr "" msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:340 -msgid "Select and add a new variant item using the input below" +#: templates/js/translated/bom.js:352 +msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:351 +#: templates/js/translated/bom.js:363 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:357 +#: templates/js/translated/bom.js:369 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:396 +#: templates/js/translated/bom.js:408 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:397 +#: templates/js/translated/bom.js:409 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:516 +#: templates/js/translated/bom.js:528 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:520 templates/js/translated/build.js:1171 +#: templates/js/translated/bom.js:532 templates/js/translated/build.js:1171 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:525 +#: templates/js/translated/bom.js:537 msgid "Open subassembly" msgstr "" -#: templates/js/translated/bom.js:597 +#: templates/js/translated/bom.js:609 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:612 +#: templates/js/translated/bom.js:624 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:619 +#: templates/js/translated/bom.js:631 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:668 templates/js/translated/bom.js:757 +#: templates/js/translated/bom.js:680 templates/js/translated/bom.js:769 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:728 +#: templates/js/translated/bom.js:740 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:742 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:732 +#: templates/js/translated/bom.js:744 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:734 templates/js/translated/bom.js:908 +#: templates/js/translated/bom.js:746 templates/js/translated/bom.js:920 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:891 +#: templates/js/translated/bom.js:748 templates/js/translated/bom.js:903 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:830 templates/js/translated/build.js:915 +#: templates/js/translated/bom.js:842 templates/js/translated/build.js:915 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:886 +#: templates/js/translated/bom.js:898 msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:1086 templates/js/translated/build.js:1155 +#: templates/js/translated/bom.js:1100 templates/js/translated/build.js:1155 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1108 +#: templates/js/translated/bom.js:1122 msgid "Inherited from parent BOM" msgstr "" @@ -7725,9 +7818,9 @@ msgstr "" msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1206 -#: templates/js/translated/part.js:1617 templates/js/translated/stock.js:1512 -#: templates/js/translated/stock.js:2321 +#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:1624 templates/js/translated/stock.js:1520 +#: templates/js/translated/stock.js:2479 msgid "Select" msgstr "" @@ -7735,7 +7828,7 @@ msgstr "" msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2540 +#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2698 msgid "No user information" msgstr "" @@ -7808,34 +7901,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:500 -#: templates/js/translated/company.js:757 templates/js/translated/part.js:511 -#: templates/js/translated/part.js:596 +#: templates/js/translated/company.js:757 templates/js/translated/part.js:517 +#: templates/js/translated/part.js:602 msgid "Template part" msgstr "" #: templates/js/translated/company.js:504 -#: templates/js/translated/company.js:761 templates/js/translated/part.js:515 -#: templates/js/translated/part.js:600 +#: templates/js/translated/company.js:761 templates/js/translated/part.js:521 +#: templates/js/translated/part.js:606 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:631 templates/js/translated/part.js:690 +#: templates/js/translated/company.js:631 templates/js/translated/part.js:696 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:668 templates/js/translated/part.js:732 +#: templates/js/translated/company.js:668 templates/js/translated/part.js:738 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:669 templates/js/translated/part.js:733 +#: templates/js/translated/company.js:669 templates/js/translated/part.js:739 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:688 templates/js/translated/part.js:750 +#: templates/js/translated/company.js:688 templates/js/translated/part.js:756 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:699 templates/js/translated/part.js:762 +#: templates/js/translated/company.js:699 templates/js/translated/part.js:768 msgid "Delete Parameter" msgstr "" @@ -7844,12 +7937,12 @@ msgid "No supplier parts found" msgstr "" #: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:420 +#: templates/js/translated/filters.js:429 msgid "true" msgstr "" #: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:421 +#: templates/js/translated/filters.js:430 msgid "false" msgstr "" @@ -7869,7 +7962,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:329 +#: templates/js/translated/filters.js:338 msgid "Create filter" msgstr "" @@ -7898,20 +7991,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1080 templates/modals.html:19 +#: templates/js/translated/forms.js:1082 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1471 +#: templates/js/translated/forms.js:1487 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1675 +#: templates/js/translated/forms.js:1691 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1895 +#: templates/js/translated/forms.js:1930 msgid "Clear input" msgstr "" @@ -7924,7 +8017,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1042 +#: templates/js/translated/stock.js:1050 msgid "Select Stock Items" msgstr "" @@ -7974,12 +8067,12 @@ msgid "Select Label Template" msgstr "" #: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 -#: templates/js/translated/modals.js:599 +#: templates/js/translated/modals.js:610 msgid "Cancel" msgstr "" #: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:666 templates/js/translated/modals.js:969 +#: templates/js/translated/modals.js:677 templates/js/translated/modals.js:982 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" @@ -7988,47 +8081,47 @@ msgstr "" msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:381 +#: templates/js/translated/modals.js:392 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:540 +#: templates/js/translated/modals.js:551 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:598 +#: templates/js/translated/modals.js:609 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:655 +#: templates/js/translated/modals.js:666 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:933 +#: templates/js/translated/modals.js:946 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1045 +#: templates/js/translated/modals.js:1058 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1046 +#: templates/js/translated/modals.js:1059 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1069 +#: templates/js/translated/modals.js:1082 msgid "Error requesting form data" msgstr "" @@ -8052,23 +8145,24 @@ msgstr "" msgid "Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:236 +#: templates/js/translated/model_renderers.js:249 +#: templates/js/translated/model_renderers.js:270 msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:253 +#: templates/js/translated/model_renderers.js:287 msgid "Shipment ID" msgstr "" -#: templates/js/translated/model_renderers.js:273 +#: templates/js/translated/model_renderers.js:307 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:310 +#: templates/js/translated/model_renderers.js:344 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:339 +#: templates/js/translated/model_renderers.js:373 msgid "Supplier Part ID" msgstr "" @@ -8116,7 +8210,7 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2123 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2131 msgid "Stock Status" msgstr "" @@ -8140,7 +8234,7 @@ msgstr "" msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:790 templates/js/translated/part.js:803 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:809 msgid "No purchase orders found" msgstr "" @@ -8165,7 +8259,7 @@ msgid "Total" msgstr "" #: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 -#: templates/js/translated/part.js:1834 templates/js/translated/part.js:2045 +#: templates/js/translated/part.js:1841 templates/js/translated/part.js:2052 msgid "Unit Price" msgstr "" @@ -8181,7 +8275,7 @@ msgstr "" msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1166 templates/js/translated/part.js:935 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:942 msgid "Receive line item" msgstr "" @@ -8250,7 +8344,7 @@ msgid "Delete Stock Allocation" msgstr "" #: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 -#: templates/js/translated/stock.js:1428 +#: templates/js/translated/stock.js:1436 msgid "Shipped to customer" msgstr "" @@ -8378,144 +8472,148 @@ msgstr "" msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:412 +#: templates/js/translated/part.js:351 +msgid "Create Part Variant" +msgstr "" + +#: templates/js/translated/part.js:418 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:414 +#: templates/js/translated/part.js:420 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:419 +#: templates/js/translated/part.js:425 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:421 +#: templates/js/translated/part.js:427 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:444 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:448 +#: templates/js/translated/part.js:454 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:451 +#: templates/js/translated/part.js:457 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:481 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:503 templates/js/translated/part.js:588 +#: templates/js/translated/part.js:509 templates/js/translated/part.js:594 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:507 templates/js/translated/part.js:592 +#: templates/js/translated/part.js:513 templates/js/translated/part.js:598 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:519 +#: templates/js/translated/part.js:525 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:523 +#: templates/js/translated/part.js:529 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:638 +#: templates/js/translated/part.js:644 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1005 +#: templates/js/translated/part.js:1012 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1029 +#: templates/js/translated/part.js:1036 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1096 templates/js/translated/part.js:1356 +#: templates/js/translated/part.js:1103 templates/js/translated/part.js:1363 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1266 +#: templates/js/translated/part.js:1273 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1289 +#: templates/js/translated/part.js:1296 #: templates/js/translated/table_filters.js:430 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:1380 templates/js/translated/part.js:1552 -#: templates/js/translated/stock.js:2282 +#: templates/js/translated/part.js:1387 templates/js/translated/part.js:1559 +#: templates/js/translated/stock.js:2440 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1396 +#: templates/js/translated/part.js:1403 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1571 templates/js/translated/stock.js:2301 +#: templates/js/translated/part.js:1578 templates/js/translated/stock.js:2459 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:1635 +#: templates/js/translated/part.js:1642 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1649 templates/js/translated/stock.js:2345 +#: templates/js/translated/part.js:1656 templates/js/translated/stock.js:2503 msgid "Path" msgstr "" -#: templates/js/translated/part.js:1693 +#: templates/js/translated/part.js:1700 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1744 templates/js/translated/stock.js:1234 +#: templates/js/translated/part.js:1751 templates/js/translated/stock.js:1242 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1745 templates/js/translated/stock.js:1235 +#: templates/js/translated/part.js:1752 templates/js/translated/stock.js:1243 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:1751 +#: templates/js/translated/part.js:1758 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:1773 +#: templates/js/translated/part.js:1780 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:1787 +#: templates/js/translated/part.js:1794 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:1812 +#: templates/js/translated/part.js:1819 #, python-brace-format msgid "No ${human_name} information found" msgstr "" -#: templates/js/translated/part.js:1867 +#: templates/js/translated/part.js:1874 #, python-brace-format msgid "Edit ${human_name}" msgstr "" -#: templates/js/translated/part.js:1868 +#: templates/js/translated/part.js:1875 #, python-brace-format msgid "Delete ${human_name}" msgstr "" -#: templates/js/translated/part.js:1969 +#: templates/js/translated/part.js:1976 msgid "Single Price" msgstr "" -#: templates/js/translated/part.js:1988 +#: templates/js/translated/part.js:1995 msgid "Single Price Difference" msgstr "" @@ -8589,340 +8687,344 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:74 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:181 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:93 templates/js/translated/stock.js:175 +#: templates/js/translated/stock.js:94 templates/js/translated/stock.js:183 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:101 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:110 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:146 +#: templates/js/translated/stock.js:154 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:186 +#: templates/js/translated/stock.js:194 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:225 +#: templates/js/translated/stock.js:233 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:231 +#: templates/js/translated/stock.js:239 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:382 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:387 +#: templates/js/translated/stock.js:395 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:420 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:416 templates/js/translated/stock.js:417 +#: templates/js/translated/stock.js:424 templates/js/translated/stock.js:425 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:433 +#: templates/js/translated/stock.js:441 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:453 +#: templates/js/translated/stock.js:461 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:462 +#: templates/js/translated/stock.js:470 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:515 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:526 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:519 +#: templates/js/translated/stock.js:527 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:628 +#: templates/js/translated/stock.js:636 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:629 +#: templates/js/translated/stock.js:637 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:714 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:715 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:709 +#: templates/js/translated/stock.js:717 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:710 +#: templates/js/translated/stock.js:718 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:796 +#: templates/js/translated/stock.js:804 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:797 +#: templates/js/translated/stock.js:805 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:892 +#: templates/js/translated/stock.js:900 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:893 +#: templates/js/translated/stock.js:901 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:899 +#: templates/js/translated/stock.js:907 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:900 +#: templates/js/translated/stock.js:908 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:904 +#: templates/js/translated/stock.js:912 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:905 +#: templates/js/translated/stock.js:913 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:909 +#: templates/js/translated/stock.js:917 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:910 users/models.py:206 +#: templates/js/translated/stock.js:918 users/models.py:208 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:914 templates/stock_table.html:58 +#: templates/js/translated/stock.js:922 templates/stock_table.html:58 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1051 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1201 +#: templates/js/translated/stock.js:1209 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1203 +#: templates/js/translated/stock.js:1211 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1208 +#: templates/js/translated/stock.js:1216 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1230 +#: templates/js/translated/stock.js:1238 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1256 +#: templates/js/translated/stock.js:1264 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1313 +#: templates/js/translated/stock.js:1321 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1428 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1424 +#: templates/js/translated/stock.js:1432 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1432 +#: templates/js/translated/stock.js:1440 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1438 +#: templates/js/translated/stock.js:1446 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1604 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1601 +#: templates/js/translated/stock.js:1609 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1604 +#: templates/js/translated/stock.js:1612 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1608 +#: templates/js/translated/stock.js:1616 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1610 +#: templates/js/translated/stock.js:1618 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1616 +#: templates/js/translated/stock.js:1624 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1618 +#: templates/js/translated/stock.js:1626 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1620 +#: templates/js/translated/stock.js:1628 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1633 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1632 +#: templates/js/translated/stock.js:1640 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1634 +#: templates/js/translated/stock.js:1642 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1636 +#: templates/js/translated/stock.js:1644 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1648 #: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1690 +#: templates/js/translated/stock.js:1698 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1763 +#: templates/js/translated/stock.js:1771 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1809 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1822 templates/js/translated/stock.js:1870 +#: templates/js/translated/stock.js:1830 templates/js/translated/stock.js:1878 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1910 +#: templates/js/translated/stock.js:1918 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1937 +#: templates/js/translated/stock.js:1945 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1939 +#: templates/js/translated/stock.js:1947 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:2138 +#: templates/js/translated/stock.js:2146 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2152 +#: templates/js/translated/stock.js:2160 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2153 +#: templates/js/translated/stock.js:2161 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2377 +#: templates/js/translated/stock.js:2340 +msgid "Allocated Quantity" +msgstr "" + +#: templates/js/translated/stock.js:2535 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2399 +#: templates/js/translated/stock.js:2557 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2424 +#: templates/js/translated/stock.js:2582 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2443 +#: templates/js/translated/stock.js:2601 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2462 +#: templates/js/translated/stock.js:2620 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2480 +#: templates/js/translated/stock.js:2638 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2503 +#: templates/js/translated/stock.js:2661 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2511 +#: templates/js/translated/stock.js:2669 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2552 +#: templates/js/translated/stock.js:2710 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2553 +#: templates/js/translated/stock.js:2711 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2604 +#: templates/js/translated/stock.js:2762 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2655 +#: templates/js/translated/stock.js:2813 msgid "Uninstall Stock Item" msgstr "" @@ -9194,11 +9296,11 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:113 +#: templates/navbar.html:114 msgid "Logout" msgstr "" -#: templates/navbar.html:115 +#: templates/navbar.html:116 msgid "Login" msgstr "" @@ -9246,31 +9348,43 @@ msgstr "" msgid "Server is deployed using docker" msgstr "" -#: templates/stats.html:40 -msgid "Server status" +#: templates/stats.html:39 +msgid "Plugin Support" msgstr "" #: templates/stats.html:43 -msgid "Healthy" +msgid "Plugin support enabled" msgstr "" #: templates/stats.html:45 -msgid "Issues detected" +msgid "Plugin support disabled" msgstr "" #: templates/stats.html:52 -msgid "Background Worker" +msgid "Server status" msgstr "" #: templates/stats.html:55 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:57 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:64 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:67 msgid "Background worker not running" msgstr "" -#: templates/stats.html:63 +#: templates/stats.html:75 msgid "Email Settings" msgstr "" -#: templates/stats.html:66 +#: templates/stats.html:78 msgid "Email settings not configured" msgstr "" @@ -9366,35 +9480,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:193 +#: users/models.py:195 msgid "Permission set" msgstr "" -#: users/models.py:201 +#: users/models.py:203 msgid "Group" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "View" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to view items" msgstr "" -#: users/models.py:206 +#: users/models.py:208 msgid "Permission to add items" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Change" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Permissions to edit items" msgstr "" -#: users/models.py:210 +#: users/models.py:212 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/th/LC_MESSAGES/django.po b/InvenTree/locale/th/LC_MESSAGES/django.po index 82cffcc5ec..b41b4a9389 100644 --- a/InvenTree/locale/th/LC_MESSAGES/django.po +++ b/InvenTree/locale/th/LC_MESSAGES/django.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-10 03:54+0000\n" -"PO-Revision-Date: 2022-01-10 03:57\n" +"POT-Creation-Date: 2022-01-29 00:17+0000\n" +"PO-Revision-Date: 2022-01-29 01:10\n" "Last-Translator: \n" "Language-Team: Thai\n" "Language: th_TH\n" @@ -18,15 +18,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 138\n" -#: InvenTree/api.py:64 +#: InvenTree/api.py:55 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:110 +#: InvenTree/api.py:101 msgid "No action specified" msgstr "" -#: InvenTree/api.py:124 +#: InvenTree/api.py:116 msgid "No matching action found" msgstr "" @@ -80,41 +80,41 @@ msgstr "" msgid "You must type the same email each time." msgstr "" -#: InvenTree/helpers.py:437 +#: InvenTree/helpers.py:439 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:444 order/models.py:279 order/models.py:420 +#: InvenTree/helpers.py:446 order/models.py:282 order/models.py:425 #: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:447 +#: InvenTree/helpers.py:449 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:469 InvenTree/helpers.py:472 InvenTree/helpers.py:475 -#: InvenTree/helpers.py:500 +#: InvenTree/helpers.py:471 InvenTree/helpers.py:474 InvenTree/helpers.py:477 +#: InvenTree/helpers.py:502 #, python-brace-format msgid "Invalid group: {g}" msgstr "" -#: InvenTree/helpers.py:510 +#: InvenTree/helpers.py:512 #, python-brace-format msgid "Invalid group {group}" msgstr "" -#: InvenTree/helpers.py:516 +#: InvenTree/helpers.py:518 #, python-brace-format msgid "Invalid/no group {group}" msgstr "" -#: InvenTree/helpers.py:522 +#: InvenTree/helpers.py:524 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:526 +#: InvenTree/helpers.py:528 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" @@ -127,7 +127,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1967 +#: InvenTree/models.py:132 stock/models.py:1995 #: templates/js/translated/attachment.js:119 msgid "Attachment" msgstr "" @@ -137,15 +137,15 @@ msgid "Select file to attach" msgstr "" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:124 part/models.py:828 +#: company/models.py:564 order/models.py:127 part/models.py:830 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:540 -#: templates/js/translated/company.js:829 templates/js/translated/part.js:1317 +#: templates/js/translated/company.js:829 templates/js/translated/part.js:1324 msgid "Link" msgstr "" -#: InvenTree/models.py:140 build/models.py:330 part/models.py:829 -#: stock/models.py:527 +#: InvenTree/models.py:140 build/models.py:332 part/models.py:831 +#: stock/models.py:529 msgid "Link to external URL" msgstr "" @@ -157,10 +157,11 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 -#: common/models.py:1214 part/models.py:2258 part/models.py:2278 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1223 +#: common/models.py:1224 common/models.py:1452 common/models.py:1453 +#: part/models.py:2265 part/models.py:2285 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2534 +#: templates/js/translated/stock.js:2692 msgid "User" msgstr "" @@ -197,42 +198,42 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 -#: label/models.py:112 part/models.py:772 part/models.py:2442 -#: plugin/models.py:40 report/models.py:181 +#: InvenTree/models.py:277 InvenTree/models.py:278 common/models.py:1438 +#: company/models.py:415 label/models.py:112 part/models.py:774 +#: part/models.py:2449 plugin/models.py:40 report/models.py:181 #: templates/InvenTree/settings/mixins/urls.html:13 -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:125 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:279 -#: templates/js/translated/company.js:641 templates/js/translated/part.js:561 -#: templates/js/translated/part.js:700 templates/js/translated/part.js:1624 -#: templates/js/translated/stock.js:2327 +#: templates/InvenTree/settings/settings.html:282 +#: templates/js/translated/company.js:641 templates/js/translated/part.js:567 +#: templates/js/translated/part.js:706 templates/js/translated/part.js:1631 +#: templates/js/translated/stock.js:2485 msgid "Name" msgstr "" -#: InvenTree/models.py:284 build/models.py:207 +#: InvenTree/models.py:284 build/models.py:209 #: build/templates/build/detail.html:25 company/models.py:354 #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:122 part/models.py:795 part/templates/part/category.html:74 +#: order/models.py:125 part/models.py:797 part/templates/part/category.html:74 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 #: stock/templates/stock/location.html:93 #: templates/InvenTree/settings/plugin_settings.html:33 -#: templates/js/translated/bom.js:327 templates/js/translated/bom.js:540 +#: templates/js/translated/bom.js:339 templates/js/translated/bom.js:552 #: templates/js/translated/build.js:1682 templates/js/translated/company.js:345 #: templates/js/translated/company.js:551 #: templates/js/translated/company.js:840 templates/js/translated/order.js:836 #: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 -#: templates/js/translated/part.js:620 templates/js/translated/part.js:992 -#: templates/js/translated/part.js:1077 templates/js/translated/part.js:1247 -#: templates/js/translated/part.js:1643 templates/js/translated/part.js:1712 -#: templates/js/translated/stock.js:1569 templates/js/translated/stock.js:2339 -#: templates/js/translated/stock.js:2384 +#: templates/js/translated/part.js:626 templates/js/translated/part.js:999 +#: templates/js/translated/part.js:1084 templates/js/translated/part.js:1254 +#: templates/js/translated/part.js:1650 templates/js/translated/part.js:1719 +#: templates/js/translated/stock.js:1577 templates/js/translated/stock.js:2314 +#: templates/js/translated/stock.js:2497 templates/js/translated/stock.js:2542 msgid "Description" msgstr "" @@ -244,7 +245,7 @@ msgstr "" msgid "parent" msgstr "" -#: InvenTree/serializers.py:65 part/models.py:2727 +#: InvenTree/serializers.py:65 part/models.py:2734 msgid "Must be a valid number" msgstr "" @@ -252,83 +253,83 @@ msgstr "" msgid "Filename" msgstr "" -#: InvenTree/settings.py:663 +#: InvenTree/settings.py:661 msgid "German" msgstr "" -#: InvenTree/settings.py:664 +#: InvenTree/settings.py:662 msgid "Greek" msgstr "" -#: InvenTree/settings.py:665 +#: InvenTree/settings.py:663 msgid "English" msgstr "" -#: InvenTree/settings.py:666 +#: InvenTree/settings.py:664 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:667 +#: InvenTree/settings.py:665 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:668 +#: InvenTree/settings.py:666 msgid "French" msgstr "" -#: InvenTree/settings.py:669 +#: InvenTree/settings.py:667 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:668 msgid "Italian" msgstr "" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:669 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:670 msgid "Korean" msgstr "" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:671 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:672 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:673 msgid "Polish" msgstr "" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:674 msgid "Portugese" msgstr "" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:675 msgid "Russian" msgstr "" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:676 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:677 msgid "Thai" msgstr "" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:678 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:679 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:680 msgid "Chinese" msgstr "" @@ -374,7 +375,7 @@ msgstr "" msgid "Returned" msgstr "" -#: InvenTree/status_codes.py:143 order/models.py:941 +#: InvenTree/status_codes.py:143 order/models.py:961 #: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "" @@ -455,7 +456,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2064 +#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2072 msgid "Merged stock items" msgstr "" @@ -543,56 +544,56 @@ msgstr "" msgid "System Information" msgstr "" -#: barcodes/api.py:54 barcodes/api.py:151 +#: barcodes/api.py:54 barcodes/api.py:152 msgid "Must provide barcode_data parameter" msgstr "" -#: barcodes/api.py:127 +#: barcodes/api.py:128 msgid "No match found for barcode data" msgstr "" -#: barcodes/api.py:129 +#: barcodes/api.py:130 msgid "Match found for barcode data" msgstr "" -#: barcodes/api.py:154 +#: barcodes/api.py:155 msgid "Must provide stockitem parameter" msgstr "" -#: barcodes/api.py:161 +#: barcodes/api.py:162 msgid "No matching stock item found" msgstr "" -#: barcodes/api.py:191 +#: barcodes/api.py:193 msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:195 +#: barcodes/api.py:197 msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:199 +#: barcodes/api.py:201 msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:205 barcodes/api.py:217 +#: barcodes/api.py:207 barcodes/api.py:219 msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:223 +#: barcodes/api.py:225 msgid "Barcode associated with Stock Item" msgstr "" -#: build/forms.py:36 build/models.py:1286 +#: build/forms.py:36 build/models.py:1293 #: build/templates/build/build_base.html:82 -#: build/templates/build/detail.html:35 common/models.py:1253 +#: build/templates/build/detail.html:35 common/models.py:1263 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/models.py:796 order/models.py:1207 order/serializers.py:810 +#: order/models.py:805 order/models.py:1229 order/serializers.py:816 #: order/templates/order/order_wizard/match_parts.html:30 -#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:145 -#: part/forms.py:161 part/forms.py:177 part/models.py:2629 +#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:144 +#: part/forms.py:160 part/forms.py:176 part/models.py:2636 #: part/templates/part/bom_upload/match_parts.html:31 -#: part/templates/part/detail.html:962 part/templates/part/detail.html:1048 +#: part/templates/part/detail.html:992 part/templates/part/detail.html:1078 #: part/templates/part/part_pricing.html:16 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 @@ -603,7 +604,7 @@ msgstr "" #: stock/templates/stock/item_base.html:181 #: stock/templates/stock/item_base.html:262 #: stock/templates/stock/item_base.html:270 -#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:555 +#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:567 #: templates/js/translated/build.js:295 templates/js/translated/build.js:495 #: templates/js/translated/build.js:689 templates/js/translated/build.js:699 #: templates/js/translated/build.js:1075 templates/js/translated/build.js:1422 @@ -611,11 +612,11 @@ msgstr "" #: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 #: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 #: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 -#: templates/js/translated/order.js:2150 templates/js/translated/part.js:900 -#: templates/js/translated/part.js:1855 templates/js/translated/part.js:1978 -#: templates/js/translated/part.js:2056 templates/js/translated/stock.js:383 -#: templates/js/translated/stock.js:580 templates/js/translated/stock.js:750 -#: templates/js/translated/stock.js:2519 templates/js/translated/stock.js:2621 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:906 +#: templates/js/translated/part.js:1862 templates/js/translated/part.js:1985 +#: templates/js/translated/part.js:2063 templates/js/translated/stock.js:391 +#: templates/js/translated/stock.js:588 templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2779 msgid "Quantity" msgstr "" @@ -623,9 +624,9 @@ msgstr "" msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 -#: stock/serializers.py:314 templates/js/translated/stock.js:230 -#: templates/js/translated/stock.js:384 +#: build/forms.py:41 order/serializers.py:820 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:238 +#: templates/js/translated/stock.js:392 msgid "Serial Numbers" msgstr "" @@ -649,18 +650,18 @@ msgstr "" msgid "Confirm build cancellation" msgstr "" -#: build/models.py:133 +#: build/models.py:135 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:137 build/templates/build/build_base.html:9 +#: build/models.py:139 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:457 +#: templates/js/translated/build.js:457 templates/js/translated/stock.js:2290 msgid "Build Order" msgstr "" -#: build/models.py:138 build/templates/build/build_base.html:13 +#: build/models.py:140 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:92 #: order/templates/order/so_sidebar.html:13 @@ -670,40 +671,40 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:198 +#: build/models.py:200 msgid "Build Order Reference" msgstr "" -#: build/models.py:199 order/models.py:210 order/models.py:536 -#: order/models.py:803 part/models.py:2638 +#: build/models.py:201 order/models.py:213 order/models.py:541 +#: order/models.py:812 part/models.py:2645 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:547 templates/js/translated/build.js:1179 +#: templates/js/translated/bom.js:559 templates/js/translated/build.js:1179 #: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "" -#: build/models.py:210 +#: build/models.py:212 msgid "Brief description of the build" msgstr "" -#: build/models.py:219 build/templates/build/build_base.html:164 +#: build/models.py:221 build/templates/build/build_base.html:164 #: build/templates/build/detail.html:88 msgid "Parent Build" msgstr "" -#: build/models.py:220 +#: build/models.py:222 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:225 build/templates/build/build_base.html:77 +#: build/models.py:227 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:856 order/models.py:930 -#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 -#: part/models.py:2204 part/models.py:2220 part/models.py:2239 -#: part/models.py:2256 part/models.py:2358 part/models.py:2480 -#: part/models.py:2613 part/models.py:2920 part/serializers.py:658 +#: order/models.py:876 order/models.py:950 +#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:359 +#: part/models.py:2211 part/models.py:2227 part/models.py:2246 +#: part/models.py:2263 part/models.py:2365 part/models.py:2487 +#: part/models.py:2620 part/models.py:2927 part/serializers.py:658 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/set_category.html:13 @@ -713,205 +714,205 @@ msgstr "" #: templates/InvenTree/search.html:80 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 -#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:326 -#: templates/js/translated/bom.js:505 templates/js/translated/build.js:680 +#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:338 +#: templates/js/translated/bom.js:517 templates/js/translated/build.js:680 #: templates/js/translated/build.js:1048 templates/js/translated/build.js:1419 #: templates/js/translated/build.js:1687 templates/js/translated/company.js:492 #: templates/js/translated/company.js:749 templates/js/translated/order.js:84 #: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 #: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 -#: templates/js/translated/order.js:2128 templates/js/translated/part.js:977 -#: templates/js/translated/part.js:1058 templates/js/translated/part.js:1225 -#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:719 -#: templates/js/translated/stock.js:926 templates/js/translated/stock.js:1526 -#: templates/js/translated/stock.js:2609 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:984 +#: templates/js/translated/part.js:1065 templates/js/translated/part.js:1232 +#: templates/js/translated/stock.js:562 templates/js/translated/stock.js:727 +#: templates/js/translated/stock.js:934 templates/js/translated/stock.js:1534 +#: templates/js/translated/stock.js:2767 msgid "Part" msgstr "" -#: build/models.py:233 +#: build/models.py:235 msgid "Select part to build" msgstr "" -#: build/models.py:238 +#: build/models.py:240 msgid "Sales Order Reference" msgstr "" -#: build/models.py:242 +#: build/models.py:244 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1407 +#: build/models.py:249 templates/js/translated/build.js:1407 #: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "" -#: build/models.py:251 +#: build/models.py:253 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:256 +#: build/models.py:258 msgid "Destination Location" msgstr "" -#: build/models.py:260 +#: build/models.py:262 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:264 +#: build/models.py:266 msgid "Build Quantity" msgstr "" -#: build/models.py:267 +#: build/models.py:269 msgid "Number of stock items to build" msgstr "" -#: build/models.py:271 +#: build/models.py:273 msgid "Completed items" msgstr "" -#: build/models.py:273 +#: build/models.py:275 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:277 part/templates/part/part_base.html:234 +#: build/models.py:279 part/templates/part/part_base.html:234 msgid "Build Status" msgstr "" -#: build/models.py:281 +#: build/models.py:283 msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:531 +#: build/models.py:287 stock/models.py:533 msgid "Batch Code" msgstr "" -#: build/models.py:289 +#: build/models.py:291 msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:126 part/models.py:967 +#: build/models.py:294 order/models.py:129 part/models.py:969 #: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "" -#: build/models.py:296 order/models.py:558 +#: build/models.py:298 order/models.py:563 msgid "Target completion date" msgstr "" -#: build/models.py:297 +#: build/models.py:299 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:252 +#: build/models.py:302 order/models.py:255 #: templates/js/translated/build.js:1758 msgid "Completion Date" msgstr "" -#: build/models.py:306 +#: build/models.py:308 msgid "completed by" msgstr "" -#: build/models.py:314 templates/js/translated/build.js:1729 +#: build/models.py:316 templates/js/translated/build.js:1729 msgid "Issued by" msgstr "" -#: build/models.py:315 +#: build/models.py:317 msgid "User who issued this build order" msgstr "" -#: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:140 +#: build/models.py:325 build/templates/build/build_base.html:185 +#: build/templates/build/detail.html:116 order/models.py:143 #: order/templates/order/order_base.html:170 -#: order/templates/order/sales_order_base.html:182 part/models.py:971 +#: order/templates/order/sales_order_base.html:182 part/models.py:973 #: report/templates/report/inventree_build_order_base.html:159 #: templates/js/translated/build.js:1741 templates/js/translated/order.js:864 msgid "Responsible" msgstr "" -#: build/models.py:324 +#: build/models.py:326 msgid "User responsible for this build order" msgstr "" -#: build/models.py:329 build/templates/build/detail.html:102 +#: build/models.py:331 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:525 +#: part/templates/part/part_base.html:354 stock/models.py:527 #: stock/templates/stock/item_base.html:373 msgid "External Link" msgstr "" -#: build/models.py:334 build/serializers.py:201 +#: build/models.py:336 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:144 order/models.py:805 order/models.py:1051 +#: order/models.py:147 order/models.py:814 order/models.py:1071 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/models.py:956 -#: part/templates/part/detail.html:120 part/templates/part/part_sidebar.html:50 +#: order/templates/order/so_sidebar.html:17 part/models.py:958 +#: part/templates/part/detail.html:137 part/templates/part/part_sidebar.html:54 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:597 -#: stock/models.py:1867 stock/models.py:1973 stock/serializers.py:332 -#: stock/serializers.py:639 stock/serializers.py:737 stock/serializers.py:869 -#: stock/templates/stock/stock_sidebar.html:21 -#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:711 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:599 +#: stock/models.py:1895 stock/models.py:2001 stock/serializers.py:332 +#: stock/serializers.py:640 stock/serializers.py:738 stock/serializers.py:870 +#: stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:723 #: templates/js/translated/company.js:845 templates/js/translated/order.js:1149 #: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 -#: templates/js/translated/stock.js:1309 templates/js/translated/stock.js:1795 +#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1803 msgid "Notes" msgstr "" -#: build/models.py:335 +#: build/models.py:337 msgid "Extra build notes" msgstr "" -#: build/models.py:710 +#: build/models.py:717 msgid "No build output specified" msgstr "" -#: build/models.py:713 +#: build/models.py:720 msgid "Build output is already completed" msgstr "" -#: build/models.py:716 +#: build/models.py:723 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1108 +#: build/models.py:1115 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1117 +#: build/models.py:1124 #, python-brace-format msgid "Allocated quantity ({q}) must not execed available stock quantity ({a})" msgstr "" -#: build/models.py:1127 +#: build/models.py:1134 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:1167 +#: build/models.py:1140 order/models.py:1189 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1139 +#: build/models.py:1146 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1196 +#: build/models.py:1203 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1256 stock/templates/stock/item_base.html:345 +#: build/models.py:1263 stock/templates/stock/item_base.html:345 #: templates/InvenTree/search.html:137 templates/js/translated/build.js:1660 #: templates/navbar.html:35 msgid "Build" msgstr "" -#: build/models.py:1257 +#: build/models.py:1264 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1273 build/serializers.py:388 order/serializers.py:690 -#: order/serializers.py:708 stock/serializers.py:577 stock/serializers.py:695 +#: build/models.py:1280 build/serializers.py:388 order/serializers.py:696 +#: order/serializers.py:714 stock/serializers.py:578 stock/serializers.py:696 #: stock/templates/stock/item_base.html:9 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:367 @@ -920,24 +921,24 @@ msgstr "" #: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 #: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 #: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 -#: templates/js/translated/stock.js:555 templates/js/translated/stock.js:720 -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:563 templates/js/translated/stock.js:728 +#: templates/js/translated/stock.js:2628 msgid "Stock Item" msgstr "" -#: build/models.py:1274 +#: build/models.py:1281 msgid "Source stock item" msgstr "" -#: build/models.py:1287 +#: build/models.py:1294 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1295 +#: build/models.py:1302 msgid "Install into" msgstr "" -#: build/models.py:1296 +#: build/models.py:1303 msgid "Destination stock item" msgstr "" @@ -962,16 +963,16 @@ msgid "This build output is not fully allocated" msgstr "" #: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 -#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:730 -#: stock/serializers.py:971 stock/templates/stock/item_base.html:313 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:731 +#: stock/serializers.py:972 stock/templates/stock/item_base.html:313 #: templates/js/translated/barcode.js:384 #: templates/js/translated/barcode.js:557 templates/js/translated/build.js:480 #: templates/js/translated/build.js:1087 templates/js/translated/order.js:508 #: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 #: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 -#: templates/js/translated/part.js:179 templates/js/translated/stock.js:556 -#: templates/js/translated/stock.js:721 templates/js/translated/stock.js:928 -#: templates/js/translated/stock.js:1676 templates/js/translated/stock.js:2411 +#: templates/js/translated/part.js:179 templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:729 templates/js/translated/stock.js:936 +#: templates/js/translated/stock.js:1684 templates/js/translated/stock.js:2569 msgid "Location" msgstr "" @@ -980,12 +981,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:552 +#: build/templates/build/detail.html:63 order/models.py:557 #: order/serializers.py:247 stock/templates/stock/item_base.html:187 #: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1716 #: templates/js/translated/order.js:591 templates/js/translated/order.js:840 -#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1651 -#: templates/js/translated/stock.js:2488 templates/js/translated/stock.js:2637 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1659 +#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2795 msgid "Status" msgstr "" @@ -1021,8 +1022,8 @@ msgstr "" msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:313 build/serializers.py:362 part/models.py:2753 -#: part/models.py:2912 +#: build/serializers.py:313 build/serializers.py:362 part/models.py:2760 +#: part/models.py:2919 msgid "BOM Item" msgstr "" @@ -1038,16 +1039,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:394 stock/serializers.py:584 +#: build/serializers.py:394 stock/serializers.py:585 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:408 order/models.py:277 order/serializers.py:240 -#: stock/models.py:365 stock/models.py:1077 stock/serializers.py:305 +#: build/serializers.py:408 order/models.py:280 order/serializers.py:240 +#: stock/models.py:367 stock/models.py:1105 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:450 order/serializers.py:741 +#: build/serializers.py:450 order/serializers.py:747 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1060,7 +1061,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:491 order/serializers.py:984 +#: build/serializers.py:491 order/serializers.py:990 msgid "Allocation items must be provided" msgstr "" @@ -1164,13 +1165,13 @@ msgid "Completed" msgstr "" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:927 -#: order/models.py:1023 order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:947 +#: order/models.py:1043 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:307 -#: templates/js/translated/order.js:1218 +#: templates/js/translated/order.js:1218 templates/js/translated/stock.js:2304 msgid "Sales Order" msgstr "" @@ -1224,7 +1225,7 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:878 stock/forms.py:136 +#: build/templates/build/detail.html:50 order/models.py:898 stock/forms.py:136 #: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1239,7 +1240,7 @@ msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:331 -#: templates/js/translated/stock.js:1665 templates/js/translated/stock.js:2644 +#: templates/js/translated/stock.js:1673 templates/js/translated/stock.js:2802 #: templates/js/translated/table_filters.js:151 #: templates/js/translated/table_filters.js:238 msgid "Batch" @@ -1343,9 +1344,9 @@ msgstr "" #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 #: order/templates/order/sales_order_detail.html:107 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:196 -#: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 -#: stock/templates/stock/stock_sidebar.html:19 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:213 +#: part/templates/part/part_sidebar.html:52 stock/templates/stock/item.html:112 +#: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" @@ -1360,8 +1361,8 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:108 #: order/templates/order/sales_order_detail.html:127 #: order/templates/order/sales_order_detail.html:186 -#: part/templates/part/detail.html:124 stock/templates/stock/item.html:115 -#: stock/templates/stock/item.html:205 +#: part/templates/part/detail.html:141 stock/templates/stock/item.html:132 +#: stock/templates/stock/item.html:235 msgid "Edit Notes" msgstr "" @@ -1373,7 +1374,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:303 +#: build/templates/build/index.html:18 part/templates/part/detail.html:320 msgid "New Build Order" msgstr "" @@ -1453,23 +1454,23 @@ msgstr "" msgid "Delete Build Order" msgstr "" -#: common/files.py:67 +#: common/files.py:65 msgid "Unsupported file format: {ext.upper()}" msgstr "" -#: common/files.py:69 +#: common/files.py:67 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:74 +#: common/files.py:72 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:76 +#: common/files.py:74 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:78 +#: common/files.py:76 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1490,740 +1491,828 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:344 common/models.py:998 common/models.py:1206 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:352 +msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:346 +#: common/models.py:354 msgid "Settings value" msgstr "" -#: common/models.py:380 +#: common/models.py:388 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:400 +#: common/models.py:408 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:411 +#: common/models.py:419 msgid "Value must be an integer value" msgstr "" -#: common/models.py:434 +#: common/models.py:442 msgid "Key string must be unique" msgstr "" -#: common/models.py:553 +#: common/models.py:561 msgid "No group" msgstr "" -#: common/models.py:595 +#: common/models.py:603 msgid "Restart required" msgstr "" -#: common/models.py:596 +#: common/models.py:604 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:603 +#: common/models.py:611 msgid "InvenTree Instance Name" msgstr "" -#: common/models.py:605 +#: common/models.py:613 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:609 +#: common/models.py:617 msgid "Use instance name" msgstr "" -#: common/models.py:610 +#: common/models.py:618 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:616 company/models.py:100 company/models.py:101 +#: common/models.py:624 company/models.py:100 company/models.py:101 msgid "Company name" msgstr "" -#: common/models.py:617 +#: common/models.py:625 msgid "Internal company name" msgstr "" -#: common/models.py:622 +#: common/models.py:630 msgid "Base URL" msgstr "" -#: common/models.py:623 +#: common/models.py:631 msgid "Base URL for server instance" msgstr "" -#: common/models.py:629 +#: common/models.py:637 msgid "Default Currency" msgstr "" -#: common/models.py:630 +#: common/models.py:638 msgid "Default currency" msgstr "" -#: common/models.py:636 +#: common/models.py:644 msgid "Download from URL" msgstr "" -#: common/models.py:637 +#: common/models.py:645 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:643 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:651 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:644 +#: common/models.py:652 msgid "Enable barcode scanner support" msgstr "" -#: common/models.py:650 +#: common/models.py:658 msgid "IPN Regex" msgstr "" -#: common/models.py:651 +#: common/models.py:659 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:655 +#: common/models.py:663 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:656 +#: common/models.py:664 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:662 +#: common/models.py:670 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:663 +#: common/models.py:671 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:669 +#: common/models.py:677 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:670 +#: common/models.py:678 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:676 +#: common/models.py:684 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:677 +#: common/models.py:685 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:683 +#: common/models.py:691 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:684 +#: common/models.py:692 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:690 +#: common/models.py:698 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:691 +#: common/models.py:699 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:697 part/models.py:2482 report/models.py:187 +#: common/models.py:705 part/models.py:2489 report/models.py:187 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:422 msgid "Template" msgstr "" -#: common/models.py:698 +#: common/models.py:706 msgid "Parts are templates by default" msgstr "" -#: common/models.py:704 part/models.py:919 templates/js/translated/bom.js:1068 +#: common/models.py:712 part/models.py:921 templates/js/translated/bom.js:1082 #: templates/js/translated/table_filters.js:168 #: templates/js/translated/table_filters.js:434 msgid "Assembly" msgstr "" -#: common/models.py:705 +#: common/models.py:713 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:711 part/models.py:925 +#: common/models.py:719 part/models.py:927 #: templates/js/translated/table_filters.js:438 msgid "Component" msgstr "" -#: common/models.py:712 +#: common/models.py:720 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:718 part/models.py:936 +#: common/models.py:726 part/models.py:938 msgid "Purchaseable" msgstr "" -#: common/models.py:719 +#: common/models.py:727 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:725 part/models.py:941 +#: common/models.py:733 part/models.py:943 #: templates/js/translated/table_filters.js:446 msgid "Salable" msgstr "" -#: common/models.py:726 +#: common/models.py:734 msgid "Parts are salable by default" msgstr "" -#: common/models.py:732 part/models.py:931 +#: common/models.py:740 part/models.py:933 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 #: templates/js/translated/table_filters.js:450 msgid "Trackable" msgstr "" -#: common/models.py:733 +#: common/models.py:741 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:739 part/models.py:951 +#: common/models.py:747 part/models.py:953 #: part/templates/part/part_base.html:147 #: templates/js/translated/table_filters.js:42 msgid "Virtual" msgstr "" -#: common/models.py:740 +#: common/models.py:748 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:746 +#: common/models.py:754 msgid "Show Import in Views" msgstr "" -#: common/models.py:747 +#: common/models.py:755 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:753 +#: common/models.py:761 msgid "Show Price in Forms" msgstr "" -#: common/models.py:754 +#: common/models.py:762 msgid "Display part price in some forms" msgstr "" -#: common/models.py:765 +#: common/models.py:773 msgid "Show Price in BOM" msgstr "" -#: common/models.py:766 +#: common/models.py:774 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:772 +#: common/models.py:780 msgid "Show related parts" msgstr "" -#: common/models.py:773 +#: common/models.py:781 msgid "Display related parts for a part" msgstr "" -#: common/models.py:779 +#: common/models.py:787 msgid "Create initial stock" msgstr "" -#: common/models.py:780 +#: common/models.py:788 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:786 +#: common/models.py:794 msgid "Internal Prices" msgstr "" -#: common/models.py:787 +#: common/models.py:795 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:793 +#: common/models.py:801 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:794 +#: common/models.py:802 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:800 +#: common/models.py:808 msgid "Part Name Display Format" msgstr "" -#: common/models.py:801 +#: common/models.py:809 msgid "Format to display the part name" msgstr "" -#: common/models.py:808 +#: common/models.py:816 msgid "Enable Reports" msgstr "" -#: common/models.py:809 +#: common/models.py:817 msgid "Enable generation of reports" msgstr "" -#: common/models.py:815 templates/stats.html:25 +#: common/models.py:823 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:816 +#: common/models.py:824 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:822 +#: common/models.py:830 msgid "Page Size" msgstr "" -#: common/models.py:823 +#: common/models.py:831 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:833 +#: common/models.py:841 msgid "Test Reports" msgstr "" -#: common/models.py:834 +#: common/models.py:842 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:840 +#: common/models.py:848 msgid "Stock Expiry" msgstr "" -#: common/models.py:841 +#: common/models.py:849 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:847 +#: common/models.py:855 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:848 +#: common/models.py:856 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:854 +#: common/models.py:862 msgid "Stock Stale Time" msgstr "" -#: common/models.py:855 +#: common/models.py:863 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:857 +#: common/models.py:865 msgid "days" msgstr "" -#: common/models.py:862 +#: common/models.py:870 msgid "Build Expired Stock" msgstr "" -#: common/models.py:863 +#: common/models.py:871 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:869 +#: common/models.py:877 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:870 +#: common/models.py:878 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:876 -msgid "Group by Part" -msgstr "" - -#: common/models.py:877 -msgid "Group stock items by part reference in table views" -msgstr "" - -#: common/models.py:883 +#: common/models.py:884 msgid "Build Order Reference Prefix" msgstr "" -#: common/models.py:884 +#: common/models.py:885 msgid "Prefix value for build order reference" msgstr "" -#: common/models.py:889 +#: common/models.py:890 msgid "Build Order Reference Regex" msgstr "" -#: common/models.py:890 +#: common/models.py:891 msgid "Regular expression pattern for matching build order reference" msgstr "" -#: common/models.py:894 +#: common/models.py:895 msgid "Sales Order Reference Prefix" msgstr "" -#: common/models.py:895 +#: common/models.py:896 msgid "Prefix value for sales order reference" msgstr "" -#: common/models.py:900 +#: common/models.py:901 msgid "Purchase Order Reference Prefix" msgstr "" -#: common/models.py:901 +#: common/models.py:902 msgid "Prefix value for purchase order reference" msgstr "" -#: common/models.py:907 +#: common/models.py:908 msgid "Enable password forgot" msgstr "" -#: common/models.py:908 +#: common/models.py:909 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:913 +#: common/models.py:914 msgid "Enable registration" msgstr "" -#: common/models.py:914 +#: common/models.py:915 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:919 +#: common/models.py:920 msgid "Enable SSO" msgstr "" -#: common/models.py:920 +#: common/models.py:921 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:925 +#: common/models.py:926 msgid "Email required" msgstr "" -#: common/models.py:926 +#: common/models.py:927 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:931 +#: common/models.py:932 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:932 +#: common/models.py:933 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:937 +#: common/models.py:938 msgid "Mail twice" msgstr "" -#: common/models.py:938 +#: common/models.py:939 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:943 +#: common/models.py:944 msgid "Password twice" msgstr "" -#: common/models.py:944 +#: common/models.py:945 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:949 +#: common/models.py:950 msgid "Group on signup" msgstr "" -#: common/models.py:950 +#: common/models.py:951 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:955 +#: common/models.py:956 msgid "Enforce MFA" msgstr "" -#: common/models.py:956 +#: common/models.py:957 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:961 +#: common/models.py:964 msgid "Enable URL integration" msgstr "" -#: common/models.py:962 +#: common/models.py:965 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:968 +#: common/models.py:971 msgid "Enable navigation integration" msgstr "" -#: common/models.py:969 +#: common/models.py:972 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:975 +#: common/models.py:978 msgid "Enable app integration" msgstr "" -#: common/models.py:976 +#: common/models.py:979 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:982 +#: common/models.py:985 msgid "Enable schedule integration" msgstr "" -#: common/models.py:983 +#: common/models.py:986 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1029 +#: common/models.py:992 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:993 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:1008 common/models.py:1216 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1039 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1030 +#: common/models.py:1040 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1035 +#: common/models.py:1045 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1036 +#: common/models.py:1046 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1041 +#: common/models.py:1051 msgid "Show latest parts" msgstr "" -#: common/models.py:1042 +#: common/models.py:1052 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1047 +#: common/models.py:1057 msgid "Recent Part Count" msgstr "" -#: common/models.py:1048 +#: common/models.py:1058 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1054 +#: common/models.py:1064 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1055 +#: common/models.py:1065 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1060 +#: common/models.py:1070 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1061 +#: common/models.py:1071 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1066 +#: common/models.py:1076 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1067 +#: common/models.py:1077 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1072 +#: common/models.py:1082 msgid "Show low stock" msgstr "" -#: common/models.py:1073 +#: common/models.py:1083 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1078 +#: common/models.py:1088 msgid "Show depleted stock" msgstr "" -#: common/models.py:1079 +#: common/models.py:1089 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1084 +#: common/models.py:1094 msgid "Show needed stock" msgstr "" -#: common/models.py:1085 +#: common/models.py:1095 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1090 +#: common/models.py:1100 msgid "Show expired stock" msgstr "" -#: common/models.py:1091 +#: common/models.py:1101 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1096 +#: common/models.py:1106 msgid "Show stale stock" msgstr "" -#: common/models.py:1097 +#: common/models.py:1107 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1102 +#: common/models.py:1112 msgid "Show pending builds" msgstr "" -#: common/models.py:1103 +#: common/models.py:1113 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1108 +#: common/models.py:1118 msgid "Show overdue builds" msgstr "" -#: common/models.py:1109 +#: common/models.py:1119 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1114 +#: common/models.py:1124 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1115 +#: common/models.py:1125 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1120 +#: common/models.py:1130 msgid "Show overdue POs" msgstr "" -#: common/models.py:1121 +#: common/models.py:1131 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1126 +#: common/models.py:1136 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1127 +#: common/models.py:1137 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1132 +#: common/models.py:1142 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1133 +#: common/models.py:1143 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1139 +#: common/models.py:1149 msgid "Inline label display" msgstr "" -#: common/models.py:1140 +#: common/models.py:1150 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1146 +#: common/models.py:1156 msgid "Inline report display" msgstr "" -#: common/models.py:1147 +#: common/models.py:1157 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1153 +#: common/models.py:1163 msgid "Search Preview Results" msgstr "" -#: common/models.py:1154 +#: common/models.py:1164 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1160 +#: common/models.py:1170 msgid "Search Show Stock" msgstr "" -#: common/models.py:1161 +#: common/models.py:1171 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1167 +#: common/models.py:1177 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1168 +#: common/models.py:1178 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1174 +#: common/models.py:1184 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1175 +#: common/models.py:1185 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1181 +#: common/models.py:1191 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1182 +#: common/models.py:1192 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1188 +#: common/models.py:1198 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1189 +#: common/models.py:1199 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1254 company/forms.py:43 +#: common/models.py:1264 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1261 company/serializers.py:264 +#: common/models.py:1271 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 -#: templates/js/translated/part.js:909 templates/js/translated/part.js:1860 +#: templates/js/translated/part.js:915 templates/js/translated/part.js:1867 msgid "Price" msgstr "" -#: common/models.py:1262 +#: common/models.py:1272 msgid "Unit price at specified quantity" msgstr "" +#: common/models.py:1429 common/models.py:1568 +msgid "Endpoint" +msgstr "" + +#: common/models.py:1430 +msgid "Endpoint at which this webhook is received" +msgstr "" + +#: common/models.py:1439 +msgid "Name for this webhook" +msgstr "" + +#: common/models.py:1444 part/models.py:948 plugin/models.py:46 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:96 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:417 +msgid "Active" +msgstr "" + +#: common/models.py:1445 +msgid "Is this webhook active" +msgstr "" + +#: common/models.py:1459 +msgid "Token" +msgstr "" + +#: common/models.py:1460 +msgid "Token for access" +msgstr "" + +#: common/models.py:1467 +msgid "Secret" +msgstr "" + +#: common/models.py:1468 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:1535 +msgid "Message ID" +msgstr "" + +#: common/models.py:1536 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:1544 +msgid "Host" +msgstr "" + +#: common/models.py:1545 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:1552 +msgid "Header" +msgstr "" + +#: common/models.py:1553 +msgid "Header of this message" +msgstr "" + +#: common/models.py:1559 +msgid "Body" +msgstr "" + +#: common/models.py:1560 +msgid "Body of this message" +msgstr "" + +#: common/models.py:1569 +msgid "Endpoint on which this message was received" +msgstr "" + +#: common/models.py:1574 +msgid "Worked on" +msgstr "" + +#: common/models.py:1575 +msgid "Was the work on this message finished?" +msgstr "" + #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 #: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 -#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 -#: part/views.py:764 +#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:213 +#: part/views.py:773 msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 #: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 -#: part/views.py:765 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:214 +#: part/views.py:774 msgid "Match Fields" msgstr "" @@ -2315,7 +2404,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:139 part/models.py:838 +#: company/models.py:139 part/models.py:840 msgid "Image" msgstr "" @@ -2352,8 +2441,8 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:469 -#: stock/templates/stock/item_base.html:142 +#: company/models.py:320 company/models.py:535 stock/models.py:471 +#: stock/templates/stock/item_base.html:142 templates/js/translated/bom.js:328 msgid "Base Part" msgstr "" @@ -2380,7 +2469,7 @@ msgstr "" #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:533 #: templates/js/translated/company.js:818 templates/js/translated/order.js:1038 -#: templates/js/translated/part.js:245 templates/js/translated/part.js:889 +#: templates/js/translated/part.js:245 templates/js/translated/part.js:895 msgid "MPN" msgstr "" @@ -2409,8 +2498,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1960 templates/js/translated/company.js:647 -#: templates/js/translated/part.js:709 templates/js/translated/stock.js:1296 +#: stock/models.py:1988 templates/js/translated/company.js:647 +#: templates/js/translated/part.js:715 templates/js/translated/stock.js:1304 msgid "Value" msgstr "" @@ -2418,10 +2507,10 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:429 part/models.py:913 part/models.py:2450 +#: company/models.py:429 part/models.py:915 part/models.py:2457 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:284 -#: templates/js/translated/company.js:653 templates/js/translated/part.js:715 +#: templates/InvenTree/settings/settings.html:287 +#: templates/js/translated/company.js:653 templates/js/translated/part.js:721 msgid "Units" msgstr "" @@ -2434,13 +2523,13 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:224 +#: company/templates/company/supplier_part.html:87 order/models.py:227 #: order/templates/order/order_base.html:112 -#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 -#: part/bom.py:247 stock/templates/stock/item_base.html:397 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:237 +#: part/bom.py:265 stock/templates/stock/item_base.html:397 #: templates/js/translated/company.js:337 #: templates/js/translated/company.js:774 templates/js/translated/order.js:823 -#: templates/js/translated/part.js:215 templates/js/translated/part.js:857 +#: templates/js/translated/part.js:215 templates/js/translated/part.js:863 #: templates/js/translated/table_filters.js:393 msgid "Supplier" msgstr "" @@ -2450,8 +2539,8 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 -#: templates/js/translated/part.js:226 templates/js/translated/part.js:875 +#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1025 +#: templates/js/translated/part.js:226 templates/js/translated/part.js:881 msgid "SKU" msgstr "" @@ -2472,22 +2561,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:576 company/templates/company/supplier_part.html:119 -#: part/models.py:2641 report/templates/report/inventree_po_report.html:93 +#: part/models.py:2648 report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "base cost" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:493 stock/templates/stock/item_base.html:338 -#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1791 +#: stock/models.py:495 stock/templates/stock/item_base.html:338 +#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1799 msgid "Packaging" msgstr "" @@ -2495,7 +2584,7 @@ msgstr "" msgid "Part packaging" msgstr "" -#: company/models.py:584 part/models.py:1781 +#: company/models.py:584 part/models.py:1783 msgid "multiple" msgstr "" @@ -2554,12 +2643,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:547 -#: order/templates/order/sales_order_base.html:115 stock/models.py:512 -#: stock/models.py:513 stock/serializers.py:625 +#: company/templates/company/company_base.html:83 order/models.py:552 +#: order/templates/order/sales_order_base.html:115 stock/models.py:514 +#: stock/models.py:515 stock/serializers.py:626 #: stock/templates/stock/item_base.html:290 #: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 -#: templates/js/translated/stock.js:2452 +#: templates/js/translated/stock.js:2610 #: templates/js/translated/table_filters.js:397 msgid "Customer" msgstr "" @@ -2590,7 +2679,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:118 -#: part/templates/part/detail.html:336 +#: part/templates/part/detail.html:353 msgid "New Supplier Part" msgstr "" @@ -2598,8 +2687,8 @@ msgstr "" #: company/templates/company/detail.html:79 #: company/templates/company/manufacturer_part.html:127 #: company/templates/company/manufacturer_part.html:156 -#: part/templates/part/category.html:171 part/templates/part/detail.html:345 -#: part/templates/part/detail.html:374 +#: part/templates/part/category.html:171 part/templates/part/detail.html:362 +#: part/templates/part/detail.html:391 msgid "Options" msgstr "" @@ -2627,7 +2716,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:67 part/templates/part/detail.html:364 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:381 msgid "New Manufacturer Part" msgstr "" @@ -2641,7 +2730,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:68 part/templates/part/part_sidebar.html:33 +#: part/templates/part/detail.html:85 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197 #: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 @@ -2663,7 +2752,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:91 part/templates/part/part_sidebar.html:37 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:41 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217 #: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 @@ -2691,13 +2780,13 @@ msgstr "" #: company/templates/company/detail.html:384 #: company/templates/company/manufacturer_part.html:215 -#: part/templates/part/detail.html:418 +#: part/templates/part/detail.html:435 msgid "Delete Supplier Parts?" msgstr "" #: company/templates/company/detail.html:385 #: company/templates/company/manufacturer_part.html:216 -#: part/templates/part/detail.html:419 +#: part/templates/part/detail.html:436 msgid "All selected supplier parts will be deleted" msgstr "" @@ -2714,7 +2803,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:34 #: company/templates/company/supplier_part.html:159 -#: part/templates/part/detail.html:71 part/templates/part/part_base.html:76 +#: part/templates/part/detail.html:88 part/templates/part/part_base.html:76 msgid "Order part" msgstr "" @@ -2735,34 +2824,34 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 -#: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 +#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:163 #: templates/InvenTree/search.html:188 templates/navbar.html:45 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:129 -#: part/templates/part/detail.html:347 +#: part/templates/part/detail.html:364 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:129 #: company/templates/company/manufacturer_part.html:158 #: company/templates/company/manufacturer_part.html:254 -#: part/templates/part/detail.html:347 part/templates/part/detail.html:376 +#: part/templates/part/detail.html:364 part/templates/part/detail.html:393 #: templates/js/translated/company.js:426 templates/js/translated/helpers.js:31 -#: users/models.py:210 +#: users/models.py:212 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:143 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:17 -#: part/templates/part/detail.html:170 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:187 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:147 -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:192 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part.html:65 msgid "New Parameter" @@ -2773,7 +2862,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:191 -#: part/templates/part/detail.html:862 +#: part/templates/part/detail.html:892 msgid "Add Parameter" msgstr "" @@ -2802,9 +2891,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:477 +#: company/templates/company/supplier_part.html:24 stock/models.py:479 #: stock/templates/stock/item_base.html:402 -#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1748 +#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1756 msgid "Supplier Part" msgstr "" @@ -2830,7 +2919,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:167 -#: templates/js/translated/stock.js:360 +#: templates/js/translated/stock.js:368 msgid "New Stock Item" msgstr "" @@ -2840,7 +2929,7 @@ msgid "Supplier Part Orders" msgstr "" #: company/templates/company/supplier_part.html:160 -#: part/templates/part/detail.html:72 +#: part/templates/part/detail.html:89 msgid "Order Part" msgstr "" @@ -2851,7 +2940,7 @@ msgstr "" #: company/templates/company/supplier_part.html:184 #: company/templates/company/supplier_part.html:290 -#: part/templates/part/prices.html:271 part/views.py:1619 +#: part/templates/part/prices.html:271 part/views.py:1628 msgid "Add Price Break" msgstr "" @@ -2859,11 +2948,11 @@ msgstr "" msgid "No price break information found" msgstr "" -#: company/templates/company/supplier_part.html:224 part/views.py:1681 +#: company/templates/company/supplier_part.html:224 part/views.py:1690 msgid "Delete Price Break" msgstr "" -#: company/templates/company/supplier_part.html:238 part/views.py:1667 +#: company/templates/company/supplier_part.html:238 part/views.py:1676 msgid "Edit Price Break" msgstr "" @@ -2881,10 +2970,10 @@ msgstr "" #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:150 #: templates/InvenTree/settings/sidebar.html:41 -#: templates/js/translated/bom.js:328 templates/js/translated/part.js:489 -#: templates/js/translated/part.js:624 templates/js/translated/part.js:1118 -#: templates/js/translated/part.js:1279 templates/js/translated/stock.js:927 -#: templates/js/translated/stock.js:1580 templates/navbar.html:28 +#: templates/js/translated/bom.js:340 templates/js/translated/part.js:495 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1125 +#: templates/js/translated/part.js:1286 templates/js/translated/stock.js:935 +#: templates/js/translated/stock.js:1588 templates/navbar.html:28 msgid "Stock" msgstr "" @@ -2907,8 +2996,8 @@ msgstr "" #: stock/templates/stock/location.html:151 #: stock/templates/stock/location.html:163 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2351 -#: templates/stats.html:93 templates/stats.html:102 users/models.py:43 +#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2509 +#: templates/stats.html:105 templates/stats.html:114 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2937,20 +3026,20 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:129 part/views.py:584 +#: company/views.py:129 part/views.py:593 msgid "Download Image" msgstr "" -#: company/views.py:158 part/views.py:616 +#: company/views.py:158 part/views.py:625 msgid "Image size exceeds maximum allowable size for download" msgstr "" -#: company/views.py:165 part/views.py:623 +#: company/views.py:165 part/views.py:632 #, python-brace-format msgid "Invalid response: {code}" msgstr "" -#: company/views.py:174 part/views.py:632 +#: company/views.py:174 part/views.py:641 msgid "Supplied URL is not a valid image file" msgstr "" @@ -3036,282 +3125,282 @@ msgstr "" msgid "Cancel order" msgstr "" -#: order/models.py:122 +#: order/models.py:125 msgid "Order description" msgstr "" -#: order/models.py:124 +#: order/models.py:127 msgid "Link to external page" msgstr "" -#: order/models.py:132 +#: order/models.py:135 msgid "Created By" msgstr "" -#: order/models.py:139 +#: order/models.py:142 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:144 +#: order/models.py:147 msgid "Order notes" msgstr "" -#: order/models.py:211 order/models.py:537 +#: order/models.py:214 order/models.py:542 msgid "Order reference" msgstr "" -#: order/models.py:216 order/models.py:552 +#: order/models.py:219 order/models.py:557 msgid "Purchase order status" msgstr "" -#: order/models.py:225 +#: order/models.py:228 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:228 order/templates/order/order_base.html:118 +#: order/models.py:231 order/templates/order/order_base.html:118 #: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:228 +#: order/models.py:231 msgid "Supplier order reference code" msgstr "" -#: order/models.py:235 +#: order/models.py:238 msgid "received by" msgstr "" -#: order/models.py:240 +#: order/models.py:243 msgid "Issue Date" msgstr "" -#: order/models.py:241 +#: order/models.py:244 msgid "Date order was issued" msgstr "" -#: order/models.py:246 +#: order/models.py:249 msgid "Target Delivery Date" msgstr "" -#: order/models.py:247 +#: order/models.py:250 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:253 +#: order/models.py:256 msgid "Date order was completed" msgstr "" -#: order/models.py:282 +#: order/models.py:285 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:411 -msgid "Quantity must be an integer" -msgstr "" - -#: order/models.py:415 +#: order/models.py:420 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:548 +#: order/models.py:553 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer Reference " msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer order reference code" msgstr "" -#: order/models.py:559 +#: order/models.py:564 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:562 order/models.py:1028 +#: order/models.py:567 order/models.py:1048 #: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:569 +#: order/models.py:574 msgid "shipped by" msgstr "" -#: order/models.py:635 +#: order/models.py:640 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:639 +#: order/models.py:644 msgid "Only a pending order can be marked as complete" msgstr "" -#: order/models.py:642 +#: order/models.py:647 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:645 +#: order/models.py:650 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:797 +#: order/models.py:806 msgid "Item quantity" msgstr "" -#: order/models.py:803 +#: order/models.py:812 msgid "Line item reference" msgstr "" -#: order/models.py:805 +#: order/models.py:814 msgid "Line item notes" msgstr "" -#: order/models.py:835 order/models.py:926 order/models.py:1022 -#: templates/js/translated/order.js:1820 +#: order/models.py:842 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:855 order/models.py:946 order/models.py:1042 +#: templates/js/translated/order.js:1820 templates/js/translated/stock.js:2271 msgid "Order" msgstr "" -#: order/models.py:836 order/templates/order/order_base.html:9 +#: order/models.py:856 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:352 -#: templates/js/translated/order.js:801 templates/js/translated/part.js:832 -#: templates/js/translated/stock.js:1725 templates/js/translated/stock.js:2433 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:838 +#: templates/js/translated/stock.js:1733 templates/js/translated/stock.js:2591 msgid "Purchase Order" msgstr "" -#: order/models.py:857 +#: order/models.py:877 msgid "Supplier part" msgstr "" -#: order/models.py:864 order/templates/order/order_base.html:163 +#: order/models.py:884 order/templates/order/order_base.html:163 #: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 -#: templates/js/translated/part.js:904 templates/js/translated/part.js:930 +#: templates/js/translated/part.js:910 templates/js/translated/part.js:937 #: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:865 +#: order/models.py:885 msgid "Number of items received" msgstr "" -#: order/models.py:872 part/templates/part/prices.html:176 stock/models.py:606 +#: order/models.py:892 part/templates/part/prices.html:176 stock/models.py:608 #: stock/serializers.py:170 stock/templates/stock/item_base.html:359 -#: templates/js/translated/stock.js:1779 +#: templates/js/translated/stock.js:1787 msgid "Purchase Price" msgstr "" -#: order/models.py:873 +#: order/models.py:893 msgid "Unit purchase price" msgstr "" -#: order/models.py:881 +#: order/models.py:901 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:936 part/templates/part/part_pricing.html:112 +#: order/models.py:956 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:937 +#: order/models.py:957 msgid "Unit sale price" msgstr "" -#: order/models.py:942 +#: order/models.py:962 msgid "Shipped quantity" msgstr "" -#: order/models.py:1029 +#: order/models.py:1049 msgid "Date of shipment" msgstr "" -#: order/models.py:1036 +#: order/models.py:1056 msgid "Checked By" msgstr "" -#: order/models.py:1037 +#: order/models.py:1057 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1045 +#: order/models.py:1065 msgid "Shipment number" msgstr "" -#: order/models.py:1052 +#: order/models.py:1072 msgid "Shipment notes" msgstr "" -#: order/models.py:1059 +#: order/models.py:1079 msgid "Tracking Number" msgstr "" -#: order/models.py:1060 +#: order/models.py:1080 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1070 +#: order/models.py:1090 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1073 +#: order/models.py:1093 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1149 order/models.py:1151 +#: order/models.py:1171 order/models.py:1173 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1155 +#: order/models.py:1177 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1157 +#: order/models.py:1179 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1160 +#: order/models.py:1182 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1164 +#: order/models.py:1186 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:1170 order/serializers.py:734 +#: order/models.py:1192 order/serializers.py:740 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1173 +#: order/models.py:1195 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1174 +#: order/models.py:1196 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1182 +#: order/models.py:1204 msgid "Line" msgstr "" -#: order/models.py:1190 order/serializers.py:825 order/serializers.py:953 -#: templates/js/translated/model_renderers.js:251 +#: order/models.py:1212 order/serializers.py:831 order/serializers.py:959 +#: templates/js/translated/model_renderers.js:285 msgid "Shipment" msgstr "" -#: order/models.py:1191 +#: order/models.py:1213 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1203 +#: order/models.py:1225 msgid "Item" msgstr "" -#: order/models.py:1204 +#: order/models.py:1226 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1207 +#: order/models.py:1229 msgid "Enter stock allocation quantity" msgstr "" @@ -3319,7 +3408,7 @@ msgstr "" msgid "Purchase price currency" msgstr "" -#: order/serializers.py:211 order/serializers.py:790 +#: order/serializers.py:211 order/serializers.py:796 msgid "Line Item" msgstr "" @@ -3355,39 +3444,39 @@ msgstr "" msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:587 msgid "Sale price currency" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:655 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:699 order/serializers.py:802 +#: order/serializers.py:705 order/serializers.py:808 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:721 +#: order/serializers.py:727 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:815 +#: order/serializers.py:821 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:839 order/serializers.py:964 +#: order/serializers.py:845 order/serializers.py:970 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:842 order/serializers.py:967 +#: order/serializers.py:848 order/serializers.py:973 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:894 +#: order/serializers.py:900 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:910 msgid "The following serial numbers are already allocated" msgstr "" @@ -3441,6 +3530,7 @@ msgstr "" #: order/templates/order/order_base.html:94 #: order/templates/order/sales_order_base.html:89 +#: templates/js/translated/stock.js:2327 msgid "Order Status" msgstr "" @@ -3538,7 +3628,7 @@ msgstr "" #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/build.js:300 templates/js/translated/build.js:1311 #: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 -#: templates/js/translated/stock.js:593 templates/js/translated/stock.js:761 +#: templates/js/translated/stock.js:601 templates/js/translated/stock.js:769 msgid "Remove row" msgstr "" @@ -3729,7 +3819,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:48 -#: templates/js/translated/bom.js:720 templates/js/translated/build.js:1243 +#: templates/js/translated/bom.js:732 templates/js/translated/build.js:1243 msgid "Actions" msgstr "" @@ -3832,447 +3922,448 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:125 part/models.py:81 part/models.py:847 +#: part/bom.py:125 part/models.py:83 part/models.py:849 #: part/templates/part/category.html:108 part/templates/part/part_base.html:338 msgid "Default Location" msgstr "" -#: part/bom.py:126 part/templates/part/part_base.html:185 +#: part/bom.py:126 templates/email/low_stock_notification.html:17 +msgid "Total Stock" +msgstr "" + +#: part/bom.py:127 part/templates/part/part_base.html:185 msgid "Available Stock" msgstr "" -#: part/forms.py:85 +#: part/bom.py:128 part/templates/part/part_base.html:203 +#: templates/js/translated/part.js:1301 +msgid "On Order" +msgstr "" + +#: part/forms.py:84 msgid "Select part category" msgstr "" -#: part/forms.py:122 +#: part/forms.py:121 msgid "Add parameter template to same level categories" msgstr "" -#: part/forms.py:126 +#: part/forms.py:125 msgid "Add parameter template to all categories" msgstr "" -#: part/forms.py:146 +#: part/forms.py:145 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 +#: part/models.py:84 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:95 part/models.py:2526 part/templates/part/category.html:15 +#: part/models.py:97 part/models.py:2533 part/templates/part/category.html:15 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:96 part/templates/part/category.html:128 -#: templates/InvenTree/search.html:95 templates/stats.html:84 +#: part/models.py:98 part/templates/part/category.html:128 +#: templates/InvenTree/search.html:95 templates/stats.html:96 #: users/models.py:40 msgid "Part Categories" msgstr "" -#: part/models.py:358 part/templates/part/cat_link.html:3 +#: part/models.py:360 part/templates/part/cat_link.html:3 #: part/templates/part/category.html:17 part/templates/part/category.html:133 #: part/templates/part/category.html:153 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82 #: templates/InvenTree/settings/sidebar.html:37 -#: templates/js/translated/part.js:1656 templates/navbar.html:21 -#: templates/stats.html:80 templates/stats.html:89 users/models.py:41 +#: templates/js/translated/part.js:1663 templates/navbar.html:21 +#: templates/stats.html:92 templates/stats.html:101 users/models.py:41 msgid "Parts" msgstr "" -#: part/models.py:450 +#: part/models.py:452 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:500 part/models.py:512 +#: part/models.py:502 part/models.py:514 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:642 +#: part/models.py:644 msgid "Next available serial numbers are" msgstr "" -#: part/models.py:646 +#: part/models.py:648 msgid "Next available serial number is" msgstr "" -#: part/models.py:651 +#: part/models.py:653 msgid "Most recent serial number is" msgstr "" -#: part/models.py:746 +#: part/models.py:748 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:771 +#: part/models.py:773 msgid "Part name" msgstr "" -#: part/models.py:778 +#: part/models.py:780 msgid "Is Template" msgstr "" -#: part/models.py:779 +#: part/models.py:781 msgid "Is this part a template part?" msgstr "" -#: part/models.py:789 +#: part/models.py:791 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:790 +#: part/models.py:792 msgid "Variant Of" msgstr "" -#: part/models.py:796 +#: part/models.py:798 msgid "Part description" msgstr "" -#: part/models.py:801 part/templates/part/category.html:86 +#: part/models.py:803 part/templates/part/category.html:86 #: part/templates/part/part_base.html:302 msgid "Keywords" msgstr "" -#: part/models.py:802 +#: part/models.py:804 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:809 part/models.py:2276 part/models.py:2525 +#: part/models.py:811 part/models.py:2283 part/models.py:2532 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:183 -#: templates/js/translated/part.js:1261 +#: templates/InvenTree/settings/settings.html:186 +#: templates/js/translated/part.js:1268 msgid "Category" msgstr "" -#: part/models.py:810 +#: part/models.py:812 msgid "Part category" msgstr "" -#: part/models.py:815 part/templates/part/part_base.html:274 -#: templates/js/translated/part.js:612 templates/js/translated/part.js:1214 -#: templates/js/translated/stock.js:1552 +#: part/models.py:817 part/templates/part/part_base.html:274 +#: templates/js/translated/part.js:618 templates/js/translated/part.js:1221 +#: templates/js/translated/stock.js:1560 msgid "IPN" msgstr "" -#: part/models.py:816 +#: part/models.py:818 msgid "Internal Part Number" msgstr "" -#: part/models.py:822 +#: part/models.py:824 msgid "Part revision or version number" msgstr "" -#: part/models.py:823 part/templates/part/part_base.html:281 -#: report/models.py:200 templates/js/translated/part.js:616 +#: part/models.py:825 part/templates/part/part_base.html:281 +#: report/models.py:200 templates/js/translated/part.js:622 msgid "Revision" msgstr "" -#: part/models.py:845 +#: part/models.py:847 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:892 part/templates/part/part_base.html:347 +#: part/models.py:894 part/templates/part/part_base.html:347 msgid "Default Supplier" msgstr "" -#: part/models.py:893 +#: part/models.py:895 msgid "Default supplier part" msgstr "" -#: part/models.py:900 +#: part/models.py:902 msgid "Default Expiry" msgstr "" -#: part/models.py:901 +#: part/models.py:903 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:906 part/templates/part/part_base.html:196 +#: part/models.py:908 part/templates/part/part_base.html:196 msgid "Minimum Stock" msgstr "" -#: part/models.py:907 +#: part/models.py:909 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:914 +#: part/models.py:916 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:920 +#: part/models.py:922 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:926 +#: part/models.py:928 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:932 +#: part/models.py:934 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:937 +#: part/models.py:939 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:942 +#: part/models.py:944 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:946 plugin/models.py:46 -#: templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:295 -#: templates/js/translated/table_filters.js:417 -msgid "Active" -msgstr "" - -#: part/models.py:947 +#: part/models.py:949 msgid "Is this part active?" msgstr "" -#: part/models.py:952 +#: part/models.py:954 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:957 +#: part/models.py:959 msgid "Part notes - supports Markdown formatting" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "BOM checksum" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:963 +#: part/models.py:965 msgid "BOM checked by" msgstr "" -#: part/models.py:965 +#: part/models.py:967 msgid "BOM checked date" msgstr "" -#: part/models.py:969 +#: part/models.py:971 msgid "Creation User" msgstr "" -#: part/models.py:1781 +#: part/models.py:1783 msgid "Sell multiple" msgstr "" -#: part/models.py:2326 +#: part/models.py:2333 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2343 +#: part/models.py:2350 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2363 templates/js/translated/part.js:1707 -#: templates/js/translated/stock.js:1276 +#: part/models.py:2370 templates/js/translated/part.js:1714 +#: templates/js/translated/stock.js:1284 msgid "Test Name" msgstr "" -#: part/models.py:2364 +#: part/models.py:2371 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2369 +#: part/models.py:2376 msgid "Test Description" msgstr "" -#: part/models.py:2370 +#: part/models.py:2377 msgid "Enter description for this test" msgstr "" -#: part/models.py:2375 templates/js/translated/part.js:1716 +#: part/models.py:2382 templates/js/translated/part.js:1723 #: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" -#: part/models.py:2376 +#: part/models.py:2383 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2381 templates/js/translated/part.js:1724 +#: part/models.py:2388 templates/js/translated/part.js:1731 msgid "Requires Value" msgstr "" -#: part/models.py:2382 +#: part/models.py:2389 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2387 templates/js/translated/part.js:1731 +#: part/models.py:2394 templates/js/translated/part.js:1738 msgid "Requires Attachment" msgstr "" -#: part/models.py:2388 +#: part/models.py:2395 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2399 +#: part/models.py:2406 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2435 +#: part/models.py:2442 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2443 +#: part/models.py:2450 msgid "Parameter Name" msgstr "" -#: part/models.py:2450 +#: part/models.py:2457 msgid "Parameter Units" msgstr "" -#: part/models.py:2480 +#: part/models.py:2487 msgid "Parent Part" msgstr "" -#: part/models.py:2482 part/models.py:2531 part/models.py:2532 -#: templates/InvenTree/settings/settings.html:178 +#: part/models.py:2489 part/models.py:2538 part/models.py:2539 +#: templates/InvenTree/settings/settings.html:181 msgid "Parameter Template" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Data" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Parameter Value" msgstr "" -#: part/models.py:2536 templates/InvenTree/settings/settings.html:187 +#: part/models.py:2543 templates/InvenTree/settings/settings.html:190 msgid "Default Value" msgstr "" -#: part/models.py:2537 +#: part/models.py:2544 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2614 +#: part/models.py:2621 msgid "Select parent part" msgstr "" -#: part/models.py:2622 +#: part/models.py:2629 msgid "Sub part" msgstr "" -#: part/models.py:2623 +#: part/models.py:2630 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2629 +#: part/models.py:2636 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2631 templates/js/translated/bom.js:566 -#: templates/js/translated/bom.js:640 +#: part/models.py:2638 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:652 #: templates/js/translated/table_filters.js:92 msgid "Optional" msgstr "" -#: part/models.py:2631 +#: part/models.py:2638 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2634 +#: part/models.py:2641 msgid "Overage" msgstr "" -#: part/models.py:2635 +#: part/models.py:2642 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2638 +#: part/models.py:2645 msgid "BOM item reference" msgstr "" -#: part/models.py:2641 +#: part/models.py:2648 msgid "BOM item notes" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "Checksum" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "BOM line checksum" msgstr "" -#: part/models.py:2647 templates/js/translated/bom.js:657 +#: part/models.py:2654 templates/js/translated/bom.js:669 #: templates/js/translated/table_filters.js:68 #: templates/js/translated/table_filters.js:88 msgid "Inherited" msgstr "" -#: part/models.py:2648 +#: part/models.py:2655 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2653 templates/js/translated/bom.js:649 +#: part/models.py:2660 templates/js/translated/bom.js:661 msgid "Allow Variants" msgstr "" -#: part/models.py:2654 +#: part/models.py:2661 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2739 stock/models.py:355 +#: part/models.py:2746 stock/models.py:357 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2748 part/models.py:2750 +#: part/models.py:2755 part/models.py:2757 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2879 +#: part/models.py:2886 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2901 +#: part/models.py:2908 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2913 +#: part/models.py:2920 msgid "Parent BOM item" msgstr "" -#: part/models.py:2921 +#: part/models.py:2928 msgid "Substitute part" msgstr "" -#: part/models.py:2932 +#: part/models.py:2939 msgid "Part 1" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Part 2" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Select Related Part" msgstr "" -#: part/models.py:2968 +#: part/models.py:2975 msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique" msgstr "" @@ -4327,7 +4418,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:253 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:270 msgid "BOM actions" msgstr "" @@ -4499,7 +4590,7 @@ msgstr "" msgid "Import Parts" msgstr "" -#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:375 +#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:348 msgid "Duplicate Part" msgstr "" @@ -4533,145 +4624,149 @@ msgid "Showing stock for all variants of %(full_name)s" msgstr "" #: part/templates/part/detail.html:43 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/detail.html:60 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:48 +#: part/templates/part/detail.html:65 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:105 +#: part/templates/part/detail.html:122 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:142 +#: part/templates/part/detail.html:159 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:146 +#: part/templates/part/detail.html:163 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:147 +#: part/templates/part/detail.html:164 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:174 +#: part/templates/part/detail.html:191 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:45 +#: part/templates/part/detail.html:228 part/templates/part/part_sidebar.html:49 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:215 part/templates/part/detail.html:216 +#: part/templates/part/detail.html:232 part/templates/part/detail.html:233 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:253 part/templates/part/part_sidebar.html:17 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:241 +#: part/templates/part/detail.html:258 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:245 templates/js/translated/bom.js:70 +#: part/templates/part/detail.html:262 templates/js/translated/bom.js:70 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:247 +#: part/templates/part/detail.html:264 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:257 +#: part/templates/part/detail.html:274 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:259 templates/js/translated/part.js:272 +#: part/templates/part/detail.html:276 templates/js/translated/part.js:272 msgid "Copy BOM" msgstr "" -#: part/templates/part/detail.html:261 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:283 msgid "New BOM Item" msgstr "" -#: part/templates/part/detail.html:267 +#: part/templates/part/detail.html:284 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:280 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:314 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:322 +#: part/templates/part/detail.html:339 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:332 +#: part/templates/part/detail.html:349 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:360 +#: part/templates/part/detail.html:377 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:393 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:558 +#: part/templates/part/detail.html:575 msgid "Delete selected BOM items?" msgstr "" -#: part/templates/part/detail.html:559 +#: part/templates/part/detail.html:576 msgid "All selected BOM items will be deleted" msgstr "" -#: part/templates/part/detail.html:608 +#: part/templates/part/detail.html:625 msgid "Create BOM Item" msgstr "" -#: part/templates/part/detail.html:652 +#: part/templates/part/detail.html:682 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:660 +#: part/templates/part/detail.html:690 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:755 +#: part/templates/part/detail.html:785 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:812 +#: part/templates/part/detail.html:842 msgid "Edit Part Notes" msgstr "" -#: part/templates/part/detail.html:925 +#: part/templates/part/detail.html:955 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:937 +#: part/templates/part/detail.html:967 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:949 +#: part/templates/part/detail.html:979 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1038 +#: part/templates/part/detail.html:1068 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -4786,7 +4881,7 @@ msgstr "" #: templates/js/translated/company.js:508 #: templates/js/translated/company.js:765 #: templates/js/translated/model_renderers.js:175 -#: templates/js/translated/part.js:527 templates/js/translated/part.js:604 +#: templates/js/translated/part.js:533 templates/js/translated/part.js:610 msgid "Inactive" msgstr "" @@ -4805,10 +4900,6 @@ msgstr "" msgid "In Stock" msgstr "" -#: part/templates/part/part_base.html:203 templates/js/translated/part.js:1294 -msgid "On Order" -msgstr "" - #: part/templates/part/part_base.html:210 templates/InvenTree/index.html:178 msgid "Required for Build Orders" msgstr "" @@ -4821,12 +4912,12 @@ msgstr "" msgid "Allocated to Orders" msgstr "" -#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:678 +#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:690 msgid "Can Build" msgstr "" -#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1125 -#: templates/js/translated/part.js:1298 +#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1132 +#: templates/js/translated/part.js:1305 msgid "Building" msgstr "" @@ -4878,7 +4969,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:40 -#: templates/js/translated/bom.js:632 +#: templates/js/translated/bom.js:644 msgid "No supplier pricing available" msgstr "" @@ -4920,7 +5011,12 @@ msgstr "" msgid "Used In" msgstr "" -#: part/templates/part/part_sidebar.html:41 +#: part/templates/part/part_sidebar.html:31 +#: stock/templates/stock/stock_sidebar.html:8 +msgid "Allocations" +msgstr "" + +#: part/templates/part/part_sidebar.html:45 msgid "Test Templates" msgstr "" @@ -4993,7 +5089,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:155 templates/js/translated/bom.js:626 +#: part/templates/part/prices.html:155 templates/js/translated/bom.js:638 msgid "Supplier Cost" msgstr "" @@ -5015,7 +5111,7 @@ msgstr "" msgid "Internal Cost" msgstr "" -#: part/templates/part/prices.html:215 part/views.py:1690 +#: part/templates/part/prices.html:215 part/views.py:1699 msgid "Add Internal Price Break" msgstr "" @@ -5035,9 +5131,9 @@ msgstr "" msgid "Set category for the following parts" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:588 -#: templates/js/translated/part.js:491 templates/js/translated/part.js:1115 -#: templates/js/translated/part.js:1302 +#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:600 +#: templates/js/translated/part.js:497 templates/js/translated/part.js:1122 +#: templates/js/translated/part.js:1309 msgid "No Stock" msgstr "" @@ -5054,116 +5150,116 @@ msgstr "" msgid "Create a new variant of template '%(full_name)s'." msgstr "" -#: part/templatetags/inventree_extras.py:116 +#: part/templatetags/inventree_extras.py:125 msgid "Unknown database" msgstr "" -#: part/views.py:92 +#: part/views.py:93 msgid "Set Part Category" msgstr "" -#: part/views.py:142 +#: part/views.py:143 #, python-brace-format msgid "Set category for {n} parts" msgstr "" -#: part/views.py:214 +#: part/views.py:215 msgid "Match References" msgstr "" -#: part/views.py:502 +#: part/views.py:511 msgid "None" msgstr "" -#: part/views.py:561 +#: part/views.py:570 msgid "Part QR Code" msgstr "" -#: part/views.py:663 +#: part/views.py:672 msgid "Select Part Image" msgstr "" -#: part/views.py:689 +#: part/views.py:698 msgid "Updated part image" msgstr "" -#: part/views.py:692 +#: part/views.py:701 msgid "Part image not found" msgstr "" -#: part/views.py:766 +#: part/views.py:775 msgid "Match Parts" msgstr "" -#: part/views.py:1101 +#: part/views.py:1110 msgid "Export Bill of Materials" msgstr "" -#: part/views.py:1150 +#: part/views.py:1159 msgid "Confirm Part Deletion" msgstr "" -#: part/views.py:1157 +#: part/views.py:1166 msgid "Part was deleted" msgstr "" -#: part/views.py:1166 +#: part/views.py:1175 msgid "Part Pricing" msgstr "" -#: part/views.py:1315 +#: part/views.py:1324 msgid "Create Part Parameter Template" msgstr "" -#: part/views.py:1325 +#: part/views.py:1334 msgid "Edit Part Parameter Template" msgstr "" -#: part/views.py:1332 +#: part/views.py:1341 msgid "Delete Part Parameter Template" msgstr "" -#: part/views.py:1391 templates/js/translated/part.js:315 +#: part/views.py:1400 templates/js/translated/part.js:315 msgid "Edit Part Category" msgstr "" -#: part/views.py:1429 +#: part/views.py:1438 msgid "Delete Part Category" msgstr "" -#: part/views.py:1435 +#: part/views.py:1444 msgid "Part category was deleted" msgstr "" -#: part/views.py:1444 +#: part/views.py:1453 msgid "Create Category Parameter Template" msgstr "" -#: part/views.py:1545 +#: part/views.py:1554 msgid "Edit Category Parameter Template" msgstr "" -#: part/views.py:1601 +#: part/views.py:1610 msgid "Delete Category Parameter Template" msgstr "" -#: part/views.py:1623 +#: part/views.py:1632 msgid "Added new price break" msgstr "" -#: part/views.py:1699 +#: part/views.py:1708 msgid "Edit Internal Price Break" msgstr "" -#: part/views.py:1707 +#: part/views.py:1716 msgid "Delete Internal Price Break" msgstr "" -#: plugin/integration.py:124 +#: plugin/integration.py:138 msgid "No author found" msgstr "" -#: plugin/integration.py:136 +#: plugin/integration.py:152 msgid "No date found" msgstr "" @@ -5191,7 +5287,7 @@ msgstr "" msgid "Is the plugin active" msgstr "" -#: plugin/models.py:195 +#: plugin/models.py:199 msgid "Plugin" msgstr "" @@ -5357,12 +5453,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:517 stock/templates/stock/item_base.html:156 +#: stock/models.py:519 stock/templates/stock/item_base.html:156 #: templates/js/translated/build.js:293 templates/js/translated/build.js:697 #: templates/js/translated/build.js:1073 #: templates/js/translated/model_renderers.js:95 #: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 -#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:415 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:423 msgid "Serial Number" msgstr "" @@ -5371,19 +5467,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1948 +#: stock/models.py:1976 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1954 +#: stock/models.py:1982 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin.html:50 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2367 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2525 msgid "Date" msgstr "" @@ -5396,23 +5492,27 @@ msgid "Fail" msgstr "" #: report/templates/report/inventree_test_report_base.html:123 -#: stock/templates/stock/stock_sidebar.html:12 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:578 templates/js/translated/stock.js:748 -#: templates/js/translated/stock.js:2627 +#: templates/js/translated/stock.js:586 templates/js/translated/stock.js:756 +#: templates/js/translated/stock.js:2785 msgid "Serial" msgstr "" -#: stock/api.py:478 +#: stock/api.py:476 msgid "Quantity is required" msgstr "" -#: stock/forms.py:77 stock/forms.py:251 stock/models.py:574 +#: stock/api.py:483 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:576 #: stock/templates/stock/item_base.html:193 -#: templates/js/translated/stock.js:1701 +#: templates/js/translated/stock.js:1709 msgid "Expiry Date" msgstr "" @@ -5460,228 +5560,228 @@ msgstr "" msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:611 +#: stock/models.py:62 stock/models.py:613 #: stock/templates/stock/item_base.html:416 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:612 +#: stock/models.py:63 stock/models.py:614 msgid "Select Owner" msgstr "" -#: stock/models.py:336 +#: stock/models.py:338 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:372 +#: stock/models.py:374 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:382 stock/models.py:391 +#: stock/models.py:384 stock/models.py:393 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:383 +#: stock/models.py:385 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:405 +#: stock/models.py:407 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:411 +#: stock/models.py:413 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:418 +#: stock/models.py:420 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:461 +#: stock/models.py:463 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:470 +#: stock/models.py:472 msgid "Base part" msgstr "" -#: stock/models.py:478 +#: stock/models.py:480 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:484 stock/templates/stock/location.html:16 +#: stock/models.py:486 stock/templates/stock/location.html:16 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:494 +#: stock/models.py:496 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:500 stock/templates/stock/item_base.html:298 +#: stock/models.py:502 stock/templates/stock/item_base.html:298 msgid "Installed In" msgstr "" -#: stock/models.py:503 +#: stock/models.py:505 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:519 +#: stock/models.py:521 msgid "Serial number for this item" msgstr "" -#: stock/models.py:533 +#: stock/models.py:535 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:537 +#: stock/models.py:539 msgid "Stock Quantity" msgstr "" -#: stock/models.py:546 +#: stock/models.py:548 msgid "Source Build" msgstr "" -#: stock/models.py:548 +#: stock/models.py:550 msgid "Build for this stock item" msgstr "" -#: stock/models.py:559 +#: stock/models.py:561 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:562 +#: stock/models.py:564 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:568 +#: stock/models.py:570 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:575 +#: stock/models.py:577 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete on deplete" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:598 stock/templates/stock/item.html:111 +#: stock/models.py:600 stock/templates/stock/item.html:128 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:607 +#: stock/models.py:609 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1096 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1074 +#: stock/models.py:1102 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1080 +#: stock/models.py:1108 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1083 +#: stock/models.py:1111 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1086 +#: stock/models.py:1114 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1093 +#: stock/models.py:1121 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1164 +#: stock/models.py:1192 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1195 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1170 +#: stock/models.py:1198 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1173 +#: stock/models.py:1201 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1176 +#: stock/models.py:1204 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1179 +#: stock/models.py:1207 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1186 stock/serializers.py:774 +#: stock/models.py:1214 stock/serializers.py:775 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1190 +#: stock/models.py:1218 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1222 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1198 +#: stock/models.py:1226 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1369 +#: stock/models.py:1397 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1868 +#: stock/models.py:1896 msgid "Entry notes" msgstr "" -#: stock/models.py:1925 +#: stock/models.py:1953 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1931 +#: stock/models.py:1959 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1949 +#: stock/models.py:1977 msgid "Test name" msgstr "" -#: stock/models.py:1955 templates/js/translated/table_filters.js:271 +#: stock/models.py:1983 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1961 +#: stock/models.py:1989 msgid "Test output value" msgstr "" -#: stock/models.py:1968 +#: stock/models.py:1996 msgid "Test result attachment" msgstr "" -#: stock/models.py:1974 +#: stock/models.py:2002 msgid "Test notes" msgstr "" @@ -5706,7 +5806,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:326 stock/serializers.py:731 stock/serializers.py:972 +#: stock/serializers.py:326 stock/serializers.py:732 stock/serializers.py:973 msgid "Destination stock location" msgstr "" @@ -5718,63 +5818,63 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:589 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:592 +#: stock/serializers.py:593 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:597 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:626 +#: stock/serializers.py:627 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:632 +#: stock/serializers.py:633 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:640 +#: stock/serializers.py:641 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:650 stock/serializers.py:880 +#: stock/serializers.py:651 stock/serializers.py:881 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:738 +#: stock/serializers.py:739 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:743 +#: stock/serializers.py:744 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:744 +#: stock/serializers.py:745 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:749 +#: stock/serializers.py:750 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:750 +#: stock/serializers.py:751 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:760 +#: stock/serializers.py:761 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:842 +#: stock/serializers.py:843 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:870 +#: stock/serializers.py:871 msgid "Stock transaction notes" msgstr "" @@ -5787,47 +5887,51 @@ msgid "New Entry" msgstr "" #: stock/templates/stock/item.html:48 -msgid "Child Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:55 -msgid "This stock item does not have any child items" +msgid "Stock Item Allocations" msgstr "" #: stock/templates/stock/item.html:64 -#: stock/templates/stock/stock_sidebar.html:8 -msgid "Test Data" -msgstr "" - -#: stock/templates/stock/item.html:68 stock/templates/stock/item_base.html:57 -msgid "Test Report" +msgid "Child Stock Items" msgstr "" #: stock/templates/stock/item.html:72 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item.html:81 +#: stock/templates/stock/stock_sidebar.html:12 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:57 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item.html:89 msgid "Delete Test Data" msgstr "" -#: stock/templates/stock/item.html:76 +#: stock/templates/stock/item.html:93 msgid "Add Test Data" msgstr "" -#: stock/templates/stock/item.html:133 +#: stock/templates/stock/item.html:150 msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:482 +#: stock/templates/stock/item.html:154 stock/views.py:482 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:279 stock/templates/stock/item.html:304 +#: stock/templates/stock/item.html:309 stock/templates/stock/item.html:334 msgid "Add Test Result" msgstr "" -#: stock/templates/stock/item.html:324 +#: stock/templates/stock/item.html:354 msgid "Edit Test Result" msgstr "" -#: stock/templates/stock/item.html:338 +#: stock/templates/stock/item.html:368 msgid "Delete Test Result" msgstr "" @@ -5952,7 +6056,7 @@ msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:206 -#: templates/js/translated/stock.js:1714 +#: templates/js/translated/stock.js:1722 msgid "Last Updated" msgstr "" @@ -6111,7 +6215,7 @@ msgid "Sublocations" msgstr "" #: stock/templates/stock/location.html:146 templates/InvenTree/search.html:164 -#: templates/stats.html:97 users/models.py:42 +#: templates/stats.html:109 users/models.py:42 msgid "Stock Locations" msgstr "" @@ -6135,7 +6239,7 @@ msgstr "" msgid "Stock Tracking" msgstr "" -#: stock/templates/stock/stock_sidebar.html:16 +#: stock/templates/stock/stock_sidebar.html:20 msgid "Child Items" msgstr "" @@ -6164,7 +6268,7 @@ msgstr "" msgid "Are you sure you want to delete this stock tracking entry?" msgstr "" -#: stock/views.py:162 +#: stock/views.py:162 templates/js/translated/stock.js:139 msgid "Edit Stock Location" msgstr "" @@ -6204,7 +6308,7 @@ msgstr "" msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:727 templates/js/translated/stock.js:1066 +#: stock/views.py:727 templates/js/translated/stock.js:1074 msgid "Confirm stock adjustment" msgstr "" @@ -6212,7 +6316,7 @@ msgstr "" msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:324 +#: stock/views.py:760 templates/js/translated/stock.js:332 msgid "Edit Stock Item" msgstr "" @@ -6224,7 +6328,7 @@ msgstr "" msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1153 templates/js/translated/stock.js:304 +#: stock/views.py:1153 templates/js/translated/stock.js:312 msgid "Duplicate Stock Item" msgstr "" @@ -6268,6 +6372,18 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/500.html:5 templates/500.html:11 +msgid "Internal Server Error" +msgstr "" + +#: templates/500.html:14 +msgid "The InvenTree server raised an internal error" +msgstr "" + +#: templates/500.html:15 +msgid "Refer to the error log in the admin interface for further details" +msgstr "" + #: templates/503.html:10 templates/503.html:35 msgid "Site is in Maintenance" msgstr "" @@ -6390,7 +6506,7 @@ msgid "Signup" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:113 msgid "Settings" msgstr "" @@ -6431,43 +6547,43 @@ msgstr "" msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:32 +#: templates/InvenTree/settings/plugin.html:33 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:37 +#: templates/InvenTree/settings/plugin.html:38 #: templates/js/translated/plugin.js:15 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: templates/InvenTree/settings/plugin.html:47 templates/navbar.html:111 #: users/models.py:39 msgid "Admin" msgstr "" -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:49 #: templates/InvenTree/settings/plugin_settings.html:28 msgid "Author" msgstr "" -#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin_settings.html:43 msgid "Version" msgstr "" -#: templates/InvenTree/settings/plugin.html:91 +#: templates/InvenTree/settings/plugin.html:92 msgid "Inactive plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:114 +#: templates/InvenTree/settings/plugin.html:115 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:123 +#: templates/InvenTree/settings/plugin.html:124 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:125 +#: templates/InvenTree/settings/plugin.html:126 msgid "Message" msgstr "" @@ -6555,37 +6671,37 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:75 +#: templates/InvenTree/settings/settings.html:78 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:77 +#: templates/InvenTree/settings/settings.html:80 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:79 +#: templates/InvenTree/settings/settings.html:82 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:168 +#: templates/InvenTree/settings/settings.html:171 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:190 -#: templates/InvenTree/settings/settings.html:289 +#: templates/InvenTree/settings/settings.html:193 +#: templates/InvenTree/settings/settings.html:292 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:191 -#: templates/InvenTree/settings/settings.html:290 +#: templates/InvenTree/settings/settings.html:194 +#: templates/InvenTree/settings/settings.html:293 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:272 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:273 +#: templates/InvenTree/settings/settings.html:276 msgid "ID" msgstr "" @@ -6763,124 +6879,105 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:219 +#: templates/InvenTree/settings/user.html:220 +msgid "Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:226 +msgid "Log out active sessions (except this one)" +msgstr "" + +#: templates/InvenTree/settings/user.html:227 +msgid "Log Out Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:236 +msgid "unknown on unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:237 +msgid "unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:241 +msgid "IP Address" +msgstr "" + +#: templates/InvenTree/settings/user.html:242 +msgid "Device" +msgstr "" + +#: templates/InvenTree/settings/user.html:243 +msgid "Last Activity" +msgstr "" + +#: templates/InvenTree/settings/user.html:252 +#, python-format +msgid "%(time)s ago (this session)" +msgstr "" + +#: templates/InvenTree/settings/user.html:254 +#, python-format +msgid "%(time)s ago" +msgstr "" + +#: templates/InvenTree/settings/user.html:266 +msgid "Do you really want to remove the selected email address?" +msgstr "" + #: templates/InvenTree/settings/user_display.html:25 msgid "Theme Settings" msgstr "" -#: templates/InvenTree/settings/user.html:227 #: templates/InvenTree/settings/user_display.html:35 msgid "Select theme" msgstr "" -#: templates/InvenTree/settings/user.html:237 #: templates/InvenTree/settings/user_display.html:46 msgid "Set Theme" msgstr "" -#: templates/InvenTree/settings/user.html:246 #: templates/InvenTree/settings/user_display.html:54 msgid "Language Settings" msgstr "" -#: templates/InvenTree/settings/user.html:254 #: templates/InvenTree/settings/user_display.html:63 msgid "Select language" msgstr "" -#: templates/InvenTree/settings/user.html:270 #: templates/InvenTree/settings/user_display.html:79 #, python-format msgid "%(lang_translated)s%% translated" msgstr "" -#: templates/InvenTree/settings/user.html:272 #: templates/InvenTree/settings/user_display.html:81 msgid "No translations available" msgstr "" -#: templates/InvenTree/settings/user.html:279 #: templates/InvenTree/settings/user_display.html:88 msgid "Set Language" msgstr "" -#: templates/InvenTree/settings/user.html:281 #: templates/InvenTree/settings/user_display.html:91 msgid "Some languages are not complete" msgstr "" -#: templates/InvenTree/settings/user.html:283 #: templates/InvenTree/settings/user_display.html:93 msgid "Show only sufficent" msgstr "" -#: templates/InvenTree/settings/user.html:285 +#: templates/InvenTree/settings/user_display.html:95 +msgid "and hidden." +msgstr "" + #: templates/InvenTree/settings/user_display.html:95 msgid "Show them too" msgstr "" -#: templates/InvenTree/settings/user.html:292 #: templates/InvenTree/settings/user_display.html:101 msgid "Help the translation efforts!" msgstr "" -#: templates/InvenTree/settings/user.html:293 -#, python-format -msgid "Native language translation of the\n" -" InvenTree web application is community contributed via crowdin. Contributions are\n" -" welcomed and encouraged." -msgstr "" - -#: templates/InvenTree/settings/user.html:302 -msgid "Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:308 -msgid "Log out active sessions (except this one)" -msgstr "" - -#: templates/InvenTree/settings/user.html:309 -msgid "Log Out Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:318 -msgid "unknown on unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:319 -msgid "unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:323 -msgid "IP Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:324 -msgid "Device" -msgstr "" - -#: templates/InvenTree/settings/user.html:325 -msgid "Last Activity" -msgstr "" - -#: templates/InvenTree/settings/user.html:334 -#, python-format -msgid "%(time)s ago (this session)" -msgstr "" - -#: templates/InvenTree/settings/user.html:336 -#, python-format -msgid "%(time)s ago" -msgstr "" - -#: templates/InvenTree/settings/user.html:348 -msgid "Do you really want to remove the selected email address?" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:95 -msgid "and hidden." -msgstr "" - #: templates/InvenTree/settings/user_display.html:102 #, python-format msgid "Native language translation of the InvenTree web application is community contributed via crowdin. Contributions are welcomed and encouraged." @@ -6899,9 +6996,9 @@ msgid "InvenTree Version Information" msgstr "" #: templates/about.html:11 templates/about.html:105 -#: templates/js/translated/bom.js:395 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:573 templates/js/translated/modals.js:667 -#: templates/js/translated/modals.js:970 templates/modals.html:15 +#: templates/js/translated/bom.js:407 templates/js/translated/modals.js:53 +#: templates/js/translated/modals.js:584 templates/js/translated/modals.js:678 +#: templates/js/translated/modals.js:983 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -7178,13 +7275,13 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1103 +#: templates/js/translated/bom.js:1117 msgid "Required Quantity" msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:579 templates/js/translated/build.js:1189 +#: templates/js/translated/bom.js:591 templates/js/translated/build.js:1189 #: templates/js/translated/build.js:1810 #: templates/js/translated/table_filters.js:178 msgid "Available" @@ -7208,10 +7305,6 @@ msgstr "" msgid "Click on the following link to view this part" msgstr "" -#: templates/email/low_stock_notification.html:17 -msgid "Total Stock" -msgstr "" - #: templates/email/low_stock_notification.html:19 msgid "Minimum Quantity" msgstr "" @@ -7232,11 +7325,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1040 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1053 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1041 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1054 msgid "No response from the InvenTree server" msgstr "" @@ -7248,27 +7341,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1063 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1051 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1064 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1068 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1056 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1069 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1073 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1061 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1074 msgid "The requested resource could not be located on the server" msgstr "" @@ -7280,11 +7373,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1065 +#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1078 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1066 +#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1079 msgid "Connection timeout while requesting data from server" msgstr "" @@ -7353,7 +7446,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "Invalid server response" msgstr "" @@ -7381,7 +7474,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1018 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1026 msgid "Remove stock item" msgstr "" @@ -7428,12 +7521,12 @@ msgid "Download BOM Template" msgstr "" #: templates/js/translated/bom.js:39 templates/js/translated/bom.js:73 -#: templates/js/translated/order.js:369 templates/js/translated/stock.js:510 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:518 msgid "Format" msgstr "" #: templates/js/translated/bom.js:40 templates/js/translated/bom.js:74 -#: templates/js/translated/order.js:370 templates/js/translated/stock.js:511 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:519 msgid "Select file format" msgstr "" @@ -7489,87 +7582,87 @@ msgstr "" msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:340 -msgid "Select and add a new variant item using the input below" +#: templates/js/translated/bom.js:352 +msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:351 +#: templates/js/translated/bom.js:363 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:357 +#: templates/js/translated/bom.js:369 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:396 +#: templates/js/translated/bom.js:408 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:397 +#: templates/js/translated/bom.js:409 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:516 +#: templates/js/translated/bom.js:528 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:520 templates/js/translated/build.js:1171 +#: templates/js/translated/bom.js:532 templates/js/translated/build.js:1171 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:525 +#: templates/js/translated/bom.js:537 msgid "Open subassembly" msgstr "" -#: templates/js/translated/bom.js:597 +#: templates/js/translated/bom.js:609 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:612 +#: templates/js/translated/bom.js:624 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:619 +#: templates/js/translated/bom.js:631 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:668 templates/js/translated/bom.js:757 +#: templates/js/translated/bom.js:680 templates/js/translated/bom.js:769 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:728 +#: templates/js/translated/bom.js:740 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:742 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:732 +#: templates/js/translated/bom.js:744 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:734 templates/js/translated/bom.js:908 +#: templates/js/translated/bom.js:746 templates/js/translated/bom.js:920 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:891 +#: templates/js/translated/bom.js:748 templates/js/translated/bom.js:903 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:830 templates/js/translated/build.js:915 +#: templates/js/translated/bom.js:842 templates/js/translated/build.js:915 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:886 +#: templates/js/translated/bom.js:898 msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:1086 templates/js/translated/build.js:1155 +#: templates/js/translated/bom.js:1100 templates/js/translated/build.js:1155 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1108 +#: templates/js/translated/bom.js:1122 msgid "Inherited from parent BOM" msgstr "" @@ -7725,9 +7818,9 @@ msgstr "" msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1206 -#: templates/js/translated/part.js:1617 templates/js/translated/stock.js:1512 -#: templates/js/translated/stock.js:2321 +#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:1624 templates/js/translated/stock.js:1520 +#: templates/js/translated/stock.js:2479 msgid "Select" msgstr "" @@ -7735,7 +7828,7 @@ msgstr "" msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2540 +#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2698 msgid "No user information" msgstr "" @@ -7808,34 +7901,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:500 -#: templates/js/translated/company.js:757 templates/js/translated/part.js:511 -#: templates/js/translated/part.js:596 +#: templates/js/translated/company.js:757 templates/js/translated/part.js:517 +#: templates/js/translated/part.js:602 msgid "Template part" msgstr "" #: templates/js/translated/company.js:504 -#: templates/js/translated/company.js:761 templates/js/translated/part.js:515 -#: templates/js/translated/part.js:600 +#: templates/js/translated/company.js:761 templates/js/translated/part.js:521 +#: templates/js/translated/part.js:606 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:631 templates/js/translated/part.js:690 +#: templates/js/translated/company.js:631 templates/js/translated/part.js:696 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:668 templates/js/translated/part.js:732 +#: templates/js/translated/company.js:668 templates/js/translated/part.js:738 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:669 templates/js/translated/part.js:733 +#: templates/js/translated/company.js:669 templates/js/translated/part.js:739 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:688 templates/js/translated/part.js:750 +#: templates/js/translated/company.js:688 templates/js/translated/part.js:756 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:699 templates/js/translated/part.js:762 +#: templates/js/translated/company.js:699 templates/js/translated/part.js:768 msgid "Delete Parameter" msgstr "" @@ -7844,12 +7937,12 @@ msgid "No supplier parts found" msgstr "" #: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:420 +#: templates/js/translated/filters.js:429 msgid "true" msgstr "" #: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:421 +#: templates/js/translated/filters.js:430 msgid "false" msgstr "" @@ -7869,7 +7962,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:329 +#: templates/js/translated/filters.js:338 msgid "Create filter" msgstr "" @@ -7898,20 +7991,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1080 templates/modals.html:19 +#: templates/js/translated/forms.js:1082 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1471 +#: templates/js/translated/forms.js:1487 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1675 +#: templates/js/translated/forms.js:1691 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1895 +#: templates/js/translated/forms.js:1930 msgid "Clear input" msgstr "" @@ -7924,7 +8017,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1042 +#: templates/js/translated/stock.js:1050 msgid "Select Stock Items" msgstr "" @@ -7974,12 +8067,12 @@ msgid "Select Label Template" msgstr "" #: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 -#: templates/js/translated/modals.js:599 +#: templates/js/translated/modals.js:610 msgid "Cancel" msgstr "" #: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:666 templates/js/translated/modals.js:969 +#: templates/js/translated/modals.js:677 templates/js/translated/modals.js:982 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" @@ -7988,47 +8081,47 @@ msgstr "" msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:381 +#: templates/js/translated/modals.js:392 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:540 +#: templates/js/translated/modals.js:551 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:598 +#: templates/js/translated/modals.js:609 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:655 +#: templates/js/translated/modals.js:666 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:933 +#: templates/js/translated/modals.js:946 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1045 +#: templates/js/translated/modals.js:1058 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1046 +#: templates/js/translated/modals.js:1059 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1069 +#: templates/js/translated/modals.js:1082 msgid "Error requesting form data" msgstr "" @@ -8052,23 +8145,24 @@ msgstr "" msgid "Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:236 +#: templates/js/translated/model_renderers.js:249 +#: templates/js/translated/model_renderers.js:270 msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:253 +#: templates/js/translated/model_renderers.js:287 msgid "Shipment ID" msgstr "" -#: templates/js/translated/model_renderers.js:273 +#: templates/js/translated/model_renderers.js:307 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:310 +#: templates/js/translated/model_renderers.js:344 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:339 +#: templates/js/translated/model_renderers.js:373 msgid "Supplier Part ID" msgstr "" @@ -8116,7 +8210,7 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2123 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2131 msgid "Stock Status" msgstr "" @@ -8140,7 +8234,7 @@ msgstr "" msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:790 templates/js/translated/part.js:803 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:809 msgid "No purchase orders found" msgstr "" @@ -8165,7 +8259,7 @@ msgid "Total" msgstr "" #: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 -#: templates/js/translated/part.js:1834 templates/js/translated/part.js:2045 +#: templates/js/translated/part.js:1841 templates/js/translated/part.js:2052 msgid "Unit Price" msgstr "" @@ -8181,7 +8275,7 @@ msgstr "" msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1166 templates/js/translated/part.js:935 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:942 msgid "Receive line item" msgstr "" @@ -8250,7 +8344,7 @@ msgid "Delete Stock Allocation" msgstr "" #: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 -#: templates/js/translated/stock.js:1428 +#: templates/js/translated/stock.js:1436 msgid "Shipped to customer" msgstr "" @@ -8378,144 +8472,148 @@ msgstr "" msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:412 +#: templates/js/translated/part.js:351 +msgid "Create Part Variant" +msgstr "" + +#: templates/js/translated/part.js:418 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:414 +#: templates/js/translated/part.js:420 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:419 +#: templates/js/translated/part.js:425 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:421 +#: templates/js/translated/part.js:427 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:444 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:448 +#: templates/js/translated/part.js:454 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:451 +#: templates/js/translated/part.js:457 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:481 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:503 templates/js/translated/part.js:588 +#: templates/js/translated/part.js:509 templates/js/translated/part.js:594 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:507 templates/js/translated/part.js:592 +#: templates/js/translated/part.js:513 templates/js/translated/part.js:598 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:519 +#: templates/js/translated/part.js:525 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:523 +#: templates/js/translated/part.js:529 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:638 +#: templates/js/translated/part.js:644 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1005 +#: templates/js/translated/part.js:1012 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1029 +#: templates/js/translated/part.js:1036 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1096 templates/js/translated/part.js:1356 +#: templates/js/translated/part.js:1103 templates/js/translated/part.js:1363 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1266 +#: templates/js/translated/part.js:1273 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1289 +#: templates/js/translated/part.js:1296 #: templates/js/translated/table_filters.js:430 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:1380 templates/js/translated/part.js:1552 -#: templates/js/translated/stock.js:2282 +#: templates/js/translated/part.js:1387 templates/js/translated/part.js:1559 +#: templates/js/translated/stock.js:2440 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1396 +#: templates/js/translated/part.js:1403 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1571 templates/js/translated/stock.js:2301 +#: templates/js/translated/part.js:1578 templates/js/translated/stock.js:2459 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:1635 +#: templates/js/translated/part.js:1642 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1649 templates/js/translated/stock.js:2345 +#: templates/js/translated/part.js:1656 templates/js/translated/stock.js:2503 msgid "Path" msgstr "" -#: templates/js/translated/part.js:1693 +#: templates/js/translated/part.js:1700 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1744 templates/js/translated/stock.js:1234 +#: templates/js/translated/part.js:1751 templates/js/translated/stock.js:1242 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1745 templates/js/translated/stock.js:1235 +#: templates/js/translated/part.js:1752 templates/js/translated/stock.js:1243 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:1751 +#: templates/js/translated/part.js:1758 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:1773 +#: templates/js/translated/part.js:1780 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:1787 +#: templates/js/translated/part.js:1794 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:1812 +#: templates/js/translated/part.js:1819 #, python-brace-format msgid "No ${human_name} information found" msgstr "" -#: templates/js/translated/part.js:1867 +#: templates/js/translated/part.js:1874 #, python-brace-format msgid "Edit ${human_name}" msgstr "" -#: templates/js/translated/part.js:1868 +#: templates/js/translated/part.js:1875 #, python-brace-format msgid "Delete ${human_name}" msgstr "" -#: templates/js/translated/part.js:1969 +#: templates/js/translated/part.js:1976 msgid "Single Price" msgstr "" -#: templates/js/translated/part.js:1988 +#: templates/js/translated/part.js:1995 msgid "Single Price Difference" msgstr "" @@ -8589,340 +8687,344 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:74 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:181 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:93 templates/js/translated/stock.js:175 +#: templates/js/translated/stock.js:94 templates/js/translated/stock.js:183 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:101 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:110 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:146 +#: templates/js/translated/stock.js:154 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:186 +#: templates/js/translated/stock.js:194 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:225 +#: templates/js/translated/stock.js:233 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:231 +#: templates/js/translated/stock.js:239 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:382 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:387 +#: templates/js/translated/stock.js:395 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:420 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:416 templates/js/translated/stock.js:417 +#: templates/js/translated/stock.js:424 templates/js/translated/stock.js:425 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:433 +#: templates/js/translated/stock.js:441 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:453 +#: templates/js/translated/stock.js:461 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:462 +#: templates/js/translated/stock.js:470 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:515 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:526 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:519 +#: templates/js/translated/stock.js:527 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:628 +#: templates/js/translated/stock.js:636 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:629 +#: templates/js/translated/stock.js:637 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:714 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:715 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:709 +#: templates/js/translated/stock.js:717 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:710 +#: templates/js/translated/stock.js:718 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:796 +#: templates/js/translated/stock.js:804 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:797 +#: templates/js/translated/stock.js:805 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:892 +#: templates/js/translated/stock.js:900 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:893 +#: templates/js/translated/stock.js:901 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:899 +#: templates/js/translated/stock.js:907 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:900 +#: templates/js/translated/stock.js:908 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:904 +#: templates/js/translated/stock.js:912 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:905 +#: templates/js/translated/stock.js:913 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:909 +#: templates/js/translated/stock.js:917 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:910 users/models.py:206 +#: templates/js/translated/stock.js:918 users/models.py:208 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:914 templates/stock_table.html:58 +#: templates/js/translated/stock.js:922 templates/stock_table.html:58 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1051 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1201 +#: templates/js/translated/stock.js:1209 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1203 +#: templates/js/translated/stock.js:1211 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1208 +#: templates/js/translated/stock.js:1216 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1230 +#: templates/js/translated/stock.js:1238 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1256 +#: templates/js/translated/stock.js:1264 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1313 +#: templates/js/translated/stock.js:1321 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1428 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1424 +#: templates/js/translated/stock.js:1432 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1432 +#: templates/js/translated/stock.js:1440 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1438 +#: templates/js/translated/stock.js:1446 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1604 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1601 +#: templates/js/translated/stock.js:1609 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1604 +#: templates/js/translated/stock.js:1612 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1608 +#: templates/js/translated/stock.js:1616 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1610 +#: templates/js/translated/stock.js:1618 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1616 +#: templates/js/translated/stock.js:1624 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1618 +#: templates/js/translated/stock.js:1626 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1620 +#: templates/js/translated/stock.js:1628 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1633 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1632 +#: templates/js/translated/stock.js:1640 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1634 +#: templates/js/translated/stock.js:1642 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1636 +#: templates/js/translated/stock.js:1644 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1648 #: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1690 +#: templates/js/translated/stock.js:1698 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1763 +#: templates/js/translated/stock.js:1771 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1809 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1822 templates/js/translated/stock.js:1870 +#: templates/js/translated/stock.js:1830 templates/js/translated/stock.js:1878 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1910 +#: templates/js/translated/stock.js:1918 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1937 +#: templates/js/translated/stock.js:1945 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1939 +#: templates/js/translated/stock.js:1947 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:2138 +#: templates/js/translated/stock.js:2146 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2152 +#: templates/js/translated/stock.js:2160 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2153 +#: templates/js/translated/stock.js:2161 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2377 +#: templates/js/translated/stock.js:2340 +msgid "Allocated Quantity" +msgstr "" + +#: templates/js/translated/stock.js:2535 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2399 +#: templates/js/translated/stock.js:2557 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2424 +#: templates/js/translated/stock.js:2582 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2443 +#: templates/js/translated/stock.js:2601 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2462 +#: templates/js/translated/stock.js:2620 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2480 +#: templates/js/translated/stock.js:2638 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2503 +#: templates/js/translated/stock.js:2661 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2511 +#: templates/js/translated/stock.js:2669 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2552 +#: templates/js/translated/stock.js:2710 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2553 +#: templates/js/translated/stock.js:2711 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2604 +#: templates/js/translated/stock.js:2762 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2655 +#: templates/js/translated/stock.js:2813 msgid "Uninstall Stock Item" msgstr "" @@ -9194,11 +9296,11 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:113 +#: templates/navbar.html:114 msgid "Logout" msgstr "" -#: templates/navbar.html:115 +#: templates/navbar.html:116 msgid "Login" msgstr "" @@ -9246,31 +9348,43 @@ msgstr "" msgid "Server is deployed using docker" msgstr "" -#: templates/stats.html:40 -msgid "Server status" +#: templates/stats.html:39 +msgid "Plugin Support" msgstr "" #: templates/stats.html:43 -msgid "Healthy" +msgid "Plugin support enabled" msgstr "" #: templates/stats.html:45 -msgid "Issues detected" +msgid "Plugin support disabled" msgstr "" #: templates/stats.html:52 -msgid "Background Worker" +msgid "Server status" msgstr "" #: templates/stats.html:55 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:57 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:64 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:67 msgid "Background worker not running" msgstr "" -#: templates/stats.html:63 +#: templates/stats.html:75 msgid "Email Settings" msgstr "" -#: templates/stats.html:66 +#: templates/stats.html:78 msgid "Email settings not configured" msgstr "" @@ -9366,35 +9480,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:193 +#: users/models.py:195 msgid "Permission set" msgstr "" -#: users/models.py:201 +#: users/models.py:203 msgid "Group" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "View" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to view items" msgstr "" -#: users/models.py:206 +#: users/models.py:208 msgid "Permission to add items" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Change" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Permissions to edit items" msgstr "" -#: users/models.py:210 +#: users/models.py:212 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/tr/LC_MESSAGES/django.po b/InvenTree/locale/tr/LC_MESSAGES/django.po index ba5c2b4fa3..1a73c9dea2 100644 --- a/InvenTree/locale/tr/LC_MESSAGES/django.po +++ b/InvenTree/locale/tr/LC_MESSAGES/django.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-10 03:54+0000\n" -"PO-Revision-Date: 2022-01-10 03:58\n" +"POT-Creation-Date: 2022-01-29 00:17+0000\n" +"PO-Revision-Date: 2022-01-29 01:11\n" "Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -18,15 +18,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 138\n" -#: InvenTree/api.py:64 +#: InvenTree/api.py:55 msgid "API endpoint not found" msgstr "API uç noktası bulunamadı" -#: InvenTree/api.py:110 +#: InvenTree/api.py:101 msgid "No action specified" msgstr "İşlem belirtilmedi" -#: InvenTree/api.py:124 +#: InvenTree/api.py:116 msgid "No matching action found" msgstr "Eşleşen eylem bulunamadı" @@ -80,41 +80,41 @@ msgstr "" msgid "You must type the same email each time." msgstr "" -#: InvenTree/helpers.py:437 +#: InvenTree/helpers.py:439 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "Tekrarlanan seri {n}" -#: InvenTree/helpers.py:444 order/models.py:279 order/models.py:420 +#: InvenTree/helpers.py:446 order/models.py:282 order/models.py:425 #: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "Geçersiz veri sağlandı" -#: InvenTree/helpers.py:447 +#: InvenTree/helpers.py:449 msgid "Empty serial number string" msgstr "Boş seri numarası dizesi" -#: InvenTree/helpers.py:469 InvenTree/helpers.py:472 InvenTree/helpers.py:475 -#: InvenTree/helpers.py:500 +#: InvenTree/helpers.py:471 InvenTree/helpers.py:474 InvenTree/helpers.py:477 +#: InvenTree/helpers.py:502 #, python-brace-format msgid "Invalid group: {g}" msgstr "Geçersiz grup: {g}" -#: InvenTree/helpers.py:510 +#: InvenTree/helpers.py:512 #, python-brace-format msgid "Invalid group {group}" msgstr "" -#: InvenTree/helpers.py:516 +#: InvenTree/helpers.py:518 #, python-brace-format msgid "Invalid/no group {group}" msgstr "" -#: InvenTree/helpers.py:522 +#: InvenTree/helpers.py:524 msgid "No serial numbers found" msgstr "Seri numarası bulunamadı" -#: InvenTree/helpers.py:526 +#: InvenTree/helpers.py:528 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "Benzersiz seri numaralarının sayısı ({s}) girilen miktarla eşleşmeli ({q})" @@ -127,7 +127,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1967 +#: InvenTree/models.py:132 stock/models.py:1995 #: templates/js/translated/attachment.js:119 msgid "Attachment" msgstr "Ek" @@ -137,15 +137,15 @@ msgid "Select file to attach" msgstr "Eklenecek dosyayı seç" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:124 part/models.py:828 +#: company/models.py:564 order/models.py:127 part/models.py:830 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:540 -#: templates/js/translated/company.js:829 templates/js/translated/part.js:1317 +#: templates/js/translated/company.js:829 templates/js/translated/part.js:1324 msgid "Link" msgstr "Bağlantı" -#: InvenTree/models.py:140 build/models.py:330 part/models.py:829 -#: stock/models.py:527 +#: InvenTree/models.py:140 build/models.py:332 part/models.py:831 +#: stock/models.py:529 msgid "Link to external URL" msgstr "Harici URL'ye bağlantı" @@ -157,10 +157,11 @@ msgstr "Yorum" msgid "File comment" msgstr "Dosya yorumu" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 -#: common/models.py:1214 part/models.py:2258 part/models.py:2278 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1223 +#: common/models.py:1224 common/models.py:1452 common/models.py:1453 +#: part/models.py:2265 part/models.py:2285 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2534 +#: templates/js/translated/stock.js:2692 msgid "User" msgstr "Kullanıcı" @@ -197,42 +198,42 @@ msgstr "" msgid "Invalid choice" msgstr "Geçersiz seçim" -#: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 -#: label/models.py:112 part/models.py:772 part/models.py:2442 -#: plugin/models.py:40 report/models.py:181 +#: InvenTree/models.py:277 InvenTree/models.py:278 common/models.py:1438 +#: company/models.py:415 label/models.py:112 part/models.py:774 +#: part/models.py:2449 plugin/models.py:40 report/models.py:181 #: templates/InvenTree/settings/mixins/urls.html:13 -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:125 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:279 -#: templates/js/translated/company.js:641 templates/js/translated/part.js:561 -#: templates/js/translated/part.js:700 templates/js/translated/part.js:1624 -#: templates/js/translated/stock.js:2327 +#: templates/InvenTree/settings/settings.html:282 +#: templates/js/translated/company.js:641 templates/js/translated/part.js:567 +#: templates/js/translated/part.js:706 templates/js/translated/part.js:1631 +#: templates/js/translated/stock.js:2485 msgid "Name" msgstr "Adı" -#: InvenTree/models.py:284 build/models.py:207 +#: InvenTree/models.py:284 build/models.py:209 #: build/templates/build/detail.html:25 company/models.py:354 #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:122 part/models.py:795 part/templates/part/category.html:74 +#: order/models.py:125 part/models.py:797 part/templates/part/category.html:74 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 #: stock/templates/stock/location.html:93 #: templates/InvenTree/settings/plugin_settings.html:33 -#: templates/js/translated/bom.js:327 templates/js/translated/bom.js:540 +#: templates/js/translated/bom.js:339 templates/js/translated/bom.js:552 #: templates/js/translated/build.js:1682 templates/js/translated/company.js:345 #: templates/js/translated/company.js:551 #: templates/js/translated/company.js:840 templates/js/translated/order.js:836 #: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 -#: templates/js/translated/part.js:620 templates/js/translated/part.js:992 -#: templates/js/translated/part.js:1077 templates/js/translated/part.js:1247 -#: templates/js/translated/part.js:1643 templates/js/translated/part.js:1712 -#: templates/js/translated/stock.js:1569 templates/js/translated/stock.js:2339 -#: templates/js/translated/stock.js:2384 +#: templates/js/translated/part.js:626 templates/js/translated/part.js:999 +#: templates/js/translated/part.js:1084 templates/js/translated/part.js:1254 +#: templates/js/translated/part.js:1650 templates/js/translated/part.js:1719 +#: templates/js/translated/stock.js:1577 templates/js/translated/stock.js:2314 +#: templates/js/translated/stock.js:2497 templates/js/translated/stock.js:2542 msgid "Description" msgstr "Açıklama" @@ -244,7 +245,7 @@ msgstr "Açıklama (isteğe bağlı)" msgid "parent" msgstr "üst" -#: InvenTree/serializers.py:65 part/models.py:2727 +#: InvenTree/serializers.py:65 part/models.py:2734 msgid "Must be a valid number" msgstr "Geçerli bir numara olmalı" @@ -252,83 +253,83 @@ msgstr "Geçerli bir numara olmalı" msgid "Filename" msgstr "" -#: InvenTree/settings.py:663 +#: InvenTree/settings.py:661 msgid "German" msgstr "Almanca" -#: InvenTree/settings.py:664 +#: InvenTree/settings.py:662 msgid "Greek" msgstr "Yunanca" -#: InvenTree/settings.py:665 +#: InvenTree/settings.py:663 msgid "English" msgstr "İngilizce" -#: InvenTree/settings.py:666 +#: InvenTree/settings.py:664 msgid "Spanish" msgstr "İspanyolca" -#: InvenTree/settings.py:667 +#: InvenTree/settings.py:665 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:668 +#: InvenTree/settings.py:666 msgid "French" msgstr "Fransızca" -#: InvenTree/settings.py:669 +#: InvenTree/settings.py:667 msgid "Hebrew" msgstr "İbranice" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:668 msgid "Italian" msgstr "İtalyanca" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:669 msgid "Japanese" msgstr "Japonca" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:670 msgid "Korean" msgstr "Korece" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:671 msgid "Dutch" msgstr "Flemenkçe" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:672 msgid "Norwegian" msgstr "Norveççe" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:673 msgid "Polish" msgstr "Polonyaca" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:674 msgid "Portugese" msgstr "" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:675 msgid "Russian" msgstr "Rusça" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:676 msgid "Swedish" msgstr "İsveççe" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:677 msgid "Thai" msgstr "Tay dili" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:678 msgid "Turkish" msgstr "Türkçe" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:679 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:680 msgid "Chinese" msgstr "Çince" @@ -374,7 +375,7 @@ msgstr "Kayıp" msgid "Returned" msgstr "İade" -#: InvenTree/status_codes.py:143 order/models.py:941 +#: InvenTree/status_codes.py:143 order/models.py:961 #: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "Sevk edildi" @@ -455,7 +456,7 @@ msgstr "Üst ögeden ayır" msgid "Split child item" msgstr "Alt ögeyi ayır" -#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2064 +#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2072 msgid "Merged stock items" msgstr "" @@ -543,56 +544,56 @@ msgstr "Parola alanları eşleşmelidir" msgid "System Information" msgstr "Sistem Bilgisi" -#: barcodes/api.py:54 barcodes/api.py:151 +#: barcodes/api.py:54 barcodes/api.py:152 msgid "Must provide barcode_data parameter" msgstr "Barcode_data parametresini sağlamalıdır" -#: barcodes/api.py:127 +#: barcodes/api.py:128 msgid "No match found for barcode data" msgstr "Barkod verisi için eşleşme bulunamadı" -#: barcodes/api.py:129 +#: barcodes/api.py:130 msgid "Match found for barcode data" msgstr "Barkod verisi için eşleşme bulundu" -#: barcodes/api.py:154 +#: barcodes/api.py:155 msgid "Must provide stockitem parameter" msgstr "Stok kalemi parametresi sağlamalıdır" -#: barcodes/api.py:161 +#: barcodes/api.py:162 msgid "No matching stock item found" msgstr "Eşleşen stok kalemi bulunamadı" -#: barcodes/api.py:191 +#: barcodes/api.py:193 msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:195 +#: barcodes/api.py:197 msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:199 +#: barcodes/api.py:201 msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:205 barcodes/api.py:217 +#: barcodes/api.py:207 barcodes/api.py:219 msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:223 +#: barcodes/api.py:225 msgid "Barcode associated with Stock Item" msgstr "" -#: build/forms.py:36 build/models.py:1286 +#: build/forms.py:36 build/models.py:1293 #: build/templates/build/build_base.html:82 -#: build/templates/build/detail.html:35 common/models.py:1253 +#: build/templates/build/detail.html:35 common/models.py:1263 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/models.py:796 order/models.py:1207 order/serializers.py:810 +#: order/models.py:805 order/models.py:1229 order/serializers.py:816 #: order/templates/order/order_wizard/match_parts.html:30 -#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:145 -#: part/forms.py:161 part/forms.py:177 part/models.py:2629 +#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:144 +#: part/forms.py:160 part/forms.py:176 part/models.py:2636 #: part/templates/part/bom_upload/match_parts.html:31 -#: part/templates/part/detail.html:962 part/templates/part/detail.html:1048 +#: part/templates/part/detail.html:992 part/templates/part/detail.html:1078 #: part/templates/part/part_pricing.html:16 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 @@ -603,7 +604,7 @@ msgstr "" #: stock/templates/stock/item_base.html:181 #: stock/templates/stock/item_base.html:262 #: stock/templates/stock/item_base.html:270 -#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:555 +#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:567 #: templates/js/translated/build.js:295 templates/js/translated/build.js:495 #: templates/js/translated/build.js:689 templates/js/translated/build.js:699 #: templates/js/translated/build.js:1075 templates/js/translated/build.js:1422 @@ -611,11 +612,11 @@ msgstr "" #: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 #: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 #: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 -#: templates/js/translated/order.js:2150 templates/js/translated/part.js:900 -#: templates/js/translated/part.js:1855 templates/js/translated/part.js:1978 -#: templates/js/translated/part.js:2056 templates/js/translated/stock.js:383 -#: templates/js/translated/stock.js:580 templates/js/translated/stock.js:750 -#: templates/js/translated/stock.js:2519 templates/js/translated/stock.js:2621 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:906 +#: templates/js/translated/part.js:1862 templates/js/translated/part.js:1985 +#: templates/js/translated/part.js:2063 templates/js/translated/stock.js:391 +#: templates/js/translated/stock.js:588 templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2779 msgid "Quantity" msgstr "Miktar" @@ -623,9 +624,9 @@ msgstr "Miktar" msgid "Enter quantity for build output" msgstr "Yapım işi çıktısı için miktarını girin" -#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 -#: stock/serializers.py:314 templates/js/translated/stock.js:230 -#: templates/js/translated/stock.js:384 +#: build/forms.py:41 order/serializers.py:820 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:238 +#: templates/js/translated/stock.js:392 msgid "Serial Numbers" msgstr "Seri Numaraları" @@ -649,18 +650,18 @@ msgstr "İptali Onayla" msgid "Confirm build cancellation" msgstr "Yapım işi iptalini onayla" -#: build/models.py:133 +#: build/models.py:135 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:137 build/templates/build/build_base.html:9 +#: build/models.py:139 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:457 +#: templates/js/translated/build.js:457 templates/js/translated/stock.js:2290 msgid "Build Order" msgstr "Yapım İşi Emri" -#: build/models.py:138 build/templates/build/build_base.html:13 +#: build/models.py:140 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:92 #: order/templates/order/so_sidebar.html:13 @@ -670,40 +671,40 @@ msgstr "Yapım İşi Emri" msgid "Build Orders" msgstr "Yapım İşi Emirleri" -#: build/models.py:198 +#: build/models.py:200 msgid "Build Order Reference" msgstr "Yapım İşi Emri Referansı" -#: build/models.py:199 order/models.py:210 order/models.py:536 -#: order/models.py:803 part/models.py:2638 +#: build/models.py:201 order/models.py:213 order/models.py:541 +#: order/models.py:812 part/models.py:2645 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:547 templates/js/translated/build.js:1179 +#: templates/js/translated/bom.js:559 templates/js/translated/build.js:1179 #: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "Referans" -#: build/models.py:210 +#: build/models.py:212 msgid "Brief description of the build" msgstr "Yapım işinin kısa açıklaması" -#: build/models.py:219 build/templates/build/build_base.html:164 +#: build/models.py:221 build/templates/build/build_base.html:164 #: build/templates/build/detail.html:88 msgid "Parent Build" msgstr "Üst Yapım İşi" -#: build/models.py:220 +#: build/models.py:222 msgid "BuildOrder to which this build is allocated" msgstr "Bu yapım işinin tahsis edildiği yapım işi emri" -#: build/models.py:225 build/templates/build/build_base.html:77 +#: build/models.py:227 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:856 order/models.py:930 -#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 -#: part/models.py:2204 part/models.py:2220 part/models.py:2239 -#: part/models.py:2256 part/models.py:2358 part/models.py:2480 -#: part/models.py:2613 part/models.py:2920 part/serializers.py:658 +#: order/models.py:876 order/models.py:950 +#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:359 +#: part/models.py:2211 part/models.py:2227 part/models.py:2246 +#: part/models.py:2263 part/models.py:2365 part/models.py:2487 +#: part/models.py:2620 part/models.py:2927 part/serializers.py:658 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/set_category.html:13 @@ -713,205 +714,205 @@ msgstr "Bu yapım işinin tahsis edildiği yapım işi emri" #: templates/InvenTree/search.html:80 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 -#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:326 -#: templates/js/translated/bom.js:505 templates/js/translated/build.js:680 +#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:338 +#: templates/js/translated/bom.js:517 templates/js/translated/build.js:680 #: templates/js/translated/build.js:1048 templates/js/translated/build.js:1419 #: templates/js/translated/build.js:1687 templates/js/translated/company.js:492 #: templates/js/translated/company.js:749 templates/js/translated/order.js:84 #: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 #: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 -#: templates/js/translated/order.js:2128 templates/js/translated/part.js:977 -#: templates/js/translated/part.js:1058 templates/js/translated/part.js:1225 -#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:719 -#: templates/js/translated/stock.js:926 templates/js/translated/stock.js:1526 -#: templates/js/translated/stock.js:2609 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:984 +#: templates/js/translated/part.js:1065 templates/js/translated/part.js:1232 +#: templates/js/translated/stock.js:562 templates/js/translated/stock.js:727 +#: templates/js/translated/stock.js:934 templates/js/translated/stock.js:1534 +#: templates/js/translated/stock.js:2767 msgid "Part" msgstr "Parça" -#: build/models.py:233 +#: build/models.py:235 msgid "Select part to build" msgstr "Yapım işi için parça seçin" -#: build/models.py:238 +#: build/models.py:240 msgid "Sales Order Reference" msgstr "Satış Emri Referansı" -#: build/models.py:242 +#: build/models.py:244 msgid "SalesOrder to which this build is allocated" msgstr "Bu yapım işinin tahsis edildiği satış emri" -#: build/models.py:247 templates/js/translated/build.js:1407 +#: build/models.py:249 templates/js/translated/build.js:1407 #: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "Kaynak Konum" -#: build/models.py:251 +#: build/models.py:253 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Bu yapım işi için stok alınacak konumu seçin (her hangi bir stok konumundan alınması için boş bırakın)" -#: build/models.py:256 +#: build/models.py:258 msgid "Destination Location" msgstr "Hedef Konum" -#: build/models.py:260 +#: build/models.py:262 msgid "Select location where the completed items will be stored" msgstr "Tamamlanmış ögelerin saklanacağı konumu seçiniz" -#: build/models.py:264 +#: build/models.py:266 msgid "Build Quantity" msgstr "Yapım İşi Miktarı" -#: build/models.py:267 +#: build/models.py:269 msgid "Number of stock items to build" msgstr "Yapım işi stok kalemlerinin sayısı" -#: build/models.py:271 +#: build/models.py:273 msgid "Completed items" msgstr "Tamamlanmış ögeler" -#: build/models.py:273 +#: build/models.py:275 msgid "Number of stock items which have been completed" msgstr "Tamamlanan stok kalemlerinin sayısı" -#: build/models.py:277 part/templates/part/part_base.html:234 +#: build/models.py:279 part/templates/part/part_base.html:234 msgid "Build Status" msgstr "Yapım İşi Durumu" -#: build/models.py:281 +#: build/models.py:283 msgid "Build status code" msgstr "Yapım işi durum kodu" -#: build/models.py:285 stock/models.py:531 +#: build/models.py:287 stock/models.py:533 msgid "Batch Code" msgstr "Sıra numarası" -#: build/models.py:289 +#: build/models.py:291 msgid "Batch code for this build output" msgstr "Yapım işi çıktısı için sıra numarası" -#: build/models.py:292 order/models.py:126 part/models.py:967 +#: build/models.py:294 order/models.py:129 part/models.py:969 #: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "Oluşturulma tarihi" -#: build/models.py:296 order/models.py:558 +#: build/models.py:298 order/models.py:563 msgid "Target completion date" msgstr "Hedef tamamlama tarihi" -#: build/models.py:297 +#: build/models.py:299 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Yapım işinin tamamlanması için hedef tarih. Bu tarihten sonra yapım işi gecikmiş olacak." -#: build/models.py:300 order/models.py:252 +#: build/models.py:302 order/models.py:255 #: templates/js/translated/build.js:1758 msgid "Completion Date" msgstr "Tamamlama tarihi" -#: build/models.py:306 +#: build/models.py:308 msgid "completed by" msgstr "tamamlayan" -#: build/models.py:314 templates/js/translated/build.js:1729 +#: build/models.py:316 templates/js/translated/build.js:1729 msgid "Issued by" msgstr "Veren" -#: build/models.py:315 +#: build/models.py:317 msgid "User who issued this build order" msgstr "Bu yapım işi emrini veren kullanıcı" -#: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:140 +#: build/models.py:325 build/templates/build/build_base.html:185 +#: build/templates/build/detail.html:116 order/models.py:143 #: order/templates/order/order_base.html:170 -#: order/templates/order/sales_order_base.html:182 part/models.py:971 +#: order/templates/order/sales_order_base.html:182 part/models.py:973 #: report/templates/report/inventree_build_order_base.html:159 #: templates/js/translated/build.js:1741 templates/js/translated/order.js:864 msgid "Responsible" msgstr "Sorumlu" -#: build/models.py:324 +#: build/models.py:326 msgid "User responsible for this build order" msgstr "Bu yapım işi emrinden sorumlu kullanıcı" -#: build/models.py:329 build/templates/build/detail.html:102 +#: build/models.py:331 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:525 +#: part/templates/part/part_base.html:354 stock/models.py:527 #: stock/templates/stock/item_base.html:373 msgid "External Link" msgstr "Harici Bağlantı" -#: build/models.py:334 build/serializers.py:201 +#: build/models.py:336 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:144 order/models.py:805 order/models.py:1051 +#: order/models.py:147 order/models.py:814 order/models.py:1071 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/models.py:956 -#: part/templates/part/detail.html:120 part/templates/part/part_sidebar.html:50 +#: order/templates/order/so_sidebar.html:17 part/models.py:958 +#: part/templates/part/detail.html:137 part/templates/part/part_sidebar.html:54 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:597 -#: stock/models.py:1867 stock/models.py:1973 stock/serializers.py:332 -#: stock/serializers.py:639 stock/serializers.py:737 stock/serializers.py:869 -#: stock/templates/stock/stock_sidebar.html:21 -#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:711 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:599 +#: stock/models.py:1895 stock/models.py:2001 stock/serializers.py:332 +#: stock/serializers.py:640 stock/serializers.py:738 stock/serializers.py:870 +#: stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:723 #: templates/js/translated/company.js:845 templates/js/translated/order.js:1149 #: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 -#: templates/js/translated/stock.js:1309 templates/js/translated/stock.js:1795 +#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1803 msgid "Notes" msgstr "Notlar" -#: build/models.py:335 +#: build/models.py:337 msgid "Extra build notes" msgstr "Yapım işi için ekstra notlar" -#: build/models.py:710 +#: build/models.py:717 msgid "No build output specified" msgstr "Yapım işi çıktısı belirtilmedi" -#: build/models.py:713 +#: build/models.py:720 msgid "Build output is already completed" msgstr "Yapım işi çıktısı zaten tamamlanmış" -#: build/models.py:716 +#: build/models.py:723 msgid "Build output does not match Build Order" msgstr "Yapım işi çıktısı, yapım işi emri ile eşleşmiyor" -#: build/models.py:1108 +#: build/models.py:1115 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Ana parça izlenebilir olarak işaretlendiğinden, yapım işi çıktısı için bir yapım işi ögesi belirtmelidir" -#: build/models.py:1117 +#: build/models.py:1124 #, python-brace-format msgid "Allocated quantity ({q}) must not execed available stock quantity ({a})" msgstr "" -#: build/models.py:1127 +#: build/models.py:1134 msgid "Stock item is over-allocated" msgstr "Stok kalemi fazladan tahsis edilmiş" -#: build/models.py:1133 order/models.py:1167 +#: build/models.py:1140 order/models.py:1189 msgid "Allocation quantity must be greater than zero" msgstr "Tahsis edilen miktar sıfırdan büyük olmalıdır" -#: build/models.py:1139 +#: build/models.py:1146 msgid "Quantity must be 1 for serialized stock" msgstr "Seri numaralı stok için miktar bir olmalı" -#: build/models.py:1196 +#: build/models.py:1203 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1256 stock/templates/stock/item_base.html:345 +#: build/models.py:1263 stock/templates/stock/item_base.html:345 #: templates/InvenTree/search.html:137 templates/js/translated/build.js:1660 #: templates/navbar.html:35 msgid "Build" msgstr "Yapım İşi" -#: build/models.py:1257 +#: build/models.py:1264 msgid "Build to allocate parts" msgstr "Yapım işi için tahsis edilen parçalar" -#: build/models.py:1273 build/serializers.py:388 order/serializers.py:690 -#: order/serializers.py:708 stock/serializers.py:577 stock/serializers.py:695 +#: build/models.py:1280 build/serializers.py:388 order/serializers.py:696 +#: order/serializers.py:714 stock/serializers.py:578 stock/serializers.py:696 #: stock/templates/stock/item_base.html:9 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:367 @@ -920,24 +921,24 @@ msgstr "Yapım işi için tahsis edilen parçalar" #: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 #: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 #: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 -#: templates/js/translated/stock.js:555 templates/js/translated/stock.js:720 -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:563 templates/js/translated/stock.js:728 +#: templates/js/translated/stock.js:2628 msgid "Stock Item" msgstr "Stok Kalemi" -#: build/models.py:1274 +#: build/models.py:1281 msgid "Source stock item" msgstr "Kaynak stok kalemi" -#: build/models.py:1287 +#: build/models.py:1294 msgid "Stock quantity to allocate to build" msgstr "Yapım işi için tahsis edilen stok miktarı" -#: build/models.py:1295 +#: build/models.py:1302 msgid "Install into" msgstr "Kurulduğu yer" -#: build/models.py:1296 +#: build/models.py:1303 msgid "Destination stock item" msgstr "Hedef stok kalemi" @@ -962,16 +963,16 @@ msgid "This build output is not fully allocated" msgstr "" #: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 -#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:730 -#: stock/serializers.py:971 stock/templates/stock/item_base.html:313 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:731 +#: stock/serializers.py:972 stock/templates/stock/item_base.html:313 #: templates/js/translated/barcode.js:384 #: templates/js/translated/barcode.js:557 templates/js/translated/build.js:480 #: templates/js/translated/build.js:1087 templates/js/translated/order.js:508 #: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 #: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 -#: templates/js/translated/part.js:179 templates/js/translated/stock.js:556 -#: templates/js/translated/stock.js:721 templates/js/translated/stock.js:928 -#: templates/js/translated/stock.js:1676 templates/js/translated/stock.js:2411 +#: templates/js/translated/part.js:179 templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:729 templates/js/translated/stock.js:936 +#: templates/js/translated/stock.js:1684 templates/js/translated/stock.js:2569 msgid "Location" msgstr "Konum" @@ -980,12 +981,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:552 +#: build/templates/build/detail.html:63 order/models.py:557 #: order/serializers.py:247 stock/templates/stock/item_base.html:187 #: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1716 #: templates/js/translated/order.js:591 templates/js/translated/order.js:840 -#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1651 -#: templates/js/translated/stock.js:2488 templates/js/translated/stock.js:2637 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1659 +#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2795 msgid "Status" msgstr "Durum" @@ -1021,8 +1022,8 @@ msgstr "Gerekli yapım işi miktarı tamamlanmadı" msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:313 build/serializers.py:362 part/models.py:2753 -#: part/models.py:2912 +#: build/serializers.py:313 build/serializers.py:362 part/models.py:2760 +#: part/models.py:2919 msgid "BOM Item" msgstr "" @@ -1038,16 +1039,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:394 stock/serializers.py:584 +#: build/serializers.py:394 stock/serializers.py:585 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:408 order/models.py:277 order/serializers.py:240 -#: stock/models.py:365 stock/models.py:1077 stock/serializers.py:305 +#: build/serializers.py:408 order/models.py:280 order/serializers.py:240 +#: stock/models.py:367 stock/models.py:1105 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:450 order/serializers.py:741 +#: build/serializers.py:450 order/serializers.py:747 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1060,7 +1061,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:491 order/serializers.py:984 +#: build/serializers.py:491 order/serializers.py:990 msgid "Allocation items must be provided" msgstr "" @@ -1164,13 +1165,13 @@ msgid "Completed" msgstr "Tamamlandı" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:927 -#: order/models.py:1023 order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:947 +#: order/models.py:1043 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:307 -#: templates/js/translated/order.js:1218 +#: templates/js/translated/order.js:1218 templates/js/translated/stock.js:2304 msgid "Sales Order" msgstr "Sipariş Emri" @@ -1224,7 +1225,7 @@ msgstr "Stok Kaynağı" msgid "Stock can be taken from any available location." msgstr "Stok herhangi bir konumdan alınabilir." -#: build/templates/build/detail.html:50 order/models.py:878 stock/forms.py:136 +#: build/templates/build/detail.html:50 order/models.py:898 stock/forms.py:136 #: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "Hedef" @@ -1239,7 +1240,7 @@ msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:331 -#: templates/js/translated/stock.js:1665 templates/js/translated/stock.js:2644 +#: templates/js/translated/stock.js:1673 templates/js/translated/stock.js:2802 #: templates/js/translated/table_filters.js:151 #: templates/js/translated/table_filters.js:238 msgid "Batch" @@ -1343,9 +1344,9 @@ msgstr "Tamamlanmış Yapım İşi Çıktıları" #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 #: order/templates/order/sales_order_detail.html:107 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:196 -#: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 -#: stock/templates/stock/stock_sidebar.html:19 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:213 +#: part/templates/part/part_sidebar.html:52 stock/templates/stock/item.html:112 +#: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "Ekler" @@ -1360,8 +1361,8 @@ msgstr "Yapım İşi Notları" #: order/templates/order/purchase_order_detail.html:108 #: order/templates/order/sales_order_detail.html:127 #: order/templates/order/sales_order_detail.html:186 -#: part/templates/part/detail.html:124 stock/templates/stock/item.html:115 -#: stock/templates/stock/item.html:205 +#: part/templates/part/detail.html:141 stock/templates/stock/item.html:132 +#: stock/templates/stock/item.html:235 msgid "Edit Notes" msgstr "Notları Düzenle" @@ -1373,7 +1374,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:303 +#: build/templates/build/index.html:18 part/templates/part/detail.html:320 msgid "New Build Order" msgstr "Yeni Yapım İşi Emri" @@ -1453,23 +1454,23 @@ msgstr "Yapım işi çıktısı silindi" msgid "Delete Build Order" msgstr "Yapım İşi Emrini Sil" -#: common/files.py:67 +#: common/files.py:65 msgid "Unsupported file format: {ext.upper()}" msgstr "Desteklenmeyen dosya formatı: {ext.upper()}" -#: common/files.py:69 +#: common/files.py:67 msgid "Error reading file (invalid encoding)" msgstr "Dosya okurken hata (geçersiz biçim)" -#: common/files.py:74 +#: common/files.py:72 msgid "Error reading file (invalid format)" msgstr "Dosya okurken hata (geçersiz biçim)" -#: common/files.py:76 +#: common/files.py:74 msgid "Error reading file (incorrect dimension)" msgstr "Dosya okurken hata (hatalı ölçüler)" -#: common/files.py:78 +#: common/files.py:76 msgid "Error reading file (data could be corrupted)" msgstr "Dosya okurken hata (veri bozulmuş olabilir)" @@ -1490,740 +1491,828 @@ msgstr "{name.title()} Dosya" msgid "Select {name} file to upload" msgstr "{name} dosyasını yüklemek için seçin" -#: common/models.py:344 common/models.py:998 common/models.py:1206 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:352 +msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:346 +#: common/models.py:354 msgid "Settings value" msgstr "" -#: common/models.py:380 +#: common/models.py:388 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:400 +#: common/models.py:408 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:411 +#: common/models.py:419 msgid "Value must be an integer value" msgstr "" -#: common/models.py:434 +#: common/models.py:442 msgid "Key string must be unique" msgstr "Anahtar dizesi benzersiz olmalı" -#: common/models.py:553 +#: common/models.py:561 msgid "No group" msgstr "" -#: common/models.py:595 +#: common/models.py:603 msgid "Restart required" msgstr "" -#: common/models.py:596 +#: common/models.py:604 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:603 +#: common/models.py:611 msgid "InvenTree Instance Name" msgstr "" -#: common/models.py:605 +#: common/models.py:613 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:609 +#: common/models.py:617 msgid "Use instance name" msgstr "" -#: common/models.py:610 +#: common/models.py:618 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:616 company/models.py:100 company/models.py:101 +#: common/models.py:624 company/models.py:100 company/models.py:101 msgid "Company name" msgstr "Şirket adı" -#: common/models.py:617 +#: common/models.py:625 msgid "Internal company name" msgstr "" -#: common/models.py:622 +#: common/models.py:630 msgid "Base URL" msgstr "Ana URL" -#: common/models.py:623 +#: common/models.py:631 msgid "Base URL for server instance" msgstr "" -#: common/models.py:629 +#: common/models.py:637 msgid "Default Currency" msgstr "Varsayılan Para Birimi" -#: common/models.py:630 +#: common/models.py:638 msgid "Default currency" msgstr "Varsayılan para birimi" -#: common/models.py:636 +#: common/models.py:644 msgid "Download from URL" msgstr "URL'den indir" -#: common/models.py:637 +#: common/models.py:645 msgid "Allow download of remote images and files from external URL" msgstr "Harici URL'den resim ve dosyaların indirilmesine izin ver" -#: common/models.py:643 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:651 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Barkod Desteği" -#: common/models.py:644 +#: common/models.py:652 msgid "Enable barcode scanner support" msgstr "Barkod tarayıcı desteğini etkinleştir" -#: common/models.py:650 +#: common/models.py:658 msgid "IPN Regex" msgstr "DPN Regex" -#: common/models.py:651 +#: common/models.py:659 msgid "Regular expression pattern for matching Part IPN" msgstr "Parça DPN eşleştirmesi için Düzenli İfade Kalıbı (Regex)" -#: common/models.py:655 +#: common/models.py:663 msgid "Allow Duplicate IPN" msgstr "Yinelenen DPN'ye İzin Ver" -#: common/models.py:656 +#: common/models.py:664 msgid "Allow multiple parts to share the same IPN" msgstr "Birden çok parçanın aynı DPN'yi paylaşmasına izin ver" -#: common/models.py:662 +#: common/models.py:670 msgid "Allow Editing IPN" msgstr "DPN Düzenlemeye İzin Ver" -#: common/models.py:663 +#: common/models.py:671 msgid "Allow changing the IPN value while editing a part" msgstr "Parçayı düzenlerken DPN değiştirmeye izin ver" -#: common/models.py:669 +#: common/models.py:677 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:670 +#: common/models.py:678 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:676 +#: common/models.py:684 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:677 +#: common/models.py:685 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:683 +#: common/models.py:691 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:684 +#: common/models.py:692 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:690 +#: common/models.py:698 msgid "Copy Category Parameter Templates" msgstr "Kategori Paremetre Sablonu Kopyala" -#: common/models.py:691 +#: common/models.py:699 msgid "Copy category parameter templates when creating a part" msgstr "Parça oluştururken kategori parametre şablonlarını kopyala" -#: common/models.py:697 part/models.py:2482 report/models.py:187 +#: common/models.py:705 part/models.py:2489 report/models.py:187 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:422 msgid "Template" msgstr "Şablon" -#: common/models.py:698 +#: common/models.py:706 msgid "Parts are templates by default" msgstr "Parçaları varsayılan olan şablondur" -#: common/models.py:704 part/models.py:919 templates/js/translated/bom.js:1068 +#: common/models.py:712 part/models.py:921 templates/js/translated/bom.js:1082 #: templates/js/translated/table_filters.js:168 #: templates/js/translated/table_filters.js:434 msgid "Assembly" msgstr "Montaj" -#: common/models.py:705 +#: common/models.py:713 msgid "Parts can be assembled from other components by default" msgstr "Parçalar varsayılan olarak başka bileşenlerden monte edilebilir" -#: common/models.py:711 part/models.py:925 +#: common/models.py:719 part/models.py:927 #: templates/js/translated/table_filters.js:438 msgid "Component" msgstr "Bileşen" -#: common/models.py:712 +#: common/models.py:720 msgid "Parts can be used as sub-components by default" msgstr "Parçalar varsayılan olarak alt bileşen olarak kullanılabilir" -#: common/models.py:718 part/models.py:936 +#: common/models.py:726 part/models.py:938 msgid "Purchaseable" msgstr "Satın Alınabilir" -#: common/models.py:719 +#: common/models.py:727 msgid "Parts are purchaseable by default" msgstr "Parçalar varsayılan olarak satın alınabilir" -#: common/models.py:725 part/models.py:941 +#: common/models.py:733 part/models.py:943 #: templates/js/translated/table_filters.js:446 msgid "Salable" msgstr "Satılabilir" -#: common/models.py:726 +#: common/models.py:734 msgid "Parts are salable by default" msgstr "Parçalar varsayılan olarak satılabilir" -#: common/models.py:732 part/models.py:931 +#: common/models.py:740 part/models.py:933 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 #: templates/js/translated/table_filters.js:450 msgid "Trackable" msgstr "Takip Edilebilir" -#: common/models.py:733 +#: common/models.py:741 msgid "Parts are trackable by default" msgstr "Parçalar varsayılan olarak takip edilebilir" -#: common/models.py:739 part/models.py:951 +#: common/models.py:747 part/models.py:953 #: part/templates/part/part_base.html:147 #: templates/js/translated/table_filters.js:42 msgid "Virtual" msgstr "Sanal" -#: common/models.py:740 +#: common/models.py:748 msgid "Parts are virtual by default" msgstr "Parçalar varsayılan olarak sanaldır" -#: common/models.py:746 +#: common/models.py:754 msgid "Show Import in Views" msgstr "" -#: common/models.py:747 +#: common/models.py:755 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:753 +#: common/models.py:761 msgid "Show Price in Forms" msgstr "Formlarda Fiyat Göster" -#: common/models.py:754 +#: common/models.py:762 msgid "Display part price in some forms" msgstr "" -#: common/models.py:765 +#: common/models.py:773 msgid "Show Price in BOM" msgstr "" -#: common/models.py:766 +#: common/models.py:774 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:772 +#: common/models.py:780 msgid "Show related parts" msgstr "İlgili parçaları göster" -#: common/models.py:773 +#: common/models.py:781 msgid "Display related parts for a part" msgstr "" -#: common/models.py:779 +#: common/models.py:787 msgid "Create initial stock" msgstr "" -#: common/models.py:780 +#: common/models.py:788 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:786 +#: common/models.py:794 msgid "Internal Prices" msgstr "" -#: common/models.py:787 +#: common/models.py:795 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:793 +#: common/models.py:801 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:794 +#: common/models.py:802 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:800 +#: common/models.py:808 msgid "Part Name Display Format" msgstr "" -#: common/models.py:801 +#: common/models.py:809 msgid "Format to display the part name" msgstr "" -#: common/models.py:808 +#: common/models.py:816 msgid "Enable Reports" msgstr "" -#: common/models.py:809 +#: common/models.py:817 msgid "Enable generation of reports" msgstr "" -#: common/models.py:815 templates/stats.html:25 +#: common/models.py:823 templates/stats.html:25 msgid "Debug Mode" msgstr "Hata Ayıklama Modu" -#: common/models.py:816 +#: common/models.py:824 msgid "Generate reports in debug mode (HTML output)" msgstr "Raporları hata ayıklama modunda üret (HTML çıktısı)" -#: common/models.py:822 +#: common/models.py:830 msgid "Page Size" msgstr "Sayfa Boyutu" -#: common/models.py:823 +#: common/models.py:831 msgid "Default page size for PDF reports" msgstr "PDF raporlar için varsayılan sayfa boyutu" -#: common/models.py:833 +#: common/models.py:841 msgid "Test Reports" msgstr "Test Raporları" -#: common/models.py:834 +#: common/models.py:842 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:840 +#: common/models.py:848 msgid "Stock Expiry" msgstr "" -#: common/models.py:841 +#: common/models.py:849 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:847 +#: common/models.py:855 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:848 +#: common/models.py:856 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:854 +#: common/models.py:862 msgid "Stock Stale Time" msgstr "" -#: common/models.py:855 +#: common/models.py:863 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:857 +#: common/models.py:865 msgid "days" msgstr "günler" -#: common/models.py:862 +#: common/models.py:870 msgid "Build Expired Stock" msgstr "" -#: common/models.py:863 +#: common/models.py:871 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:869 +#: common/models.py:877 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:870 +#: common/models.py:878 msgid "Enable ownership control over stock locations and items" msgstr "Stok konumu ve ögeler üzerinde sahiplik kontrolünü etkinleştirin" -#: common/models.py:876 -msgid "Group by Part" -msgstr "" - -#: common/models.py:877 -msgid "Group stock items by part reference in table views" -msgstr "" - -#: common/models.py:883 +#: common/models.py:884 msgid "Build Order Reference Prefix" msgstr "" -#: common/models.py:884 +#: common/models.py:885 msgid "Prefix value for build order reference" msgstr "" -#: common/models.py:889 +#: common/models.py:890 msgid "Build Order Reference Regex" msgstr "" -#: common/models.py:890 +#: common/models.py:891 msgid "Regular expression pattern for matching build order reference" msgstr "" -#: common/models.py:894 +#: common/models.py:895 msgid "Sales Order Reference Prefix" msgstr "" -#: common/models.py:895 +#: common/models.py:896 msgid "Prefix value for sales order reference" msgstr "" -#: common/models.py:900 +#: common/models.py:901 msgid "Purchase Order Reference Prefix" msgstr "" -#: common/models.py:901 +#: common/models.py:902 msgid "Prefix value for purchase order reference" msgstr "" -#: common/models.py:907 +#: common/models.py:908 msgid "Enable password forgot" msgstr "" -#: common/models.py:908 +#: common/models.py:909 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:913 +#: common/models.py:914 msgid "Enable registration" msgstr "" -#: common/models.py:914 +#: common/models.py:915 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:919 +#: common/models.py:920 msgid "Enable SSO" msgstr "" -#: common/models.py:920 +#: common/models.py:921 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:925 +#: common/models.py:926 msgid "Email required" msgstr "" -#: common/models.py:926 +#: common/models.py:927 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:931 +#: common/models.py:932 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:932 +#: common/models.py:933 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:937 +#: common/models.py:938 msgid "Mail twice" msgstr "" -#: common/models.py:938 +#: common/models.py:939 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:943 +#: common/models.py:944 msgid "Password twice" msgstr "" -#: common/models.py:944 +#: common/models.py:945 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:949 +#: common/models.py:950 msgid "Group on signup" msgstr "" -#: common/models.py:950 +#: common/models.py:951 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:955 +#: common/models.py:956 msgid "Enforce MFA" msgstr "" -#: common/models.py:956 +#: common/models.py:957 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:961 +#: common/models.py:964 msgid "Enable URL integration" msgstr "" -#: common/models.py:962 +#: common/models.py:965 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:968 +#: common/models.py:971 msgid "Enable navigation integration" msgstr "" -#: common/models.py:969 +#: common/models.py:972 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:975 +#: common/models.py:978 msgid "Enable app integration" msgstr "" -#: common/models.py:976 +#: common/models.py:979 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:982 +#: common/models.py:985 msgid "Enable schedule integration" msgstr "" -#: common/models.py:983 +#: common/models.py:986 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1029 +#: common/models.py:992 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:993 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:1008 common/models.py:1216 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1039 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1030 +#: common/models.py:1040 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1035 +#: common/models.py:1045 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1036 +#: common/models.py:1046 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1041 +#: common/models.py:1051 msgid "Show latest parts" msgstr "" -#: common/models.py:1042 +#: common/models.py:1052 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:1047 +#: common/models.py:1057 msgid "Recent Part Count" msgstr "" -#: common/models.py:1048 +#: common/models.py:1058 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1054 +#: common/models.py:1064 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1055 +#: common/models.py:1065 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1060 +#: common/models.py:1070 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1061 +#: common/models.py:1071 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1066 +#: common/models.py:1076 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1067 +#: common/models.py:1077 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1072 +#: common/models.py:1082 msgid "Show low stock" msgstr "" -#: common/models.py:1073 +#: common/models.py:1083 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1078 +#: common/models.py:1088 msgid "Show depleted stock" msgstr "" -#: common/models.py:1079 +#: common/models.py:1089 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1084 +#: common/models.py:1094 msgid "Show needed stock" msgstr "" -#: common/models.py:1085 +#: common/models.py:1095 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1090 +#: common/models.py:1100 msgid "Show expired stock" msgstr "" -#: common/models.py:1091 +#: common/models.py:1101 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1096 +#: common/models.py:1106 msgid "Show stale stock" msgstr "" -#: common/models.py:1097 +#: common/models.py:1107 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1102 +#: common/models.py:1112 msgid "Show pending builds" msgstr "" -#: common/models.py:1103 +#: common/models.py:1113 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1108 +#: common/models.py:1118 msgid "Show overdue builds" msgstr "" -#: common/models.py:1109 +#: common/models.py:1119 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1114 +#: common/models.py:1124 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1115 +#: common/models.py:1125 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1120 +#: common/models.py:1130 msgid "Show overdue POs" msgstr "" -#: common/models.py:1121 +#: common/models.py:1131 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1126 +#: common/models.py:1136 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1127 +#: common/models.py:1137 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1132 +#: common/models.py:1142 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1133 +#: common/models.py:1143 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1139 +#: common/models.py:1149 msgid "Inline label display" msgstr "" -#: common/models.py:1140 +#: common/models.py:1150 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1146 +#: common/models.py:1156 msgid "Inline report display" msgstr "" -#: common/models.py:1147 +#: common/models.py:1157 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1153 +#: common/models.py:1163 msgid "Search Preview Results" msgstr "" -#: common/models.py:1154 +#: common/models.py:1164 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1160 +#: common/models.py:1170 msgid "Search Show Stock" msgstr "" -#: common/models.py:1161 +#: common/models.py:1171 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1167 +#: common/models.py:1177 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1168 +#: common/models.py:1178 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1174 +#: common/models.py:1184 msgid "Show Quantity in Forms" msgstr "Formlarda Miktarı Göster" -#: common/models.py:1175 +#: common/models.py:1185 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1181 +#: common/models.py:1191 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1182 +#: common/models.py:1192 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1188 +#: common/models.py:1198 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1189 +#: common/models.py:1199 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1254 company/forms.py:43 +#: common/models.py:1264 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1261 company/serializers.py:264 +#: common/models.py:1271 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 -#: templates/js/translated/part.js:909 templates/js/translated/part.js:1860 +#: templates/js/translated/part.js:915 templates/js/translated/part.js:1867 msgid "Price" msgstr "Fiyat" -#: common/models.py:1262 +#: common/models.py:1272 msgid "Unit price at specified quantity" msgstr "" +#: common/models.py:1429 common/models.py:1568 +msgid "Endpoint" +msgstr "" + +#: common/models.py:1430 +msgid "Endpoint at which this webhook is received" +msgstr "" + +#: common/models.py:1439 +msgid "Name for this webhook" +msgstr "" + +#: common/models.py:1444 part/models.py:948 plugin/models.py:46 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:96 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:417 +msgid "Active" +msgstr "Aktif" + +#: common/models.py:1445 +msgid "Is this webhook active" +msgstr "" + +#: common/models.py:1459 +msgid "Token" +msgstr "" + +#: common/models.py:1460 +msgid "Token for access" +msgstr "" + +#: common/models.py:1467 +msgid "Secret" +msgstr "" + +#: common/models.py:1468 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:1535 +msgid "Message ID" +msgstr "" + +#: common/models.py:1536 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:1544 +msgid "Host" +msgstr "" + +#: common/models.py:1545 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:1552 +msgid "Header" +msgstr "" + +#: common/models.py:1553 +msgid "Header of this message" +msgstr "" + +#: common/models.py:1559 +msgid "Body" +msgstr "" + +#: common/models.py:1560 +msgid "Body of this message" +msgstr "" + +#: common/models.py:1569 +msgid "Endpoint on which this message was received" +msgstr "" + +#: common/models.py:1574 +msgid "Worked on" +msgstr "" + +#: common/models.py:1575 +msgid "Was the work on this message finished?" +msgstr "" + #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 #: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 -#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 -#: part/views.py:764 +#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:213 +#: part/views.py:773 msgid "Upload File" msgstr "Dosya Yükle" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 #: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 -#: part/views.py:765 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:214 +#: part/views.py:774 msgid "Match Fields" msgstr "Alanları Eşleştir" @@ -2315,7 +2404,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:139 part/models.py:838 +#: company/models.py:139 part/models.py:840 msgid "Image" msgstr "Resim" @@ -2352,8 +2441,8 @@ msgstr "Para birimi" msgid "Default currency used for this company" msgstr "Bu şirket için varsayılan para birimi" -#: company/models.py:320 company/models.py:535 stock/models.py:469 -#: stock/templates/stock/item_base.html:142 +#: company/models.py:320 company/models.py:535 stock/models.py:471 +#: stock/templates/stock/item_base.html:142 templates/js/translated/bom.js:328 msgid "Base Part" msgstr "Temel Parça" @@ -2380,7 +2469,7 @@ msgstr "Üretici seçin" #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:533 #: templates/js/translated/company.js:818 templates/js/translated/order.js:1038 -#: templates/js/translated/part.js:245 templates/js/translated/part.js:889 +#: templates/js/translated/part.js:245 templates/js/translated/part.js:895 msgid "MPN" msgstr "ÜPN" @@ -2409,8 +2498,8 @@ msgstr "Parametre adı" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1960 templates/js/translated/company.js:647 -#: templates/js/translated/part.js:709 templates/js/translated/stock.js:1296 +#: stock/models.py:1988 templates/js/translated/company.js:647 +#: templates/js/translated/part.js:715 templates/js/translated/stock.js:1304 msgid "Value" msgstr "Değer" @@ -2418,10 +2507,10 @@ msgstr "Değer" msgid "Parameter value" msgstr "Parametre değeri" -#: company/models.py:429 part/models.py:913 part/models.py:2450 +#: company/models.py:429 part/models.py:915 part/models.py:2457 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:284 -#: templates/js/translated/company.js:653 templates/js/translated/part.js:715 +#: templates/InvenTree/settings/settings.html:287 +#: templates/js/translated/company.js:653 templates/js/translated/part.js:721 msgid "Units" msgstr "" @@ -2434,13 +2523,13 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:224 +#: company/templates/company/supplier_part.html:87 order/models.py:227 #: order/templates/order/order_base.html:112 -#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 -#: part/bom.py:247 stock/templates/stock/item_base.html:397 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:237 +#: part/bom.py:265 stock/templates/stock/item_base.html:397 #: templates/js/translated/company.js:337 #: templates/js/translated/company.js:774 templates/js/translated/order.js:823 -#: templates/js/translated/part.js:215 templates/js/translated/part.js:857 +#: templates/js/translated/part.js:215 templates/js/translated/part.js:863 #: templates/js/translated/table_filters.js:393 msgid "Supplier" msgstr "Tedarikçi" @@ -2450,8 +2539,8 @@ msgid "Select supplier" msgstr "Tedarikçi seçin" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 -#: templates/js/translated/part.js:226 templates/js/translated/part.js:875 +#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1025 +#: templates/js/translated/part.js:226 templates/js/translated/part.js:881 msgid "SKU" msgstr "SKU" @@ -2472,22 +2561,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:576 company/templates/company/supplier_part.html:119 -#: part/models.py:2641 report/templates/report/inventree_po_report.html:93 +#: part/models.py:2648 report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" msgstr "Not" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "base cost" msgstr "temel maliyet" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:493 stock/templates/stock/item_base.html:338 -#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1791 +#: stock/models.py:495 stock/templates/stock/item_base.html:338 +#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1799 msgid "Packaging" msgstr "Paketleme" @@ -2495,7 +2584,7 @@ msgstr "Paketleme" msgid "Part packaging" msgstr "" -#: company/models.py:584 part/models.py:1781 +#: company/models.py:584 part/models.py:1783 msgid "multiple" msgstr "çoklu" @@ -2554,12 +2643,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:547 -#: order/templates/order/sales_order_base.html:115 stock/models.py:512 -#: stock/models.py:513 stock/serializers.py:625 +#: company/templates/company/company_base.html:83 order/models.py:552 +#: order/templates/order/sales_order_base.html:115 stock/models.py:514 +#: stock/models.py:515 stock/serializers.py:626 #: stock/templates/stock/item_base.html:290 #: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 -#: templates/js/translated/stock.js:2452 +#: templates/js/translated/stock.js:2610 #: templates/js/translated/table_filters.js:397 msgid "Customer" msgstr "Müşteri" @@ -2590,7 +2679,7 @@ msgstr "Yeni tedarikçi parçası oluştur" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:118 -#: part/templates/part/detail.html:336 +#: part/templates/part/detail.html:353 msgid "New Supplier Part" msgstr "Yeni Tedarikçi Parçası" @@ -2598,8 +2687,8 @@ msgstr "Yeni Tedarikçi Parçası" #: company/templates/company/detail.html:79 #: company/templates/company/manufacturer_part.html:127 #: company/templates/company/manufacturer_part.html:156 -#: part/templates/part/category.html:171 part/templates/part/detail.html:345 -#: part/templates/part/detail.html:374 +#: part/templates/part/category.html:171 part/templates/part/detail.html:362 +#: part/templates/part/detail.html:391 msgid "Options" msgstr "" @@ -2627,7 +2716,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:67 part/templates/part/detail.html:364 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:381 msgid "New Manufacturer Part" msgstr "" @@ -2641,7 +2730,7 @@ msgstr "Tedarikçi Stoku" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:68 part/templates/part/part_sidebar.html:33 +#: part/templates/part/detail.html:85 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197 #: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 @@ -2663,7 +2752,7 @@ msgstr "Yeni Satın Alma Emri" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:91 part/templates/part/part_sidebar.html:37 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:41 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217 #: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 @@ -2691,13 +2780,13 @@ msgstr "" #: company/templates/company/detail.html:384 #: company/templates/company/manufacturer_part.html:215 -#: part/templates/part/detail.html:418 +#: part/templates/part/detail.html:435 msgid "Delete Supplier Parts?" msgstr "" #: company/templates/company/detail.html:385 #: company/templates/company/manufacturer_part.html:216 -#: part/templates/part/detail.html:419 +#: part/templates/part/detail.html:436 msgid "All selected supplier parts will be deleted" msgstr "" @@ -2714,7 +2803,7 @@ msgstr "Üreticiler" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:34 #: company/templates/company/supplier_part.html:159 -#: part/templates/part/detail.html:71 part/templates/part/part_base.html:76 +#: part/templates/part/detail.html:88 part/templates/part/part_base.html:76 msgid "Order part" msgstr "Parça siparişi" @@ -2735,34 +2824,34 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 -#: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 +#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:163 #: templates/InvenTree/search.html:188 templates/navbar.html:45 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:129 -#: part/templates/part/detail.html:347 +#: part/templates/part/detail.html:364 msgid "Delete supplier parts" msgstr "Tedarikçi parçalarını sil" #: company/templates/company/manufacturer_part.html:129 #: company/templates/company/manufacturer_part.html:158 #: company/templates/company/manufacturer_part.html:254 -#: part/templates/part/detail.html:347 part/templates/part/detail.html:376 +#: part/templates/part/detail.html:364 part/templates/part/detail.html:393 #: templates/js/translated/company.js:426 templates/js/translated/helpers.js:31 -#: users/models.py:210 +#: users/models.py:212 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:143 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:17 -#: part/templates/part/detail.html:170 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:187 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:147 -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:192 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part.html:65 msgid "New Parameter" @@ -2773,7 +2862,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:191 -#: part/templates/part/detail.html:862 +#: part/templates/part/detail.html:892 msgid "Add Parameter" msgstr "" @@ -2802,9 +2891,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:477 +#: company/templates/company/supplier_part.html:24 stock/models.py:479 #: stock/templates/stock/item_base.html:402 -#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1748 +#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1756 msgid "Supplier Part" msgstr "Tedarikçi Parçası" @@ -2830,7 +2919,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:167 -#: templates/js/translated/stock.js:360 +#: templates/js/translated/stock.js:368 msgid "New Stock Item" msgstr "" @@ -2840,7 +2929,7 @@ msgid "Supplier Part Orders" msgstr "Tedarikçi Parçası Emirleri" #: company/templates/company/supplier_part.html:160 -#: part/templates/part/detail.html:72 +#: part/templates/part/detail.html:89 msgid "Order Part" msgstr "" @@ -2851,7 +2940,7 @@ msgstr "Fiyat Bilgisi" #: company/templates/company/supplier_part.html:184 #: company/templates/company/supplier_part.html:290 -#: part/templates/part/prices.html:271 part/views.py:1619 +#: part/templates/part/prices.html:271 part/views.py:1628 msgid "Add Price Break" msgstr "" @@ -2859,11 +2948,11 @@ msgstr "" msgid "No price break information found" msgstr "" -#: company/templates/company/supplier_part.html:224 part/views.py:1681 +#: company/templates/company/supplier_part.html:224 part/views.py:1690 msgid "Delete Price Break" msgstr "" -#: company/templates/company/supplier_part.html:238 part/views.py:1667 +#: company/templates/company/supplier_part.html:238 part/views.py:1676 msgid "Edit Price Break" msgstr "" @@ -2881,10 +2970,10 @@ msgstr "" #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:150 #: templates/InvenTree/settings/sidebar.html:41 -#: templates/js/translated/bom.js:328 templates/js/translated/part.js:489 -#: templates/js/translated/part.js:624 templates/js/translated/part.js:1118 -#: templates/js/translated/part.js:1279 templates/js/translated/stock.js:927 -#: templates/js/translated/stock.js:1580 templates/navbar.html:28 +#: templates/js/translated/bom.js:340 templates/js/translated/part.js:495 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1125 +#: templates/js/translated/part.js:1286 templates/js/translated/stock.js:935 +#: templates/js/translated/stock.js:1588 templates/navbar.html:28 msgid "Stock" msgstr "Stok" @@ -2907,8 +2996,8 @@ msgstr "Fiyatlandırma" #: stock/templates/stock/location.html:151 #: stock/templates/stock/location.html:163 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2351 -#: templates/stats.html:93 templates/stats.html:102 users/models.py:43 +#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2509 +#: templates/stats.html:105 templates/stats.html:114 users/models.py:43 msgid "Stock Items" msgstr "Stok Kalemleri" @@ -2937,20 +3026,20 @@ msgstr "Şirketler" msgid "New Company" msgstr "Yeni Şirket" -#: company/views.py:129 part/views.py:584 +#: company/views.py:129 part/views.py:593 msgid "Download Image" msgstr "Resmi İndirin" -#: company/views.py:158 part/views.py:616 +#: company/views.py:158 part/views.py:625 msgid "Image size exceeds maximum allowable size for download" msgstr "" -#: company/views.py:165 part/views.py:623 +#: company/views.py:165 part/views.py:632 #, python-brace-format msgid "Invalid response: {code}" msgstr "Geçersiz yanıt: {code}" -#: company/views.py:174 part/views.py:632 +#: company/views.py:174 part/views.py:641 msgid "Supplied URL is not a valid image file" msgstr "Sağlanan URL geçerli bir resim dosyası değil" @@ -3036,282 +3125,282 @@ msgstr "Siparişi tamamlandı olarak işaretle" msgid "Cancel order" msgstr "Siparişi iptal et" -#: order/models.py:122 +#: order/models.py:125 msgid "Order description" msgstr "Sipariş açıklaması" -#: order/models.py:124 +#: order/models.py:127 msgid "Link to external page" msgstr "Harici sayfaya bağlantı" -#: order/models.py:132 +#: order/models.py:135 msgid "Created By" msgstr "Oluşturan" -#: order/models.py:139 +#: order/models.py:142 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:144 +#: order/models.py:147 msgid "Order notes" msgstr "Sipariş notları" -#: order/models.py:211 order/models.py:537 +#: order/models.py:214 order/models.py:542 msgid "Order reference" msgstr "Sipariş referansı" -#: order/models.py:216 order/models.py:552 +#: order/models.py:219 order/models.py:557 msgid "Purchase order status" msgstr "" -#: order/models.py:225 +#: order/models.py:228 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:228 order/templates/order/order_base.html:118 +#: order/models.py:231 order/templates/order/order_base.html:118 #: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:228 +#: order/models.py:231 msgid "Supplier order reference code" msgstr "" -#: order/models.py:235 +#: order/models.py:238 msgid "received by" msgstr "" -#: order/models.py:240 +#: order/models.py:243 msgid "Issue Date" msgstr "" -#: order/models.py:241 +#: order/models.py:244 msgid "Date order was issued" msgstr "" -#: order/models.py:246 +#: order/models.py:249 msgid "Target Delivery Date" msgstr "" -#: order/models.py:247 +#: order/models.py:250 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:253 +#: order/models.py:256 msgid "Date order was completed" msgstr "" -#: order/models.py:282 +#: order/models.py:285 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:411 -msgid "Quantity must be an integer" -msgstr "" - -#: order/models.py:415 +#: order/models.py:420 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:548 +#: order/models.py:553 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer Reference " msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer order reference code" msgstr "" -#: order/models.py:559 +#: order/models.py:564 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:562 order/models.py:1028 +#: order/models.py:567 order/models.py:1048 #: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:569 +#: order/models.py:574 msgid "shipped by" msgstr "" -#: order/models.py:635 +#: order/models.py:640 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:639 +#: order/models.py:644 msgid "Only a pending order can be marked as complete" msgstr "" -#: order/models.py:642 +#: order/models.py:647 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:645 +#: order/models.py:650 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:797 +#: order/models.py:806 msgid "Item quantity" msgstr "" -#: order/models.py:803 +#: order/models.py:812 msgid "Line item reference" msgstr "" -#: order/models.py:805 +#: order/models.py:814 msgid "Line item notes" msgstr "" -#: order/models.py:835 order/models.py:926 order/models.py:1022 -#: templates/js/translated/order.js:1820 +#: order/models.py:842 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:855 order/models.py:946 order/models.py:1042 +#: templates/js/translated/order.js:1820 templates/js/translated/stock.js:2271 msgid "Order" msgstr "" -#: order/models.py:836 order/templates/order/order_base.html:9 +#: order/models.py:856 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:352 -#: templates/js/translated/order.js:801 templates/js/translated/part.js:832 -#: templates/js/translated/stock.js:1725 templates/js/translated/stock.js:2433 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:838 +#: templates/js/translated/stock.js:1733 templates/js/translated/stock.js:2591 msgid "Purchase Order" msgstr "" -#: order/models.py:857 +#: order/models.py:877 msgid "Supplier part" msgstr "" -#: order/models.py:864 order/templates/order/order_base.html:163 +#: order/models.py:884 order/templates/order/order_base.html:163 #: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 -#: templates/js/translated/part.js:904 templates/js/translated/part.js:930 +#: templates/js/translated/part.js:910 templates/js/translated/part.js:937 #: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:865 +#: order/models.py:885 msgid "Number of items received" msgstr "" -#: order/models.py:872 part/templates/part/prices.html:176 stock/models.py:606 +#: order/models.py:892 part/templates/part/prices.html:176 stock/models.py:608 #: stock/serializers.py:170 stock/templates/stock/item_base.html:359 -#: templates/js/translated/stock.js:1779 +#: templates/js/translated/stock.js:1787 msgid "Purchase Price" msgstr "" -#: order/models.py:873 +#: order/models.py:893 msgid "Unit purchase price" msgstr "" -#: order/models.py:881 +#: order/models.py:901 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:936 part/templates/part/part_pricing.html:112 +#: order/models.py:956 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:937 +#: order/models.py:957 msgid "Unit sale price" msgstr "" -#: order/models.py:942 +#: order/models.py:962 msgid "Shipped quantity" msgstr "" -#: order/models.py:1029 +#: order/models.py:1049 msgid "Date of shipment" msgstr "" -#: order/models.py:1036 +#: order/models.py:1056 msgid "Checked By" msgstr "" -#: order/models.py:1037 +#: order/models.py:1057 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1045 +#: order/models.py:1065 msgid "Shipment number" msgstr "" -#: order/models.py:1052 +#: order/models.py:1072 msgid "Shipment notes" msgstr "" -#: order/models.py:1059 +#: order/models.py:1079 msgid "Tracking Number" msgstr "" -#: order/models.py:1060 +#: order/models.py:1080 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1070 +#: order/models.py:1090 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1073 +#: order/models.py:1093 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1149 order/models.py:1151 +#: order/models.py:1171 order/models.py:1173 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1155 +#: order/models.py:1177 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1157 +#: order/models.py:1179 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1160 +#: order/models.py:1182 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Tahsis miktarı stok miktarını aşamaz" -#: order/models.py:1164 +#: order/models.py:1186 msgid "StockItem is over-allocated" msgstr "Stok kalemi fazladan tahsis edilmiş" -#: order/models.py:1170 order/serializers.py:734 +#: order/models.py:1192 order/serializers.py:740 msgid "Quantity must be 1 for serialized stock item" msgstr "Seri numaralı stok kalemi için miktar bir olmalı" -#: order/models.py:1173 +#: order/models.py:1195 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1174 +#: order/models.py:1196 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1182 +#: order/models.py:1204 msgid "Line" msgstr "" -#: order/models.py:1190 order/serializers.py:825 order/serializers.py:953 -#: templates/js/translated/model_renderers.js:251 +#: order/models.py:1212 order/serializers.py:831 order/serializers.py:959 +#: templates/js/translated/model_renderers.js:285 msgid "Shipment" msgstr "" -#: order/models.py:1191 +#: order/models.py:1213 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1203 +#: order/models.py:1225 msgid "Item" msgstr "" -#: order/models.py:1204 +#: order/models.py:1226 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1207 +#: order/models.py:1229 msgid "Enter stock allocation quantity" msgstr "Stok tahsis miktarını girin" @@ -3319,7 +3408,7 @@ msgstr "Stok tahsis miktarını girin" msgid "Purchase price currency" msgstr "" -#: order/serializers.py:211 order/serializers.py:790 +#: order/serializers.py:211 order/serializers.py:796 msgid "Line Item" msgstr "" @@ -3355,39 +3444,39 @@ msgstr "" msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:587 msgid "Sale price currency" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:655 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:699 order/serializers.py:802 +#: order/serializers.py:705 order/serializers.py:808 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:721 +#: order/serializers.py:727 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:815 +#: order/serializers.py:821 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:839 order/serializers.py:964 +#: order/serializers.py:845 order/serializers.py:970 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:842 order/serializers.py:967 +#: order/serializers.py:848 order/serializers.py:973 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:894 +#: order/serializers.py:900 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:910 msgid "The following serial numbers are already allocated" msgstr "" @@ -3441,6 +3530,7 @@ msgstr "" #: order/templates/order/order_base.html:94 #: order/templates/order/sales_order_base.html:89 +#: templates/js/translated/stock.js:2327 msgid "Order Status" msgstr "" @@ -3538,7 +3628,7 @@ msgstr "" #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/build.js:300 templates/js/translated/build.js:1311 #: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 -#: templates/js/translated/stock.js:593 templates/js/translated/stock.js:761 +#: templates/js/translated/stock.js:601 templates/js/translated/stock.js:769 msgid "Remove row" msgstr "" @@ -3729,7 +3819,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:48 -#: templates/js/translated/bom.js:720 templates/js/translated/build.js:1243 +#: templates/js/translated/bom.js:732 templates/js/translated/build.js:1243 msgid "Actions" msgstr "İşlemler" @@ -3832,447 +3922,448 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:125 part/models.py:81 part/models.py:847 +#: part/bom.py:125 part/models.py:83 part/models.py:849 #: part/templates/part/category.html:108 part/templates/part/part_base.html:338 msgid "Default Location" msgstr "Varsayılan Konum" -#: part/bom.py:126 part/templates/part/part_base.html:185 +#: part/bom.py:126 templates/email/low_stock_notification.html:17 +msgid "Total Stock" +msgstr "" + +#: part/bom.py:127 part/templates/part/part_base.html:185 msgid "Available Stock" msgstr "" -#: part/forms.py:85 +#: part/bom.py:128 part/templates/part/part_base.html:203 +#: templates/js/translated/part.js:1301 +msgid "On Order" +msgstr "" + +#: part/forms.py:84 msgid "Select part category" msgstr "" -#: part/forms.py:122 +#: part/forms.py:121 msgid "Add parameter template to same level categories" msgstr "Parametre şablonunu aynı seviyedeki kategorilere ekle" -#: part/forms.py:126 +#: part/forms.py:125 msgid "Add parameter template to all categories" msgstr "Parametre şablonunu tüm kategorilere ekle" -#: part/forms.py:146 +#: part/forms.py:145 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 +#: part/models.py:84 msgid "Default location for parts in this category" msgstr "Bu kategori içindeki parçalar için varsayılan konum" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:95 part/models.py:2526 part/templates/part/category.html:15 +#: part/models.py:97 part/models.py:2533 part/templates/part/category.html:15 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:96 part/templates/part/category.html:128 -#: templates/InvenTree/search.html:95 templates/stats.html:84 +#: part/models.py:98 part/templates/part/category.html:128 +#: templates/InvenTree/search.html:95 templates/stats.html:96 #: users/models.py:40 msgid "Part Categories" msgstr "Parça Kategorileri" -#: part/models.py:358 part/templates/part/cat_link.html:3 +#: part/models.py:360 part/templates/part/cat_link.html:3 #: part/templates/part/category.html:17 part/templates/part/category.html:133 #: part/templates/part/category.html:153 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82 #: templates/InvenTree/settings/sidebar.html:37 -#: templates/js/translated/part.js:1656 templates/navbar.html:21 -#: templates/stats.html:80 templates/stats.html:89 users/models.py:41 +#: templates/js/translated/part.js:1663 templates/navbar.html:21 +#: templates/stats.html:92 templates/stats.html:101 users/models.py:41 msgid "Parts" msgstr "Parçalar" -#: part/models.py:450 +#: part/models.py:452 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:500 part/models.py:512 +#: part/models.py:502 part/models.py:514 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:642 +#: part/models.py:644 msgid "Next available serial numbers are" msgstr "Sonraki kullanılabilir seri numaraları" -#: part/models.py:646 +#: part/models.py:648 msgid "Next available serial number is" msgstr "Sonraki müsait seri numarası" -#: part/models.py:651 +#: part/models.py:653 msgid "Most recent serial number is" msgstr "En son seri numarası" -#: part/models.py:746 +#: part/models.py:748 msgid "Duplicate IPN not allowed in part settings" msgstr "Yinelenen DPN'ye parça ayarlarında izin verilmiyor" -#: part/models.py:771 +#: part/models.py:773 msgid "Part name" msgstr "Parça adı" -#: part/models.py:778 +#: part/models.py:780 msgid "Is Template" msgstr "Şablon Mu" -#: part/models.py:779 +#: part/models.py:781 msgid "Is this part a template part?" msgstr "Bu parça bir şablon parçası mı?" -#: part/models.py:789 +#: part/models.py:791 msgid "Is this part a variant of another part?" msgstr "Bu parça başka bir parçanın çeşidi mi?" -#: part/models.py:790 +#: part/models.py:792 msgid "Variant Of" msgstr "Çeşidi" -#: part/models.py:796 +#: part/models.py:798 msgid "Part description" msgstr "Parça açıklaması" -#: part/models.py:801 part/templates/part/category.html:86 +#: part/models.py:803 part/templates/part/category.html:86 #: part/templates/part/part_base.html:302 msgid "Keywords" msgstr "Anahtar kelimeler" -#: part/models.py:802 +#: part/models.py:804 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:809 part/models.py:2276 part/models.py:2525 +#: part/models.py:811 part/models.py:2283 part/models.py:2532 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:183 -#: templates/js/translated/part.js:1261 +#: templates/InvenTree/settings/settings.html:186 +#: templates/js/translated/part.js:1268 msgid "Category" msgstr "" -#: part/models.py:810 +#: part/models.py:812 msgid "Part category" msgstr "" -#: part/models.py:815 part/templates/part/part_base.html:274 -#: templates/js/translated/part.js:612 templates/js/translated/part.js:1214 -#: templates/js/translated/stock.js:1552 +#: part/models.py:817 part/templates/part/part_base.html:274 +#: templates/js/translated/part.js:618 templates/js/translated/part.js:1221 +#: templates/js/translated/stock.js:1560 msgid "IPN" msgstr "DPN" -#: part/models.py:816 +#: part/models.py:818 msgid "Internal Part Number" msgstr "" -#: part/models.py:822 +#: part/models.py:824 msgid "Part revision or version number" msgstr "Parça revizyon veya versiyon numarası" -#: part/models.py:823 part/templates/part/part_base.html:281 -#: report/models.py:200 templates/js/translated/part.js:616 +#: part/models.py:825 part/templates/part/part_base.html:281 +#: report/models.py:200 templates/js/translated/part.js:622 msgid "Revision" msgstr "Revizyon" -#: part/models.py:845 +#: part/models.py:847 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:892 part/templates/part/part_base.html:347 +#: part/models.py:894 part/templates/part/part_base.html:347 msgid "Default Supplier" msgstr "Varsayılan Tedarikçi" -#: part/models.py:893 +#: part/models.py:895 msgid "Default supplier part" msgstr "Varsayılan tedarikçi parçası" -#: part/models.py:900 +#: part/models.py:902 msgid "Default Expiry" msgstr "" -#: part/models.py:901 +#: part/models.py:903 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:906 part/templates/part/part_base.html:196 +#: part/models.py:908 part/templates/part/part_base.html:196 msgid "Minimum Stock" msgstr "Minimum Stok" -#: part/models.py:907 +#: part/models.py:909 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:914 +#: part/models.py:916 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:920 +#: part/models.py:922 msgid "Can this part be built from other parts?" msgstr "Bu parça diğer parçalardan yapılabilir mi?" -#: part/models.py:926 +#: part/models.py:928 msgid "Can this part be used to build other parts?" msgstr "Bu parça diğer parçaların yapımında kullanılabilir mi?" -#: part/models.py:932 +#: part/models.py:934 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:937 +#: part/models.py:939 msgid "Can this part be purchased from external suppliers?" msgstr "Bu parça dış tedarikçilerden satın alınabilir mi?" -#: part/models.py:942 +#: part/models.py:944 msgid "Can this part be sold to customers?" msgstr "Bu parça müşterilere satılabilir mi?" -#: part/models.py:946 plugin/models.py:46 -#: templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:295 -#: templates/js/translated/table_filters.js:417 -msgid "Active" -msgstr "Aktif" - -#: part/models.py:947 +#: part/models.py:949 msgid "Is this part active?" msgstr "Bu parça aktif mi?" -#: part/models.py:952 +#: part/models.py:954 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:957 +#: part/models.py:959 msgid "Part notes - supports Markdown formatting" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "BOM checksum" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:963 +#: part/models.py:965 msgid "BOM checked by" msgstr "" -#: part/models.py:965 +#: part/models.py:967 msgid "BOM checked date" msgstr "" -#: part/models.py:969 +#: part/models.py:971 msgid "Creation User" msgstr "Oluşturan Kullanıcı" -#: part/models.py:1781 +#: part/models.py:1783 msgid "Sell multiple" msgstr "" -#: part/models.py:2326 +#: part/models.py:2333 msgid "Test templates can only be created for trackable parts" msgstr "Test şablonları sadece takip edilebilir paçalar için oluşturulabilir" -#: part/models.py:2343 +#: part/models.py:2350 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2363 templates/js/translated/part.js:1707 -#: templates/js/translated/stock.js:1276 +#: part/models.py:2370 templates/js/translated/part.js:1714 +#: templates/js/translated/stock.js:1284 msgid "Test Name" msgstr "Test Adı" -#: part/models.py:2364 +#: part/models.py:2371 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2369 +#: part/models.py:2376 msgid "Test Description" msgstr "Test Açıklaması" -#: part/models.py:2370 +#: part/models.py:2377 msgid "Enter description for this test" msgstr "" -#: part/models.py:2375 templates/js/translated/part.js:1716 +#: part/models.py:2382 templates/js/translated/part.js:1723 #: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "Gerekli" -#: part/models.py:2376 +#: part/models.py:2383 msgid "Is this test required to pass?" msgstr "Testi geçmesi için bu gerekli mi?" -#: part/models.py:2381 templates/js/translated/part.js:1724 +#: part/models.py:2388 templates/js/translated/part.js:1731 msgid "Requires Value" msgstr "" -#: part/models.py:2382 +#: part/models.py:2389 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2387 templates/js/translated/part.js:1731 +#: part/models.py:2394 templates/js/translated/part.js:1738 msgid "Requires Attachment" msgstr "" -#: part/models.py:2388 +#: part/models.py:2395 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2399 +#: part/models.py:2406 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2435 +#: part/models.py:2442 msgid "Parameter template name must be unique" msgstr "Parametre şablon adı benzersiz olmalıdır" -#: part/models.py:2443 +#: part/models.py:2450 msgid "Parameter Name" msgstr "" -#: part/models.py:2450 +#: part/models.py:2457 msgid "Parameter Units" msgstr "" -#: part/models.py:2480 +#: part/models.py:2487 msgid "Parent Part" msgstr "" -#: part/models.py:2482 part/models.py:2531 part/models.py:2532 -#: templates/InvenTree/settings/settings.html:178 +#: part/models.py:2489 part/models.py:2538 part/models.py:2539 +#: templates/InvenTree/settings/settings.html:181 msgid "Parameter Template" msgstr "Parametre Şablonu" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Data" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Parameter Value" msgstr "" -#: part/models.py:2536 templates/InvenTree/settings/settings.html:187 +#: part/models.py:2543 templates/InvenTree/settings/settings.html:190 msgid "Default Value" msgstr "" -#: part/models.py:2537 +#: part/models.py:2544 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2614 +#: part/models.py:2621 msgid "Select parent part" msgstr "" -#: part/models.py:2622 +#: part/models.py:2629 msgid "Sub part" msgstr "" -#: part/models.py:2623 +#: part/models.py:2630 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2629 +#: part/models.py:2636 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2631 templates/js/translated/bom.js:566 -#: templates/js/translated/bom.js:640 +#: part/models.py:2638 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:652 #: templates/js/translated/table_filters.js:92 msgid "Optional" msgstr "" -#: part/models.py:2631 +#: part/models.py:2638 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2634 +#: part/models.py:2641 msgid "Overage" msgstr "" -#: part/models.py:2635 +#: part/models.py:2642 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2638 +#: part/models.py:2645 msgid "BOM item reference" msgstr "" -#: part/models.py:2641 +#: part/models.py:2648 msgid "BOM item notes" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "Checksum" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "BOM line checksum" msgstr "" -#: part/models.py:2647 templates/js/translated/bom.js:657 +#: part/models.py:2654 templates/js/translated/bom.js:669 #: templates/js/translated/table_filters.js:68 #: templates/js/translated/table_filters.js:88 msgid "Inherited" msgstr "" -#: part/models.py:2648 +#: part/models.py:2655 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Bu malzeme listesi, çeşit parçalar listesini kalıtsalıdır" -#: part/models.py:2653 templates/js/translated/bom.js:649 +#: part/models.py:2660 templates/js/translated/bom.js:661 msgid "Allow Variants" msgstr "Çeşide İzin Ver" -#: part/models.py:2654 +#: part/models.py:2661 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Çeşit parçaların stok kalemleri bu malzeme listesinde kullanılabilir" -#: part/models.py:2739 stock/models.py:355 +#: part/models.py:2746 stock/models.py:357 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2748 part/models.py:2750 +#: part/models.py:2755 part/models.py:2757 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2879 +#: part/models.py:2886 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2901 +#: part/models.py:2908 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2913 +#: part/models.py:2920 msgid "Parent BOM item" msgstr "" -#: part/models.py:2921 +#: part/models.py:2928 msgid "Substitute part" msgstr "" -#: part/models.py:2932 +#: part/models.py:2939 msgid "Part 1" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Part 2" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Select Related Part" msgstr "" -#: part/models.py:2968 +#: part/models.py:2975 msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique" msgstr "" @@ -4327,7 +4418,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:253 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:270 msgid "BOM actions" msgstr "" @@ -4499,7 +4590,7 @@ msgstr "" msgid "Import Parts" msgstr "" -#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:375 +#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:348 msgid "Duplicate Part" msgstr "" @@ -4533,145 +4624,149 @@ msgid "Showing stock for all variants of %(full_name)s" msgstr "" #: part/templates/part/detail.html:43 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/detail.html:60 msgid "Part Test Templates" msgstr "Parça Test Şablonları" -#: part/templates/part/detail.html:48 +#: part/templates/part/detail.html:65 msgid "Add Test Template" msgstr "Test Şablonu Ekle" -#: part/templates/part/detail.html:105 +#: part/templates/part/detail.html:122 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:142 +#: part/templates/part/detail.html:159 msgid "Part Variants" msgstr "Parça Çeşitleri" -#: part/templates/part/detail.html:146 +#: part/templates/part/detail.html:163 msgid "Create new variant" msgstr "Yeni çeşit oluştur" -#: part/templates/part/detail.html:147 +#: part/templates/part/detail.html:164 msgid "New Variant" msgstr "Yeni Çeşit" -#: part/templates/part/detail.html:174 +#: part/templates/part/detail.html:191 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:45 +#: part/templates/part/detail.html:228 part/templates/part/part_sidebar.html:49 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:215 part/templates/part/detail.html:216 +#: part/templates/part/detail.html:232 part/templates/part/detail.html:233 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:253 part/templates/part/part_sidebar.html:17 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:241 +#: part/templates/part/detail.html:258 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:245 templates/js/translated/bom.js:70 +#: part/templates/part/detail.html:262 templates/js/translated/bom.js:70 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:247 +#: part/templates/part/detail.html:264 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:257 +#: part/templates/part/detail.html:274 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:259 templates/js/translated/part.js:272 +#: part/templates/part/detail.html:276 templates/js/translated/part.js:272 msgid "Copy BOM" msgstr "" -#: part/templates/part/detail.html:261 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:283 msgid "New BOM Item" msgstr "" -#: part/templates/part/detail.html:267 +#: part/templates/part/detail.html:284 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:280 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:314 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:322 +#: part/templates/part/detail.html:339 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:332 +#: part/templates/part/detail.html:349 msgid "Part Suppliers" msgstr "Parça Tedarikçileri" -#: part/templates/part/detail.html:360 +#: part/templates/part/detail.html:377 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:393 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:558 +#: part/templates/part/detail.html:575 msgid "Delete selected BOM items?" msgstr "" -#: part/templates/part/detail.html:559 +#: part/templates/part/detail.html:576 msgid "All selected BOM items will be deleted" msgstr "" -#: part/templates/part/detail.html:608 +#: part/templates/part/detail.html:625 msgid "Create BOM Item" msgstr "" -#: part/templates/part/detail.html:652 +#: part/templates/part/detail.html:682 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:660 +#: part/templates/part/detail.html:690 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:755 +#: part/templates/part/detail.html:785 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:812 +#: part/templates/part/detail.html:842 msgid "Edit Part Notes" msgstr "" -#: part/templates/part/detail.html:925 +#: part/templates/part/detail.html:955 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:937 +#: part/templates/part/detail.html:967 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:949 +#: part/templates/part/detail.html:979 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1038 +#: part/templates/part/detail.html:1068 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -4786,7 +4881,7 @@ msgstr "" #: templates/js/translated/company.js:508 #: templates/js/translated/company.js:765 #: templates/js/translated/model_renderers.js:175 -#: templates/js/translated/part.js:527 templates/js/translated/part.js:604 +#: templates/js/translated/part.js:533 templates/js/translated/part.js:610 msgid "Inactive" msgstr "Pasif" @@ -4805,10 +4900,6 @@ msgstr "Bu parça %(link)s parçasının bir çeşididir" msgid "In Stock" msgstr "" -#: part/templates/part/part_base.html:203 templates/js/translated/part.js:1294 -msgid "On Order" -msgstr "" - #: part/templates/part/part_base.html:210 templates/InvenTree/index.html:178 msgid "Required for Build Orders" msgstr "Yapım İşi Emirleri için Gerekli" @@ -4821,12 +4912,12 @@ msgstr "Satış Emirleri için Gerekli" msgid "Allocated to Orders" msgstr "" -#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:678 +#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:690 msgid "Can Build" msgstr "" -#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1125 -#: templates/js/translated/part.js:1298 +#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1132 +#: templates/js/translated/part.js:1305 msgid "Building" msgstr "" @@ -4878,7 +4969,7 @@ msgid "Total Cost" msgstr "Toplam Maliyet" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:40 -#: templates/js/translated/bom.js:632 +#: templates/js/translated/bom.js:644 msgid "No supplier pricing available" msgstr "" @@ -4920,7 +5011,12 @@ msgstr "" msgid "Used In" msgstr "" -#: part/templates/part/part_sidebar.html:41 +#: part/templates/part/part_sidebar.html:31 +#: stock/templates/stock/stock_sidebar.html:8 +msgid "Allocations" +msgstr "" + +#: part/templates/part/part_sidebar.html:45 msgid "Test Templates" msgstr "" @@ -4993,7 +5089,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:155 templates/js/translated/bom.js:626 +#: part/templates/part/prices.html:155 templates/js/translated/bom.js:638 msgid "Supplier Cost" msgstr "" @@ -5015,7 +5111,7 @@ msgstr "" msgid "Internal Cost" msgstr "" -#: part/templates/part/prices.html:215 part/views.py:1690 +#: part/templates/part/prices.html:215 part/views.py:1699 msgid "Add Internal Price Break" msgstr "" @@ -5035,9 +5131,9 @@ msgstr "" msgid "Set category for the following parts" msgstr "Aşağıdaki parçalara kategori ayarla" -#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:588 -#: templates/js/translated/part.js:491 templates/js/translated/part.js:1115 -#: templates/js/translated/part.js:1302 +#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:600 +#: templates/js/translated/part.js:497 templates/js/translated/part.js:1122 +#: templates/js/translated/part.js:1309 msgid "No Stock" msgstr "Stok Yok" @@ -5054,116 +5150,116 @@ msgstr "Yeni parça çeşidi oluştur" msgid "Create a new variant of template '%(full_name)s'." msgstr "" -#: part/templatetags/inventree_extras.py:116 +#: part/templatetags/inventree_extras.py:125 msgid "Unknown database" msgstr "" -#: part/views.py:92 +#: part/views.py:93 msgid "Set Part Category" msgstr "" -#: part/views.py:142 +#: part/views.py:143 #, python-brace-format msgid "Set category for {n} parts" msgstr "" -#: part/views.py:214 +#: part/views.py:215 msgid "Match References" msgstr "" -#: part/views.py:502 +#: part/views.py:511 msgid "None" msgstr "Hiçbiri" -#: part/views.py:561 +#: part/views.py:570 msgid "Part QR Code" msgstr "" -#: part/views.py:663 +#: part/views.py:672 msgid "Select Part Image" msgstr "" -#: part/views.py:689 +#: part/views.py:698 msgid "Updated part image" msgstr "" -#: part/views.py:692 +#: part/views.py:701 msgid "Part image not found" msgstr "" -#: part/views.py:766 +#: part/views.py:775 msgid "Match Parts" msgstr "" -#: part/views.py:1101 +#: part/views.py:1110 msgid "Export Bill of Materials" msgstr "" -#: part/views.py:1150 +#: part/views.py:1159 msgid "Confirm Part Deletion" msgstr "" -#: part/views.py:1157 +#: part/views.py:1166 msgid "Part was deleted" msgstr "" -#: part/views.py:1166 +#: part/views.py:1175 msgid "Part Pricing" msgstr "" -#: part/views.py:1315 +#: part/views.py:1324 msgid "Create Part Parameter Template" msgstr "Parça Parametre Şablonu Oluştur" -#: part/views.py:1325 +#: part/views.py:1334 msgid "Edit Part Parameter Template" msgstr "Parça Parametre Şablonu Düzenle" -#: part/views.py:1332 +#: part/views.py:1341 msgid "Delete Part Parameter Template" msgstr "Parça Parametre Şablonu Sil" -#: part/views.py:1391 templates/js/translated/part.js:315 +#: part/views.py:1400 templates/js/translated/part.js:315 msgid "Edit Part Category" msgstr "" -#: part/views.py:1429 +#: part/views.py:1438 msgid "Delete Part Category" msgstr "" -#: part/views.py:1435 +#: part/views.py:1444 msgid "Part category was deleted" msgstr "" -#: part/views.py:1444 +#: part/views.py:1453 msgid "Create Category Parameter Template" msgstr "Kategori Parametre Şablonu Oluştur" -#: part/views.py:1545 +#: part/views.py:1554 msgid "Edit Category Parameter Template" msgstr "Kategori Parametre Şablonu Düzenle" -#: part/views.py:1601 +#: part/views.py:1610 msgid "Delete Category Parameter Template" msgstr "Kategori Parametre Şablonu Sil" -#: part/views.py:1623 +#: part/views.py:1632 msgid "Added new price break" msgstr "" -#: part/views.py:1699 +#: part/views.py:1708 msgid "Edit Internal Price Break" msgstr "" -#: part/views.py:1707 +#: part/views.py:1716 msgid "Delete Internal Price Break" msgstr "" -#: plugin/integration.py:124 +#: plugin/integration.py:138 msgid "No author found" msgstr "" -#: plugin/integration.py:136 +#: plugin/integration.py:152 msgid "No date found" msgstr "" @@ -5191,7 +5287,7 @@ msgstr "" msgid "Is the plugin active" msgstr "" -#: plugin/models.py:195 +#: plugin/models.py:199 msgid "Plugin" msgstr "" @@ -5357,12 +5453,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:517 stock/templates/stock/item_base.html:156 +#: stock/models.py:519 stock/templates/stock/item_base.html:156 #: templates/js/translated/build.js:293 templates/js/translated/build.js:697 #: templates/js/translated/build.js:1073 #: templates/js/translated/model_renderers.js:95 #: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 -#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:415 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:423 msgid "Serial Number" msgstr "Seri Numara" @@ -5371,19 +5467,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1948 +#: stock/models.py:1976 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1954 +#: stock/models.py:1982 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin.html:50 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2367 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2525 msgid "Date" msgstr "" @@ -5396,23 +5492,27 @@ msgid "Fail" msgstr "" #: report/templates/report/inventree_test_report_base.html:123 -#: stock/templates/stock/stock_sidebar.html:12 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:578 templates/js/translated/stock.js:748 -#: templates/js/translated/stock.js:2627 +#: templates/js/translated/stock.js:586 templates/js/translated/stock.js:756 +#: templates/js/translated/stock.js:2785 msgid "Serial" msgstr "Seri No" -#: stock/api.py:478 +#: stock/api.py:476 msgid "Quantity is required" msgstr "" -#: stock/forms.py:77 stock/forms.py:251 stock/models.py:574 +#: stock/api.py:483 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:576 #: stock/templates/stock/item_base.html:193 -#: templates/js/translated/stock.js:1701 +#: templates/js/translated/stock.js:1709 msgid "Expiry Date" msgstr "" @@ -5460,228 +5560,228 @@ msgstr "" msgid "Confirm removal of installed stock items" msgstr "Kurulu stok kalemlerinin kaldırılmasını onayla" -#: stock/models.py:60 stock/models.py:611 +#: stock/models.py:62 stock/models.py:613 #: stock/templates/stock/item_base.html:416 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:612 +#: stock/models.py:63 stock/models.py:614 msgid "Select Owner" msgstr "" -#: stock/models.py:336 +#: stock/models.py:338 msgid "StockItem with this serial number already exists" msgstr "Bu seri numarasına sahip stok kalemi zaten var" -#: stock/models.py:372 +#: stock/models.py:374 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:382 stock/models.py:391 +#: stock/models.py:384 stock/models.py:393 msgid "Quantity must be 1 for item with a serial number" msgstr "Seri numarası olan ögenin miktarı bir olmalı" -#: stock/models.py:383 +#: stock/models.py:385 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Miktar birden büyük ise seri numarası ayarlanamaz" -#: stock/models.py:405 +#: stock/models.py:407 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:411 +#: stock/models.py:413 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:418 +#: stock/models.py:420 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:461 +#: stock/models.py:463 msgid "Parent Stock Item" msgstr "Üst Stok Kalemi" -#: stock/models.py:470 +#: stock/models.py:472 msgid "Base part" msgstr "" -#: stock/models.py:478 +#: stock/models.py:480 msgid "Select a matching supplier part for this stock item" msgstr "Bu stok kalemi için tedarikçi parçası seçin" -#: stock/models.py:484 stock/templates/stock/location.html:16 +#: stock/models.py:486 stock/templates/stock/location.html:16 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Stok Konumu" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:494 +#: stock/models.py:496 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:500 stock/templates/stock/item_base.html:298 +#: stock/models.py:502 stock/templates/stock/item_base.html:298 msgid "Installed In" msgstr "" -#: stock/models.py:503 +#: stock/models.py:505 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:519 +#: stock/models.py:521 msgid "Serial number for this item" msgstr "Bu öge için seri numarası" -#: stock/models.py:533 +#: stock/models.py:535 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:537 +#: stock/models.py:539 msgid "Stock Quantity" msgstr "" -#: stock/models.py:546 +#: stock/models.py:548 msgid "Source Build" msgstr "" -#: stock/models.py:548 +#: stock/models.py:550 msgid "Build for this stock item" msgstr "" -#: stock/models.py:559 +#: stock/models.py:561 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:562 +#: stock/models.py:564 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:568 +#: stock/models.py:570 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:575 +#: stock/models.py:577 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete on deplete" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:598 stock/templates/stock/item.html:111 +#: stock/models.py:600 stock/templates/stock/item.html:128 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:607 +#: stock/models.py:609 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1096 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1074 +#: stock/models.py:1102 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1080 +#: stock/models.py:1108 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1083 +#: stock/models.py:1111 msgid "Serial numbers must be a list of integers" msgstr "Seri numaraları tam sayı listesi olmalı" -#: stock/models.py:1086 +#: stock/models.py:1114 msgid "Quantity does not match serial numbers" msgstr "Miktar seri numaları ile eşleşmiyor" -#: stock/models.py:1093 +#: stock/models.py:1121 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "Seri numaraları zaten mevcut: {exists}" -#: stock/models.py:1164 +#: stock/models.py:1192 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1195 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1170 +#: stock/models.py:1198 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1173 +#: stock/models.py:1201 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1176 +#: stock/models.py:1204 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1179 +#: stock/models.py:1207 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1186 stock/serializers.py:774 +#: stock/models.py:1214 stock/serializers.py:775 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1190 +#: stock/models.py:1218 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1222 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1198 +#: stock/models.py:1226 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1369 +#: stock/models.py:1397 msgid "StockItem cannot be moved as it is not in stock" msgstr "Stok kalemi stokta olmadığı için taşınamaz" -#: stock/models.py:1868 +#: stock/models.py:1896 msgid "Entry notes" msgstr "" -#: stock/models.py:1925 +#: stock/models.py:1953 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1931 +#: stock/models.py:1959 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1949 +#: stock/models.py:1977 msgid "Test name" msgstr "" -#: stock/models.py:1955 templates/js/translated/table_filters.js:271 +#: stock/models.py:1983 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1961 +#: stock/models.py:1989 msgid "Test output value" msgstr "" -#: stock/models.py:1968 +#: stock/models.py:1996 msgid "Test result attachment" msgstr "" -#: stock/models.py:1974 +#: stock/models.py:2002 msgid "Test notes" msgstr "" @@ -5706,7 +5806,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:326 stock/serializers.py:731 stock/serializers.py:972 +#: stock/serializers.py:326 stock/serializers.py:732 stock/serializers.py:973 msgid "Destination stock location" msgstr "" @@ -5718,63 +5818,63 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:589 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:592 +#: stock/serializers.py:593 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:597 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:626 +#: stock/serializers.py:627 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:632 +#: stock/serializers.py:633 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:640 +#: stock/serializers.py:641 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:650 stock/serializers.py:880 +#: stock/serializers.py:651 stock/serializers.py:881 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:738 +#: stock/serializers.py:739 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:743 +#: stock/serializers.py:744 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:744 +#: stock/serializers.py:745 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:749 +#: stock/serializers.py:750 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:750 +#: stock/serializers.py:751 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:760 +#: stock/serializers.py:761 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:842 +#: stock/serializers.py:843 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:870 +#: stock/serializers.py:871 msgid "Stock transaction notes" msgstr "" @@ -5787,47 +5887,51 @@ msgid "New Entry" msgstr "" #: stock/templates/stock/item.html:48 -msgid "Child Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:55 -msgid "This stock item does not have any child items" +msgid "Stock Item Allocations" msgstr "" #: stock/templates/stock/item.html:64 -#: stock/templates/stock/stock_sidebar.html:8 -msgid "Test Data" -msgstr "" - -#: stock/templates/stock/item.html:68 stock/templates/stock/item_base.html:57 -msgid "Test Report" +msgid "Child Stock Items" msgstr "" #: stock/templates/stock/item.html:72 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item.html:81 +#: stock/templates/stock/stock_sidebar.html:12 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:57 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item.html:89 msgid "Delete Test Data" msgstr "" -#: stock/templates/stock/item.html:76 +#: stock/templates/stock/item.html:93 msgid "Add Test Data" msgstr "" -#: stock/templates/stock/item.html:133 +#: stock/templates/stock/item.html:150 msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:482 +#: stock/templates/stock/item.html:154 stock/views.py:482 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:279 stock/templates/stock/item.html:304 +#: stock/templates/stock/item.html:309 stock/templates/stock/item.html:334 msgid "Add Test Result" msgstr "" -#: stock/templates/stock/item.html:324 +#: stock/templates/stock/item.html:354 msgid "Edit Test Result" msgstr "" -#: stock/templates/stock/item.html:338 +#: stock/templates/stock/item.html:368 msgid "Delete Test Result" msgstr "" @@ -5952,7 +6056,7 @@ msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:206 -#: templates/js/translated/stock.js:1714 +#: templates/js/translated/stock.js:1722 msgid "Last Updated" msgstr "" @@ -6111,7 +6215,7 @@ msgid "Sublocations" msgstr "Alt konumlar" #: stock/templates/stock/location.html:146 templates/InvenTree/search.html:164 -#: templates/stats.html:97 users/models.py:42 +#: templates/stats.html:109 users/models.py:42 msgid "Stock Locations" msgstr "Stok Konumları" @@ -6135,7 +6239,7 @@ msgstr "" msgid "Stock Tracking" msgstr "" -#: stock/templates/stock/stock_sidebar.html:16 +#: stock/templates/stock/stock_sidebar.html:20 msgid "Child Items" msgstr "" @@ -6164,7 +6268,7 @@ msgstr "Bu işlem kolayca geri alınamaz" msgid "Are you sure you want to delete this stock tracking entry?" msgstr "" -#: stock/views.py:162 +#: stock/views.py:162 templates/js/translated/stock.js:139 msgid "Edit Stock Location" msgstr "Stok konumunu düzenle" @@ -6204,7 +6308,7 @@ msgstr "" msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:727 templates/js/translated/stock.js:1066 +#: stock/views.py:727 templates/js/translated/stock.js:1074 msgid "Confirm stock adjustment" msgstr "Stok ayarlamasını onayla" @@ -6212,7 +6316,7 @@ msgstr "Stok ayarlamasını onayla" msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:324 +#: stock/views.py:760 templates/js/translated/stock.js:332 msgid "Edit Stock Item" msgstr "" @@ -6224,7 +6328,7 @@ msgstr "Yeni Stok konumu oluştur" msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1153 templates/js/translated/stock.js:304 +#: stock/views.py:1153 templates/js/translated/stock.js:312 msgid "Duplicate Stock Item" msgstr "" @@ -6268,6 +6372,18 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/500.html:5 templates/500.html:11 +msgid "Internal Server Error" +msgstr "" + +#: templates/500.html:14 +msgid "The InvenTree server raised an internal error" +msgstr "" + +#: templates/500.html:15 +msgid "Refer to the error log in the admin interface for further details" +msgstr "" + #: templates/503.html:10 templates/503.html:35 msgid "Site is in Maintenance" msgstr "" @@ -6390,7 +6506,7 @@ msgid "Signup" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:113 msgid "Settings" msgstr "" @@ -6431,43 +6547,43 @@ msgstr "" msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:32 +#: templates/InvenTree/settings/plugin.html:33 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:37 +#: templates/InvenTree/settings/plugin.html:38 #: templates/js/translated/plugin.js:15 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: templates/InvenTree/settings/plugin.html:47 templates/navbar.html:111 #: users/models.py:39 msgid "Admin" msgstr "" -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:49 #: templates/InvenTree/settings/plugin_settings.html:28 msgid "Author" msgstr "" -#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin_settings.html:43 msgid "Version" msgstr "" -#: templates/InvenTree/settings/plugin.html:91 +#: templates/InvenTree/settings/plugin.html:92 msgid "Inactive plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:114 +#: templates/InvenTree/settings/plugin.html:115 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:123 +#: templates/InvenTree/settings/plugin.html:124 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:125 +#: templates/InvenTree/settings/plugin.html:126 msgid "Message" msgstr "" @@ -6555,37 +6671,37 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:75 +#: templates/InvenTree/settings/settings.html:78 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:77 +#: templates/InvenTree/settings/settings.html:80 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:79 +#: templates/InvenTree/settings/settings.html:82 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:168 +#: templates/InvenTree/settings/settings.html:171 msgid "No category parameter templates found" msgstr "Kategori parametre şablonu bulunamadı" -#: templates/InvenTree/settings/settings.html:190 -#: templates/InvenTree/settings/settings.html:289 +#: templates/InvenTree/settings/settings.html:193 +#: templates/InvenTree/settings/settings.html:292 msgid "Edit Template" msgstr "Şablonu Düzenle" -#: templates/InvenTree/settings/settings.html:191 -#: templates/InvenTree/settings/settings.html:290 +#: templates/InvenTree/settings/settings.html:194 +#: templates/InvenTree/settings/settings.html:293 msgid "Delete Template" msgstr "Şablonu Sil" -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:272 msgid "No part parameter templates found" msgstr "Parça parametre şablonu bulunamadı" -#: templates/InvenTree/settings/settings.html:273 +#: templates/InvenTree/settings/settings.html:276 msgid "ID" msgstr "" @@ -6763,124 +6879,105 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:219 +#: templates/InvenTree/settings/user.html:220 +msgid "Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:226 +msgid "Log out active sessions (except this one)" +msgstr "" + +#: templates/InvenTree/settings/user.html:227 +msgid "Log Out Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:236 +msgid "unknown on unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:237 +msgid "unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:241 +msgid "IP Address" +msgstr "" + +#: templates/InvenTree/settings/user.html:242 +msgid "Device" +msgstr "" + +#: templates/InvenTree/settings/user.html:243 +msgid "Last Activity" +msgstr "" + +#: templates/InvenTree/settings/user.html:252 +#, python-format +msgid "%(time)s ago (this session)" +msgstr "" + +#: templates/InvenTree/settings/user.html:254 +#, python-format +msgid "%(time)s ago" +msgstr "" + +#: templates/InvenTree/settings/user.html:266 +msgid "Do you really want to remove the selected email address?" +msgstr "" + #: templates/InvenTree/settings/user_display.html:25 msgid "Theme Settings" msgstr "Tema Ayarları" -#: templates/InvenTree/settings/user.html:227 #: templates/InvenTree/settings/user_display.html:35 msgid "Select theme" msgstr "" -#: templates/InvenTree/settings/user.html:237 #: templates/InvenTree/settings/user_display.html:46 msgid "Set Theme" msgstr "Tema Seç" -#: templates/InvenTree/settings/user.html:246 #: templates/InvenTree/settings/user_display.html:54 msgid "Language Settings" msgstr "Dil Ayarları" -#: templates/InvenTree/settings/user.html:254 #: templates/InvenTree/settings/user_display.html:63 msgid "Select language" msgstr "" -#: templates/InvenTree/settings/user.html:270 #: templates/InvenTree/settings/user_display.html:79 #, python-format msgid "%(lang_translated)s%% translated" msgstr "" -#: templates/InvenTree/settings/user.html:272 #: templates/InvenTree/settings/user_display.html:81 msgid "No translations available" msgstr "" -#: templates/InvenTree/settings/user.html:279 #: templates/InvenTree/settings/user_display.html:88 msgid "Set Language" msgstr "Dili Ayarla" -#: templates/InvenTree/settings/user.html:281 #: templates/InvenTree/settings/user_display.html:91 msgid "Some languages are not complete" msgstr "" -#: templates/InvenTree/settings/user.html:283 #: templates/InvenTree/settings/user_display.html:93 msgid "Show only sufficent" msgstr "" -#: templates/InvenTree/settings/user.html:285 +#: templates/InvenTree/settings/user_display.html:95 +msgid "and hidden." +msgstr "" + #: templates/InvenTree/settings/user_display.html:95 msgid "Show them too" msgstr "" -#: templates/InvenTree/settings/user.html:292 #: templates/InvenTree/settings/user_display.html:101 msgid "Help the translation efforts!" msgstr "" -#: templates/InvenTree/settings/user.html:293 -#, python-format -msgid "Native language translation of the\n" -" InvenTree web application is community contributed via crowdin. Contributions are\n" -" welcomed and encouraged." -msgstr "" - -#: templates/InvenTree/settings/user.html:302 -msgid "Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:308 -msgid "Log out active sessions (except this one)" -msgstr "" - -#: templates/InvenTree/settings/user.html:309 -msgid "Log Out Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:318 -msgid "unknown on unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:319 -msgid "unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:323 -msgid "IP Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:324 -msgid "Device" -msgstr "" - -#: templates/InvenTree/settings/user.html:325 -msgid "Last Activity" -msgstr "" - -#: templates/InvenTree/settings/user.html:334 -#, python-format -msgid "%(time)s ago (this session)" -msgstr "" - -#: templates/InvenTree/settings/user.html:336 -#, python-format -msgid "%(time)s ago" -msgstr "" - -#: templates/InvenTree/settings/user.html:348 -msgid "Do you really want to remove the selected email address?" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:95 -msgid "and hidden." -msgstr "" - #: templates/InvenTree/settings/user_display.html:102 #, python-format msgid "Native language translation of the InvenTree web application is community contributed via crowdin. Contributions are welcomed and encouraged." @@ -6899,9 +6996,9 @@ msgid "InvenTree Version Information" msgstr "InvenTree Sürüm Bilgisi" #: templates/about.html:11 templates/about.html:105 -#: templates/js/translated/bom.js:395 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:573 templates/js/translated/modals.js:667 -#: templates/js/translated/modals.js:970 templates/modals.html:15 +#: templates/js/translated/bom.js:407 templates/js/translated/modals.js:53 +#: templates/js/translated/modals.js:584 templates/js/translated/modals.js:678 +#: templates/js/translated/modals.js:983 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "Kapat" @@ -7178,13 +7275,13 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1103 +#: templates/js/translated/bom.js:1117 msgid "Required Quantity" msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:579 templates/js/translated/build.js:1189 +#: templates/js/translated/bom.js:591 templates/js/translated/build.js:1189 #: templates/js/translated/build.js:1810 #: templates/js/translated/table_filters.js:178 msgid "Available" @@ -7208,10 +7305,6 @@ msgstr "" msgid "Click on the following link to view this part" msgstr "" -#: templates/email/low_stock_notification.html:17 -msgid "Total Stock" -msgstr "" - #: templates/email/low_stock_notification.html:19 msgid "Minimum Quantity" msgstr "" @@ -7232,11 +7325,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1040 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1053 msgid "No Response" msgstr "Cevap Yok" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1041 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1054 msgid "No response from the InvenTree server" msgstr "" @@ -7248,27 +7341,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1063 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1051 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1064 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1068 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1056 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1069 msgid "You do not have the required permissions to access this function" msgstr "Bu fonksiyona erişmek için gerekli izinlere sahip değilsiniz" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1073 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1061 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1074 msgid "The requested resource could not be located on the server" msgstr "" @@ -7280,11 +7373,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1065 +#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1078 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1066 +#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1079 msgid "Connection timeout while requesting data from server" msgstr "" @@ -7353,7 +7446,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "Invalid server response" msgstr "" @@ -7381,7 +7474,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1018 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1026 msgid "Remove stock item" msgstr "" @@ -7428,12 +7521,12 @@ msgid "Download BOM Template" msgstr "" #: templates/js/translated/bom.js:39 templates/js/translated/bom.js:73 -#: templates/js/translated/order.js:369 templates/js/translated/stock.js:510 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:518 msgid "Format" msgstr "" #: templates/js/translated/bom.js:40 templates/js/translated/bom.js:74 -#: templates/js/translated/order.js:370 templates/js/translated/stock.js:511 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:519 msgid "Select file format" msgstr "" @@ -7489,87 +7582,87 @@ msgstr "Dışa aktarılan malzeme listesine parça tedarikçisi verilerini dahil msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:340 -msgid "Select and add a new variant item using the input below" +#: templates/js/translated/bom.js:352 +msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:351 +#: templates/js/translated/bom.js:363 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:357 +#: templates/js/translated/bom.js:369 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:396 +#: templates/js/translated/bom.js:408 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:397 +#: templates/js/translated/bom.js:409 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:516 +#: templates/js/translated/bom.js:528 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:520 templates/js/translated/build.js:1171 +#: templates/js/translated/bom.js:532 templates/js/translated/build.js:1171 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:525 +#: templates/js/translated/bom.js:537 msgid "Open subassembly" msgstr "" -#: templates/js/translated/bom.js:597 +#: templates/js/translated/bom.js:609 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:612 +#: templates/js/translated/bom.js:624 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:619 +#: templates/js/translated/bom.js:631 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:668 templates/js/translated/bom.js:757 +#: templates/js/translated/bom.js:680 templates/js/translated/bom.js:769 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:728 +#: templates/js/translated/bom.js:740 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:742 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:732 +#: templates/js/translated/bom.js:744 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:734 templates/js/translated/bom.js:908 +#: templates/js/translated/bom.js:746 templates/js/translated/bom.js:920 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:891 +#: templates/js/translated/bom.js:748 templates/js/translated/bom.js:903 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:830 templates/js/translated/build.js:915 +#: templates/js/translated/bom.js:842 templates/js/translated/build.js:915 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:886 +#: templates/js/translated/bom.js:898 msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:1086 templates/js/translated/build.js:1155 +#: templates/js/translated/bom.js:1100 templates/js/translated/build.js:1155 msgid "Required Part" msgstr "Gerekli Parça" -#: templates/js/translated/bom.js:1108 +#: templates/js/translated/bom.js:1122 msgid "Inherited from parent BOM" msgstr "" @@ -7725,9 +7818,9 @@ msgstr "" msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1206 -#: templates/js/translated/part.js:1617 templates/js/translated/stock.js:1512 -#: templates/js/translated/stock.js:2321 +#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:1624 templates/js/translated/stock.js:1520 +#: templates/js/translated/stock.js:2479 msgid "Select" msgstr "" @@ -7735,7 +7828,7 @@ msgstr "" msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2540 +#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2698 msgid "No user information" msgstr "" @@ -7808,34 +7901,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:500 -#: templates/js/translated/company.js:757 templates/js/translated/part.js:511 -#: templates/js/translated/part.js:596 +#: templates/js/translated/company.js:757 templates/js/translated/part.js:517 +#: templates/js/translated/part.js:602 msgid "Template part" msgstr "Şablon Parça" #: templates/js/translated/company.js:504 -#: templates/js/translated/company.js:761 templates/js/translated/part.js:515 -#: templates/js/translated/part.js:600 +#: templates/js/translated/company.js:761 templates/js/translated/part.js:521 +#: templates/js/translated/part.js:606 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:631 templates/js/translated/part.js:690 +#: templates/js/translated/company.js:631 templates/js/translated/part.js:696 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:668 templates/js/translated/part.js:732 +#: templates/js/translated/company.js:668 templates/js/translated/part.js:738 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:669 templates/js/translated/part.js:733 +#: templates/js/translated/company.js:669 templates/js/translated/part.js:739 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:688 templates/js/translated/part.js:750 +#: templates/js/translated/company.js:688 templates/js/translated/part.js:756 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:699 templates/js/translated/part.js:762 +#: templates/js/translated/company.js:699 templates/js/translated/part.js:768 msgid "Delete Parameter" msgstr "" @@ -7844,12 +7937,12 @@ msgid "No supplier parts found" msgstr "" #: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:420 +#: templates/js/translated/filters.js:429 msgid "true" msgstr "doğru" #: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:421 +#: templates/js/translated/filters.js:430 msgid "false" msgstr "yanlış" @@ -7869,7 +7962,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:329 +#: templates/js/translated/filters.js:338 msgid "Create filter" msgstr "" @@ -7898,20 +7991,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1080 templates/modals.html:19 +#: templates/js/translated/forms.js:1082 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1471 +#: templates/js/translated/forms.js:1487 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1675 +#: templates/js/translated/forms.js:1691 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1895 +#: templates/js/translated/forms.js:1930 msgid "Clear input" msgstr "" @@ -7924,7 +8017,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1042 +#: templates/js/translated/stock.js:1050 msgid "Select Stock Items" msgstr "" @@ -7974,12 +8067,12 @@ msgid "Select Label Template" msgstr "Etiket Şablonu Seç" #: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 -#: templates/js/translated/modals.js:599 +#: templates/js/translated/modals.js:610 msgid "Cancel" msgstr "" #: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:666 templates/js/translated/modals.js:969 +#: templates/js/translated/modals.js:677 templates/js/translated/modals.js:982 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" @@ -7988,47 +8081,47 @@ msgstr "" msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:381 +#: templates/js/translated/modals.js:392 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:540 +#: templates/js/translated/modals.js:551 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:598 +#: templates/js/translated/modals.js:609 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:655 +#: templates/js/translated/modals.js:666 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:933 +#: templates/js/translated/modals.js:946 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1045 +#: templates/js/translated/modals.js:1058 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1046 +#: templates/js/translated/modals.js:1059 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1069 +#: templates/js/translated/modals.js:1082 msgid "Error requesting form data" msgstr "" @@ -8052,23 +8145,24 @@ msgstr "" msgid "Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:236 +#: templates/js/translated/model_renderers.js:249 +#: templates/js/translated/model_renderers.js:270 msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:253 +#: templates/js/translated/model_renderers.js:287 msgid "Shipment ID" msgstr "" -#: templates/js/translated/model_renderers.js:273 +#: templates/js/translated/model_renderers.js:307 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:310 +#: templates/js/translated/model_renderers.js:344 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:339 +#: templates/js/translated/model_renderers.js:373 msgid "Supplier Part ID" msgstr "" @@ -8116,7 +8210,7 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2123 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2131 msgid "Stock Status" msgstr "" @@ -8140,7 +8234,7 @@ msgstr "" msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:790 templates/js/translated/part.js:803 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:809 msgid "No purchase orders found" msgstr "" @@ -8165,7 +8259,7 @@ msgid "Total" msgstr "" #: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 -#: templates/js/translated/part.js:1834 templates/js/translated/part.js:2045 +#: templates/js/translated/part.js:1841 templates/js/translated/part.js:2052 msgid "Unit Price" msgstr "" @@ -8181,7 +8275,7 @@ msgstr "" msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1166 templates/js/translated/part.js:935 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:942 msgid "Receive line item" msgstr "" @@ -8250,7 +8344,7 @@ msgid "Delete Stock Allocation" msgstr "" #: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 -#: templates/js/translated/stock.js:1428 +#: templates/js/translated/stock.js:1436 msgid "Shipped to customer" msgstr "" @@ -8378,144 +8472,148 @@ msgstr "" msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:412 +#: templates/js/translated/part.js:351 +msgid "Create Part Variant" +msgstr "" + +#: templates/js/translated/part.js:418 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:414 +#: templates/js/translated/part.js:420 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:419 +#: templates/js/translated/part.js:425 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:421 +#: templates/js/translated/part.js:427 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:444 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:448 +#: templates/js/translated/part.js:454 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:451 +#: templates/js/translated/part.js:457 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:481 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:503 templates/js/translated/part.js:588 +#: templates/js/translated/part.js:509 templates/js/translated/part.js:594 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:507 templates/js/translated/part.js:592 +#: templates/js/translated/part.js:513 templates/js/translated/part.js:598 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:519 +#: templates/js/translated/part.js:525 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:523 +#: templates/js/translated/part.js:529 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:638 +#: templates/js/translated/part.js:644 msgid "No variants found" msgstr "Çeşit bulunamadı" -#: templates/js/translated/part.js:1005 +#: templates/js/translated/part.js:1012 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1029 +#: templates/js/translated/part.js:1036 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1096 templates/js/translated/part.js:1356 +#: templates/js/translated/part.js:1103 templates/js/translated/part.js:1363 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1266 +#: templates/js/translated/part.js:1273 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1289 +#: templates/js/translated/part.js:1296 #: templates/js/translated/table_filters.js:430 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:1380 templates/js/translated/part.js:1552 -#: templates/js/translated/stock.js:2282 +#: templates/js/translated/part.js:1387 templates/js/translated/part.js:1559 +#: templates/js/translated/stock.js:2440 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1396 +#: templates/js/translated/part.js:1403 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1571 templates/js/translated/stock.js:2301 +#: templates/js/translated/part.js:1578 templates/js/translated/stock.js:2459 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:1635 +#: templates/js/translated/part.js:1642 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1649 templates/js/translated/stock.js:2345 +#: templates/js/translated/part.js:1656 templates/js/translated/stock.js:2503 msgid "Path" msgstr "" -#: templates/js/translated/part.js:1693 +#: templates/js/translated/part.js:1700 msgid "No test templates matching query" msgstr "Sorgu ile eşleşen test şablonu bulunamadı" -#: templates/js/translated/part.js:1744 templates/js/translated/stock.js:1234 +#: templates/js/translated/part.js:1751 templates/js/translated/stock.js:1242 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1745 templates/js/translated/stock.js:1235 +#: templates/js/translated/part.js:1752 templates/js/translated/stock.js:1243 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:1751 +#: templates/js/translated/part.js:1758 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:1773 +#: templates/js/translated/part.js:1780 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:1787 +#: templates/js/translated/part.js:1794 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:1812 +#: templates/js/translated/part.js:1819 #, python-brace-format msgid "No ${human_name} information found" msgstr "" -#: templates/js/translated/part.js:1867 +#: templates/js/translated/part.js:1874 #, python-brace-format msgid "Edit ${human_name}" msgstr "" -#: templates/js/translated/part.js:1868 +#: templates/js/translated/part.js:1875 #, python-brace-format msgid "Delete ${human_name}" msgstr "" -#: templates/js/translated/part.js:1969 +#: templates/js/translated/part.js:1976 msgid "Single Price" msgstr "" -#: templates/js/translated/part.js:1988 +#: templates/js/translated/part.js:1995 msgid "Single Price Difference" msgstr "" @@ -8589,340 +8687,344 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:74 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:181 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:93 templates/js/translated/stock.js:175 +#: templates/js/translated/stock.js:94 templates/js/translated/stock.js:183 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:101 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:110 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:146 +#: templates/js/translated/stock.js:154 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:186 +#: templates/js/translated/stock.js:194 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:225 +#: templates/js/translated/stock.js:233 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:231 +#: templates/js/translated/stock.js:239 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:382 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:387 +#: templates/js/translated/stock.js:395 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:420 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:416 templates/js/translated/stock.js:417 +#: templates/js/translated/stock.js:424 templates/js/translated/stock.js:425 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:433 +#: templates/js/translated/stock.js:441 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:453 +#: templates/js/translated/stock.js:461 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:462 +#: templates/js/translated/stock.js:470 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:515 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:526 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:519 +#: templates/js/translated/stock.js:527 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:628 +#: templates/js/translated/stock.js:636 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:629 +#: templates/js/translated/stock.js:637 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:714 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:715 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:709 +#: templates/js/translated/stock.js:717 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:710 +#: templates/js/translated/stock.js:718 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:796 +#: templates/js/translated/stock.js:804 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:797 +#: templates/js/translated/stock.js:805 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:892 +#: templates/js/translated/stock.js:900 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:893 +#: templates/js/translated/stock.js:901 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:899 +#: templates/js/translated/stock.js:907 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:900 +#: templates/js/translated/stock.js:908 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:904 +#: templates/js/translated/stock.js:912 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:905 +#: templates/js/translated/stock.js:913 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:909 +#: templates/js/translated/stock.js:917 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:910 users/models.py:206 +#: templates/js/translated/stock.js:918 users/models.py:208 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:914 templates/stock_table.html:58 +#: templates/js/translated/stock.js:922 templates/stock_table.html:58 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1051 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1201 +#: templates/js/translated/stock.js:1209 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1203 +#: templates/js/translated/stock.js:1211 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1208 +#: templates/js/translated/stock.js:1216 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1230 +#: templates/js/translated/stock.js:1238 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1256 +#: templates/js/translated/stock.js:1264 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1313 +#: templates/js/translated/stock.js:1321 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1428 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1424 +#: templates/js/translated/stock.js:1432 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1432 +#: templates/js/translated/stock.js:1440 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1438 +#: templates/js/translated/stock.js:1446 msgid "No stock location set" msgstr "Stok konumu ayarlanmadı" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1604 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1601 +#: templates/js/translated/stock.js:1609 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1604 +#: templates/js/translated/stock.js:1612 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1608 +#: templates/js/translated/stock.js:1616 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1610 +#: templates/js/translated/stock.js:1618 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1616 +#: templates/js/translated/stock.js:1624 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1618 +#: templates/js/translated/stock.js:1626 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1620 +#: templates/js/translated/stock.js:1628 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1633 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1632 +#: templates/js/translated/stock.js:1640 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1634 +#: templates/js/translated/stock.js:1642 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1636 +#: templates/js/translated/stock.js:1644 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1648 #: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1690 +#: templates/js/translated/stock.js:1698 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1763 +#: templates/js/translated/stock.js:1771 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1809 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1822 templates/js/translated/stock.js:1870 +#: templates/js/translated/stock.js:1830 templates/js/translated/stock.js:1878 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1910 +#: templates/js/translated/stock.js:1918 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1937 +#: templates/js/translated/stock.js:1945 msgid "locations" msgstr "konumlar" -#: templates/js/translated/stock.js:1939 +#: templates/js/translated/stock.js:1947 msgid "Undefined location" msgstr "Tanımsız konum" -#: templates/js/translated/stock.js:2138 +#: templates/js/translated/stock.js:2146 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2152 +#: templates/js/translated/stock.js:2160 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2153 +#: templates/js/translated/stock.js:2161 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2377 +#: templates/js/translated/stock.js:2340 +msgid "Allocated Quantity" +msgstr "" + +#: templates/js/translated/stock.js:2535 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2399 +#: templates/js/translated/stock.js:2557 msgid "Details" msgstr "Detaylar" -#: templates/js/translated/stock.js:2424 +#: templates/js/translated/stock.js:2582 msgid "Location no longer exists" msgstr "Konum artık yok" -#: templates/js/translated/stock.js:2443 +#: templates/js/translated/stock.js:2601 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2462 +#: templates/js/translated/stock.js:2620 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2480 +#: templates/js/translated/stock.js:2638 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2503 +#: templates/js/translated/stock.js:2661 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2511 +#: templates/js/translated/stock.js:2669 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2552 +#: templates/js/translated/stock.js:2710 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2553 +#: templates/js/translated/stock.js:2711 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2604 +#: templates/js/translated/stock.js:2762 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2655 +#: templates/js/translated/stock.js:2813 msgid "Uninstall Stock Item" msgstr "" @@ -9194,11 +9296,11 @@ msgstr "" msgid "Sell" msgstr "" -#: templates/navbar.html:113 +#: templates/navbar.html:114 msgid "Logout" msgstr "" -#: templates/navbar.html:115 +#: templates/navbar.html:116 msgid "Login" msgstr "" @@ -9246,31 +9348,43 @@ msgstr "" msgid "Server is deployed using docker" msgstr "" -#: templates/stats.html:40 -msgid "Server status" +#: templates/stats.html:39 +msgid "Plugin Support" msgstr "" #: templates/stats.html:43 -msgid "Healthy" +msgid "Plugin support enabled" msgstr "" #: templates/stats.html:45 -msgid "Issues detected" +msgid "Plugin support disabled" msgstr "" #: templates/stats.html:52 -msgid "Background Worker" +msgid "Server status" msgstr "" #: templates/stats.html:55 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:57 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:64 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:67 msgid "Background worker not running" msgstr "" -#: templates/stats.html:63 +#: templates/stats.html:75 msgid "Email Settings" msgstr "" -#: templates/stats.html:66 +#: templates/stats.html:78 msgid "Email settings not configured" msgstr "" @@ -9366,35 +9480,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:193 +#: users/models.py:195 msgid "Permission set" msgstr "" -#: users/models.py:201 +#: users/models.py:203 msgid "Group" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "View" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to view items" msgstr "" -#: users/models.py:206 +#: users/models.py:208 msgid "Permission to add items" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Change" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Permissions to edit items" msgstr "" -#: users/models.py:210 +#: users/models.py:212 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/vi/LC_MESSAGES/django.po b/InvenTree/locale/vi/LC_MESSAGES/django.po index 4b75e64c4e..fc68f7dd4a 100644 --- a/InvenTree/locale/vi/LC_MESSAGES/django.po +++ b/InvenTree/locale/vi/LC_MESSAGES/django.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-10 03:54+0000\n" -"PO-Revision-Date: 2022-01-10 03:57\n" +"POT-Creation-Date: 2022-01-29 00:17+0000\n" +"PO-Revision-Date: 2022-01-29 01:11\n" "Last-Translator: \n" "Language-Team: Vietnamese\n" "Language: vi_VN\n" @@ -18,15 +18,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 138\n" -#: InvenTree/api.py:64 +#: InvenTree/api.py:55 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:110 +#: InvenTree/api.py:101 msgid "No action specified" msgstr "" -#: InvenTree/api.py:124 +#: InvenTree/api.py:116 msgid "No matching action found" msgstr "" @@ -80,41 +80,41 @@ msgstr "" msgid "You must type the same email each time." msgstr "" -#: InvenTree/helpers.py:437 +#: InvenTree/helpers.py:439 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:444 order/models.py:279 order/models.py:420 +#: InvenTree/helpers.py:446 order/models.py:282 order/models.py:425 #: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:447 +#: InvenTree/helpers.py:449 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:469 InvenTree/helpers.py:472 InvenTree/helpers.py:475 -#: InvenTree/helpers.py:500 +#: InvenTree/helpers.py:471 InvenTree/helpers.py:474 InvenTree/helpers.py:477 +#: InvenTree/helpers.py:502 #, python-brace-format msgid "Invalid group: {g}" msgstr "" -#: InvenTree/helpers.py:510 +#: InvenTree/helpers.py:512 #, python-brace-format msgid "Invalid group {group}" msgstr "" -#: InvenTree/helpers.py:516 +#: InvenTree/helpers.py:518 #, python-brace-format msgid "Invalid/no group {group}" msgstr "" -#: InvenTree/helpers.py:522 +#: InvenTree/helpers.py:524 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:526 +#: InvenTree/helpers.py:528 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" @@ -127,7 +127,7 @@ msgstr "" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1967 +#: InvenTree/models.py:132 stock/models.py:1995 #: templates/js/translated/attachment.js:119 msgid "Attachment" msgstr "" @@ -137,15 +137,15 @@ msgid "Select file to attach" msgstr "" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:124 part/models.py:828 +#: company/models.py:564 order/models.py:127 part/models.py:830 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:540 -#: templates/js/translated/company.js:829 templates/js/translated/part.js:1317 +#: templates/js/translated/company.js:829 templates/js/translated/part.js:1324 msgid "Link" msgstr "" -#: InvenTree/models.py:140 build/models.py:330 part/models.py:829 -#: stock/models.py:527 +#: InvenTree/models.py:140 build/models.py:332 part/models.py:831 +#: stock/models.py:529 msgid "Link to external URL" msgstr "" @@ -157,10 +157,11 @@ msgstr "Bình luận" msgid "File comment" msgstr "" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 -#: common/models.py:1214 part/models.py:2258 part/models.py:2278 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1223 +#: common/models.py:1224 common/models.py:1452 common/models.py:1453 +#: part/models.py:2265 part/models.py:2285 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2534 +#: templates/js/translated/stock.js:2692 msgid "User" msgstr "Người dùng" @@ -197,42 +198,42 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 -#: label/models.py:112 part/models.py:772 part/models.py:2442 -#: plugin/models.py:40 report/models.py:181 +#: InvenTree/models.py:277 InvenTree/models.py:278 common/models.py:1438 +#: company/models.py:415 label/models.py:112 part/models.py:774 +#: part/models.py:2449 plugin/models.py:40 report/models.py:181 #: templates/InvenTree/settings/mixins/urls.html:13 -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:125 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:279 -#: templates/js/translated/company.js:641 templates/js/translated/part.js:561 -#: templates/js/translated/part.js:700 templates/js/translated/part.js:1624 -#: templates/js/translated/stock.js:2327 +#: templates/InvenTree/settings/settings.html:282 +#: templates/js/translated/company.js:641 templates/js/translated/part.js:567 +#: templates/js/translated/part.js:706 templates/js/translated/part.js:1631 +#: templates/js/translated/stock.js:2485 msgid "Name" msgstr "" -#: InvenTree/models.py:284 build/models.py:207 +#: InvenTree/models.py:284 build/models.py:209 #: build/templates/build/detail.html:25 company/models.py:354 #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:122 part/models.py:795 part/templates/part/category.html:74 +#: order/models.py:125 part/models.py:797 part/templates/part/category.html:74 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 #: stock/templates/stock/location.html:93 #: templates/InvenTree/settings/plugin_settings.html:33 -#: templates/js/translated/bom.js:327 templates/js/translated/bom.js:540 +#: templates/js/translated/bom.js:339 templates/js/translated/bom.js:552 #: templates/js/translated/build.js:1682 templates/js/translated/company.js:345 #: templates/js/translated/company.js:551 #: templates/js/translated/company.js:840 templates/js/translated/order.js:836 #: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 -#: templates/js/translated/part.js:620 templates/js/translated/part.js:992 -#: templates/js/translated/part.js:1077 templates/js/translated/part.js:1247 -#: templates/js/translated/part.js:1643 templates/js/translated/part.js:1712 -#: templates/js/translated/stock.js:1569 templates/js/translated/stock.js:2339 -#: templates/js/translated/stock.js:2384 +#: templates/js/translated/part.js:626 templates/js/translated/part.js:999 +#: templates/js/translated/part.js:1084 templates/js/translated/part.js:1254 +#: templates/js/translated/part.js:1650 templates/js/translated/part.js:1719 +#: templates/js/translated/stock.js:1577 templates/js/translated/stock.js:2314 +#: templates/js/translated/stock.js:2497 templates/js/translated/stock.js:2542 msgid "Description" msgstr "Mô tả" @@ -244,7 +245,7 @@ msgstr "Mô tả (tùy chọn)" msgid "parent" msgstr "" -#: InvenTree/serializers.py:65 part/models.py:2727 +#: InvenTree/serializers.py:65 part/models.py:2734 msgid "Must be a valid number" msgstr "" @@ -252,83 +253,83 @@ msgstr "" msgid "Filename" msgstr "Tên tập tin" -#: InvenTree/settings.py:663 +#: InvenTree/settings.py:661 msgid "German" msgstr "" -#: InvenTree/settings.py:664 +#: InvenTree/settings.py:662 msgid "Greek" msgstr "" -#: InvenTree/settings.py:665 +#: InvenTree/settings.py:663 msgid "English" msgstr "" -#: InvenTree/settings.py:666 +#: InvenTree/settings.py:664 msgid "Spanish" msgstr "" -#: InvenTree/settings.py:667 +#: InvenTree/settings.py:665 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:668 +#: InvenTree/settings.py:666 msgid "French" msgstr "" -#: InvenTree/settings.py:669 +#: InvenTree/settings.py:667 msgid "Hebrew" msgstr "" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:668 msgid "Italian" msgstr "" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:669 msgid "Japanese" msgstr "" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:670 msgid "Korean" msgstr "" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:671 msgid "Dutch" msgstr "" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:672 msgid "Norwegian" msgstr "" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:673 msgid "Polish" msgstr "" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:674 msgid "Portugese" msgstr "" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:675 msgid "Russian" msgstr "" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:676 msgid "Swedish" msgstr "" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:677 msgid "Thai" msgstr "" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:678 msgid "Turkish" msgstr "" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:679 msgid "Vietnamese" msgstr "" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:680 msgid "Chinese" msgstr "" @@ -374,7 +375,7 @@ msgstr "" msgid "Returned" msgstr "" -#: InvenTree/status_codes.py:143 order/models.py:941 +#: InvenTree/status_codes.py:143 order/models.py:961 #: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "" @@ -455,7 +456,7 @@ msgstr "" msgid "Split child item" msgstr "" -#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2064 +#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2072 msgid "Merged stock items" msgstr "" @@ -543,56 +544,56 @@ msgstr "" msgid "System Information" msgstr "Thông tin hệ thống" -#: barcodes/api.py:54 barcodes/api.py:151 +#: barcodes/api.py:54 barcodes/api.py:152 msgid "Must provide barcode_data parameter" msgstr "" -#: barcodes/api.py:127 +#: barcodes/api.py:128 msgid "No match found for barcode data" msgstr "" -#: barcodes/api.py:129 +#: barcodes/api.py:130 msgid "Match found for barcode data" msgstr "" -#: barcodes/api.py:154 +#: barcodes/api.py:155 msgid "Must provide stockitem parameter" msgstr "" -#: barcodes/api.py:161 +#: barcodes/api.py:162 msgid "No matching stock item found" msgstr "" -#: barcodes/api.py:191 +#: barcodes/api.py:193 msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:195 +#: barcodes/api.py:197 msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:199 +#: barcodes/api.py:201 msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:205 barcodes/api.py:217 +#: barcodes/api.py:207 barcodes/api.py:219 msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:223 +#: barcodes/api.py:225 msgid "Barcode associated with Stock Item" msgstr "" -#: build/forms.py:36 build/models.py:1286 +#: build/forms.py:36 build/models.py:1293 #: build/templates/build/build_base.html:82 -#: build/templates/build/detail.html:35 common/models.py:1253 +#: build/templates/build/detail.html:35 common/models.py:1263 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/models.py:796 order/models.py:1207 order/serializers.py:810 +#: order/models.py:805 order/models.py:1229 order/serializers.py:816 #: order/templates/order/order_wizard/match_parts.html:30 -#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:145 -#: part/forms.py:161 part/forms.py:177 part/models.py:2629 +#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:144 +#: part/forms.py:160 part/forms.py:176 part/models.py:2636 #: part/templates/part/bom_upload/match_parts.html:31 -#: part/templates/part/detail.html:962 part/templates/part/detail.html:1048 +#: part/templates/part/detail.html:992 part/templates/part/detail.html:1078 #: part/templates/part/part_pricing.html:16 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 @@ -603,7 +604,7 @@ msgstr "" #: stock/templates/stock/item_base.html:181 #: stock/templates/stock/item_base.html:262 #: stock/templates/stock/item_base.html:270 -#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:555 +#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:567 #: templates/js/translated/build.js:295 templates/js/translated/build.js:495 #: templates/js/translated/build.js:689 templates/js/translated/build.js:699 #: templates/js/translated/build.js:1075 templates/js/translated/build.js:1422 @@ -611,11 +612,11 @@ msgstr "" #: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 #: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 #: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 -#: templates/js/translated/order.js:2150 templates/js/translated/part.js:900 -#: templates/js/translated/part.js:1855 templates/js/translated/part.js:1978 -#: templates/js/translated/part.js:2056 templates/js/translated/stock.js:383 -#: templates/js/translated/stock.js:580 templates/js/translated/stock.js:750 -#: templates/js/translated/stock.js:2519 templates/js/translated/stock.js:2621 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:906 +#: templates/js/translated/part.js:1862 templates/js/translated/part.js:1985 +#: templates/js/translated/part.js:2063 templates/js/translated/stock.js:391 +#: templates/js/translated/stock.js:588 templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2779 msgid "Quantity" msgstr "" @@ -623,9 +624,9 @@ msgstr "" msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 -#: stock/serializers.py:314 templates/js/translated/stock.js:230 -#: templates/js/translated/stock.js:384 +#: build/forms.py:41 order/serializers.py:820 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:238 +#: templates/js/translated/stock.js:392 msgid "Serial Numbers" msgstr "" @@ -649,18 +650,18 @@ msgstr "" msgid "Confirm build cancellation" msgstr "" -#: build/models.py:133 +#: build/models.py:135 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:137 build/templates/build/build_base.html:9 +#: build/models.py:139 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:457 +#: templates/js/translated/build.js:457 templates/js/translated/stock.js:2290 msgid "Build Order" msgstr "Tạo đơn hàng" -#: build/models.py:138 build/templates/build/build_base.html:13 +#: build/models.py:140 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:92 #: order/templates/order/so_sidebar.html:13 @@ -670,40 +671,40 @@ msgstr "Tạo đơn hàng" msgid "Build Orders" msgstr "Tạo đơn hàng" -#: build/models.py:198 +#: build/models.py:200 msgid "Build Order Reference" msgstr "" -#: build/models.py:199 order/models.py:210 order/models.py:536 -#: order/models.py:803 part/models.py:2638 +#: build/models.py:201 order/models.py:213 order/models.py:541 +#: order/models.py:812 part/models.py:2645 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:547 templates/js/translated/build.js:1179 +#: templates/js/translated/bom.js:559 templates/js/translated/build.js:1179 #: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "" -#: build/models.py:210 +#: build/models.py:212 msgid "Brief description of the build" msgstr "" -#: build/models.py:219 build/templates/build/build_base.html:164 +#: build/models.py:221 build/templates/build/build_base.html:164 #: build/templates/build/detail.html:88 msgid "Parent Build" msgstr "" -#: build/models.py:220 +#: build/models.py:222 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:225 build/templates/build/build_base.html:77 +#: build/models.py:227 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:856 order/models.py:930 -#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 -#: part/models.py:2204 part/models.py:2220 part/models.py:2239 -#: part/models.py:2256 part/models.py:2358 part/models.py:2480 -#: part/models.py:2613 part/models.py:2920 part/serializers.py:658 +#: order/models.py:876 order/models.py:950 +#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:359 +#: part/models.py:2211 part/models.py:2227 part/models.py:2246 +#: part/models.py:2263 part/models.py:2365 part/models.py:2487 +#: part/models.py:2620 part/models.py:2927 part/serializers.py:658 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/set_category.html:13 @@ -713,205 +714,205 @@ msgstr "" #: templates/InvenTree/search.html:80 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 -#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:326 -#: templates/js/translated/bom.js:505 templates/js/translated/build.js:680 +#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:338 +#: templates/js/translated/bom.js:517 templates/js/translated/build.js:680 #: templates/js/translated/build.js:1048 templates/js/translated/build.js:1419 #: templates/js/translated/build.js:1687 templates/js/translated/company.js:492 #: templates/js/translated/company.js:749 templates/js/translated/order.js:84 #: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 #: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 -#: templates/js/translated/order.js:2128 templates/js/translated/part.js:977 -#: templates/js/translated/part.js:1058 templates/js/translated/part.js:1225 -#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:719 -#: templates/js/translated/stock.js:926 templates/js/translated/stock.js:1526 -#: templates/js/translated/stock.js:2609 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:984 +#: templates/js/translated/part.js:1065 templates/js/translated/part.js:1232 +#: templates/js/translated/stock.js:562 templates/js/translated/stock.js:727 +#: templates/js/translated/stock.js:934 templates/js/translated/stock.js:1534 +#: templates/js/translated/stock.js:2767 msgid "Part" msgstr "Nguyên liệu" -#: build/models.py:233 +#: build/models.py:235 msgid "Select part to build" msgstr "" -#: build/models.py:238 +#: build/models.py:240 msgid "Sales Order Reference" msgstr "" -#: build/models.py:242 +#: build/models.py:244 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:247 templates/js/translated/build.js:1407 +#: build/models.py:249 templates/js/translated/build.js:1407 #: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "" -#: build/models.py:251 +#: build/models.py:253 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:256 +#: build/models.py:258 msgid "Destination Location" msgstr "" -#: build/models.py:260 +#: build/models.py:262 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:264 +#: build/models.py:266 msgid "Build Quantity" msgstr "" -#: build/models.py:267 +#: build/models.py:269 msgid "Number of stock items to build" msgstr "" -#: build/models.py:271 +#: build/models.py:273 msgid "Completed items" msgstr "" -#: build/models.py:273 +#: build/models.py:275 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:277 part/templates/part/part_base.html:234 +#: build/models.py:279 part/templates/part/part_base.html:234 msgid "Build Status" msgstr "" -#: build/models.py:281 +#: build/models.py:283 msgid "Build status code" msgstr "" -#: build/models.py:285 stock/models.py:531 +#: build/models.py:287 stock/models.py:533 msgid "Batch Code" msgstr "" -#: build/models.py:289 +#: build/models.py:291 msgid "Batch code for this build output" msgstr "" -#: build/models.py:292 order/models.py:126 part/models.py:967 +#: build/models.py:294 order/models.py:129 part/models.py:969 #: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "" -#: build/models.py:296 order/models.py:558 +#: build/models.py:298 order/models.py:563 msgid "Target completion date" msgstr "" -#: build/models.py:297 +#: build/models.py:299 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:300 order/models.py:252 +#: build/models.py:302 order/models.py:255 #: templates/js/translated/build.js:1758 msgid "Completion Date" msgstr "Ngày hoàn thành" -#: build/models.py:306 +#: build/models.py:308 msgid "completed by" msgstr "" -#: build/models.py:314 templates/js/translated/build.js:1729 +#: build/models.py:316 templates/js/translated/build.js:1729 msgid "Issued by" msgstr "" -#: build/models.py:315 +#: build/models.py:317 msgid "User who issued this build order" msgstr "" -#: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:140 +#: build/models.py:325 build/templates/build/build_base.html:185 +#: build/templates/build/detail.html:116 order/models.py:143 #: order/templates/order/order_base.html:170 -#: order/templates/order/sales_order_base.html:182 part/models.py:971 +#: order/templates/order/sales_order_base.html:182 part/models.py:973 #: report/templates/report/inventree_build_order_base.html:159 #: templates/js/translated/build.js:1741 templates/js/translated/order.js:864 msgid "Responsible" msgstr "" -#: build/models.py:324 +#: build/models.py:326 msgid "User responsible for this build order" msgstr "" -#: build/models.py:329 build/templates/build/detail.html:102 +#: build/models.py:331 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:525 +#: part/templates/part/part_base.html:354 stock/models.py:527 #: stock/templates/stock/item_base.html:373 msgid "External Link" msgstr "" -#: build/models.py:334 build/serializers.py:201 +#: build/models.py:336 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:144 order/models.py:805 order/models.py:1051 +#: order/models.py:147 order/models.py:814 order/models.py:1071 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/models.py:956 -#: part/templates/part/detail.html:120 part/templates/part/part_sidebar.html:50 +#: order/templates/order/so_sidebar.html:17 part/models.py:958 +#: part/templates/part/detail.html:137 part/templates/part/part_sidebar.html:54 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:597 -#: stock/models.py:1867 stock/models.py:1973 stock/serializers.py:332 -#: stock/serializers.py:639 stock/serializers.py:737 stock/serializers.py:869 -#: stock/templates/stock/stock_sidebar.html:21 -#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:711 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:599 +#: stock/models.py:1895 stock/models.py:2001 stock/serializers.py:332 +#: stock/serializers.py:640 stock/serializers.py:738 stock/serializers.py:870 +#: stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:723 #: templates/js/translated/company.js:845 templates/js/translated/order.js:1149 #: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 -#: templates/js/translated/stock.js:1309 templates/js/translated/stock.js:1795 +#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1803 msgid "Notes" msgstr "" -#: build/models.py:335 +#: build/models.py:337 msgid "Extra build notes" msgstr "" -#: build/models.py:710 +#: build/models.py:717 msgid "No build output specified" msgstr "" -#: build/models.py:713 +#: build/models.py:720 msgid "Build output is already completed" msgstr "" -#: build/models.py:716 +#: build/models.py:723 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1108 +#: build/models.py:1115 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1117 +#: build/models.py:1124 #, python-brace-format msgid "Allocated quantity ({q}) must not execed available stock quantity ({a})" msgstr "" -#: build/models.py:1127 +#: build/models.py:1134 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1133 order/models.py:1167 +#: build/models.py:1140 order/models.py:1189 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1139 +#: build/models.py:1146 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1196 +#: build/models.py:1203 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1256 stock/templates/stock/item_base.html:345 +#: build/models.py:1263 stock/templates/stock/item_base.html:345 #: templates/InvenTree/search.html:137 templates/js/translated/build.js:1660 #: templates/navbar.html:35 msgid "Build" msgstr "" -#: build/models.py:1257 +#: build/models.py:1264 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1273 build/serializers.py:388 order/serializers.py:690 -#: order/serializers.py:708 stock/serializers.py:577 stock/serializers.py:695 +#: build/models.py:1280 build/serializers.py:388 order/serializers.py:696 +#: order/serializers.py:714 stock/serializers.py:578 stock/serializers.py:696 #: stock/templates/stock/item_base.html:9 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:367 @@ -920,24 +921,24 @@ msgstr "" #: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 #: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 #: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 -#: templates/js/translated/stock.js:555 templates/js/translated/stock.js:720 -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:563 templates/js/translated/stock.js:728 +#: templates/js/translated/stock.js:2628 msgid "Stock Item" msgstr "" -#: build/models.py:1274 +#: build/models.py:1281 msgid "Source stock item" msgstr "" -#: build/models.py:1287 +#: build/models.py:1294 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1295 +#: build/models.py:1302 msgid "Install into" msgstr "" -#: build/models.py:1296 +#: build/models.py:1303 msgid "Destination stock item" msgstr "" @@ -962,16 +963,16 @@ msgid "This build output is not fully allocated" msgstr "" #: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 -#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:730 -#: stock/serializers.py:971 stock/templates/stock/item_base.html:313 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:731 +#: stock/serializers.py:972 stock/templates/stock/item_base.html:313 #: templates/js/translated/barcode.js:384 #: templates/js/translated/barcode.js:557 templates/js/translated/build.js:480 #: templates/js/translated/build.js:1087 templates/js/translated/order.js:508 #: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 #: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 -#: templates/js/translated/part.js:179 templates/js/translated/stock.js:556 -#: templates/js/translated/stock.js:721 templates/js/translated/stock.js:928 -#: templates/js/translated/stock.js:1676 templates/js/translated/stock.js:2411 +#: templates/js/translated/part.js:179 templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:729 templates/js/translated/stock.js:936 +#: templates/js/translated/stock.js:1684 templates/js/translated/stock.js:2569 msgid "Location" msgstr "" @@ -980,12 +981,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:552 +#: build/templates/build/detail.html:63 order/models.py:557 #: order/serializers.py:247 stock/templates/stock/item_base.html:187 #: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1716 #: templates/js/translated/order.js:591 templates/js/translated/order.js:840 -#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1651 -#: templates/js/translated/stock.js:2488 templates/js/translated/stock.js:2637 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1659 +#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2795 msgid "Status" msgstr "Trạng thái" @@ -1021,8 +1022,8 @@ msgstr "" msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:313 build/serializers.py:362 part/models.py:2753 -#: part/models.py:2912 +#: build/serializers.py:313 build/serializers.py:362 part/models.py:2760 +#: part/models.py:2919 msgid "BOM Item" msgstr "" @@ -1038,16 +1039,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:394 stock/serializers.py:584 +#: build/serializers.py:394 stock/serializers.py:585 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:408 order/models.py:277 order/serializers.py:240 -#: stock/models.py:365 stock/models.py:1077 stock/serializers.py:305 +#: build/serializers.py:408 order/models.py:280 order/serializers.py:240 +#: stock/models.py:367 stock/models.py:1105 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:450 order/serializers.py:741 +#: build/serializers.py:450 order/serializers.py:747 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1060,7 +1061,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:491 order/serializers.py:984 +#: build/serializers.py:491 order/serializers.py:990 msgid "Allocation items must be provided" msgstr "" @@ -1164,13 +1165,13 @@ msgid "Completed" msgstr "Đã hoàn thành" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:927 -#: order/models.py:1023 order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:947 +#: order/models.py:1043 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:307 -#: templates/js/translated/order.js:1218 +#: templates/js/translated/order.js:1218 templates/js/translated/stock.js:2304 msgid "Sales Order" msgstr "" @@ -1224,7 +1225,7 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:878 stock/forms.py:136 +#: build/templates/build/detail.html:50 order/models.py:898 stock/forms.py:136 #: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1239,7 +1240,7 @@ msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:331 -#: templates/js/translated/stock.js:1665 templates/js/translated/stock.js:2644 +#: templates/js/translated/stock.js:1673 templates/js/translated/stock.js:2802 #: templates/js/translated/table_filters.js:151 #: templates/js/translated/table_filters.js:238 msgid "Batch" @@ -1343,9 +1344,9 @@ msgstr "" #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 #: order/templates/order/sales_order_detail.html:107 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:196 -#: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 -#: stock/templates/stock/stock_sidebar.html:19 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:213 +#: part/templates/part/part_sidebar.html:52 stock/templates/stock/item.html:112 +#: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "" @@ -1360,8 +1361,8 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:108 #: order/templates/order/sales_order_detail.html:127 #: order/templates/order/sales_order_detail.html:186 -#: part/templates/part/detail.html:124 stock/templates/stock/item.html:115 -#: stock/templates/stock/item.html:205 +#: part/templates/part/detail.html:141 stock/templates/stock/item.html:132 +#: stock/templates/stock/item.html:235 msgid "Edit Notes" msgstr "" @@ -1373,7 +1374,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:303 +#: build/templates/build/index.html:18 part/templates/part/detail.html:320 msgid "New Build Order" msgstr "" @@ -1453,23 +1454,23 @@ msgstr "" msgid "Delete Build Order" msgstr "" -#: common/files.py:67 +#: common/files.py:65 msgid "Unsupported file format: {ext.upper()}" msgstr "" -#: common/files.py:69 +#: common/files.py:67 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:74 +#: common/files.py:72 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:76 +#: common/files.py:74 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:78 +#: common/files.py:76 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1490,740 +1491,828 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:344 common/models.py:998 common/models.py:1206 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:352 +msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:346 +#: common/models.py:354 msgid "Settings value" msgstr "" -#: common/models.py:380 +#: common/models.py:388 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:400 +#: common/models.py:408 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:411 +#: common/models.py:419 msgid "Value must be an integer value" msgstr "" -#: common/models.py:434 +#: common/models.py:442 msgid "Key string must be unique" msgstr "" -#: common/models.py:553 +#: common/models.py:561 msgid "No group" msgstr "" -#: common/models.py:595 +#: common/models.py:603 msgid "Restart required" msgstr "" -#: common/models.py:596 +#: common/models.py:604 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:603 +#: common/models.py:611 msgid "InvenTree Instance Name" msgstr "" -#: common/models.py:605 +#: common/models.py:613 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:609 +#: common/models.py:617 msgid "Use instance name" msgstr "" -#: common/models.py:610 +#: common/models.py:618 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:616 company/models.py:100 company/models.py:101 +#: common/models.py:624 company/models.py:100 company/models.py:101 msgid "Company name" msgstr "" -#: common/models.py:617 +#: common/models.py:625 msgid "Internal company name" msgstr "" -#: common/models.py:622 +#: common/models.py:630 msgid "Base URL" msgstr "" -#: common/models.py:623 +#: common/models.py:631 msgid "Base URL for server instance" msgstr "" -#: common/models.py:629 +#: common/models.py:637 msgid "Default Currency" msgstr "" -#: common/models.py:630 +#: common/models.py:638 msgid "Default currency" msgstr "" -#: common/models.py:636 +#: common/models.py:644 msgid "Download from URL" msgstr "" -#: common/models.py:637 +#: common/models.py:645 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:643 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:651 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:644 +#: common/models.py:652 msgid "Enable barcode scanner support" msgstr "" -#: common/models.py:650 +#: common/models.py:658 msgid "IPN Regex" msgstr "" -#: common/models.py:651 +#: common/models.py:659 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:655 +#: common/models.py:663 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:656 +#: common/models.py:664 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:662 +#: common/models.py:670 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:663 +#: common/models.py:671 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:669 +#: common/models.py:677 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:670 +#: common/models.py:678 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:676 +#: common/models.py:684 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:677 +#: common/models.py:685 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:683 +#: common/models.py:691 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:684 +#: common/models.py:692 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:690 +#: common/models.py:698 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:691 +#: common/models.py:699 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:697 part/models.py:2482 report/models.py:187 +#: common/models.py:705 part/models.py:2489 report/models.py:187 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:422 msgid "Template" msgstr "" -#: common/models.py:698 +#: common/models.py:706 msgid "Parts are templates by default" msgstr "" -#: common/models.py:704 part/models.py:919 templates/js/translated/bom.js:1068 +#: common/models.py:712 part/models.py:921 templates/js/translated/bom.js:1082 #: templates/js/translated/table_filters.js:168 #: templates/js/translated/table_filters.js:434 msgid "Assembly" msgstr "" -#: common/models.py:705 +#: common/models.py:713 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:711 part/models.py:925 +#: common/models.py:719 part/models.py:927 #: templates/js/translated/table_filters.js:438 msgid "Component" msgstr "" -#: common/models.py:712 +#: common/models.py:720 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:718 part/models.py:936 +#: common/models.py:726 part/models.py:938 msgid "Purchaseable" msgstr "" -#: common/models.py:719 +#: common/models.py:727 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:725 part/models.py:941 +#: common/models.py:733 part/models.py:943 #: templates/js/translated/table_filters.js:446 msgid "Salable" msgstr "" -#: common/models.py:726 +#: common/models.py:734 msgid "Parts are salable by default" msgstr "" -#: common/models.py:732 part/models.py:931 +#: common/models.py:740 part/models.py:933 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 #: templates/js/translated/table_filters.js:450 msgid "Trackable" msgstr "" -#: common/models.py:733 +#: common/models.py:741 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:739 part/models.py:951 +#: common/models.py:747 part/models.py:953 #: part/templates/part/part_base.html:147 #: templates/js/translated/table_filters.js:42 msgid "Virtual" msgstr "" -#: common/models.py:740 +#: common/models.py:748 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:746 +#: common/models.py:754 msgid "Show Import in Views" msgstr "" -#: common/models.py:747 +#: common/models.py:755 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:753 +#: common/models.py:761 msgid "Show Price in Forms" msgstr "" -#: common/models.py:754 +#: common/models.py:762 msgid "Display part price in some forms" msgstr "" -#: common/models.py:765 +#: common/models.py:773 msgid "Show Price in BOM" msgstr "" -#: common/models.py:766 +#: common/models.py:774 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:772 +#: common/models.py:780 msgid "Show related parts" msgstr "" -#: common/models.py:773 +#: common/models.py:781 msgid "Display related parts for a part" msgstr "" -#: common/models.py:779 +#: common/models.py:787 msgid "Create initial stock" msgstr "" -#: common/models.py:780 +#: common/models.py:788 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:786 +#: common/models.py:794 msgid "Internal Prices" msgstr "" -#: common/models.py:787 +#: common/models.py:795 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:793 +#: common/models.py:801 msgid "Internal Price as BOM-Price" msgstr "" -#: common/models.py:794 +#: common/models.py:802 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "" -#: common/models.py:800 +#: common/models.py:808 msgid "Part Name Display Format" msgstr "" -#: common/models.py:801 +#: common/models.py:809 msgid "Format to display the part name" msgstr "" -#: common/models.py:808 +#: common/models.py:816 msgid "Enable Reports" msgstr "" -#: common/models.py:809 +#: common/models.py:817 msgid "Enable generation of reports" msgstr "" -#: common/models.py:815 templates/stats.html:25 +#: common/models.py:823 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:816 +#: common/models.py:824 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:822 +#: common/models.py:830 msgid "Page Size" msgstr "" -#: common/models.py:823 +#: common/models.py:831 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:833 +#: common/models.py:841 msgid "Test Reports" msgstr "" -#: common/models.py:834 +#: common/models.py:842 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:840 +#: common/models.py:848 msgid "Stock Expiry" msgstr "" -#: common/models.py:841 +#: common/models.py:849 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:847 +#: common/models.py:855 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:848 +#: common/models.py:856 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:854 +#: common/models.py:862 msgid "Stock Stale Time" msgstr "" -#: common/models.py:855 +#: common/models.py:863 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:857 +#: common/models.py:865 msgid "days" msgstr "" -#: common/models.py:862 +#: common/models.py:870 msgid "Build Expired Stock" msgstr "" -#: common/models.py:863 +#: common/models.py:871 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:869 +#: common/models.py:877 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:870 +#: common/models.py:878 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:876 -msgid "Group by Part" -msgstr "" - -#: common/models.py:877 -msgid "Group stock items by part reference in table views" -msgstr "" - -#: common/models.py:883 +#: common/models.py:884 msgid "Build Order Reference Prefix" msgstr "" -#: common/models.py:884 +#: common/models.py:885 msgid "Prefix value for build order reference" msgstr "" -#: common/models.py:889 +#: common/models.py:890 msgid "Build Order Reference Regex" msgstr "" -#: common/models.py:890 +#: common/models.py:891 msgid "Regular expression pattern for matching build order reference" msgstr "" -#: common/models.py:894 +#: common/models.py:895 msgid "Sales Order Reference Prefix" msgstr "" -#: common/models.py:895 +#: common/models.py:896 msgid "Prefix value for sales order reference" msgstr "" -#: common/models.py:900 +#: common/models.py:901 msgid "Purchase Order Reference Prefix" msgstr "" -#: common/models.py:901 +#: common/models.py:902 msgid "Prefix value for purchase order reference" msgstr "" -#: common/models.py:907 +#: common/models.py:908 msgid "Enable password forgot" msgstr "" -#: common/models.py:908 +#: common/models.py:909 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:913 +#: common/models.py:914 msgid "Enable registration" msgstr "" -#: common/models.py:914 +#: common/models.py:915 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:919 +#: common/models.py:920 msgid "Enable SSO" msgstr "" -#: common/models.py:920 +#: common/models.py:921 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:925 +#: common/models.py:926 msgid "Email required" msgstr "" -#: common/models.py:926 +#: common/models.py:927 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:931 +#: common/models.py:932 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:932 +#: common/models.py:933 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:937 +#: common/models.py:938 msgid "Mail twice" msgstr "" -#: common/models.py:938 +#: common/models.py:939 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:943 +#: common/models.py:944 msgid "Password twice" msgstr "" -#: common/models.py:944 +#: common/models.py:945 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:949 +#: common/models.py:950 msgid "Group on signup" msgstr "" -#: common/models.py:950 +#: common/models.py:951 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:955 +#: common/models.py:956 msgid "Enforce MFA" msgstr "" -#: common/models.py:956 +#: common/models.py:957 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:961 +#: common/models.py:964 msgid "Enable URL integration" msgstr "" -#: common/models.py:962 +#: common/models.py:965 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:968 +#: common/models.py:971 msgid "Enable navigation integration" msgstr "" -#: common/models.py:969 +#: common/models.py:972 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:975 +#: common/models.py:978 msgid "Enable app integration" msgstr "" -#: common/models.py:976 +#: common/models.py:979 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:982 +#: common/models.py:985 msgid "Enable schedule integration" msgstr "" -#: common/models.py:983 +#: common/models.py:986 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1029 +#: common/models.py:992 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:993 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:1008 common/models.py:1216 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1039 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1030 +#: common/models.py:1040 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1035 +#: common/models.py:1045 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1036 +#: common/models.py:1046 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1041 +#: common/models.py:1051 msgid "Show latest parts" msgstr "Hiển thị nguyên liệu mới nhất" -#: common/models.py:1042 +#: common/models.py:1052 msgid "Show latest parts on the homepage" msgstr "Hiển thị nguyên liệu mới nhất trên trang chủ" -#: common/models.py:1047 +#: common/models.py:1057 msgid "Recent Part Count" msgstr "" -#: common/models.py:1048 +#: common/models.py:1058 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1054 +#: common/models.py:1064 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1055 +#: common/models.py:1065 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1060 +#: common/models.py:1070 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1061 +#: common/models.py:1071 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1066 +#: common/models.py:1076 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1067 +#: common/models.py:1077 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1072 +#: common/models.py:1082 msgid "Show low stock" msgstr "" -#: common/models.py:1073 +#: common/models.py:1083 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1078 +#: common/models.py:1088 msgid "Show depleted stock" msgstr "" -#: common/models.py:1079 +#: common/models.py:1089 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1084 +#: common/models.py:1094 msgid "Show needed stock" msgstr "" -#: common/models.py:1085 +#: common/models.py:1095 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1090 +#: common/models.py:1100 msgid "Show expired stock" msgstr "" -#: common/models.py:1091 +#: common/models.py:1101 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1096 +#: common/models.py:1106 msgid "Show stale stock" msgstr "" -#: common/models.py:1097 +#: common/models.py:1107 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1102 +#: common/models.py:1112 msgid "Show pending builds" msgstr "" -#: common/models.py:1103 +#: common/models.py:1113 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1108 +#: common/models.py:1118 msgid "Show overdue builds" msgstr "" -#: common/models.py:1109 +#: common/models.py:1119 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:1114 +#: common/models.py:1124 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1115 +#: common/models.py:1125 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1120 +#: common/models.py:1130 msgid "Show overdue POs" msgstr "" -#: common/models.py:1121 +#: common/models.py:1131 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1126 +#: common/models.py:1136 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1127 +#: common/models.py:1137 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1132 +#: common/models.py:1142 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1133 +#: common/models.py:1143 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1139 +#: common/models.py:1149 msgid "Inline label display" msgstr "" -#: common/models.py:1140 +#: common/models.py:1150 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1146 +#: common/models.py:1156 msgid "Inline report display" msgstr "" -#: common/models.py:1147 +#: common/models.py:1157 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:1153 +#: common/models.py:1163 msgid "Search Preview Results" msgstr "" -#: common/models.py:1154 +#: common/models.py:1164 msgid "Number of results to show in search preview window" msgstr "" -#: common/models.py:1160 +#: common/models.py:1170 msgid "Search Show Stock" msgstr "" -#: common/models.py:1161 +#: common/models.py:1171 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1167 +#: common/models.py:1177 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1168 +#: common/models.py:1178 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1174 +#: common/models.py:1184 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:1175 +#: common/models.py:1185 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:1181 +#: common/models.py:1191 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1182 +#: common/models.py:1192 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1188 +#: common/models.py:1198 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1189 +#: common/models.py:1199 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1254 company/forms.py:43 +#: common/models.py:1264 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1261 company/serializers.py:264 +#: common/models.py:1271 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 -#: templates/js/translated/part.js:909 templates/js/translated/part.js:1860 +#: templates/js/translated/part.js:915 templates/js/translated/part.js:1867 msgid "Price" msgstr "" -#: common/models.py:1262 +#: common/models.py:1272 msgid "Unit price at specified quantity" msgstr "" +#: common/models.py:1429 common/models.py:1568 +msgid "Endpoint" +msgstr "" + +#: common/models.py:1430 +msgid "Endpoint at which this webhook is received" +msgstr "" + +#: common/models.py:1439 +msgid "Name for this webhook" +msgstr "" + +#: common/models.py:1444 part/models.py:948 plugin/models.py:46 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:96 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:417 +msgid "Active" +msgstr "" + +#: common/models.py:1445 +msgid "Is this webhook active" +msgstr "" + +#: common/models.py:1459 +msgid "Token" +msgstr "" + +#: common/models.py:1460 +msgid "Token for access" +msgstr "" + +#: common/models.py:1467 +msgid "Secret" +msgstr "" + +#: common/models.py:1468 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:1535 +msgid "Message ID" +msgstr "" + +#: common/models.py:1536 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:1544 +msgid "Host" +msgstr "" + +#: common/models.py:1545 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:1552 +msgid "Header" +msgstr "" + +#: common/models.py:1553 +msgid "Header of this message" +msgstr "" + +#: common/models.py:1559 +msgid "Body" +msgstr "" + +#: common/models.py:1560 +msgid "Body of this message" +msgstr "" + +#: common/models.py:1569 +msgid "Endpoint on which this message was received" +msgstr "" + +#: common/models.py:1574 +msgid "Worked on" +msgstr "" + +#: common/models.py:1575 +msgid "Was the work on this message finished?" +msgstr "" + #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 #: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 -#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 -#: part/views.py:764 +#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:213 +#: part/views.py:773 msgid "Upload File" msgstr "" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 #: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 -#: part/views.py:765 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:214 +#: part/views.py:774 msgid "Match Fields" msgstr "" @@ -2315,7 +2404,7 @@ msgstr "" msgid "Link to external company information" msgstr "" -#: company/models.py:139 part/models.py:838 +#: company/models.py:139 part/models.py:840 msgid "Image" msgstr "" @@ -2352,8 +2441,8 @@ msgstr "" msgid "Default currency used for this company" msgstr "" -#: company/models.py:320 company/models.py:535 stock/models.py:469 -#: stock/templates/stock/item_base.html:142 +#: company/models.py:320 company/models.py:535 stock/models.py:471 +#: stock/templates/stock/item_base.html:142 templates/js/translated/bom.js:328 msgid "Base Part" msgstr "" @@ -2380,7 +2469,7 @@ msgstr "" #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:533 #: templates/js/translated/company.js:818 templates/js/translated/order.js:1038 -#: templates/js/translated/part.js:245 templates/js/translated/part.js:889 +#: templates/js/translated/part.js:245 templates/js/translated/part.js:895 msgid "MPN" msgstr "" @@ -2409,8 +2498,8 @@ msgstr "" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1960 templates/js/translated/company.js:647 -#: templates/js/translated/part.js:709 templates/js/translated/stock.js:1296 +#: stock/models.py:1988 templates/js/translated/company.js:647 +#: templates/js/translated/part.js:715 templates/js/translated/stock.js:1304 msgid "Value" msgstr "" @@ -2418,10 +2507,10 @@ msgstr "" msgid "Parameter value" msgstr "" -#: company/models.py:429 part/models.py:913 part/models.py:2450 +#: company/models.py:429 part/models.py:915 part/models.py:2457 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:284 -#: templates/js/translated/company.js:653 templates/js/translated/part.js:715 +#: templates/InvenTree/settings/settings.html:287 +#: templates/js/translated/company.js:653 templates/js/translated/part.js:721 msgid "Units" msgstr "" @@ -2434,13 +2523,13 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:224 +#: company/templates/company/supplier_part.html:87 order/models.py:227 #: order/templates/order/order_base.html:112 -#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 -#: part/bom.py:247 stock/templates/stock/item_base.html:397 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:237 +#: part/bom.py:265 stock/templates/stock/item_base.html:397 #: templates/js/translated/company.js:337 #: templates/js/translated/company.js:774 templates/js/translated/order.js:823 -#: templates/js/translated/part.js:215 templates/js/translated/part.js:857 +#: templates/js/translated/part.js:215 templates/js/translated/part.js:863 #: templates/js/translated/table_filters.js:393 msgid "Supplier" msgstr "Nhà cung cấp" @@ -2450,8 +2539,8 @@ msgid "Select supplier" msgstr "" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 -#: templates/js/translated/part.js:226 templates/js/translated/part.js:875 +#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1025 +#: templates/js/translated/part.js:226 templates/js/translated/part.js:881 msgid "SKU" msgstr "" @@ -2472,22 +2561,22 @@ msgid "Supplier part description" msgstr "" #: company/models.py:576 company/templates/company/supplier_part.html:119 -#: part/models.py:2641 report/templates/report/inventree_po_report.html:93 +#: part/models.py:2648 report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "base cost" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:493 stock/templates/stock/item_base.html:338 -#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1791 +#: stock/models.py:495 stock/templates/stock/item_base.html:338 +#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1799 msgid "Packaging" msgstr "" @@ -2495,7 +2584,7 @@ msgstr "" msgid "Part packaging" msgstr "" -#: company/models.py:584 part/models.py:1781 +#: company/models.py:584 part/models.py:1783 msgid "multiple" msgstr "" @@ -2554,12 +2643,12 @@ msgstr "" msgid "Download image from URL" msgstr "" -#: company/templates/company/company_base.html:83 order/models.py:547 -#: order/templates/order/sales_order_base.html:115 stock/models.py:512 -#: stock/models.py:513 stock/serializers.py:625 +#: company/templates/company/company_base.html:83 order/models.py:552 +#: order/templates/order/sales_order_base.html:115 stock/models.py:514 +#: stock/models.py:515 stock/serializers.py:626 #: stock/templates/stock/item_base.html:290 #: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 -#: templates/js/translated/stock.js:2452 +#: templates/js/translated/stock.js:2610 #: templates/js/translated/table_filters.js:397 msgid "Customer" msgstr "" @@ -2590,7 +2679,7 @@ msgstr "" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:118 -#: part/templates/part/detail.html:336 +#: part/templates/part/detail.html:353 msgid "New Supplier Part" msgstr "" @@ -2598,8 +2687,8 @@ msgstr "" #: company/templates/company/detail.html:79 #: company/templates/company/manufacturer_part.html:127 #: company/templates/company/manufacturer_part.html:156 -#: part/templates/part/category.html:171 part/templates/part/detail.html:345 -#: part/templates/part/detail.html:374 +#: part/templates/part/category.html:171 part/templates/part/detail.html:362 +#: part/templates/part/detail.html:391 msgid "Options" msgstr "" @@ -2627,7 +2716,7 @@ msgstr "" msgid "Create new manufacturer part" msgstr "" -#: company/templates/company/detail.html:67 part/templates/part/detail.html:364 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:381 msgid "New Manufacturer Part" msgstr "" @@ -2641,7 +2730,7 @@ msgstr "" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:68 part/templates/part/part_sidebar.html:33 +#: part/templates/part/detail.html:85 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197 #: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 @@ -2663,7 +2752,7 @@ msgstr "" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:91 part/templates/part/part_sidebar.html:37 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:41 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217 #: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 @@ -2691,13 +2780,13 @@ msgstr "" #: company/templates/company/detail.html:384 #: company/templates/company/manufacturer_part.html:215 -#: part/templates/part/detail.html:418 +#: part/templates/part/detail.html:435 msgid "Delete Supplier Parts?" msgstr "" #: company/templates/company/detail.html:385 #: company/templates/company/manufacturer_part.html:216 -#: part/templates/part/detail.html:419 +#: part/templates/part/detail.html:436 msgid "All selected supplier parts will be deleted" msgstr "" @@ -2714,7 +2803,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:34 #: company/templates/company/supplier_part.html:159 -#: part/templates/part/detail.html:71 part/templates/part/part_base.html:76 +#: part/templates/part/detail.html:88 part/templates/part/part_base.html:76 msgid "Order part" msgstr "" @@ -2735,34 +2824,34 @@ msgstr "" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 -#: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 +#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:163 #: templates/InvenTree/search.html:188 templates/navbar.html:45 msgid "Suppliers" msgstr "" #: company/templates/company/manufacturer_part.html:129 -#: part/templates/part/detail.html:347 +#: part/templates/part/detail.html:364 msgid "Delete supplier parts" msgstr "" #: company/templates/company/manufacturer_part.html:129 #: company/templates/company/manufacturer_part.html:158 #: company/templates/company/manufacturer_part.html:254 -#: part/templates/part/detail.html:347 part/templates/part/detail.html:376 +#: part/templates/part/detail.html:364 part/templates/part/detail.html:393 #: templates/js/translated/company.js:426 templates/js/translated/helpers.js:31 -#: users/models.py:210 +#: users/models.py:212 msgid "Delete" msgstr "" #: company/templates/company/manufacturer_part.html:143 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:17 -#: part/templates/part/detail.html:170 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:187 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "" #: company/templates/company/manufacturer_part.html:147 -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:192 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part.html:65 msgid "New Parameter" @@ -2773,7 +2862,7 @@ msgid "Delete parameters" msgstr "" #: company/templates/company/manufacturer_part.html:191 -#: part/templates/part/detail.html:862 +#: part/templates/part/detail.html:892 msgid "Add Parameter" msgstr "" @@ -2802,9 +2891,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:477 +#: company/templates/company/supplier_part.html:24 stock/models.py:479 #: stock/templates/stock/item_base.html:402 -#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1748 +#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1756 msgid "Supplier Part" msgstr "" @@ -2830,7 +2919,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:167 -#: templates/js/translated/stock.js:360 +#: templates/js/translated/stock.js:368 msgid "New Stock Item" msgstr "" @@ -2840,7 +2929,7 @@ msgid "Supplier Part Orders" msgstr "" #: company/templates/company/supplier_part.html:160 -#: part/templates/part/detail.html:72 +#: part/templates/part/detail.html:89 msgid "Order Part" msgstr "" @@ -2851,7 +2940,7 @@ msgstr "" #: company/templates/company/supplier_part.html:184 #: company/templates/company/supplier_part.html:290 -#: part/templates/part/prices.html:271 part/views.py:1619 +#: part/templates/part/prices.html:271 part/views.py:1628 msgid "Add Price Break" msgstr "" @@ -2859,11 +2948,11 @@ msgstr "" msgid "No price break information found" msgstr "" -#: company/templates/company/supplier_part.html:224 part/views.py:1681 +#: company/templates/company/supplier_part.html:224 part/views.py:1690 msgid "Delete Price Break" msgstr "" -#: company/templates/company/supplier_part.html:238 part/views.py:1667 +#: company/templates/company/supplier_part.html:238 part/views.py:1676 msgid "Edit Price Break" msgstr "" @@ -2881,10 +2970,10 @@ msgstr "" #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:150 #: templates/InvenTree/settings/sidebar.html:41 -#: templates/js/translated/bom.js:328 templates/js/translated/part.js:489 -#: templates/js/translated/part.js:624 templates/js/translated/part.js:1118 -#: templates/js/translated/part.js:1279 templates/js/translated/stock.js:927 -#: templates/js/translated/stock.js:1580 templates/navbar.html:28 +#: templates/js/translated/bom.js:340 templates/js/translated/part.js:495 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1125 +#: templates/js/translated/part.js:1286 templates/js/translated/stock.js:935 +#: templates/js/translated/stock.js:1588 templates/navbar.html:28 msgid "Stock" msgstr "Kiện hàng" @@ -2907,8 +2996,8 @@ msgstr "" #: stock/templates/stock/location.html:151 #: stock/templates/stock/location.html:163 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2351 -#: templates/stats.html:93 templates/stats.html:102 users/models.py:43 +#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2509 +#: templates/stats.html:105 templates/stats.html:114 users/models.py:43 msgid "Stock Items" msgstr "" @@ -2937,20 +3026,20 @@ msgstr "" msgid "New Company" msgstr "" -#: company/views.py:129 part/views.py:584 +#: company/views.py:129 part/views.py:593 msgid "Download Image" msgstr "" -#: company/views.py:158 part/views.py:616 +#: company/views.py:158 part/views.py:625 msgid "Image size exceeds maximum allowable size for download" msgstr "" -#: company/views.py:165 part/views.py:623 +#: company/views.py:165 part/views.py:632 #, python-brace-format msgid "Invalid response: {code}" msgstr "" -#: company/views.py:174 part/views.py:632 +#: company/views.py:174 part/views.py:641 msgid "Supplied URL is not a valid image file" msgstr "" @@ -3036,282 +3125,282 @@ msgstr "" msgid "Cancel order" msgstr "" -#: order/models.py:122 +#: order/models.py:125 msgid "Order description" msgstr "" -#: order/models.py:124 +#: order/models.py:127 msgid "Link to external page" msgstr "" -#: order/models.py:132 +#: order/models.py:135 msgid "Created By" msgstr "" -#: order/models.py:139 +#: order/models.py:142 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:144 +#: order/models.py:147 msgid "Order notes" msgstr "" -#: order/models.py:211 order/models.py:537 +#: order/models.py:214 order/models.py:542 msgid "Order reference" msgstr "" -#: order/models.py:216 order/models.py:552 +#: order/models.py:219 order/models.py:557 msgid "Purchase order status" msgstr "" -#: order/models.py:225 +#: order/models.py:228 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:228 order/templates/order/order_base.html:118 +#: order/models.py:231 order/templates/order/order_base.html:118 #: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:228 +#: order/models.py:231 msgid "Supplier order reference code" msgstr "" -#: order/models.py:235 +#: order/models.py:238 msgid "received by" msgstr "" -#: order/models.py:240 +#: order/models.py:243 msgid "Issue Date" msgstr "" -#: order/models.py:241 +#: order/models.py:244 msgid "Date order was issued" msgstr "" -#: order/models.py:246 +#: order/models.py:249 msgid "Target Delivery Date" msgstr "" -#: order/models.py:247 +#: order/models.py:250 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:253 +#: order/models.py:256 msgid "Date order was completed" msgstr "" -#: order/models.py:282 +#: order/models.py:285 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:411 -msgid "Quantity must be an integer" -msgstr "" - -#: order/models.py:415 +#: order/models.py:420 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:548 +#: order/models.py:553 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer Reference " msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer order reference code" msgstr "" -#: order/models.py:559 +#: order/models.py:564 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:562 order/models.py:1028 +#: order/models.py:567 order/models.py:1048 #: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:569 +#: order/models.py:574 msgid "shipped by" msgstr "" -#: order/models.py:635 +#: order/models.py:640 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:639 +#: order/models.py:644 msgid "Only a pending order can be marked as complete" msgstr "" -#: order/models.py:642 +#: order/models.py:647 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:645 +#: order/models.py:650 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:797 +#: order/models.py:806 msgid "Item quantity" msgstr "" -#: order/models.py:803 +#: order/models.py:812 msgid "Line item reference" msgstr "" -#: order/models.py:805 +#: order/models.py:814 msgid "Line item notes" msgstr "" -#: order/models.py:835 order/models.py:926 order/models.py:1022 -#: templates/js/translated/order.js:1820 +#: order/models.py:842 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:855 order/models.py:946 order/models.py:1042 +#: templates/js/translated/order.js:1820 templates/js/translated/stock.js:2271 msgid "Order" msgstr "" -#: order/models.py:836 order/templates/order/order_base.html:9 +#: order/models.py:856 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:352 -#: templates/js/translated/order.js:801 templates/js/translated/part.js:832 -#: templates/js/translated/stock.js:1725 templates/js/translated/stock.js:2433 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:838 +#: templates/js/translated/stock.js:1733 templates/js/translated/stock.js:2591 msgid "Purchase Order" msgstr "Đơn hàng" -#: order/models.py:857 +#: order/models.py:877 msgid "Supplier part" msgstr "" -#: order/models.py:864 order/templates/order/order_base.html:163 +#: order/models.py:884 order/templates/order/order_base.html:163 #: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 -#: templates/js/translated/part.js:904 templates/js/translated/part.js:930 +#: templates/js/translated/part.js:910 templates/js/translated/part.js:937 #: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:865 +#: order/models.py:885 msgid "Number of items received" msgstr "" -#: order/models.py:872 part/templates/part/prices.html:176 stock/models.py:606 +#: order/models.py:892 part/templates/part/prices.html:176 stock/models.py:608 #: stock/serializers.py:170 stock/templates/stock/item_base.html:359 -#: templates/js/translated/stock.js:1779 +#: templates/js/translated/stock.js:1787 msgid "Purchase Price" msgstr "Giá mua" -#: order/models.py:873 +#: order/models.py:893 msgid "Unit purchase price" msgstr "" -#: order/models.py:881 +#: order/models.py:901 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:936 part/templates/part/part_pricing.html:112 +#: order/models.py:956 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "" -#: order/models.py:937 +#: order/models.py:957 msgid "Unit sale price" msgstr "" -#: order/models.py:942 +#: order/models.py:962 msgid "Shipped quantity" msgstr "" -#: order/models.py:1029 +#: order/models.py:1049 msgid "Date of shipment" msgstr "" -#: order/models.py:1036 +#: order/models.py:1056 msgid "Checked By" msgstr "" -#: order/models.py:1037 +#: order/models.py:1057 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1045 +#: order/models.py:1065 msgid "Shipment number" msgstr "" -#: order/models.py:1052 +#: order/models.py:1072 msgid "Shipment notes" msgstr "" -#: order/models.py:1059 +#: order/models.py:1079 msgid "Tracking Number" msgstr "" -#: order/models.py:1060 +#: order/models.py:1080 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1070 +#: order/models.py:1090 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1073 +#: order/models.py:1093 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1149 order/models.py:1151 +#: order/models.py:1171 order/models.py:1173 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1155 +#: order/models.py:1177 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1157 +#: order/models.py:1179 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1160 +#: order/models.py:1182 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1164 +#: order/models.py:1186 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:1170 order/serializers.py:734 +#: order/models.py:1192 order/serializers.py:740 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1173 +#: order/models.py:1195 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1174 +#: order/models.py:1196 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1182 +#: order/models.py:1204 msgid "Line" msgstr "" -#: order/models.py:1190 order/serializers.py:825 order/serializers.py:953 -#: templates/js/translated/model_renderers.js:251 +#: order/models.py:1212 order/serializers.py:831 order/serializers.py:959 +#: templates/js/translated/model_renderers.js:285 msgid "Shipment" msgstr "" -#: order/models.py:1191 +#: order/models.py:1213 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1203 +#: order/models.py:1225 msgid "Item" msgstr "" -#: order/models.py:1204 +#: order/models.py:1226 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1207 +#: order/models.py:1229 msgid "Enter stock allocation quantity" msgstr "" @@ -3319,7 +3408,7 @@ msgstr "" msgid "Purchase price currency" msgstr "" -#: order/serializers.py:211 order/serializers.py:790 +#: order/serializers.py:211 order/serializers.py:796 msgid "Line Item" msgstr "" @@ -3355,39 +3444,39 @@ msgstr "" msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:587 msgid "Sale price currency" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:655 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:699 order/serializers.py:802 +#: order/serializers.py:705 order/serializers.py:808 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:721 +#: order/serializers.py:727 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:815 +#: order/serializers.py:821 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:839 order/serializers.py:964 +#: order/serializers.py:845 order/serializers.py:970 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:842 order/serializers.py:967 +#: order/serializers.py:848 order/serializers.py:973 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:894 +#: order/serializers.py:900 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:910 msgid "The following serial numbers are already allocated" msgstr "" @@ -3441,6 +3530,7 @@ msgstr "" #: order/templates/order/order_base.html:94 #: order/templates/order/sales_order_base.html:89 +#: templates/js/translated/stock.js:2327 msgid "Order Status" msgstr "" @@ -3538,7 +3628,7 @@ msgstr "" #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/build.js:300 templates/js/translated/build.js:1311 #: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 -#: templates/js/translated/stock.js:593 templates/js/translated/stock.js:761 +#: templates/js/translated/stock.js:601 templates/js/translated/stock.js:769 msgid "Remove row" msgstr "" @@ -3729,7 +3819,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:48 -#: templates/js/translated/bom.js:720 templates/js/translated/build.js:1243 +#: templates/js/translated/bom.js:732 templates/js/translated/build.js:1243 msgid "Actions" msgstr "" @@ -3832,447 +3922,448 @@ msgstr "" msgid "This field is required" msgstr "" -#: part/bom.py:125 part/models.py:81 part/models.py:847 +#: part/bom.py:125 part/models.py:83 part/models.py:849 #: part/templates/part/category.html:108 part/templates/part/part_base.html:338 msgid "Default Location" msgstr "" -#: part/bom.py:126 part/templates/part/part_base.html:185 +#: part/bom.py:126 templates/email/low_stock_notification.html:17 +msgid "Total Stock" +msgstr "" + +#: part/bom.py:127 part/templates/part/part_base.html:185 msgid "Available Stock" msgstr "" -#: part/forms.py:85 +#: part/bom.py:128 part/templates/part/part_base.html:203 +#: templates/js/translated/part.js:1301 +msgid "On Order" +msgstr "" + +#: part/forms.py:84 msgid "Select part category" msgstr "" -#: part/forms.py:122 +#: part/forms.py:121 msgid "Add parameter template to same level categories" msgstr "" -#: part/forms.py:126 +#: part/forms.py:125 msgid "Add parameter template to all categories" msgstr "" -#: part/forms.py:146 +#: part/forms.py:145 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 +#: part/models.py:84 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:95 part/models.py:2526 part/templates/part/category.html:15 +#: part/models.py:97 part/models.py:2533 part/templates/part/category.html:15 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:96 part/templates/part/category.html:128 -#: templates/InvenTree/search.html:95 templates/stats.html:84 +#: part/models.py:98 part/templates/part/category.html:128 +#: templates/InvenTree/search.html:95 templates/stats.html:96 #: users/models.py:40 msgid "Part Categories" msgstr "" -#: part/models.py:358 part/templates/part/cat_link.html:3 +#: part/models.py:360 part/templates/part/cat_link.html:3 #: part/templates/part/category.html:17 part/templates/part/category.html:133 #: part/templates/part/category.html:153 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82 #: templates/InvenTree/settings/sidebar.html:37 -#: templates/js/translated/part.js:1656 templates/navbar.html:21 -#: templates/stats.html:80 templates/stats.html:89 users/models.py:41 +#: templates/js/translated/part.js:1663 templates/navbar.html:21 +#: templates/stats.html:92 templates/stats.html:101 users/models.py:41 msgid "Parts" msgstr "Nguyên liệu" -#: part/models.py:450 +#: part/models.py:452 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:500 part/models.py:512 +#: part/models.py:502 part/models.py:514 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:642 +#: part/models.py:644 msgid "Next available serial numbers are" msgstr "" -#: part/models.py:646 +#: part/models.py:648 msgid "Next available serial number is" msgstr "" -#: part/models.py:651 +#: part/models.py:653 msgid "Most recent serial number is" msgstr "" -#: part/models.py:746 +#: part/models.py:748 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:771 +#: part/models.py:773 msgid "Part name" msgstr "" -#: part/models.py:778 +#: part/models.py:780 msgid "Is Template" msgstr "" -#: part/models.py:779 +#: part/models.py:781 msgid "Is this part a template part?" msgstr "" -#: part/models.py:789 +#: part/models.py:791 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:790 +#: part/models.py:792 msgid "Variant Of" msgstr "" -#: part/models.py:796 +#: part/models.py:798 msgid "Part description" msgstr "" -#: part/models.py:801 part/templates/part/category.html:86 +#: part/models.py:803 part/templates/part/category.html:86 #: part/templates/part/part_base.html:302 msgid "Keywords" msgstr "" -#: part/models.py:802 +#: part/models.py:804 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:809 part/models.py:2276 part/models.py:2525 +#: part/models.py:811 part/models.py:2283 part/models.py:2532 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:183 -#: templates/js/translated/part.js:1261 +#: templates/InvenTree/settings/settings.html:186 +#: templates/js/translated/part.js:1268 msgid "Category" msgstr "" -#: part/models.py:810 +#: part/models.py:812 msgid "Part category" msgstr "" -#: part/models.py:815 part/templates/part/part_base.html:274 -#: templates/js/translated/part.js:612 templates/js/translated/part.js:1214 -#: templates/js/translated/stock.js:1552 +#: part/models.py:817 part/templates/part/part_base.html:274 +#: templates/js/translated/part.js:618 templates/js/translated/part.js:1221 +#: templates/js/translated/stock.js:1560 msgid "IPN" msgstr "" -#: part/models.py:816 +#: part/models.py:818 msgid "Internal Part Number" msgstr "" -#: part/models.py:822 +#: part/models.py:824 msgid "Part revision or version number" msgstr "" -#: part/models.py:823 part/templates/part/part_base.html:281 -#: report/models.py:200 templates/js/translated/part.js:616 +#: part/models.py:825 part/templates/part/part_base.html:281 +#: report/models.py:200 templates/js/translated/part.js:622 msgid "Revision" msgstr "" -#: part/models.py:845 +#: part/models.py:847 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:892 part/templates/part/part_base.html:347 +#: part/models.py:894 part/templates/part/part_base.html:347 msgid "Default Supplier" msgstr "" -#: part/models.py:893 +#: part/models.py:895 msgid "Default supplier part" msgstr "" -#: part/models.py:900 +#: part/models.py:902 msgid "Default Expiry" msgstr "" -#: part/models.py:901 +#: part/models.py:903 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:906 part/templates/part/part_base.html:196 +#: part/models.py:908 part/templates/part/part_base.html:196 msgid "Minimum Stock" msgstr "" -#: part/models.py:907 +#: part/models.py:909 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:914 +#: part/models.py:916 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:920 +#: part/models.py:922 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:926 +#: part/models.py:928 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:932 +#: part/models.py:934 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:937 +#: part/models.py:939 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:942 +#: part/models.py:944 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:946 plugin/models.py:46 -#: templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:295 -#: templates/js/translated/table_filters.js:417 -msgid "Active" -msgstr "" - -#: part/models.py:947 +#: part/models.py:949 msgid "Is this part active?" msgstr "" -#: part/models.py:952 +#: part/models.py:954 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:957 +#: part/models.py:959 msgid "Part notes - supports Markdown formatting" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "BOM checksum" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:963 +#: part/models.py:965 msgid "BOM checked by" msgstr "" -#: part/models.py:965 +#: part/models.py:967 msgid "BOM checked date" msgstr "" -#: part/models.py:969 +#: part/models.py:971 msgid "Creation User" msgstr "" -#: part/models.py:1781 +#: part/models.py:1783 msgid "Sell multiple" msgstr "" -#: part/models.py:2326 +#: part/models.py:2333 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2343 +#: part/models.py:2350 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2363 templates/js/translated/part.js:1707 -#: templates/js/translated/stock.js:1276 +#: part/models.py:2370 templates/js/translated/part.js:1714 +#: templates/js/translated/stock.js:1284 msgid "Test Name" msgstr "" -#: part/models.py:2364 +#: part/models.py:2371 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2369 +#: part/models.py:2376 msgid "Test Description" msgstr "" -#: part/models.py:2370 +#: part/models.py:2377 msgid "Enter description for this test" msgstr "" -#: part/models.py:2375 templates/js/translated/part.js:1716 +#: part/models.py:2382 templates/js/translated/part.js:1723 #: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" -#: part/models.py:2376 +#: part/models.py:2383 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2381 templates/js/translated/part.js:1724 +#: part/models.py:2388 templates/js/translated/part.js:1731 msgid "Requires Value" msgstr "" -#: part/models.py:2382 +#: part/models.py:2389 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2387 templates/js/translated/part.js:1731 +#: part/models.py:2394 templates/js/translated/part.js:1738 msgid "Requires Attachment" msgstr "" -#: part/models.py:2388 +#: part/models.py:2395 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2399 +#: part/models.py:2406 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2435 +#: part/models.py:2442 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2443 +#: part/models.py:2450 msgid "Parameter Name" msgstr "" -#: part/models.py:2450 +#: part/models.py:2457 msgid "Parameter Units" msgstr "" -#: part/models.py:2480 +#: part/models.py:2487 msgid "Parent Part" msgstr "" -#: part/models.py:2482 part/models.py:2531 part/models.py:2532 -#: templates/InvenTree/settings/settings.html:178 +#: part/models.py:2489 part/models.py:2538 part/models.py:2539 +#: templates/InvenTree/settings/settings.html:181 msgid "Parameter Template" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Data" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Parameter Value" msgstr "" -#: part/models.py:2536 templates/InvenTree/settings/settings.html:187 +#: part/models.py:2543 templates/InvenTree/settings/settings.html:190 msgid "Default Value" msgstr "" -#: part/models.py:2537 +#: part/models.py:2544 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2614 +#: part/models.py:2621 msgid "Select parent part" msgstr "" -#: part/models.py:2622 +#: part/models.py:2629 msgid "Sub part" msgstr "" -#: part/models.py:2623 +#: part/models.py:2630 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2629 +#: part/models.py:2636 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2631 templates/js/translated/bom.js:566 -#: templates/js/translated/bom.js:640 +#: part/models.py:2638 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:652 #: templates/js/translated/table_filters.js:92 msgid "Optional" msgstr "" -#: part/models.py:2631 +#: part/models.py:2638 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2634 +#: part/models.py:2641 msgid "Overage" msgstr "" -#: part/models.py:2635 +#: part/models.py:2642 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2638 +#: part/models.py:2645 msgid "BOM item reference" msgstr "" -#: part/models.py:2641 +#: part/models.py:2648 msgid "BOM item notes" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "Checksum" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "BOM line checksum" msgstr "" -#: part/models.py:2647 templates/js/translated/bom.js:657 +#: part/models.py:2654 templates/js/translated/bom.js:669 #: templates/js/translated/table_filters.js:68 #: templates/js/translated/table_filters.js:88 msgid "Inherited" msgstr "" -#: part/models.py:2648 +#: part/models.py:2655 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2653 templates/js/translated/bom.js:649 +#: part/models.py:2660 templates/js/translated/bom.js:661 msgid "Allow Variants" msgstr "" -#: part/models.py:2654 +#: part/models.py:2661 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2739 stock/models.py:355 +#: part/models.py:2746 stock/models.py:357 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2748 part/models.py:2750 +#: part/models.py:2755 part/models.py:2757 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2879 +#: part/models.py:2886 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2901 +#: part/models.py:2908 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2913 +#: part/models.py:2920 msgid "Parent BOM item" msgstr "" -#: part/models.py:2921 +#: part/models.py:2928 msgid "Substitute part" msgstr "" -#: part/models.py:2932 +#: part/models.py:2939 msgid "Part 1" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Part 2" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Select Related Part" msgstr "" -#: part/models.py:2968 +#: part/models.py:2975 msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique" msgstr "" @@ -4327,7 +4418,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:253 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:270 msgid "BOM actions" msgstr "" @@ -4499,7 +4590,7 @@ msgstr "" msgid "Import Parts" msgstr "" -#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:375 +#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:348 msgid "Duplicate Part" msgstr "" @@ -4533,145 +4624,149 @@ msgid "Showing stock for all variants of %(full_name)s" msgstr "" #: part/templates/part/detail.html:43 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/detail.html:60 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:48 +#: part/templates/part/detail.html:65 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:105 +#: part/templates/part/detail.html:122 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:142 +#: part/templates/part/detail.html:159 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:146 +#: part/templates/part/detail.html:163 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:147 +#: part/templates/part/detail.html:164 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:174 +#: part/templates/part/detail.html:191 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:45 +#: part/templates/part/detail.html:228 part/templates/part/part_sidebar.html:49 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:215 part/templates/part/detail.html:216 +#: part/templates/part/detail.html:232 part/templates/part/detail.html:233 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:253 part/templates/part/part_sidebar.html:17 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:241 +#: part/templates/part/detail.html:258 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:245 templates/js/translated/bom.js:70 +#: part/templates/part/detail.html:262 templates/js/translated/bom.js:70 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:247 +#: part/templates/part/detail.html:264 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:257 +#: part/templates/part/detail.html:274 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:259 templates/js/translated/part.js:272 +#: part/templates/part/detail.html:276 templates/js/translated/part.js:272 msgid "Copy BOM" msgstr "" -#: part/templates/part/detail.html:261 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:283 msgid "New BOM Item" msgstr "" -#: part/templates/part/detail.html:267 +#: part/templates/part/detail.html:284 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:280 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:314 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:322 +#: part/templates/part/detail.html:339 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:332 +#: part/templates/part/detail.html:349 msgid "Part Suppliers" msgstr "" -#: part/templates/part/detail.html:360 +#: part/templates/part/detail.html:377 msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:393 msgid "Delete manufacturer parts" msgstr "" -#: part/templates/part/detail.html:558 +#: part/templates/part/detail.html:575 msgid "Delete selected BOM items?" msgstr "" -#: part/templates/part/detail.html:559 +#: part/templates/part/detail.html:576 msgid "All selected BOM items will be deleted" msgstr "" -#: part/templates/part/detail.html:608 +#: part/templates/part/detail.html:625 msgid "Create BOM Item" msgstr "" -#: part/templates/part/detail.html:652 +#: part/templates/part/detail.html:682 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:660 +#: part/templates/part/detail.html:690 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:755 +#: part/templates/part/detail.html:785 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:812 +#: part/templates/part/detail.html:842 msgid "Edit Part Notes" msgstr "" -#: part/templates/part/detail.html:925 +#: part/templates/part/detail.html:955 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:937 +#: part/templates/part/detail.html:967 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:949 +#: part/templates/part/detail.html:979 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1038 +#: part/templates/part/detail.html:1068 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -4786,7 +4881,7 @@ msgstr "" #: templates/js/translated/company.js:508 #: templates/js/translated/company.js:765 #: templates/js/translated/model_renderers.js:175 -#: templates/js/translated/part.js:527 templates/js/translated/part.js:604 +#: templates/js/translated/part.js:533 templates/js/translated/part.js:610 msgid "Inactive" msgstr "" @@ -4805,10 +4900,6 @@ msgstr "" msgid "In Stock" msgstr "" -#: part/templates/part/part_base.html:203 templates/js/translated/part.js:1294 -msgid "On Order" -msgstr "" - #: part/templates/part/part_base.html:210 templates/InvenTree/index.html:178 msgid "Required for Build Orders" msgstr "" @@ -4821,12 +4912,12 @@ msgstr "" msgid "Allocated to Orders" msgstr "" -#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:678 +#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:690 msgid "Can Build" msgstr "" -#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1125 -#: templates/js/translated/part.js:1298 +#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1132 +#: templates/js/translated/part.js:1305 msgid "Building" msgstr "" @@ -4878,7 +4969,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:40 -#: templates/js/translated/bom.js:632 +#: templates/js/translated/bom.js:644 msgid "No supplier pricing available" msgstr "" @@ -4920,7 +5011,12 @@ msgstr "" msgid "Used In" msgstr "" -#: part/templates/part/part_sidebar.html:41 +#: part/templates/part/part_sidebar.html:31 +#: stock/templates/stock/stock_sidebar.html:8 +msgid "Allocations" +msgstr "" + +#: part/templates/part/part_sidebar.html:45 msgid "Test Templates" msgstr "" @@ -4993,7 +5089,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:155 templates/js/translated/bom.js:626 +#: part/templates/part/prices.html:155 templates/js/translated/bom.js:638 msgid "Supplier Cost" msgstr "" @@ -5015,7 +5111,7 @@ msgstr "" msgid "Internal Cost" msgstr "" -#: part/templates/part/prices.html:215 part/views.py:1690 +#: part/templates/part/prices.html:215 part/views.py:1699 msgid "Add Internal Price Break" msgstr "" @@ -5035,9 +5131,9 @@ msgstr "" msgid "Set category for the following parts" msgstr "" -#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:588 -#: templates/js/translated/part.js:491 templates/js/translated/part.js:1115 -#: templates/js/translated/part.js:1302 +#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:600 +#: templates/js/translated/part.js:497 templates/js/translated/part.js:1122 +#: templates/js/translated/part.js:1309 msgid "No Stock" msgstr "" @@ -5054,116 +5150,116 @@ msgstr "" msgid "Create a new variant of template '%(full_name)s'." msgstr "" -#: part/templatetags/inventree_extras.py:116 +#: part/templatetags/inventree_extras.py:125 msgid "Unknown database" msgstr "" -#: part/views.py:92 +#: part/views.py:93 msgid "Set Part Category" msgstr "" -#: part/views.py:142 +#: part/views.py:143 #, python-brace-format msgid "Set category for {n} parts" msgstr "" -#: part/views.py:214 +#: part/views.py:215 msgid "Match References" msgstr "" -#: part/views.py:502 +#: part/views.py:511 msgid "None" msgstr "" -#: part/views.py:561 +#: part/views.py:570 msgid "Part QR Code" msgstr "" -#: part/views.py:663 +#: part/views.py:672 msgid "Select Part Image" msgstr "" -#: part/views.py:689 +#: part/views.py:698 msgid "Updated part image" msgstr "" -#: part/views.py:692 +#: part/views.py:701 msgid "Part image not found" msgstr "" -#: part/views.py:766 +#: part/views.py:775 msgid "Match Parts" msgstr "" -#: part/views.py:1101 +#: part/views.py:1110 msgid "Export Bill of Materials" msgstr "" -#: part/views.py:1150 +#: part/views.py:1159 msgid "Confirm Part Deletion" msgstr "" -#: part/views.py:1157 +#: part/views.py:1166 msgid "Part was deleted" msgstr "" -#: part/views.py:1166 +#: part/views.py:1175 msgid "Part Pricing" msgstr "" -#: part/views.py:1315 +#: part/views.py:1324 msgid "Create Part Parameter Template" msgstr "" -#: part/views.py:1325 +#: part/views.py:1334 msgid "Edit Part Parameter Template" msgstr "" -#: part/views.py:1332 +#: part/views.py:1341 msgid "Delete Part Parameter Template" msgstr "" -#: part/views.py:1391 templates/js/translated/part.js:315 +#: part/views.py:1400 templates/js/translated/part.js:315 msgid "Edit Part Category" msgstr "" -#: part/views.py:1429 +#: part/views.py:1438 msgid "Delete Part Category" msgstr "" -#: part/views.py:1435 +#: part/views.py:1444 msgid "Part category was deleted" msgstr "" -#: part/views.py:1444 +#: part/views.py:1453 msgid "Create Category Parameter Template" msgstr "" -#: part/views.py:1545 +#: part/views.py:1554 msgid "Edit Category Parameter Template" msgstr "" -#: part/views.py:1601 +#: part/views.py:1610 msgid "Delete Category Parameter Template" msgstr "" -#: part/views.py:1623 +#: part/views.py:1632 msgid "Added new price break" msgstr "" -#: part/views.py:1699 +#: part/views.py:1708 msgid "Edit Internal Price Break" msgstr "" -#: part/views.py:1707 +#: part/views.py:1716 msgid "Delete Internal Price Break" msgstr "" -#: plugin/integration.py:124 +#: plugin/integration.py:138 msgid "No author found" msgstr "" -#: plugin/integration.py:136 +#: plugin/integration.py:152 msgid "No date found" msgstr "" @@ -5191,7 +5287,7 @@ msgstr "" msgid "Is the plugin active" msgstr "" -#: plugin/models.py:195 +#: plugin/models.py:199 msgid "Plugin" msgstr "" @@ -5357,12 +5453,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:517 stock/templates/stock/item_base.html:156 +#: stock/models.py:519 stock/templates/stock/item_base.html:156 #: templates/js/translated/build.js:293 templates/js/translated/build.js:697 #: templates/js/translated/build.js:1073 #: templates/js/translated/model_renderers.js:95 #: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 -#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:415 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:423 msgid "Serial Number" msgstr "" @@ -5371,19 +5467,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1948 +#: stock/models.py:1976 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1954 +#: stock/models.py:1982 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin.html:50 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2367 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2525 msgid "Date" msgstr "" @@ -5396,23 +5492,27 @@ msgid "Fail" msgstr "" #: report/templates/report/inventree_test_report_base.html:123 -#: stock/templates/stock/stock_sidebar.html:12 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:578 templates/js/translated/stock.js:748 -#: templates/js/translated/stock.js:2627 +#: templates/js/translated/stock.js:586 templates/js/translated/stock.js:756 +#: templates/js/translated/stock.js:2785 msgid "Serial" msgstr "" -#: stock/api.py:478 +#: stock/api.py:476 msgid "Quantity is required" msgstr "" -#: stock/forms.py:77 stock/forms.py:251 stock/models.py:574 +#: stock/api.py:483 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:576 #: stock/templates/stock/item_base.html:193 -#: templates/js/translated/stock.js:1701 +#: templates/js/translated/stock.js:1709 msgid "Expiry Date" msgstr "" @@ -5460,228 +5560,228 @@ msgstr "" msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:611 +#: stock/models.py:62 stock/models.py:613 #: stock/templates/stock/item_base.html:416 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:612 +#: stock/models.py:63 stock/models.py:614 msgid "Select Owner" msgstr "" -#: stock/models.py:336 +#: stock/models.py:338 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:372 +#: stock/models.py:374 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:382 stock/models.py:391 +#: stock/models.py:384 stock/models.py:393 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:383 +#: stock/models.py:385 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:405 +#: stock/models.py:407 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:411 +#: stock/models.py:413 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:418 +#: stock/models.py:420 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:461 +#: stock/models.py:463 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:470 +#: stock/models.py:472 msgid "Base part" msgstr "" -#: stock/models.py:478 +#: stock/models.py:480 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:484 stock/templates/stock/location.html:16 +#: stock/models.py:486 stock/templates/stock/location.html:16 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Kho hàng" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:494 +#: stock/models.py:496 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:500 stock/templates/stock/item_base.html:298 +#: stock/models.py:502 stock/templates/stock/item_base.html:298 msgid "Installed In" msgstr "" -#: stock/models.py:503 +#: stock/models.py:505 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:519 +#: stock/models.py:521 msgid "Serial number for this item" msgstr "" -#: stock/models.py:533 +#: stock/models.py:535 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:537 +#: stock/models.py:539 msgid "Stock Quantity" msgstr "" -#: stock/models.py:546 +#: stock/models.py:548 msgid "Source Build" msgstr "" -#: stock/models.py:548 +#: stock/models.py:550 msgid "Build for this stock item" msgstr "" -#: stock/models.py:559 +#: stock/models.py:561 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:562 +#: stock/models.py:564 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:568 +#: stock/models.py:570 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:575 +#: stock/models.py:577 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete on deplete" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:598 stock/templates/stock/item.html:111 +#: stock/models.py:600 stock/templates/stock/item.html:128 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:607 +#: stock/models.py:609 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1096 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1074 +#: stock/models.py:1102 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1080 +#: stock/models.py:1108 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1083 +#: stock/models.py:1111 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1086 +#: stock/models.py:1114 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1093 +#: stock/models.py:1121 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1164 +#: stock/models.py:1192 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1195 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1170 +#: stock/models.py:1198 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1173 +#: stock/models.py:1201 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1176 +#: stock/models.py:1204 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1179 +#: stock/models.py:1207 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1186 stock/serializers.py:774 +#: stock/models.py:1214 stock/serializers.py:775 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1190 +#: stock/models.py:1218 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1222 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1198 +#: stock/models.py:1226 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1369 +#: stock/models.py:1397 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1868 +#: stock/models.py:1896 msgid "Entry notes" msgstr "" -#: stock/models.py:1925 +#: stock/models.py:1953 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1931 +#: stock/models.py:1959 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1949 +#: stock/models.py:1977 msgid "Test name" msgstr "" -#: stock/models.py:1955 templates/js/translated/table_filters.js:271 +#: stock/models.py:1983 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1961 +#: stock/models.py:1989 msgid "Test output value" msgstr "" -#: stock/models.py:1968 +#: stock/models.py:1996 msgid "Test result attachment" msgstr "" -#: stock/models.py:1974 +#: stock/models.py:2002 msgid "Test notes" msgstr "" @@ -5706,7 +5806,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:326 stock/serializers.py:731 stock/serializers.py:972 +#: stock/serializers.py:326 stock/serializers.py:732 stock/serializers.py:973 msgid "Destination stock location" msgstr "" @@ -5718,63 +5818,63 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:589 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:592 +#: stock/serializers.py:593 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:597 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:626 +#: stock/serializers.py:627 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:632 +#: stock/serializers.py:633 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:640 +#: stock/serializers.py:641 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:650 stock/serializers.py:880 +#: stock/serializers.py:651 stock/serializers.py:881 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:738 +#: stock/serializers.py:739 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:743 +#: stock/serializers.py:744 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:744 +#: stock/serializers.py:745 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:749 +#: stock/serializers.py:750 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:750 +#: stock/serializers.py:751 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:760 +#: stock/serializers.py:761 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:842 +#: stock/serializers.py:843 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:870 +#: stock/serializers.py:871 msgid "Stock transaction notes" msgstr "" @@ -5787,47 +5887,51 @@ msgid "New Entry" msgstr "" #: stock/templates/stock/item.html:48 -msgid "Child Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:55 -msgid "This stock item does not have any child items" +msgid "Stock Item Allocations" msgstr "" #: stock/templates/stock/item.html:64 -#: stock/templates/stock/stock_sidebar.html:8 -msgid "Test Data" -msgstr "" - -#: stock/templates/stock/item.html:68 stock/templates/stock/item_base.html:57 -msgid "Test Report" +msgid "Child Stock Items" msgstr "" #: stock/templates/stock/item.html:72 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item.html:81 +#: stock/templates/stock/stock_sidebar.html:12 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:57 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item.html:89 msgid "Delete Test Data" msgstr "" -#: stock/templates/stock/item.html:76 +#: stock/templates/stock/item.html:93 msgid "Add Test Data" msgstr "" -#: stock/templates/stock/item.html:133 +#: stock/templates/stock/item.html:150 msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:482 +#: stock/templates/stock/item.html:154 stock/views.py:482 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:279 stock/templates/stock/item.html:304 +#: stock/templates/stock/item.html:309 stock/templates/stock/item.html:334 msgid "Add Test Result" msgstr "" -#: stock/templates/stock/item.html:324 +#: stock/templates/stock/item.html:354 msgid "Edit Test Result" msgstr "" -#: stock/templates/stock/item.html:338 +#: stock/templates/stock/item.html:368 msgid "Delete Test Result" msgstr "" @@ -5952,7 +6056,7 @@ msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:206 -#: templates/js/translated/stock.js:1714 +#: templates/js/translated/stock.js:1722 msgid "Last Updated" msgstr "" @@ -6111,7 +6215,7 @@ msgid "Sublocations" msgstr "" #: stock/templates/stock/location.html:146 templates/InvenTree/search.html:164 -#: templates/stats.html:97 users/models.py:42 +#: templates/stats.html:109 users/models.py:42 msgid "Stock Locations" msgstr "" @@ -6135,7 +6239,7 @@ msgstr "" msgid "Stock Tracking" msgstr "" -#: stock/templates/stock/stock_sidebar.html:16 +#: stock/templates/stock/stock_sidebar.html:20 msgid "Child Items" msgstr "" @@ -6164,7 +6268,7 @@ msgstr "" msgid "Are you sure you want to delete this stock tracking entry?" msgstr "" -#: stock/views.py:162 +#: stock/views.py:162 templates/js/translated/stock.js:139 msgid "Edit Stock Location" msgstr "" @@ -6204,7 +6308,7 @@ msgstr "" msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:727 templates/js/translated/stock.js:1066 +#: stock/views.py:727 templates/js/translated/stock.js:1074 msgid "Confirm stock adjustment" msgstr "" @@ -6212,7 +6316,7 @@ msgstr "" msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:324 +#: stock/views.py:760 templates/js/translated/stock.js:332 msgid "Edit Stock Item" msgstr "" @@ -6224,7 +6328,7 @@ msgstr "" msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1153 templates/js/translated/stock.js:304 +#: stock/views.py:1153 templates/js/translated/stock.js:312 msgid "Duplicate Stock Item" msgstr "" @@ -6268,6 +6372,18 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/500.html:5 templates/500.html:11 +msgid "Internal Server Error" +msgstr "" + +#: templates/500.html:14 +msgid "The InvenTree server raised an internal error" +msgstr "" + +#: templates/500.html:15 +msgid "Refer to the error log in the admin interface for further details" +msgstr "" + #: templates/503.html:10 templates/503.html:35 msgid "Site is in Maintenance" msgstr "" @@ -6390,7 +6506,7 @@ msgid "Signup" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:113 msgid "Settings" msgstr "Cài đặt" @@ -6431,43 +6547,43 @@ msgstr "" msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:32 +#: templates/InvenTree/settings/plugin.html:33 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:37 +#: templates/InvenTree/settings/plugin.html:38 #: templates/js/translated/plugin.js:15 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: templates/InvenTree/settings/plugin.html:47 templates/navbar.html:111 #: users/models.py:39 msgid "Admin" msgstr "Quản trị" -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:49 #: templates/InvenTree/settings/plugin_settings.html:28 msgid "Author" msgstr "" -#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin_settings.html:43 msgid "Version" msgstr "" -#: templates/InvenTree/settings/plugin.html:91 +#: templates/InvenTree/settings/plugin.html:92 msgid "Inactive plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:114 +#: templates/InvenTree/settings/plugin.html:115 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:123 +#: templates/InvenTree/settings/plugin.html:124 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:125 +#: templates/InvenTree/settings/plugin.html:126 msgid "Message" msgstr "" @@ -6555,37 +6671,37 @@ msgstr "" msgid "Edit setting" msgstr "" -#: templates/InvenTree/settings/settings.html:75 +#: templates/InvenTree/settings/settings.html:78 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:77 +#: templates/InvenTree/settings/settings.html:80 msgid "Edit Global Setting" msgstr "Chỉnh sửa cài đặt toàn cục" -#: templates/InvenTree/settings/settings.html:79 +#: templates/InvenTree/settings/settings.html:82 msgid "Edit User Setting" msgstr "Chỉnh sửa cài đặt người dùng" -#: templates/InvenTree/settings/settings.html:168 +#: templates/InvenTree/settings/settings.html:171 msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:190 -#: templates/InvenTree/settings/settings.html:289 +#: templates/InvenTree/settings/settings.html:193 +#: templates/InvenTree/settings/settings.html:292 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/settings.html:191 -#: templates/InvenTree/settings/settings.html:290 +#: templates/InvenTree/settings/settings.html:194 +#: templates/InvenTree/settings/settings.html:293 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:272 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/settings.html:273 +#: templates/InvenTree/settings/settings.html:276 msgid "ID" msgstr "" @@ -6763,124 +6879,105 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:219 +#: templates/InvenTree/settings/user.html:220 +msgid "Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:226 +msgid "Log out active sessions (except this one)" +msgstr "" + +#: templates/InvenTree/settings/user.html:227 +msgid "Log Out Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:236 +msgid "unknown on unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:237 +msgid "unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:241 +msgid "IP Address" +msgstr "" + +#: templates/InvenTree/settings/user.html:242 +msgid "Device" +msgstr "" + +#: templates/InvenTree/settings/user.html:243 +msgid "Last Activity" +msgstr "" + +#: templates/InvenTree/settings/user.html:252 +#, python-format +msgid "%(time)s ago (this session)" +msgstr "" + +#: templates/InvenTree/settings/user.html:254 +#, python-format +msgid "%(time)s ago" +msgstr "" + +#: templates/InvenTree/settings/user.html:266 +msgid "Do you really want to remove the selected email address?" +msgstr "" + #: templates/InvenTree/settings/user_display.html:25 msgid "Theme Settings" msgstr "Thiết lập giao diện" -#: templates/InvenTree/settings/user.html:227 #: templates/InvenTree/settings/user_display.html:35 msgid "Select theme" msgstr "" -#: templates/InvenTree/settings/user.html:237 #: templates/InvenTree/settings/user_display.html:46 msgid "Set Theme" msgstr "" -#: templates/InvenTree/settings/user.html:246 #: templates/InvenTree/settings/user_display.html:54 msgid "Language Settings" msgstr "Thiết lập ngôn ngữ" -#: templates/InvenTree/settings/user.html:254 #: templates/InvenTree/settings/user_display.html:63 msgid "Select language" msgstr "" -#: templates/InvenTree/settings/user.html:270 #: templates/InvenTree/settings/user_display.html:79 #, python-format msgid "%(lang_translated)s%% translated" msgstr "" -#: templates/InvenTree/settings/user.html:272 #: templates/InvenTree/settings/user_display.html:81 msgid "No translations available" msgstr "" -#: templates/InvenTree/settings/user.html:279 #: templates/InvenTree/settings/user_display.html:88 msgid "Set Language" msgstr "" -#: templates/InvenTree/settings/user.html:281 #: templates/InvenTree/settings/user_display.html:91 msgid "Some languages are not complete" msgstr "" -#: templates/InvenTree/settings/user.html:283 #: templates/InvenTree/settings/user_display.html:93 msgid "Show only sufficent" msgstr "" -#: templates/InvenTree/settings/user.html:285 +#: templates/InvenTree/settings/user_display.html:95 +msgid "and hidden." +msgstr "" + #: templates/InvenTree/settings/user_display.html:95 msgid "Show them too" msgstr "" -#: templates/InvenTree/settings/user.html:292 #: templates/InvenTree/settings/user_display.html:101 msgid "Help the translation efforts!" msgstr "" -#: templates/InvenTree/settings/user.html:293 -#, python-format -msgid "Native language translation of the\n" -" InvenTree web application is community contributed via crowdin. Contributions are\n" -" welcomed and encouraged." -msgstr "" - -#: templates/InvenTree/settings/user.html:302 -msgid "Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:308 -msgid "Log out active sessions (except this one)" -msgstr "" - -#: templates/InvenTree/settings/user.html:309 -msgid "Log Out Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:318 -msgid "unknown on unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:319 -msgid "unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:323 -msgid "IP Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:324 -msgid "Device" -msgstr "" - -#: templates/InvenTree/settings/user.html:325 -msgid "Last Activity" -msgstr "" - -#: templates/InvenTree/settings/user.html:334 -#, python-format -msgid "%(time)s ago (this session)" -msgstr "" - -#: templates/InvenTree/settings/user.html:336 -#, python-format -msgid "%(time)s ago" -msgstr "" - -#: templates/InvenTree/settings/user.html:348 -msgid "Do you really want to remove the selected email address?" -msgstr "" - -#: templates/InvenTree/settings/user_display.html:95 -msgid "and hidden." -msgstr "" - #: templates/InvenTree/settings/user_display.html:102 #, python-format msgid "Native language translation of the InvenTree web application is community contributed via crowdin. Contributions are welcomed and encouraged." @@ -6899,9 +6996,9 @@ msgid "InvenTree Version Information" msgstr "" #: templates/about.html:11 templates/about.html:105 -#: templates/js/translated/bom.js:395 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:573 templates/js/translated/modals.js:667 -#: templates/js/translated/modals.js:970 templates/modals.html:15 +#: templates/js/translated/bom.js:407 templates/js/translated/modals.js:53 +#: templates/js/translated/modals.js:584 templates/js/translated/modals.js:678 +#: templates/js/translated/modals.js:983 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -7178,13 +7275,13 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1103 +#: templates/js/translated/bom.js:1117 msgid "Required Quantity" msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:579 templates/js/translated/build.js:1189 +#: templates/js/translated/bom.js:591 templates/js/translated/build.js:1189 #: templates/js/translated/build.js:1810 #: templates/js/translated/table_filters.js:178 msgid "Available" @@ -7208,10 +7305,6 @@ msgstr "" msgid "Click on the following link to view this part" msgstr "" -#: templates/email/low_stock_notification.html:17 -msgid "Total Stock" -msgstr "" - #: templates/email/low_stock_notification.html:19 msgid "Minimum Quantity" msgstr "" @@ -7232,11 +7325,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1040 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1053 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1041 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1054 msgid "No response from the InvenTree server" msgstr "" @@ -7248,27 +7341,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1063 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1051 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1064 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1068 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1056 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1069 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1073 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1061 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1074 msgid "The requested resource could not be located on the server" msgstr "" @@ -7280,11 +7373,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1065 +#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1078 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1066 +#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1079 msgid "Connection timeout while requesting data from server" msgstr "" @@ -7353,7 +7446,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "Invalid server response" msgstr "" @@ -7381,7 +7474,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1018 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1026 msgid "Remove stock item" msgstr "" @@ -7428,12 +7521,12 @@ msgid "Download BOM Template" msgstr "" #: templates/js/translated/bom.js:39 templates/js/translated/bom.js:73 -#: templates/js/translated/order.js:369 templates/js/translated/stock.js:510 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:518 msgid "Format" msgstr "" #: templates/js/translated/bom.js:40 templates/js/translated/bom.js:74 -#: templates/js/translated/order.js:370 templates/js/translated/stock.js:511 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:519 msgid "Select file format" msgstr "" @@ -7489,87 +7582,87 @@ msgstr "" msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:340 -msgid "Select and add a new variant item using the input below" +#: templates/js/translated/bom.js:352 +msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:351 +#: templates/js/translated/bom.js:363 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:357 +#: templates/js/translated/bom.js:369 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:396 +#: templates/js/translated/bom.js:408 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:397 +#: templates/js/translated/bom.js:409 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:516 +#: templates/js/translated/bom.js:528 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:520 templates/js/translated/build.js:1171 +#: templates/js/translated/bom.js:532 templates/js/translated/build.js:1171 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:525 +#: templates/js/translated/bom.js:537 msgid "Open subassembly" msgstr "" -#: templates/js/translated/bom.js:597 +#: templates/js/translated/bom.js:609 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:612 +#: templates/js/translated/bom.js:624 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:619 +#: templates/js/translated/bom.js:631 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:668 templates/js/translated/bom.js:757 +#: templates/js/translated/bom.js:680 templates/js/translated/bom.js:769 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:728 +#: templates/js/translated/bom.js:740 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:742 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:732 +#: templates/js/translated/bom.js:744 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:734 templates/js/translated/bom.js:908 +#: templates/js/translated/bom.js:746 templates/js/translated/bom.js:920 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:891 +#: templates/js/translated/bom.js:748 templates/js/translated/bom.js:903 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:830 templates/js/translated/build.js:915 +#: templates/js/translated/bom.js:842 templates/js/translated/build.js:915 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:886 +#: templates/js/translated/bom.js:898 msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:1086 templates/js/translated/build.js:1155 +#: templates/js/translated/bom.js:1100 templates/js/translated/build.js:1155 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1108 +#: templates/js/translated/bom.js:1122 msgid "Inherited from parent BOM" msgstr "" @@ -7725,9 +7818,9 @@ msgstr "" msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1206 -#: templates/js/translated/part.js:1617 templates/js/translated/stock.js:1512 -#: templates/js/translated/stock.js:2321 +#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:1624 templates/js/translated/stock.js:1520 +#: templates/js/translated/stock.js:2479 msgid "Select" msgstr "" @@ -7735,7 +7828,7 @@ msgstr "" msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2540 +#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2698 msgid "No user information" msgstr "" @@ -7808,34 +7901,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:500 -#: templates/js/translated/company.js:757 templates/js/translated/part.js:511 -#: templates/js/translated/part.js:596 +#: templates/js/translated/company.js:757 templates/js/translated/part.js:517 +#: templates/js/translated/part.js:602 msgid "Template part" msgstr "" #: templates/js/translated/company.js:504 -#: templates/js/translated/company.js:761 templates/js/translated/part.js:515 -#: templates/js/translated/part.js:600 +#: templates/js/translated/company.js:761 templates/js/translated/part.js:521 +#: templates/js/translated/part.js:606 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:631 templates/js/translated/part.js:690 +#: templates/js/translated/company.js:631 templates/js/translated/part.js:696 msgid "No parameters found" msgstr "" -#: templates/js/translated/company.js:668 templates/js/translated/part.js:732 +#: templates/js/translated/company.js:668 templates/js/translated/part.js:738 msgid "Edit parameter" msgstr "" -#: templates/js/translated/company.js:669 templates/js/translated/part.js:733 +#: templates/js/translated/company.js:669 templates/js/translated/part.js:739 msgid "Delete parameter" msgstr "" -#: templates/js/translated/company.js:688 templates/js/translated/part.js:750 +#: templates/js/translated/company.js:688 templates/js/translated/part.js:756 msgid "Edit Parameter" msgstr "" -#: templates/js/translated/company.js:699 templates/js/translated/part.js:762 +#: templates/js/translated/company.js:699 templates/js/translated/part.js:768 msgid "Delete Parameter" msgstr "" @@ -7844,12 +7937,12 @@ msgid "No supplier parts found" msgstr "" #: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:420 +#: templates/js/translated/filters.js:429 msgid "true" msgstr "" #: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:421 +#: templates/js/translated/filters.js:430 msgid "false" msgstr "" @@ -7869,7 +7962,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:329 +#: templates/js/translated/filters.js:338 msgid "Create filter" msgstr "" @@ -7898,20 +7991,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1080 templates/modals.html:19 +#: templates/js/translated/forms.js:1082 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1471 +#: templates/js/translated/forms.js:1487 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1675 +#: templates/js/translated/forms.js:1691 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1895 +#: templates/js/translated/forms.js:1930 msgid "Clear input" msgstr "" @@ -7924,7 +8017,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1042 +#: templates/js/translated/stock.js:1050 msgid "Select Stock Items" msgstr "" @@ -7974,12 +8067,12 @@ msgid "Select Label Template" msgstr "" #: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 -#: templates/js/translated/modals.js:599 +#: templates/js/translated/modals.js:610 msgid "Cancel" msgstr "" #: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:666 templates/js/translated/modals.js:969 +#: templates/js/translated/modals.js:677 templates/js/translated/modals.js:982 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" @@ -7988,47 +8081,47 @@ msgstr "" msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:381 +#: templates/js/translated/modals.js:392 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:540 +#: templates/js/translated/modals.js:551 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:598 +#: templates/js/translated/modals.js:609 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:655 +#: templates/js/translated/modals.js:666 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:933 +#: templates/js/translated/modals.js:946 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1045 +#: templates/js/translated/modals.js:1058 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1046 +#: templates/js/translated/modals.js:1059 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1069 +#: templates/js/translated/modals.js:1082 msgid "Error requesting form data" msgstr "" @@ -8052,23 +8145,24 @@ msgstr "" msgid "Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:236 +#: templates/js/translated/model_renderers.js:249 +#: templates/js/translated/model_renderers.js:270 msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:253 +#: templates/js/translated/model_renderers.js:287 msgid "Shipment ID" msgstr "" -#: templates/js/translated/model_renderers.js:273 +#: templates/js/translated/model_renderers.js:307 msgid "Category ID" msgstr "" -#: templates/js/translated/model_renderers.js:310 +#: templates/js/translated/model_renderers.js:344 msgid "Manufacturer Part ID" msgstr "" -#: templates/js/translated/model_renderers.js:339 +#: templates/js/translated/model_renderers.js:373 msgid "Supplier Part ID" msgstr "" @@ -8116,7 +8210,7 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2123 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2131 msgid "Stock Status" msgstr "" @@ -8140,7 +8234,7 @@ msgstr "" msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:790 templates/js/translated/part.js:803 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:809 msgid "No purchase orders found" msgstr "" @@ -8165,7 +8259,7 @@ msgid "Total" msgstr "" #: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 -#: templates/js/translated/part.js:1834 templates/js/translated/part.js:2045 +#: templates/js/translated/part.js:1841 templates/js/translated/part.js:2052 msgid "Unit Price" msgstr "" @@ -8181,7 +8275,7 @@ msgstr "" msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1166 templates/js/translated/part.js:935 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:942 msgid "Receive line item" msgstr "" @@ -8250,7 +8344,7 @@ msgid "Delete Stock Allocation" msgstr "" #: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 -#: templates/js/translated/stock.js:1428 +#: templates/js/translated/stock.js:1436 msgid "Shipped to customer" msgstr "" @@ -8378,144 +8472,148 @@ msgstr "" msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:412 +#: templates/js/translated/part.js:351 +msgid "Create Part Variant" +msgstr "" + +#: templates/js/translated/part.js:418 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:414 +#: templates/js/translated/part.js:420 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:419 +#: templates/js/translated/part.js:425 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:421 +#: templates/js/translated/part.js:427 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:444 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:448 +#: templates/js/translated/part.js:454 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:451 +#: templates/js/translated/part.js:457 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:481 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:503 templates/js/translated/part.js:588 +#: templates/js/translated/part.js:509 templates/js/translated/part.js:594 msgid "Trackable part" msgstr "" -#: templates/js/translated/part.js:507 templates/js/translated/part.js:592 +#: templates/js/translated/part.js:513 templates/js/translated/part.js:598 msgid "Virtual part" msgstr "" -#: templates/js/translated/part.js:519 +#: templates/js/translated/part.js:525 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:523 +#: templates/js/translated/part.js:529 msgid "Salable part" msgstr "" -#: templates/js/translated/part.js:638 +#: templates/js/translated/part.js:644 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1005 +#: templates/js/translated/part.js:1012 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1029 +#: templates/js/translated/part.js:1036 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1096 templates/js/translated/part.js:1356 +#: templates/js/translated/part.js:1103 templates/js/translated/part.js:1363 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1266 +#: templates/js/translated/part.js:1273 msgid "No category" msgstr "" -#: templates/js/translated/part.js:1289 +#: templates/js/translated/part.js:1296 #: templates/js/translated/table_filters.js:430 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:1380 templates/js/translated/part.js:1552 -#: templates/js/translated/stock.js:2282 +#: templates/js/translated/part.js:1387 templates/js/translated/part.js:1559 +#: templates/js/translated/stock.js:2440 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1396 +#: templates/js/translated/part.js:1403 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1571 templates/js/translated/stock.js:2301 +#: templates/js/translated/part.js:1578 templates/js/translated/stock.js:2459 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:1635 +#: templates/js/translated/part.js:1642 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1649 templates/js/translated/stock.js:2345 +#: templates/js/translated/part.js:1656 templates/js/translated/stock.js:2503 msgid "Path" msgstr "" -#: templates/js/translated/part.js:1693 +#: templates/js/translated/part.js:1700 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1744 templates/js/translated/stock.js:1234 +#: templates/js/translated/part.js:1751 templates/js/translated/stock.js:1242 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1745 templates/js/translated/stock.js:1235 +#: templates/js/translated/part.js:1752 templates/js/translated/stock.js:1243 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:1751 +#: templates/js/translated/part.js:1758 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:1773 +#: templates/js/translated/part.js:1780 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:1787 +#: templates/js/translated/part.js:1794 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:1812 +#: templates/js/translated/part.js:1819 #, python-brace-format msgid "No ${human_name} information found" msgstr "" -#: templates/js/translated/part.js:1867 +#: templates/js/translated/part.js:1874 #, python-brace-format msgid "Edit ${human_name}" msgstr "" -#: templates/js/translated/part.js:1868 +#: templates/js/translated/part.js:1875 #, python-brace-format msgid "Delete ${human_name}" msgstr "" -#: templates/js/translated/part.js:1969 +#: templates/js/translated/part.js:1976 msgid "Single Price" msgstr "" -#: templates/js/translated/part.js:1988 +#: templates/js/translated/part.js:1995 msgid "Single Price Difference" msgstr "" @@ -8589,340 +8687,344 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:74 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:181 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:93 templates/js/translated/stock.js:175 +#: templates/js/translated/stock.js:94 templates/js/translated/stock.js:183 msgid "Latest serial number" msgstr "Số seri mới nhất" -#: templates/js/translated/stock.js:101 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:110 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:146 +#: templates/js/translated/stock.js:154 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:186 +#: templates/js/translated/stock.js:194 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:225 +#: templates/js/translated/stock.js:233 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:231 +#: templates/js/translated/stock.js:239 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:382 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:387 +#: templates/js/translated/stock.js:395 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:420 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:416 templates/js/translated/stock.js:417 +#: templates/js/translated/stock.js:424 templates/js/translated/stock.js:425 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:433 +#: templates/js/translated/stock.js:441 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:453 +#: templates/js/translated/stock.js:461 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:462 +#: templates/js/translated/stock.js:470 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:515 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:526 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:519 +#: templates/js/translated/stock.js:527 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:628 +#: templates/js/translated/stock.js:636 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:629 +#: templates/js/translated/stock.js:637 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:714 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:715 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:709 +#: templates/js/translated/stock.js:717 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:710 +#: templates/js/translated/stock.js:718 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:796 +#: templates/js/translated/stock.js:804 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:797 +#: templates/js/translated/stock.js:805 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:892 +#: templates/js/translated/stock.js:900 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:893 +#: templates/js/translated/stock.js:901 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:899 +#: templates/js/translated/stock.js:907 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:900 +#: templates/js/translated/stock.js:908 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:904 +#: templates/js/translated/stock.js:912 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:905 +#: templates/js/translated/stock.js:913 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:909 +#: templates/js/translated/stock.js:917 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:910 users/models.py:206 +#: templates/js/translated/stock.js:918 users/models.py:208 msgid "Add" msgstr "" -#: templates/js/translated/stock.js:914 templates/stock_table.html:58 +#: templates/js/translated/stock.js:922 templates/stock_table.html:58 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1051 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1201 +#: templates/js/translated/stock.js:1209 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1203 +#: templates/js/translated/stock.js:1211 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1208 +#: templates/js/translated/stock.js:1216 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1230 +#: templates/js/translated/stock.js:1238 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1256 +#: templates/js/translated/stock.js:1264 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1313 +#: templates/js/translated/stock.js:1321 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1428 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1424 +#: templates/js/translated/stock.js:1432 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1432 +#: templates/js/translated/stock.js:1440 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1438 +#: templates/js/translated/stock.js:1446 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1604 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:1601 +#: templates/js/translated/stock.js:1609 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1604 +#: templates/js/translated/stock.js:1612 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1608 +#: templates/js/translated/stock.js:1616 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1610 +#: templates/js/translated/stock.js:1618 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1616 +#: templates/js/translated/stock.js:1624 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1618 +#: templates/js/translated/stock.js:1626 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1620 +#: templates/js/translated/stock.js:1628 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1633 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1632 +#: templates/js/translated/stock.js:1640 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1634 +#: templates/js/translated/stock.js:1642 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1636 +#: templates/js/translated/stock.js:1644 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1648 #: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1690 +#: templates/js/translated/stock.js:1698 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1763 +#: templates/js/translated/stock.js:1771 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1809 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1822 templates/js/translated/stock.js:1870 +#: templates/js/translated/stock.js:1830 templates/js/translated/stock.js:1878 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1910 +#: templates/js/translated/stock.js:1918 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1937 +#: templates/js/translated/stock.js:1945 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1939 +#: templates/js/translated/stock.js:1947 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:2138 +#: templates/js/translated/stock.js:2146 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2152 +#: templates/js/translated/stock.js:2160 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2153 +#: templates/js/translated/stock.js:2161 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2377 +#: templates/js/translated/stock.js:2340 +msgid "Allocated Quantity" +msgstr "" + +#: templates/js/translated/stock.js:2535 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2399 +#: templates/js/translated/stock.js:2557 msgid "Details" msgstr "" -#: templates/js/translated/stock.js:2424 +#: templates/js/translated/stock.js:2582 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2443 +#: templates/js/translated/stock.js:2601 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2462 +#: templates/js/translated/stock.js:2620 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2480 +#: templates/js/translated/stock.js:2638 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2503 +#: templates/js/translated/stock.js:2661 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2511 +#: templates/js/translated/stock.js:2669 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2552 +#: templates/js/translated/stock.js:2710 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2553 +#: templates/js/translated/stock.js:2711 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2604 +#: templates/js/translated/stock.js:2762 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2655 +#: templates/js/translated/stock.js:2813 msgid "Uninstall Stock Item" msgstr "" @@ -9194,11 +9296,11 @@ msgstr "Mua" msgid "Sell" msgstr "Bán" -#: templates/navbar.html:113 +#: templates/navbar.html:114 msgid "Logout" msgstr "Đăng xuất" -#: templates/navbar.html:115 +#: templates/navbar.html:116 msgid "Login" msgstr "" @@ -9246,31 +9348,43 @@ msgstr "" msgid "Server is deployed using docker" msgstr "" -#: templates/stats.html:40 -msgid "Server status" +#: templates/stats.html:39 +msgid "Plugin Support" msgstr "" #: templates/stats.html:43 -msgid "Healthy" +msgid "Plugin support enabled" msgstr "" #: templates/stats.html:45 -msgid "Issues detected" +msgid "Plugin support disabled" msgstr "" #: templates/stats.html:52 -msgid "Background Worker" +msgid "Server status" msgstr "" #: templates/stats.html:55 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:57 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:64 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:67 msgid "Background worker not running" msgstr "" -#: templates/stats.html:63 +#: templates/stats.html:75 msgid "Email Settings" msgstr "" -#: templates/stats.html:66 +#: templates/stats.html:78 msgid "Email settings not configured" msgstr "" @@ -9366,35 +9480,35 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:193 +#: users/models.py:195 msgid "Permission set" msgstr "" -#: users/models.py:201 +#: users/models.py:203 msgid "Group" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "View" msgstr "" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to view items" msgstr "" -#: users/models.py:206 +#: users/models.py:208 msgid "Permission to add items" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Change" msgstr "" -#: users/models.py:208 +#: users/models.py:210 msgid "Permissions to edit items" msgstr "" -#: users/models.py:210 +#: users/models.py:212 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/zh/LC_MESSAGES/django.po b/InvenTree/locale/zh/LC_MESSAGES/django.po index 13e69c27a0..5335bbbfeb 100644 --- a/InvenTree/locale/zh/LC_MESSAGES/django.po +++ b/InvenTree/locale/zh/LC_MESSAGES/django.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-10 03:54+0000\n" -"PO-Revision-Date: 2022-01-10 03:57\n" +"POT-Creation-Date: 2022-01-29 00:17+0000\n" +"PO-Revision-Date: 2022-01-29 01:11\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -18,15 +18,15 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 138\n" -#: InvenTree/api.py:64 +#: InvenTree/api.py:55 msgid "API endpoint not found" msgstr "未找到 API 端点" -#: InvenTree/api.py:110 +#: InvenTree/api.py:101 msgid "No action specified" msgstr "未指定操作" -#: InvenTree/api.py:124 +#: InvenTree/api.py:116 msgid "No matching action found" msgstr "未找到指定操作" @@ -80,41 +80,41 @@ msgstr "Email 地址确认" msgid "You must type the same email each time." msgstr "您必须输入相同的 Email 。" -#: InvenTree/helpers.py:437 +#: InvenTree/helpers.py:439 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "重复的序列号: {n}" -#: InvenTree/helpers.py:444 order/models.py:279 order/models.py:420 +#: InvenTree/helpers.py:446 order/models.py:282 order/models.py:425 #: stock/views.py:1231 msgid "Invalid quantity provided" msgstr "提供的数量无效" -#: InvenTree/helpers.py:447 +#: InvenTree/helpers.py:449 msgid "Empty serial number string" msgstr "空序列号字符串" -#: InvenTree/helpers.py:469 InvenTree/helpers.py:472 InvenTree/helpers.py:475 -#: InvenTree/helpers.py:500 +#: InvenTree/helpers.py:471 InvenTree/helpers.py:474 InvenTree/helpers.py:477 +#: InvenTree/helpers.py:502 #, python-brace-format msgid "Invalid group: {g}" msgstr "无效的群组: {g}" -#: InvenTree/helpers.py:510 +#: InvenTree/helpers.py:512 #, python-brace-format msgid "Invalid group {group}" msgstr "" -#: InvenTree/helpers.py:516 +#: InvenTree/helpers.py:518 #, python-brace-format msgid "Invalid/no group {group}" msgstr "" -#: InvenTree/helpers.py:522 +#: InvenTree/helpers.py:524 msgid "No serial numbers found" msgstr "未找到序列号" -#: InvenTree/helpers.py:526 +#: InvenTree/helpers.py:528 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "唯一序列号 ({s}) 必须匹配数量 ({q})" @@ -127,7 +127,7 @@ msgstr "缺少文件" msgid "Missing external link" msgstr "" -#: InvenTree/models.py:132 stock/models.py:1967 +#: InvenTree/models.py:132 stock/models.py:1995 #: templates/js/translated/attachment.js:119 msgid "Attachment" msgstr "附件" @@ -137,15 +137,15 @@ msgid "Select file to attach" msgstr "选择附件" #: InvenTree/models.py:139 company/models.py:131 company/models.py:348 -#: company/models.py:564 order/models.py:124 part/models.py:828 +#: company/models.py:564 order/models.py:127 part/models.py:830 #: report/templates/report/inventree_build_order_base.html:165 #: templates/js/translated/company.js:540 -#: templates/js/translated/company.js:829 templates/js/translated/part.js:1317 +#: templates/js/translated/company.js:829 templates/js/translated/part.js:1324 msgid "Link" msgstr "链接" -#: InvenTree/models.py:140 build/models.py:330 part/models.py:829 -#: stock/models.py:527 +#: InvenTree/models.py:140 build/models.py:332 part/models.py:831 +#: stock/models.py:529 msgid "Link to external URL" msgstr "链接到外部 URL" @@ -157,10 +157,11 @@ msgstr "注释" msgid "File comment" msgstr "文件注释" -#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1213 -#: common/models.py:1214 part/models.py:2258 part/models.py:2278 +#: InvenTree/models.py:149 InvenTree/models.py:150 common/models.py:1223 +#: common/models.py:1224 common/models.py:1452 common/models.py:1453 +#: part/models.py:2265 part/models.py:2285 #: report/templates/report/inventree_test_report_base.html:96 -#: templates/js/translated/stock.js:2534 +#: templates/js/translated/stock.js:2692 msgid "User" msgstr "用户" @@ -197,42 +198,42 @@ msgstr "重命名文件出错" msgid "Invalid choice" msgstr "选择无效" -#: InvenTree/models.py:277 InvenTree/models.py:278 company/models.py:415 -#: label/models.py:112 part/models.py:772 part/models.py:2442 -#: plugin/models.py:40 report/models.py:181 +#: InvenTree/models.py:277 InvenTree/models.py:278 common/models.py:1438 +#: company/models.py:415 label/models.py:112 part/models.py:774 +#: part/models.py:2449 plugin/models.py:40 report/models.py:181 #: templates/InvenTree/settings/mixins/urls.html:13 -#: templates/InvenTree/settings/plugin.html:47 -#: templates/InvenTree/settings/plugin.html:124 +#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:125 #: templates/InvenTree/settings/plugin_settings.html:23 -#: templates/InvenTree/settings/settings.html:279 -#: templates/js/translated/company.js:641 templates/js/translated/part.js:561 -#: templates/js/translated/part.js:700 templates/js/translated/part.js:1624 -#: templates/js/translated/stock.js:2327 +#: templates/InvenTree/settings/settings.html:282 +#: templates/js/translated/company.js:641 templates/js/translated/part.js:567 +#: templates/js/translated/part.js:706 templates/js/translated/part.js:1631 +#: templates/js/translated/stock.js:2485 msgid "Name" msgstr "名称" -#: InvenTree/models.py:284 build/models.py:207 +#: InvenTree/models.py:284 build/models.py:209 #: build/templates/build/detail.html:25 company/models.py:354 #: company/models.py:570 company/templates/company/company_base.html:68 #: company/templates/company/manufacturer_part.html:76 #: company/templates/company/supplier_part.html:73 label/models.py:119 -#: order/models.py:122 part/models.py:795 part/templates/part/category.html:74 +#: order/models.py:125 part/models.py:797 part/templates/part/category.html:74 #: part/templates/part/part_base.html:163 #: part/templates/part/set_category.html:14 report/models.py:194 #: report/models.py:553 report/models.py:592 #: report/templates/report/inventree_build_order_base.html:118 #: stock/templates/stock/location.html:93 #: templates/InvenTree/settings/plugin_settings.html:33 -#: templates/js/translated/bom.js:327 templates/js/translated/bom.js:540 +#: templates/js/translated/bom.js:339 templates/js/translated/bom.js:552 #: templates/js/translated/build.js:1682 templates/js/translated/company.js:345 #: templates/js/translated/company.js:551 #: templates/js/translated/company.js:840 templates/js/translated/order.js:836 #: templates/js/translated/order.js:1019 templates/js/translated/order.js:1258 -#: templates/js/translated/part.js:620 templates/js/translated/part.js:992 -#: templates/js/translated/part.js:1077 templates/js/translated/part.js:1247 -#: templates/js/translated/part.js:1643 templates/js/translated/part.js:1712 -#: templates/js/translated/stock.js:1569 templates/js/translated/stock.js:2339 -#: templates/js/translated/stock.js:2384 +#: templates/js/translated/part.js:626 templates/js/translated/part.js:999 +#: templates/js/translated/part.js:1084 templates/js/translated/part.js:1254 +#: templates/js/translated/part.js:1650 templates/js/translated/part.js:1719 +#: templates/js/translated/stock.js:1577 templates/js/translated/stock.js:2314 +#: templates/js/translated/stock.js:2497 templates/js/translated/stock.js:2542 msgid "Description" msgstr "描述信息" @@ -244,7 +245,7 @@ msgstr "描述 (可选)" msgid "parent" msgstr "上级项" -#: InvenTree/serializers.py:65 part/models.py:2727 +#: InvenTree/serializers.py:65 part/models.py:2734 msgid "Must be a valid number" msgstr "必须是有效数字" @@ -252,83 +253,83 @@ msgstr "必须是有效数字" msgid "Filename" msgstr "文件名" -#: InvenTree/settings.py:663 +#: InvenTree/settings.py:661 msgid "German" msgstr "德语" -#: InvenTree/settings.py:664 +#: InvenTree/settings.py:662 msgid "Greek" msgstr "希腊语" -#: InvenTree/settings.py:665 +#: InvenTree/settings.py:663 msgid "English" msgstr "英语" -#: InvenTree/settings.py:666 +#: InvenTree/settings.py:664 msgid "Spanish" msgstr "西班牙语" -#: InvenTree/settings.py:667 +#: InvenTree/settings.py:665 msgid "Spanish (Mexican)" msgstr "" -#: InvenTree/settings.py:668 +#: InvenTree/settings.py:666 msgid "French" msgstr "法语" -#: InvenTree/settings.py:669 +#: InvenTree/settings.py:667 msgid "Hebrew" msgstr "希伯来语" -#: InvenTree/settings.py:670 +#: InvenTree/settings.py:668 msgid "Italian" msgstr "意大利语" -#: InvenTree/settings.py:671 +#: InvenTree/settings.py:669 msgid "Japanese" msgstr "日语" -#: InvenTree/settings.py:672 +#: InvenTree/settings.py:670 msgid "Korean" msgstr "韩语" -#: InvenTree/settings.py:673 +#: InvenTree/settings.py:671 msgid "Dutch" msgstr "荷兰语" -#: InvenTree/settings.py:674 +#: InvenTree/settings.py:672 msgid "Norwegian" msgstr "挪威语" -#: InvenTree/settings.py:675 +#: InvenTree/settings.py:673 msgid "Polish" msgstr "波兰语" -#: InvenTree/settings.py:676 +#: InvenTree/settings.py:674 msgid "Portugese" msgstr "" -#: InvenTree/settings.py:677 +#: InvenTree/settings.py:675 msgid "Russian" msgstr "俄语" -#: InvenTree/settings.py:678 +#: InvenTree/settings.py:676 msgid "Swedish" msgstr "瑞典语" -#: InvenTree/settings.py:679 +#: InvenTree/settings.py:677 msgid "Thai" msgstr "泰语" -#: InvenTree/settings.py:680 +#: InvenTree/settings.py:678 msgid "Turkish" msgstr "土耳其语" -#: InvenTree/settings.py:681 +#: InvenTree/settings.py:679 msgid "Vietnamese" msgstr "越南语" -#: InvenTree/settings.py:682 +#: InvenTree/settings.py:680 msgid "Chinese" msgstr "中文(简体)" @@ -374,7 +375,7 @@ msgstr "丢失" msgid "Returned" msgstr "已退回" -#: InvenTree/status_codes.py:143 order/models.py:941 +#: InvenTree/status_codes.py:143 order/models.py:961 #: templates/js/translated/order.js:1980 templates/js/translated/order.js:2255 msgid "Shipped" msgstr "已发货" @@ -455,7 +456,7 @@ msgstr "从父项拆分" msgid "Split child item" msgstr "拆分子项" -#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2064 +#: InvenTree/status_codes.py:294 templates/js/translated/stock.js:2072 msgid "Merged stock items" msgstr "" @@ -543,56 +544,56 @@ msgstr "密码字段必须相匹配。" msgid "System Information" msgstr "系统信息" -#: barcodes/api.py:54 barcodes/api.py:151 +#: barcodes/api.py:54 barcodes/api.py:152 msgid "Must provide barcode_data parameter" msgstr "必须提供条码数据参数" -#: barcodes/api.py:127 +#: barcodes/api.py:128 msgid "No match found for barcode data" msgstr "未找到匹配条形码数据" -#: barcodes/api.py:129 +#: barcodes/api.py:130 msgid "Match found for barcode data" msgstr "找到匹配条形码数据" -#: barcodes/api.py:154 +#: barcodes/api.py:155 msgid "Must provide stockitem parameter" msgstr "必须提供库存项参数" -#: barcodes/api.py:161 +#: barcodes/api.py:162 msgid "No matching stock item found" msgstr "未找到匹配的库存项" -#: barcodes/api.py:191 +#: barcodes/api.py:193 msgid "Barcode already matches Stock Item" msgstr "" -#: barcodes/api.py:195 +#: barcodes/api.py:197 msgid "Barcode already matches Stock Location" msgstr "" -#: barcodes/api.py:199 +#: barcodes/api.py:201 msgid "Barcode already matches Part" msgstr "" -#: barcodes/api.py:205 barcodes/api.py:217 +#: barcodes/api.py:207 barcodes/api.py:219 msgid "Barcode hash already matches Stock Item" msgstr "" -#: barcodes/api.py:223 +#: barcodes/api.py:225 msgid "Barcode associated with Stock Item" msgstr "" -#: build/forms.py:36 build/models.py:1286 +#: build/forms.py:36 build/models.py:1293 #: build/templates/build/build_base.html:82 -#: build/templates/build/detail.html:35 common/models.py:1253 +#: build/templates/build/detail.html:35 common/models.py:1263 #: company/forms.py:42 company/templates/company/supplier_part.html:251 -#: order/models.py:796 order/models.py:1207 order/serializers.py:810 +#: order/models.py:805 order/models.py:1229 order/serializers.py:816 #: order/templates/order/order_wizard/match_parts.html:30 -#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:145 -#: part/forms.py:161 part/forms.py:177 part/models.py:2629 +#: order/templates/order/order_wizard/select_parts.html:34 part/forms.py:144 +#: part/forms.py:160 part/forms.py:176 part/models.py:2636 #: part/templates/part/bom_upload/match_parts.html:31 -#: part/templates/part/detail.html:962 part/templates/part/detail.html:1048 +#: part/templates/part/detail.html:992 part/templates/part/detail.html:1078 #: part/templates/part/part_pricing.html:16 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 @@ -603,7 +604,7 @@ msgstr "" #: stock/templates/stock/item_base.html:181 #: stock/templates/stock/item_base.html:262 #: stock/templates/stock/item_base.html:270 -#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:555 +#: templates/js/translated/barcode.js:385 templates/js/translated/bom.js:567 #: templates/js/translated/build.js:295 templates/js/translated/build.js:495 #: templates/js/translated/build.js:689 templates/js/translated/build.js:699 #: templates/js/translated/build.js:1075 templates/js/translated/build.js:1422 @@ -611,11 +612,11 @@ msgstr "" #: templates/js/translated/order.js:101 templates/js/translated/order.js:1056 #: templates/js/translated/order.js:1578 templates/js/translated/order.js:1859 #: templates/js/translated/order.js:1947 templates/js/translated/order.js:2036 -#: templates/js/translated/order.js:2150 templates/js/translated/part.js:900 -#: templates/js/translated/part.js:1855 templates/js/translated/part.js:1978 -#: templates/js/translated/part.js:2056 templates/js/translated/stock.js:383 -#: templates/js/translated/stock.js:580 templates/js/translated/stock.js:750 -#: templates/js/translated/stock.js:2519 templates/js/translated/stock.js:2621 +#: templates/js/translated/order.js:2150 templates/js/translated/part.js:906 +#: templates/js/translated/part.js:1862 templates/js/translated/part.js:1985 +#: templates/js/translated/part.js:2063 templates/js/translated/stock.js:391 +#: templates/js/translated/stock.js:588 templates/js/translated/stock.js:758 +#: templates/js/translated/stock.js:2677 templates/js/translated/stock.js:2779 msgid "Quantity" msgstr "数量" @@ -623,9 +624,9 @@ msgstr "数量" msgid "Enter quantity for build output" msgstr "输入生产产出数量" -#: build/forms.py:41 order/serializers.py:814 stock/forms.py:81 -#: stock/serializers.py:314 templates/js/translated/stock.js:230 -#: templates/js/translated/stock.js:384 +#: build/forms.py:41 order/serializers.py:820 stock/forms.py:81 +#: stock/serializers.py:314 templates/js/translated/stock.js:238 +#: templates/js/translated/stock.js:392 msgid "Serial Numbers" msgstr "序列号" @@ -649,18 +650,18 @@ msgstr "确认取消" msgid "Confirm build cancellation" msgstr "确认生产取消" -#: build/models.py:133 +#: build/models.py:135 msgid "Invalid choice for parent build" msgstr "上级生产选项无效" -#: build/models.py:137 build/templates/build/build_base.html:9 +#: build/models.py:139 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 #: report/templates/report/inventree_build_order_base.html:106 -#: templates/js/translated/build.js:457 +#: templates/js/translated/build.js:457 templates/js/translated/stock.js:2290 msgid "Build Order" msgstr "生产订单" -#: build/models.py:138 build/templates/build/build_base.html:13 +#: build/models.py:140 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:92 #: order/templates/order/so_sidebar.html:13 @@ -670,40 +671,40 @@ msgstr "生产订单" msgid "Build Orders" msgstr "生产订单" -#: build/models.py:198 +#: build/models.py:200 msgid "Build Order Reference" msgstr "相关生产订单" -#: build/models.py:199 order/models.py:210 order/models.py:536 -#: order/models.py:803 part/models.py:2638 +#: build/models.py:201 order/models.py:213 order/models.py:541 +#: order/models.py:812 part/models.py:2645 #: part/templates/part/bom_upload/match_parts.html:30 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 -#: templates/js/translated/bom.js:547 templates/js/translated/build.js:1179 +#: templates/js/translated/bom.js:559 templates/js/translated/build.js:1179 #: templates/js/translated/order.js:1050 templates/js/translated/order.js:2144 msgid "Reference" msgstr "引用" -#: build/models.py:210 +#: build/models.py:212 msgid "Brief description of the build" msgstr "生产的简短描述." -#: build/models.py:219 build/templates/build/build_base.html:164 +#: build/models.py:221 build/templates/build/build_base.html:164 #: build/templates/build/detail.html:88 msgid "Parent Build" msgstr "上级生产" -#: build/models.py:220 +#: build/models.py:222 msgid "BuildOrder to which this build is allocated" msgstr "此次生产匹配的订单" -#: build/models.py:225 build/templates/build/build_base.html:77 +#: build/models.py:227 build/templates/build/build_base.html:77 #: build/templates/build/detail.html:30 company/models.py:705 -#: order/models.py:856 order/models.py:930 -#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:357 -#: part/models.py:2204 part/models.py:2220 part/models.py:2239 -#: part/models.py:2256 part/models.py:2358 part/models.py:2480 -#: part/models.py:2613 part/models.py:2920 part/serializers.py:658 +#: order/models.py:876 order/models.py:950 +#: order/templates/order/order_wizard/select_parts.html:32 part/models.py:359 +#: part/models.py:2211 part/models.py:2227 part/models.py:2246 +#: part/models.py:2263 part/models.py:2365 part/models.py:2487 +#: part/models.py:2620 part/models.py:2927 part/serializers.py:658 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/set_category.html:13 @@ -713,205 +714,205 @@ msgstr "此次生产匹配的订单" #: templates/InvenTree/search.html:80 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:16 -#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:326 -#: templates/js/translated/bom.js:505 templates/js/translated/build.js:680 +#: templates/js/translated/barcode.js:383 templates/js/translated/bom.js:338 +#: templates/js/translated/bom.js:517 templates/js/translated/build.js:680 #: templates/js/translated/build.js:1048 templates/js/translated/build.js:1419 #: templates/js/translated/build.js:1687 templates/js/translated/company.js:492 #: templates/js/translated/company.js:749 templates/js/translated/order.js:84 #: templates/js/translated/order.js:586 templates/js/translated/order.js:1004 #: templates/js/translated/order.js:1576 templates/js/translated/order.js:1933 -#: templates/js/translated/order.js:2128 templates/js/translated/part.js:977 -#: templates/js/translated/part.js:1058 templates/js/translated/part.js:1225 -#: templates/js/translated/stock.js:554 templates/js/translated/stock.js:719 -#: templates/js/translated/stock.js:926 templates/js/translated/stock.js:1526 -#: templates/js/translated/stock.js:2609 +#: templates/js/translated/order.js:2128 templates/js/translated/part.js:984 +#: templates/js/translated/part.js:1065 templates/js/translated/part.js:1232 +#: templates/js/translated/stock.js:562 templates/js/translated/stock.js:727 +#: templates/js/translated/stock.js:934 templates/js/translated/stock.js:1534 +#: templates/js/translated/stock.js:2767 msgid "Part" msgstr "商品" -#: build/models.py:233 +#: build/models.py:235 msgid "Select part to build" msgstr "选择要生产的商品" -#: build/models.py:238 +#: build/models.py:240 msgid "Sales Order Reference" msgstr "相关销售订单" -#: build/models.py:242 +#: build/models.py:244 msgid "SalesOrder to which this build is allocated" msgstr "此次生产匹配的销售订单" -#: build/models.py:247 templates/js/translated/build.js:1407 +#: build/models.py:249 templates/js/translated/build.js:1407 #: templates/js/translated/order.js:1564 msgid "Source Location" msgstr "来源地点" -#: build/models.py:251 +#: build/models.py:253 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:256 +#: build/models.py:258 msgid "Destination Location" msgstr "目标地点" -#: build/models.py:260 +#: build/models.py:262 msgid "Select location where the completed items will be stored" msgstr "选择已完成项目仓储地点" -#: build/models.py:264 +#: build/models.py:266 msgid "Build Quantity" msgstr "生产数量" -#: build/models.py:267 +#: build/models.py:269 msgid "Number of stock items to build" msgstr "要生产的项目数量" -#: build/models.py:271 +#: build/models.py:273 msgid "Completed items" msgstr "已完成项目" -#: build/models.py:273 +#: build/models.py:275 msgid "Number of stock items which have been completed" msgstr "已完成的库存项目数量" -#: build/models.py:277 part/templates/part/part_base.html:234 +#: build/models.py:279 part/templates/part/part_base.html:234 msgid "Build Status" msgstr "生产状态" -#: build/models.py:281 +#: build/models.py:283 msgid "Build status code" msgstr "生产状态代码" -#: build/models.py:285 stock/models.py:531 +#: build/models.py:287 stock/models.py:533 msgid "Batch Code" msgstr "批量代码" -#: build/models.py:289 +#: build/models.py:291 msgid "Batch code for this build output" msgstr "此生产产出的批量代码" -#: build/models.py:292 order/models.py:126 part/models.py:967 +#: build/models.py:294 order/models.py:129 part/models.py:969 #: part/templates/part/part_base.html:313 templates/js/translated/order.js:1271 msgid "Creation Date" msgstr "创建日期" -#: build/models.py:296 order/models.py:558 +#: build/models.py:298 order/models.py:563 msgid "Target completion date" msgstr "预计完成日期" -#: build/models.py:297 +#: build/models.py:299 msgid "Target date for build completion. Build will be overdue after this date." msgstr "生产完成的目标日期。生产将在此日期之后逾期。" -#: build/models.py:300 order/models.py:252 +#: build/models.py:302 order/models.py:255 #: templates/js/translated/build.js:1758 msgid "Completion Date" msgstr "完成日期:" -#: build/models.py:306 +#: build/models.py:308 msgid "completed by" msgstr "完成人" -#: build/models.py:314 templates/js/translated/build.js:1729 +#: build/models.py:316 templates/js/translated/build.js:1729 msgid "Issued by" msgstr "发布者" -#: build/models.py:315 +#: build/models.py:317 msgid "User who issued this build order" msgstr "发布此生产订单的用户" -#: build/models.py:323 build/templates/build/build_base.html:185 -#: build/templates/build/detail.html:116 order/models.py:140 +#: build/models.py:325 build/templates/build/build_base.html:185 +#: build/templates/build/detail.html:116 order/models.py:143 #: order/templates/order/order_base.html:170 -#: order/templates/order/sales_order_base.html:182 part/models.py:971 +#: order/templates/order/sales_order_base.html:182 part/models.py:973 #: report/templates/report/inventree_build_order_base.html:159 #: templates/js/translated/build.js:1741 templates/js/translated/order.js:864 msgid "Responsible" msgstr "责任人" -#: build/models.py:324 +#: build/models.py:326 msgid "User responsible for this build order" msgstr "负责此生产订单的用户" -#: build/models.py:329 build/templates/build/detail.html:102 +#: build/models.py:331 build/templates/build/detail.html:102 #: company/templates/company/manufacturer_part.html:102 #: company/templates/company/supplier_part.html:126 -#: part/templates/part/part_base.html:354 stock/models.py:525 +#: part/templates/part/part_base.html:354 stock/models.py:527 #: stock/templates/stock/item_base.html:373 msgid "External Link" msgstr "外部链接" -#: build/models.py:334 build/serializers.py:201 +#: build/models.py:336 build/serializers.py:201 #: build/templates/build/sidebar.html:21 company/models.py:142 #: company/models.py:577 company/templates/company/sidebar.html:25 -#: order/models.py:144 order/models.py:805 order/models.py:1051 +#: order/models.py:147 order/models.py:814 order/models.py:1071 #: order/templates/order/po_sidebar.html:11 -#: order/templates/order/so_sidebar.html:17 part/models.py:956 -#: part/templates/part/detail.html:120 part/templates/part/part_sidebar.html:50 +#: order/templates/order/so_sidebar.html:17 part/models.py:958 +#: part/templates/part/detail.html:137 part/templates/part/part_sidebar.html:54 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:597 -#: stock/models.py:1867 stock/models.py:1973 stock/serializers.py:332 -#: stock/serializers.py:639 stock/serializers.py:737 stock/serializers.py:869 -#: stock/templates/stock/stock_sidebar.html:21 -#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:711 +#: stock/forms.py:140 stock/forms.py:190 stock/forms.py:224 stock/models.py:599 +#: stock/models.py:1895 stock/models.py:2001 stock/serializers.py:332 +#: stock/serializers.py:640 stock/serializers.py:738 stock/serializers.py:870 +#: stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:58 templates/js/translated/bom.js:723 #: templates/js/translated/company.js:845 templates/js/translated/order.js:1149 #: templates/js/translated/order.js:1445 templates/js/translated/order.js:2280 -#: templates/js/translated/stock.js:1309 templates/js/translated/stock.js:1795 +#: templates/js/translated/stock.js:1317 templates/js/translated/stock.js:1803 msgid "Notes" msgstr "备注" -#: build/models.py:335 +#: build/models.py:337 msgid "Extra build notes" msgstr "额外的生产备注" -#: build/models.py:710 +#: build/models.py:717 msgid "No build output specified" msgstr "未指定生产产出" -#: build/models.py:713 +#: build/models.py:720 msgid "Build output is already completed" msgstr "生产产出已完成" -#: build/models.py:716 +#: build/models.py:723 msgid "Build output does not match Build Order" msgstr "生产产出与订单不匹配" -#: build/models.py:1108 +#: build/models.py:1115 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1117 +#: build/models.py:1124 #, python-brace-format msgid "Allocated quantity ({q}) must not execed available stock quantity ({a})" msgstr "" -#: build/models.py:1127 +#: build/models.py:1134 msgid "Stock item is over-allocated" msgstr "库存物品分配过度!" -#: build/models.py:1133 order/models.py:1167 +#: build/models.py:1140 order/models.py:1189 msgid "Allocation quantity must be greater than zero" msgstr "分配数量必须大于0" -#: build/models.py:1139 +#: build/models.py:1146 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1196 +#: build/models.py:1203 msgid "Selected stock item not found in BOM" msgstr "" -#: build/models.py:1256 stock/templates/stock/item_base.html:345 +#: build/models.py:1263 stock/templates/stock/item_base.html:345 #: templates/InvenTree/search.html:137 templates/js/translated/build.js:1660 #: templates/navbar.html:35 msgid "Build" msgstr "生产" -#: build/models.py:1257 +#: build/models.py:1264 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1273 build/serializers.py:388 order/serializers.py:690 -#: order/serializers.py:708 stock/serializers.py:577 stock/serializers.py:695 +#: build/models.py:1280 build/serializers.py:388 order/serializers.py:696 +#: order/serializers.py:714 stock/serializers.py:578 stock/serializers.py:696 #: stock/templates/stock/item_base.html:9 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:367 @@ -920,24 +921,24 @@ msgstr "" #: templates/js/translated/order.js:85 templates/js/translated/order.js:1577 #: templates/js/translated/order.js:1832 templates/js/translated/order.js:1837 #: templates/js/translated/order.js:1940 templates/js/translated/order.js:2030 -#: templates/js/translated/stock.js:555 templates/js/translated/stock.js:720 -#: templates/js/translated/stock.js:2470 +#: templates/js/translated/stock.js:563 templates/js/translated/stock.js:728 +#: templates/js/translated/stock.js:2628 msgid "Stock Item" msgstr "库存项" -#: build/models.py:1274 +#: build/models.py:1281 msgid "Source stock item" msgstr "源库存项" -#: build/models.py:1287 +#: build/models.py:1294 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1295 +#: build/models.py:1302 msgid "Install into" msgstr "安装到" -#: build/models.py:1296 +#: build/models.py:1303 msgid "Destination stock item" msgstr "" @@ -962,16 +963,16 @@ msgid "This build output is not fully allocated" msgstr "" #: build/serializers.py:190 order/serializers.py:226 order/serializers.py:294 -#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:730 -#: stock/serializers.py:971 stock/templates/stock/item_base.html:313 +#: stock/forms.py:222 stock/serializers.py:325 stock/serializers.py:731 +#: stock/serializers.py:972 stock/templates/stock/item_base.html:313 #: templates/js/translated/barcode.js:384 #: templates/js/translated/barcode.js:557 templates/js/translated/build.js:480 #: templates/js/translated/build.js:1087 templates/js/translated/order.js:508 #: templates/js/translated/order.js:1844 templates/js/translated/order.js:1955 #: templates/js/translated/order.js:1963 templates/js/translated/order.js:2044 -#: templates/js/translated/part.js:179 templates/js/translated/stock.js:556 -#: templates/js/translated/stock.js:721 templates/js/translated/stock.js:928 -#: templates/js/translated/stock.js:1676 templates/js/translated/stock.js:2411 +#: templates/js/translated/part.js:179 templates/js/translated/stock.js:564 +#: templates/js/translated/stock.js:729 templates/js/translated/stock.js:936 +#: templates/js/translated/stock.js:1684 templates/js/translated/stock.js:2569 msgid "Location" msgstr "地点" @@ -980,12 +981,12 @@ msgid "Location for completed build outputs" msgstr "" #: build/serializers.py:197 build/templates/build/build_base.html:137 -#: build/templates/build/detail.html:63 order/models.py:552 +#: build/templates/build/detail.html:63 order/models.py:557 #: order/serializers.py:247 stock/templates/stock/item_base.html:187 #: templates/js/translated/barcode.js:140 templates/js/translated/build.js:1716 #: templates/js/translated/order.js:591 templates/js/translated/order.js:840 -#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1651 -#: templates/js/translated/stock.js:2488 templates/js/translated/stock.js:2637 +#: templates/js/translated/order.js:1263 templates/js/translated/stock.js:1659 +#: templates/js/translated/stock.js:2646 templates/js/translated/stock.js:2795 msgid "Status" msgstr "状态" @@ -1021,8 +1022,8 @@ msgstr "所需生产数量尚未完成" msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:313 build/serializers.py:362 part/models.py:2753 -#: part/models.py:2912 +#: build/serializers.py:313 build/serializers.py:362 part/models.py:2760 +#: part/models.py:2919 msgid "BOM Item" msgstr "" @@ -1038,16 +1039,16 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:394 stock/serializers.py:584 +#: build/serializers.py:394 stock/serializers.py:585 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:408 order/models.py:277 order/serializers.py:240 -#: stock/models.py:365 stock/models.py:1077 stock/serializers.py:305 +#: build/serializers.py:408 order/models.py:280 order/serializers.py:240 +#: stock/models.py:367 stock/models.py:1105 stock/serializers.py:305 msgid "Quantity must be greater than zero" msgstr "" -#: build/serializers.py:450 order/serializers.py:741 +#: build/serializers.py:450 order/serializers.py:747 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1060,7 +1061,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:491 order/serializers.py:984 +#: build/serializers.py:491 order/serializers.py:990 msgid "Allocation items must be provided" msgstr "" @@ -1164,13 +1165,13 @@ msgid "Completed" msgstr "已完成" #: build/templates/build/build_base.html:171 -#: build/templates/build/detail.html:95 order/models.py:927 -#: order/models.py:1023 order/templates/order/sales_order_base.html:9 +#: build/templates/build/detail.html:95 order/models.py:947 +#: order/models.py:1043 order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 #: stock/templates/stock/item_base.html:307 -#: templates/js/translated/order.js:1218 +#: templates/js/translated/order.js:1218 templates/js/translated/stock.js:2304 msgid "Sales Order" msgstr "销售订单" @@ -1224,7 +1225,7 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:50 order/models.py:878 stock/forms.py:136 +#: build/templates/build/detail.html:50 order/models.py:898 stock/forms.py:136 #: templates/js/translated/order.js:592 templates/js/translated/order.js:1138 msgid "Destination" msgstr "" @@ -1239,7 +1240,7 @@ msgstr "" #: build/templates/build/detail.html:81 #: stock/templates/stock/item_base.html:331 -#: templates/js/translated/stock.js:1665 templates/js/translated/stock.js:2644 +#: templates/js/translated/stock.js:1673 templates/js/translated/stock.js:2802 #: templates/js/translated/table_filters.js:151 #: templates/js/translated/table_filters.js:238 msgid "Batch" @@ -1343,9 +1344,9 @@ msgstr "" #: order/templates/order/po_sidebar.html:9 #: order/templates/order/purchase_order_detail.html:60 #: order/templates/order/sales_order_detail.html:107 -#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:196 -#: part/templates/part/part_sidebar.html:48 stock/templates/stock/item.html:95 -#: stock/templates/stock/stock_sidebar.html:19 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:213 +#: part/templates/part/part_sidebar.html:52 stock/templates/stock/item.html:112 +#: stock/templates/stock/stock_sidebar.html:23 msgid "Attachments" msgstr "附件" @@ -1360,8 +1361,8 @@ msgstr "生产备注" #: order/templates/order/purchase_order_detail.html:108 #: order/templates/order/sales_order_detail.html:127 #: order/templates/order/sales_order_detail.html:186 -#: part/templates/part/detail.html:124 stock/templates/stock/item.html:115 -#: stock/templates/stock/item.html:205 +#: part/templates/part/detail.html:141 stock/templates/stock/item.html:132 +#: stock/templates/stock/item.html:235 msgid "Edit Notes" msgstr "编辑备注" @@ -1373,7 +1374,7 @@ msgstr "" msgid "All untracked stock items have been allocated" msgstr "" -#: build/templates/build/index.html:18 part/templates/part/detail.html:303 +#: build/templates/build/index.html:18 part/templates/part/detail.html:320 msgid "New Build Order" msgstr "新建生产订单" @@ -1453,23 +1454,23 @@ msgstr "生产产出已删除" msgid "Delete Build Order" msgstr "删除生产订单" -#: common/files.py:67 +#: common/files.py:65 msgid "Unsupported file format: {ext.upper()}" msgstr "不支持的文件格式: {ext.uper()}" -#: common/files.py:69 +#: common/files.py:67 msgid "Error reading file (invalid encoding)" msgstr "" -#: common/files.py:74 +#: common/files.py:72 msgid "Error reading file (invalid format)" msgstr "" -#: common/files.py:76 +#: common/files.py:74 msgid "Error reading file (incorrect dimension)" msgstr "" -#: common/files.py:78 +#: common/files.py:76 msgid "Error reading file (data could be corrupted)" msgstr "" @@ -1490,740 +1491,828 @@ msgstr "" msgid "Select {name} file to upload" msgstr "" -#: common/models.py:344 common/models.py:998 common/models.py:1206 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:352 +msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:346 +#: common/models.py:354 msgid "Settings value" msgstr "" -#: common/models.py:380 +#: common/models.py:388 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:400 +#: common/models.py:408 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:411 +#: common/models.py:419 msgid "Value must be an integer value" msgstr "" -#: common/models.py:434 +#: common/models.py:442 msgid "Key string must be unique" msgstr "" -#: common/models.py:553 +#: common/models.py:561 msgid "No group" msgstr "" -#: common/models.py:595 +#: common/models.py:603 msgid "Restart required" msgstr "" -#: common/models.py:596 +#: common/models.py:604 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:603 +#: common/models.py:611 msgid "InvenTree Instance Name" msgstr "" -#: common/models.py:605 +#: common/models.py:613 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:609 +#: common/models.py:617 msgid "Use instance name" msgstr "" -#: common/models.py:610 +#: common/models.py:618 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:616 company/models.py:100 company/models.py:101 +#: common/models.py:624 company/models.py:100 company/models.py:101 msgid "Company name" msgstr "公司名称" -#: common/models.py:617 +#: common/models.py:625 msgid "Internal company name" msgstr "内部公司名称" -#: common/models.py:622 +#: common/models.py:630 msgid "Base URL" msgstr "" -#: common/models.py:623 +#: common/models.py:631 msgid "Base URL for server instance" msgstr "" -#: common/models.py:629 +#: common/models.py:637 msgid "Default Currency" msgstr "" -#: common/models.py:630 +#: common/models.py:638 msgid "Default currency" msgstr "" -#: common/models.py:636 +#: common/models.py:644 msgid "Download from URL" msgstr "" -#: common/models.py:637 +#: common/models.py:645 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:643 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:651 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:644 +#: common/models.py:652 msgid "Enable barcode scanner support" msgstr "启用条形码扫描支持" -#: common/models.py:650 +#: common/models.py:658 msgid "IPN Regex" msgstr "" -#: common/models.py:651 +#: common/models.py:659 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:655 +#: common/models.py:663 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:656 +#: common/models.py:664 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:662 +#: common/models.py:670 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:663 +#: common/models.py:671 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:669 +#: common/models.py:677 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:670 +#: common/models.py:678 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:676 +#: common/models.py:684 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:677 +#: common/models.py:685 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:683 +#: common/models.py:691 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:684 +#: common/models.py:692 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:690 +#: common/models.py:698 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:691 +#: common/models.py:699 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:697 part/models.py:2482 report/models.py:187 +#: common/models.py:705 part/models.py:2489 report/models.py:187 #: templates/js/translated/table_filters.js:38 #: templates/js/translated/table_filters.js:422 msgid "Template" msgstr "模板" -#: common/models.py:698 +#: common/models.py:706 msgid "Parts are templates by default" msgstr "" -#: common/models.py:704 part/models.py:919 templates/js/translated/bom.js:1068 +#: common/models.py:712 part/models.py:921 templates/js/translated/bom.js:1082 #: templates/js/translated/table_filters.js:168 #: templates/js/translated/table_filters.js:434 msgid "Assembly" msgstr "组装" -#: common/models.py:705 +#: common/models.py:713 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:711 part/models.py:925 +#: common/models.py:719 part/models.py:927 #: templates/js/translated/table_filters.js:438 msgid "Component" msgstr "组件" -#: common/models.py:712 +#: common/models.py:720 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:718 part/models.py:936 +#: common/models.py:726 part/models.py:938 msgid "Purchaseable" msgstr "可购买" -#: common/models.py:719 +#: common/models.py:727 msgid "Parts are purchaseable by default" msgstr "商品默认可购买" -#: common/models.py:725 part/models.py:941 +#: common/models.py:733 part/models.py:943 #: templates/js/translated/table_filters.js:446 msgid "Salable" msgstr "可销售" -#: common/models.py:726 +#: common/models.py:734 msgid "Parts are salable by default" msgstr "商品默认可销售" -#: common/models.py:732 part/models.py:931 +#: common/models.py:740 part/models.py:933 #: templates/js/translated/table_filters.js:46 #: templates/js/translated/table_filters.js:100 #: templates/js/translated/table_filters.js:450 msgid "Trackable" msgstr "可追踪" -#: common/models.py:733 +#: common/models.py:741 msgid "Parts are trackable by default" msgstr "商品默认可跟踪" -#: common/models.py:739 part/models.py:951 +#: common/models.py:747 part/models.py:953 #: part/templates/part/part_base.html:147 #: templates/js/translated/table_filters.js:42 msgid "Virtual" msgstr "虚拟" -#: common/models.py:740 +#: common/models.py:748 msgid "Parts are virtual by default" msgstr "商品默认是虚拟的" -#: common/models.py:746 +#: common/models.py:754 msgid "Show Import in Views" msgstr "视图中显示导入" -#: common/models.py:747 +#: common/models.py:755 msgid "Display the import wizard in some part views" msgstr "在一些商品视图中显示导入向导" -#: common/models.py:753 +#: common/models.py:761 msgid "Show Price in Forms" msgstr "在表格中显示价格" -#: common/models.py:754 +#: common/models.py:762 msgid "Display part price in some forms" msgstr "以某些表格显示商品价格" -#: common/models.py:765 +#: common/models.py:773 msgid "Show Price in BOM" msgstr "" -#: common/models.py:766 +#: common/models.py:774 msgid "Include pricing information in BOM tables" msgstr "" -#: common/models.py:772 +#: common/models.py:780 msgid "Show related parts" msgstr "显示相关商品" -#: common/models.py:773 +#: common/models.py:781 msgid "Display related parts for a part" msgstr "" -#: common/models.py:779 +#: common/models.py:787 msgid "Create initial stock" msgstr "创建初始库存" -#: common/models.py:780 +#: common/models.py:788 msgid "Create initial stock on part creation" msgstr "" -#: common/models.py:786 +#: common/models.py:794 msgid "Internal Prices" msgstr "内部价格" -#: common/models.py:787 +#: common/models.py:795 msgid "Enable internal prices for parts" msgstr "启用内部商品价格" -#: common/models.py:793 +#: common/models.py:801 msgid "Internal Price as BOM-Price" msgstr "内部价格为BOM价格" -#: common/models.py:794 +#: common/models.py:802 msgid "Use the internal price (if set) in BOM-price calculations" msgstr "在 BOM价格计算中使用内部价格(如设置)" -#: common/models.py:800 +#: common/models.py:808 msgid "Part Name Display Format" msgstr "" -#: common/models.py:801 +#: common/models.py:809 msgid "Format to display the part name" msgstr "" -#: common/models.py:808 +#: common/models.py:816 msgid "Enable Reports" msgstr "" -#: common/models.py:809 +#: common/models.py:817 msgid "Enable generation of reports" msgstr "" -#: common/models.py:815 templates/stats.html:25 +#: common/models.py:823 templates/stats.html:25 msgid "Debug Mode" msgstr "调试模式" -#: common/models.py:816 +#: common/models.py:824 msgid "Generate reports in debug mode (HTML output)" msgstr "在调试模式生成报告(HTML输出)" -#: common/models.py:822 +#: common/models.py:830 msgid "Page Size" msgstr "页面大小" -#: common/models.py:823 +#: common/models.py:831 msgid "Default page size for PDF reports" msgstr "PDF 报表默认页面大小" -#: common/models.py:833 +#: common/models.py:841 msgid "Test Reports" msgstr "测试报表" -#: common/models.py:834 +#: common/models.py:842 msgid "Enable generation of test reports" msgstr "启用生成测试报表" -#: common/models.py:840 +#: common/models.py:848 msgid "Stock Expiry" msgstr "库存到期" -#: common/models.py:841 +#: common/models.py:849 msgid "Enable stock expiry functionality" msgstr "启用库存到期功能" -#: common/models.py:847 +#: common/models.py:855 msgid "Sell Expired Stock" msgstr "销售过期库存" -#: common/models.py:848 +#: common/models.py:856 msgid "Allow sale of expired stock" msgstr "允许销售过期库存" -#: common/models.py:854 +#: common/models.py:862 msgid "Stock Stale Time" msgstr "" -#: common/models.py:855 +#: common/models.py:863 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:857 +#: common/models.py:865 msgid "days" msgstr "天" -#: common/models.py:862 +#: common/models.py:870 msgid "Build Expired Stock" msgstr "" -#: common/models.py:863 +#: common/models.py:871 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:869 +#: common/models.py:877 msgid "Stock Ownership Control" msgstr "库存所有权控制" -#: common/models.py:870 +#: common/models.py:878 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:876 -msgid "Group by Part" -msgstr "按商品分组" - -#: common/models.py:877 -msgid "Group stock items by part reference in table views" -msgstr "" - -#: common/models.py:883 +#: common/models.py:884 msgid "Build Order Reference Prefix" msgstr "生产订单参考前缀" -#: common/models.py:884 +#: common/models.py:885 msgid "Prefix value for build order reference" msgstr "" -#: common/models.py:889 +#: common/models.py:890 msgid "Build Order Reference Regex" msgstr "" -#: common/models.py:890 +#: common/models.py:891 msgid "Regular expression pattern for matching build order reference" msgstr "" -#: common/models.py:894 +#: common/models.py:895 msgid "Sales Order Reference Prefix" msgstr "" -#: common/models.py:895 +#: common/models.py:896 msgid "Prefix value for sales order reference" msgstr "" -#: common/models.py:900 +#: common/models.py:901 msgid "Purchase Order Reference Prefix" msgstr "" -#: common/models.py:901 +#: common/models.py:902 msgid "Prefix value for purchase order reference" msgstr "" -#: common/models.py:907 +#: common/models.py:908 msgid "Enable password forgot" msgstr "" -#: common/models.py:908 +#: common/models.py:909 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:913 +#: common/models.py:914 msgid "Enable registration" msgstr "" -#: common/models.py:914 +#: common/models.py:915 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:919 +#: common/models.py:920 msgid "Enable SSO" msgstr "" -#: common/models.py:920 +#: common/models.py:921 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:925 +#: common/models.py:926 msgid "Email required" msgstr "" -#: common/models.py:926 +#: common/models.py:927 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:931 +#: common/models.py:932 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:932 +#: common/models.py:933 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:937 +#: common/models.py:938 msgid "Mail twice" msgstr "" -#: common/models.py:938 +#: common/models.py:939 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:943 +#: common/models.py:944 msgid "Password twice" msgstr "" -#: common/models.py:944 +#: common/models.py:945 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:949 +#: common/models.py:950 msgid "Group on signup" msgstr "" -#: common/models.py:950 +#: common/models.py:951 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:955 +#: common/models.py:956 msgid "Enforce MFA" msgstr "" -#: common/models.py:956 +#: common/models.py:957 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:961 +#: common/models.py:964 msgid "Enable URL integration" msgstr "" -#: common/models.py:962 +#: common/models.py:965 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:968 +#: common/models.py:971 msgid "Enable navigation integration" msgstr "" -#: common/models.py:969 +#: common/models.py:972 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:975 +#: common/models.py:978 msgid "Enable app integration" msgstr "" -#: common/models.py:976 +#: common/models.py:979 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:982 +#: common/models.py:985 msgid "Enable schedule integration" msgstr "" -#: common/models.py:983 +#: common/models.py:986 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:1029 +#: common/models.py:992 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:993 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:1008 common/models.py:1216 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:1039 msgid "Show subscribed parts" msgstr "" -#: common/models.py:1030 +#: common/models.py:1040 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:1035 +#: common/models.py:1045 msgid "Show subscribed categories" msgstr "" -#: common/models.py:1036 +#: common/models.py:1046 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:1041 +#: common/models.py:1051 msgid "Show latest parts" msgstr "显示最近商品" -#: common/models.py:1042 +#: common/models.py:1052 msgid "Show latest parts on the homepage" msgstr "在主页上显示最近商品" -#: common/models.py:1047 +#: common/models.py:1057 msgid "Recent Part Count" msgstr "" -#: common/models.py:1048 +#: common/models.py:1058 msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:1054 +#: common/models.py:1064 msgid "Show unvalidated BOMs" msgstr "" -#: common/models.py:1055 +#: common/models.py:1065 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:1060 +#: common/models.py:1070 msgid "Show recent stock changes" msgstr "" -#: common/models.py:1061 +#: common/models.py:1071 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:1066 +#: common/models.py:1076 msgid "Recent Stock Count" msgstr "" -#: common/models.py:1067 +#: common/models.py:1077 msgid "Number of recent stock items to display on index page" msgstr "" -#: common/models.py:1072 +#: common/models.py:1082 msgid "Show low stock" msgstr "" -#: common/models.py:1073 +#: common/models.py:1083 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:1078 +#: common/models.py:1088 msgid "Show depleted stock" msgstr "" -#: common/models.py:1079 +#: common/models.py:1089 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:1084 +#: common/models.py:1094 msgid "Show needed stock" msgstr "" -#: common/models.py:1085 +#: common/models.py:1095 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:1090 +#: common/models.py:1100 msgid "Show expired stock" msgstr "" -#: common/models.py:1091 +#: common/models.py:1101 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:1096 +#: common/models.py:1106 msgid "Show stale stock" msgstr "" -#: common/models.py:1097 +#: common/models.py:1107 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:1102 +#: common/models.py:1112 msgid "Show pending builds" msgstr "" -#: common/models.py:1103 +#: common/models.py:1113 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:1108 +#: common/models.py:1118 msgid "Show overdue builds" msgstr "显示逾期生产" -#: common/models.py:1109 +#: common/models.py:1119 msgid "Show overdue builds on the homepage" msgstr "在主页上显示逾期的生产" -#: common/models.py:1114 +#: common/models.py:1124 msgid "Show outstanding POs" msgstr "" -#: common/models.py:1115 +#: common/models.py:1125 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:1120 +#: common/models.py:1130 msgid "Show overdue POs" msgstr "" -#: common/models.py:1121 +#: common/models.py:1131 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:1126 +#: common/models.py:1136 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:1127 +#: common/models.py:1137 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:1132 +#: common/models.py:1142 msgid "Show overdue SOs" msgstr "" -#: common/models.py:1133 +#: common/models.py:1143 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:1139 +#: common/models.py:1149 msgid "Inline label display" msgstr "内嵌标签显示" -#: common/models.py:1140 +#: common/models.py:1150 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "在浏览器中显示 PDF 标签,而不是以文件形式下载" -#: common/models.py:1146 +#: common/models.py:1156 msgid "Inline report display" msgstr "" -#: common/models.py:1147 +#: common/models.py:1157 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "在浏览器中显示 PDF 报告,而不是以文件形式下载" -#: common/models.py:1153 +#: common/models.py:1163 msgid "Search Preview Results" msgstr "搜索预览结果" -#: common/models.py:1154 +#: common/models.py:1164 msgid "Number of results to show in search preview window" msgstr "搜索预览窗口中显示的结果数" -#: common/models.py:1160 +#: common/models.py:1170 msgid "Search Show Stock" msgstr "" -#: common/models.py:1161 +#: common/models.py:1171 msgid "Display stock levels in search preview window" msgstr "" -#: common/models.py:1167 +#: common/models.py:1177 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:1168 +#: common/models.py:1178 msgid "Hide inactive parts in search preview window" msgstr "" -#: common/models.py:1174 +#: common/models.py:1184 msgid "Show Quantity in Forms" msgstr "在表格中显示数量" -#: common/models.py:1175 +#: common/models.py:1185 msgid "Display available part quantity in some forms" msgstr "在某些表格中显示可用的商品数量" -#: common/models.py:1181 +#: common/models.py:1191 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:1182 +#: common/models.py:1192 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:1188 +#: common/models.py:1198 msgid "Fixed Navbar" msgstr "" -#: common/models.py:1189 +#: common/models.py:1199 msgid "InvenTree navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:1254 company/forms.py:43 +#: common/models.py:1264 company/forms.py:43 msgid "Price break quantity" msgstr "" -#: common/models.py:1261 company/serializers.py:264 +#: common/models.py:1271 company/serializers.py:264 #: company/templates/company/supplier_part.html:256 -#: templates/js/translated/part.js:909 templates/js/translated/part.js:1860 +#: templates/js/translated/part.js:915 templates/js/translated/part.js:1867 msgid "Price" msgstr "价格" -#: common/models.py:1262 +#: common/models.py:1272 msgid "Unit price at specified quantity" msgstr "" +#: common/models.py:1429 common/models.py:1568 +msgid "Endpoint" +msgstr "" + +#: common/models.py:1430 +msgid "Endpoint at which this webhook is received" +msgstr "" + +#: common/models.py:1439 +msgid "Name for this webhook" +msgstr "" + +#: common/models.py:1444 part/models.py:948 plugin/models.py:46 +#: templates/js/translated/table_filters.js:34 +#: templates/js/translated/table_filters.js:96 +#: templates/js/translated/table_filters.js:295 +#: templates/js/translated/table_filters.js:417 +msgid "Active" +msgstr "" + +#: common/models.py:1445 +msgid "Is this webhook active" +msgstr "" + +#: common/models.py:1459 +msgid "Token" +msgstr "" + +#: common/models.py:1460 +msgid "Token for access" +msgstr "" + +#: common/models.py:1467 +msgid "Secret" +msgstr "" + +#: common/models.py:1468 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:1535 +msgid "Message ID" +msgstr "" + +#: common/models.py:1536 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:1544 +msgid "Host" +msgstr "" + +#: common/models.py:1545 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:1552 +msgid "Header" +msgstr "" + +#: common/models.py:1553 +msgid "Header of this message" +msgstr "" + +#: common/models.py:1559 +msgid "Body" +msgstr "" + +#: common/models.py:1560 +msgid "Body of this message" +msgstr "" + +#: common/models.py:1569 +msgid "Endpoint on which this message was received" +msgstr "" + +#: common/models.py:1574 +msgid "Worked on" +msgstr "" + +#: common/models.py:1575 +msgid "Was the work on this message finished?" +msgstr "" + #: common/views.py:93 order/templates/order/order_wizard/po_upload.html:49 #: order/templates/order/purchase_order_detail.html:24 order/views.py:243 #: part/templates/part/bom_upload/upload_file.html:52 -#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:212 -#: part/views.py:764 +#: part/templates/part/import_wizard/part_upload.html:47 part/views.py:213 +#: part/views.py:773 msgid "Upload File" msgstr "上传文件" #: common/views.py:94 order/templates/order/order_wizard/match_fields.html:52 #: order/views.py:244 part/templates/part/bom_upload/match_fields.html:52 #: part/templates/part/import_wizard/ajax_match_fields.html:45 -#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:213 -#: part/views.py:765 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:214 +#: part/views.py:774 msgid "Match Fields" msgstr "匹配字段" @@ -2315,7 +2404,7 @@ msgstr "" msgid "Link to external company information" msgstr "链接到外部公司信息" -#: company/models.py:139 part/models.py:838 +#: company/models.py:139 part/models.py:840 msgid "Image" msgstr "图片" @@ -2352,8 +2441,8 @@ msgstr "货币" msgid "Default currency used for this company" msgstr "该公司使用的默认货币" -#: company/models.py:320 company/models.py:535 stock/models.py:469 -#: stock/templates/stock/item_base.html:142 +#: company/models.py:320 company/models.py:535 stock/models.py:471 +#: stock/templates/stock/item_base.html:142 templates/js/translated/bom.js:328 msgid "Base Part" msgstr "" @@ -2380,7 +2469,7 @@ msgstr "选择制造商" #: company/templates/company/supplier_part.html:105 #: templates/js/translated/company.js:533 #: templates/js/translated/company.js:818 templates/js/translated/order.js:1038 -#: templates/js/translated/part.js:245 templates/js/translated/part.js:889 +#: templates/js/translated/part.js:245 templates/js/translated/part.js:895 msgid "MPN" msgstr "MPN" @@ -2409,8 +2498,8 @@ msgstr "参数名称" #: company/models.py:422 #: report/templates/report/inventree_test_report_base.html:95 -#: stock/models.py:1960 templates/js/translated/company.js:647 -#: templates/js/translated/part.js:709 templates/js/translated/stock.js:1296 +#: stock/models.py:1988 templates/js/translated/company.js:647 +#: templates/js/translated/part.js:715 templates/js/translated/stock.js:1304 msgid "Value" msgstr "数值" @@ -2418,10 +2507,10 @@ msgstr "数值" msgid "Parameter value" msgstr "参数值" -#: company/models.py:429 part/models.py:913 part/models.py:2450 +#: company/models.py:429 part/models.py:915 part/models.py:2457 #: part/templates/part/part_base.html:288 -#: templates/InvenTree/settings/settings.html:284 -#: templates/js/translated/company.js:653 templates/js/translated/part.js:715 +#: templates/InvenTree/settings/settings.html:287 +#: templates/js/translated/company.js:653 templates/js/translated/part.js:721 msgid "Units" msgstr "单位" @@ -2434,13 +2523,13 @@ msgid "Linked manufacturer part must reference the same base part" msgstr "" #: company/models.py:545 company/templates/company/company_base.html:78 -#: company/templates/company/supplier_part.html:87 order/models.py:224 +#: company/templates/company/supplier_part.html:87 order/models.py:227 #: order/templates/order/order_base.html:112 -#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:219 -#: part/bom.py:247 stock/templates/stock/item_base.html:397 +#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:237 +#: part/bom.py:265 stock/templates/stock/item_base.html:397 #: templates/js/translated/company.js:337 #: templates/js/translated/company.js:774 templates/js/translated/order.js:823 -#: templates/js/translated/part.js:215 templates/js/translated/part.js:857 +#: templates/js/translated/part.js:215 templates/js/translated/part.js:863 #: templates/js/translated/table_filters.js:393 msgid "Supplier" msgstr "供应商" @@ -2450,8 +2539,8 @@ msgid "Select supplier" msgstr "选择供应商" #: company/models.py:551 company/templates/company/supplier_part.html:91 -#: part/bom.py:220 part/bom.py:248 templates/js/translated/order.js:1025 -#: templates/js/translated/part.js:226 templates/js/translated/part.js:875 +#: part/bom.py:238 part/bom.py:266 templates/js/translated/order.js:1025 +#: templates/js/translated/part.js:226 templates/js/translated/part.js:881 msgid "SKU" msgstr "SKU" @@ -2472,22 +2561,22 @@ msgid "Supplier part description" msgstr "供应商商品描述" #: company/models.py:576 company/templates/company/supplier_part.html:119 -#: part/models.py:2641 report/templates/report/inventree_po_report.html:93 +#: part/models.py:2648 report/templates/report/inventree_po_report.html:93 #: report/templates/report/inventree_so_report.html:93 msgid "Note" msgstr "备注" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "base cost" msgstr "" -#: company/models.py:580 part/models.py:1779 +#: company/models.py:580 part/models.py:1781 msgid "Minimum charge (e.g. stocking fee)" msgstr "最低收费(例如库存费)" #: company/models.py:582 company/templates/company/supplier_part.html:112 -#: stock/models.py:493 stock/templates/stock/item_base.html:338 -#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1791 +#: stock/models.py:495 stock/templates/stock/item_base.html:338 +#: templates/js/translated/company.js:850 templates/js/translated/stock.js:1799 msgid "Packaging" msgstr "打包" @@ -2495,7 +2584,7 @@ msgstr "打包" msgid "Part packaging" msgstr "商品打包" -#: company/models.py:584 part/models.py:1781 +#: company/models.py:584 part/models.py:1783 msgid "multiple" msgstr "" @@ -2554,12 +2643,12 @@ msgstr "上传新图片" msgid "Download image from URL" msgstr "从 URL 下载图片" -#: company/templates/company/company_base.html:83 order/models.py:547 -#: order/templates/order/sales_order_base.html:115 stock/models.py:512 -#: stock/models.py:513 stock/serializers.py:625 +#: company/templates/company/company_base.html:83 order/models.py:552 +#: order/templates/order/sales_order_base.html:115 stock/models.py:514 +#: stock/models.py:515 stock/serializers.py:626 #: stock/templates/stock/item_base.html:290 #: templates/js/translated/company.js:329 templates/js/translated/order.js:1240 -#: templates/js/translated/stock.js:2452 +#: templates/js/translated/stock.js:2610 #: templates/js/translated/table_filters.js:397 msgid "Customer" msgstr "客户" @@ -2590,7 +2679,7 @@ msgstr "创建新的供应商商品" #: company/templates/company/detail.html:20 #: company/templates/company/manufacturer_part.html:118 -#: part/templates/part/detail.html:336 +#: part/templates/part/detail.html:353 msgid "New Supplier Part" msgstr "新建供应商商品" @@ -2598,8 +2687,8 @@ msgstr "新建供应商商品" #: company/templates/company/detail.html:79 #: company/templates/company/manufacturer_part.html:127 #: company/templates/company/manufacturer_part.html:156 -#: part/templates/part/category.html:171 part/templates/part/detail.html:345 -#: part/templates/part/detail.html:374 +#: part/templates/part/category.html:171 part/templates/part/detail.html:362 +#: part/templates/part/detail.html:391 msgid "Options" msgstr "选项" @@ -2627,7 +2716,7 @@ msgstr "制造商商品" msgid "Create new manufacturer part" msgstr "新建制造商商品" -#: company/templates/company/detail.html:67 part/templates/part/detail.html:364 +#: company/templates/company/detail.html:67 part/templates/part/detail.html:381 msgid "New Manufacturer Part" msgstr "新建制造商商品" @@ -2641,7 +2730,7 @@ msgstr "供货商库存" #: order/templates/order/order_base.html:13 #: order/templates/order/purchase_orders.html:8 #: order/templates/order/purchase_orders.html:12 -#: part/templates/part/detail.html:68 part/templates/part/part_sidebar.html:33 +#: part/templates/part/detail.html:85 part/templates/part/part_sidebar.html:37 #: templates/InvenTree/index.html:252 templates/InvenTree/search.html:197 #: templates/InvenTree/settings/sidebar.html:45 templates/navbar.html:47 #: users/models.py:45 @@ -2663,7 +2752,7 @@ msgstr "新建采购订单" #: order/templates/order/sales_order_base.html:13 #: order/templates/order/sales_orders.html:8 #: order/templates/order/sales_orders.html:15 -#: part/templates/part/detail.html:91 part/templates/part/part_sidebar.html:37 +#: part/templates/part/detail.html:108 part/templates/part/part_sidebar.html:41 #: templates/InvenTree/index.html:283 templates/InvenTree/search.html:217 #: templates/InvenTree/settings/sidebar.html:47 templates/navbar.html:58 #: users/models.py:46 @@ -2691,13 +2780,13 @@ msgstr "公司备注" #: company/templates/company/detail.html:384 #: company/templates/company/manufacturer_part.html:215 -#: part/templates/part/detail.html:418 +#: part/templates/part/detail.html:435 msgid "Delete Supplier Parts?" msgstr "删除供应商商品?" #: company/templates/company/detail.html:385 #: company/templates/company/manufacturer_part.html:216 -#: part/templates/part/detail.html:419 +#: part/templates/part/detail.html:436 msgid "All selected supplier parts will be deleted" msgstr "删除所有选定的供应商商品" @@ -2714,7 +2803,7 @@ msgstr "制造商" #: company/templates/company/manufacturer_part.html:35 #: company/templates/company/supplier_part.html:34 #: company/templates/company/supplier_part.html:159 -#: part/templates/part/detail.html:71 part/templates/part/part_base.html:76 +#: part/templates/part/detail.html:88 part/templates/part/part_base.html:76 msgid "Order part" msgstr "订购商品" @@ -2735,34 +2824,34 @@ msgstr "内部商品" #: company/templates/company/manufacturer_part.html:114 #: company/templates/company/supplier_part.html:15 company/views.py:49 -#: part/templates/part/part_sidebar.html:31 part/templates/part/prices.html:163 +#: part/templates/part/part_sidebar.html:35 part/templates/part/prices.html:163 #: templates/InvenTree/search.html:188 templates/navbar.html:45 msgid "Suppliers" msgstr "供应商" #: company/templates/company/manufacturer_part.html:129 -#: part/templates/part/detail.html:347 +#: part/templates/part/detail.html:364 msgid "Delete supplier parts" msgstr "删除供应商商品" #: company/templates/company/manufacturer_part.html:129 #: company/templates/company/manufacturer_part.html:158 #: company/templates/company/manufacturer_part.html:254 -#: part/templates/part/detail.html:347 part/templates/part/detail.html:376 +#: part/templates/part/detail.html:364 part/templates/part/detail.html:393 #: templates/js/translated/company.js:426 templates/js/translated/helpers.js:31 -#: users/models.py:210 +#: users/models.py:212 msgid "Delete" msgstr "删除" #: company/templates/company/manufacturer_part.html:143 #: company/templates/company/manufacturer_part_sidebar.html:5 #: part/templates/part/category_sidebar.html:17 -#: part/templates/part/detail.html:170 part/templates/part/part_sidebar.html:8 +#: part/templates/part/detail.html:187 part/templates/part/part_sidebar.html:8 msgid "Parameters" msgstr "参数" #: company/templates/company/manufacturer_part.html:147 -#: part/templates/part/detail.html:175 +#: part/templates/part/detail.html:192 #: templates/InvenTree/settings/category.html:12 #: templates/InvenTree/settings/part.html:65 msgid "New Parameter" @@ -2773,7 +2862,7 @@ msgid "Delete parameters" msgstr "删除参数" #: company/templates/company/manufacturer_part.html:191 -#: part/templates/part/detail.html:862 +#: part/templates/part/detail.html:892 msgid "Add Parameter" msgstr "添加参数" @@ -2802,9 +2891,9 @@ msgid "Assigned Stock Items" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 stock/models.py:477 +#: company/templates/company/supplier_part.html:24 stock/models.py:479 #: stock/templates/stock/item_base.html:402 -#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1748 +#: templates/js/translated/company.js:790 templates/js/translated/stock.js:1756 msgid "Supplier Part" msgstr "供应商商品" @@ -2830,7 +2919,7 @@ msgstr "" #: company/templates/company/supplier_part.html:142 #: part/templates/part/detail.html:25 stock/templates/stock/location.html:167 -#: templates/js/translated/stock.js:360 +#: templates/js/translated/stock.js:368 msgid "New Stock Item" msgstr "" @@ -2840,7 +2929,7 @@ msgid "Supplier Part Orders" msgstr "供应商商品订单" #: company/templates/company/supplier_part.html:160 -#: part/templates/part/detail.html:72 +#: part/templates/part/detail.html:89 msgid "Order Part" msgstr "订购商品" @@ -2851,7 +2940,7 @@ msgstr "价格信息" #: company/templates/company/supplier_part.html:184 #: company/templates/company/supplier_part.html:290 -#: part/templates/part/prices.html:271 part/views.py:1619 +#: part/templates/part/prices.html:271 part/views.py:1628 msgid "Add Price Break" msgstr "" @@ -2859,11 +2948,11 @@ msgstr "" msgid "No price break information found" msgstr "" -#: company/templates/company/supplier_part.html:224 part/views.py:1681 +#: company/templates/company/supplier_part.html:224 part/views.py:1690 msgid "Delete Price Break" msgstr "" -#: company/templates/company/supplier_part.html:238 part/views.py:1667 +#: company/templates/company/supplier_part.html:238 part/views.py:1676 msgid "Edit Price Break" msgstr "" @@ -2881,10 +2970,10 @@ msgstr "" #: stock/templates/stock/stock_app_base.html:10 #: templates/InvenTree/search.html:150 #: templates/InvenTree/settings/sidebar.html:41 -#: templates/js/translated/bom.js:328 templates/js/translated/part.js:489 -#: templates/js/translated/part.js:624 templates/js/translated/part.js:1118 -#: templates/js/translated/part.js:1279 templates/js/translated/stock.js:927 -#: templates/js/translated/stock.js:1580 templates/navbar.html:28 +#: templates/js/translated/bom.js:340 templates/js/translated/part.js:495 +#: templates/js/translated/part.js:630 templates/js/translated/part.js:1125 +#: templates/js/translated/part.js:1286 templates/js/translated/stock.js:935 +#: templates/js/translated/stock.js:1588 templates/navbar.html:28 msgid "Stock" msgstr "库存" @@ -2907,8 +2996,8 @@ msgstr "定价" #: stock/templates/stock/location.html:151 #: stock/templates/stock/location.html:163 #: stock/templates/stock/location_sidebar.html:7 -#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2351 -#: templates/stats.html:93 templates/stats.html:102 users/models.py:43 +#: templates/InvenTree/search.html:152 templates/js/translated/stock.js:2509 +#: templates/stats.html:105 templates/stats.html:114 users/models.py:43 msgid "Stock Items" msgstr "库存项" @@ -2937,20 +3026,20 @@ msgstr "公司" msgid "New Company" msgstr "新建公司信息" -#: company/views.py:129 part/views.py:584 +#: company/views.py:129 part/views.py:593 msgid "Download Image" msgstr "下载图片" -#: company/views.py:158 part/views.py:616 +#: company/views.py:158 part/views.py:625 msgid "Image size exceeds maximum allowable size for download" msgstr "图像大小超过下载允许的最大尺寸" -#: company/views.py:165 part/views.py:623 +#: company/views.py:165 part/views.py:632 #, python-brace-format msgid "Invalid response: {code}" msgstr "无效响应: {code}" -#: company/views.py:174 part/views.py:632 +#: company/views.py:174 part/views.py:641 msgid "Supplied URL is not a valid image file" msgstr "提供的 URL 不是一个有效的图片文件" @@ -3036,282 +3125,282 @@ msgstr "" msgid "Cancel order" msgstr "取消订单" -#: order/models.py:122 +#: order/models.py:125 msgid "Order description" msgstr "" -#: order/models.py:124 +#: order/models.py:127 msgid "Link to external page" msgstr "" -#: order/models.py:132 +#: order/models.py:135 msgid "Created By" msgstr "" -#: order/models.py:139 +#: order/models.py:142 msgid "User or group responsible for this order" msgstr "负责此订单的用户或群组" -#: order/models.py:144 +#: order/models.py:147 msgid "Order notes" msgstr "" -#: order/models.py:211 order/models.py:537 +#: order/models.py:214 order/models.py:542 msgid "Order reference" msgstr "" -#: order/models.py:216 order/models.py:552 +#: order/models.py:219 order/models.py:557 msgid "Purchase order status" msgstr "" -#: order/models.py:225 +#: order/models.py:228 msgid "Company from which the items are being ordered" msgstr "订购该商品的公司" -#: order/models.py:228 order/templates/order/order_base.html:118 +#: order/models.py:231 order/templates/order/order_base.html:118 #: templates/js/translated/order.js:832 msgid "Supplier Reference" msgstr "" -#: order/models.py:228 +#: order/models.py:231 msgid "Supplier order reference code" msgstr "" -#: order/models.py:235 +#: order/models.py:238 msgid "received by" msgstr "" -#: order/models.py:240 +#: order/models.py:243 msgid "Issue Date" msgstr "" -#: order/models.py:241 +#: order/models.py:244 msgid "Date order was issued" msgstr "" -#: order/models.py:246 +#: order/models.py:249 msgid "Target Delivery Date" msgstr "" -#: order/models.py:247 +#: order/models.py:250 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:253 +#: order/models.py:256 msgid "Date order was completed" msgstr "" -#: order/models.py:282 +#: order/models.py:285 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:411 -msgid "Quantity must be an integer" -msgstr "数量必须是整数" - -#: order/models.py:415 +#: order/models.py:420 msgid "Quantity must be a positive number" msgstr "数量必须大于0" -#: order/models.py:548 +#: order/models.py:553 msgid "Company to which the items are being sold" msgstr "向其出售该商品的公司" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer Reference " msgstr "" -#: order/models.py:554 +#: order/models.py:559 msgid "Customer order reference code" msgstr "" -#: order/models.py:559 +#: order/models.py:564 msgid "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/models.py:562 order/models.py:1028 +#: order/models.py:567 order/models.py:1048 #: templates/js/translated/order.js:1281 templates/js/translated/order.js:1429 msgid "Shipment Date" msgstr "" -#: order/models.py:569 +#: order/models.py:574 msgid "shipped by" msgstr "" -#: order/models.py:635 +#: order/models.py:640 msgid "Order cannot be completed as no parts have been assigned" msgstr "" -#: order/models.py:639 +#: order/models.py:644 msgid "Only a pending order can be marked as complete" msgstr "" -#: order/models.py:642 +#: order/models.py:647 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:645 +#: order/models.py:650 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:797 +#: order/models.py:806 msgid "Item quantity" msgstr "" -#: order/models.py:803 +#: order/models.py:812 msgid "Line item reference" msgstr "" -#: order/models.py:805 +#: order/models.py:814 msgid "Line item notes" msgstr "" -#: order/models.py:835 order/models.py:926 order/models.py:1022 -#: templates/js/translated/order.js:1820 +#: order/models.py:842 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:855 order/models.py:946 order/models.py:1042 +#: templates/js/translated/order.js:1820 templates/js/translated/stock.js:2271 msgid "Order" msgstr "" -#: order/models.py:836 order/templates/order/order_base.html:9 +#: order/models.py:856 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:352 -#: templates/js/translated/order.js:801 templates/js/translated/part.js:832 -#: templates/js/translated/stock.js:1725 templates/js/translated/stock.js:2433 +#: templates/js/translated/order.js:801 templates/js/translated/part.js:838 +#: templates/js/translated/stock.js:1733 templates/js/translated/stock.js:2591 msgid "Purchase Order" msgstr "" -#: order/models.py:857 +#: order/models.py:877 msgid "Supplier part" msgstr "供应商商品" -#: order/models.py:864 order/templates/order/order_base.html:163 +#: order/models.py:884 order/templates/order/order_base.html:163 #: templates/js/translated/order.js:589 templates/js/translated/order.js:1118 -#: templates/js/translated/part.js:904 templates/js/translated/part.js:930 +#: templates/js/translated/part.js:910 templates/js/translated/part.js:937 #: templates/js/translated/table_filters.js:317 msgid "Received" msgstr "" -#: order/models.py:865 +#: order/models.py:885 msgid "Number of items received" msgstr "" -#: order/models.py:872 part/templates/part/prices.html:176 stock/models.py:606 +#: order/models.py:892 part/templates/part/prices.html:176 stock/models.py:608 #: stock/serializers.py:170 stock/templates/stock/item_base.html:359 -#: templates/js/translated/stock.js:1779 +#: templates/js/translated/stock.js:1787 msgid "Purchase Price" msgstr "采购价格" -#: order/models.py:873 +#: order/models.py:893 msgid "Unit purchase price" msgstr "" -#: order/models.py:881 +#: order/models.py:901 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:936 part/templates/part/part_pricing.html:112 +#: order/models.py:956 part/templates/part/part_pricing.html:112 #: part/templates/part/prices.html:116 part/templates/part/prices.html:284 msgid "Sale Price" msgstr "销售价格" -#: order/models.py:937 +#: order/models.py:957 msgid "Unit sale price" msgstr "" -#: order/models.py:942 +#: order/models.py:962 msgid "Shipped quantity" msgstr "" -#: order/models.py:1029 +#: order/models.py:1049 msgid "Date of shipment" msgstr "" -#: order/models.py:1036 +#: order/models.py:1056 msgid "Checked By" msgstr "" -#: order/models.py:1037 +#: order/models.py:1057 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1045 +#: order/models.py:1065 msgid "Shipment number" msgstr "" -#: order/models.py:1052 +#: order/models.py:1072 msgid "Shipment notes" msgstr "" -#: order/models.py:1059 +#: order/models.py:1079 msgid "Tracking Number" msgstr "" -#: order/models.py:1060 +#: order/models.py:1080 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1070 +#: order/models.py:1090 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1073 +#: order/models.py:1093 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1149 order/models.py:1151 +#: order/models.py:1171 order/models.py:1173 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1155 +#: order/models.py:1177 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1157 +#: order/models.py:1179 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1160 +#: order/models.py:1182 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1164 +#: order/models.py:1186 msgid "StockItem is over-allocated" msgstr "" -#: order/models.py:1170 order/serializers.py:734 +#: order/models.py:1192 order/serializers.py:740 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1173 +#: order/models.py:1195 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1174 +#: order/models.py:1196 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1182 +#: order/models.py:1204 msgid "Line" msgstr "" -#: order/models.py:1190 order/serializers.py:825 order/serializers.py:953 -#: templates/js/translated/model_renderers.js:251 +#: order/models.py:1212 order/serializers.py:831 order/serializers.py:959 +#: templates/js/translated/model_renderers.js:285 msgid "Shipment" msgstr "" -#: order/models.py:1191 +#: order/models.py:1213 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1203 +#: order/models.py:1225 msgid "Item" msgstr "" -#: order/models.py:1204 +#: order/models.py:1226 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1207 +#: order/models.py:1229 msgid "Enter stock allocation quantity" msgstr "" @@ -3319,7 +3408,7 @@ msgstr "" msgid "Purchase price currency" msgstr "" -#: order/serializers.py:211 order/serializers.py:790 +#: order/serializers.py:211 order/serializers.py:796 msgid "Line Item" msgstr "" @@ -3355,39 +3444,39 @@ msgstr "" msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:581 +#: order/serializers.py:587 msgid "Sale price currency" msgstr "" -#: order/serializers.py:649 +#: order/serializers.py:655 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:699 order/serializers.py:802 +#: order/serializers.py:705 order/serializers.py:808 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:721 +#: order/serializers.py:727 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:815 +#: order/serializers.py:821 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:839 order/serializers.py:964 +#: order/serializers.py:845 order/serializers.py:970 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:842 order/serializers.py:967 +#: order/serializers.py:848 order/serializers.py:973 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:894 +#: order/serializers.py:900 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:910 msgid "The following serial numbers are already allocated" msgstr "" @@ -3441,6 +3530,7 @@ msgstr "" #: order/templates/order/order_base.html:94 #: order/templates/order/sales_order_base.html:89 +#: templates/js/translated/stock.js:2327 msgid "Order Status" msgstr "" @@ -3538,7 +3628,7 @@ msgstr "" #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/build.js:300 templates/js/translated/build.js:1311 #: templates/js/translated/order.js:537 templates/js/translated/order.js:1488 -#: templates/js/translated/stock.js:593 templates/js/translated/stock.js:761 +#: templates/js/translated/stock.js:601 templates/js/translated/stock.js:769 msgid "Remove row" msgstr "移除行" @@ -3729,7 +3819,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:48 -#: templates/js/translated/bom.js:720 templates/js/translated/build.js:1243 +#: templates/js/translated/bom.js:732 templates/js/translated/build.js:1243 msgid "Actions" msgstr "" @@ -3832,447 +3922,448 @@ msgstr "指定初始初始商品仓储地点" msgid "This field is required" msgstr "此字段为必填" -#: part/bom.py:125 part/models.py:81 part/models.py:847 +#: part/bom.py:125 part/models.py:83 part/models.py:849 #: part/templates/part/category.html:108 part/templates/part/part_base.html:338 msgid "Default Location" msgstr "默认仓储地点" -#: part/bom.py:126 part/templates/part/part_base.html:185 +#: part/bom.py:126 templates/email/low_stock_notification.html:17 +msgid "Total Stock" +msgstr "" + +#: part/bom.py:127 part/templates/part/part_base.html:185 msgid "Available Stock" msgstr "可用库存" -#: part/forms.py:85 +#: part/bom.py:128 part/templates/part/part_base.html:203 +#: templates/js/translated/part.js:1301 +msgid "On Order" +msgstr "" + +#: part/forms.py:84 msgid "Select part category" msgstr "选择类别" -#: part/forms.py:122 +#: part/forms.py:121 msgid "Add parameter template to same level categories" msgstr "" -#: part/forms.py:126 +#: part/forms.py:125 msgid "Add parameter template to all categories" msgstr "" -#: part/forms.py:146 +#: part/forms.py:145 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 +#: part/models.py:84 msgid "Default location for parts in this category" msgstr "此类别商品的默认仓储地点" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords" msgstr "" -#: part/models.py:85 +#: part/models.py:87 msgid "Default keywords for parts in this category" msgstr "此类别商品的默认关键字" -#: part/models.py:95 part/models.py:2526 part/templates/part/category.html:15 +#: part/models.py:97 part/models.py:2533 part/templates/part/category.html:15 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "商品类别" -#: part/models.py:96 part/templates/part/category.html:128 -#: templates/InvenTree/search.html:95 templates/stats.html:84 +#: part/models.py:98 part/templates/part/category.html:128 +#: templates/InvenTree/search.html:95 templates/stats.html:96 #: users/models.py:40 msgid "Part Categories" msgstr "商品类别" -#: part/models.py:358 part/templates/part/cat_link.html:3 +#: part/models.py:360 part/templates/part/cat_link.html:3 #: part/templates/part/category.html:17 part/templates/part/category.html:133 #: part/templates/part/category.html:153 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:85 templates/InvenTree/search.html:82 #: templates/InvenTree/settings/sidebar.html:37 -#: templates/js/translated/part.js:1656 templates/navbar.html:21 -#: templates/stats.html:80 templates/stats.html:89 users/models.py:41 +#: templates/js/translated/part.js:1663 templates/navbar.html:21 +#: templates/stats.html:92 templates/stats.html:101 users/models.py:41 msgid "Parts" msgstr "商品" -#: part/models.py:450 +#: part/models.py:452 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:500 part/models.py:512 +#: part/models.py:502 part/models.py:514 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:642 +#: part/models.py:644 msgid "Next available serial numbers are" msgstr "" -#: part/models.py:646 +#: part/models.py:648 msgid "Next available serial number is" msgstr "" -#: part/models.py:651 +#: part/models.py:653 msgid "Most recent serial number is" msgstr "" -#: part/models.py:746 +#: part/models.py:748 msgid "Duplicate IPN not allowed in part settings" msgstr "在商品设置中不允许重复的IPN" -#: part/models.py:771 +#: part/models.py:773 msgid "Part name" msgstr "商品名称" -#: part/models.py:778 +#: part/models.py:780 msgid "Is Template" msgstr "" -#: part/models.py:779 +#: part/models.py:781 msgid "Is this part a template part?" msgstr "" -#: part/models.py:789 +#: part/models.py:791 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:790 +#: part/models.py:792 msgid "Variant Of" msgstr "" -#: part/models.py:796 +#: part/models.py:798 msgid "Part description" msgstr "商品描述" -#: part/models.py:801 part/templates/part/category.html:86 +#: part/models.py:803 part/templates/part/category.html:86 #: part/templates/part/part_base.html:302 msgid "Keywords" msgstr "关键词" -#: part/models.py:802 +#: part/models.py:804 msgid "Part keywords to improve visibility in search results" msgstr "提高搜索结果可见性的关键字" -#: part/models.py:809 part/models.py:2276 part/models.py:2525 +#: part/models.py:811 part/models.py:2283 part/models.py:2532 #: part/templates/part/part_base.html:265 #: part/templates/part/set_category.html:15 -#: templates/InvenTree/settings/settings.html:183 -#: templates/js/translated/part.js:1261 +#: templates/InvenTree/settings/settings.html:186 +#: templates/js/translated/part.js:1268 msgid "Category" msgstr "类别" -#: part/models.py:810 +#: part/models.py:812 msgid "Part category" msgstr "商品类别" -#: part/models.py:815 part/templates/part/part_base.html:274 -#: templates/js/translated/part.js:612 templates/js/translated/part.js:1214 -#: templates/js/translated/stock.js:1552 +#: part/models.py:817 part/templates/part/part_base.html:274 +#: templates/js/translated/part.js:618 templates/js/translated/part.js:1221 +#: templates/js/translated/stock.js:1560 msgid "IPN" msgstr "" -#: part/models.py:816 +#: part/models.py:818 msgid "Internal Part Number" msgstr "内部商品编号" -#: part/models.py:822 +#: part/models.py:824 msgid "Part revision or version number" msgstr "商品版本号" -#: part/models.py:823 part/templates/part/part_base.html:281 -#: report/models.py:200 templates/js/translated/part.js:616 +#: part/models.py:825 part/templates/part/part_base.html:281 +#: report/models.py:200 templates/js/translated/part.js:622 msgid "Revision" msgstr "" -#: part/models.py:845 +#: part/models.py:847 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:892 part/templates/part/part_base.html:347 +#: part/models.py:894 part/templates/part/part_base.html:347 msgid "Default Supplier" msgstr "" -#: part/models.py:893 +#: part/models.py:895 msgid "Default supplier part" msgstr "默认供应商商品" -#: part/models.py:900 +#: part/models.py:902 msgid "Default Expiry" msgstr "" -#: part/models.py:901 +#: part/models.py:903 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:906 part/templates/part/part_base.html:196 +#: part/models.py:908 part/templates/part/part_base.html:196 msgid "Minimum Stock" msgstr "最低库存" -#: part/models.py:907 +#: part/models.py:909 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:914 +#: part/models.py:916 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:920 +#: part/models.py:922 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:926 +#: part/models.py:928 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:932 +#: part/models.py:934 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:937 +#: part/models.py:939 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:942 +#: part/models.py:944 msgid "Can this part be sold to customers?" msgstr "此商品可以销售给客户吗?" -#: part/models.py:946 plugin/models.py:46 -#: templates/js/translated/table_filters.js:34 -#: templates/js/translated/table_filters.js:96 -#: templates/js/translated/table_filters.js:295 -#: templates/js/translated/table_filters.js:417 -msgid "Active" -msgstr "" - -#: part/models.py:947 +#: part/models.py:949 msgid "Is this part active?" msgstr "" -#: part/models.py:952 +#: part/models.py:954 msgid "Is this a virtual part, such as a software product or license?" msgstr "这是一个虚拟商品,如软件产品或许可证吗?" -#: part/models.py:957 +#: part/models.py:959 msgid "Part notes - supports Markdown formatting" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "BOM checksum" msgstr "" -#: part/models.py:960 +#: part/models.py:962 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:963 +#: part/models.py:965 msgid "BOM checked by" msgstr "" -#: part/models.py:965 +#: part/models.py:967 msgid "BOM checked date" msgstr "" -#: part/models.py:969 +#: part/models.py:971 msgid "Creation User" msgstr "新建用户" -#: part/models.py:1781 +#: part/models.py:1783 msgid "Sell multiple" msgstr "" -#: part/models.py:2326 +#: part/models.py:2333 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:2343 +#: part/models.py:2350 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:2363 templates/js/translated/part.js:1707 -#: templates/js/translated/stock.js:1276 +#: part/models.py:2370 templates/js/translated/part.js:1714 +#: templates/js/translated/stock.js:1284 msgid "Test Name" msgstr "" -#: part/models.py:2364 +#: part/models.py:2371 msgid "Enter a name for the test" msgstr "" -#: part/models.py:2369 +#: part/models.py:2376 msgid "Test Description" msgstr "" -#: part/models.py:2370 +#: part/models.py:2377 msgid "Enter description for this test" msgstr "" -#: part/models.py:2375 templates/js/translated/part.js:1716 +#: part/models.py:2382 templates/js/translated/part.js:1723 #: templates/js/translated/table_filters.js:281 msgid "Required" msgstr "" -#: part/models.py:2376 +#: part/models.py:2383 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:2381 templates/js/translated/part.js:1724 +#: part/models.py:2388 templates/js/translated/part.js:1731 msgid "Requires Value" msgstr "" -#: part/models.py:2382 +#: part/models.py:2389 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:2387 templates/js/translated/part.js:1731 +#: part/models.py:2394 templates/js/translated/part.js:1738 msgid "Requires Attachment" msgstr "" -#: part/models.py:2388 +#: part/models.py:2395 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2399 +#: part/models.py:2406 #, python-brace-format msgid "Illegal character in template name ({c})" msgstr "" -#: part/models.py:2435 +#: part/models.py:2442 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2443 +#: part/models.py:2450 msgid "Parameter Name" msgstr "" -#: part/models.py:2450 +#: part/models.py:2457 msgid "Parameter Units" msgstr "" -#: part/models.py:2480 +#: part/models.py:2487 msgid "Parent Part" msgstr "" -#: part/models.py:2482 part/models.py:2531 part/models.py:2532 -#: templates/InvenTree/settings/settings.html:178 +#: part/models.py:2489 part/models.py:2538 part/models.py:2539 +#: templates/InvenTree/settings/settings.html:181 msgid "Parameter Template" msgstr "参数模板" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Data" msgstr "" -#: part/models.py:2484 +#: part/models.py:2491 msgid "Parameter Value" msgstr "" -#: part/models.py:2536 templates/InvenTree/settings/settings.html:187 +#: part/models.py:2543 templates/InvenTree/settings/settings.html:190 msgid "Default Value" msgstr "默认值" -#: part/models.py:2537 +#: part/models.py:2544 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2614 +#: part/models.py:2621 msgid "Select parent part" msgstr "" -#: part/models.py:2622 +#: part/models.py:2629 msgid "Sub part" msgstr "" -#: part/models.py:2623 +#: part/models.py:2630 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2629 +#: part/models.py:2636 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2631 templates/js/translated/bom.js:566 -#: templates/js/translated/bom.js:640 +#: part/models.py:2638 templates/js/translated/bom.js:578 +#: templates/js/translated/bom.js:652 #: templates/js/translated/table_filters.js:92 msgid "Optional" msgstr "可选项" -#: part/models.py:2631 +#: part/models.py:2638 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2634 +#: part/models.py:2641 msgid "Overage" msgstr "" -#: part/models.py:2635 +#: part/models.py:2642 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2638 +#: part/models.py:2645 msgid "BOM item reference" msgstr "" -#: part/models.py:2641 +#: part/models.py:2648 msgid "BOM item notes" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "Checksum" msgstr "" -#: part/models.py:2643 +#: part/models.py:2650 msgid "BOM line checksum" msgstr "" -#: part/models.py:2647 templates/js/translated/bom.js:657 +#: part/models.py:2654 templates/js/translated/bom.js:669 #: templates/js/translated/table_filters.js:68 #: templates/js/translated/table_filters.js:88 msgid "Inherited" msgstr "继承项" -#: part/models.py:2648 +#: part/models.py:2655 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2653 templates/js/translated/bom.js:649 +#: part/models.py:2660 templates/js/translated/bom.js:661 msgid "Allow Variants" msgstr "" -#: part/models.py:2654 +#: part/models.py:2661 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:2739 stock/models.py:355 +#: part/models.py:2746 stock/models.py:357 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2748 part/models.py:2750 +#: part/models.py:2755 part/models.py:2757 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2879 +#: part/models.py:2886 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:2901 +#: part/models.py:2908 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:2913 +#: part/models.py:2920 msgid "Parent BOM item" msgstr "" -#: part/models.py:2921 +#: part/models.py:2928 msgid "Substitute part" msgstr "" -#: part/models.py:2932 +#: part/models.py:2939 msgid "Part 1" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Part 2" msgstr "" -#: part/models.py:2936 +#: part/models.py:2943 msgid "Select Related Part" msgstr "" -#: part/models.py:2968 +#: part/models.py:2975 msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique" msgstr "" @@ -4327,7 +4418,7 @@ msgstr "" msgid "The BOM for %(part)s has not been validated." msgstr "" -#: part/templates/part/bom.html:30 part/templates/part/detail.html:253 +#: part/templates/part/bom.html:30 part/templates/part/detail.html:270 msgid "BOM actions" msgstr "" @@ -4499,7 +4590,7 @@ msgstr "" msgid "Import Parts" msgstr "" -#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:375 +#: part/templates/part/copy_part.html:9 templates/js/translated/part.js:348 msgid "Duplicate Part" msgstr "复制部件" @@ -4533,145 +4624,149 @@ msgid "Showing stock for all variants of %(full_name)s" msgstr "" #: part/templates/part/detail.html:43 +msgid "Part Stock Allocations" +msgstr "" + +#: part/templates/part/detail.html:60 msgid "Part Test Templates" msgstr "" -#: part/templates/part/detail.html:48 +#: part/templates/part/detail.html:65 msgid "Add Test Template" msgstr "" -#: part/templates/part/detail.html:105 +#: part/templates/part/detail.html:122 msgid "Sales Order Allocations" msgstr "" -#: part/templates/part/detail.html:142 +#: part/templates/part/detail.html:159 msgid "Part Variants" msgstr "" -#: part/templates/part/detail.html:146 +#: part/templates/part/detail.html:163 msgid "Create new variant" msgstr "" -#: part/templates/part/detail.html:147 +#: part/templates/part/detail.html:164 msgid "New Variant" msgstr "" -#: part/templates/part/detail.html:174 +#: part/templates/part/detail.html:191 msgid "Add new parameter" msgstr "" -#: part/templates/part/detail.html:211 part/templates/part/part_sidebar.html:45 +#: part/templates/part/detail.html:228 part/templates/part/part_sidebar.html:49 msgid "Related Parts" msgstr "" -#: part/templates/part/detail.html:215 part/templates/part/detail.html:216 +#: part/templates/part/detail.html:232 part/templates/part/detail.html:233 msgid "Add Related" msgstr "" -#: part/templates/part/detail.html:236 part/templates/part/part_sidebar.html:17 +#: part/templates/part/detail.html:253 part/templates/part/part_sidebar.html:17 msgid "Bill of Materials" msgstr "" -#: part/templates/part/detail.html:241 +#: part/templates/part/detail.html:258 msgid "Export actions" msgstr "" -#: part/templates/part/detail.html:245 templates/js/translated/bom.js:70 +#: part/templates/part/detail.html:262 templates/js/translated/bom.js:70 msgid "Export BOM" msgstr "" -#: part/templates/part/detail.html:247 +#: part/templates/part/detail.html:264 msgid "Print BOM Report" msgstr "" -#: part/templates/part/detail.html:257 +#: part/templates/part/detail.html:274 msgid "Upload BOM" msgstr "" -#: part/templates/part/detail.html:259 templates/js/translated/part.js:272 +#: part/templates/part/detail.html:276 templates/js/translated/part.js:272 msgid "Copy BOM" msgstr "" -#: part/templates/part/detail.html:261 +#: part/templates/part/detail.html:278 msgid "Validate BOM" msgstr "" -#: part/templates/part/detail.html:266 +#: part/templates/part/detail.html:283 msgid "New BOM Item" msgstr "" -#: part/templates/part/detail.html:267 +#: part/templates/part/detail.html:284 msgid "Add BOM Item" msgstr "" -#: part/templates/part/detail.html:280 +#: part/templates/part/detail.html:297 msgid "Assemblies" msgstr "" -#: part/templates/part/detail.html:297 +#: part/templates/part/detail.html:314 msgid "Part Builds" msgstr "" -#: part/templates/part/detail.html:322 +#: part/templates/part/detail.html:339 msgid "Build Order Allocations" msgstr "" -#: part/templates/part/detail.html:332 +#: part/templates/part/detail.html:349 msgid "Part Suppliers" msgstr "商品供应商" -#: part/templates/part/detail.html:360 +#: part/templates/part/detail.html:377 msgid "Part Manufacturers" msgstr "商品制造商" -#: part/templates/part/detail.html:376 +#: part/templates/part/detail.html:393 msgid "Delete manufacturer parts" msgstr "删除制造商商品" -#: part/templates/part/detail.html:558 +#: part/templates/part/detail.html:575 msgid "Delete selected BOM items?" msgstr "" -#: part/templates/part/detail.html:559 +#: part/templates/part/detail.html:576 msgid "All selected BOM items will be deleted" msgstr "" -#: part/templates/part/detail.html:608 +#: part/templates/part/detail.html:625 msgid "Create BOM Item" msgstr "" -#: part/templates/part/detail.html:652 +#: part/templates/part/detail.html:682 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:660 +#: part/templates/part/detail.html:690 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:755 +#: part/templates/part/detail.html:785 msgid "Add Test Result Template" msgstr "" -#: part/templates/part/detail.html:812 +#: part/templates/part/detail.html:842 msgid "Edit Part Notes" msgstr "编辑商品注释" -#: part/templates/part/detail.html:925 +#: part/templates/part/detail.html:955 #, python-format msgid "Purchase Unit Price - %(currency)s" msgstr "" -#: part/templates/part/detail.html:937 +#: part/templates/part/detail.html:967 #, python-format msgid "Unit Price-Cost Difference - %(currency)s" msgstr "" -#: part/templates/part/detail.html:949 +#: part/templates/part/detail.html:979 #, python-format msgid "Supplier Unit Cost - %(currency)s" msgstr "" -#: part/templates/part/detail.html:1038 +#: part/templates/part/detail.html:1068 #, python-format msgid "Unit Price - %(currency)s" msgstr "" @@ -4786,7 +4881,7 @@ msgstr "商品是虚拟的(不是实体零件)" #: templates/js/translated/company.js:508 #: templates/js/translated/company.js:765 #: templates/js/translated/model_renderers.js:175 -#: templates/js/translated/part.js:527 templates/js/translated/part.js:604 +#: templates/js/translated/part.js:533 templates/js/translated/part.js:610 msgid "Inactive" msgstr "" @@ -4805,10 +4900,6 @@ msgstr "" msgid "In Stock" msgstr "" -#: part/templates/part/part_base.html:203 templates/js/translated/part.js:1294 -msgid "On Order" -msgstr "" - #: part/templates/part/part_base.html:210 templates/InvenTree/index.html:178 msgid "Required for Build Orders" msgstr "" @@ -4821,12 +4912,12 @@ msgstr "" msgid "Allocated to Orders" msgstr "" -#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:678 +#: part/templates/part/part_base.html:239 templates/js/translated/bom.js:690 msgid "Can Build" msgstr "" -#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1125 -#: templates/js/translated/part.js:1298 +#: part/templates/part/part_base.html:245 templates/js/translated/part.js:1132 +#: templates/js/translated/part.js:1305 msgid "Building" msgstr "" @@ -4878,7 +4969,7 @@ msgid "Total Cost" msgstr "" #: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:40 -#: templates/js/translated/bom.js:632 +#: templates/js/translated/bom.js:644 msgid "No supplier pricing available" msgstr "" @@ -4920,7 +5011,12 @@ msgstr "" msgid "Used In" msgstr "" -#: part/templates/part/part_sidebar.html:41 +#: part/templates/part/part_sidebar.html:31 +#: stock/templates/stock/stock_sidebar.html:8 +msgid "Allocations" +msgstr "" + +#: part/templates/part/part_sidebar.html:45 msgid "Test Templates" msgstr "" @@ -4993,7 +5089,7 @@ msgstr "" msgid "Calculation parameters" msgstr "" -#: part/templates/part/prices.html:155 templates/js/translated/bom.js:626 +#: part/templates/part/prices.html:155 templates/js/translated/bom.js:638 msgid "Supplier Cost" msgstr "" @@ -5015,7 +5111,7 @@ msgstr "" msgid "Internal Cost" msgstr "" -#: part/templates/part/prices.html:215 part/views.py:1690 +#: part/templates/part/prices.html:215 part/views.py:1699 msgid "Add Internal Price Break" msgstr "" @@ -5035,9 +5131,9 @@ msgstr "" msgid "Set category for the following parts" msgstr "为以下商品设置类别" -#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:588 -#: templates/js/translated/part.js:491 templates/js/translated/part.js:1115 -#: templates/js/translated/part.js:1302 +#: part/templates/part/stock_count.html:7 templates/js/translated/bom.js:600 +#: templates/js/translated/part.js:497 templates/js/translated/part.js:1122 +#: templates/js/translated/part.js:1309 msgid "No Stock" msgstr "" @@ -5054,116 +5150,116 @@ msgstr "" msgid "Create a new variant of template '%(full_name)s'." msgstr "" -#: part/templatetags/inventree_extras.py:116 +#: part/templatetags/inventree_extras.py:125 msgid "Unknown database" msgstr "" -#: part/views.py:92 +#: part/views.py:93 msgid "Set Part Category" msgstr "设置商品类别" -#: part/views.py:142 +#: part/views.py:143 #, python-brace-format msgid "Set category for {n} parts" msgstr "为 {n} 个商品设置类别" -#: part/views.py:214 +#: part/views.py:215 msgid "Match References" msgstr "" -#: part/views.py:502 +#: part/views.py:511 msgid "None" msgstr "" -#: part/views.py:561 +#: part/views.py:570 msgid "Part QR Code" msgstr "商品二维码" -#: part/views.py:663 +#: part/views.py:672 msgid "Select Part Image" msgstr "选择商品图像" -#: part/views.py:689 +#: part/views.py:698 msgid "Updated part image" msgstr "更新商品图像" -#: part/views.py:692 +#: part/views.py:701 msgid "Part image not found" msgstr "未找到商品图像" -#: part/views.py:766 +#: part/views.py:775 msgid "Match Parts" msgstr "匹配商品" -#: part/views.py:1101 +#: part/views.py:1110 msgid "Export Bill of Materials" msgstr "" -#: part/views.py:1150 +#: part/views.py:1159 msgid "Confirm Part Deletion" msgstr "确认删除商品" -#: part/views.py:1157 +#: part/views.py:1166 msgid "Part was deleted" msgstr "商品已删除" -#: part/views.py:1166 +#: part/views.py:1175 msgid "Part Pricing" msgstr "商品价格" -#: part/views.py:1315 +#: part/views.py:1324 msgid "Create Part Parameter Template" msgstr "" -#: part/views.py:1325 +#: part/views.py:1334 msgid "Edit Part Parameter Template" msgstr "" -#: part/views.py:1332 +#: part/views.py:1341 msgid "Delete Part Parameter Template" msgstr "" -#: part/views.py:1391 templates/js/translated/part.js:315 +#: part/views.py:1400 templates/js/translated/part.js:315 msgid "Edit Part Category" msgstr "编辑商品类别" -#: part/views.py:1429 +#: part/views.py:1438 msgid "Delete Part Category" msgstr "删除商品类别" -#: part/views.py:1435 +#: part/views.py:1444 msgid "Part category was deleted" msgstr "商品类别已删除" -#: part/views.py:1444 +#: part/views.py:1453 msgid "Create Category Parameter Template" msgstr "创建类别参数模板" -#: part/views.py:1545 +#: part/views.py:1554 msgid "Edit Category Parameter Template" msgstr "编辑类别参数模板" -#: part/views.py:1601 +#: part/views.py:1610 msgid "Delete Category Parameter Template" msgstr "删除类别参数模板" -#: part/views.py:1623 +#: part/views.py:1632 msgid "Added new price break" msgstr "" -#: part/views.py:1699 +#: part/views.py:1708 msgid "Edit Internal Price Break" msgstr "" -#: part/views.py:1707 +#: part/views.py:1716 msgid "Delete Internal Price Break" msgstr "" -#: plugin/integration.py:124 +#: plugin/integration.py:138 msgid "No author found" msgstr "" -#: plugin/integration.py:136 +#: plugin/integration.py:152 msgid "No date found" msgstr "" @@ -5191,7 +5287,7 @@ msgstr "" msgid "Is the plugin active" msgstr "" -#: plugin/models.py:195 +#: plugin/models.py:199 msgid "Plugin" msgstr "" @@ -5357,12 +5453,12 @@ msgid "Stock Item Test Report" msgstr "" #: report/templates/report/inventree_test_report_base.html:79 -#: stock/models.py:517 stock/templates/stock/item_base.html:156 +#: stock/models.py:519 stock/templates/stock/item_base.html:156 #: templates/js/translated/build.js:293 templates/js/translated/build.js:697 #: templates/js/translated/build.js:1073 #: templates/js/translated/model_renderers.js:95 #: templates/js/translated/order.js:99 templates/js/translated/order.js:1945 -#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:415 +#: templates/js/translated/order.js:2034 templates/js/translated/stock.js:423 msgid "Serial Number" msgstr "序列号" @@ -5371,19 +5467,19 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:93 -#: stock/models.py:1948 +#: stock/models.py:1976 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:94 -#: stock/models.py:1954 +#: stock/models.py:1982 msgid "Result" msgstr "" #: report/templates/report/inventree_test_report_base.html:97 -#: templates/InvenTree/settings/plugin.html:49 +#: templates/InvenTree/settings/plugin.html:50 #: templates/InvenTree/settings/plugin_settings.html:38 -#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2367 +#: templates/js/translated/order.js:849 templates/js/translated/stock.js:2525 msgid "Date" msgstr "" @@ -5396,23 +5492,27 @@ msgid "Fail" msgstr "" #: report/templates/report/inventree_test_report_base.html:123 -#: stock/templates/stock/stock_sidebar.html:12 +#: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" #: report/templates/report/inventree_test_report_base.html:137 -#: templates/js/translated/stock.js:578 templates/js/translated/stock.js:748 -#: templates/js/translated/stock.js:2627 +#: templates/js/translated/stock.js:586 templates/js/translated/stock.js:756 +#: templates/js/translated/stock.js:2785 msgid "Serial" msgstr "" -#: stock/api.py:478 +#: stock/api.py:476 msgid "Quantity is required" msgstr "" -#: stock/forms.py:77 stock/forms.py:251 stock/models.py:574 +#: stock/api.py:483 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/forms.py:77 stock/forms.py:251 stock/models.py:576 #: stock/templates/stock/item_base.html:193 -#: templates/js/translated/stock.js:1701 +#: templates/js/translated/stock.js:1709 msgid "Expiry Date" msgstr "" @@ -5460,228 +5560,228 @@ msgstr "" msgid "Confirm removal of installed stock items" msgstr "" -#: stock/models.py:60 stock/models.py:611 +#: stock/models.py:62 stock/models.py:613 #: stock/templates/stock/item_base.html:416 msgid "Owner" msgstr "" -#: stock/models.py:61 stock/models.py:612 +#: stock/models.py:63 stock/models.py:614 msgid "Select Owner" msgstr "" -#: stock/models.py:336 +#: stock/models.py:338 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:372 +#: stock/models.py:374 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "商品类型 ('{pf}') 必须是 {pe}" -#: stock/models.py:382 stock/models.py:391 +#: stock/models.py:384 stock/models.py:393 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:383 +#: stock/models.py:385 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:405 +#: stock/models.py:407 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:411 +#: stock/models.py:413 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:418 +#: stock/models.py:420 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:461 +#: stock/models.py:463 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:470 +#: stock/models.py:472 msgid "Base part" msgstr "" -#: stock/models.py:478 +#: stock/models.py:480 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:484 stock/templates/stock/location.html:16 +#: stock/models.py:486 stock/templates/stock/location.html:16 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "仓储地点" -#: stock/models.py:487 +#: stock/models.py:489 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:494 +#: stock/models.py:496 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:500 stock/templates/stock/item_base.html:298 +#: stock/models.py:502 stock/templates/stock/item_base.html:298 msgid "Installed In" msgstr "" -#: stock/models.py:503 +#: stock/models.py:505 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:519 +#: stock/models.py:521 msgid "Serial number for this item" msgstr "" -#: stock/models.py:533 +#: stock/models.py:535 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:537 +#: stock/models.py:539 msgid "Stock Quantity" msgstr "" -#: stock/models.py:546 +#: stock/models.py:548 msgid "Source Build" msgstr "" -#: stock/models.py:548 +#: stock/models.py:550 msgid "Build for this stock item" msgstr "" -#: stock/models.py:559 +#: stock/models.py:561 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:562 +#: stock/models.py:564 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:568 +#: stock/models.py:570 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:575 +#: stock/models.py:577 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete on deplete" msgstr "" -#: stock/models.py:588 +#: stock/models.py:590 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:598 stock/templates/stock/item.html:111 +#: stock/models.py:600 stock/templates/stock/item.html:128 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:607 +#: stock/models.py:609 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1096 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1074 +#: stock/models.py:1102 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1080 +#: stock/models.py:1108 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:1083 +#: stock/models.py:1111 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1086 +#: stock/models.py:1114 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1093 +#: stock/models.py:1121 #, python-brace-format msgid "Serial numbers already exist: {exists}" msgstr "" -#: stock/models.py:1164 +#: stock/models.py:1192 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1195 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1170 +#: stock/models.py:1198 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1173 +#: stock/models.py:1201 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1176 +#: stock/models.py:1204 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1179 +#: stock/models.py:1207 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1186 stock/serializers.py:774 +#: stock/models.py:1214 stock/serializers.py:775 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1190 +#: stock/models.py:1218 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1194 +#: stock/models.py:1222 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1198 +#: stock/models.py:1226 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1369 +#: stock/models.py:1397 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1868 +#: stock/models.py:1896 msgid "Entry notes" msgstr "" -#: stock/models.py:1925 +#: stock/models.py:1953 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1931 +#: stock/models.py:1959 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1949 +#: stock/models.py:1977 msgid "Test name" msgstr "" -#: stock/models.py:1955 templates/js/translated/table_filters.js:271 +#: stock/models.py:1983 templates/js/translated/table_filters.js:271 msgid "Test result" msgstr "" -#: stock/models.py:1961 +#: stock/models.py:1989 msgid "Test output value" msgstr "" -#: stock/models.py:1968 +#: stock/models.py:1996 msgid "Test result attachment" msgstr "" -#: stock/models.py:1974 +#: stock/models.py:2002 msgid "Test notes" msgstr "" @@ -5706,7 +5806,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:326 stock/serializers.py:731 stock/serializers.py:972 +#: stock/serializers.py:326 stock/serializers.py:732 stock/serializers.py:973 msgid "Destination stock location" msgstr "" @@ -5718,63 +5818,63 @@ msgstr "" msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:589 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:592 +#: stock/serializers.py:593 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:597 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:626 +#: stock/serializers.py:627 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:632 +#: stock/serializers.py:633 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:640 +#: stock/serializers.py:641 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:650 stock/serializers.py:880 +#: stock/serializers.py:651 stock/serializers.py:881 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:738 +#: stock/serializers.py:739 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:743 +#: stock/serializers.py:744 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:744 +#: stock/serializers.py:745 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:749 +#: stock/serializers.py:750 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:750 +#: stock/serializers.py:751 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:760 +#: stock/serializers.py:761 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:842 +#: stock/serializers.py:843 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:870 +#: stock/serializers.py:871 msgid "Stock transaction notes" msgstr "" @@ -5787,47 +5887,51 @@ msgid "New Entry" msgstr "" #: stock/templates/stock/item.html:48 -msgid "Child Stock Items" -msgstr "" - -#: stock/templates/stock/item.html:55 -msgid "This stock item does not have any child items" +msgid "Stock Item Allocations" msgstr "" #: stock/templates/stock/item.html:64 -#: stock/templates/stock/stock_sidebar.html:8 -msgid "Test Data" -msgstr "" - -#: stock/templates/stock/item.html:68 stock/templates/stock/item_base.html:57 -msgid "Test Report" +msgid "Child Stock Items" msgstr "" #: stock/templates/stock/item.html:72 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item.html:81 +#: stock/templates/stock/stock_sidebar.html:12 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:57 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item.html:89 msgid "Delete Test Data" msgstr "" -#: stock/templates/stock/item.html:76 +#: stock/templates/stock/item.html:93 msgid "Add Test Data" msgstr "" -#: stock/templates/stock/item.html:133 +#: stock/templates/stock/item.html:150 msgid "Installed Stock Items" msgstr "" -#: stock/templates/stock/item.html:137 stock/views.py:482 +#: stock/templates/stock/item.html:154 stock/views.py:482 msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:279 stock/templates/stock/item.html:304 +#: stock/templates/stock/item.html:309 stock/templates/stock/item.html:334 msgid "Add Test Result" msgstr "" -#: stock/templates/stock/item.html:324 +#: stock/templates/stock/item.html:354 msgid "Edit Test Result" msgstr "" -#: stock/templates/stock/item.html:338 +#: stock/templates/stock/item.html:368 msgid "Delete Test Result" msgstr "" @@ -5952,7 +6056,7 @@ msgid "Stale" msgstr "" #: stock/templates/stock/item_base.html:206 -#: templates/js/translated/stock.js:1714 +#: templates/js/translated/stock.js:1722 msgid "Last Updated" msgstr "" @@ -6111,7 +6215,7 @@ msgid "Sublocations" msgstr "" #: stock/templates/stock/location.html:146 templates/InvenTree/search.html:164 -#: templates/stats.html:97 users/models.py:42 +#: templates/stats.html:109 users/models.py:42 msgid "Stock Locations" msgstr "仓储地点" @@ -6135,7 +6239,7 @@ msgstr "" msgid "Stock Tracking" msgstr "" -#: stock/templates/stock/stock_sidebar.html:16 +#: stock/templates/stock/stock_sidebar.html:20 msgid "Child Items" msgstr "" @@ -6164,7 +6268,7 @@ msgstr "" msgid "Are you sure you want to delete this stock tracking entry?" msgstr "" -#: stock/views.py:162 +#: stock/views.py:162 templates/js/translated/stock.js:139 msgid "Edit Stock Location" msgstr "编辑仓储地点" @@ -6204,7 +6308,7 @@ msgstr "" msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:727 templates/js/translated/stock.js:1066 +#: stock/views.py:727 templates/js/translated/stock.js:1074 msgid "Confirm stock adjustment" msgstr "" @@ -6212,7 +6316,7 @@ msgstr "" msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:760 templates/js/translated/stock.js:324 +#: stock/views.py:760 templates/js/translated/stock.js:332 msgid "Edit Stock Item" msgstr "" @@ -6224,7 +6328,7 @@ msgstr "新建仓储地点" msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1153 templates/js/translated/stock.js:304 +#: stock/views.py:1153 templates/js/translated/stock.js:312 msgid "Duplicate Stock Item" msgstr "" @@ -6268,6 +6372,18 @@ msgstr "" msgid "The requested page does not exist" msgstr "" +#: templates/500.html:5 templates/500.html:11 +msgid "Internal Server Error" +msgstr "" + +#: templates/500.html:14 +msgid "The InvenTree server raised an internal error" +msgstr "" + +#: templates/500.html:15 +msgid "Refer to the error log in the admin interface for further details" +msgstr "" + #: templates/503.html:10 templates/503.html:35 msgid "Site is in Maintenance" msgstr "" @@ -6390,7 +6506,7 @@ msgid "Signup" msgstr "" #: templates/InvenTree/settings/mixins/settings.html:5 -#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:118 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:113 msgid "Settings" msgstr "设置" @@ -6431,43 +6547,43 @@ msgstr "" msgid "Changing the settings below require you to immediatly restart InvenTree. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:32 +#: templates/InvenTree/settings/plugin.html:33 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:37 +#: templates/InvenTree/settings/plugin.html:38 #: templates/js/translated/plugin.js:15 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:46 templates/navbar.html:111 +#: templates/InvenTree/settings/plugin.html:47 templates/navbar.html:111 #: users/models.py:39 msgid "Admin" msgstr "管理员" -#: templates/InvenTree/settings/plugin.html:48 +#: templates/InvenTree/settings/plugin.html:49 #: templates/InvenTree/settings/plugin_settings.html:28 msgid "Author" msgstr "" -#: templates/InvenTree/settings/plugin.html:50 +#: templates/InvenTree/settings/plugin.html:51 #: templates/InvenTree/settings/plugin_settings.html:43 msgid "Version" msgstr "" -#: templates/InvenTree/settings/plugin.html:91 +#: templates/InvenTree/settings/plugin.html:92 msgid "Inactive plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:114 +#: templates/InvenTree/settings/plugin.html:115 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:123 +#: templates/InvenTree/settings/plugin.html:124 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:125 +#: templates/InvenTree/settings/plugin.html:126 msgid "Message" msgstr "" @@ -6555,37 +6671,37 @@ msgstr "未设置值" msgid "Edit setting" msgstr "编辑设置" -#: templates/InvenTree/settings/settings.html:75 +#: templates/InvenTree/settings/settings.html:78 msgid "Edit Plugin Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:77 +#: templates/InvenTree/settings/settings.html:80 msgid "Edit Global Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:79 +#: templates/InvenTree/settings/settings.html:82 msgid "Edit User Setting" msgstr "" -#: templates/InvenTree/settings/settings.html:168 +#: templates/InvenTree/settings/settings.html:171 msgid "No category parameter templates found" msgstr "未找到类别参数模板" -#: templates/InvenTree/settings/settings.html:190 -#: templates/InvenTree/settings/settings.html:289 +#: templates/InvenTree/settings/settings.html:193 +#: templates/InvenTree/settings/settings.html:292 msgid "Edit Template" msgstr "编辑模板" -#: templates/InvenTree/settings/settings.html:191 -#: templates/InvenTree/settings/settings.html:290 +#: templates/InvenTree/settings/settings.html:194 +#: templates/InvenTree/settings/settings.html:293 msgid "Delete Template" msgstr "删除模板" -#: templates/InvenTree/settings/settings.html:269 +#: templates/InvenTree/settings/settings.html:272 msgid "No part parameter templates found" msgstr "未找到商品参数模板" -#: templates/InvenTree/settings/settings.html:273 +#: templates/InvenTree/settings/settings.html:276 msgid "ID" msgstr "" @@ -6763,124 +6879,105 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:219 +#: templates/InvenTree/settings/user.html:220 +msgid "Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:226 +msgid "Log out active sessions (except this one)" +msgstr "" + +#: templates/InvenTree/settings/user.html:227 +msgid "Log Out Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:236 +msgid "unknown on unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:237 +msgid "unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:241 +msgid "IP Address" +msgstr "" + +#: templates/InvenTree/settings/user.html:242 +msgid "Device" +msgstr "" + +#: templates/InvenTree/settings/user.html:243 +msgid "Last Activity" +msgstr "" + +#: templates/InvenTree/settings/user.html:252 +#, python-format +msgid "%(time)s ago (this session)" +msgstr "" + +#: templates/InvenTree/settings/user.html:254 +#, python-format +msgid "%(time)s ago" +msgstr "" + +#: templates/InvenTree/settings/user.html:266 +msgid "Do you really want to remove the selected email address?" +msgstr "" + #: templates/InvenTree/settings/user_display.html:25 msgid "Theme Settings" msgstr "主题设置" -#: templates/InvenTree/settings/user.html:227 #: templates/InvenTree/settings/user_display.html:35 msgid "Select theme" msgstr "" -#: templates/InvenTree/settings/user.html:237 #: templates/InvenTree/settings/user_display.html:46 msgid "Set Theme" msgstr "设置主题" -#: templates/InvenTree/settings/user.html:246 #: templates/InvenTree/settings/user_display.html:54 msgid "Language Settings" msgstr "语言设置" -#: templates/InvenTree/settings/user.html:254 #: templates/InvenTree/settings/user_display.html:63 msgid "Select language" msgstr "" -#: templates/InvenTree/settings/user.html:270 #: templates/InvenTree/settings/user_display.html:79 #, python-format msgid "%(lang_translated)s%% translated" msgstr "%(lang_translated)s%% 已翻译" -#: templates/InvenTree/settings/user.html:272 #: templates/InvenTree/settings/user_display.html:81 msgid "No translations available" msgstr "无可用翻译" -#: templates/InvenTree/settings/user.html:279 #: templates/InvenTree/settings/user_display.html:88 msgid "Set Language" msgstr "设置语言" -#: templates/InvenTree/settings/user.html:281 #: templates/InvenTree/settings/user_display.html:91 msgid "Some languages are not complete" msgstr "" -#: templates/InvenTree/settings/user.html:283 #: templates/InvenTree/settings/user_display.html:93 msgid "Show only sufficent" msgstr "" -#: templates/InvenTree/settings/user.html:285 -#: templates/InvenTree/settings/user_display.html:95 -msgid "Show them too" -msgstr "" - -#: templates/InvenTree/settings/user.html:292 -#: templates/InvenTree/settings/user_display.html:101 -msgid "Help the translation efforts!" -msgstr "帮助翻译工作!" - -#: templates/InvenTree/settings/user.html:293 -#, python-format -msgid "Native language translation of the\n" -" InvenTree web application is community contributed via crowdin. Contributions are\n" -" welcomed and encouraged." -msgstr "" - -#: templates/InvenTree/settings/user.html:302 -msgid "Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:308 -msgid "Log out active sessions (except this one)" -msgstr "" - -#: templates/InvenTree/settings/user.html:309 -msgid "Log Out Active Sessions" -msgstr "" - -#: templates/InvenTree/settings/user.html:318 -msgid "unknown on unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:319 -msgid "unknown" -msgstr "" - -#: templates/InvenTree/settings/user.html:323 -msgid "IP Address" -msgstr "" - -#: templates/InvenTree/settings/user.html:324 -msgid "Device" -msgstr "" - -#: templates/InvenTree/settings/user.html:325 -msgid "Last Activity" -msgstr "" - -#: templates/InvenTree/settings/user.html:334 -#, python-format -msgid "%(time)s ago (this session)" -msgstr "" - -#: templates/InvenTree/settings/user.html:336 -#, python-format -msgid "%(time)s ago" -msgstr "" - -#: templates/InvenTree/settings/user.html:348 -msgid "Do you really want to remove the selected email address?" -msgstr "" - #: templates/InvenTree/settings/user_display.html:95 msgid "and hidden." msgstr "" +#: templates/InvenTree/settings/user_display.html:95 +msgid "Show them too" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:101 +msgid "Help the translation efforts!" +msgstr "帮助翻译工作!" + #: templates/InvenTree/settings/user_display.html:102 #, python-format msgid "Native language translation of the InvenTree web application is community contributed via crowdin. Contributions are welcomed and encouraged." @@ -6899,9 +6996,9 @@ msgid "InvenTree Version Information" msgstr "" #: templates/about.html:11 templates/about.html:105 -#: templates/js/translated/bom.js:395 templates/js/translated/modals.js:53 -#: templates/js/translated/modals.js:573 templates/js/translated/modals.js:667 -#: templates/js/translated/modals.js:970 templates/modals.html:15 +#: templates/js/translated/bom.js:407 templates/js/translated/modals.js:53 +#: templates/js/translated/modals.js:584 templates/js/translated/modals.js:678 +#: templates/js/translated/modals.js:983 templates/modals.html:15 #: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 msgid "Close" msgstr "" @@ -7178,13 +7275,13 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1103 +#: templates/js/translated/bom.js:1117 msgid "Required Quantity" msgstr "" #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/bom.js:579 templates/js/translated/build.js:1189 +#: templates/js/translated/bom.js:591 templates/js/translated/build.js:1189 #: templates/js/translated/build.js:1810 #: templates/js/translated/table_filters.js:178 msgid "Available" @@ -7208,10 +7305,6 @@ msgstr "" msgid "Click on the following link to view this part" msgstr "" -#: templates/email/low_stock_notification.html:17 -msgid "Total Stock" -msgstr "" - #: templates/email/low_stock_notification.html:19 msgid "Minimum Quantity" msgstr "" @@ -7232,11 +7325,11 @@ msgstr "" msgid "Remote image must not exceed maximum allowable file size" msgstr "" -#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1040 +#: templates/js/translated/api.js:185 templates/js/translated/modals.js:1053 msgid "No Response" msgstr "" -#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1041 +#: templates/js/translated/api.js:186 templates/js/translated/modals.js:1054 msgid "No response from the InvenTree server" msgstr "" @@ -7248,27 +7341,27 @@ msgstr "" msgid "API request returned error code 400" msgstr "" -#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1050 +#: templates/js/translated/api.js:197 templates/js/translated/modals.js:1063 msgid "Error 401: Not Authenticated" msgstr "" -#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1051 +#: templates/js/translated/api.js:198 templates/js/translated/modals.js:1064 msgid "Authentication credentials not supplied" msgstr "" -#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1055 +#: templates/js/translated/api.js:202 templates/js/translated/modals.js:1068 msgid "Error 403: Permission Denied" msgstr "" -#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1056 +#: templates/js/translated/api.js:203 templates/js/translated/modals.js:1069 msgid "You do not have the required permissions to access this function" msgstr "" -#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1060 +#: templates/js/translated/api.js:207 templates/js/translated/modals.js:1073 msgid "Error 404: Resource Not Found" msgstr "" -#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1061 +#: templates/js/translated/api.js:208 templates/js/translated/modals.js:1074 msgid "The requested resource could not be located on the server" msgstr "" @@ -7280,11 +7373,11 @@ msgstr "" msgid "HTTP method not allowed at URL" msgstr "" -#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1065 +#: templates/js/translated/api.js:217 templates/js/translated/modals.js:1078 msgid "Error 408: Timeout" msgstr "" -#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1066 +#: templates/js/translated/api.js:218 templates/js/translated/modals.js:1079 msgid "Connection timeout while requesting data from server" msgstr "" @@ -7353,7 +7446,7 @@ msgid "Unknown response from server" msgstr "" #: templates/js/translated/barcode.js:140 -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "Invalid server response" msgstr "" @@ -7381,7 +7474,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1018 +#: templates/js/translated/barcode.js:397 templates/js/translated/stock.js:1026 msgid "Remove stock item" msgstr "" @@ -7428,12 +7521,12 @@ msgid "Download BOM Template" msgstr "" #: templates/js/translated/bom.js:39 templates/js/translated/bom.js:73 -#: templates/js/translated/order.js:369 templates/js/translated/stock.js:510 +#: templates/js/translated/order.js:369 templates/js/translated/stock.js:518 msgid "Format" msgstr "" #: templates/js/translated/bom.js:40 templates/js/translated/bom.js:74 -#: templates/js/translated/order.js:370 templates/js/translated/stock.js:511 +#: templates/js/translated/order.js:370 templates/js/translated/stock.js:519 msgid "Select file format" msgstr "" @@ -7489,87 +7582,87 @@ msgstr "在导出 BOM 中包含供应商数据" msgid "Remove substitute part" msgstr "" -#: templates/js/translated/bom.js:340 -msgid "Select and add a new variant item using the input below" +#: templates/js/translated/bom.js:352 +msgid "Select and add a new substitute part using the input below" msgstr "" -#: templates/js/translated/bom.js:351 +#: templates/js/translated/bom.js:363 msgid "Are you sure you wish to remove this substitute part link?" msgstr "" -#: templates/js/translated/bom.js:357 +#: templates/js/translated/bom.js:369 msgid "Remove Substitute Part" msgstr "" -#: templates/js/translated/bom.js:396 +#: templates/js/translated/bom.js:408 msgid "Add Substitute" msgstr "" -#: templates/js/translated/bom.js:397 +#: templates/js/translated/bom.js:409 msgid "Edit BOM Item Substitutes" msgstr "" -#: templates/js/translated/bom.js:516 +#: templates/js/translated/bom.js:528 msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:520 templates/js/translated/build.js:1171 +#: templates/js/translated/bom.js:532 templates/js/translated/build.js:1171 msgid "Variant stock allowed" msgstr "" -#: templates/js/translated/bom.js:525 +#: templates/js/translated/bom.js:537 msgid "Open subassembly" msgstr "" -#: templates/js/translated/bom.js:597 +#: templates/js/translated/bom.js:609 msgid "Substitutes" msgstr "" -#: templates/js/translated/bom.js:612 +#: templates/js/translated/bom.js:624 msgid "Purchase Price Range" msgstr "" -#: templates/js/translated/bom.js:619 +#: templates/js/translated/bom.js:631 msgid "Purchase Price Average" msgstr "" -#: templates/js/translated/bom.js:668 templates/js/translated/bom.js:757 +#: templates/js/translated/bom.js:680 templates/js/translated/bom.js:769 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:728 +#: templates/js/translated/bom.js:740 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:730 +#: templates/js/translated/bom.js:742 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:732 +#: templates/js/translated/bom.js:744 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:734 templates/js/translated/bom.js:908 +#: templates/js/translated/bom.js:746 templates/js/translated/bom.js:920 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:736 templates/js/translated/bom.js:891 +#: templates/js/translated/bom.js:748 templates/js/translated/bom.js:903 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:830 templates/js/translated/build.js:915 +#: templates/js/translated/bom.js:842 templates/js/translated/build.js:915 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:886 +#: templates/js/translated/bom.js:898 msgid "Are you sure you want to delete this BOM item?" msgstr "" -#: templates/js/translated/bom.js:1086 templates/js/translated/build.js:1155 +#: templates/js/translated/bom.js:1100 templates/js/translated/build.js:1155 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1108 +#: templates/js/translated/bom.js:1122 msgid "Inherited from parent BOM" msgstr "" @@ -7725,9 +7818,9 @@ msgstr "" msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1206 -#: templates/js/translated/part.js:1617 templates/js/translated/stock.js:1512 -#: templates/js/translated/stock.js:2321 +#: templates/js/translated/build.js:1654 templates/js/translated/part.js:1213 +#: templates/js/translated/part.js:1624 templates/js/translated/stock.js:1520 +#: templates/js/translated/stock.js:2479 msgid "Select" msgstr "" @@ -7735,7 +7828,7 @@ msgstr "" msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2540 +#: templates/js/translated/build.js:1735 templates/js/translated/stock.js:2698 msgid "No user information" msgstr "没有用户信息" @@ -7808,34 +7901,34 @@ msgid "No manufacturer parts found" msgstr "" #: templates/js/translated/company.js:500 -#: templates/js/translated/company.js:757 templates/js/translated/part.js:511 -#: templates/js/translated/part.js:596 +#: templates/js/translated/company.js:757 templates/js/translated/part.js:517 +#: templates/js/translated/part.js:602 msgid "Template part" msgstr "" #: templates/js/translated/company.js:504 -#: templates/js/translated/company.js:761 templates/js/translated/part.js:515 -#: templates/js/translated/part.js:600 +#: templates/js/translated/company.js:761 templates/js/translated/part.js:521 +#: templates/js/translated/part.js:606 msgid "Assembled part" msgstr "" -#: templates/js/translated/company.js:631 templates/js/translated/part.js:690 +#: templates/js/translated/company.js:631 templates/js/translated/part.js:696 msgid "No parameters found" msgstr "无指定参数" -#: templates/js/translated/company.js:668 templates/js/translated/part.js:732 +#: templates/js/translated/company.js:668 templates/js/translated/part.js:738 msgid "Edit parameter" msgstr "编辑参数" -#: templates/js/translated/company.js:669 templates/js/translated/part.js:733 +#: templates/js/translated/company.js:669 templates/js/translated/part.js:739 msgid "Delete parameter" msgstr "删除参数" -#: templates/js/translated/company.js:688 templates/js/translated/part.js:750 +#: templates/js/translated/company.js:688 templates/js/translated/part.js:756 msgid "Edit Parameter" msgstr "编辑参数" -#: templates/js/translated/company.js:699 templates/js/translated/part.js:762 +#: templates/js/translated/company.js:699 templates/js/translated/part.js:768 msgid "Delete Parameter" msgstr "删除参数" @@ -7844,12 +7937,12 @@ msgid "No supplier parts found" msgstr "未找到供应商商品" #: templates/js/translated/filters.js:178 -#: templates/js/translated/filters.js:420 +#: templates/js/translated/filters.js:429 msgid "true" msgstr "" #: templates/js/translated/filters.js:182 -#: templates/js/translated/filters.js:421 +#: templates/js/translated/filters.js:430 msgid "false" msgstr "" @@ -7869,7 +7962,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:329 +#: templates/js/translated/filters.js:338 msgid "Create filter" msgstr "" @@ -7898,20 +7991,20 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1080 templates/modals.html:19 +#: templates/js/translated/forms.js:1082 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1471 +#: templates/js/translated/forms.js:1487 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:1675 +#: templates/js/translated/forms.js:1691 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:1895 +#: templates/js/translated/forms.js:1930 msgid "Clear input" msgstr "" @@ -7924,7 +8017,7 @@ msgid "NO" msgstr "" #: templates/js/translated/label.js:29 templates/js/translated/report.js:118 -#: templates/js/translated/stock.js:1042 +#: templates/js/translated/stock.js:1050 msgid "Select Stock Items" msgstr "选择库存项" @@ -7974,12 +8067,12 @@ msgid "Select Label Template" msgstr "选择标签模板" #: templates/js/translated/modals.js:76 templates/js/translated/modals.js:120 -#: templates/js/translated/modals.js:599 +#: templates/js/translated/modals.js:610 msgid "Cancel" msgstr "取消" #: templates/js/translated/modals.js:77 templates/js/translated/modals.js:119 -#: templates/js/translated/modals.js:666 templates/js/translated/modals.js:969 +#: templates/js/translated/modals.js:677 templates/js/translated/modals.js:982 #: templates/modals.html:28 templates/modals.html:51 msgid "Submit" msgstr "" @@ -7988,47 +8081,47 @@ msgstr "" msgid "Form Title" msgstr "" -#: templates/js/translated/modals.js:381 +#: templates/js/translated/modals.js:392 msgid "Waiting for server..." msgstr "" -#: templates/js/translated/modals.js:540 +#: templates/js/translated/modals.js:551 msgid "Show Error Information" msgstr "" -#: templates/js/translated/modals.js:598 +#: templates/js/translated/modals.js:609 msgid "Accept" msgstr "" -#: templates/js/translated/modals.js:655 +#: templates/js/translated/modals.js:666 msgid "Loading Data" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Invalid response from server" msgstr "" -#: templates/js/translated/modals.js:921 +#: templates/js/translated/modals.js:934 msgid "Form data missing from server response" msgstr "" -#: templates/js/translated/modals.js:933 +#: templates/js/translated/modals.js:946 msgid "Error posting form data" msgstr "" -#: templates/js/translated/modals.js:1030 +#: templates/js/translated/modals.js:1043 msgid "JSON response missing form data" msgstr "" -#: templates/js/translated/modals.js:1045 +#: templates/js/translated/modals.js:1058 msgid "Error 400: Bad Request" msgstr "" -#: templates/js/translated/modals.js:1046 +#: templates/js/translated/modals.js:1059 msgid "Server returned error code 400" msgstr "" -#: templates/js/translated/modals.js:1069 +#: templates/js/translated/modals.js:1082 msgid "Error requesting form data" msgstr "" @@ -8052,23 +8145,24 @@ msgstr "" msgid "Part ID" msgstr "商品ID" -#: templates/js/translated/model_renderers.js:236 +#: templates/js/translated/model_renderers.js:249 +#: templates/js/translated/model_renderers.js:270 msgid "Order ID" msgstr "" -#: templates/js/translated/model_renderers.js:253 +#: templates/js/translated/model_renderers.js:287 msgid "Shipment ID" msgstr "" -#: templates/js/translated/model_renderers.js:273 +#: templates/js/translated/model_renderers.js:307 msgid "Category ID" msgstr "类别 ID" -#: templates/js/translated/model_renderers.js:310 +#: templates/js/translated/model_renderers.js:344 msgid "Manufacturer Part ID" msgstr "制造商商品ID" -#: templates/js/translated/model_renderers.js:339 +#: templates/js/translated/model_renderers.js:373 msgid "Supplier Part ID" msgstr "供应商商品ID" @@ -8116,7 +8210,7 @@ msgstr "" msgid "Quantity to receive" msgstr "" -#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2123 +#: templates/js/translated/order.js:520 templates/js/translated/stock.js:2131 msgid "Stock Status" msgstr "" @@ -8140,7 +8234,7 @@ msgstr "" msgid "Receive Purchase Order Items" msgstr "" -#: templates/js/translated/order.js:790 templates/js/translated/part.js:803 +#: templates/js/translated/order.js:790 templates/js/translated/part.js:809 msgid "No purchase orders found" msgstr "" @@ -8165,7 +8259,7 @@ msgid "Total" msgstr "" #: templates/js/translated/order.js:1068 templates/js/translated/order.js:2163 -#: templates/js/translated/part.js:1834 templates/js/translated/part.js:2045 +#: templates/js/translated/part.js:1841 templates/js/translated/part.js:2052 msgid "Unit Price" msgstr "单价" @@ -8181,7 +8275,7 @@ msgstr "" msgid "Delete line item" msgstr "" -#: templates/js/translated/order.js:1166 templates/js/translated/part.js:935 +#: templates/js/translated/order.js:1166 templates/js/translated/part.js:942 msgid "Receive line item" msgstr "" @@ -8250,7 +8344,7 @@ msgid "Delete Stock Allocation" msgstr "" #: templates/js/translated/order.js:1959 templates/js/translated/order.js:2048 -#: templates/js/translated/stock.js:1428 +#: templates/js/translated/stock.js:1436 msgid "Shipped to customer" msgstr "" @@ -8378,144 +8472,148 @@ msgstr "编辑商品" msgid "Part edited" msgstr "" -#: templates/js/translated/part.js:412 +#: templates/js/translated/part.js:351 +msgid "Create Part Variant" +msgstr "" + +#: templates/js/translated/part.js:418 msgid "You are subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:414 +#: templates/js/translated/part.js:420 msgid "You have subscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:419 +#: templates/js/translated/part.js:425 msgid "Subscribe to notifications for this item" msgstr "" -#: templates/js/translated/part.js:421 +#: templates/js/translated/part.js:427 msgid "You have unsubscribed to notifications for this item" msgstr "" -#: templates/js/translated/part.js:438 +#: templates/js/translated/part.js:444 msgid "Validating the BOM will mark each line item as valid" msgstr "" -#: templates/js/translated/part.js:448 +#: templates/js/translated/part.js:454 msgid "Validate Bill of Materials" msgstr "" -#: templates/js/translated/part.js:451 +#: templates/js/translated/part.js:457 msgid "Validated Bill of Materials" msgstr "" -#: templates/js/translated/part.js:475 +#: templates/js/translated/part.js:481 msgid "Copy Bill of Materials" msgstr "" -#: templates/js/translated/part.js:503 templates/js/translated/part.js:588 +#: templates/js/translated/part.js:509 templates/js/translated/part.js:594 msgid "Trackable part" msgstr "可追溯商品" -#: templates/js/translated/part.js:507 templates/js/translated/part.js:592 +#: templates/js/translated/part.js:513 templates/js/translated/part.js:598 msgid "Virtual part" msgstr "虚拟商品" -#: templates/js/translated/part.js:519 +#: templates/js/translated/part.js:525 msgid "Subscribed part" msgstr "" -#: templates/js/translated/part.js:523 +#: templates/js/translated/part.js:529 msgid "Salable part" msgstr "可销售商品" -#: templates/js/translated/part.js:638 +#: templates/js/translated/part.js:644 msgid "No variants found" msgstr "" -#: templates/js/translated/part.js:1005 +#: templates/js/translated/part.js:1012 msgid "Delete part relationship" msgstr "" -#: templates/js/translated/part.js:1029 +#: templates/js/translated/part.js:1036 msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:1096 templates/js/translated/part.js:1356 +#: templates/js/translated/part.js:1103 templates/js/translated/part.js:1363 msgid "No parts found" msgstr "" -#: templates/js/translated/part.js:1266 +#: templates/js/translated/part.js:1273 msgid "No category" msgstr "没有分类" -#: templates/js/translated/part.js:1289 +#: templates/js/translated/part.js:1296 #: templates/js/translated/table_filters.js:430 msgid "Low stock" msgstr "" -#: templates/js/translated/part.js:1380 templates/js/translated/part.js:1552 -#: templates/js/translated/stock.js:2282 +#: templates/js/translated/part.js:1387 templates/js/translated/part.js:1559 +#: templates/js/translated/stock.js:2440 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:1396 +#: templates/js/translated/part.js:1403 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:1571 templates/js/translated/stock.js:2301 +#: templates/js/translated/part.js:1578 templates/js/translated/stock.js:2459 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:1635 +#: templates/js/translated/part.js:1642 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:1649 templates/js/translated/stock.js:2345 +#: templates/js/translated/part.js:1656 templates/js/translated/stock.js:2503 msgid "Path" msgstr "" -#: templates/js/translated/part.js:1693 +#: templates/js/translated/part.js:1700 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:1744 templates/js/translated/stock.js:1234 +#: templates/js/translated/part.js:1751 templates/js/translated/stock.js:1242 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:1745 templates/js/translated/stock.js:1235 +#: templates/js/translated/part.js:1752 templates/js/translated/stock.js:1243 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:1751 +#: templates/js/translated/part.js:1758 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:1773 +#: templates/js/translated/part.js:1780 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:1787 +#: templates/js/translated/part.js:1794 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:1812 +#: templates/js/translated/part.js:1819 #, python-brace-format msgid "No ${human_name} information found" msgstr "" -#: templates/js/translated/part.js:1867 +#: templates/js/translated/part.js:1874 #, python-brace-format msgid "Edit ${human_name}" msgstr "" -#: templates/js/translated/part.js:1868 +#: templates/js/translated/part.js:1875 #, python-brace-format msgid "Delete ${human_name}" msgstr "" -#: templates/js/translated/part.js:1969 +#: templates/js/translated/part.js:1976 msgid "Single Price" msgstr "" -#: templates/js/translated/part.js:1988 +#: templates/js/translated/part.js:1995 msgid "Single Price Difference" msgstr "" @@ -8589,340 +8687,344 @@ msgstr "" msgid "Sales Order(s) must be selected before printing report" msgstr "" -#: templates/js/translated/stock.js:73 +#: templates/js/translated/stock.js:74 msgid "Serialize Stock Item" msgstr "" -#: templates/js/translated/stock.js:91 templates/js/translated/stock.js:173 +#: templates/js/translated/stock.js:92 templates/js/translated/stock.js:181 msgid "Next available serial number" msgstr "" -#: templates/js/translated/stock.js:93 templates/js/translated/stock.js:175 +#: templates/js/translated/stock.js:94 templates/js/translated/stock.js:183 msgid "Latest serial number" msgstr "" -#: templates/js/translated/stock.js:101 +#: templates/js/translated/stock.js:102 msgid "Confirm Stock Serialization" msgstr "" -#: templates/js/translated/stock.js:110 +#: templates/js/translated/stock.js:111 msgid "Parent stock location" msgstr "" -#: templates/js/translated/stock.js:146 +#: templates/js/translated/stock.js:154 msgid "New Stock Location" msgstr "" -#: templates/js/translated/stock.js:186 +#: templates/js/translated/stock.js:194 msgid "This part cannot be serialized" msgstr "" -#: templates/js/translated/stock.js:225 +#: templates/js/translated/stock.js:233 msgid "Enter initial quantity for this stock item" msgstr "" -#: templates/js/translated/stock.js:231 +#: templates/js/translated/stock.js:239 msgid "Enter serial numbers for new stock (or leave blank)" msgstr "" -#: templates/js/translated/stock.js:374 +#: templates/js/translated/stock.js:382 msgid "Created new stock item" msgstr "" -#: templates/js/translated/stock.js:387 +#: templates/js/translated/stock.js:395 msgid "Created multiple stock items" msgstr "" -#: templates/js/translated/stock.js:412 +#: templates/js/translated/stock.js:420 msgid "Find Serial Number" msgstr "" -#: templates/js/translated/stock.js:416 templates/js/translated/stock.js:417 +#: templates/js/translated/stock.js:424 templates/js/translated/stock.js:425 msgid "Enter serial number" msgstr "" -#: templates/js/translated/stock.js:433 +#: templates/js/translated/stock.js:441 msgid "Enter a serial number" msgstr "" -#: templates/js/translated/stock.js:453 +#: templates/js/translated/stock.js:461 msgid "No matching serial number" msgstr "" -#: templates/js/translated/stock.js:462 +#: templates/js/translated/stock.js:470 msgid "More than one matching result found" msgstr "" -#: templates/js/translated/stock.js:507 +#: templates/js/translated/stock.js:515 msgid "Export Stock" msgstr "" -#: templates/js/translated/stock.js:518 +#: templates/js/translated/stock.js:526 msgid "Include Sublocations" msgstr "" -#: templates/js/translated/stock.js:519 +#: templates/js/translated/stock.js:527 msgid "Include stock items in sublocations" msgstr "" -#: templates/js/translated/stock.js:628 +#: templates/js/translated/stock.js:636 msgid "Confirm stock assignment" msgstr "" -#: templates/js/translated/stock.js:629 +#: templates/js/translated/stock.js:637 msgid "Assign Stock to Customer" msgstr "" -#: templates/js/translated/stock.js:706 +#: templates/js/translated/stock.js:714 msgid "Warning: Merge operation cannot be reversed" msgstr "" -#: templates/js/translated/stock.js:707 +#: templates/js/translated/stock.js:715 msgid "Some information will be lost when merging stock items" msgstr "" -#: templates/js/translated/stock.js:709 +#: templates/js/translated/stock.js:717 msgid "Stock transaction history will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:710 +#: templates/js/translated/stock.js:718 msgid "Supplier part information will be deleted for merged items" msgstr "" -#: templates/js/translated/stock.js:796 +#: templates/js/translated/stock.js:804 msgid "Confirm stock item merge" msgstr "" -#: templates/js/translated/stock.js:797 +#: templates/js/translated/stock.js:805 msgid "Merge Stock Items" msgstr "" -#: templates/js/translated/stock.js:892 +#: templates/js/translated/stock.js:900 msgid "Transfer Stock" msgstr "" -#: templates/js/translated/stock.js:893 +#: templates/js/translated/stock.js:901 msgid "Move" msgstr "" -#: templates/js/translated/stock.js:899 +#: templates/js/translated/stock.js:907 msgid "Count Stock" msgstr "" -#: templates/js/translated/stock.js:900 +#: templates/js/translated/stock.js:908 msgid "Count" msgstr "" -#: templates/js/translated/stock.js:904 +#: templates/js/translated/stock.js:912 msgid "Remove Stock" msgstr "" -#: templates/js/translated/stock.js:905 +#: templates/js/translated/stock.js:913 msgid "Take" msgstr "" -#: templates/js/translated/stock.js:909 +#: templates/js/translated/stock.js:917 msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:910 users/models.py:206 +#: templates/js/translated/stock.js:918 users/models.py:208 msgid "Add" msgstr "添加" -#: templates/js/translated/stock.js:914 templates/stock_table.html:58 +#: templates/js/translated/stock.js:922 templates/stock_table.html:58 msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1003 +#: templates/js/translated/stock.js:1011 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1043 +#: templates/js/translated/stock.js:1051 msgid "You must select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1201 +#: templates/js/translated/stock.js:1209 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1203 +#: templates/js/translated/stock.js:1211 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1208 +#: templates/js/translated/stock.js:1216 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1230 +#: templates/js/translated/stock.js:1238 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1256 +#: templates/js/translated/stock.js:1264 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1313 +#: templates/js/translated/stock.js:1321 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1420 +#: templates/js/translated/stock.js:1428 msgid "In production" msgstr "正在生产" -#: templates/js/translated/stock.js:1424 +#: templates/js/translated/stock.js:1432 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1432 +#: templates/js/translated/stock.js:1440 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1438 +#: templates/js/translated/stock.js:1446 msgid "No stock location set" msgstr "未设置仓储地点" -#: templates/js/translated/stock.js:1596 +#: templates/js/translated/stock.js:1604 msgid "Stock item is in production" msgstr "库存品正在生产" -#: templates/js/translated/stock.js:1601 +#: templates/js/translated/stock.js:1609 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:1604 +#: templates/js/translated/stock.js:1612 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:1608 +#: templates/js/translated/stock.js:1616 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:1610 +#: templates/js/translated/stock.js:1618 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:1616 +#: templates/js/translated/stock.js:1624 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:1618 +#: templates/js/translated/stock.js:1626 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:1620 +#: templates/js/translated/stock.js:1628 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:1625 +#: templates/js/translated/stock.js:1633 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:1632 +#: templates/js/translated/stock.js:1640 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:1634 +#: templates/js/translated/stock.js:1642 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:1636 +#: templates/js/translated/stock.js:1644 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:1640 +#: templates/js/translated/stock.js:1648 #: templates/js/translated/table_filters.js:188 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:1690 +#: templates/js/translated/stock.js:1698 msgid "Stocktake" msgstr "" -#: templates/js/translated/stock.js:1763 +#: templates/js/translated/stock.js:1771 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:1801 +#: templates/js/translated/stock.js:1809 msgid "No stock items matching query" msgstr "" -#: templates/js/translated/stock.js:1822 templates/js/translated/stock.js:1870 +#: templates/js/translated/stock.js:1830 templates/js/translated/stock.js:1878 msgid "items" msgstr "" -#: templates/js/translated/stock.js:1910 +#: templates/js/translated/stock.js:1918 msgid "batches" msgstr "" -#: templates/js/translated/stock.js:1937 +#: templates/js/translated/stock.js:1945 msgid "locations" msgstr "" -#: templates/js/translated/stock.js:1939 +#: templates/js/translated/stock.js:1947 msgid "Undefined location" msgstr "" -#: templates/js/translated/stock.js:2138 +#: templates/js/translated/stock.js:2146 msgid "Set Stock Status" msgstr "" -#: templates/js/translated/stock.js:2152 +#: templates/js/translated/stock.js:2160 msgid "Select Status Code" msgstr "" -#: templates/js/translated/stock.js:2153 +#: templates/js/translated/stock.js:2161 msgid "Status code must be selected" msgstr "" -#: templates/js/translated/stock.js:2377 +#: templates/js/translated/stock.js:2340 +msgid "Allocated Quantity" +msgstr "" + +#: templates/js/translated/stock.js:2535 msgid "Invalid date" msgstr "" -#: templates/js/translated/stock.js:2399 +#: templates/js/translated/stock.js:2557 msgid "Details" msgstr "详情" -#: templates/js/translated/stock.js:2424 +#: templates/js/translated/stock.js:2582 msgid "Location no longer exists" msgstr "" -#: templates/js/translated/stock.js:2443 +#: templates/js/translated/stock.js:2601 msgid "Purchase order no longer exists" msgstr "" -#: templates/js/translated/stock.js:2462 +#: templates/js/translated/stock.js:2620 msgid "Customer no longer exists" msgstr "" -#: templates/js/translated/stock.js:2480 +#: templates/js/translated/stock.js:2638 msgid "Stock item no longer exists" msgstr "" -#: templates/js/translated/stock.js:2503 +#: templates/js/translated/stock.js:2661 msgid "Added" msgstr "" -#: templates/js/translated/stock.js:2511 +#: templates/js/translated/stock.js:2669 msgid "Removed" msgstr "" -#: templates/js/translated/stock.js:2552 +#: templates/js/translated/stock.js:2710 msgid "Edit tracking entry" msgstr "" -#: templates/js/translated/stock.js:2553 +#: templates/js/translated/stock.js:2711 msgid "Delete tracking entry" msgstr "" -#: templates/js/translated/stock.js:2604 +#: templates/js/translated/stock.js:2762 msgid "No installed items" msgstr "" -#: templates/js/translated/stock.js:2655 +#: templates/js/translated/stock.js:2813 msgid "Uninstall Stock Item" msgstr "" @@ -9194,11 +9296,11 @@ msgstr "采购" msgid "Sell" msgstr "销售" -#: templates/navbar.html:113 +#: templates/navbar.html:114 msgid "Logout" msgstr "" -#: templates/navbar.html:115 +#: templates/navbar.html:116 msgid "Login" msgstr "" @@ -9246,31 +9348,43 @@ msgstr "" msgid "Server is deployed using docker" msgstr "" -#: templates/stats.html:40 -msgid "Server status" +#: templates/stats.html:39 +msgid "Plugin Support" msgstr "" #: templates/stats.html:43 -msgid "Healthy" +msgid "Plugin support enabled" msgstr "" #: templates/stats.html:45 -msgid "Issues detected" +msgid "Plugin support disabled" msgstr "" #: templates/stats.html:52 -msgid "Background Worker" +msgid "Server status" msgstr "" #: templates/stats.html:55 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:57 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:64 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:67 msgid "Background worker not running" msgstr "" -#: templates/stats.html:63 +#: templates/stats.html:75 msgid "Email Settings" msgstr "电子邮件设置" -#: templates/stats.html:66 +#: templates/stats.html:78 msgid "Email settings not configured" msgstr "电子邮件设置未配置" @@ -9366,35 +9480,35 @@ msgstr "权限" msgid "Important dates" msgstr "重要日期" -#: users/models.py:193 +#: users/models.py:195 msgid "Permission set" msgstr "权限设置" -#: users/models.py:201 +#: users/models.py:203 msgid "Group" msgstr "群组" -#: users/models.py:204 +#: users/models.py:206 msgid "View" msgstr "视图" -#: users/models.py:204 +#: users/models.py:206 msgid "Permission to view items" msgstr "查看项目权限" -#: users/models.py:206 +#: users/models.py:208 msgid "Permission to add items" msgstr "添加项目权限" -#: users/models.py:208 +#: users/models.py:210 msgid "Change" msgstr "更改" -#: users/models.py:208 +#: users/models.py:210 msgid "Permissions to edit items" msgstr "编辑项目权限" -#: users/models.py:210 +#: users/models.py:212 msgid "Permission to delete items" msgstr "删除项目权限" From 318e84883a413274c3dc6dccd8f0998e8897fe40 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 1 Feb 2022 15:51:38 +1100 Subject: [PATCH 24/92] Adds a warning if no build outputs are created --- InvenTree/build/templates/build/build_base.html | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/InvenTree/build/templates/build/build_base.html b/InvenTree/build/templates/build/build_base.html index ae6ea6d4d3..7340f1486d 100644 --- a/InvenTree/build/templates/build/build_base.html +++ b/InvenTree/build/templates/build/build_base.html @@ -90,6 +90,11 @@ src="{% static 'img/blank_image.png' %}"
+ {% if not build.has_build_outputs %} +
+ {% trans "No build outputs have been created for this build order" %}
+
+ {% endif %} {% if build.sales_order %}
{% object_link 'so-detail' build.sales_order.id build.sales_order as link %} From 00d7cf88e8957eb823dff8c0c525503d412ca31d Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 1 Feb 2022 15:58:18 +1100 Subject: [PATCH 25/92] Throw validation error if no build outputs have been started --- InvenTree/build/models.py | 3 +++ InvenTree/build/serializers.py | 3 +++ 2 files changed, 6 insertions(+) diff --git a/InvenTree/build/models.py b/InvenTree/build/models.py index 8cad93352b..0eeffd107d 100644 --- a/InvenTree/build/models.py +++ b/InvenTree/build/models.py @@ -437,6 +437,9 @@ class Build(MPTTModel, ReferenceIndexingMixin): def output_count(self): return self.build_outputs.count() + def has_build_outputs(self): + return self.output_count > 0 + def get_build_outputs(self, **kwargs): """ Return a list of build outputs. diff --git a/InvenTree/build/serializers.py b/InvenTree/build/serializers.py index fb34a40a16..2508b02927 100644 --- a/InvenTree/build/serializers.py +++ b/InvenTree/build/serializers.py @@ -284,6 +284,9 @@ class BuildCompleteSerializer(serializers.Serializer): if build.incomplete_count > 0: raise ValidationError(_("Build order has incomplete outputs")) + if not build.has_build_outputs(): + raise ValidationError(_("No build outputs have been created for this build order")) + return data def save(self): From ea1f1b398e9c5b7364bc807f48e1fa914a356e41 Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 2 Feb 2022 12:40:10 +1100 Subject: [PATCH 26/92] Prevent AttributeError from being thrown Ref: https://github.com/inventree/InvenTree/issues/2587 --- InvenTree/stock/migrations/0064_auto_20210621_1724.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InvenTree/stock/migrations/0064_auto_20210621_1724.py b/InvenTree/stock/migrations/0064_auto_20210621_1724.py index 361ad02c80..666de26189 100644 --- a/InvenTree/stock/migrations/0064_auto_20210621_1724.py +++ b/InvenTree/stock/migrations/0064_auto_20210621_1724.py @@ -43,7 +43,7 @@ def extract_purchase_price(apps, schema_editor): if lines.exists(): for line in lines: - if line.purchase_price is not None: + if getattr(line, 'purchase_price', None) is not None: # Copy pricing information across item.purchase_price = line.purchase_price From bbe14690f1283f6c2ff8ef84313396a6784695ff Mon Sep 17 00:00:00 2001 From: Nigel Date: Tue, 1 Feb 2022 10:32:35 -0700 Subject: [PATCH 27/92] fix: use default storage backend for Maint Mode --- InvenTree/InvenTree/settings.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/InvenTree/InvenTree/settings.py b/InvenTree/InvenTree/settings.py index f2654a49cc..171426bce5 100644 --- a/InvenTree/InvenTree/settings.py +++ b/InvenTree/InvenTree/settings.py @@ -172,12 +172,6 @@ if MEDIA_ROOT is None: print("ERROR: INVENTREE_MEDIA_ROOT directory is not defined") sys.exit(1) -# Options for django-maintenance-mode : https://pypi.org/project/django-maintenance-mode/ -MAINTENANCE_MODE_STATE_FILE_PATH = os.path.join( - config_dir, - 'maintenance_mode_state.txt', -) - # List of allowed hosts (default = allow all) ALLOWED_HOSTS = CONFIG.get('allowed_hosts', ['*']) @@ -870,6 +864,7 @@ MARKDOWNIFY_BLEACH = False # Maintenance mode MAINTENANCE_MODE_RETRY_AFTER = 60 +MAINTENANCE_MODE_STATE_BACKEND = 'maintenance_mode.backends.DefaultStorageBackend' # Are plugins enabled? PLUGINS_ENABLED = _is_true(get_setting( From de7e152081b0b499bb5d9f1f89d1e168f0f90d9f Mon Sep 17 00:00:00 2001 From: eeintech Date: Wed, 2 Feb 2022 14:01:53 -0500 Subject: [PATCH 28/92] Experimenting with children models permissions --- InvenTree/users/models.py | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/InvenTree/users/models.py b/InvenTree/users/models.py index 2f73e67955..458e2d0758 100644 --- a/InvenTree/users/models.py +++ b/InvenTree/users/models.py @@ -176,6 +176,10 @@ class RuleSet(models.Model): 'django_q_success', ] + RULESET_CHANGE_DELETE = [ + ('part', 'bomitem') + ] + RULE_OPTIONS = [ 'can_view', 'can_add', @@ -225,13 +229,15 @@ class RuleSet(models.Model): for role in cls.RULESET_NAMES: if table in cls.RULESET_MODELS[role]: + print(f'{user} | {role} | {permission}') + if check_user_role(user, role, permission): return True # Print message instead of throwing an error name = getattr(user, 'name', user.pk) - logger.info(f"User '{name}' failed permission check for {table}.{permission}") + print(f"User '{name}' failed permission check for {table}.{permission}") return False @@ -453,6 +459,32 @@ def update_group_roles(group, debug=False): if debug: print(f"Removing permission {perm} from group {group.name}") + print(group_permissions) + + # Automatically enable delete permission for children models if parent model has change permission + for change_delete in RuleSet.RULESET_CHANGE_DELETE: + perm_change = f'{change_delete[0]}.change_{change_delete[0]}' + perm_delete = f'{change_delete[0]}.delete_{change_delete[1]}' + + print(perm_change) + # Check if permission is in the group + if perm_change in group_permissions: + if perm_delete not in group_permissions: + # Create delete permission object + add_model(f'{change_delete[0]}_{change_delete[1]}', 'delete', ruleset.can_delete) + + # Add to group + permission = get_permission_object(perm_delete) + print(permission) + + if permission: + group.permissions.add(permission) + print(f"Added permission {perm_delete} to group {group.name}") + else: + print(f'{perm_delete} already exists for group {group.name}') + else: + print(f'{perm_change} disabled') + @receiver(post_save, sender=Group, dispatch_uid='create_missing_rule_sets') def create_missing_rule_sets(sender, instance, **kwargs): From b387b4e1733e0bc5ade3973a7d5c00183639d745 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 3 Feb 2022 14:13:13 +1100 Subject: [PATCH 29/92] Prevent build outputs being created with zero quantity --- InvenTree/build/views.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/InvenTree/build/views.py b/InvenTree/build/views.py index 1a933af835..ec2ce27966 100644 --- a/InvenTree/build/views.py +++ b/InvenTree/build/views.py @@ -95,17 +95,24 @@ class BuildOutputCreate(AjaxUpdateView): quantity = form.cleaned_data.get('output_quantity', None) serials = form.cleaned_data.get('serial_numbers', None) - if quantity: + if quantity is not None: build = self.get_object() # Check that requested output don't exceed build remaining quantity maximum_output = int(build.remaining - build.incomplete_count) + if quantity > maximum_output: form.add_error( 'output_quantity', _('Maximum output quantity is ') + str(maximum_output), ) + elif quantity <= 0: + form.add_error( + 'output_quantity', + _('Output quantity must be greater than zero'), + ) + # Check that the serial numbers are valid if serials: try: From 566fd87e86848878b8b2043520c459945a82d5df Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 3 Feb 2022 14:16:33 +1100 Subject: [PATCH 30/92] PEP style fixes --- InvenTree/build/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/InvenTree/build/views.py b/InvenTree/build/views.py index ec2ce27966..21cf5dda99 100644 --- a/InvenTree/build/views.py +++ b/InvenTree/build/views.py @@ -100,7 +100,7 @@ class BuildOutputCreate(AjaxUpdateView): # Check that requested output don't exceed build remaining quantity maximum_output = int(build.remaining - build.incomplete_count) - + if quantity > maximum_output: form.add_error( 'output_quantity', @@ -112,7 +112,7 @@ class BuildOutputCreate(AjaxUpdateView): 'output_quantity', _('Output quantity must be greater than zero'), ) - + # Check that the serial numbers are valid if serials: try: From 66e5aa4060ba79550f5334ca619e9c0cb222ee98 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 3 Feb 2022 14:23:25 +1100 Subject: [PATCH 31/92] Reload build output table when an active build output is deleted --- InvenTree/templates/js/translated/build.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InvenTree/templates/js/translated/build.js b/InvenTree/templates/js/translated/build.js index 43f8fd1110..17970f0f41 100644 --- a/InvenTree/templates/js/translated/build.js +++ b/InvenTree/templates/js/translated/build.js @@ -610,7 +610,7 @@ function loadBuildOutputTable(build_info, options={}) { data: { output: pk }, - onSuccess: function() { + success: function() { $(table).bootstrapTable('refresh'); } } From c6089a282872ebd261bc2a03844aae73917c49a6 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 3 Feb 2022 14:47:35 +1100 Subject: [PATCH 32/92] Reload completed output table --- InvenTree/build/templates/build/detail.html | 1 + InvenTree/templates/js/translated/build.js | 1 + 2 files changed, 2 insertions(+) diff --git a/InvenTree/build/templates/build/detail.html b/InvenTree/build/templates/build/detail.html index 8479c2819f..b548632b56 100644 --- a/InvenTree/build/templates/build/detail.html +++ b/InvenTree/build/templates/build/detail.html @@ -252,6 +252,7 @@
+ {% include "filter_list.html" with id='incompletebuilditems' %}
{% endif %}
diff --git a/InvenTree/templates/js/translated/build.js b/InvenTree/templates/js/translated/build.js index 17970f0f41..3868ac1b09 100644 --- a/InvenTree/templates/js/translated/build.js +++ b/InvenTree/templates/js/translated/build.js @@ -594,6 +594,7 @@ function loadBuildOutputTable(build_info, options={}) { { success: function() { $(table).bootstrapTable('refresh'); + $('#build-stock-table').bootstrapTable('refresh'); } } ); From 72be63572e9eb2c1604799de552337d3c1d6667e Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 3 Feb 2022 14:52:38 +1100 Subject: [PATCH 33/92] Fixes issue with BOM export - Cascading BOM export was broken --- InvenTree/templates/js/translated/bom.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/InvenTree/templates/js/translated/bom.js b/InvenTree/templates/js/translated/bom.js index 23b9a8cd50..6e4bfdcf25 100644 --- a/InvenTree/templates/js/translated/bom.js +++ b/InvenTree/templates/js/translated/bom.js @@ -77,7 +77,7 @@ function exportBom(part_id, options={}) { value: inventreeLoad('bom-export-format', 'csv'), choices: exportFormatOptions(), }, - cascading: { + cascade: { label: '{% trans "Cascading" %}', help_text: '{% trans "Download cascading / multi-level BOM" %}', type: 'boolean', @@ -118,7 +118,7 @@ function exportBom(part_id, options={}) { onSubmit: function(fields, opts) { // Extract values from the form - var field_names = ['format', 'cascading', 'levels', 'parameter_data', 'stock_data', 'manufacturer_data', 'supplier_data']; + var field_names = ['format', 'cascade', 'levels', 'parameter_data', 'stock_data', 'manufacturer_data', 'supplier_data']; var url = `/part/${part_id}/bom-download/?`; From ababab944bcd72372ea625d6e500487d09a9cca7 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 3 Feb 2022 15:25:21 +1100 Subject: [PATCH 34/92] Boolean settings are now directly clickable --- .../templates/InvenTree/settings/setting.html | 4 ++- .../InvenTree/settings/settings.html | 36 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/InvenTree/templates/InvenTree/settings/setting.html b/InvenTree/templates/InvenTree/settings/setting.html index 16fc67ef86..dc15760ef5 100644 --- a/InvenTree/templates/InvenTree/settings/setting.html +++ b/InvenTree/templates/InvenTree/settings/setting.html @@ -19,7 +19,7 @@ {% if setting.is_bool %}
- +
{% else %}
@@ -37,10 +37,12 @@ {{ setting.description }} + {% if not setting.is_bool %}
+ {% endif %} \ No newline at end of file diff --git a/InvenTree/templates/InvenTree/settings/settings.html b/InvenTree/templates/InvenTree/settings/settings.html index 5fcd18644f..4b6c9e9320 100644 --- a/InvenTree/templates/InvenTree/settings/settings.html +++ b/InvenTree/templates/InvenTree/settings/settings.html @@ -62,6 +62,42 @@ {% block js_ready %} {{ block.super }} +// Callback for when boolean settings are edited +$('table').find('.boolean-setting').change(function() { + + var setting = $(this).attr('setting'); + var pk = $(this).attr('pk'); + var plugin = $(this).attr('plugin'); + var user = $(this).attr('user'); + + var checked = this.checked; + + // Global setting by default + var url = `/api/settings/global/${pk}/`; + + if (plugin) { + url = `/api/plugin/settings/${pk}/`; + } else if (user) { + url = `/api/settings/user/${pk}/`; + } + + inventreePut( + url, + { + value: checked.toString(), + }, + { + method: 'PATCH', + onSuccess: function(data) { + }, + error: function(xhr) { + } + } + ); + +}); + +// Callback for when non-boolean settings are edited $('table').find('.btn-edit-setting').click(function() { var setting = $(this).attr('setting'); var pk = $(this).attr('pk'); From 5cd5ee81aff86dbce4f5363b5834aedaa7ceda2e Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 3 Feb 2022 15:30:36 +1100 Subject: [PATCH 35/92] Layout changes --- .../templates/InvenTree/settings/setting.html | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/InvenTree/templates/InvenTree/settings/setting.html b/InvenTree/templates/InvenTree/settings/setting.html index dc15760ef5..743e37bf8e 100644 --- a/InvenTree/templates/InvenTree/settings/setting.html +++ b/InvenTree/templates/InvenTree/settings/setting.html @@ -16,6 +16,9 @@ {% endif %} {{ setting.name }} + + {{ setting.description }} + {% if setting.is_bool %}
@@ -31,18 +34,12 @@ {% endif %} {{ setting.units }} -
- {% endif %} - - {{ setting.description }} - - - {% if not setting.is_bool %} -
- +
+ +
{% endif %} - \ No newline at end of file + From bf528db4ab585744b57e1eb11d70de7004120a35 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 3 Feb 2022 15:46:44 +1100 Subject: [PATCH 36/92] Display error if setting update failes --- InvenTree/templates/InvenTree/settings/settings.html | 1 + 1 file changed, 1 insertion(+) diff --git a/InvenTree/templates/InvenTree/settings/settings.html b/InvenTree/templates/InvenTree/settings/settings.html index 4b6c9e9320..ba27187747 100644 --- a/InvenTree/templates/InvenTree/settings/settings.html +++ b/InvenTree/templates/InvenTree/settings/settings.html @@ -91,6 +91,7 @@ $('table').find('.boolean-setting').change(function() { onSuccess: function(data) { }, error: function(xhr) { + showApiError(xhr, url); } } ); From 78b1c7a22bfb2f7ff077554b7d4e5ffb9e1239e9 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 3 Feb 2022 16:03:46 +1100 Subject: [PATCH 37/92] Skips some specific steps when importing data - We need to prevent certain operations from running when we are importing data - This is to prevent unique database constraints from being violated - Do not register plugins during data import - Do not launch notification events --- InvenTree/InvenTree/ready.py | 12 +++++++++--- InvenTree/build/tasks.py | 6 ++++++ InvenTree/part/tasks.py | 5 +++++ InvenTree/plugin/apps.py | 21 +++++++++++++-------- 4 files changed, 33 insertions(+), 11 deletions(-) diff --git a/InvenTree/InvenTree/ready.py b/InvenTree/InvenTree/ready.py index 7d63861f4b..9f5ad0ea49 100644 --- a/InvenTree/InvenTree/ready.py +++ b/InvenTree/InvenTree/ready.py @@ -6,10 +6,16 @@ def isInTestMode(): Returns True if the database is in testing mode """ - if 'test' in sys.argv: - return True + return 'test' in sys.argv - return False + +def isImportingData(): + """ + Returns True if the database is currently importing data, + e.g. 'loaddata' command is performed + """ + + return 'loaddata' in sys.argv def canAppAccessDatabase(allow_test=False): diff --git a/InvenTree/build/tasks.py b/InvenTree/build/tasks.py index 6fe4be5119..6752bc5501 100644 --- a/InvenTree/build/tasks.py +++ b/InvenTree/build/tasks.py @@ -12,6 +12,8 @@ from allauth.account.models import EmailAddress import build.models import InvenTree.helpers import InvenTree.tasks +from InvenTree.ready import isImportingData + import part.models as part_models @@ -24,6 +26,10 @@ def check_build_stock(build: build.models.Build): and send an email out to any subscribed users if stock is low. """ + # Do not notify if we are importing data + if isImportingData(): + return + # Iterate through each of the parts required for this build lines = [] diff --git a/InvenTree/part/tasks.py b/InvenTree/part/tasks.py index a7c24b385b..a004b8a8cf 100644 --- a/InvenTree/part/tasks.py +++ b/InvenTree/part/tasks.py @@ -13,6 +13,7 @@ from common.models import NotificationEntry import InvenTree.helpers import InvenTree.tasks +from InvenTree.ready import isImportingData import part.models @@ -24,6 +25,10 @@ def notify_low_stock(part: part.models.Part): Notify users who have starred a part when its stock quantity falls below the minimum threshold """ + # Do not notify if we are importing data + if isImportingData(): + return + # Check if we have notified recently... delta = timedelta(days=1) diff --git a/InvenTree/plugin/apps.py b/InvenTree/plugin/apps.py index c297b84ca0..cfc20ec1aa 100644 --- a/InvenTree/plugin/apps.py +++ b/InvenTree/plugin/apps.py @@ -8,6 +8,7 @@ from django.conf import settings from maintenance_mode.core import set_maintenance_mode +from InvenTree.ready import isImportingData from plugin import registry @@ -19,13 +20,17 @@ class PluginAppConfig(AppConfig): def ready(self): if settings.PLUGINS_ENABLED: - logger.info('Loading InvenTree plugins') + + if isImportingData(): + logger.info('Skipping plugin loading for data import') + else: + logger.info('Loading InvenTree plugins') - if not registry.is_loading: - # this is the first startup - registry.collect_plugins() - registry.load_plugins() + if not registry.is_loading: + # this is the first startup + registry.collect_plugins() + registry.load_plugins() - # drop out of maintenance - # makes sure we did not have an error in reloading and maintenance is still active - set_maintenance_mode(False) + # drop out of maintenance + # makes sure we did not have an error in reloading and maintenance is still active + set_maintenance_mode(False) From aeb89674731b3adcad44ade03306512aa66ba7cd Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 3 Feb 2022 16:06:00 +1100 Subject: [PATCH 38/92] PEP fixes --- InvenTree/plugin/apps.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InvenTree/plugin/apps.py b/InvenTree/plugin/apps.py index cfc20ec1aa..7af7ce9a7c 100644 --- a/InvenTree/plugin/apps.py +++ b/InvenTree/plugin/apps.py @@ -20,7 +20,7 @@ class PluginAppConfig(AppConfig): def ready(self): if settings.PLUGINS_ENABLED: - + if isImportingData(): logger.info('Skipping plugin loading for data import') else: From 8c529240209c6dd185cb1f12fa85230ced9c18a0 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 3 Feb 2022 16:16:42 +1100 Subject: [PATCH 39/92] Adds new setting to optionally display or hide part pricing information --- InvenTree/common/models.py | 12 ++++++++++++ InvenTree/templates/InvenTree/settings/part.html | 1 + 2 files changed, 13 insertions(+) diff --git a/InvenTree/common/models.py b/InvenTree/common/models.py index ba475e75b8..9ef5a4d0c3 100644 --- a/InvenTree/common/models.py +++ b/InvenTree/common/models.py @@ -776,6 +776,18 @@ class InvenTreeSetting(BaseInvenTreeSetting): 'validator': bool, }, + # 2022-02-03 + # This setting exists as an interim solution for extremely slow part page load times when the part has a complex BOM + # In an upcoming release, pricing history (and BOM pricing) will be cached, + # rather than having to be re-calculated every time the page is loaded! + # For now, we will simply hide part pricing by default + 'PART_SHOW_PRICE_HISTORY': { + 'name': _('Show Price History'), + 'description': _('Display historical pricing for Part'), + 'default': False, + 'validator': bool, + }, + 'PART_SHOW_RELATED': { 'name': _('Show related parts'), 'description': _('Display related parts for a part'), diff --git a/InvenTree/templates/InvenTree/settings/part.html b/InvenTree/templates/InvenTree/settings/part.html index 1b2a3e5498..4f9841aaaf 100644 --- a/InvenTree/templates/InvenTree/settings/part.html +++ b/InvenTree/templates/InvenTree/settings/part.html @@ -15,6 +15,7 @@ {% include "InvenTree/settings/setting.html" with key="PART_ALLOW_DUPLICATE_IPN" %} {% include "InvenTree/settings/setting.html" with key="PART_ALLOW_EDIT_IPN" %} {% include "InvenTree/settings/setting.html" with key="PART_NAME_FORMAT" %} + {% include "InvenTree/settings/setting.html" with key="PART_SHOW_PRICE_HISTORY" icon="fa-history" %} {% include "InvenTree/settings/setting.html" with key="PART_SHOW_PRICE_IN_FORMS" icon="fa-dollar-sign" %} {% include "InvenTree/settings/setting.html" with key="PART_SHOW_PRICE_IN_BOM" icon="fa-dollar-sign" %} {% include "InvenTree/settings/setting.html" with key="PART_SHOW_RELATED" icon="fa-random" %} From 525b6d399d52552e185b18ea6e8c39e964cdedb6 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 3 Feb 2022 16:23:52 +1100 Subject: [PATCH 40/92] Hide pricing history tab if not enabled --- InvenTree/part/templates/part/detail.html | 3 +++ InvenTree/part/templates/part/part_sidebar.html | 3 +++ 2 files changed, 6 insertions(+) diff --git a/InvenTree/part/templates/part/detail.html b/InvenTree/part/templates/part/detail.html index 9082285bdb..2266b39048 100644 --- a/InvenTree/part/templates/part/detail.html +++ b/InvenTree/part/templates/part/detail.html @@ -126,9 +126,12 @@
+{% settings_value "PART_SHOW_PRICE_HISTORY" as show_price_history %} +{% if show_price_history %}
{% include "part/prices.html" %}
+{% endif %}
diff --git a/InvenTree/part/templates/part/part_sidebar.html b/InvenTree/part/templates/part/part_sidebar.html index a8f57aa7b0..82246da559 100644 --- a/InvenTree/part/templates/part/part_sidebar.html +++ b/InvenTree/part/templates/part/part_sidebar.html @@ -4,6 +4,7 @@ {% settings_value "PART_INTERNAL_PRICE" as show_internal_price %} {% settings_value 'PART_SHOW_RELATED' as show_related %} +{% settings_value "PART_SHOW_PRICE_HISTORY" as show_price_history %} {% trans "Parameters" as text %} {% include "sidebar_item.html" with label="part-parameters" text=text icon="fa-th-list" %} @@ -25,8 +26,10 @@ {% trans "Used In" as text %} {% include "sidebar_item.html" with label="used-in" text=text icon="fa-layer-group" %} {% endif %} +{% if show_price_history %} {% trans "Pricing" as text %} {% include "sidebar_item.html" with label="pricing" text=text icon="fa-dollar-sign" %} +{% endif %} {% if part.salable or part.component %} {% trans "Allocations" as text %} {% include "sidebar_item.html" with label="allocations" text=text icon="fa-bookmark" %} From 722e94774593474cb9723fe4b48ed94e22ab610c Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 3 Feb 2022 16:30:48 +1100 Subject: [PATCH 41/92] Only calculate pricing data if required --- InvenTree/part/views.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/InvenTree/part/views.py b/InvenTree/part/views.py index dc6b8a9632..97485ebe32 100644 --- a/InvenTree/part/views.py +++ b/InvenTree/part/views.py @@ -395,10 +395,11 @@ class PartDetail(InvenTreeRoleMixin, DetailView): context.update(**ctx) # Pricing information - ctx = self.get_pricing(self.get_quantity()) - ctx['form'] = self.form_class(initial=self.get_initials()) + if InvenTreeSetting.get_setting('PART_SHOW_PRICE_HISTORY', False): + ctx = self.get_pricing(self.get_quantity()) + ctx['form'] = self.form_class(initial=self.get_initials()) - context.update(ctx) + context.update(ctx) return context From c12191d3ed1fa15bdaf4aae62da16d91727d3674 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 3 Feb 2022 16:33:10 +1100 Subject: [PATCH 42/92] Disable multi-level BOM requests --- InvenTree/templates/js/translated/bom.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/InvenTree/templates/js/translated/bom.js b/InvenTree/templates/js/translated/bom.js index 6e4bfdcf25..71c6b0b387 100644 --- a/InvenTree/templates/js/translated/bom.js +++ b/InvenTree/templates/js/translated/bom.js @@ -778,6 +778,11 @@ function loadBomTable(table, options={}) { // This function may be called recursively for multi-level BOMs function requestSubItems(bom_pk, part_pk) { + // TODO: 2022-02-03 Currently, multi-level BOMs are not actually displayed. + + // Re-enable this function once multi-level display has been re-deployed + return; + inventreeGet( options.bom_url, { From 611592694ba50643dc14913b0a316a2dc8333a4b Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 5 Feb 2022 00:12:11 +1100 Subject: [PATCH 43/92] Adds serializer for uploading a BOM file and extracting fields --- InvenTree/part/api.py | 10 +++ InvenTree/part/serializers.py | 138 ++++++++++++++++++++++++++++++++++ 2 files changed, 148 insertions(+) diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py index d146c3d7b3..0bebef57c6 100644 --- a/InvenTree/part/api.py +++ b/InvenTree/part/api.py @@ -1533,6 +1533,15 @@ class BomList(generics.ListCreateAPIView): ] +class BomExtract(generics.CreateAPIView): + """ + API endpoint for extracting BOM data from a BOM file. + """ + + queryset = Part.objects.none() + serializer_class = part_serializers.BomExtractSerializer + + class BomDetail(generics.RetrieveUpdateDestroyAPIView): """ API endpoint for detail view of a single BomItem object """ @@ -1685,6 +1694,7 @@ bom_api_urls = [ url(r'^.*$', BomDetail.as_view(), name='api-bom-item-detail'), ])), + url(r'^extract/', BomExtract.as_view(), name='api-bom-extract'), # Catch-all url(r'^.*$', BomList.as_view(), name='api-bom-list'), ] diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index 16ecc8da21..b6e6934cbc 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -4,6 +4,8 @@ JSON serializers for Part app import imghdr from decimal import Decimal +import os +import tablib from django.urls import reverse_lazy from django.db import models @@ -25,6 +27,7 @@ from InvenTree.serializers import (InvenTreeAttachmentSerializerField, from InvenTree.status_codes import BuildStatus, PurchaseOrderStatus from stock.models import StockItem +from .admin import BomItemResource from .models import (BomItem, BomItemSubstitute, Part, PartAttachment, PartCategory, PartRelated, PartParameter, PartParameterTemplate, PartSellPriceBreak, @@ -699,3 +702,138 @@ class PartCopyBOMSerializer(serializers.Serializer): skip_invalid=data.get('skip_invalid', False), include_inherited=data.get('include_inherited', False), ) + + +class BomExtractSerializer(serializers.Serializer): + """ + Serializer for uploading a file and extracting data from it. + + Note: 2022-02-04 - This needs a *serious* refactor in future, probably + + When parsing the file, the following things happen: + + a) Check file format and validity + b) Look for "required" fields + c) Look for "part" fields - used to "infer" part + + Once the file itself has been validated, we iterate through each data row: + + - If the "level" column is provided, ignore anything below level 1 + - Try to "guess" the part based on part_id / part_name / part_ipn + - Extract other fields as required + + """ + + bom_file = serializers.FileField( + label=_("BOM File"), + help_text=_("Select Bill of Materials file"), + required=True, + allow_empty_file=False, + ) + + def validate_bom_file(self, bom_file): + """ + Perform validation checks on the uploaded BOM file + """ + + name, ext = os.path.splitext(bom_file.name) + + # Remove the leading . from the extension + ext = ext[1:] + + accepted_file_types = [ + 'xls', 'xlsx', + 'csv', 'tsv', + 'xml', + ] + + if ext not in accepted_file_types: + raise serializers.ValidationError(_("Unsupported file type")) + + # Impose a 50MB limit on uploaded BOM files + max_upload_file_size = 50 * 1024 * 1024 + + if bom_file.size > max_upload_file_size: + raise serializers.ValidationError(_("File is too large")) + + # Read file data into memory (bytes object) + data = bom_file.read() + + if ext in ['csv', 'tsv', 'xml']: + data = data.decode() + + # Convert to a tablib dataset (we expect headers) + self.dataset = tablib.Dataset().load(data, ext, headers=True) + + # These columns must be present + required_columns = [ + 'quantity', + ] + + # We need at least one column to specify a "part" + part_columns = [ + 'part', + 'part_id', + 'part_name', + 'part_ipn', + ] + + # These columns are "optional" + optional_columns = [ + 'allow_variants', + 'inherited', + 'optional', + 'overage', + 'note', + 'reference', + ] + + def find_matching_column(col_name, columns): + + # Direct match + if col_name in columns: + return col_name + + col_name = col_name.lower().strip() + + for col in columns: + if col.lower().strip() == col_name: + return col + + # No match + return None + + for header in required_columns: + + match = find_matching_column(header, self.dataset.headers) + + if match is None: + raise serializers.ValidationError(_("Missing required column") + f": '{header}'") + + part_column_matches = {} + + part_match = False + + for col in part_columns: + col_match = find_matching_column(col, self.dataset.headers) + + part_column_matches[col] = col_match + + if col_match is not None: + part_match = True + + if not part_match: + raise serializers.ValidationError(_("No part column found")) + + return bom_file + + class Meta: + fields = [ + 'bom_file', + ] + + def save(self): + """ + There is no action associated with "saving" this serializer + """ + pass \ No newline at end of file From 707787d82c4616d63e6b469d465ccfd72cb429be Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 5 Feb 2022 00:12:40 +1100 Subject: [PATCH 44/92] Fix existing bug with BomExport functionality - could not select BOM format --- InvenTree/part/urls.py | 1 - InvenTree/part/views.py | 51 +---------------------------------------- 2 files changed, 1 insertion(+), 51 deletions(-) diff --git a/InvenTree/part/urls.py b/InvenTree/part/urls.py index 14f3e28b24..ba843f7d4b 100644 --- a/InvenTree/part/urls.py +++ b/InvenTree/part/urls.py @@ -33,7 +33,6 @@ part_parameter_urls = [ part_detail_urls = [ url(r'^delete/?', views.PartDelete.as_view(), name='part-delete'), - url(r'^bom-export/?', views.BomExport.as_view(), name='bom-export'), url(r'^bom-download/?', views.BomDownload.as_view(), name='bom-download'), url(r'^pricing/', views.PartPricing.as_view(), name='part-pricing'), diff --git a/InvenTree/part/views.py b/InvenTree/part/views.py index 97485ebe32..03465a1838 100644 --- a/InvenTree/part/views.py +++ b/InvenTree/part/views.py @@ -1060,7 +1060,7 @@ class BomDownload(AjaxView): part = get_object_or_404(Part, pk=self.kwargs['pk']) - export_format = request.GET.get('file_format', 'csv') + export_format = request.GET.get('format', 'csv') cascade = str2bool(request.GET.get('cascade', False)) @@ -1103,55 +1103,6 @@ class BomDownload(AjaxView): } -class BomExport(AjaxView): - """ Provide a simple form to allow the user to select BOM download options. - """ - - model = Part - ajax_form_title = _("Export Bill of Materials") - - role_required = 'part.view' - - def post(self, request, *args, **kwargs): - - # Extract POSTed form data - fmt = request.POST.get('file_format', 'csv').lower() - cascade = str2bool(request.POST.get('cascading', False)) - levels = request.POST.get('levels', None) - 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']) - except: - part = None - - # Format a URL to redirect to - if part: - url = reverse('bom-download', kwargs={'pk': part.pk}) - else: - url = '' - - url += '?file_format=' + fmt - url += '&cascade=' + str(cascade) - 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) - - data = { - 'form_valid': part is not None, - 'url': url, - } - - return self.renderJsonResponse(request, self.form_class(), data=data) - - class PartDelete(AjaxDeleteView): """ View to delete a Part object """ From 137c9ff2f2391b6df8ccf0dd3d0f2de40b5b8f10 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 5 Feb 2022 00:30:00 +1100 Subject: [PATCH 45/92] POST request now returns extracted data rows (as an array of dicts) --- InvenTree/part/api.py | 15 +++++ InvenTree/part/serializers.py | 102 ++++++++++++++++++++-------------- 2 files changed, 75 insertions(+), 42 deletions(-) diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py index 0bebef57c6..9c0556eb60 100644 --- a/InvenTree/part/api.py +++ b/InvenTree/part/api.py @@ -1541,6 +1541,21 @@ class BomExtract(generics.CreateAPIView): queryset = Part.objects.none() serializer_class = part_serializers.BomExtractSerializer + def create(self, request, *args, **kwargs): + """ + Custom create function to return the extracted data + """ + + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + self.perform_create(serializer) + headers = self.get_success_headers(serializer.data) + + data = serializer.extract_data() + + return Response(data, status=status.HTTP_201_CREATED, headers=headers) + + class BomDetail(generics.RetrieveUpdateDestroyAPIView): """ API endpoint for detail view of a single BomItem object """ diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index b6e6934cbc..b9e00be7f5 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -724,6 +724,44 @@ class BomExtractSerializer(serializers.Serializer): """ + # These columns must be present + REQUIRED_COLUMNS = [ + 'quantity', + ] + + # We need at least one column to specify a "part" + PART_COLUMNS = [ + 'part', + 'part_id', + 'part_name', + 'part_ipn', + ] + + # These columns are "optional" + OPTIONAL_COLUMNS = [ + 'allow_variants', + 'inherited', + 'optional', + 'overage', + 'note', + 'reference', + ] + + def find_matching_column(self, col_name, columns): + + # Direct match + if col_name in columns: + return col_name + + col_name = col_name.lower().strip() + + for col in columns: + if col.lower().strip() == col_name: + return col + + # No match + return None + bom_file = serializers.FileField( label=_("BOM File"), help_text=_("Select Bill of Materials file"), @@ -736,6 +774,8 @@ class BomExtractSerializer(serializers.Serializer): Perform validation checks on the uploaded BOM file """ + self.filename = bom_file.name + name, ext = os.path.splitext(bom_file.name) # Remove the leading . from the extension @@ -765,47 +805,9 @@ class BomExtractSerializer(serializers.Serializer): # Convert to a tablib dataset (we expect headers) self.dataset = tablib.Dataset().load(data, ext, headers=True) - # These columns must be present - required_columns = [ - 'quantity', - ] + for header in self.REQUIRED_COLUMNS: - # We need at least one column to specify a "part" - part_columns = [ - 'part', - 'part_id', - 'part_name', - 'part_ipn', - ] - - # These columns are "optional" - optional_columns = [ - 'allow_variants', - 'inherited', - 'optional', - 'overage', - 'note', - 'reference', - ] - - def find_matching_column(col_name, columns): - - # Direct match - if col_name in columns: - return col_name - - col_name = col_name.lower().strip() - - for col in columns: - if col.lower().strip() == col_name: - return col - - # No match - return None - - for header in required_columns: - - match = find_matching_column(header, self.dataset.headers) + match = self.find_matching_column(header, self.dataset.headers) if match is None: raise serializers.ValidationError(_("Missing required column") + f": '{header}'") @@ -814,8 +816,8 @@ class BomExtractSerializer(serializers.Serializer): part_match = False - for col in part_columns: - col_match = find_matching_column(col, self.dataset.headers) + for col in self.PART_COLUMNS: + col_match = self.find_matching_column(col, self.dataset.headers) part_column_matches[col] = col_match @@ -827,6 +829,22 @@ class BomExtractSerializer(serializers.Serializer): return bom_file + def extract_data(self): + """ + Read individual rows out of the BOM file + """ + + rows = [] + + for row in self.dataset.dict: + rows.append(row) + + return { + 'rows': rows, + 'headers': self.dataset.headers, + 'filename': self.filename, + } + class Meta: fields = [ 'bom_file', From 3bd39ec752d6bf75c8a9083287cbe89117cde3ad Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 5 Feb 2022 01:26:08 +1100 Subject: [PATCH 46/92] Attempt to auto-extract part information based on provided data --- InvenTree/part/serializers.py | 67 ++++++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index b9e00be7f5..fd0b0c8e52 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -762,6 +762,15 @@ class BomExtractSerializer(serializers.Serializer): # No match return None + def find_matching_data(self, row, col_name, columns): + """ + Extract data from the row, based on the "expected" column name + """ + + col_name = self.find_matching_column(col_name, columns) + + return row.get(col_name, None) + bom_file = serializers.FileField( label=_("BOM File"), help_text=_("Select Bill of Materials file"), @@ -836,12 +845,68 @@ class BomExtractSerializer(serializers.Serializer): rows = [] + headers = self.dataset.headers + + level_column = self.find_matching_column('level', headers) + for row in self.dataset.dict: + + """ + If the "level" column is specified, and this is not a top-level BOM item, ignore the row! + """ + if level_column is not None: + level = row.get('level', None) + + if level is not None: + try: + level = int(level) + if level != 1: + continue + except: + pass + + """ + Next, we try to "guess" the part, based on the provided data. + + A) If the part_id is supplied, use that! + B) If the part name and/or part_ipn are supplied, maybe we can use those? + """ + part_id = self.find_matching_data(row, 'part_id', headers) + part_name = self.find_matching_data(row, 'part_name', headers) + part_ipn = self.find_matching_data(row, 'part_ipn', headers) + + part = None + + if part_id is not None: + try: + part = Part.objects.get(pk=part_id) + except (ValueError, Part.DoesNotExist): + pass + + if part is None: + + if part_name is not None or part_ipn is not None: + queryset = Part.objects.all() + + if part_name is not None: + queryset = queryset.filter(name=part_name) + + if part_ipn is not None: + queryset = queryset.filter(IPN=part_ipn) + + # Only if we have a single direct match + if queryset.exists() and queryset.count() == 1: + part = queryset.first() + + row['part'] = part.pk if part is not None else None + + print("part:", part) + rows.append(row) return { 'rows': rows, - 'headers': self.dataset.headers, + 'headers': headers, 'filename': self.filename, } From 8a8d718534f985be08284ab95464f84f4e951690 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 5 Feb 2022 01:26:34 +1100 Subject: [PATCH 47/92] Basic javascript function to construct BOM table from extracted data --- InvenTree/templates/js/translated/bom.js | 64 ++++++++++++++++++++++ InvenTree/templates/js/translated/forms.js | 23 +++++--- 2 files changed, 80 insertions(+), 7 deletions(-) diff --git a/InvenTree/templates/js/translated/bom.js b/InvenTree/templates/js/translated/bom.js index 71c6b0b387..798c6749ec 100644 --- a/InvenTree/templates/js/translated/bom.js +++ b/InvenTree/templates/js/translated/bom.js @@ -15,6 +15,7 @@ */ /* exported + constructBomUploadTable, downloadBomTemplate, exportBom, newPartFromBomWizard, @@ -24,6 +25,69 @@ removeColFromBomWizard, */ + +/* Construct a table of data extracted from a BOM file. + * This data is used to import a BOM interactively. + */ +function constructBomUploadTable(data, options={}) { + + if (!data.rows) { + // TODO: Error message! + return; + } + + function constructRow(row, idx) { + // Construct an individual row from the provided data + + var part_input = constructField( + `part_${idx}`, + { + type: 'related field', + required: 'true', + }, + { + hideLabels: true, + } + ); + + var html = ` + + ${part_input} + quantity + reference + overage + variants + inherited + optional + note + `; + + $('#bom-import-table tbody').append(html); + + // Initialize the "part" selector for this row + initializeRelatedField( + { + name: `part_${idx}`, + api_url: '{% url "api-part-list" %}', + filters: { + component: true, + }, + model: 'part', + required: true, + auto_fill: false, + onSelect: function(data, field, opts) { + // TODO? + }, + } + ); + } + + data.rows.forEach(function(row, idx) { + constructRow(row, idx); + }); +} + + function downloadBomTemplate(options={}) { var format = options.format; diff --git a/InvenTree/templates/js/translated/forms.js b/InvenTree/templates/js/translated/forms.js index 2f2d1f8ae4..ff4415404f 100644 --- a/InvenTree/templates/js/translated/forms.js +++ b/InvenTree/templates/js/translated/forms.js @@ -837,7 +837,15 @@ function getFormFieldElement(name, options) { var field_name = getFieldName(name, options); - var el = $(options.modal).find(`#id_${field_name}`); + var el = null; + + if (options && options.modal) { + // Field element is associated with a model? + el = $(options.modal).find(`#id_${field_name}`); + } else { + // Field element is top-level + el = $(`#id_${field_name}`); + } if (!el.exists) { console.log(`ERROR: Could not find form element for field '${name}'`); @@ -1330,11 +1338,13 @@ function hideFormGroup(group, options) { $(options.modal).find(`#form-panel-${group}`).hide(); } + // Show a form group function showFormGroup(group, options) { $(options.modal).find(`#form-panel-${group}`).show(); } + function setFormGroupVisibility(group, vis, options) { if (vis) { showFormGroup(group, options); @@ -1344,7 +1354,7 @@ function setFormGroupVisibility(group, vis, options) { } -function initializeRelatedFields(fields, options) { +function initializeRelatedFields(fields, options={}) { var field_names = options.field_names; @@ -1452,12 +1462,11 @@ function addSecondaryModal(field, fields, options) { * - field: Field definition from the OPTIONS request * - options: Original options object provided by the client */ -function initializeRelatedField(field, fields, options) { +function initializeRelatedField(field, fields, options={}) { var name = field.name; if (!field.api_url) { - // TODO: Provide manual api_url option? console.log(`WARNING: Related field '${name}' missing 'api_url' parameter.`); return; } @@ -1654,7 +1663,7 @@ function initializeRelatedField(field, fields, options) { * - data: JSON data representing the model instance * - options: The modal form specifications */ -function setRelatedFieldData(name, data, options) { +function setRelatedFieldData(name, data, options={}) { var select = getFormFieldElement(name, options); @@ -1779,10 +1788,10 @@ function renderModelData(name, model, data, parameters, options) { /* * Construct a field name for the given field */ -function getFieldName(name, options) { +function getFieldName(name, options={}) { var field_name = name; - if (options.depth) { + if (options && options.depth) { field_name += `_${options.depth}`; } From 8a86932c7b1d69f36821ffa9410e5ee9e1843209 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 5 Feb 2022 01:36:46 +1100 Subject: [PATCH 48/92] Initialize related field for "part" selection --- InvenTree/templates/js/translated/bom.js | 9 +++++++++ InvenTree/templates/js/translated/forms.js | 13 +++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/InvenTree/templates/js/translated/bom.js b/InvenTree/templates/js/translated/bom.js index 798c6749ec..5b1c7e2bb2 100644 --- a/InvenTree/templates/js/translated/bom.js +++ b/InvenTree/templates/js/translated/bom.js @@ -50,6 +50,13 @@ function constructBomUploadTable(data, options={}) { } ); + var buttons = `
`; + + buttons += makeIconButton('fa-file-alt', 'button-row-data', idx, '{% trans "Display row data" %}'); + buttons += makeIconButton('fa-times icon-red', 'button-row-remove', idx, '{% trans "Remove row" %}'); + + buttons += `
`; + var html = ` ${part_input} @@ -60,6 +67,7 @@ function constructBomUploadTable(data, options={}) { inherited optional note + ${buttons} `; $('#bom-import-table tbody').append(html); @@ -68,6 +76,7 @@ function constructBomUploadTable(data, options={}) { initializeRelatedField( { name: `part_${idx}`, + value: row.part, api_url: '{% url "api-part-list" %}', filters: { component: true, diff --git a/InvenTree/templates/js/translated/forms.js b/InvenTree/templates/js/translated/forms.js index ff4415404f..c2addc3594 100644 --- a/InvenTree/templates/js/translated/forms.js +++ b/InvenTree/templates/js/translated/forms.js @@ -1484,10 +1484,19 @@ function initializeRelatedField(field, fields, options={}) { // limit size for AJAX requests var pageSize = options.pageSize || 25; + var parent = null; + var auto_width = true; + + // Special considerations if the select2 input is a child of a modal + if (options && options.modal) { + parent = $(options.modal); + auto_width = true; + } + select.select2({ placeholder: '', - dropdownParent: $(options.modal), - dropdownAutoWidth: false, + dropdownParent: parent, + dropdownAutoWidth: auto_width, language: { noResults: function(query) { if (field.noResults) { From c620107625d63a76647df1b9ef3420ac888747fe Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 5 Feb 2022 09:11:01 +1100 Subject: [PATCH 49/92] Add callback for "remove row" button --- InvenTree/templates/js/translated/bom.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/InvenTree/templates/js/translated/bom.js b/InvenTree/templates/js/translated/bom.js index 5b1c7e2bb2..7bb160eccb 100644 --- a/InvenTree/templates/js/translated/bom.js +++ b/InvenTree/templates/js/translated/bom.js @@ -89,6 +89,11 @@ function constructBomUploadTable(data, options={}) { }, } ); + + // Add callback for "remove row" button + $(`#button-row-remove-${idx}`).click(function() { + $(`#bom_import_row_${idx}`).remove(); + }); } data.rows.forEach(function(row, idx) { From bdf0b5b4461caffddeea42fd8958678567ff09f3 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 5 Feb 2022 09:53:35 +1100 Subject: [PATCH 50/92] Construct required form fields - required some additional functionality in forms.js --- InvenTree/templates/js/translated/bom.js | 67 +++++++++++++++------- InvenTree/templates/js/translated/forms.js | 16 ++++-- 2 files changed, 57 insertions(+), 26 deletions(-) diff --git a/InvenTree/templates/js/translated/bom.js b/InvenTree/templates/js/translated/bom.js index 7bb160eccb..4fa178923c 100644 --- a/InvenTree/templates/js/translated/bom.js +++ b/InvenTree/templates/js/translated/bom.js @@ -35,20 +35,37 @@ function constructBomUploadTable(data, options={}) { // TODO: Error message! return; } - - function constructRow(row, idx) { + + function constructRow(row, idx, fields) { // Construct an individual row from the provided data - var part_input = constructField( - `part_${idx}`, - { - type: 'related field', - required: 'true', - }, - { - hideLabels: true, + var field_options = { + hideLabels: true, + }; + + function constructRowField(field_name) { + + var field = fields[field_name] || null; + + if (!field) { + return `Cannot render field '${field_name}`; } - ); + + field.value = row[field_name]; + + return constructField(`${field_name}_${idx}`, field, field_options); + + } + + // Construct form inputs + var sub_part = constructRowField('sub_part'); + var quantity = constructRowField('quantity'); + var reference = constructRowField('reference'); + var overage = constructRowField('overage'); + var variants = constructRowField('allow_variants'); + var inherited = constructRowField('inherited'); + var optional = constructRowField('optional'); + var note = constructRowField('note'); var buttons = `
`; @@ -59,14 +76,14 @@ function constructBomUploadTable(data, options={}) { var html = ` - ${part_input} - quantity - reference - overage - variants - inherited - optional - note + ${sub_part} + ${quantity} + ${reference} + ${overage} + ${variants} + ${inherited} + ${optional} + ${note} ${buttons} `; @@ -75,7 +92,7 @@ function constructBomUploadTable(data, options={}) { // Initialize the "part" selector for this row initializeRelatedField( { - name: `part_${idx}`, + name: `sub_part_${idx}`, value: row.part, api_url: '{% url "api-part-list" %}', filters: { @@ -96,8 +113,14 @@ function constructBomUploadTable(data, options={}) { }); } - data.rows.forEach(function(row, idx) { - constructRow(row, idx); + // Request API endpoint options + getApiEndpointOptions('{% url "api-bom-list" %}', function(response) { + + var fields = response.actions.POST; + + data.rows.forEach(function(row, idx) { + constructRow(row, idx, fields); + }); }); } diff --git a/InvenTree/templates/js/translated/forms.js b/InvenTree/templates/js/translated/forms.js index c2addc3594..dda79f2737 100644 --- a/InvenTree/templates/js/translated/forms.js +++ b/InvenTree/templates/js/translated/forms.js @@ -2071,7 +2071,7 @@ function constructInput(name, parameters, options) { // Construct a set of default input options which apply to all input types -function constructInputOptions(name, classes, type, parameters) { +function constructInputOptions(name, classes, type, parameters, options={}) { var opts = []; @@ -2153,11 +2153,18 @@ function constructInputOptions(name, classes, type, parameters) { if (parameters.multiline) { return ``; } else if (parameters.type == 'boolean') { + + var help_text = ''; + + if (!options.hideLabels && parameters.help_text) { + help_text = `${parameters.help_text}`; + } + return `
`; @@ -2180,13 +2187,14 @@ function constructHiddenInput(name, parameters) { // Construct a "checkbox" input -function constructCheckboxInput(name, parameters) { +function constructCheckboxInput(name, parameters, options={}) { return constructInputOptions( name, 'form-check-input', 'checkbox', - parameters + parameters, + options ); } From 81271bf6b970e95753e1f70f3b65d853b0c29bfc Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 5 Feb 2022 10:01:07 +1100 Subject: [PATCH 51/92] Add "clear input" callback function --- InvenTree/templates/js/translated/bom.js | 13 +++++++++++-- InvenTree/templates/js/translated/forms.js | 10 ++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/InvenTree/templates/js/translated/bom.js b/InvenTree/templates/js/translated/bom.js index 4fa178923c..3106c3b9f0 100644 --- a/InvenTree/templates/js/translated/bom.js +++ b/InvenTree/templates/js/translated/bom.js @@ -69,13 +69,14 @@ function constructBomUploadTable(data, options={}) { var buttons = `
`; - buttons += makeIconButton('fa-file-alt', 'button-row-data', idx, '{% trans "Display row data" %}'); + // buttons += makeIconButton('fa-file-alt', 'button-row-data', idx, '{% trans "Display row data" %}'); buttons += makeIconButton('fa-times icon-red', 'button-row-remove', idx, '{% trans "Remove row" %}'); buttons += `
`; var html = ` + ${buttons} ${sub_part} ${quantity} ${reference} @@ -84,7 +85,6 @@ function constructBomUploadTable(data, options={}) { ${inherited} ${optional} ${note} - ${buttons} `; $('#bom-import-table tbody').append(html); @@ -111,6 +111,15 @@ function constructBomUploadTable(data, options={}) { $(`#button-row-remove-${idx}`).click(function() { $(`#bom_import_row_${idx}`).remove(); }); + + // Add callbacks for the fields which allow it + function addRowClearCallback(field_name) { + addClearCallback(`${field_name}_${idx}`, fields[field_name]); + } + + addRowClearCallback('reference'); + addRowClearCallback('overage'); + addRowClearCallback('note'); } // Request API endpoint options diff --git a/InvenTree/templates/js/translated/forms.js b/InvenTree/templates/js/translated/forms.js index dda79f2737..e5cb571a58 100644 --- a/InvenTree/templates/js/translated/forms.js +++ b/InvenTree/templates/js/translated/forms.js @@ -1240,8 +1240,14 @@ function addClearCallback(name, field, options) { var field_name = getFieldName(name, options); - var el = $(options.modal).find(`#clear_${field_name}`); - + var el = null; + + if (options && options.modal) { + el = $(options.modal).find(`#clear_${field_name}`); + } else { + el = $(`#clear_${field_name}`); + } + if (!el) { console.log(`WARNING: addClearCallback could not find field '${name}'`); return; From 0963602bea611d7dd8989fc6d555e47d9f000c10 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 7 Feb 2022 08:37:39 +1100 Subject: [PATCH 52/92] Add optional part lookup by "part" field --- InvenTree/part/serializers.py | 12 ++++++++++-- InvenTree/templates/js/translated/forms.js | 4 ++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index fd0b0c8e52..cb050c82f8 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -883,6 +883,16 @@ class BomExtractSerializer(serializers.Serializer): except (ValueError, Part.DoesNotExist): pass + # Optionally, specify using field "part" + if part is None: + pk = self.find_matching_data(row, 'part', headers) + + if pk is not None: + try: + part = Part.objects.get(pk=pk) + except (ValueError, Part.DoesNotExist): + pass + if part is None: if part_name is not None or part_ipn is not None: @@ -900,8 +910,6 @@ class BomExtractSerializer(serializers.Serializer): row['part'] = part.pk if part is not None else None - print("part:", part) - rows.append(row) return { diff --git a/InvenTree/templates/js/translated/forms.js b/InvenTree/templates/js/translated/forms.js index e5cb571a58..181b4436e1 100644 --- a/InvenTree/templates/js/translated/forms.js +++ b/InvenTree/templates/js/translated/forms.js @@ -1236,7 +1236,7 @@ function addClearCallbacks(fields, options) { } -function addClearCallback(name, field, options) { +function addClearCallback(name, field, options={}) { var field_name = getFieldName(name, options); @@ -1491,7 +1491,7 @@ function initializeRelatedField(field, fields, options={}) { var pageSize = options.pageSize || 25; var parent = null; - var auto_width = true; + var auto_width = false; // Special considerations if the select2 input is a child of a modal if (options && options.modal) { From 80818c464a3fe696944cf7ef232c7827d6622ec0 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 7 Feb 2022 09:24:23 +1100 Subject: [PATCH 53/92] Allow decimal values for BOM overage --- InvenTree/InvenTree/validators.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/InvenTree/InvenTree/validators.py b/InvenTree/InvenTree/validators.py index 76d485cef9..3603762faa 100644 --- a/InvenTree/InvenTree/validators.py +++ b/InvenTree/InvenTree/validators.py @@ -2,6 +2,8 @@ Custom field validators for InvenTree """ +from decimal import Decimal + from django.conf import settings from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ @@ -115,24 +117,26 @@ def validate_tree_name(value): def validate_overage(value): - """ Validate that a BOM overage string is properly formatted. + """ + Validate that a BOM overage string is properly formatted. An overage string can look like: - An integer number ('1' / 3 / 4) + - A decimal number ('0.123') - A percentage ('5%' / '10 %') """ value = str(value).lower().strip() - # First look for a simple integer value + # First look for a simple numerical value try: - i = int(value) + i = Decimal(value) if i < 0: raise ValidationError(_("Overage value must not be negative")) - # Looks like an integer! + # Looks like a number return True except ValueError: pass From a2c48d308fe139218173e473db3f01591f39eae0 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 7 Feb 2022 10:54:37 +1100 Subject: [PATCH 54/92] Adds a BomUpload endpoint to handle upload of complete BOM --- InvenTree/InvenTree/validators.py | 6 +- InvenTree/part/api.py | 15 +++- InvenTree/part/serializers.py | 45 +++++++++++- InvenTree/templates/js/translated/bom.js | 83 ++++++++++++++++++---- InvenTree/templates/js/translated/forms.js | 57 ++++++++++----- 5 files changed, 169 insertions(+), 37 deletions(-) diff --git a/InvenTree/InvenTree/validators.py b/InvenTree/InvenTree/validators.py index 3603762faa..6bb2c1b350 100644 --- a/InvenTree/InvenTree/validators.py +++ b/InvenTree/InvenTree/validators.py @@ -2,7 +2,7 @@ Custom field validators for InvenTree """ -from decimal import Decimal +from decimal import Decimal, InvalidOperation from django.conf import settings from django.core.exceptions import ValidationError @@ -138,7 +138,7 @@ def validate_overage(value): # Looks like a number return True - except ValueError: + except (ValueError, InvalidOperation): pass # Now look for a percentage value @@ -159,7 +159,7 @@ def validate_overage(value): pass raise ValidationError( - _("Overage must be an integer value or a percentage") + _("Invalid value for overage") ) diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py index 9c0556eb60..4c52b87520 100644 --- a/InvenTree/part/api.py +++ b/InvenTree/part/api.py @@ -1545,7 +1545,7 @@ class BomExtract(generics.CreateAPIView): """ Custom create function to return the extracted data """ - + serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) self.perform_create(serializer) @@ -1556,6 +1556,16 @@ class BomExtract(generics.CreateAPIView): return Response(data, status=status.HTTP_201_CREATED, headers=headers) +class BomUpload(generics.CreateAPIView): + """ + API endpoint for uploading a complete Bill of Materials. + + It is assumed that the BOM has been extracted from a file using the BomExtract endpoint. + """ + + queryset = Part.objects.all() + serializer_class = part_serializers.BomUploadSerializer + class BomDetail(generics.RetrieveUpdateDestroyAPIView): """ API endpoint for detail view of a single BomItem object """ @@ -1710,6 +1720,9 @@ bom_api_urls = [ ])), url(r'^extract/', BomExtract.as_view(), name='api-bom-extract'), + + url(r'^upload/', BomUpload.as_view(), name='api-bom-upload'), + # Catch-all url(r'^.*$', BomList.as_view(), name='api-bom-list'), ] diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index cb050c82f8..d18b1a2a8b 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -8,7 +8,7 @@ import os import tablib from django.urls import reverse_lazy -from django.db import models +from django.db import models, transaction from django.db.models import Q from django.db.models.functions import Coalesce from django.utils.translation import ugettext_lazy as _ @@ -465,7 +465,13 @@ class BomItemSerializer(InvenTreeModelSerializer): price_range = serializers.CharField(read_only=True) - quantity = InvenTreeDecimalField() + quantity = InvenTreeDecimalField(required=True) + + def validate_quantity(self, quantity): + if quantity <= 0: + raise serializers.ValidationError(_("Quantity must be greater than zero")) + + return quantity part = serializers.PrimaryKeyRelatedField(queryset=Part.objects.filter(assembly=True)) @@ -927,4 +933,37 @@ class BomExtractSerializer(serializers.Serializer): """ There is no action associated with "saving" this serializer """ - pass \ No newline at end of file + pass + + +class BomUploadSerializer(serializers.Serializer): + """ + Serializer for uploading a BOM against a specified part. + + A "BOM" is a set of BomItem objects which are to be validated together as a set + """ + + items = BomItemSerializer(many=True, required=True) + + def validate(self, data): + + data = super().validate(data) + + items = data['items'] + + if len(items) == 0: + raise serializers.ValidationError(_("At least one BOM item is required")) + + return data + + def save(self): + + data = self.validated_data + + items = data['items'] + + with transaction.atomic(): + + for item in items: + print(item) + \ No newline at end of file diff --git a/InvenTree/templates/js/translated/bom.js b/InvenTree/templates/js/translated/bom.js index 3106c3b9f0..512cb0c46a 100644 --- a/InvenTree/templates/js/translated/bom.js +++ b/InvenTree/templates/js/translated/bom.js @@ -23,6 +23,7 @@ loadUsedInTable, removeRowFromBomWizard, removeColFromBomWizard, + submitBomTable */ @@ -41,6 +42,7 @@ function constructBomUploadTable(data, options={}) { var field_options = { hideLabels: true, + hideClearButton: true, }; function constructRowField(field_name) { @@ -53,7 +55,7 @@ function constructBomUploadTable(data, options={}) { field.value = row[field_name]; - return constructField(`${field_name}_${idx}`, field, field_options); + return constructField(`items_${field_name}_${idx}`, field, field_options); } @@ -75,8 +77,7 @@ function constructBomUploadTable(data, options={}) { buttons += `
`; var html = ` - - ${buttons} + ${sub_part} ${quantity} ${reference} @@ -85,6 +86,7 @@ function constructBomUploadTable(data, options={}) { ${inherited} ${optional} ${note} + ${buttons} `; $('#bom-import-table tbody').append(html); @@ -92,7 +94,7 @@ function constructBomUploadTable(data, options={}) { // Initialize the "part" selector for this row initializeRelatedField( { - name: `sub_part_${idx}`, + name: `items_sub_part_${idx}`, value: row.part, api_url: '{% url "api-part-list" %}', filters: { @@ -111,15 +113,6 @@ function constructBomUploadTable(data, options={}) { $(`#button-row-remove-${idx}`).click(function() { $(`#bom_import_row_${idx}`).remove(); }); - - // Add callbacks for the fields which allow it - function addRowClearCallback(field_name) { - addClearCallback(`${field_name}_${idx}`, fields[field_name]); - } - - addRowClearCallback('reference'); - addRowClearCallback('overage'); - addRowClearCallback('note'); } // Request API endpoint options @@ -134,6 +127,70 @@ function constructBomUploadTable(data, options={}) { } +/* Extract rows from the BOM upload table, + * and submit data to the server + */ +function submitBomTable(part_id, options={}) { + + // Extract rows from the form + var rows = []; + + var idx_values = []; + + var url = '{% url "api-bom-upload" %}'; + + $('.bom-import-row').each(function() { + var idx = $(this).attr('idx'); + + idx_values.push(idx); + + // Extract each field from the row + rows.push({ + part: part_id, + sub_part: getFormFieldValue(`items_sub_part_${idx}`, {}), + quantity: getFormFieldValue(`items_quantity_${idx}`, {}), + reference: getFormFieldValue(`items_reference_${idx}`, {}), + overage: getFormFieldValue(`items_overage_${idx}`, {}), + allow_variants: getFormFieldValue(`items_allow_variants_${idx}`, {type: 'boolean'}), + inherited: getFormFieldValue(`items_inherited_${idx}`, {type: 'boolean'}), + optional: getFormFieldValue(`items_optional_${idx}`, {type: 'boolean'}), + note: getFormFieldValue(`items_note_${idx}`, {}), + }) + }); + + var data = { + items: rows, + }; + + var options = { + nested: { + items: idx_values, + } + }; + + getApiEndpointOptions(url, function(response) { + var fields = response.actions.POST; + + inventreePut(url, data, { + method: 'POST', + success: function(response) { + // TODO: Return to the "bom" page + }, + error: function(xhr) { + switch (xhr.status) { + case 400: + handleFormErrors(xhr.responseJSON, fields, options); + break; + default: + showApiError(xhr, url); + break; + } + } + }); + }); +} + + function downloadBomTemplate(options={}) { var format = options.format; diff --git a/InvenTree/templates/js/translated/forms.js b/InvenTree/templates/js/translated/forms.js index 181b4436e1..67a162ff2b 100644 --- a/InvenTree/templates/js/translated/forms.js +++ b/InvenTree/templates/js/translated/forms.js @@ -890,12 +890,13 @@ function validateFormField(name, options) { * - field: The field specification provided from the OPTIONS request * - options: The original options object provided by the client */ -function getFormFieldValue(name, field, options) { +function getFormFieldValue(name, field={}, options={}) { // Find the HTML element var el = getFormFieldElement(name, options); if (!el) { + console.log(`ERROR: getFormFieldValue could not locate field '{name}'`); return null; } @@ -981,16 +982,22 @@ function handleFormSuccess(response, options) { /* * Remove all error text items from the form */ -function clearFormErrors(options) { +function clearFormErrors(options={}) { - // Remove the individual error messages - $(options.modal).find('.form-error-message').remove(); + if (options && options.modal) { + // Remove the individual error messages + $(options.modal).find('.form-error-message').remove(); - // Remove the "has error" class - $(options.modal).find('.form-field-error').removeClass('form-field-error'); + // Remove the "has error" class + $(options.modal).find('.form-field-error').removeClass('form-field-error'); - // Hide the 'non field errors' - $(options.modal).find('#non-field-errors').html(''); + // Hide the 'non field errors' + $(options.modal).find('#non-field-errors').html(''); + } else { + $('.form-error-message').remove(); + $('.form-field-errors').removeClass('form-field-error'); + $('#non-field-errors').html(''); + } } /* @@ -1018,7 +1025,7 @@ function clearFormErrors(options) { * */ -function handleNestedErrors(errors, field_name, options) { +function handleNestedErrors(errors, field_name, options={}) { var error_list = errors[field_name]; @@ -1074,15 +1081,23 @@ function handleNestedErrors(errors, field_name, options) { * - fields: The form data object * - options: Form options provided by the client */ -function handleFormErrors(errors, fields, options) { +function handleFormErrors(errors, fields={}, options={}) { // Reset the status of the "submit" button - $(options.modal).find('#modal-form-submit').prop('disabled', false); + if (options.modal) { + $(options.modal).find('#modal-form-submit').prop('disabled', false); + } // Remove any existing error messages from the form clearFormErrors(options); - var non_field_errors = $(options.modal).find('#non-field-errors'); + var non_field_errors = null; + + if (options.modal) { + non_field_errors = $(options.modal).find('#non-field-errors'); + } else { + non_field_errors = $('#non-field-errors'); + } // TODO: Display the JSON error text when hovering over the "info" icon non_field_errors.append( @@ -1158,14 +1173,19 @@ function handleFormErrors(errors, fields, options) { /* * Add a rendered error message to the provided field */ -function addFieldErrorMessage(name, error_text, error_idx, options) { +function addFieldErrorMessage(name, error_text, error_idx, options={}) { field_name = getFieldName(name, options); - // Add the 'form-field-error' class - $(options.modal).find(`#div_id_${field_name}`).addClass('form-field-error'); + var field_dom = null; - var field_dom = $(options.modal).find(`#errors-${field_name}`); + if (options.modal) { + $(options.modal).find(`#div_id_${field_name}`).addClass('form-field-error'); + field_dom = $(options.modal).find(`#errors-${field_name}`); + } else { + $(`#div_id_${field_name}`).addClass('form-field-error'); + field_dom = $(`#errors-${field_name}`); + } if (field_dom) { @@ -1492,17 +1512,20 @@ function initializeRelatedField(field, fields, options={}) { var parent = null; var auto_width = false; + var width = '100%'; // Special considerations if the select2 input is a child of a modal if (options && options.modal) { parent = $(options.modal); auto_width = true; + width = null; } select.select2({ placeholder: '', dropdownParent: parent, dropdownAutoWidth: auto_width, + width: width, language: { noResults: function(query) { if (field.noResults) { @@ -1949,7 +1972,7 @@ function constructField(name, parameters, options) { if (extra) { - if (!parameters.required) { + if (!parameters.required && !options.hideClearButton) { html += ` From 2ade14c47bcee91cefb697aefd4c3859341abbde Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 7 Feb 2022 11:35:07 +1100 Subject: [PATCH 55/92] Check for duplicate BOM items as part of serializer validation --- InvenTree/part/serializers.py | 36 ++++++++++++++++--- InvenTree/templates/js/translated/bom.js | 3 +- InvenTree/templates/js/translated/forms.js | 5 +-- .../js/translated/model_renderers.js | 2 +- 4 files changed, 38 insertions(+), 8 deletions(-) diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index d18b1a2a8b..89f9103187 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -493,6 +493,22 @@ class BomItemSerializer(InvenTreeModelSerializer): purchase_price_range = serializers.SerializerMethodField() + def validate(self, data): + + # Check for duplicate BOM items + part = data['part'] + sub_part = data['sub_part'] + + if BomItem.objects.get(part=part, sub_part=sub_part).exists(): + raise serializers.ValidationError({ + 'part': _("Duplicate BOM item already exists"), + 'sub_part': _("Duplicate BOM items already exists"), + }) + + data = super().validate(data) + + return data + def __init__(self, *args, **kwargs): # part_detail and sub_part_detail serializers are only included if requested. # This saves a bunch of database requests @@ -962,8 +978,20 @@ class BomUploadSerializer(serializers.Serializer): items = data['items'] - with transaction.atomic(): + try: + with transaction.atomic(): - for item in items: - print(item) - \ No newline at end of file + for item in items: + + part = item['part'] + sub_part = item['sub_part'] + + # Ignore duplicate BOM items + if BomItem.objects.filter(part=part, sub_part=sub_part).exists(): + continue + + # Create a new BomItem object + BomItem.objects.create(**item) + + except Exception as e: + raise serializers.ValidationError(detail=serializers.as_serializer_error(e)) diff --git a/InvenTree/templates/js/translated/bom.js b/InvenTree/templates/js/translated/bom.js index 512cb0c46a..d5391ab70a 100644 --- a/InvenTree/templates/js/translated/bom.js +++ b/InvenTree/templates/js/translated/bom.js @@ -43,6 +43,7 @@ function constructBomUploadTable(data, options={}) { var field_options = { hideLabels: true, hideClearButton: true, + form_classes: 'bom-form-group', }; function constructRowField(field_name) { @@ -77,7 +78,7 @@ function constructBomUploadTable(data, options={}) { buttons += `
`; var html = ` - + ${sub_part} ${quantity} ${reference} diff --git a/InvenTree/templates/js/translated/forms.js b/InvenTree/templates/js/translated/forms.js index 67a162ff2b..2742e3f0ca 100644 --- a/InvenTree/templates/js/translated/forms.js +++ b/InvenTree/templates/js/translated/forms.js @@ -1056,6 +1056,7 @@ function handleNestedErrors(errors, field_name, options={}) { // Here, error_item is a map of field names to error messages for (sub_field_name in error_item) { + var errors = error_item[sub_field_name]; // Find the target (nested) field @@ -1919,12 +1920,12 @@ function constructField(name, parameters, options) { options.current_group = group; } - var form_classes = 'form-group'; + var form_classes = options.form_classes || 'form-group'; if (parameters.errors) { form_classes += ' form-field-error'; } - + // Optional content to render before the field if (parameters.before) { html += parameters.before; diff --git a/InvenTree/templates/js/translated/model_renderers.js b/InvenTree/templates/js/translated/model_renderers.js index ee4c4cb5ef..68ba496309 100644 --- a/InvenTree/templates/js/translated/model_renderers.js +++ b/InvenTree/templates/js/translated/model_renderers.js @@ -161,7 +161,7 @@ function renderPart(name, data, parameters, options) { html += ` ${data.full_name || data.name}`; if (data.description) { - html += ` - ${data.description}`; + html += ` - ${data.description}`; } var extra = ''; From 4f26df3124238adc2ae7c850b3246b842b624885 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 7 Feb 2022 11:35:51 +1100 Subject: [PATCH 56/92] bug fix --- InvenTree/part/serializers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index 89f9103187..fb90547a04 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -499,7 +499,7 @@ class BomItemSerializer(InvenTreeModelSerializer): part = data['part'] sub_part = data['sub_part'] - if BomItem.objects.get(part=part, sub_part=sub_part).exists(): + if BomItem.objects.filter(part=part, sub_part=sub_part).exists(): raise serializers.ValidationError({ 'part': _("Duplicate BOM item already exists"), 'sub_part': _("Duplicate BOM items already exists"), From 131663cecc8491f462701263da84eb630be56a15 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 7 Feb 2022 12:20:18 +1100 Subject: [PATCH 57/92] Adds options to clear existing BOM data when uploading --- InvenTree/part/serializers.py | 34 ++++++++++++----- InvenTree/templates/js/translated/bom.js | 44 ++++++++++++++-------- InvenTree/templates/js/translated/forms.js | 22 +++++++++++ 3 files changed, 76 insertions(+), 24 deletions(-) diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index fb90547a04..c9c78eb46b 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -746,6 +746,13 @@ class BomExtractSerializer(serializers.Serializer): """ + class Meta: + fields = [ + 'bom_file', + 'part', + 'clear_existing', + ] + # These columns must be present REQUIRED_COLUMNS = [ 'quantity', @@ -940,16 +947,24 @@ class BomExtractSerializer(serializers.Serializer): 'filename': self.filename, } - class Meta: - fields = [ - 'bom_file', - ] + part = serializers.PrimaryKeyRelatedField(queryset=Part.objects.filter(assembly=True), required=True) + + clear_existing = serializers.BooleanField( + label=_("Clear Existing BOM"), + help_text=_("Delete existing BOM data first"), + ) def save(self): - """ - There is no action associated with "saving" this serializer - """ - pass + + data = self.validated_data + + master_part = data['part'] + clear_existing = data['clear_existing'] + + if clear_existing: + + # Remove all existing BOM items + master_part.bom_items.all().delete() class BomUploadSerializer(serializers.Serializer): @@ -963,13 +978,14 @@ class BomUploadSerializer(serializers.Serializer): def validate(self, data): - data = super().validate(data) items = data['items'] if len(items) == 0: raise serializers.ValidationError(_("At least one BOM item is required")) + data = super().validate(data) + return data def save(self): diff --git a/InvenTree/templates/js/translated/bom.js b/InvenTree/templates/js/translated/bom.js index d5391ab70a..c80f9a2694 100644 --- a/InvenTree/templates/js/translated/bom.js +++ b/InvenTree/templates/js/translated/bom.js @@ -112,7 +112,7 @@ function constructBomUploadTable(data, options={}) { // Add callback for "remove row" button $(`#button-row-remove-${idx}`).click(function() { - $(`#bom_import_row_${idx}`).remove(); + $(`#items_${idx}`).remove(); }); } @@ -172,22 +172,36 @@ function submitBomTable(part_id, options={}) { getApiEndpointOptions(url, function(response) { var fields = response.actions.POST; - inventreePut(url, data, { + constructForm(url, { method: 'POST', - success: function(response) { - // TODO: Return to the "bom" page - }, - error: function(xhr) { - switch (xhr.status) { - case 400: - handleFormErrors(xhr.responseJSON, fields, options); - break; - default: - showApiError(xhr, url); - break; - } + fields: { + clear_existing: {}, + }, + title: '{% trans "Submit BOM Data" %}', + onSubmit: function(fields, opts) { + + data.clear_existing = getFormFieldValue('clear_existing', {}, opts); + + $(opts.modal).modal('hide'); + + inventreePut(url, data, { + method: 'POST', + success: function(response) { + // TODO: Return to the "bom" page + }, + error: function(xhr) { + switch (xhr.status) { + case 400: + handleFormErrors(xhr.responseJSON, fields, options); + break; + default: + showApiError(xhr, url); + break; + } + } + }); } - }); + }); }); } diff --git a/InvenTree/templates/js/translated/forms.js b/InvenTree/templates/js/translated/forms.js index 2742e3f0ca..fe912b3358 100644 --- a/InvenTree/templates/js/translated/forms.js +++ b/InvenTree/templates/js/translated/forms.js @@ -1059,6 +1059,28 @@ function handleNestedErrors(errors, field_name, options={}) { var errors = error_item[sub_field_name]; + if (sub_field_name == 'non_field_errors') { + + var row = null; + + if (options.modal) { + row = $(options.modal).find(`#items_${nest_id}`); + } else { + row = $(`#items_${nest_id}`); + } + + for (var ii = errors.length - 1; ii >= 0; ii--) { + + var html = ` +
+ ${errors[ii]} +
`; + + row.after(html); + } + + } + // Find the target (nested) field var target = `${field_name}_${sub_field_name}_${nest_id}`; From 11d5900b69b4afe7fe340302997f8a47b1bc0f48 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 7 Feb 2022 12:25:09 +1100 Subject: [PATCH 58/92] Update upload file template --- .../part/bom_upload/upload_file.html | 84 ++++++++++++++----- InvenTree/templates/js/translated/bom.js | 42 ++++------ 2 files changed, 75 insertions(+), 51 deletions(-) diff --git a/InvenTree/part/templates/part/bom_upload/upload_file.html b/InvenTree/part/templates/part/bom_upload/upload_file.html index 40411f074a..27f681acae 100644 --- a/InvenTree/part/templates/part/bom_upload/upload_file.html +++ b/InvenTree/part/templates/part/bom_upload/upload_file.html @@ -14,21 +14,22 @@ {% endblock %} {% block actions %} + + + {% endblock %} {% block page_info %}
-

{% blocktrans with step=wizard.steps.step1 count=wizard.steps.count %}Step {{step}} of {{count}}{% endblocktrans %} - {% if description %}- {{ description }}{% endif %}

-
- {% csrf_token %} - {% load crispy_forms_tags %} - - {% block form_buttons_top %} - {% endblock form_buttons_top %} - - {% block form_alert %}
{% trans "Requirements for BOM upload" %}:
    @@ -36,22 +37,29 @@
  • {% trans "Each part must already exist in the database" %}
- {% endblock %} - - {{ wizard.management_form }} - {% block form_content %} - {% crispy wizard.form %} - {% endblock form_content %} +
+ +
+ + +
+ + + + + + + + + + + + + +
{% trans "Part" %}{% trans "Quantity" %}{% trans "Reference" %}{% trans "Overage" %}{% trans "Allow Variants" %}{% trans "Inherited" %}{% trans "Optional" %}{% trans "Note" %}
- {% block form_buttons_bottom %} - {% if wizard.steps.prev %} - - {% endif %} - -
- {% endblock form_buttons_bottom %}
{% endblock page_info %} @@ -64,4 +72,34 @@ $('#bom-template-download').click(function() { downloadBomTemplate(); }); +$('#bom-upload').click(function() { + + constructForm('{% url "api-bom-extract" %}', { + method: 'POST', + fields: { + bom_file: {}, + part: { + value: {{ part.pk }}, + hidden: true, + }, + clear_existing: {}, + }, + title: '{% trans "Upload BOM File" %}', + onSuccess: function(response) { + $('#bom-upload').hide(); + + $('#bom-submit').show(); + + constructBomUploadTable(response); + + $('#bom-submit').click(function() { + submitBomTable({{ part.pk }}, { + bom_data: response, + }); + }); + } + }); + +}); + {% endblock js_ready %} \ No newline at end of file diff --git a/InvenTree/templates/js/translated/bom.js b/InvenTree/templates/js/translated/bom.js index c80f9a2694..cb07f93a38 100644 --- a/InvenTree/templates/js/translated/bom.js +++ b/InvenTree/templates/js/translated/bom.js @@ -172,36 +172,22 @@ function submitBomTable(part_id, options={}) { getApiEndpointOptions(url, function(response) { var fields = response.actions.POST; - constructForm(url, { + inventreePut(url, data, { method: 'POST', - fields: { - clear_existing: {}, - }, - title: '{% trans "Submit BOM Data" %}', - onSubmit: function(fields, opts) { - - data.clear_existing = getFormFieldValue('clear_existing', {}, opts); - - $(opts.modal).modal('hide'); - - inventreePut(url, data, { - method: 'POST', - success: function(response) { - // TODO: Return to the "bom" page - }, - error: function(xhr) { - switch (xhr.status) { - case 400: - handleFormErrors(xhr.responseJSON, fields, options); - break; - default: - showApiError(xhr, url); - break; - } - } - }); + success: function(response) { + window.location.href = `/part/${part_id}/?display=bom`; + }, + error: function(xhr) { + switch (xhr.status) { + case 400: + handleFormErrors(xhr.responseJSON, fields, options); + break; + default: + showApiError(xhr, url); + break; + } } - }); + }); }); } From 509d58979e5c49f01673cd999eb49266b3e9b07b Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 7 Feb 2022 12:29:15 +1100 Subject: [PATCH 59/92] Remove old templates --- .../part/bom_upload/match_fields.html | 99 ------- .../part/bom_upload/match_parts.html | 127 --------- .../upload_file.html => upload_bom.html} | 0 InvenTree/part/views.py | 268 +----------------- 4 files changed, 5 insertions(+), 489 deletions(-) delete mode 100644 InvenTree/part/templates/part/bom_upload/match_fields.html delete mode 100644 InvenTree/part/templates/part/bom_upload/match_parts.html rename InvenTree/part/templates/part/{bom_upload/upload_file.html => upload_bom.html} (100%) diff --git a/InvenTree/part/templates/part/bom_upload/match_fields.html b/InvenTree/part/templates/part/bom_upload/match_fields.html deleted file mode 100644 index b09260cf46..0000000000 --- a/InvenTree/part/templates/part/bom_upload/match_fields.html +++ /dev/null @@ -1,99 +0,0 @@ -{% extends "part/bom_upload/upload_file.html" %} -{% load inventree_extras %} -{% load i18n %} -{% load static %} - -{% block form_alert %} -{% if missing_columns and missing_columns|length > 0 %} - -{% endif %} -{% if duplicates and duplicates|length > 0 %} - -{% endif %} -{% endblock form_alert %} - -{% block form_buttons_top %} - {% if wizard.steps.prev %} - - {% endif %} - -{% endblock form_buttons_top %} - -{% block form_content %} - - - {% trans "File Fields" %} - - {% for col in form %} - -
- - {{ col.name }} - -
- - {% endfor %} - - - - - {% trans "Match Fields" %} - - {% for col in form %} - - {{ col }} - {% for duplicate in duplicates %} - {% if duplicate == col.value %} - - {% endif %} - {% endfor %} - - {% endfor %} - - {% for row in rows %} - {% with forloop.counter as row_index %} - - - - - {{ row_index }} - {% for item in row.data %} - - - {{ item }} - - {% endfor %} - - {% endwith %} - {% endfor %} - -{% endblock form_content %} - -{% block form_buttons_bottom %} -{% endblock form_buttons_bottom %} - -{% block js_ready %} -{{ block.super }} - -$('.fieldselect').select2({ - width: '100%', - matcher: partialMatcher, -}); - -{% endblock %} \ No newline at end of file diff --git a/InvenTree/part/templates/part/bom_upload/match_parts.html b/InvenTree/part/templates/part/bom_upload/match_parts.html deleted file mode 100644 index 0345fa309e..0000000000 --- a/InvenTree/part/templates/part/bom_upload/match_parts.html +++ /dev/null @@ -1,127 +0,0 @@ -{% extends "part/bom_upload/upload_file.html" %} -{% load inventree_extras %} -{% load i18n %} -{% load static %} -{% load crispy_forms_tags %} - -{% block form_alert %} -{% if form.errors %} -{% endif %} -{% if form_errors %} - -{% endif %} -{% endblock form_alert %} - -{% block form_buttons_top %} - {% if wizard.steps.prev %} - - {% endif %} - -{% endblock form_buttons_top %} - -{% block form_content %} - - - - {% trans "Row" %} - {% trans "Select Part" %} - {% trans "Reference" %} - {% trans "Quantity" %} - {% for col in columns %} - {% if col.guess != 'Quantity' %} - - - - {% if col.guess %} - {{ col.guess }} - {% else %} - {{ col.name }} - {% endif %} - - {% endif %} - {% endfor %} - - - - {% comment %} Dummy row for javascript del_row method {% endcomment %} - {% for row in rows %} - - - - - - {% add row.index 1 %} - - - {% for field in form.visible_fields %} - {% if field.name == row.item_select %} - {{ field }} - {% endif %} - {% endfor %} - {% if row.errors.part %} -

{{ row.errors.part }}

- {% endif %} - - - {% for field in form.visible_fields %} - {% if field.name == row.reference %} - {{ field|as_crispy_field }} - {% endif %} - {% endfor %} - {% if row.errors.reference %} -

{{ row.errors.reference }}

- {% endif %} - - - {% for field in form.visible_fields %} - {% if field.name == row.quantity %} - {{ field|as_crispy_field }} - {% endif %} - {% endfor %} - {% if row.errors.quantity %} -

{{ row.errors.quantity }}

- {% endif %} - - {% for item in row.data %} - {% if item.column.guess != 'Quantity' %} - - {% if item.column.guess == 'Overage' %} - {% for field in form.visible_fields %} - {% if field.name == row.overage %} - {{ field|as_crispy_field }} - {% endif %} - {% endfor %} - {% elif item.column.guess == 'Note' %} - {% for field in form.visible_fields %} - {% if field.name == row.note %} - {{ field|as_crispy_field }} - {% endif %} - {% endfor %} - {% else %} - {{ item.cell }} - {% endif %} - - - {% endif %} - {% endfor %} - - {% endfor %} - -{% endblock form_content %} - -{% block form_buttons_bottom %} -{% endblock form_buttons_bottom %} - -{% block js_ready %} -{{ block.super }} - -$('.bomselect').select2({ - dropdownAutoWidth: true, - matcher: partialMatcher, -}); - -{% endblock %} \ No newline at end of file diff --git a/InvenTree/part/templates/part/bom_upload/upload_file.html b/InvenTree/part/templates/part/upload_bom.html similarity index 100% rename from InvenTree/part/templates/part/bom_upload/upload_file.html rename to InvenTree/part/templates/part/upload_bom.html diff --git a/InvenTree/part/views.py b/InvenTree/part/views.py index 03465a1838..19e72ea069 100644 --- a/InvenTree/part/views.py +++ b/InvenTree/part/views.py @@ -704,270 +704,12 @@ class PartImageSelect(AjaxUpdateView): return self.renderJsonResponse(request, form, data) -class BomUpload(InvenTreeRoleMixin, FileManagementFormView): - """ View for uploading a BOM file, and handling BOM data importing. +class BomUpload(InvenTreeRoleMixin, DetailView): + """ View for uploading a BOM file, and handling BOM data importing. """ - The BOM upload process is as follows: - - 1. (Client) Select and upload BOM file - 2. (Server) Verify that supplied file is a file compatible with tablib library - 3. (Server) Introspect data file, try to find sensible columns / values / etc - 4. (Server) Send suggestions back to the client - 5. (Client) Makes choices based on suggestions: - - Accept automatic matching to parts found in database - - Accept suggestions for 'partial' or 'fuzzy' matches - - Create new parts in case of parts not being available - 6. (Client) Sends updated dataset back to server - 7. (Server) Check POST data for validity, sanity checking, etc. - 8. (Server) Respond to POST request - - If data are valid, proceed to 9. - - If data not valid, return to 4. - 9. (Server) Send confirmation form to user - - Display the actions which will occur - - Provide final "CONFIRM" button - 10. (Client) Confirm final changes - 11. (Server) Apply changes to database, update BOM items. - - During these steps, data are passed between the server/client as JSON objects. - """ - - role_required = ('part.change', 'part.add') - - class BomFileManager(FileManager): - # Fields which are absolutely necessary for valid upload - REQUIRED_HEADERS = [ - 'Quantity' - ] - - # Fields which are used for part matching (only one of them is needed) - ITEM_MATCH_HEADERS = [ - 'Part_Name', - 'Part_IPN', - 'Part_ID', - ] - - # Fields which would be helpful but are not required - OPTIONAL_HEADERS = [ - 'Reference', - 'Note', - 'Overage', - ] - - EDITABLE_HEADERS = [ - 'Reference', - 'Note', - 'Overage' - ] - - name = 'order' - form_list = [ - ('upload', UploadFileForm), - ('fields', MatchFieldForm), - ('items', part_forms.BomMatchItemForm), - ] - form_steps_template = [ - 'part/bom_upload/upload_file.html', - 'part/bom_upload/match_fields.html', - 'part/bom_upload/match_parts.html', - ] - form_steps_description = [ - _("Upload File"), - _("Match Fields"), - _("Match Parts"), - ] - form_field_map = { - 'item_select': 'part', - 'quantity': 'quantity', - 'overage': 'overage', - 'reference': 'reference', - 'note': 'note', - } - file_manager_class = BomFileManager - - def get_part(self): - """ Get part or return 404 """ - - return get_object_or_404(Part, pk=self.kwargs['pk']) - - def get_context_data(self, form, **kwargs): - """ Handle context data for order """ - - context = super().get_context_data(form=form, **kwargs) - - part = self.get_part() - - context.update({'part': part}) - - return context - - def get_allowed_parts(self): - """ Return a queryset of parts which are allowed to be added to this BOM. - """ - - return self.get_part().get_allowed_bom_items() - - def get_field_selection(self): - """ Once data columns have been selected, attempt to pre-select the proper data from the database. - This function is called once the field selection has been validated. - The pre-fill data are then passed through to the part selection form. - """ - - self.allowed_items = self.get_allowed_parts() - - # Fields prefixed with "Part_" can be used to do "smart matching" against Part objects in the database - k_idx = self.get_column_index('Part_ID') - p_idx = self.get_column_index('Part_Name') - i_idx = self.get_column_index('Part_IPN') - - q_idx = self.get_column_index('Quantity') - r_idx = self.get_column_index('Reference') - o_idx = self.get_column_index('Overage') - n_idx = self.get_column_index('Note') - - for row in self.rows: - """ - Iterate through each row in the uploaded data, - and see if we can match the row to a "Part" object in the database. - There are three potential ways to match, based on the uploaded data: - a) Use the PK (primary key) field for the part, uploaded in the "Part_ID" field - b) Use the IPN (internal part number) field for the part, uploaded in the "Part_IPN" field - c) Use the name of the part, uploaded in the "Part_Name" field - Notes: - - If using the Part_ID field, we can do an exact match against the PK field - - If using the Part_IPN field, we can do an exact match against the IPN field - - If using the Part_Name field, we can use fuzzy string matching to match "close" values - We also extract other information from the row, for the other non-matched fields: - - Quantity - - Reference - - Overage - - Note - """ - - # Initially use a quantity of zero - quantity = Decimal(0) - - # Initially we do not have a part to reference - exact_match_part = None - - # A list of potential Part matches - part_options = self.allowed_items - - # Check if there is a column corresponding to "quantity" - if q_idx >= 0: - q_val = row['data'][q_idx]['cell'] - - if q_val: - # Delete commas - q_val = q_val.replace(',', '') - - try: - # Attempt to extract a valid quantity from the field - quantity = Decimal(q_val) - # Store the 'quantity' value - row['quantity'] = quantity - except (ValueError, InvalidOperation): - pass - - # Check if there is a column corresponding to "PK" - if k_idx >= 0: - pk = row['data'][k_idx]['cell'] - - if pk: - try: - # Attempt Part lookup based on PK value - exact_match_part = self.allowed_items.get(pk=pk) - except (ValueError, Part.DoesNotExist): - exact_match_part = None - - # Check if there is a column corresponding to "Part IPN" and no exact match found yet - if i_idx >= 0 and not exact_match_part: - part_ipn = row['data'][i_idx]['cell'] - - if part_ipn: - part_matches = [part for part in self.allowed_items if part.IPN and part_ipn.lower() == str(part.IPN.lower())] - - # Check for single match - if len(part_matches) == 1: - exact_match_part = part_matches[0] - - # Check if there is a column corresponding to "Part Name" and no exact match found yet - if p_idx >= 0 and not exact_match_part: - part_name = row['data'][p_idx]['cell'] - - row['part_name'] = part_name - - matches = [] - - for part in self.allowed_items: - ratio = fuzz.partial_ratio(part.name + part.description, part_name) - matches.append({'part': part, 'match': ratio}) - - # Sort matches by the 'strength' of the match ratio - if len(matches) > 0: - matches = sorted(matches, key=lambda item: item['match'], reverse=True) - - part_options = [m['part'] for m in matches] - - # Supply list of part options for each row, sorted by how closely they match the part name - row['item_options'] = part_options - - # Unless found, the 'item_match' is blank - row['item_match'] = None - - if exact_match_part: - # If there is an exact match based on PK or IPN, use that - row['item_match'] = exact_match_part - - # Check if there is a column corresponding to "Overage" field - if o_idx >= 0: - row['overage'] = row['data'][o_idx]['cell'] - - # Check if there is a column corresponding to "Reference" field - if r_idx >= 0: - row['reference'] = row['data'][r_idx]['cell'] - - # Check if there is a column corresponding to "Note" field - if n_idx >= 0: - row['note'] = row['data'][n_idx]['cell'] - - def done(self, form_list, **kwargs): - """ Once all the data is in, process it to add BomItem instances to the part """ - - self.part = self.get_part() - items = self.get_clean_items() - - # Clear BOM - self.part.clear_bom() - - # Generate new BOM items - for bom_item in items.values(): - try: - part = Part.objects.get(pk=int(bom_item.get('part'))) - except (ValueError, Part.DoesNotExist): - continue - - quantity = bom_item.get('quantity') - overage = bom_item.get('overage', '') - reference = bom_item.get('reference', '') - note = bom_item.get('note', '') - - # Create a new BOM item - item = BomItem( - part=self.part, - sub_part=part, - quantity=quantity, - overage=overage, - reference=reference, - note=note, - ) - - try: - item.save() - except IntegrityError: - # BomItem already exists - pass - - return HttpResponseRedirect(reverse('part-detail', kwargs={'pk': self.kwargs['pk']})) + context_object_name = 'part' + queryset = Part.objects.all() + template_name = 'part/upload_bom.html' class PartExport(AjaxView): From c6dc196053762bf22b70a5de999ee24a3f37f57f Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 7 Feb 2022 12:32:50 +1100 Subject: [PATCH 60/92] PEP fixes --- InvenTree/part/serializers.py | 8 +++----- InvenTree/part/views.py | 5 +---- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index c9c78eb46b..a53d141a49 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -27,7 +27,6 @@ from InvenTree.serializers import (InvenTreeAttachmentSerializerField, from InvenTree.status_codes import BuildStatus, PurchaseOrderStatus from stock.models import StockItem -from .admin import BomItemResource from .models import (BomItem, BomItemSubstitute, Part, PartAttachment, PartCategory, PartRelated, PartParameter, PartParameterTemplate, PartSellPriceBreak, @@ -470,7 +469,7 @@ class BomItemSerializer(InvenTreeModelSerializer): def validate_quantity(self, quantity): if quantity <= 0: raise serializers.ValidationError(_("Quantity must be greater than zero")) - + return quantity part = serializers.PrimaryKeyRelatedField(queryset=Part.objects.filter(assembly=True)) @@ -955,7 +954,7 @@ class BomExtractSerializer(serializers.Serializer): ) def save(self): - + data = self.validated_data master_part = data['part'] @@ -978,7 +977,6 @@ class BomUploadSerializer(serializers.Serializer): def validate(self, data): - items = data['items'] if len(items) == 0: @@ -1008,6 +1006,6 @@ class BomUploadSerializer(serializers.Serializer): # Create a new BomItem object BomItem.objects.create(**item) - + except Exception as e: raise serializers.ValidationError(detail=serializers.as_serializer_error(e)) diff --git a/InvenTree/part/views.py b/InvenTree/part/views.py index 19e72ea069..e0992364dd 100644 --- a/InvenTree/part/views.py +++ b/InvenTree/part/views.py @@ -28,20 +28,17 @@ import requests import os import io -from rapidfuzz import fuzz -from decimal import Decimal, InvalidOperation +from decimal import Decimal from .models import PartCategory, Part from .models import PartParameterTemplate from .models import PartCategoryParameterTemplate -from .models import BomItem from .models import PartSellPriceBreak, PartInternalPriceBreak from common.models import InvenTreeSetting from company.models import SupplierPart from common.files import FileManager from common.views import FileManagementFormView, FileManagementAjaxView -from common.forms import UploadFileForm, MatchFieldForm from stock.models import StockItem, StockLocation From 4f638be874caf82d767ad2e1841c39f2d317caa7 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 7 Feb 2022 13:04:42 +1100 Subject: [PATCH 61/92] Handle errors when connecting to currency exchange - Also adds timeout when connecting --- InvenTree/InvenTree/apps.py | 13 ++++++++----- InvenTree/InvenTree/exchange.py | 20 ++++++++++++++++++++ InvenTree/InvenTree/tasks.py | 9 ++++++--- 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/InvenTree/InvenTree/apps.py b/InvenTree/InvenTree/apps.py index faef1a6cdb..da2e753952 100644 --- a/InvenTree/InvenTree/apps.py +++ b/InvenTree/InvenTree/apps.py @@ -118,20 +118,20 @@ class InvenTreeConfig(AppConfig): if last_update is not None: delta = datetime.now().date() - last_update.date() if delta > timedelta(days=1): - print(f"Last update was {last_update}") + logger.info(f"Last update was {last_update}") update = True else: # Never been updated - print("Exchange backend has never been updated") + logger.info("Exchange backend has never been updated") update = True # Backend currency has changed? if not base_currency == backend.base_currency: - print(f"Base currency changed from {backend.base_currency} to {base_currency}") + logger.info(f"Base currency changed from {backend.base_currency} to {base_currency}") update = True except (ExchangeBackend.DoesNotExist): - print("Exchange backend not found - updating") + logger.info("Exchange backend not found - updating") update = True except: @@ -139,4 +139,7 @@ class InvenTreeConfig(AppConfig): return if update: - update_exchange_rates() + try: + update_exchange_rates() + except Exception as e: + logger.error(f"Error updating exchange rates: {e}") diff --git a/InvenTree/InvenTree/exchange.py b/InvenTree/InvenTree/exchange.py index 4b99953382..a79239568d 100644 --- a/InvenTree/InvenTree/exchange.py +++ b/InvenTree/InvenTree/exchange.py @@ -1,3 +1,7 @@ +import certifi +import ssl +from urllib.request import urlopen + from common.settings import currency_code_default, currency_codes from urllib.error import URLError @@ -24,6 +28,22 @@ class InvenTreeExchange(SimpleExchangeBackend): return { } + def get_response(self, **kwargs): + """ + Custom code to get response from server. + Note: Adds a 5-second timeout + """ + + url = self.get_url(**kwargs) + + try: + context = ssl.create_default_context(cafile=certifi.where()) + response = urlopen(url, timeout=5, context=context) + return response.read() + except: + # Returning None here will raise an error upstream + return None + def update_rates(self, base_currency=currency_code_default()): symbols = ','.join(currency_codes()) diff --git a/InvenTree/InvenTree/tasks.py b/InvenTree/InvenTree/tasks.py index 0a098e5f8c..a76f766120 100644 --- a/InvenTree/InvenTree/tasks.py +++ b/InvenTree/InvenTree/tasks.py @@ -269,10 +269,13 @@ def update_exchange_rates(): logger.info(f"Using base currency '{base}'") - backend.update_rates(base_currency=base) + try: + backend.update_rates(base_currency=base) - # Remove any exchange rates which are not in the provided currencies - Rate.objects.filter(backend="InvenTreeExchange").exclude(currency__in=currency_codes()).delete() + # Remove any exchange rates which are not in the provided currencies + Rate.objects.filter(backend="InvenTreeExchange").exclude(currency__in=currency_codes()).delete() + except Exception as e: + logger.error(f"Error updating exchange rates: {e}") def send_email(subject, body, recipients, from_email=None, html_message=None): From 7265360648a8522dc1edadd1fc9655cb16609a4b Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 7 Feb 2022 13:07:03 +1100 Subject: [PATCH 62/92] JS linting --- InvenTree/templates/js/translated/bom.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InvenTree/templates/js/translated/bom.js b/InvenTree/templates/js/translated/bom.js index cb07f93a38..fd23e70ad0 100644 --- a/InvenTree/templates/js/translated/bom.js +++ b/InvenTree/templates/js/translated/bom.js @@ -156,7 +156,7 @@ function submitBomTable(part_id, options={}) { inherited: getFormFieldValue(`items_inherited_${idx}`, {type: 'boolean'}), optional: getFormFieldValue(`items_optional_${idx}`, {type: 'boolean'}), note: getFormFieldValue(`items_note_${idx}`, {}), - }) + }); }); var data = { From a5a2fcd84adf0dc4a82a927b4540a97af1e64130 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 7 Feb 2022 13:13:45 +1100 Subject: [PATCH 63/92] Only update rates on server launch if there are no rates available --- InvenTree/InvenTree/apps.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/InvenTree/InvenTree/apps.py b/InvenTree/InvenTree/apps.py index da2e753952..b153264428 100644 --- a/InvenTree/InvenTree/apps.py +++ b/InvenTree/InvenTree/apps.py @@ -115,12 +115,7 @@ class InvenTreeConfig(AppConfig): last_update = backend.last_update - if last_update is not None: - delta = datetime.now().date() - last_update.date() - if delta > timedelta(days=1): - logger.info(f"Last update was {last_update}") - update = True - else: + if last_update is None: # Never been updated logger.info("Exchange backend has never been updated") update = True From 11c187f81dda9382ab0f012b3f8ad5251b039c26 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 7 Feb 2022 13:14:51 +1100 Subject: [PATCH 64/92] PEP fixes --- InvenTree/InvenTree/apps.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InvenTree/InvenTree/apps.py b/InvenTree/InvenTree/apps.py index b153264428..b32abf4a8e 100644 --- a/InvenTree/InvenTree/apps.py +++ b/InvenTree/InvenTree/apps.py @@ -100,7 +100,7 @@ class InvenTreeConfig(AppConfig): try: from djmoney.contrib.exchange.models import ExchangeBackend - from datetime import datetime, timedelta + from InvenTree.tasks import update_exchange_rates from common.settings import currency_code_default except AppRegistryNotReady: From 11f541303baf2ffbfaa987a24798d3b57b4cd4d7 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 7 Feb 2022 13:32:35 +1100 Subject: [PATCH 65/92] unit test fixes --- InvenTree/part/test_bom_export.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/InvenTree/part/test_bom_export.py b/InvenTree/part/test_bom_export.py index e6b2a7c255..4ae0b88269 100644 --- a/InvenTree/part/test_bom_export.py +++ b/InvenTree/part/test_bom_export.py @@ -107,7 +107,7 @@ class BomExportTest(TestCase): """ params = { - 'file_format': 'csv', + 'format': 'csv', 'cascade': True, 'parameter_data': True, 'stock_data': True, @@ -171,7 +171,7 @@ class BomExportTest(TestCase): """ params = { - 'file_format': 'xls', + 'format': 'xls', 'cascade': True, 'parameter_data': True, 'stock_data': True, @@ -192,7 +192,7 @@ class BomExportTest(TestCase): """ params = { - 'file_format': 'xlsx', + 'format': 'xlsx', 'cascade': True, 'parameter_data': True, 'stock_data': True, @@ -210,7 +210,7 @@ class BomExportTest(TestCase): """ params = { - 'file_format': 'json', + 'format': 'json', 'cascade': True, 'parameter_data': True, 'stock_data': True, From 64b1523013db44c27a54712d399aaed3dbdb0e2a Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 7 Feb 2022 13:55:25 +1100 Subject: [PATCH 66/92] Do not hide the "submit order" button --- InvenTree/order/templates/order/order_base.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InvenTree/order/templates/order/order_base.html b/InvenTree/order/templates/order/order_base.html index 195f2273a3..c675574d30 100644 --- a/InvenTree/order/templates/order/order_base.html +++ b/InvenTree/order/templates/order/order_base.html @@ -48,7 +48,7 @@ {% endif %}
-{% if order.status == PurchaseOrderStatus.PENDING and order.lines.count > 0 %} +{% if order.status == PurchaseOrderStatus.PENDING %} From 55ff026696d236141d42e4b81c9cff4d673355af Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 7 Feb 2022 14:24:40 +1100 Subject: [PATCH 67/92] Remove incorrect validation routine --- InvenTree/part/serializers.py | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index a53d141a49..351348c6bc 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -492,22 +492,6 @@ class BomItemSerializer(InvenTreeModelSerializer): purchase_price_range = serializers.SerializerMethodField() - def validate(self, data): - - # Check for duplicate BOM items - part = data['part'] - sub_part = data['sub_part'] - - if BomItem.objects.filter(part=part, sub_part=sub_part).exists(): - raise serializers.ValidationError({ - 'part': _("Duplicate BOM item already exists"), - 'sub_part': _("Duplicate BOM items already exists"), - }) - - data = super().validate(data) - - return data - def __init__(self, *args, **kwargs): # part_detail and sub_part_detail serializers are only included if requested. # This saves a bunch of database requests From ef70e665bb8ec2c340cddfa77e478b93a94c04bf Mon Sep 17 00:00:00 2001 From: eeintech Date: Mon, 7 Feb 2022 15:36:56 -0500 Subject: [PATCH 68/92] Refactored and added permission check for children models --- InvenTree/users/models.py | 59 +++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 27 deletions(-) diff --git a/InvenTree/users/models.py b/InvenTree/users/models.py index 458e2d0758..10f326305c 100644 --- a/InvenTree/users/models.py +++ b/InvenTree/users/models.py @@ -176,8 +176,9 @@ class RuleSet(models.Model): 'django_q_success', ] - RULESET_CHANGE_DELETE = [ - ('part', 'bomitem') + RULESET_CHANGE_INHERIT = [ + ('part', 'partparameter'), + ('part', 'bomitem'), ] RULE_OPTIONS = [ @@ -229,11 +230,19 @@ class RuleSet(models.Model): for role in cls.RULESET_NAMES: if table in cls.RULESET_MODELS[role]: - print(f'{user} | {role} | {permission}') - if check_user_role(user, role, permission): return True + # Check for children models which inherits from parent role + for child in cls.RULESET_CHANGE_INHERIT: + # Get child model name + child_name = f'{child[0]}_{child[1]}' + + if child_name == table: + # Check if parent role has change permission + if check_user_role(user, role, 'change'): + return True + # Print message instead of throwing an error name = getattr(user, 'name', user.pk) @@ -459,31 +468,27 @@ def update_group_roles(group, debug=False): if debug: print(f"Removing permission {perm} from group {group.name}") - print(group_permissions) + # Enable all action permissions for certain children models + # if parent model has 'change' permission + for (parent, child) in RuleSet.RULESET_CHANGE_INHERIT: + parent_change_perm = f'{parent}.change_{parent}' + parent_child_string = f'{parent}_{child}' - # Automatically enable delete permission for children models if parent model has change permission - for change_delete in RuleSet.RULESET_CHANGE_DELETE: - perm_change = f'{change_delete[0]}.change_{change_delete[0]}' - perm_delete = f'{change_delete[0]}.delete_{change_delete[1]}' + # Check if parent change permission exists + if parent_change_perm in group_permissions: + # Add child model permissions + for action in ['add', 'change', 'delete']: + child_perm = f'{parent}.{action}_{child}' - print(perm_change) - # Check if permission is in the group - if perm_change in group_permissions: - if perm_delete not in group_permissions: - # Create delete permission object - add_model(f'{change_delete[0]}_{change_delete[1]}', 'delete', ruleset.can_delete) - - # Add to group - permission = get_permission_object(perm_delete) - print(permission) - - if permission: - group.permissions.add(permission) - print(f"Added permission {perm_delete} to group {group.name}") - else: - print(f'{perm_delete} already exists for group {group.name}') - else: - print(f'{perm_change} disabled') + # Check if child permission not already in group + if child_perm not in group_permissions: + # Create permission object + add_model(parent_child_string, action, ruleset.can_delete) + # Add to group + permission = get_permission_object(child_perm) + if permission: + group.permissions.add(permission) + print(f"Adding permission {child_perm} to group {group.name}") @receiver(post_save, sender=Group, dispatch_uid='create_missing_rule_sets') From fd63fcde43b9d06ae0748b6bd25df85f583d3f54 Mon Sep 17 00:00:00 2001 From: eeintech Date: Mon, 7 Feb 2022 15:39:06 -0500 Subject: [PATCH 69/92] Reverted print statement to logger --- InvenTree/users/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InvenTree/users/models.py b/InvenTree/users/models.py index 10f326305c..eecfd2f4d9 100644 --- a/InvenTree/users/models.py +++ b/InvenTree/users/models.py @@ -246,7 +246,7 @@ class RuleSet(models.Model): # Print message instead of throwing an error name = getattr(user, 'name', user.pk) - print(f"User '{name}' failed permission check for {table}.{permission}") + logger.info(f"User '{name}' failed permission check for {table}.{permission}") return False From 3b45c1406a0c231ed1f4f7b78763c0dde7143f48 Mon Sep 17 00:00:00 2001 From: eeintech Date: Mon, 7 Feb 2022 15:42:39 -0500 Subject: [PATCH 70/92] Improved approach to permission check at runtime --- InvenTree/users/models.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/InvenTree/users/models.py b/InvenTree/users/models.py index eecfd2f4d9..f2b72e5efa 100644 --- a/InvenTree/users/models.py +++ b/InvenTree/users/models.py @@ -233,15 +233,15 @@ class RuleSet(models.Model): if check_user_role(user, role, permission): return True - # Check for children models which inherits from parent role - for child in cls.RULESET_CHANGE_INHERIT: - # Get child model name - child_name = f'{child[0]}_{child[1]}' + # Check for children models which inherits from parent role + for (parent, child) in cls.RULESET_CHANGE_INHERIT: + # Get child model name + parent_child_string = f'{parent}_{child}' - if child_name == table: - # Check if parent role has change permission - if check_user_role(user, role, 'change'): - return True + if parent_child_string == table: + # Check if parent role has change permission + if check_user_role(user, parent, 'change'): + return True # Print message instead of throwing an error name = getattr(user, 'name', user.pk) From dbf1e1b4630a87b68ebbc694bd6a65bd9326ab00 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 8 Feb 2022 08:59:42 +1100 Subject: [PATCH 71/92] Fix logic for enabling "place order" button --- InvenTree/order/templates/order/order_base.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InvenTree/order/templates/order/order_base.html b/InvenTree/order/templates/order/order_base.html index c675574d30..af1e02fd54 100644 --- a/InvenTree/order/templates/order/order_base.html +++ b/InvenTree/order/templates/order/order_base.html @@ -178,7 +178,7 @@ src="{% static 'img/blank_image.png' %}" {{ block.super }} -{% if order.status == PurchaseOrderStatus.PENDING and order.lines.count > 0 %} +{% if order.status == PurchaseOrderStatus.PENDING %} $("#place-order").click(function() { launchModalForm("{% url 'po-issue' order.id %}", { From 1f473e42d0b42c9aff6eebac9b74fb0b6ef630bb Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 8 Feb 2022 12:07:44 +1100 Subject: [PATCH 72/92] Update README.md Add "follow on twitter" button --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 324bd7a7a1..d7fb82f67c 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,10 @@ # InvenTree +

+ follow on Twitter

+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Coverage Status](https://coveralls.io/repos/github/inventree/InvenTree/badge.svg)](https://coveralls.io/github/inventree/InvenTree) [![Crowdin](https://badges.crowdin.net/inventree/localized.svg)](https://crowdin.com/project/inventree) From 5376c5b022ce07352f465c6f399b1f2124a241be Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 8 Feb 2022 23:38:18 +1100 Subject: [PATCH 73/92] Allow POST of files for unit testing --- InvenTree/InvenTree/api_tester.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/InvenTree/InvenTree/api_tester.py b/InvenTree/InvenTree/api_tester.py index 3d8481f84e..fe2057b453 100644 --- a/InvenTree/InvenTree/api_tester.py +++ b/InvenTree/InvenTree/api_tester.py @@ -106,12 +106,12 @@ class InvenTreeAPITestCase(APITestCase): return response - def post(self, url, data, expected_code=None): + def post(self, url, data, expected_code=None, format='json'): """ Issue a POST request """ - response = self.client.post(url, data=data, format='json') + response = self.client.post(url, data=data, format=format) if expected_code is not None: self.assertEqual(response.status_code, expected_code) @@ -130,12 +130,12 @@ class InvenTreeAPITestCase(APITestCase): return response - def patch(self, url, data, files=None, expected_code=None): + def patch(self, url, data, expected_code=None, format='json'): """ Issue a PATCH request """ - response = self.client.patch(url, data=data, files=files, format='json') + response = self.client.patch(url, data=data, format=format) if expected_code is not None: self.assertEqual(response.status_code, expected_code) From 18ac1ceebe4d9b18474022227f30544276d70a7d Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 9 Feb 2022 07:56:31 +1100 Subject: [PATCH 74/92] Update README.md Reorder sections --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index d7fb82f67c..3e878ec4f7 100644 --- a/README.md +++ b/README.md @@ -37,12 +37,6 @@ InvenTree is supported by a [companion mobile app](https://inventree.readthedocs - [**Download InvenTree from the Apple App Store**](https://apps.apple.com/au/app/inventree/id1581731101#?platform=iphone) -# Translation - -Native language translation of the InvenTree web application is [community contributed via crowdin](https://crowdin.com/project/inventree). **Contributions are welcomed and encouraged**. - -To contribute to the translation effort, navigate to the [InvenTree crowdin project](https://crowdin.com/project/inventree), create a free account, and start making translations suggestions for your language of choice! - # Documentation For InvenTree documentation, refer to the [InvenTree documentation website](https://inventree.readthedocs.io/en/latest/). @@ -68,6 +62,12 @@ InvenTree is designed to be extensible, and provides multiple options for integr Contributions are welcomed and encouraged. Please help to make this project even better! Refer to the [contribution page](https://inventree.readthedocs.io/en/latest/contribute/). +# Translation + +Native language translation of the InvenTree web application is [community contributed via crowdin](https://crowdin.com/project/inventree). **Contributions are welcomed and encouraged**. + +To contribute to the translation effort, navigate to the [InvenTree crowdin project](https://crowdin.com/project/inventree), create a free account, and start making translations suggestions for your language of choice! + # Donate If you use InvenTree and find it to be useful, please consider making a donation toward its continued development. From 8fc2695873c8252aa4f9dc2d9e8fd03412b9763d Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 9 Feb 2022 08:31:08 +1100 Subject: [PATCH 75/92] Catch potential file processing errors --- InvenTree/part/serializers.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index 351348c6bc..32a93f5452 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -818,13 +818,22 @@ class BomExtractSerializer(serializers.Serializer): raise serializers.ValidationError(_("File is too large")) # Read file data into memory (bytes object) - data = bom_file.read() + try: + data = bom_file.read() + except Exception as e: + raise serializers.ValidationError(str(e)) if ext in ['csv', 'tsv', 'xml']: - data = data.decode() + try: + data = data.decode() + except Exception as e: + raise serializers.ValidationError(str(e)) # Convert to a tablib dataset (we expect headers) - self.dataset = tablib.Dataset().load(data, ext, headers=True) + try: + self.dataset = tablib.Dataset().load(data, ext, headers=True) + except Exception as e: + raise serializers.ValidationError(str(e)) for header in self.REQUIRED_COLUMNS: From 692039f712a2c05526c06a60c007b26c4ea7bbb3 Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 9 Feb 2022 08:38:28 +1100 Subject: [PATCH 76/92] Add unit testing for uploading invalid BOM files --- InvenTree/part/test_bom_import.py | 145 ++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 InvenTree/part/test_bom_import.py diff --git a/InvenTree/part/test_bom_import.py b/InvenTree/part/test_bom_import.py new file mode 100644 index 0000000000..1438c3ee1c --- /dev/null +++ b/InvenTree/part/test_bom_import.py @@ -0,0 +1,145 @@ +""" +Unit testing for BOM upload / import functionality +""" + +import tablib + +from django.core.files.uploadedfile import SimpleUploadedFile +from django.urls import reverse + +from InvenTree.api_tester import InvenTreeAPITestCase + +from part.models import Part + + +class BomUploadTest(InvenTreeAPITestCase): + """ + Test BOM file upload API endpoint + """ + + roles = [ + 'part.add', + 'part.change', + ] + + def setUp(self): + super().setUp() + + self.part = Part.objects.create( + name='Assembly', + description='An assembled part', + assembly=True, + ) + + self.url = reverse('api-bom-extract') + + def post_bom(self, filename, file_data, part=None, clear_existing=None, expected_code=None, content_type='text/plain'): + + bom_file = SimpleUploadedFile( + filename, + file_data, + content_type=content_type, + ) + + if part is None: + part = self.part.pk + + if clear_existing is None: + clear_existing = False + + response = self.post( + self.url, + data={ + 'bom_file': bom_file, + 'part': part, + 'clear_existing': clear_existing, + }, + expected_code=expected_code, + format='multipart', + ) + + return response + + def test_missing_file(self): + """ + POST without a file + """ + + response = self.post( + self.url, + data={}, + expected_code=400 + ) + + self.assertIn('No file was submitted', str(response.data['bom_file'])) + self.assertIn('This field is required', str(response.data['part'])) + self.assertIn('This field is required', str(response.data['clear_existing'])) + + def test_unsupported_file(self): + """ + POST with an unsupported file type + """ + + response = self.post_bom( + 'sample.txt', + b'hello world', + expected_code=400, + ) + + self.assertIn('Unsupported file type', str(response.data['bom_file'])) + + def test_broken_file(self): + """ + Test upload with broken (corrupted) files + """ + + response = self.post_bom( + 'sample.csv', + b'', + expected_code=400, + ) + + self.assertIn('The submitted file is empty', str(response.data['bom_file'])) + + response = self.post_bom( + 'test.xls', + b'hello world', + expected_code=400, + content_type='application/xls', + ) + + self.assertIn('Unsupported format, or corrupt file', str(response.data['bom_file'])) + + def test_invalid_upload(self): + """ + Test upload of an invalid file + """ + + dataset = tablib.Dataset() + + dataset.headers = [ + 'apple', + 'banana', + ] + + dataset.append(['test', 'test']) + dataset.append(['hello', 'world']) + + response = self.post_bom( + 'test.csv', + bytes(dataset.csv, 'utf8'), + expected_code=400, + content_type='text/csv', + ) + + self.assertIn("Missing required column: 'quantity'", str(response.data)) + + # Try again, with an .xlsx file + response = self.post_bom( + 'bom.xlsx', + dataset.xlsx, + content_type='application/xlsx', + expected_code=400, + ) + + self.assertIn("Missing required column: 'quantity'", str(response.data)) From 29c3064ae76766bca0d3a93b71daa086bfd48464 Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 9 Feb 2022 11:27:51 +1100 Subject: [PATCH 77/92] Raise error if imported dataset contains no data rows --- InvenTree/part/serializers.py | 8 ++++++++ InvenTree/part/test_bom_import.py | 29 +++++++++++++++++++++++++---- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index 32a93f5452..490237eb34 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -857,6 +857,9 @@ class BomExtractSerializer(serializers.Serializer): if not part_match: raise serializers.ValidationError(_("No part column found")) + if len(self.dataset) == 0: + raise serializers.ValidationError(_("No data rows found")) + return bom_file def extract_data(self): @@ -931,6 +934,11 @@ class BomExtractSerializer(serializers.Serializer): row['part'] = part.pk if part is not None else None + # For each "optional" column, ensure the column names are allocated correctly + for field_name in self.OPTIONAL_COLUMNS: + if field_name not in row: + row[field_name] = self.find_matching_data(row, field_name, self.dataset.headers) + rows.append(row) return { diff --git a/InvenTree/part/test_bom_import.py b/InvenTree/part/test_bom_import.py index 1438c3ee1c..6bc5019c59 100644 --- a/InvenTree/part/test_bom_import.py +++ b/InvenTree/part/test_bom_import.py @@ -122,14 +122,11 @@ class BomUploadTest(InvenTreeAPITestCase): 'banana', ] - dataset.append(['test', 'test']) - dataset.append(['hello', 'world']) - response = self.post_bom( 'test.csv', bytes(dataset.csv, 'utf8'), - expected_code=400, content_type='text/csv', + expected_code=400, ) self.assertIn("Missing required column: 'quantity'", str(response.data)) @@ -143,3 +140,27 @@ class BomUploadTest(InvenTreeAPITestCase): ) self.assertIn("Missing required column: 'quantity'", str(response.data)) + + # Add the quantity field (or close enough) + dataset.headers.append('quAntiTy ') + + response = self.post_bom( + 'test.csv', + bytes(dataset.csv, 'utf8'), + content_type='text/csv', + expected_code=400, + ) + + self.assertIn('No part column found', str(response.data)) + + dataset.headers.append('part_id') + dataset.headers.append('part_name') + + response = self.post_bom( + 'test.csv', + bytes(dataset.csv, 'utf8'), + content_type='text/csv', + expected_code=400, + ) + + self.assertIn('No data rows found', str(response.data)) From a9e1357ffb6c1afefaad21945432b2eb88d4ef21 Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 9 Feb 2022 11:30:58 +1100 Subject: [PATCH 78/92] Return per-row error messages when extracting data --- InvenTree/part/serializers.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index 490237eb34..38a2bd443f 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -868,6 +868,7 @@ class BomExtractSerializer(serializers.Serializer): """ rows = [] + errors = [] headers = self.dataset.headers @@ -875,6 +876,8 @@ class BomExtractSerializer(serializers.Serializer): for row in self.dataset.dict: + error = {} + """ If the "level" column is specified, and this is not a top-level BOM item, ignore the row! """ @@ -929,8 +932,15 @@ class BomExtractSerializer(serializers.Serializer): queryset = queryset.filter(IPN=part_ipn) # Only if we have a single direct match - if queryset.exists() and queryset.count() == 1: - part = queryset.first() + if queryset.exists(): + if queryset.count() == 1: + part = queryset.first() + else: + # Multiple matches! + error['part'] = _('Multiple matching parts found') + + if part is None and 'part' not in error: + error['part'] = _('No matching part found') row['part'] = part.pk if part is not None else None @@ -940,9 +950,11 @@ class BomExtractSerializer(serializers.Serializer): row[field_name] = self.find_matching_data(row, field_name, self.dataset.headers) rows.append(row) + errors.append(error) return { 'rows': rows, + 'errors': errors, 'headers': headers, 'filename': self.filename, } From 67a9c0aeec4f732c78e2ae87ae390d45020684bc Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 9 Feb 2022 11:31:36 +1100 Subject: [PATCH 79/92] PEP fixes --- InvenTree/part/serializers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index 38a2bd443f..308641085a 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -938,7 +938,7 @@ class BomExtractSerializer(serializers.Serializer): else: # Multiple matches! error['part'] = _('Multiple matching parts found') - + if part is None and 'part' not in error: error['part'] = _('No matching part found') @@ -948,7 +948,7 @@ class BomExtractSerializer(serializers.Serializer): for field_name in self.OPTIONAL_COLUMNS: if field_name not in row: row[field_name] = self.find_matching_data(row, field_name, self.dataset.headers) - + rows.append(row) errors.append(error) From 2af617e92bd005b650fd8a4efccce41434cec69f Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 9 Feb 2022 11:34:25 +1100 Subject: [PATCH 80/92] Adds check for duplicate parts when importing --- InvenTree/part/serializers.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index 308641085a..aef0c1ee0f 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -870,6 +870,8 @@ class BomExtractSerializer(serializers.Serializer): rows = [] errors = [] + found_parts = set() + headers = self.dataset.headers level_column = self.find_matching_column('level', headers) @@ -939,8 +941,14 @@ class BomExtractSerializer(serializers.Serializer): # Multiple matches! error['part'] = _('Multiple matching parts found') - if part is None and 'part' not in error: - error['part'] = _('No matching part found') + if part is None: + if 'part' not in error: + error['part'] = _('No matching part found') + else: + if part.pk in found_parts: + error['part'] = _('Duplicate part selected') + else: + found_parts.add(part.pk) row['part'] = part.pk if part is not None else None From 001437e083c6f7fe544777e1bf4a3edee8f3f2fb Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 9 Feb 2022 23:02:09 +1100 Subject: [PATCH 81/92] Increased error checking when uploading BOM data --- InvenTree/part/serializers.py | 35 +++++++++++++++++----- InvenTree/part/test_bom_import.py | 49 +++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 8 deletions(-) diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index aef0c1ee0f..2ec2c43707 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -878,7 +878,7 @@ class BomExtractSerializer(serializers.Serializer): for row in self.dataset.dict: - error = {} + row_error = {} """ If the "level" column is specified, and this is not a top-level BOM item, ignore the row! @@ -939,26 +939,45 @@ class BomExtractSerializer(serializers.Serializer): part = queryset.first() else: # Multiple matches! - error['part'] = _('Multiple matching parts found') + row_error['part'] = _('Multiple matching parts found') if part is None: - if 'part' not in error: - error['part'] = _('No matching part found') + if 'part' not in row_error: + row_error['part'] = _('No matching part found') else: if part.pk in found_parts: - error['part'] = _('Duplicate part selected') - else: - found_parts.add(part.pk) + row_error['part'] = _("Duplicate part selected") + + elif not part.component: + row_error['part'] = _('Part is not designated as a component') + + found_parts.add(part.pk) row['part'] = part.pk if part is not None else None + """ + Read out the 'quantity' column - check that it is valid + """ + quantity = self.find_matching_data(row, 'quantity', self.dataset.headers) + + if quantity is None: + row_error['quantity'] = _('Quantity not provided') + else: + try: + quantity = Decimal(quantity) + + if quantity <= 0: + row_error['quantity'] = _('Quantity must be greater than zero') + except: + row_error['quantity'] = _('Invalid quantity') + # For each "optional" column, ensure the column names are allocated correctly for field_name in self.OPTIONAL_COLUMNS: if field_name not in row: row[field_name] = self.find_matching_data(row, field_name, self.dataset.headers) rows.append(row) - errors.append(error) + errors.append(row_error) return { 'rows': rows, diff --git a/InvenTree/part/test_bom_import.py b/InvenTree/part/test_bom_import.py index 6bc5019c59..70ab3be5eb 100644 --- a/InvenTree/part/test_bom_import.py +++ b/InvenTree/part/test_bom_import.py @@ -29,8 +29,17 @@ class BomUploadTest(InvenTreeAPITestCase): name='Assembly', description='An assembled part', assembly=True, + component=False, ) + for i in range(10): + Part.objects.create( + name=f"Component {i}", + description="A subcomponent that can be used in a BOM", + component=True, + assembly=False, + ) + self.url = reverse('api-bom-extract') def post_bom(self, filename, file_data, part=None, clear_existing=None, expected_code=None, content_type='text/plain'): @@ -164,3 +173,43 @@ class BomUploadTest(InvenTreeAPITestCase): ) self.assertIn('No data rows found', str(response.data)) + + def test_invalid_data(self): + """ + Upload data which contains errors + """ + + dataset = tablib.Dataset() + + # Only these headers are strictly necessary + dataset.headers = ['part_id', 'quantity'] + + components = Part.objects.filter(component=True) + + for idx, cmp in enumerate(components): + + if idx == 5: + cmp.component = False + cmp.save() + + dataset.append([cmp.pk, idx]) + + # Add a duplicate part too + dataset.append([components.first().pk, 'invalid']) + + response = self.post_bom( + 'test.csv', + bytes(dataset.csv, 'utf8'), + content_type='text/csv', + expected_code=201 + ) + + errors = response.data['errors'] + + self.assertIn('Quantity must be greater than zero', str(errors[0])) + self.assertIn('Part is not designated as a component', str(errors[5])) + self.assertIn('Duplicate part selected', str(errors[-1])) + self.assertIn('Invalid quantity', str(errors[-1])) + + for idx, row in enumerate(response.data['rows'][:-1]): + self.assertEqual(str(row['part']), str(components[idx].pk)) From c0e940a898aa4809c48f1fdadbab30a7f96f0774 Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 9 Feb 2022 23:26:00 +1100 Subject: [PATCH 82/92] Catch potential error when posting invalid numbers via REST API --- InvenTree/InvenTree/serializers.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/InvenTree/InvenTree/serializers.py b/InvenTree/InvenTree/serializers.py index 59ba0295cb..ffc84a5f71 100644 --- a/InvenTree/InvenTree/serializers.py +++ b/InvenTree/InvenTree/serializers.py @@ -328,4 +328,7 @@ class InvenTreeDecimalField(serializers.FloatField): def to_internal_value(self, data): # Convert the value to a string, and then a decimal - return Decimal(str(data)) + try: + return Decimal(str(data)) + except: + raise serializers.ValidationError(_("Invalid value")) From aa962aac83b16b9710bfadce6178976cd8598d7c Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 9 Feb 2022 23:26:13 +1100 Subject: [PATCH 83/92] Improve part "guess" algorithm --- InvenTree/part/serializers.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index 2ec2c43707..c5f5216f38 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -924,13 +924,13 @@ class BomExtractSerializer(serializers.Serializer): if part is None: - if part_name is not None or part_ipn is not None: + if part_name or part_ipn: queryset = Part.objects.all() - if part_name is not None: + if part_name: queryset = queryset.filter(name=part_name) - if part_ipn is not None: + if part_ipn: queryset = queryset.filter(IPN=part_ipn) # Only if we have a single direct match From 383835aa8974df639c9f75944d9adc7d80f9a232 Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 9 Feb 2022 23:26:32 +1100 Subject: [PATCH 84/92] Display initial errors when importing data --- InvenTree/part/templates/part/upload_bom.html | 2 +- InvenTree/templates/js/translated/bom.js | 15 +++++++++++++++ InvenTree/templates/js/translated/forms.js | 6 +++--- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/InvenTree/part/templates/part/upload_bom.html b/InvenTree/part/templates/part/upload_bom.html index 27f681acae..07213069a6 100644 --- a/InvenTree/part/templates/part/upload_bom.html +++ b/InvenTree/part/templates/part/upload_bom.html @@ -43,7 +43,7 @@
- +
diff --git a/InvenTree/templates/js/translated/bom.js b/InvenTree/templates/js/translated/bom.js index fd23e70ad0..aeaa1d933d 100644 --- a/InvenTree/templates/js/translated/bom.js +++ b/InvenTree/templates/js/translated/bom.js @@ -40,6 +40,12 @@ function constructBomUploadTable(data, options={}) { function constructRow(row, idx, fields) { // Construct an individual row from the provided data + var errors = {}; + + if (data.errors && data.errors.length > idx) { + errors = data.errors[idx]; + } + var field_options = { hideLabels: true, hideClearButton: true, @@ -92,6 +98,15 @@ function constructBomUploadTable(data, options={}) { $('#bom-import-table tbody').append(html); + // Handle any errors raised by initial data import + if (errors.part) { + addFieldErrorMessage(`items_sub_part_${idx}`, errors.part); + } + + if (errors.quantity) { + addFieldErrorMessage(`items_quantity_${idx}`, errors.quantity); + } + // Initialize the "part" selector for this row initializeRelatedField( { diff --git a/InvenTree/templates/js/translated/forms.js b/InvenTree/templates/js/translated/forms.js index fe912b3358..394c18a568 100644 --- a/InvenTree/templates/js/translated/forms.js +++ b/InvenTree/templates/js/translated/forms.js @@ -1196,13 +1196,13 @@ function handleFormErrors(errors, fields={}, options={}) { /* * Add a rendered error message to the provided field */ -function addFieldErrorMessage(name, error_text, error_idx, options={}) { +function addFieldErrorMessage(name, error_text, error_idx=0, options={}) { field_name = getFieldName(name, options); var field_dom = null; - if (options.modal) { + if (options && options.modal) { $(options.modal).find(`#div_id_${field_name}`).addClass('form-field-error'); field_dom = $(options.modal).find(`#errors-${field_name}`); } else { @@ -1210,7 +1210,7 @@ function addFieldErrorMessage(name, error_text, error_idx, options={}) { field_dom = $(`#errors-${field_name}`); } - if (field_dom) { + if (field_dom.exists()) { var error_html = ` From d38a8adf4c1f44ec364f0733996e02f1546ea682 Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 9 Feb 2022 23:49:26 +1100 Subject: [PATCH 85/92] Add button to display original row data --- InvenTree/templates/js/translated/bom.js | 25 +++++++++++++++++++++- InvenTree/templates/js/translated/forms.js | 8 ++++++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/InvenTree/templates/js/translated/bom.js b/InvenTree/templates/js/translated/bom.js index aeaa1d933d..f1c749320f 100644 --- a/InvenTree/templates/js/translated/bom.js +++ b/InvenTree/templates/js/translated/bom.js @@ -78,7 +78,7 @@ function constructBomUploadTable(data, options={}) { var buttons = `
`; - // buttons += makeIconButton('fa-file-alt', 'button-row-data', idx, '{% trans "Display row data" %}'); + buttons += makeIconButton('fa-info-circle', 'button-row-data', idx, '{% trans "Display row data" %}'); buttons += makeIconButton('fa-times icon-red', 'button-row-remove', idx, '{% trans "Remove row" %}'); buttons += `
`; @@ -129,6 +129,29 @@ function constructBomUploadTable(data, options={}) { $(`#button-row-remove-${idx}`).click(function() { $(`#items_${idx}`).remove(); }); + + // Add callback for "show data" button + $(`#button-row-data-${idx}`).click(function() { + + var modal = createNewModal({ + title: '{% trans "Row Data" %}', + cancelText: '{% trans "Close" %}', + hideSubmitButton: true + }); + + // Prettify the original import data + var pretty = JSON.stringify(row, undefined, 4); + + var html = ` +
+
${pretty}
+
`; + + modalSetContent(modal, html); + + $(modal).modal('show'); + + }); } // Request API endpoint options diff --git a/InvenTree/templates/js/translated/forms.js b/InvenTree/templates/js/translated/forms.js index 394c18a568..a93ceb42c7 100644 --- a/InvenTree/templates/js/translated/forms.js +++ b/InvenTree/templates/js/translated/forms.js @@ -1953,7 +1953,13 @@ function constructField(name, parameters, options) { html += parameters.before; } - html += `
`; + var hover_title = ''; + + if (parameters.help_text) { + hover_title = ` title='${parameters.help_text}'`; + } + + html += `
`; // Add a label if (!options.hideLabels) { From ffb319e1360d27d2ac4e1bfa66d2f4d9c4861462 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 10 Feb 2022 00:00:23 +1100 Subject: [PATCH 86/92] Disable "submit" button to prevent multiple simultaneous uploads --- InvenTree/part/templates/part/upload_bom.html | 5 ++++- InvenTree/templates/js/translated/bom.js | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/InvenTree/part/templates/part/upload_bom.html b/InvenTree/part/templates/part/upload_bom.html index 07213069a6..57c7014197 100644 --- a/InvenTree/part/templates/part/upload_bom.html +++ b/InvenTree/part/templates/part/upload_bom.html @@ -22,8 +22,11 @@ + {% endblock %} diff --git a/InvenTree/templates/js/translated/bom.js b/InvenTree/templates/js/translated/bom.js index f1c749320f..0c70bd3d86 100644 --- a/InvenTree/templates/js/translated/bom.js +++ b/InvenTree/templates/js/translated/bom.js @@ -210,6 +210,10 @@ function submitBomTable(part_id, options={}) { getApiEndpointOptions(url, function(response) { var fields = response.actions.POST; + // Disable the "Submit BOM" button + $('#bom-submit').prop('disabled', true); + $('#bom-submit-icon').show(); + inventreePut(url, data, { method: 'POST', success: function(response) { @@ -224,6 +228,10 @@ function submitBomTable(part_id, options={}) { showApiError(xhr, url); break; } + + // Re-enable the submit button + $('#bom-submit').prop('disabled', false); + $('#bom-submit-icon').hide(); } }); }); From f460b14014203bcb51b1f97dd30c7091b60e687a Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 10 Feb 2022 00:13:37 +1100 Subject: [PATCH 87/92] Add more unit testing for BOM file upload - Test "levels" functionality - Test part guessing / introspection --- InvenTree/part/test_bom_import.py | 83 +++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/InvenTree/part/test_bom_import.py b/InvenTree/part/test_bom_import.py index 70ab3be5eb..ce622ed991 100644 --- a/InvenTree/part/test_bom_import.py +++ b/InvenTree/part/test_bom_import.py @@ -35,6 +35,7 @@ class BomUploadTest(InvenTreeAPITestCase): for i in range(10): Part.objects.create( name=f"Component {i}", + IPN=f"CMP_{i}", description="A subcomponent that can be used in a BOM", component=True, assembly=False, @@ -213,3 +214,85 @@ class BomUploadTest(InvenTreeAPITestCase): for idx, row in enumerate(response.data['rows'][:-1]): self.assertEqual(str(row['part']), str(components[idx].pk)) + + def test_part_guess(self): + """ + Test part 'guessing' when PK values are not supplied + """ + + dataset = tablib.Dataset() + + # Should be able to 'guess' the part from the name + dataset.headers = ['part_name', 'quantity'] + + components = Part.objects.filter(component=True) + + for idx, cmp in enumerate(components): + dataset.append([ + f"Component {idx}", + 10, + ]) + + response = self.post_bom( + 'test.csv', + bytes(dataset.csv, 'utf8'), + expected_code=201, + ) + + rows = response.data['rows'] + + self.assertEqual(len(rows), 10) + + for idx in range(10): + self.assertEqual(rows[idx]['part'], components[idx].pk) + + # Should also be able to 'guess' part by the IPN value + dataset = tablib.Dataset() + + dataset.headers = ['part_ipn', 'quantity'] + + for idx, cmp in enumerate(components): + dataset.append([ + f"CMP_{idx}", + 10, + ]) + + response = self.post_bom( + 'test.csv', + bytes(dataset.csv, 'utf8'), + expected_code=201, + ) + + rows = response.data['rows'] + + self.assertEqual(len(rows), 10) + + for idx in range(10): + self.assertEqual(rows[idx]['part'], components[idx].pk) + + def test_levels(self): + """ + Test that multi-level BOMs are correctly handled during upload + """ + + dataset = tablib.Dataset() + + dataset.headers = ['level', 'part', 'quantity'] + + components = Part.objects.filter(component=True) + + for idx, cmp in enumerate(components): + dataset.append([ + idx % 3, + cmp.pk, + 2, + ]) + + response = self.post_bom( + 'test.csv', + bytes(dataset.csv, 'utf8'), + expected_code=201, + ) + + # Only parts at index 1, 4, 7 should have been returned + self.assertEqual(len(response.data['rows']), 3) From 96af07436526394644a0f1aebd560bbf6dd6ace1 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 10 Feb 2022 00:46:26 +1100 Subject: [PATCH 88/92] Adds API endpoint to delete build outputs --- InvenTree/InvenTree/version.py | 5 +- InvenTree/build/api.py | 25 ++++ InvenTree/build/models.py | 2 +- InvenTree/build/serializers.py | 55 ++++++- InvenTree/build/templates/build/detail.html | 26 +++- InvenTree/templates/js/translated/build.js | 153 +++++++++++++++++++- 6 files changed, 253 insertions(+), 13 deletions(-) diff --git a/InvenTree/InvenTree/version.py b/InvenTree/InvenTree/version.py index 1f8e372d39..19235f0e0a 100644 --- a/InvenTree/InvenTree/version.py +++ b/InvenTree/InvenTree/version.py @@ -12,11 +12,14 @@ import common.models INVENTREE_SW_VERSION = "0.6.0 dev" # InvenTree API version -INVENTREE_API_VERSION = 23 +INVENTREE_API_VERSION = 24 """ Increment this API version number whenever there is a significant change to the API that any clients need to know about +v24 -> 2022-02-10 + - Adds API endpoint for deleting (cancelling) build order outputs + v23 -> 2022-02-02 - Adds API endpoints for managing plugin classes - Adds API endpoints for managing plugin settings diff --git a/InvenTree/build/api.py b/InvenTree/build/api.py index 733799f890..54204de845 100644 --- a/InvenTree/build/api.py +++ b/InvenTree/build/api.py @@ -245,6 +245,7 @@ class BuildOutputComplete(generics.CreateAPIView): ctx = super().get_serializer_context() ctx['request'] = self.request + ctx['to_complete'] = True try: ctx['build'] = Build.objects.get(pk=self.kwargs.get('pk', None)) @@ -254,6 +255,29 @@ class BuildOutputComplete(generics.CreateAPIView): return ctx +class BuildOutputDelete(generics.CreateAPIView): + """ + API endpoint for deleting multiple build outputs + """ + + queryset = Build.objects.none() + + serializer_class = build.serializers.BuildOutputDeleteSerializer + + def get_serializer_context(self): + ctx = super().get_serializer_context() + + ctx['request'] = self.request + + try: + ctx['build'] = Build.objects.get(pk=self.kwargs.get('pk', None)) + except: + pass + + return ctx + + + class BuildFinish(generics.CreateAPIView): """ API endpoint for marking a build as finished (completed) @@ -432,6 +456,7 @@ build_api_urls = [ url(r'^(?P\d+)/', include([ url(r'^allocate/', BuildAllocate.as_view(), name='api-build-allocate'), url(r'^complete/', BuildOutputComplete.as_view(), name='api-build-output-complete'), + url(r'^delete-outputs/', BuildOutputDelete.as_view(), name='api-build-output-delete'), url(r'^finish/', BuildFinish.as_view(), name='api-build-finish'), url(r'^unallocate/', BuildUnallocate.as_view(), name='api-build-unallocate'), url(r'^.*$', BuildDetail.as_view(), name='api-build-detail'), diff --git a/InvenTree/build/models.py b/InvenTree/build/models.py index 0eeffd107d..e5bb812083 100644 --- a/InvenTree/build/models.py +++ b/InvenTree/build/models.py @@ -708,7 +708,7 @@ class Build(MPTTModel, ReferenceIndexingMixin): self.save() @transaction.atomic - def deleteBuildOutput(self, output): + def delete_output(self, output): """ Remove a build output from the database: diff --git a/InvenTree/build/serializers.py b/InvenTree/build/serializers.py index 2508b02927..fe01844520 100644 --- a/InvenTree/build/serializers.py +++ b/InvenTree/build/serializers.py @@ -141,6 +141,9 @@ class BuildOutputSerializer(serializers.Serializer): build = self.context['build'] + # As this serializer can be used in multiple contexts, we need to work out why we are here + to_complete = self.context.get('to_complete', False) + # The stock item must point to the build if output.build != build: raise ValidationError(_("Build output does not match the parent build")) @@ -153,9 +156,11 @@ class BuildOutputSerializer(serializers.Serializer): if not output.is_building: raise ValidationError(_("This build output has already been completed")) - # The build output must have all tracked parts allocated - if not build.isFullyAllocated(output): - raise ValidationError(_("This build output is not fully allocated")) + if to_complete: + + # The build output must have all tracked parts allocated + if not build.isFullyAllocated(output): + raise ValidationError(_("This build output is not fully allocated")) return output @@ -165,6 +170,50 @@ class BuildOutputSerializer(serializers.Serializer): ] +class BuildOutputDeleteSerializer(serializers.Serializer): + """ + DRF serializer for deleting (cancelling) one or more build outputs + """ + + class Meta: + fields = [ + 'outputs', + ] + + outputs = BuildOutputSerializer( + many=True, + required=True, + ) + + def validate(self, data): + + data = super().validate(data) + + outputs = data.get('outputs', []) + + if len(outputs) == 0: + raise ValidationError(_("A list of build outputs must be provided")) + + return data + + def save(self): + """ + 'save' the serializer to delete the build outputs + """ + + data = self.validated_data + outputs = data.get('outputs', []) + + build = self.context['build'] + + with transaction.atomic(): + for item in outputs: + + output = item['output'] + + build.delete_output(output) + + class BuildOutputCompleteSerializer(serializers.Serializer): """ DRF serializer for completing one or more build outputs diff --git a/InvenTree/build/templates/build/detail.html b/InvenTree/build/templates/build/detail.html index b548632b56..ff335d139c 100644 --- a/InvenTree/build/templates/build/detail.html +++ b/InvenTree/build/templates/build/detail.html @@ -243,13 +243,16 @@ {% include "filter_list.html" with id='incompletebuilditems' %} @@ -372,6 +375,7 @@ inventreeGet( [ '#output-options', '#multi-output-complete', + '#multi-output-delete', ] ); @@ -393,6 +397,24 @@ inventreeGet( ); }); + $('#multi-output-delete').click(function() { + var outputs = $('#build-output-table').bootstrapTable('getSelections'); + + deleteBuildOutputs( + build_info.pk, + outputs, + { + success: function() { + // Reload the "in progress" table + $('#build-output-table').bootstrapTable('refresh'); + + // Reload the "completed" table + $('#build-stock-table').bootstrapTable('refresh'); + } + } + ) + }); + {% endif %} {% if build.active and build.has_untracked_bom_items %} diff --git a/InvenTree/templates/js/translated/build.js b/InvenTree/templates/js/translated/build.js index 3868ac1b09..7a5860d285 100644 --- a/InvenTree/templates/js/translated/build.js +++ b/InvenTree/templates/js/translated/build.js @@ -417,6 +417,145 @@ function completeBuildOutputs(build_id, outputs, options={}) { } + +/** + * Launch a modal form to delete selected build outputs + */ +function deleteBuildOutputs(build_id, outputs, options={}) { + + if (outputs.length == 0) { + showAlertDialog( + '{% trans "Select Build Outputs" %}', + '{% trans "At least one build output must be selected" %}', + ); + return; + } + + // Render a single build output (StockItem) + function renderBuildOutput(output, opts={}) { + var pk = output.pk; + + var output_html = imageHoverIcon(output.part_detail.thumbnail); + + if (output.quantity == 1 && output.serial) { + output_html += `{% trans "Serial Number" %}: ${output.serial}`; + } else { + output_html += `{% trans "Quantity" %}: ${output.quantity}`; + } + + var buttons = `
`; + + buttons += makeIconButton('fa-times icon-red', 'button-row-remove', pk, '{% trans "Remove row" %}'); + + buttons += '
'; + + var field = constructField( + `outputs_output_${pk}`, + { + type: 'raw', + html: output_html, + }, + { + hideLabels: true, + } + ); + + var html = ` +
+ + + + `; + + return html; + } + + // Construct table entries + var table_entries = ''; + + outputs.forEach(function(output) { + table_entries += renderBuildOutput(output); + }); + + var html = ` +
{% trans "Part" %}
${field}${output.part_detail.full_name}${buttons}
+ + + + + + ${table_entries} + +
{% trans "Output" %}
`; + + constructForm(`/api/build/${build_id}/delete-outputs/`, { + method: 'POST', + preFormContent: html, + fields: {}, + confirm: true, + title: '{% trans "Delete Build Outputs" %}', + afterRender: function(fields, opts) { + // Setup callbacks to remove outputs + $(opts.modal).find('.button-row-remove').click(function() { + var pk = $(this).attr('pk'); + + $(opts.modal).find(`#output_row_${pk}`).remove(); + }); + }, + onSubmit: function(fields, opts) { + var data = { + outputs: [], + }; + + var output_pk_values = []; + + outputs.forEach(function(output) { + var pk = output.pk; + + var row = $(opts.modal).find(`#output_row_${pk}`); + + if (row.exists()) { + data.outputs.push({ + output: pk + }); + output_pk_values.push(pk); + } + }); + + opts.nested = { + 'outputs': output_pk_values, + }; + + inventreePut( + opts.url, + data, + { + method: 'POST', + success: function(response) { + $(opts.modal).modal('hide'); + + if (options.success) { + options.success(response); + } + }, + error: function(xhr) { + switch (xhr.status) { + case 400: + handleFormErrors(xhr.responseJSON, fields, opts); + break; + default: + $(opts.modal).modal('hide'); + showApiError(xhr, opts.url); + break; + } + } + } + ) + } + }); +} + + /** * Load a table showing all the BuildOrder allocations for a given part */ @@ -604,15 +743,17 @@ function loadBuildOutputTable(build_info, options={}) { $(table).find('.button-output-delete').click(function() { var pk = $(this).attr('pk'); - // TODO: Move this to the API - launchModalForm( - `/build/${build_info.pk}/delete-output/`, + var output = $(table).bootstrapTable('getRowByUniqueId', pk); + + deleteBuildOutputs( + build_info.pk, + [ + output, + ], { - data: { - output: pk - }, success: function() { $(table).bootstrapTable('refresh'); + $('#build-stock-table').bootstrapTable('refresh'); } } ); From 0d7b94fbfa9f5638bd18dfc2f64b044afdd28032 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 10 Feb 2022 00:48:06 +1100 Subject: [PATCH 89/92] Remove old form code which is no longer used --- InvenTree/build/api.py | 1 - InvenTree/build/forms.py | 24 ------------- InvenTree/build/serializers.py | 2 +- InvenTree/build/urls.py | 1 - InvenTree/build/views.py | 62 ---------------------------------- 5 files changed, 1 insertion(+), 89 deletions(-) diff --git a/InvenTree/build/api.py b/InvenTree/build/api.py index 54204de845..57ffe88cf3 100644 --- a/InvenTree/build/api.py +++ b/InvenTree/build/api.py @@ -277,7 +277,6 @@ class BuildOutputDelete(generics.CreateAPIView): return ctx - class BuildFinish(generics.CreateAPIView): """ API endpoint for marking a build as finished (completed) diff --git a/InvenTree/build/forms.py b/InvenTree/build/forms.py index 43899ba819..d242586b3c 100644 --- a/InvenTree/build/forms.py +++ b/InvenTree/build/forms.py @@ -59,30 +59,6 @@ class BuildOutputCreateForm(HelperForm): ] -class BuildOutputDeleteForm(HelperForm): - """ - Form for deleting a build output. - """ - - confirm = forms.BooleanField( - required=False, - label=_('Confirm'), - help_text=_('Confirm deletion of build output') - ) - - output_id = forms.IntegerField( - required=True, - widget=forms.HiddenInput() - ) - - class Meta: - model = Build - fields = [ - 'confirm', - 'output_id', - ] - - class CancelBuildForm(HelperForm): """ Form for cancelling a build """ diff --git a/InvenTree/build/serializers.py b/InvenTree/build/serializers.py index fe01844520..efc4665d00 100644 --- a/InvenTree/build/serializers.py +++ b/InvenTree/build/serializers.py @@ -157,7 +157,7 @@ class BuildOutputSerializer(serializers.Serializer): raise ValidationError(_("This build output has already been completed")) if to_complete: - + # The build output must have all tracked parts allocated if not build.isFullyAllocated(output): raise ValidationError(_("This build output is not fully allocated")) diff --git a/InvenTree/build/urls.py b/InvenTree/build/urls.py index fecece232e..30a9470ee2 100644 --- a/InvenTree/build/urls.py +++ b/InvenTree/build/urls.py @@ -10,7 +10,6 @@ build_detail_urls = [ url(r'^cancel/', views.BuildCancel.as_view(), name='build-cancel'), url(r'^delete/', views.BuildDelete.as_view(), name='build-delete'), url(r'^create-output/', views.BuildOutputCreate.as_view(), name='build-output-create'), - url(r'^delete-output/', views.BuildOutputDelete.as_view(), name='build-output-delete'), url(r'^.*$', views.BuildDetail.as_view(), name='build-detail'), ] diff --git a/InvenTree/build/views.py b/InvenTree/build/views.py index 21cf5dda99..a8cf72f5a6 100644 --- a/InvenTree/build/views.py +++ b/InvenTree/build/views.py @@ -12,7 +12,6 @@ from django.forms import HiddenInput from .models import Build from . import forms -from stock.models import StockItem from InvenTree.views import AjaxUpdateView, AjaxDeleteView from InvenTree.views import InvenTreeRoleMixin @@ -192,67 +191,6 @@ class BuildOutputCreate(AjaxUpdateView): return form -class BuildOutputDelete(AjaxUpdateView): - """ - Delete a build output (StockItem) for a given build. - - Form is a simple confirmation dialog - """ - - model = Build - form_class = forms.BuildOutputDeleteForm - ajax_form_title = _('Delete Build Output') - - role_required = 'build.delete' - - def get_initial(self): - - initials = super().get_initial() - - output = self.get_param('output') - - initials['output_id'] = output - - return initials - - def validate(self, build, form, **kwargs): - - data = form.cleaned_data - - confirm = data.get('confirm', False) - - if not confirm: - form.add_error('confirm', _('Confirm unallocation of build stock')) - form.add_error(None, _('Check the confirmation box')) - - output_id = data.get('output_id', None) - output = None - - try: - output = StockItem.objects.get(pk=output_id) - except (ValueError, StockItem.DoesNotExist): - pass - - if output: - if not output.build == build: - form.add_error(None, _('Build output does not match build')) - else: - form.add_error(None, _('Build output must be specified')) - - def save(self, build, form, **kwargs): - - output_id = form.cleaned_data.get('output_id') - - output = StockItem.objects.get(pk=output_id) - - build.deleteBuildOutput(output) - - def get_data(self): - return { - 'danger': _('Build output deleted'), - } - - class BuildDetail(InvenTreeRoleMixin, DetailView): """ Detail view of a single Build object. From 71f9399760b7957259fa7712d00ea5020f308e4b Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 10 Feb 2022 00:50:21 +1100 Subject: [PATCH 90/92] Cleanup --- InvenTree/build/serializers.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/InvenTree/build/serializers.py b/InvenTree/build/serializers.py index efc4665d00..bc9d018cbe 100644 --- a/InvenTree/build/serializers.py +++ b/InvenTree/build/serializers.py @@ -208,9 +208,7 @@ class BuildOutputDeleteSerializer(serializers.Serializer): with transaction.atomic(): for item in outputs: - output = item['output'] - build.delete_output(output) From 6b52a07e71858742448d0269fabde4980c130baf Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 10 Feb 2022 00:53:38 +1100 Subject: [PATCH 91/92] js linting --- InvenTree/templates/js/translated/build.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/InvenTree/templates/js/translated/build.js b/InvenTree/templates/js/translated/build.js index 7a5860d285..5782218780 100644 --- a/InvenTree/templates/js/translated/build.js +++ b/InvenTree/templates/js/translated/build.js @@ -497,9 +497,9 @@ function deleteBuildOutputs(build_id, outputs, options={}) { afterRender: function(fields, opts) { // Setup callbacks to remove outputs $(opts.modal).find('.button-row-remove').click(function() { - var pk = $(this).attr('pk'); + var pk = $(this).attr('pk'); - $(opts.modal).find(`#output_row_${pk}`).remove(); + $(opts.modal).find(`#output_row_${pk}`).remove(); }); }, onSubmit: function(fields, opts) { @@ -550,7 +550,7 @@ function deleteBuildOutputs(build_id, outputs, options={}) { } } } - ) + ); } }); } From 9ad0b66ebc8351dd7fcc8fc1960316ad67baa42e Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 10 Feb 2022 13:13:51 +1100 Subject: [PATCH 92/92] Update base django version --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index b707e9821f..d172029296 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ # Please keep this list sorted -Django==3.2.11 # Django package +Django==3.2.12 # Django package certifi # Certifi is (most likely) installed through one of the requirements above coreapi==2.3.0 # API documentation coverage==5.3 # Unit test coverage