diff --git a/InvenTree/InvenTree/helpers.py b/InvenTree/InvenTree/helpers.py index 37a8bf82e1..6b76c7d41b 100644 --- a/InvenTree/InvenTree/helpers.py +++ b/InvenTree/InvenTree/helpers.py @@ -12,7 +12,7 @@ from decimal import Decimal from wsgiref.util import FileWrapper from django.http import StreamingHttpResponse -from django.core.exceptions import ValidationError +from django.core.exceptions import ValidationError, FieldError from django.utils.translation import ugettext as _ from django.contrib.auth.models import Permission @@ -414,7 +414,7 @@ def extract_serial_numbers(serials, expected_quantity): return numbers -def validateFilterString(value): +def validateFilterString(value, model=None): """ Validate that a provided filter string looks like a list of comma-separated key=value pairs @@ -464,6 +464,15 @@ def validateFilterString(value): results[k] = v + # If a model is provided, verify that the provided filters can be used against it + if model is not None: + try: + model.objects.filter(**results) + except FieldError as e: + raise ValidationError( + str(e), + ) + return results diff --git a/InvenTree/InvenTree/static/script/inventree/tables.js b/InvenTree/InvenTree/static/script/inventree/tables.js index 4d868f94b4..a40eb37285 100644 --- a/InvenTree/InvenTree/static/script/inventree/tables.js +++ b/InvenTree/InvenTree/static/script/inventree/tables.js @@ -154,7 +154,7 @@ $.fn.inventreeTable = function(options) { // Which columns are currently visible? var visible = table.bootstrapTable('getVisibleColumns'); - if (visible) { + if (visible && Array.isArray(visible)) { visible.forEach(function(column) { // Visible field should *not* be visible! (hide it!) diff --git a/InvenTree/InvenTree/urls.py b/InvenTree/InvenTree/urls.py index 79c662182e..d8a64708a9 100644 --- a/InvenTree/InvenTree/urls.py +++ b/InvenTree/InvenTree/urls.py @@ -28,6 +28,7 @@ from company.api import company_api_urls from stock.api import stock_api_urls from build.api import build_api_urls from order.api import order_api_urls +from label.api import label_api_urls from django.conf import settings from django.conf.urls.static import static @@ -58,6 +59,7 @@ apipatterns = [ url(r'^stock/', include(stock_api_urls)), url(r'^build/', include(build_api_urls)), url(r'^order/', include(order_api_urls)), + url(r'^label/', include(label_api_urls)), # User URLs url(r'^user/', include(user_urls)), @@ -90,6 +92,7 @@ settings_urls = [ # Some javascript files are served 'dynamically', allowing them to pass through the Django translation layer dynamic_javascript_urls = [ + url(r'^modals.js', DynamicJsView.as_view(template_name='js/modals.js'), name='modals.js'), url(r'^barcode.js', DynamicJsView.as_view(template_name='js/barcode.js'), name='barcode.js'), url(r'^bom.js', DynamicJsView.as_view(template_name='js/bom.js'), name='bom.js'), url(r'^build.js', DynamicJsView.as_view(template_name='js/build.js'), name='build.js'), @@ -97,6 +100,7 @@ dynamic_javascript_urls = [ url(r'^company.js', DynamicJsView.as_view(template_name='js/company.js'), name='company.js'), url(r'^order.js', DynamicJsView.as_view(template_name='js/order.js'), name='order.js'), url(r'^part.js', DynamicJsView.as_view(template_name='js/part.js'), name='part.js'), + url(r'^label.js', DynamicJsView.as_view(template_name='js/label.js'), name='label.js'), url(r'^stock.js', DynamicJsView.as_view(template_name='js/stock.js'), name='stock.js'), url(r'^table_filters.js', DynamicJsView.as_view(template_name='js/table_filters.js'), name='table_filters.js'), ] diff --git a/InvenTree/label/admin.py b/InvenTree/label/admin.py index 71399efabb..2e4967ffc2 100644 --- a/InvenTree/label/admin.py +++ b/InvenTree/label/admin.py @@ -3,12 +3,13 @@ from __future__ import unicode_literals from django.contrib import admin -from .models import StockItemLabel +from .models import StockItemLabel, StockLocationLabel -class StockItemLabelAdmin(admin.ModelAdmin): +class LabelAdmin(admin.ModelAdmin): list_display = ('name', 'description', 'label', 'filters', 'enabled') -admin.site.register(StockItemLabel, StockItemLabelAdmin) +admin.site.register(StockItemLabel, LabelAdmin) +admin.site.register(StockLocationLabel, LabelAdmin) diff --git a/InvenTree/label/api.py b/InvenTree/label/api.py new file mode 100644 index 0000000000..48ead2f443 --- /dev/null +++ b/InvenTree/label/api.py @@ -0,0 +1,375 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +import sys + +from django.utils.translation import ugettext as _ +from django.conf.urls import url, include + +from django_filters.rest_framework import DjangoFilterBackend + +from rest_framework import generics, filters +from rest_framework.response import Response + +import InvenTree.helpers + +from stock.models import StockItem, StockLocation + +from .models import StockItemLabel, StockLocationLabel +from .serializers import StockItemLabelSerializer, StockLocationLabelSerializer + + +class LabelListView(generics.ListAPIView): + """ + Generic API class for label templates + """ + + filter_backends = [ + DjangoFilterBackend, + filters.SearchFilter + ] + + filter_fields = [ + 'enabled', + ] + + search_fields = [ + 'name', + 'description', + ] + + +class StockItemLabelMixin: + """ + Mixin for extracting stock items from query params + """ + + def get_items(self): + """ + Return a list of requested stock items + """ + + items = [] + + params = self.request.query_params + + if 'items[]' in params: + items = params.getlist('items[]', []) + elif 'item' in params: + items = [params.get('item', None)] + + if type(items) not in [list, tuple]: + items = [items] + + valid_ids = [] + + for item in items: + try: + valid_ids.append(int(item)) + except (ValueError): + pass + + # List of StockItems which match provided values + valid_items = StockItem.objects.filter(pk__in=valid_ids) + + return valid_items + + +class StockItemLabelList(LabelListView, StockItemLabelMixin): + """ + API endpoint for viewing list of StockItemLabel objects. + + Filterable by: + + - enabled: Filter by enabled / disabled status + - item: Filter by single stock item + - items: Filter by list of stock items + + """ + + queryset = StockItemLabel.objects.all() + serializer_class = StockItemLabelSerializer + + def filter_queryset(self, queryset): + """ + Filter the StockItem label queryset. + """ + + queryset = super().filter_queryset(queryset) + + # List of StockItem objects to match against + items = self.get_items() + + # We wish to filter by stock items + if len(items) > 0: + """ + At this point, we are basically forced to be inefficient, + as we need to compare the 'filters' string of each label, + and see if it matches against each of the requested items. + + TODO: In the future, if this becomes excessively slow, it + will need to be readdressed. + """ + + # Keep track of which labels match every specified stockitem + valid_label_ids = set() + + for label in queryset.all(): + + matches = True + + # Filter string defined for the StockItemLabel object + filters = InvenTree.helpers.validateFilterString(label.filters) + + for item in items: + + item_query = StockItem.objects.filter(pk=item.pk) + + if not item_query.filter(**filters).exists(): + matches = False + break + + # Matched all items + if matches: + valid_label_ids.add(label.pk) + else: + continue + + # Reduce queryset to only valid matches + queryset = queryset.filter(pk__in=[pk for pk in valid_label_ids]) + + return queryset + + +class StockItemLabelDetail(generics.RetrieveUpdateDestroyAPIView): + """ + API endpoint for a single StockItemLabel object + """ + + queryset = StockItemLabel.objects.all() + serializer_class = StockItemLabelSerializer + + +class StockItemLabelPrint(generics.RetrieveAPIView, StockItemLabelMixin): + """ + API endpoint for printing a StockItemLabel object + """ + + queryset = StockItemLabel.objects.all() + serializer_class = StockItemLabelSerializer + + def get(self, request, *args, **kwargs): + """ + Check if valid stock item(s) have been provided. + """ + + items = self.get_items() + + if len(items) == 0: + # No valid items provided, return an error message + data = { + 'error': _('Must provide valid StockItem(s)'), + } + + return Response(data, status=400) + + label = self.get_object() + + try: + pdf = label.render(items) + except: + + e = sys.exc_info()[1] + + data = { + 'error': _('Error during label rendering'), + 'message': str(e), + } + + return Response(data, status=400) + + return InvenTree.helpers.DownloadFile( + pdf.getbuffer(), + 'stock_item_label.pdf', + content_type='application/pdf' + ) + + +class StockLocationLabelMixin: + """ + Mixin for extracting stock locations from query params + """ + + def get_locations(self): + """ + Return a list of requested stock locations + """ + + locations = [] + + params = self.request.query_params + + if 'locations[]' in params: + locations = params.getlist('locations[]', []) + elif 'location' in params: + locations = [params.get('location', None)] + + if type(locations) not in [list, tuple]: + locations = [locations] + + valid_ids = [] + + for loc in locations: + try: + valid_ids.append(int(loc)) + except (ValueError): + pass + + # List of StockLocation objects which match provided values + valid_locations = StockLocation.objects.filter(pk__in=valid_ids) + + return valid_locations + + +class StockLocationLabelList(LabelListView, StockLocationLabelMixin): + """ + API endpoint for viewiing list of StockLocationLabel objects. + + Filterable by: + + - enabled: Filter by enabled / disabled status + - location: Filter by a single stock location + - locations: Filter by list of stock locations + """ + + queryset = StockLocationLabel.objects.all() + serializer_class = StockLocationLabelSerializer + + def filter_queryset(self, queryset): + """ + Filter the StockLocationLabel queryset + """ + + queryset = super().filter_queryset(queryset) + + # List of StockLocation objects to match against + locations = self.get_locations() + + # We wish to filter by stock location(s) + if len(locations) > 0: + """ + At this point, we are basically forced to be inefficient, + as we need to compare the 'filters' string of each label, + and see if it matches against each of the requested items. + + TODO: In the future, if this becomes excessively slow, it + will need to be readdressed. + """ + + valid_label_ids = set() + + for label in queryset.all(): + + matches = True + + # Filter string defined for the StockLocationLabel object + filters = InvenTree.helpers.validateFilterString(label.filters) + + for loc in locations: + + loc_query = StockLocation.objects.filter(pk=loc.pk) + + if not loc_query.filter(**filters).exists(): + matches = False + break + + # Matched all items + if matches: + valid_label_ids.add(label.pk) + else: + continue + + # Reduce queryset to only valid matches + queryset = queryset.filter(pk__in=[pk for pk in valid_label_ids]) + + return queryset + + +class StockLocationLabelDetail(generics.RetrieveUpdateDestroyAPIView): + """ + API endpoint for a single StockLocationLabel object + """ + + queryset = StockLocationLabel.objects.all() + serializer_class = StockLocationLabelSerializer + + +class StockLocationLabelPrint(generics.RetrieveAPIView, StockLocationLabelMixin): + """ + API endpoint for printing a StockLocationLabel object + """ + + queryset = StockLocationLabel.objects.all() + seiralizers_class = StockLocationLabelSerializer + + def get(self, request, *args, **kwargs): + + locations = self.get_locations() + + if len(locations) == 0: + # No valid locations provided - return an error message + + return Response( + { + 'error': _('Must provide valid StockLocation(s)'), + }, + status=400, + ) + + label = self.get_object() + + try: + pdf = label.render(locations) + except: + e = sys.exc_info()[1] + + data = { + 'error': _('Error during label rendering'), + 'message': str(e), + } + + return Response(data, status=400) + + return InvenTree.helpers.DownloadFile( + pdf.getbuffer(), + 'stock_location_label.pdf', + content_type='application/pdf' + ) + + +label_api_urls = [ + + # Stock item labels + url(r'stock/', include([ + # Detail views + url(r'^(?P\d+)/', include([ + url(r'print/?', StockItemLabelPrint.as_view(), name='api-stockitem-label-print'), + url(r'^.*$', StockItemLabelDetail.as_view(), name='api-stockitem-label-detail'), + ])), + + # List view + url(r'^.*$', StockItemLabelList.as_view(), name='api-stockitem-label-list'), + ])), + + # Stock location labels + url(r'location/', include([ + # Detail views + url(r'^(?P\d+)/', include([ + url(r'print/?', StockLocationLabelPrint.as_view(), name='api-stocklocation-label-print'), + url(r'^.*$', StockLocationLabelDetail.as_view(), name='api-stocklocation-label-detail'), + ])), + + # List view + url(r'^.*$', StockLocationLabelList.as_view(), name='api-stocklocation-label-list'), + ])), +] diff --git a/InvenTree/label/apps.py b/InvenTree/label/apps.py index ea4fa152ff..321047a551 100644 --- a/InvenTree/label/apps.py +++ b/InvenTree/label/apps.py @@ -1,5 +1,168 @@ +import os +import shutil +import logging + from django.apps import AppConfig +from django.conf import settings + + +logger = logging.getLogger(__name__) class LabelConfig(AppConfig): name = 'label' + + def ready(self): + """ + This function is called whenever the label app is loaded + """ + + self.create_stock_item_labels() + self.create_stock_location_labels() + + def create_stock_item_labels(self): + """ + Create database entries for the default StockItemLabel templates, + if they do not already exist + """ + + try: + from .models import StockItemLabel + except: + # Database might not by ready yet + return + + src_dir = os.path.join( + os.path.dirname(os.path.realpath(__file__)), + 'templates', + 'stockitem', + ) + + dst_dir = os.path.join( + settings.MEDIA_ROOT, + 'label', + 'inventree', + 'stockitem', + ) + + if not os.path.exists(dst_dir): + logger.info(f"Creating missing directory: '{dst_dir}'") + os.makedirs(dst_dir, exist_ok=True) + + labels = [ + { + 'file': 'qr.html', + 'name': 'QR Code', + 'description': 'Simple QR code label', + }, + ] + + for label in labels: + + filename = os.path.join( + 'label', + 'inventree', + 'stockitem', + label['file'], + ) + + # Check if the file exists in the media directory + src_file = os.path.join(src_dir, label['file']) + dst_file = os.path.join(settings.MEDIA_ROOT, filename) + + if not os.path.exists(dst_file): + logger.info(f"Copying label template '{dst_file}'") + shutil.copyfile(src_file, dst_file) + + try: + # Check if a label matching the template already exists + if StockItemLabel.objects.filter(label=filename).exists(): + continue + + logger.info(f"Creating entry for StockItemLabel '{label['name']}'") + + StockItemLabel.objects.create( + name=label['name'], + description=label['description'], + label=filename, + filters='', + enabled=True + ) + except: + pass + + def create_stock_location_labels(self): + """ + Create database entries for the default StockItemLocation templates, + if they do not already exist + """ + + try: + from .models import StockLocationLabel + except: + # Database might not yet be ready + return + + src_dir = os.path.join( + os.path.dirname(os.path.realpath(__file__)), + 'templates', + 'stocklocation', + ) + + dst_dir = os.path.join( + settings.MEDIA_ROOT, + 'label', + 'inventree', + 'stocklocation', + ) + + if not os.path.exists(dst_dir): + logger.info(f"Creating missing directory: '{dst_dir}'") + os.makedirs(dst_dir, exist_ok=True) + + labels = [ + { + 'file': 'qr.html', + 'name': 'QR Code', + 'description': 'Simple QR code label', + }, + { + 'file': 'qr_and_text.html', + 'name': 'QR and text', + 'description': 'Label with QR code and name of location', + } + ] + + for label in labels: + + filename = os.path.join( + 'label', + 'inventree', + 'stocklocation', + label['file'], + ) + + # Check if the file exists in the media directory + src_file = os.path.join(src_dir, label['file']) + dst_file = os.path.join(settings.MEDIA_ROOT, filename) + + if not os.path.exists(dst_file): + logger.info(f"Copying label template '{dst_file}'") + shutil.copyfile(src_file, dst_file) + + try: + # Check if a label matching the template already exists + if StockLocationLabel.objects.filter(label=filename).exists(): + continue + + logger.info(f"Creating entry for StockLocationLabel '{label['name']}'") + + StockLocationLabel.objects.create( + name=label['name'], + description=label['description'], + label=filename, + filters='', + enabled=True + ) + except: + pass diff --git a/InvenTree/label/migrations/0003_stocklocationlabel.py b/InvenTree/label/migrations/0003_stocklocationlabel.py new file mode 100644 index 0000000000..d15fcfa396 --- /dev/null +++ b/InvenTree/label/migrations/0003_stocklocationlabel.py @@ -0,0 +1,30 @@ +# Generated by Django 3.0.7 on 2021-01-08 12:06 + +import InvenTree.helpers +import django.core.validators +from django.db import migrations, models +import label.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('label', '0002_stockitemlabel_enabled'), + ] + + operations = [ + migrations.CreateModel( + name='StockLocationLabel', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(help_text='Label name', max_length=100, unique=True)), + ('description', models.CharField(blank=True, help_text='Label description', max_length=250, null=True)), + ('label', models.FileField(help_text='Label template file', upload_to=label.models.rename_label, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html'])])), + ('filters', models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs', max_length=250, validators=[InvenTree.helpers.validateFilterString])), + ('enabled', models.BooleanField(default=True, help_text='Label template is enabled', verbose_name='Enabled')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/InvenTree/label/migrations/0004_auto_20210111_2302.py b/InvenTree/label/migrations/0004_auto_20210111_2302.py new file mode 100644 index 0000000000..5194a4bda1 --- /dev/null +++ b/InvenTree/label/migrations/0004_auto_20210111_2302.py @@ -0,0 +1,56 @@ +# Generated by Django 3.0.7 on 2021-01-11 12:02 + +import InvenTree.helpers +import django.core.validators +from django.db import migrations, models +import label.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('label', '0003_stocklocationlabel'), + ] + + operations = [ + migrations.AlterField( + model_name='stockitemlabel', + name='description', + field=models.CharField(blank=True, help_text='Label description', max_length=250, null=True, verbose_name='Description'), + ), + migrations.AlterField( + model_name='stockitemlabel', + name='filters', + field=models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs', max_length=250, validators=[InvenTree.helpers.validateFilterString], verbose_name='Filters'), + ), + migrations.AlterField( + model_name='stockitemlabel', + name='label', + field=models.FileField(help_text='Label template file', unique=True, upload_to=label.models.rename_label, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html'])], verbose_name='Label'), + ), + migrations.AlterField( + model_name='stockitemlabel', + name='name', + field=models.CharField(help_text='Label name', max_length=100, verbose_name='Name'), + ), + migrations.AlterField( + model_name='stocklocationlabel', + name='description', + field=models.CharField(blank=True, help_text='Label description', max_length=250, null=True, verbose_name='Description'), + ), + migrations.AlterField( + model_name='stocklocationlabel', + name='filters', + field=models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs', max_length=250, validators=[InvenTree.helpers.validateFilterString], verbose_name='Filters'), + ), + migrations.AlterField( + model_name='stocklocationlabel', + name='label', + field=models.FileField(help_text='Label template file', unique=True, upload_to=label.models.rename_label, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html'])], verbose_name='Label'), + ), + migrations.AlterField( + model_name='stocklocationlabel', + name='name', + field=models.CharField(help_text='Label name', max_length=100, verbose_name='Name'), + ), + ] diff --git a/InvenTree/label/migrations/0005_auto_20210113_2302.py b/InvenTree/label/migrations/0005_auto_20210113_2302.py new file mode 100644 index 0000000000..ad256412ac --- /dev/null +++ b/InvenTree/label/migrations/0005_auto_20210113_2302.py @@ -0,0 +1,24 @@ +# Generated by Django 3.0.7 on 2021-01-13 12:02 + +from django.db import migrations, models +import label.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('label', '0004_auto_20210111_2302'), + ] + + operations = [ + migrations.AlterField( + model_name='stockitemlabel', + name='filters', + field=models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs', max_length=250, validators=[label.models.validate_stock_item_filters], verbose_name='Filters'), + ), + migrations.AlterField( + model_name='stocklocationlabel', + name='filters', + field=models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs', max_length=250, validators=[label.models.validate_stock_location_filters], verbose_name='Filters'), + ), + ] diff --git a/InvenTree/label/models.py b/InvenTree/label/models.py index 49b07572a8..a34aa3831d 100644 --- a/InvenTree/label/models.py +++ b/InvenTree/label/models.py @@ -17,7 +17,7 @@ from django.utils.translation import gettext_lazy as _ from InvenTree.helpers import validateFilterString, normalize -from stock.models import StockItem +import stock.models def rename_label(instance, filename): @@ -28,6 +28,20 @@ def rename_label(instance, filename): return os.path.join('label', 'template', instance.SUBDIR, filename) +def validate_stock_item_filters(filters): + + filters = validateFilterString(filters, model=stock.models.StockItem) + + return filters + + +def validate_stock_location_filters(filters): + + filters = validateFilterString(filters, model=stock.models.StockLocation) + + return filters + + class LabelTemplate(models.Model): """ Base class for generic, filterable labels. @@ -50,30 +64,31 @@ class LabelTemplate(models.Model): ) name = models.CharField( - unique=True, blank=False, max_length=100, + verbose_name=_('Name'), help_text=_('Label name'), ) - description = models.CharField(max_length=250, help_text=_('Label description'), blank=True, null=True) + description = models.CharField( + max_length=250, + blank=True, null=True, + verbose_name=_('Description'), + help_text=_('Label description'), + ) label = models.FileField( upload_to=rename_label, + unique=True, blank=False, null=False, + verbose_name=_('Label'), help_text=_('Label template file'), validators=[FileExtensionValidator(allowed_extensions=['html'])], ) - filters = models.CharField( - blank=True, max_length=250, - help_text=_('Query filters (comma-separated list of key=value pairs'), - validators=[validateFilterString] - ) - enabled = models.BooleanField( default=True, + verbose_name=_('Enabled'), help_text=_('Label template is enabled'), - verbose_name=_('Enabled') ) def get_record_data(self, items): @@ -117,6 +132,14 @@ class StockItemLabel(LabelTemplate): SUBDIR = "stockitem" + filters = models.CharField( + blank=True, max_length=250, + help_text=_('Query filters (comma-separated list of key=value pairs'), + verbose_name=_('Filters'), + validators=[ + validate_stock_item_filters] + ) + def matches_stock_item(self, item): """ Test if this label template matches a given StockItem object @@ -124,7 +147,7 @@ class StockItemLabel(LabelTemplate): filters = validateFilterString(self.filters) - items = StockItem.objects.filter(**filters) + items = stock.models.StockItem.objects.filter(**filters) items = items.filter(pk=item.pk) @@ -153,3 +176,47 @@ class StockItemLabel(LabelTemplate): }) return records + + +class StockLocationLabel(LabelTemplate): + """ + Template for printing StockLocation labels + """ + + SUBDIR = "stocklocation" + + filters = models.CharField( + blank=True, max_length=250, + help_text=_('Query filters (comma-separated list of key=value pairs'), + verbose_name=_('Filters'), + validators=[ + validate_stock_location_filters] + ) + + def matches_stock_location(self, location): + """ + Test if this label template matches a given StockLocation object + """ + + filters = validateFilterString(self.filters) + + locs = stock.models.StockLocation.objects.filter(**filters) + + locs = locs.filter(pk=location.pk) + + return locs.exists() + + def get_record_data(self, locations): + """ + Generate context data for each provided StockLocation + """ + + records = [] + + for loc in locations: + + records.append({ + 'location': loc, + }) + + return records diff --git a/InvenTree/label/serializers.py b/InvenTree/label/serializers.py new file mode 100644 index 0000000000..c9d487af23 --- /dev/null +++ b/InvenTree/label/serializers.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from InvenTree.serializers import InvenTreeModelSerializer +from InvenTree.serializers import InvenTreeAttachmentSerializerField + +from .models import StockItemLabel, StockLocationLabel + + +class StockItemLabelSerializer(InvenTreeModelSerializer): + """ + Serializes a StockItemLabel object. + """ + + label = InvenTreeAttachmentSerializerField(required=True) + + class Meta: + model = StockItemLabel + fields = [ + 'pk', + 'name', + 'description', + 'label', + 'filters', + 'enabled', + ] + + +class StockLocationLabelSerializer(InvenTreeModelSerializer): + """ + Serializes a StockLocationLabel object + """ + + label = InvenTreeAttachmentSerializerField(required=True) + + class Meta: + model = StockLocationLabel + fields = [ + 'pk', + 'name', + 'description', + 'label', + 'filters', + 'enabled', + ] diff --git a/InvenTree/label/templates/stockitem/qr.html b/InvenTree/label/templates/stockitem/qr.html new file mode 100644 index 0000000000..9cd9d20769 --- /dev/null +++ b/InvenTree/label/templates/stockitem/qr.html @@ -0,0 +1,16 @@ + + + diff --git a/InvenTree/label/templates/stocklocation/qr.html b/InvenTree/label/templates/stocklocation/qr.html new file mode 100644 index 0000000000..8fb22fbb40 --- /dev/null +++ b/InvenTree/label/templates/stocklocation/qr.html @@ -0,0 +1,16 @@ + + + diff --git a/InvenTree/label/templates/stocklocation/qr_and_text.html b/InvenTree/label/templates/stocklocation/qr_and_text.html new file mode 100644 index 0000000000..9a555aca15 --- /dev/null +++ b/InvenTree/label/templates/stocklocation/qr_and_text.html @@ -0,0 +1,43 @@ + + + + +
+ {{ location.name }} +
+
+
+ Location ID: {{ location.pk }} +
+ + \ No newline at end of file diff --git a/InvenTree/label/tests.py b/InvenTree/label/tests.py index a39b155ac3..dcb051c929 100644 --- a/InvenTree/label/tests.py +++ b/InvenTree/label/tests.py @@ -1 +1,76 @@ -# Create your tests here. +# Tests for Part Parameters + +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +import os + +from django.test import TestCase +from django.conf import settings +from django.core.exceptions import ValidationError + +from InvenTree.helpers import validateFilterString + +from .models import StockItemLabel, StockLocationLabel +from stock.models import StockItem + + +class LabelTest(TestCase): + + # TODO - Implement this test properly. Looks like apps.py is not run first + def _test_default_labels(self): + """ + Test that the default label templates are copied across + """ + + labels = StockItemLabel.objects.all() + + self.assertTrue(labels.count() > 0) + + labels = StockLocationLabel.objects.all() + + self.assertTrue(labels.count() > 0) + + # TODO - Implement this test properly. Looks like apps.py is not run first + def _test_default_files(self): + """ + Test that label files exist in the MEDIA directory + """ + + item_dir = os.path.join( + settings.MEDIA_ROOT, + 'label', + 'inventree', + 'stockitem', + ) + + files = os.listdir(item_dir) + + self.assertTrue(len(files) > 0) + + loc_dir = os.path.join( + settings.MEDIA_ROOT, + 'label', + 'inventree', + 'stocklocation', + ) + + files = os.listdir(loc_dir) + + self.assertTrue(len(files) > 0) + + def test_filters(self): + """ + Test the label filters + """ + + filter_string = "part__pk=10" + + filters = validateFilterString(filter_string, model=StockItem) + + self.assertEqual(type(filters), dict) + + bad_filter_string = "part_pk=10" + + with self.assertRaises(ValidationError): + validateFilterString(bad_filter_string, model=StockItem) diff --git a/InvenTree/locale/de/LC_MESSAGES/django.mo b/InvenTree/locale/de/LC_MESSAGES/django.mo index 71cbdf3e9d..b2a1691aac 100644 Binary files a/InvenTree/locale/de/LC_MESSAGES/django.mo and b/InvenTree/locale/de/LC_MESSAGES/django.mo differ diff --git a/InvenTree/locale/de/LC_MESSAGES/django.po b/InvenTree/locale/de/LC_MESSAGES/django.po index 7ddbe1b10f..aa858ebd81 100644 --- a/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/InvenTree/locale/de/LC_MESSAGES/django.po @@ -1,46 +1,51 @@ -# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. # -#, fuzzy +# Christian Schlüter , 2020. msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-14 13:51+0000\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"POT-Creation-Date: 2021-01-17 18:11+0000\n" +"PO-Revision-Date: 2020-05-03 11:32+0200\n" +"Last-Translator: Christian Schlüter \n" +"Language-Team: C \n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Lokalize 19.12.0\n" #: InvenTree/api.py:90 msgid "No action specified" -msgstr "" +msgstr "Keine Aktion angegeben" #: InvenTree/api.py:104 msgid "No matching action found" -msgstr "" +msgstr "Keine passende Aktion gefunden" #: InvenTree/fields.py:44 +#, fuzzy +#| msgid "Entry notes" msgid "Enter date" -msgstr "" +msgstr "Eintrags-Notizen" #: InvenTree/forms.py:110 build/forms.py:90 build/forms.py:178 msgid "Confirm" -msgstr "" +msgstr "Bestätigen" #: InvenTree/forms.py:126 +#, fuzzy +#| msgid "Confim BOM item deletion" msgid "Confirm item deletion" -msgstr "" +msgstr "Löschung von BOM-Position bestätigen" #: InvenTree/forms.py:158 +#, fuzzy +#| msgid "Create new part" msgid "Enter new password" -msgstr "" +msgstr "Neues Teil anlegen" #: InvenTree/forms.py:165 msgid "Confirm new password" @@ -51,143 +56,154 @@ msgid "Apply Theme" msgstr "" #: InvenTree/forms.py:230 +#, fuzzy +#| msgid "Set Part Category" msgid "Select Category" -msgstr "" +msgstr "Teilkategorie auswählen" #: InvenTree/helpers.py:361 order/models.py:232 order/models.py:330 -#: stock/views.py:1952 +#: stock/views.py:1865 msgid "Invalid quantity provided" -msgstr "" +msgstr "Keine gültige Menge" #: InvenTree/helpers.py:364 msgid "Empty serial number string" -msgstr "" +msgstr "Keine Seriennummer angegeben" #: InvenTree/helpers.py:385 #, python-brace-format msgid "Duplicate serial: {n}" -msgstr "" +msgstr "Doppelte Seriennummer: {n}" #: InvenTree/helpers.py:389 InvenTree/helpers.py:392 InvenTree/helpers.py:395 #, python-brace-format msgid "Invalid group: {g}" -msgstr "" +msgstr "Ungültige Gruppe: {g}" #: InvenTree/helpers.py:400 -#, python-brace-format +#, fuzzy, python-brace-format +#| msgid "Duplicate serial: {n}" msgid "Duplicate serial: {g}" -msgstr "" +msgstr "Doppelte Seriennummer: {n}" #: InvenTree/helpers.py:408 msgid "No serial numbers found" -msgstr "" +msgstr "Keine Seriennummern gefunden" #: InvenTree/helpers.py:412 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" +"Anzahl der eindeutigen Seriennummern ({s}) muss mit der Anzahl ({q}) " +"übereinstimmen" #: InvenTree/models.py:60 msgid "Select file to attach" -msgstr "" +msgstr "Datei zum Anhängen auswählen" #: InvenTree/models.py:62 msgid "File comment" -msgstr "" +msgstr "Datei-Kommentar" -#: InvenTree/models.py:68 templates/js/stock.js:861 +#: InvenTree/models.py:68 templates/js/stock.js:878 msgid "User" -msgstr "" +msgstr "Benutzer" -#: InvenTree/models.py:106 part/models.py:647 +#: InvenTree/models.py:106 label/models.py:68 part/models.py:647 #: part/templates/part/params.html:24 templates/js/part.js:129 msgid "Name" -msgstr "" +msgstr "Name" #: InvenTree/models.py:112 +#, fuzzy +#| msgid "Description of the company" msgid "Description (optional)" -msgstr "" +msgstr "Firmenbeschreibung" #: InvenTree/settings.py:439 msgid "English" -msgstr "" +msgstr "Englisch" #: InvenTree/settings.py:440 msgid "German" -msgstr "" +msgstr "Deutsch" #: InvenTree/settings.py:441 msgid "French" -msgstr "" +msgstr "Französisch" #: InvenTree/settings.py:442 msgid "Polish" -msgstr "" +msgstr "Polnisch" #: InvenTree/status.py:24 msgid "Celery worker check failed" msgstr "" #: InvenTree/status.py:27 +#, fuzzy +#| msgid "Instance Name" msgid "InvenTree system health checks failed" -msgstr "" +msgstr "Instanzname" #: InvenTree/status_codes.py:94 InvenTree/status_codes.py:135 #: InvenTree/status_codes.py:228 msgid "Pending" -msgstr "" +msgstr "Ausstehend" #: InvenTree/status_codes.py:95 msgid "Placed" -msgstr "" +msgstr "Platziert" #: InvenTree/status_codes.py:96 InvenTree/status_codes.py:231 msgid "Complete" -msgstr "" +msgstr "Fertig" #: InvenTree/status_codes.py:97 InvenTree/status_codes.py:137 #: InvenTree/status_codes.py:230 msgid "Cancelled" -msgstr "" +msgstr "Storniert" #: InvenTree/status_codes.py:98 InvenTree/status_codes.py:138 #: InvenTree/status_codes.py:180 msgid "Lost" -msgstr "" +msgstr "Verloren" #: InvenTree/status_codes.py:99 InvenTree/status_codes.py:139 #: InvenTree/status_codes.py:182 msgid "Returned" -msgstr "" +msgstr "Zurückgegeben" #: InvenTree/status_codes.py:136 #: order/templates/order/sales_order_base.html:121 msgid "Shipped" -msgstr "" +msgstr "Versendet" #: InvenTree/status_codes.py:176 msgid "OK" -msgstr "" +msgstr "OK" #: InvenTree/status_codes.py:177 msgid "Attention needed" -msgstr "" +msgstr "erfordert Eingriff" #: InvenTree/status_codes.py:178 msgid "Damaged" -msgstr "" +msgstr "Beschädigt" #: InvenTree/status_codes.py:179 msgid "Destroyed" -msgstr "" +msgstr "Zerstört" #: InvenTree/status_codes.py:181 msgid "Rejected" msgstr "" #: InvenTree/status_codes.py:229 +#, fuzzy +#| msgid "Location" msgid "Production" -msgstr "" +msgstr "Standort" #: InvenTree/validators.py:22 msgid "Not a valid currency code" @@ -195,57 +211,69 @@ msgstr "" #: InvenTree/validators.py:50 msgid "Invalid character in part name" -msgstr "" +msgstr "Ungültiger Buchstabe im Teilenamen" #: InvenTree/validators.py:63 msgid "IPN must match regex pattern" -msgstr "" +msgstr "IPN muss zu Regex-Muster passen" #: InvenTree/validators.py:77 InvenTree/validators.py:91 #: InvenTree/validators.py:105 +#, fuzzy +#| msgid "IPN must match regex pattern" msgid "Reference must match pattern" -msgstr "" +msgstr "IPN muss zu Regex-Muster passen" #: InvenTree/validators.py:113 #, python-brace-format msgid "Illegal character in name ({x})" -msgstr "" +msgstr "Ungültiges Zeichen im Namen ({x})" #: InvenTree/validators.py:132 InvenTree/validators.py:148 msgid "Overage value must not be negative" -msgstr "" +msgstr "Überschuss-Wert darf nicht negativ sein" #: InvenTree/validators.py:150 msgid "Overage must not exceed 100%" -msgstr "" +msgstr "Überschuss darf 100% nicht überschreiten" #: InvenTree/validators.py:157 msgid "Overage must be an integer value or a percentage" -msgstr "" +msgstr "Überschuss muss eine Ganzzahl oder ein Prozentwert sein" #: InvenTree/views.py:495 +#, fuzzy +#| msgid "Delete BOM Item" msgid "Delete Item" -msgstr "" +msgstr "BOM-Position löschen" #: InvenTree/views.py:544 +#, fuzzy +#| msgid "Confim BOM item deletion" msgid "Check box to confirm item deletion" -msgstr "" +msgstr "Löschung von BOM-Position bestätigen" #: InvenTree/views.py:559 templates/InvenTree/settings/user.html:18 +#, fuzzy +#| msgid "No user information" msgid "Edit User Information" -msgstr "" +msgstr "Keine Benutzerinformation" #: InvenTree/views.py:570 templates/InvenTree/settings/user.html:22 +#, fuzzy +#| msgid "Select part" msgid "Set Password" -msgstr "" +msgstr "Teil auswählen" #: InvenTree/views.py:589 msgid "Password fields must match" msgstr "" #: InvenTree/views.py:795 templates/navbar.html:78 +#, fuzzy +#| msgid "No user information" msgid "System Information" -msgstr "" +msgstr "Keine Benutzerinformation" #: barcode/api.py:53 barcode/api.py:150 msgid "Must provide barcode_data parameter" @@ -264,8 +292,10 @@ msgid "Must provide stockitem parameter" msgstr "" #: barcode/api.py:160 +#, fuzzy +#| msgid "No matching action found" msgid "No matching stock item found" -msgstr "" +msgstr "Keine passende Aktion gefunden" #: barcode/api.py:190 msgid "Barcode already matches StockItem object" @@ -284,16 +314,22 @@ msgid "Barcode hash already matches StockItem object" msgstr "" #: barcode/api.py:222 +#, fuzzy +#| msgid "Create new Stock Item" msgid "Barcode associated with StockItem" -msgstr "" +msgstr "Neues Lagerobjekt hinzufügen" #: build/forms.py:34 +#, fuzzy +#| msgid "Order reference" msgid "Build Order reference" -msgstr "" +msgstr "Bestell-Referenz" #: build/forms.py:35 +#, fuzzy +#| msgid "No destination set" msgid "Order target date" -msgstr "" +msgstr "Kein Ziel gesetzt" #: build/forms.py:39 build/models.py:206 msgid "" @@ -315,89 +351,111 @@ msgstr "" #: stock/templates/stock/item_base.html:57 #: stock/templates/stock/item_base.html:234 #: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:338 -#: templates/js/bom.js:195 templates/js/build.js:420 templates/js/stock.js:852 -#: templates/js/stock.js:1091 +#: templates/js/bom.js:195 templates/js/build.js:420 templates/js/stock.js:869 +#: templates/js/stock.js:1108 msgid "Quantity" -msgstr "" +msgstr "Anzahl" #: build/forms.py:79 +#, fuzzy +#| msgid "Serial number for this item" msgid "Enter quantity for build output" -msgstr "" +msgstr "Seriennummer für dieses Teil" #: build/forms.py:83 stock/forms.py:117 +#, fuzzy +#| msgid "Serial Number" msgid "Serial numbers" -msgstr "" +msgstr "Seriennummer" #: build/forms.py:85 +#, fuzzy +#| msgid "Serial number for this item" msgid "Enter serial numbers for build outputs" -msgstr "" +msgstr "Seriennummer für dieses Teil" #: build/forms.py:91 +#, fuzzy +#| msgid "Confirm completion of build" msgid "Confirm creation of build outut" -msgstr "" +msgstr "Baufertigstellung bestätigen" #: build/forms.py:111 +#, fuzzy +#| msgid "Confirm completion of build" msgid "Confirm deletion of build output" -msgstr "" +msgstr "Baufertigstellung bestätigen" #: build/forms.py:132 +#, fuzzy +#| msgid "Confirm unallocation of build stock" msgid "Confirm unallocation of stock" -msgstr "" +msgstr "Zuweisungsaufhebung bestätigen" #: build/forms.py:156 msgid "Confirm stock allocation" -msgstr "" +msgstr "Lagerbestandszuordnung bestätigen" #: build/forms.py:179 +#, fuzzy +#| msgid "Mark order as complete" msgid "Mark build as complete" -msgstr "" +msgstr "Bestellung als vollständig markieren" #: build/forms.py:203 +#, fuzzy +#| msgid "Location Details" msgid "Location of completed parts" -msgstr "" +msgstr "Standort-Details" #: build/forms.py:208 +#, fuzzy +#| msgid "Confirm stock allocation" msgid "Confirm completion with incomplete stock allocation" -msgstr "" +msgstr "Lagerbestandszuordnung bestätigen" #: build/forms.py:211 msgid "Confirm build completion" -msgstr "" +msgstr "Bau-Fertigstellung bestätigen" #: build/forms.py:231 build/views.py:68 msgid "Confirm build cancellation" -msgstr "" +msgstr "Bauabbruch bestätigen" #: build/forms.py:245 +#, fuzzy +#| msgid "Select stock item to allocate" msgid "Select quantity of stock to allocate" -msgstr "" +msgstr "Lagerobjekt für Zuordnung auswählen" #: build/models.py:61 build/templates/build/build_base.html:8 #: build/templates/build/build_base.html:35 #: part/templates/part/allocation.html:20 msgid "Build Order" -msgstr "" +msgstr "Bauauftrag" #: build/models.py:62 build/templates/build/index.html:8 #: build/templates/build/index.html:15 order/templates/order/so_builds.html:11 #: order/templates/order/so_tabs.html:9 part/templates/part/tabs.html:31 #: templates/InvenTree/settings/tabs.html:28 users/models.py:36 msgid "Build Orders" -msgstr "" +msgstr "Bauaufträge" #: build/models.py:108 +#, fuzzy +#| msgid "Order Reference" msgid "Build Order Reference" -msgstr "" +msgstr "Bestellreferenz" #: build/models.py:109 order/templates/order/purchase_order_detail.html:174 #: templates/js/bom.js:187 templates/js/build.js:509 msgid "Reference" -msgstr "" +msgstr "Referenz" #: build/models.py:116 build/templates/build/detail.html:19 #: company/models.py:359 company/templates/company/detail.html:23 #: company/templates/company/supplier_part_base.html:61 -#: company/templates/company/supplier_part_detail.html:27 +#: company/templates/company/supplier_part_detail.html:27 label/models.py:75 #: order/templates/order/purchase_order_detail.html:161 part/models.py:671 #: part/templates/part/detail.html:51 part/templates/part/set_category.html:14 #: templates/InvenTree/search.html:147 @@ -405,22 +463,24 @@ msgstr "" #: templates/js/bom.js:549 templates/js/build.js:664 templates/js/company.js:56 #: templates/js/order.js:180 templates/js/order.js:274 templates/js/part.js:188 #: templates/js/part.js:271 templates/js/part.js:391 templates/js/part.js:572 -#: templates/js/stock.js:511 templates/js/stock.js:833 +#: templates/js/stock.js:511 templates/js/stock.js:850 msgid "Description" -msgstr "" +msgstr "Beschreibung" #: build/models.py:119 msgid "Brief description of the build" -msgstr "" +msgstr "Kurze Beschreibung des Baus" #: build/models.py:128 build/templates/build/build_base.html:113 #: build/templates/build/detail.html:75 msgid "Parent Build" -msgstr "" +msgstr "Eltern-Bau" #: build/models.py:129 +#, fuzzy +#| msgid "SalesOrder to which this build is allocated" msgid "BuildOrder to which this build is allocated" -msgstr "" +msgstr "Bestellung, die diesem Bau zugwiesen ist" #: build/models.py:134 build/templates/build/auto_allocate.html:16 #: build/templates/build/build_base.html:78 @@ -433,35 +493,39 @@ msgstr "" #: templates/js/barcode.js:336 templates/js/bom.js:153 templates/js/bom.js:534 #: templates/js/build.js:669 templates/js/company.js:138 #: templates/js/part.js:252 templates/js/part.js:357 templates/js/stock.js:485 -#: templates/js/stock.js:1163 +#: templates/js/stock.js:1180 msgid "Part" -msgstr "" +msgstr "Teil" #: build/models.py:142 msgid "Select part to build" -msgstr "" +msgstr "Teil für den Bau wählen" #: build/models.py:147 msgid "Sales Order Reference" -msgstr "" +msgstr "Bestellungsreferenz" #: build/models.py:151 msgid "SalesOrder to which this build is allocated" -msgstr "" +msgstr "Bestellung, die diesem Bau zugwiesen ist" #: build/models.py:156 msgid "Source Location" -msgstr "" +msgstr "Quell-Standort" #: build/models.py:160 msgid "" "Select location to take stock from for this build (leave blank to take from " "any stock location)" msgstr "" +"Lager-Entnahmestandort für diesen Bau wählen (oder leer lassen für einen " +"beliebigen Lager-Standort)" #: build/models.py:165 +#, fuzzy +#| msgid "Destination stock location" msgid "Destination Location" -msgstr "" +msgstr "Ziel-Lagerbestand" #: build/models.py:169 msgid "Select location where the completed items will be stored" @@ -469,35 +533,41 @@ msgstr "" #: build/models.py:173 msgid "Build Quantity" -msgstr "" +msgstr "Bau-Anzahl" #: build/models.py:176 +#, fuzzy +#| msgid "Number of parts to build" msgid "Number of stock items to build" -msgstr "" +msgstr "Anzahl der zu bauenden Teile" #: build/models.py:180 +#, fuzzy +#| msgid "Completed" msgid "Completed items" -msgstr "" +msgstr "Fertig" #: build/models.py:182 +#, fuzzy +#| msgid "Delete this Stock Item when stock is depleted" msgid "Number of stock items which have been completed" -msgstr "" +msgstr "Objekt löschen wenn Lagerbestand aufgebraucht" #: build/models.py:186 part/templates/part/part_base.html:155 msgid "Build Status" -msgstr "" +msgstr "Bau-Status" #: build/models.py:190 msgid "Build status code" -msgstr "" +msgstr "Bau-Statuscode" -#: build/models.py:194 stock/models.py:403 +#: build/models.py:194 stock/models.py:418 msgid "Batch Code" -msgstr "" +msgstr "Losnummer" #: build/models.py:198 msgid "Batch code for this build output" -msgstr "" +msgstr "Chargennummer für diese Bau-Ausgabe" #: build/models.py:205 order/models.py:436 msgid "Target completion date" @@ -507,132 +577,161 @@ msgstr "" #: company/templates/company/supplier_part_base.html:68 #: company/templates/company/supplier_part_detail.html:24 #: part/templates/part/detail.html:80 part/templates/part/part_base.html:102 -#: stock/models.py:397 stock/templates/stock/item_base.html:317 +#: stock/models.py:412 stock/templates/stock/item_base.html:317 msgid "External Link" -msgstr "" +msgstr "Externer Link" -#: build/models.py:220 part/models.py:705 stock/models.py:399 +#: build/models.py:220 part/models.py:705 stock/models.py:414 msgid "Link to external URL" -msgstr "" +msgstr "Link zu einer externen URL" #: build/models.py:224 build/templates/build/tabs.html:23 company/models.py:366 #: company/templates/company/tabs.html:33 order/templates/order/po_tabs.html:18 #: order/templates/order/purchase_order_detail.html:213 #: order/templates/order/so_tabs.html:23 part/models.py:831 #: part/templates/part/tabs.html:73 stock/forms.py:315 stock/forms.py:347 -#: stock/forms.py:375 stock/models.py:469 stock/models.py:1522 +#: stock/forms.py:375 stock/models.py:484 stock/models.py:1554 #: stock/templates/stock/tabs.html:26 templates/js/barcode.js:391 -#: templates/js/bom.js:295 templates/js/stock.js:127 templates/js/stock.js:618 +#: templates/js/bom.js:295 templates/js/stock.js:127 templates/js/stock.js:623 msgid "Notes" -msgstr "" +msgstr "Notizen" #: build/models.py:225 msgid "Extra build notes" -msgstr "" +msgstr "Notizen für den Bau" #: build/models.py:610 +#, fuzzy +#| msgid "No action specified" msgid "No build output specified" -msgstr "" +msgstr "Keine Aktion angegeben" #: build/models.py:613 msgid "Build output is already completed" msgstr "" #: build/models.py:616 +#, fuzzy +#| msgid "Quantity does not match serial numbers" msgid "Build output does not match Build Order" -msgstr "" +msgstr "Anzahl stimmt nicht mit den Seriennummern überein" #: build/models.py:691 +#, fuzzy +#| msgid "Complete Build" msgid "Completed build output" -msgstr "" +msgstr "Bau fertigstellen" #: build/models.py:933 msgid "BuildItem must be unique for build, stock_item and install_into" msgstr "" #: build/models.py:955 +#, fuzzy +#| msgid "Allocate Stock to Build" msgid "Build item must specify a build output" -msgstr "" +msgstr "Lagerbestand dem Bau zuweisen" #: build/models.py:960 #, python-brace-format msgid "Selected stock item not found in BOM for part '{p}'" -msgstr "" +msgstr "Ausgewähltes Lagerobjekt nicht in BOM für Teil '{p}' gefunden" #: build/models.py:964 #, python-brace-format msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" msgstr "" +"zugewiesene Anzahl ({n}) darf nicht die verfügbare ({q}) Anzahl überschreiten" #: build/models.py:971 order/models.py:735 msgid "StockItem is over-allocated" -msgstr "" +msgstr "Zu viele Lagerobjekte zugewiesen" #: build/models.py:975 order/models.py:738 msgid "Allocation quantity must be greater than zero" -msgstr "" +msgstr "Anzahl muss größer null sein" #: build/models.py:979 msgid "Quantity must be 1 for serialized stock" -msgstr "" +msgstr "Anzahl muss 1 für Objekte mit Seriennummer sein" #: build/models.py:1019 msgid "Build to allocate parts" -msgstr "" +msgstr "Bau starten um Teile zuzuweisen" #: build/models.py:1026 +#, fuzzy +#| msgid "Remove stock" msgid "Source stock item" -msgstr "" +msgstr "Bestand entfernen" #: build/models.py:1038 msgid "Stock quantity to allocate to build" -msgstr "" +msgstr "Lagerobjekt-Anzahl dem Bau zuweisen" #: build/models.py:1046 +#, fuzzy +#| msgid "Destination stock location" msgid "Destination stock item" -msgstr "" +msgstr "Ziel-Lagerbestand" #: build/templates/build/allocate.html:14 +#, fuzzy +#| msgid "Complete Build" msgid "Incomplete Build Ouputs" -msgstr "" +msgstr "Bau fertigstellen" #: build/templates/build/allocate.html:20 +#, fuzzy +#| msgid "Build order allocation is complete" msgid "Build order has been completed" -msgstr "" +msgstr "Bau-Zuweisung ist vollständig" #: build/templates/build/allocate.html:25 +#, fuzzy +#| msgid "Created new build" msgid "Create new build output" -msgstr "" +msgstr "Neuen Bau angelegt" #: build/templates/build/allocate.html:26 +#, fuzzy +#| msgid "Create New Part" msgid "Create New Output" -msgstr "" +msgstr "Neues Teil anlegen" #: build/templates/build/allocate.html:29 +#, fuzzy +#| msgid "Order part" msgid "Order required parts" -msgstr "" +msgstr "Teil bestellen" #: build/templates/build/allocate.html:30 #: company/templates/company/detail_part.html:28 order/views.py:805 #: part/templates/part/category.html:125 msgid "Order Parts" -msgstr "" +msgstr "Teile bestellen" #: build/templates/build/allocate.html:33 templates/js/build.js:590 +#, fuzzy +#| msgid "Unallocate Stock" msgid "Unallocate stock" -msgstr "" +msgstr "Zuweisung aufheben" #: build/templates/build/allocate.html:34 build/views.py:341 build/views.py:778 msgid "Unallocate Stock" -msgstr "" +msgstr "Zuweisung aufheben" #: build/templates/build/allocate.html:48 +#, fuzzy +#| msgid "Created new build" msgid "Create a new build output" -msgstr "" +msgstr "Neuen Bau angelegt" #: build/templates/build/allocate.html:49 +#, fuzzy +#| msgid "Complete Build" msgid "No incomplete build outputs remain." -msgstr "" +msgstr "Bau fertigstellen" #: build/templates/build/allocate.html:50 msgid "Create a new build output using the button above" @@ -642,16 +741,18 @@ msgstr "" #: order/templates/order/po_tabs.html:11 order/templates/order/so_tabs.html:16 #: part/templates/part/tabs.html:70 stock/templates/stock/tabs.html:32 msgid "Attachments" -msgstr "" +msgstr "Anhänge" #: build/templates/build/auto_allocate.html:9 msgid "Automatically Allocate Stock" -msgstr "" +msgstr "Lagerbestand automatisch zuweisen" #: build/templates/build/auto_allocate.html:10 +#, fuzzy +#| msgid "Stock Item to allocate to build" msgid "" "The following stock items will be allocated to the specified build output" -msgstr "" +msgstr "Lagerobjekt dem Bau zuweisen" #: build/templates/build/auto_allocate.html:18 stock/forms.py:345 #: stock/templates/stock/item_base.html:264 @@ -659,23 +760,31 @@ msgstr "" #: templates/InvenTree/search.html:183 templates/js/barcode.js:337 #: templates/js/build.js:434 templates/js/stock.js:597 msgid "Location" -msgstr "" +msgstr "Standort" #: build/templates/build/auto_allocate.html:37 +#, fuzzy +#| msgid "No stock items found that can be allocated to this build" msgid "No stock items found that can be automatically allocated to this build" -msgstr "" +msgstr "Keine Lagerobjekt gefunden, die diesem Bau zugewiesen werden können" #: build/templates/build/auto_allocate.html:39 +#, fuzzy +#| msgid "StockItem has been allocated" msgid "Stock items will have to be manually allocated" -msgstr "" +msgstr "Lagerobjekt wurde zugewiesen" #: build/templates/build/build_base.html:14 +#, fuzzy +#| msgid "This build is allocated to Sales Order" msgid "This Build Order is allocated to Sales Order" -msgstr "" +msgstr "Dieser Bau ist der Bestellung zugeordnet" #: build/templates/build/build_base.html:19 +#, fuzzy +#| msgid "This build is a child of Build" msgid "This Build Order is a child of Build Order" -msgstr "" +msgstr "Dieser Bau ist Kind von Bau" #: build/templates/build/build_base.html:37 #: company/templates/company/company_base.html:27 @@ -684,8 +793,10 @@ msgstr "" #: part/templates/part/category.html:13 part/templates/part/part_base.html:32 #: stock/templates/stock/item_base.html:114 #: stock/templates/stock/location.html:24 +#, fuzzy +#| msgid "Admin" msgid "Admin view" -msgstr "" +msgstr "Admin" #: build/templates/build/build_base.html:43 #: build/templates/build/build_base.html:100 @@ -699,24 +810,26 @@ msgid "Overdue" msgstr "" #: build/templates/build/build_base.html:51 +#, fuzzy +#| msgid "Edited build" msgid "Edit Build" -msgstr "" +msgstr "Bau bearbeitet" #: build/templates/build/build_base.html:55 msgid "Complete Build" -msgstr "" +msgstr "Bau fertigstellen" #: build/templates/build/build_base.html:58 build/views.py:58 msgid "Cancel Build" -msgstr "" +msgstr "Bau abbrechen" #: build/templates/build/build_base.html:64 msgid "Delete Build" -msgstr "" +msgstr "Bau entfernt" #: build/templates/build/build_base.html:74 build/templates/build/detail.html:9 msgid "Build Details" -msgstr "" +msgstr "Bau-Status" #: build/templates/build/build_base.html:88 #: build/templates/build/detail.html:57 @@ -724,17 +837,19 @@ msgstr "" #: stock/templates/stock/item_base.html:363 templates/InvenTree/search.html:175 #: templates/js/barcode.js:42 templates/js/build.js:697 #: templates/js/order.js:185 templates/js/order.js:279 -#: templates/js/stock.js:584 templates/js/stock.js:1099 +#: templates/js/stock.js:584 templates/js/stock.js:1116 msgid "Status" -msgstr "" +msgstr "Status" #: build/templates/build/build_base.html:96 #: build/templates/build/detail.html:100 #: order/templates/order/order_base.html:121 #: order/templates/order/sales_order_base.html:114 templates/js/build.js:710 #: templates/js/order.js:198 templates/js/order.js:292 +#, fuzzy +#| msgid "Shipment Date" msgid "Target Date" -msgstr "" +msgstr "Versanddatum" #: build/templates/build/build_base.html:100 msgid "This build was due on" @@ -754,11 +869,11 @@ msgstr "" #: part/templates/part/allocation.html:27 #: stock/templates/stock/item_base.html:258 templates/js/order.js:240 msgid "Sales Order" -msgstr "" +msgstr "Bestellung" #: build/templates/build/build_output.html:9 build/templates/build/tabs.html:17 msgid "Build Outputs" -msgstr "" +msgstr "Bau-Ausgabe" #: build/templates/build/build_output_create.html:7 msgid "The Bill of Materials contains trackable parts" @@ -777,114 +892,153 @@ msgid "Trackable parts can have serial numbers specified" msgstr "" #: build/templates/build/build_output_create.html:16 +#, fuzzy +#| msgid "Serial number for this item" msgid "Enter serial numbers to generate multiple single build outputs" -msgstr "" +msgstr "Seriennummer für dieses Teil" #: build/templates/build/cancel.html:5 +#, fuzzy +#| msgid "Are you sure you wish to unallocate all stock for this build?" msgid "Are you sure you wish to cancel this build?" msgstr "" +"Sind Sie sicher, dass sie alle Lagerobjekte von diesem Bau entfernen möchten?" #: build/templates/build/complete.html:8 +#, fuzzy +#| msgid "Build order allocation is complete" msgid "Build can be completed" -msgstr "" +msgstr "Bau-Zuweisung ist vollständig" #: build/templates/build/complete.html:12 +#, fuzzy +#| msgid "Build order allocation is complete" msgid "Build cannot be completed" -msgstr "" +msgstr "Bau-Zuweisung ist vollständig" #: build/templates/build/complete.html:15 +#, fuzzy +#| msgid "Complete Build" msgid "Incompleted build outputs remain" -msgstr "" +msgstr "Bau fertigstellen" #: build/templates/build/complete.html:18 +#, fuzzy +#| msgid "Build order allocation is complete" msgid "Required build quantity has not been completed" -msgstr "" +msgstr "Bau-Zuweisung ist vollständig" #: build/templates/build/complete_output.html:9 +#, fuzzy +#| msgid "Build order allocation is complete" msgid "Stock allocation is complete" -msgstr "" +msgstr "Bau-Zuweisung ist vollständig" #: build/templates/build/complete_output.html:13 +#, fuzzy +#| msgid "Build order allocation is complete" msgid "Stock allocation is incomplete" -msgstr "" +msgstr "Bau-Zuweisung ist vollständig" #: build/templates/build/complete_output.html:19 +#, fuzzy +#| msgid "This SalesOrder has not been fully allocated" msgid "parts have not been fully allocated" -msgstr "" +msgstr "Dieser Auftrag ist nicht vollständig zugeordnet" #: build/templates/build/complete_output.html:40 msgid "The following items will be created" -msgstr "" +msgstr "Die folgenden Objekte werden erstellt" #: build/templates/build/create_build_item.html:7 +#, fuzzy +#| msgid "Stock Item to allocate to build" msgid "Select a stock item to allocate to the selected build output" -msgstr "" +msgstr "Lagerobjekt dem Bau zuweisen" #: build/templates/build/create_build_item.html:11 +#, fuzzy +#| msgid "The following stock items will be allocated to the build:" msgid "The allocated stock will be installed into the following build output:" -msgstr "" +msgstr "Folgende Lagerobjekte werden dem Bau automatisch zugewiesen:" #: build/templates/build/create_build_item.html:19 +#, fuzzy +#| msgid "Stock available" msgid "No stock available for" -msgstr "" +msgstr "Bestand verfügbar" #: build/templates/build/delete_build_item.html:8 +#, fuzzy +#| msgid "Are you sure you want to unallocate these parts?" msgid "Are you sure you want to unallocate this stock?" -msgstr "" +msgstr "Sind Sie sicher, dass sie die folgenden Teile entfernen möchten?" #: build/templates/build/delete_build_item.html:11 +#, fuzzy +#| msgid "The following stock items will be allocated to the build:" msgid "The selected stock will be unallocated from the build output" -msgstr "" +msgstr "Folgende Lagerobjekte werden dem Bau automatisch zugewiesen:" #: build/templates/build/detail.html:33 msgid "Stock Source" -msgstr "" +msgstr "Lagerobjekt" #: build/templates/build/detail.html:38 msgid "Stock can be taken from any available location." -msgstr "" +msgstr "Bestand kann jedem verfügbaren Lagerort entnommen werden." #: build/templates/build/detail.html:44 stock/forms.py:373 +#, fuzzy +#| msgid "Description" msgid "Destination" -msgstr "" +msgstr "Beschreibung" #: build/templates/build/detail.html:51 +#, fuzzy +#| msgid "Does this part have tracking for unique items?" msgid "Destination location not specified" -msgstr "" +msgstr "Hat dieses Teil Tracking für einzelne Objekte?" #: build/templates/build/detail.html:68 #: stock/templates/stock/item_base.html:282 templates/js/stock.js:592 -#: templates/js/stock.js:1106 templates/js/table_filters.js:80 +#: templates/js/stock.js:1123 templates/js/table_filters.js:80 #: templates/js/table_filters.js:161 msgid "Batch" -msgstr "" +msgstr "Los" #: build/templates/build/detail.html:95 #: order/templates/order/order_base.html:108 #: order/templates/order/sales_order_base.html:108 templates/js/build.js:705 msgid "Created" -msgstr "" +msgstr "Erstellt" #: build/templates/build/detail.html:106 +#, fuzzy +#| msgid "No destination set" msgid "No target date set" -msgstr "" +msgstr "Kein Ziel gesetzt" #: build/templates/build/detail.html:111 templates/js/build.js:683 #: templates/js/build.js:715 msgid "Completed" -msgstr "" +msgstr "Fertig" #: build/templates/build/detail.html:115 +#, fuzzy +#| msgid "Build order allocation is complete" msgid "Build not complete" -msgstr "" +msgstr "Bau-Zuweisung ist vollständig" #: build/templates/build/edit_build_item.html:7 +#, fuzzy +#| msgid "Stock quantity to allocate to build" msgid "Alter the quantity of stock allocated to the build output" -msgstr "" +msgstr "Lagerobjekt-Anzahl dem Bau zuweisen" #: build/templates/build/index.html:27 build/views.py:658 msgid "New Build Order" -msgstr "" +msgstr "Neuer Bauauftrag" #: build/templates/build/index.html:30 #: order/templates/order/purchase_orders.html:22 @@ -900,212 +1054,271 @@ msgstr "" #: build/templates/build/notes.html:13 build/templates/build/notes.html:30 msgid "Build Notes" -msgstr "" +msgstr "Bau-Bemerkungen" #: build/templates/build/notes.html:20 company/templates/company/notes.html:17 #: order/templates/order/order_notes.html:21 #: order/templates/order/sales_order_notes.html:26 #: part/templates/part/notes.html:20 stock/templates/stock/item_notes.html:22 msgid "Save" -msgstr "" +msgstr "Speichern" #: build/templates/build/notes.html:33 company/templates/company/notes.html:30 #: order/templates/order/order_notes.html:33 #: order/templates/order/sales_order_notes.html:37 #: part/templates/part/notes.html:33 stock/templates/stock/item_notes.html:33 msgid "Edit notes" -msgstr "" +msgstr "Bermerkungen bearbeiten" #: build/templates/build/tabs.html:5 company/templates/company/tabs.html:5 #: part/templates/part/tabs.html:6 msgid "Details" -msgstr "" +msgstr "Details" #: build/templates/build/tabs.html:10 +#, fuzzy +#| msgid "Complete" msgid "Incomplete" -msgstr "" +msgstr "Fertig" #: build/templates/build/unallocate.html:10 msgid "Are you sure you wish to unallocate all stock for this build?" msgstr "" +"Sind Sie sicher, dass sie alle Lagerobjekte von diesem Bau entfernen möchten?" #: build/templates/build/unallocate.html:12 +#, fuzzy +#| msgid "The following stock items will be allocated to the build:" msgid "All incomplete stock allocations will be removed from the build" -msgstr "" +msgstr "Folgende Lagerobjekte werden dem Bau automatisch zugewiesen:" #: build/views.py:79 msgid "Build was cancelled" -msgstr "" +msgstr "Bau wurde abgebrochen" #: build/views.py:93 msgid "Allocate Stock" -msgstr "" +msgstr "Lagerbestand zuweisen" #: build/views.py:157 build/views.py:317 build/views.py:490 +#, fuzzy +#| msgid "No action specified" msgid "Build output must be specified" -msgstr "" +msgstr "Keine Aktion angegeben" #: build/views.py:171 +#, fuzzy +#| msgid "Allocate Stock to Build" msgid "Allocated stock to build output" -msgstr "" +msgstr "Lagerbestand dem Bau zuweisen" #: build/views.py:183 +#, fuzzy +#| msgid "Build Outputs" msgid "Create Build Output" -msgstr "" +msgstr "Bau-Ausgabe" -#: build/views.py:207 stock/models.py:882 stock/views.py:1973 +#: build/views.py:207 stock/models.py:897 stock/views.py:1886 +#, fuzzy +#| msgid "Serial numbers already exist: " msgid "Serial numbers already exist" -msgstr "" +msgstr "Seriennummern existieren bereits:" #: build/views.py:216 +#, fuzzy +#| msgid "Serial number for this item" msgid "Serial numbers required for trackable build output" -msgstr "" +msgstr "Seriennummer für dieses Teil" #: build/views.py:282 +#, fuzzy +#| msgid "Delete Build" msgid "Delete Build Output" -msgstr "" +msgstr "Bau entfernt" #: build/views.py:302 build/views.py:387 msgid "Confirm unallocation of build stock" -msgstr "" +msgstr "Zuweisungsaufhebung bestätigen" -#: build/views.py:303 build/views.py:388 stock/views.py:519 +#: build/views.py:303 build/views.py:388 stock/views.py:432 msgid "Check the confirmation box" -msgstr "" +msgstr "Bestätigungsbox bestätigen" #: build/views.py:315 +#, fuzzy +#| msgid "Quantity does not match serial numbers" msgid "Build output does not match build" -msgstr "" +msgstr "Anzahl stimmt nicht mit den Seriennummern überein" #: build/views.py:329 +#, fuzzy +#| msgid "No action specified" msgid "Build output deleted" -msgstr "" +msgstr "Keine Aktion angegeben" #: build/views.py:412 +#, fuzzy +#| msgid "Complete Build" msgid "Complete Build Order" -msgstr "" +msgstr "Bau fertigstellen" #: build/views.py:418 +#, fuzzy +#| msgid "Build order allocation is complete" msgid "Build order cannot be completed" -msgstr "" +msgstr "Bau-Zuweisung ist vollständig" #: build/views.py:429 +#, fuzzy +#| msgid "Complete Build" msgid "Completed build order" -msgstr "" +msgstr "Bau fertigstellen" #: build/views.py:445 +#, fuzzy +#| msgid "Complete Build" msgid "Complete Build Output" -msgstr "" +msgstr "Bau fertigstellen" #: build/views.py:481 +#, fuzzy +#| msgid "Quantity must not exceed available stock quantity ({n})" msgid "Quantity to complete cannot exceed build output quantity" -msgstr "" +msgstr "Anzahl darf nicht die verfügbare Anzahl überschreiten ({n})" #: build/views.py:487 +#, fuzzy +#| msgid "Confirm completion of build" msgid "Confirm completion of incomplete build" -msgstr "" +msgstr "Baufertigstellung bestätigen" #: build/views.py:578 +#, fuzzy +#| msgid "Build order allocation is complete" msgid "Build output completed" -msgstr "" +msgstr "Bau-Zuweisung ist vollständig" #: build/views.py:703 msgid "Created new build" -msgstr "" +msgstr "Neuen Bau angelegt" #: build/views.py:724 +#, fuzzy +#| msgid "Edit Build Details" msgid "Edit Build Order Details" -msgstr "" +msgstr "Baudetails bearbeiten" #: build/views.py:758 msgid "Edited build" -msgstr "" +msgstr "Bau bearbeitet" #: build/views.py:767 +#, fuzzy +#| msgid "Complete Build" msgid "Delete Build Order" -msgstr "" +msgstr "Bau fertigstellen" #: build/views.py:784 msgid "Removed parts from build allocation" -msgstr "" +msgstr "Teile von Bauzuordnung entfernt" #: build/views.py:796 +#, fuzzy +#| msgid "Allocate Stock to Build" msgid "Allocate stock to build output" -msgstr "" +msgstr "Lagerbestand dem Bau zuweisen" #: build/views.py:840 +#, fuzzy +#| msgid "This stock item is allocated to Build" msgid "Item must be currently in stock" -msgstr "" +msgstr "Dieses Lagerobjekt ist dem Bau zugewiesen" #: build/views.py:846 +#, fuzzy +#| msgid "StockItem is over-allocated" msgid "Stock item is over-allocated" -msgstr "" +msgstr "Zu viele Lagerobjekte zugewiesen" #: build/views.py:847 templates/js/bom.js:221 templates/js/build.js:519 #: templates/js/build.js:758 msgid "Available" -msgstr "" +msgstr "verfügbar" #: build/views.py:849 +#, fuzzy +#| msgid "StockItem has been allocated" msgid "Stock item must be selected" -msgstr "" +msgstr "Lagerobjekt wurde zugewiesen" #: build/views.py:1012 msgid "Edit Stock Allocation" -msgstr "" +msgstr "Teilzuordnung bearbeiten" #: build/views.py:1017 msgid "Updated Build Item" -msgstr "" +msgstr "Bauobjekt aktualisiert" #: build/views.py:1046 +#, fuzzy +#| msgid "Add Sales Order Attachment" msgid "Add Build Order Attachment" -msgstr "" +msgstr "Auftragsanhang hinzufügen" #: build/views.py:1060 order/views.py:113 order/views.py:166 part/views.py:170 -#: stock/views.py:282 +#: stock/views.py:281 msgid "Added attachment" -msgstr "" +msgstr "Anhang hinzugefügt" #: build/views.py:1096 order/views.py:193 order/views.py:215 msgid "Edit Attachment" -msgstr "" +msgstr "Anhang bearbeiten" #: build/views.py:1107 order/views.py:198 order/views.py:220 msgid "Attachment updated" -msgstr "" +msgstr "Anhang aktualisiert" #: build/views.py:1117 order/views.py:235 order/views.py:250 msgid "Delete Attachment" -msgstr "" +msgstr "Anhang löschen" -#: build/views.py:1123 order/views.py:242 order/views.py:257 stock/views.py:340 +#: build/views.py:1123 order/views.py:242 order/views.py:257 stock/views.py:339 msgid "Deleted attachment" -msgstr "" +msgstr "Anhang gelöscht" #: common/models.py:56 +#, fuzzy +#| msgid "Instance Name" msgid "InvenTree Instance Name" -msgstr "" +msgstr "Instanzname" #: common/models.py:58 +#, fuzzy +#| msgid "Brief description of the build" msgid "String descriptor for the server instance" -msgstr "" +msgstr "Kurze Beschreibung des Baus" #: common/models.py:62 company/models.py:95 company/models.py:96 msgid "Company name" -msgstr "" +msgstr "Firmenname" #: common/models.py:63 +#, fuzzy +#| msgid "Company name" msgid "Internal company name" -msgstr "" +msgstr "Firmenname" #: common/models.py:68 +#, fuzzy +#| msgid "Delete Currency" msgid "Default Currency" -msgstr "" +msgstr "Währung entfernen" #: common/models.py:69 +#, fuzzy +#| msgid "Delete Currency" msgid "Default currency" -msgstr "" +msgstr "Währung entfernen" #: common/models.py:75 msgid "IPN Regex" @@ -1116,40 +1329,50 @@ msgid "Regular expression pattern for matching Part IPN" msgstr "" #: common/models.py:80 +#, fuzzy +#| msgid "Duplicate Part" msgid "Allow Duplicate IPN" -msgstr "" +msgstr "Teil duplizieren" #: common/models.py:81 msgid "Allow multiple parts to share the same IPN" msgstr "" #: common/models.py:87 +#, fuzzy +#| msgid "Import BOM data" msgid "Copy Part BOM Data" -msgstr "" +msgstr "Stückliste importieren" #: common/models.py:88 msgid "Copy BOM data by default when duplicating a part" msgstr "" #: common/models.py:94 +#, fuzzy +#| msgid "Parameters" msgid "Copy Part Parameter Data" -msgstr "" +msgstr "Parameter" #: common/models.py:95 msgid "Copy parameter data by default when duplicating a part" msgstr "" #: common/models.py:101 +#, fuzzy +#| msgid "Parameters" msgid "Copy Part Test Data" -msgstr "" +msgstr "Parameter" #: common/models.py:102 msgid "Copy test data by default when duplicating a part" msgstr "" #: common/models.py:108 +#, fuzzy +#| msgid "Edit Part Parameter Template" msgid "Copy Category Parameter Templates" -msgstr "" +msgstr "Teilparametervorlage bearbeiten" #: common/models.py:109 msgid "Copy category parameter templates when creating a part" @@ -1158,33 +1381,39 @@ msgstr "" #: common/models.py:115 part/templates/part/detail.html:155 stock/forms.py:257 #: templates/js/table_filters.js:23 templates/js/table_filters.js:270 msgid "Template" -msgstr "" +msgstr "Vorlage" #: common/models.py:116 +#, fuzzy +#| msgid "Part is not a virtual part" msgid "Parts are templates by default" -msgstr "" +msgstr "Teil ist nicht virtuell" #: common/models.py:122 part/models.py:794 part/templates/part/detail.html:165 #: templates/js/table_filters.js:282 msgid "Assembly" -msgstr "" +msgstr "Baugruppe" #: common/models.py:123 +#, fuzzy +#| msgid "Part can be assembled from other parts" msgid "Parts can be assembled from other components by default" -msgstr "" +msgstr "Teil kann aus anderen Teilen angefertigt werden" #: common/models.py:129 part/models.py:800 part/templates/part/detail.html:175 #: templates/js/table_filters.js:286 msgid "Component" -msgstr "" +msgstr "Komponente" #: common/models.py:130 +#, fuzzy +#| msgid "Part can be used in assemblies" msgid "Parts can be used as sub-components by default" -msgstr "" +msgstr "Teil kann in Baugruppen benutzt werden" #: common/models.py:136 part/models.py:811 part/templates/part/detail.html:195 msgid "Purchaseable" -msgstr "" +msgstr "Kaufbar" #: common/models.py:137 msgid "Parts are purchaseable by default" @@ -1193,7 +1422,7 @@ msgstr "" #: common/models.py:143 part/models.py:816 part/templates/part/detail.html:205 #: templates/js/table_filters.js:294 msgid "Salable" -msgstr "" +msgstr "Verkäuflich" #: common/models.py:144 msgid "Parts are salable by default" @@ -1202,7 +1431,7 @@ msgstr "" #: common/models.py:150 part/models.py:806 part/templates/part/detail.html:185 #: templates/js/table_filters.js:31 templates/js/table_filters.js:298 msgid "Trackable" -msgstr "" +msgstr "nachverfolgbar" #: common/models.py:151 msgid "Parts are trackable by default" @@ -1211,39 +1440,49 @@ msgstr "" #: common/models.py:157 part/models.py:826 part/templates/part/detail.html:145 #: templates/js/table_filters.js:27 msgid "Virtual" -msgstr "" +msgstr "Virtuell" #: common/models.py:158 +#, fuzzy +#| msgid "Part is not a virtual part" msgid "Parts are virtual by default" -msgstr "" +msgstr "Teil ist nicht virtuell" #: common/models.py:164 +#, fuzzy +#| msgid "Stock Quantity" msgid "Show Quantity in Forms" -msgstr "" +msgstr "Bestand" #: common/models.py:165 msgid "Display available part quantity in some forms" msgstr "" #: common/models.py:171 +#, fuzzy +#| msgid "Stock Export Options" msgid "Stock Expiry" -msgstr "" +msgstr "Lagerbestandsexportoptionen" #: common/models.py:172 msgid "Enable stock expiry functionality" msgstr "" #: common/models.py:178 +#, fuzzy +#| msgid "Serialize Stock" msgid "Sell Expired Stock" -msgstr "" +msgstr "Lagerbestand erfassen" #: common/models.py:179 msgid "Allow sale of expired stock" msgstr "" #: common/models.py:185 +#, fuzzy +#| msgid "Stock Item" msgid "Stock Stale Time" -msgstr "" +msgstr "Lagerobjekt" #: common/models.py:186 msgid "Number of days stock items are considered stale before expiring" @@ -1254,8 +1493,10 @@ msgid "days" msgstr "" #: common/models.py:193 +#, fuzzy +#| msgid "Builds" msgid "Build Expired Stock" -msgstr "" +msgstr "Baue" #: common/models.py:194 msgid "Allow building with expired stock" @@ -1270,179 +1511,221 @@ msgid "Enable ownership control over stock locations and items" msgstr "" #: common/models.py:207 +#, fuzzy +#| msgid "Order Reference" msgid "Build Order Reference Prefix" -msgstr "" +msgstr "Bestellreferenz" #: common/models.py:208 +#, fuzzy +#| msgid "Order reference" msgid "Prefix value for build order reference" -msgstr "" +msgstr "Bestell-Referenz" #: common/models.py:213 +#, fuzzy +#| msgid "Order Reference" msgid "Build Order Reference Regex" -msgstr "" +msgstr "Bestellreferenz" #: common/models.py:214 msgid "Regular expression pattern for matching build order reference" msgstr "" #: common/models.py:218 +#, fuzzy +#| msgid "Sales Order Reference" msgid "Sales Order Reference Prefix" -msgstr "" +msgstr "Bestellungsreferenz" #: common/models.py:219 +#, fuzzy +#| msgid "Order reference" msgid "Prefix value for sales order reference" -msgstr "" +msgstr "Bestell-Referenz" #: common/models.py:224 +#, fuzzy +#| msgid "Order reference" msgid "Purchase Order Reference Prefix" -msgstr "" +msgstr "Bestell-Referenz" #: common/models.py:225 +#, fuzzy +#| msgid "Order reference" msgid "Prefix value for purchase order reference" -msgstr "" +msgstr "Bestell-Referenz" #: common/models.py:448 msgid "Settings key (must be unique - case insensitive" msgstr "" +"Einstellungs-Schlüssel (muss einzigartig sein, Groß-/ Kleinschreibung wird " +"nicht beachtet)" #: common/models.py:450 msgid "Settings value" -msgstr "" +msgstr "Einstellungs-Wert" #: common/models.py:507 msgid "Value must be a boolean value" msgstr "" #: common/models.py:517 +#, fuzzy +#| msgid "Must enter integer value" msgid "Value must be an integer value" -msgstr "" +msgstr "Nur Ganzzahl eingeben" #: common/models.py:531 msgid "Key string must be unique" -msgstr "" +msgstr "Schlüsseltext muss eindeutig sein" #: common/models.py:604 company/forms.py:113 +#, fuzzy +#| msgid "Price Breaks" msgid "Price break quantity" -msgstr "" +msgstr "Preisstaffelung" #: common/models.py:612 company/templates/company/supplier_part_pricing.html:80 #: part/templates/part/sale_prices.html:87 templates/js/bom.js:246 msgid "Price" -msgstr "" +msgstr "Preis" #: common/models.py:613 +#, fuzzy +#| msgid "Enter a valid quantity" msgid "Unit price at specified quantity" -msgstr "" +msgstr "Bitte eine gültige Anzahl eingeben" #: common/models.py:636 +#, fuzzy +#| msgid "Default Location" msgid "Default" -msgstr "" +msgstr "Standard-Lagerort" #: common/templates/common/edit_setting.html:11 +#, fuzzy +#| msgid "Currency Value" msgid "Current value" -msgstr "" +msgstr "Währungs-Wert" #: common/views.py:25 +#, fuzzy +#| msgid "Settings" msgid "Change Setting" -msgstr "" +msgstr "Einstellungen" #: common/views.py:94 msgid "Supplied value is not allowed" msgstr "" #: common/views.py:103 +#, fuzzy +#| msgid "Supplier part description" msgid "Supplied value must be a boolean" -msgstr "" +msgstr "Zuliefererbeschreibung des Teils" #: company/forms.py:37 company/models.py:139 +#, fuzzy +#| msgid "Do you purchase items from this company?" msgid "Default currency used for this company" -msgstr "" +msgstr "Kaufen Sie Teile von dieser Firma?" #: company/forms.py:80 +#, fuzzy +#| msgid "Price" msgid "Single Price" -msgstr "" +msgstr "Preis" #: company/forms.py:82 +#, fuzzy +#| msgid "Invalid quantity provided" msgid "Single quantity price" -msgstr "" +msgstr "Keine gültige Menge" #: company/models.py:98 +#, fuzzy +#| msgid "Part description" msgid "Company description" -msgstr "" +msgstr "Beschreibung des Teils" #: company/models.py:98 msgid "Description of the company" -msgstr "" +msgstr "Firmenbeschreibung" #: company/models.py:100 company/templates/company/company_base.html:57 #: company/templates/company/detail.html:28 templates/js/company.js:61 msgid "Website" -msgstr "" +msgstr "Website" #: company/models.py:100 msgid "Company website URL" -msgstr "" +msgstr "Firmenwebsite" #: company/models.py:103 company/templates/company/company_base.html:64 msgid "Address" -msgstr "" +msgstr "Adresse" #: company/models.py:104 msgid "Company address" -msgstr "" +msgstr "Firmenadresse" #: company/models.py:107 +#, fuzzy +#| msgid "Contact phone number" msgid "Phone number" -msgstr "" +msgstr "Kontakt-Tel." #: company/models.py:108 msgid "Contact phone number" -msgstr "" +msgstr "Kontakt-Tel." #: company/models.py:111 company/templates/company/company_base.html:78 msgid "Email" -msgstr "" +msgstr "Email" #: company/models.py:111 msgid "Contact email address" -msgstr "" +msgstr "Kontakt-Email" #: company/models.py:114 company/templates/company/company_base.html:85 msgid "Contact" -msgstr "" +msgstr "Kontakt" #: company/models.py:115 msgid "Point of contact" -msgstr "" +msgstr "Anlaufstelle" #: company/models.py:117 msgid "Link to external company information" -msgstr "" +msgstr "Link auf externe Firmeninformation" #: company/models.py:129 msgid "Do you sell items to this company?" -msgstr "" +msgstr "Verkaufen Sie Teile an diese Firma?" #: company/models.py:131 msgid "Do you purchase items from this company?" -msgstr "" +msgstr "Kaufen Sie Teile von dieser Firma?" #: company/models.py:133 msgid "Does this company manufacture parts?" -msgstr "" +msgstr "Produziert diese Firma Teile?" #: company/models.py:137 company/templates/company/detail.html:37 +#, fuzzy +#| msgid "Edit Currency" msgid "Currency" -msgstr "" +msgstr "Währung bearbeiten" -#: company/models.py:313 stock/models.py:351 +#: company/models.py:313 stock/models.py:366 #: stock/templates/stock/item_base.html:214 msgid "Base Part" -msgstr "" +msgstr "Basisteil" #: company/models.py:317 msgid "Select part" -msgstr "" +msgstr "Teil auswählen" #: company/models.py:323 company/templates/company/detail.html:57 #: company/templates/company/supplier_part_base.html:74 @@ -1452,169 +1735,181 @@ msgstr "" #: stock/templates/stock/item_base.html:324 templates/js/company.js:48 #: templates/js/company.js:164 templates/js/order.js:167 msgid "Supplier" -msgstr "" +msgstr "Zulieferer" #: company/models.py:324 msgid "Select supplier" -msgstr "" +msgstr "Zulieferer auswählen" #: company/models.py:329 company/templates/company/supplier_part_base.html:78 #: company/templates/company/supplier_part_detail.html:22 part/bom.py:171 msgid "SKU" -msgstr "" +msgstr "SKU" #: company/models.py:330 msgid "Supplier stock keeping unit" -msgstr "" +msgstr "Stock Keeping Units (SKU) des Zulieferers" #: company/models.py:340 company/templates/company/detail.html:52 #: company/templates/company/supplier_part_base.html:84 #: company/templates/company/supplier_part_detail.html:30 part/bom.py:172 #: templates/js/company.js:44 templates/js/company.js:188 msgid "Manufacturer" -msgstr "" +msgstr "Hersteller" #: company/models.py:341 msgid "Select manufacturer" -msgstr "" +msgstr "Hersteller auswählen" #: company/models.py:347 company/templates/company/supplier_part_base.html:88 #: company/templates/company/supplier_part_detail.html:31 part/bom.py:173 #: templates/js/company.js:204 msgid "MPN" -msgstr "" +msgstr "MPN" #: company/models.py:348 msgid "Manufacturer part number" -msgstr "" +msgstr "Hersteller-Teilenummer" #: company/models.py:353 part/models.py:704 templates/js/company.js:208 msgid "Link" -msgstr "" +msgstr "Link" #: company/models.py:354 msgid "URL for external supplier part link" -msgstr "" +msgstr "Teil-URL des Zulieferers" #: company/models.py:360 msgid "Supplier part description" -msgstr "" +msgstr "Zuliefererbeschreibung des Teils" #: company/models.py:365 company/templates/company/supplier_part_base.html:95 #: company/templates/company/supplier_part_detail.html:34 msgid "Note" -msgstr "" +msgstr "Notiz" #: company/models.py:369 msgid "Minimum charge (e.g. stocking fee)" -msgstr "" +msgstr "Mindestpreis" #: company/models.py:371 msgid "Part packaging" -msgstr "" +msgstr "Teile-Packaging" #: company/templates/company/assigned_stock.html:9 #: company/templates/company/tabs.html:25 templates/js/build.js:411 +#, fuzzy +#| msgid "Assigned" msgid "Assigned Stock" -msgstr "" +msgstr "Zugewiesen" #: company/templates/company/company_base.html:7 #: company/templates/company/company_base.html:22 templates/js/company.js:33 msgid "Company" -msgstr "" +msgstr "Firma" #: company/templates/company/company_base.html:51 #: company/templates/company/detail.html:8 msgid "Company Details" -msgstr "" +msgstr "Firmendetails" #: company/templates/company/company_base.html:71 msgid "Phone" -msgstr "" +msgstr "Telefon" #: company/templates/company/detail.html:18 +#, fuzzy +#| msgid "Company name" msgid "Company Name" -msgstr "" +msgstr "Firmenname" #: company/templates/company/detail.html:31 +#, fuzzy +#| msgid "No lines specified" msgid "No website specified" -msgstr "" +msgstr "Keine Zeilen angegeben" #: company/templates/company/detail.html:40 +#, fuzzy +#| msgid "Delete Currency" msgid "Uses default currency" -msgstr "" +msgstr "Währung entfernen" #: company/templates/company/detail.html:62 -#: order/templates/order/sales_order_base.html:89 stock/models.py:386 -#: stock/models.py:387 stock/templates/stock/item_base.html:241 +#: order/templates/order/sales_order_base.html:89 stock/models.py:401 +#: stock/models.py:402 stock/templates/stock/item_base.html:241 #: templates/js/company.js:40 templates/js/order.js:261 msgid "Customer" -msgstr "" +msgstr "Kunde" #: company/templates/company/detail_part.html:8 msgid "Supplier Parts" -msgstr "" +msgstr "Zulieferer-Teile" #: company/templates/company/detail_part.html:17 #: order/templates/order/purchase_order_detail.html:69 msgid "Create new supplier part" -msgstr "" +msgstr "Neues Zuliefererteil anlegen" #: company/templates/company/detail_part.html:18 #: order/templates/order/purchase_order_detail.html:68 -#: part/templates/part/supplier.html:14 templates/js/stock.js:983 +#: part/templates/part/supplier.html:14 templates/js/stock.js:1000 msgid "New Supplier Part" -msgstr "" +msgstr "Neues Zulieferer-Teil" #: company/templates/company/detail_part.html:23 #: part/templates/part/category.html:120 part/templates/part/supplier.html:17 -#: templates/stock_table.html:26 +#: templates/stock_table.html:27 msgid "Options" -msgstr "" +msgstr "Optionen" #: company/templates/company/detail_part.html:28 #: part/templates/part/category.html:125 +#, fuzzy +#| msgid "Order part" msgid "Order parts" -msgstr "" +msgstr "Teil bestellen" #: company/templates/company/detail_part.html:31 +#, fuzzy +#| msgid "Delete Parts" msgid "Delete parts" -msgstr "" +msgstr "Teile löschen" #: company/templates/company/detail_part.html:31 msgid "Delete Parts" -msgstr "" +msgstr "Teile löschen" #: company/templates/company/detail_part.html:63 -#: part/templates/part/category.html:116 templates/js/stock.js:977 +#: part/templates/part/category.html:116 templates/js/stock.js:994 msgid "New Part" -msgstr "" +msgstr "Neues Teil" #: company/templates/company/detail_part.html:64 msgid "Create new Part" -msgstr "" +msgstr "Neues Teil hinzufügen" #: company/templates/company/detail_part.html:69 company/views.py:56 #: part/templates/part/supplier.html:47 msgid "New Supplier" -msgstr "" +msgstr "Neuer Zulieferer" #: company/templates/company/detail_part.html:70 company/views.py:195 msgid "Create new Supplier" -msgstr "" +msgstr "Neuen Zulieferer anlegen" #: company/templates/company/detail_part.html:75 company/views.py:63 #: part/templates/part/supplier.html:53 msgid "New Manufacturer" -msgstr "" +msgstr "Neuer Hersteller" #: company/templates/company/detail_part.html:76 company/views.py:198 msgid "Create new Manufacturer" -msgstr "" +msgstr "Neuen Hersteller anlegen" #: company/templates/company/detail_stock.html:9 msgid "Supplier Stock" -msgstr "" +msgstr "Zuliefererbestand" #: company/templates/company/detail_stock.html:35 #: company/templates/company/supplier_part_stock.html:33 @@ -1622,20 +1917,21 @@ msgstr "" #: part/templates/part/category.html:126 part/templates/part/stock.html:51 #: templates/stock_table.html:13 msgid "Export" -msgstr "" +msgstr "Exportieren" #: company/templates/company/index.html:7 msgid "Supplier List" -msgstr "" +msgstr "Zuliefererliste" #: company/templates/company/notes.html:10 #: company/templates/company/notes.html:27 msgid "Company Notes" -msgstr "" +msgstr "Firmenbemerkungen" #: company/templates/company/partdelete.html:5 msgid "Are you sure you want to delete the following Supplier Parts?" msgstr "" +"Sind Sie sicher, dass sie die folgenden Zulieferer-Teile löschen möchten?" #: company/templates/company/purchase_orders.html:9 #: company/templates/company/tabs.html:17 @@ -1645,17 +1941,17 @@ msgstr "" #: templates/InvenTree/settings/tabs.html:31 templates/navbar.html:33 #: users/models.py:37 msgid "Purchase Orders" -msgstr "" +msgstr "Bestellungen" #: company/templates/company/purchase_orders.html:15 #: order/templates/order/purchase_orders.html:19 msgid "Create new purchase order" -msgstr "" +msgstr "Neue Bestellung anlegen" #: company/templates/company/purchase_orders.html:16 #: order/templates/order/purchase_orders.html:20 msgid "New Purchase Order" -msgstr "" +msgstr "Neue Bestellung" #: company/templates/company/sales_orders.html:9 #: company/templates/company/tabs.html:22 @@ -1665,87 +1961,93 @@ msgstr "" #: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:42 #: users/models.py:38 msgid "Sales Orders" -msgstr "" +msgstr "Bestellungen" #: company/templates/company/sales_orders.html:15 #: order/templates/order/sales_orders.html:19 msgid "Create new sales order" -msgstr "" +msgstr "Neuen Auftrag anlegen" #: company/templates/company/sales_orders.html:16 #: order/templates/order/sales_orders.html:20 msgid "New Sales Order" -msgstr "" +msgstr "Neuer Auftrag" #: company/templates/company/supplier_part_base.html:6 -#: company/templates/company/supplier_part_base.html:19 stock/models.py:360 +#: company/templates/company/supplier_part_base.html:19 stock/models.py:375 #: stock/templates/stock/item_base.html:329 templates/js/company.js:180 msgid "Supplier Part" -msgstr "" +msgstr "Zulieferer-Teil" #: company/templates/company/supplier_part_base.html:26 #: part/templates/part/orders.html:14 part/templates/part/part_base.html:66 msgid "Order part" -msgstr "" +msgstr "Teil bestellen" #: company/templates/company/supplier_part_base.html:30 msgid "Edit supplier part" -msgstr "" +msgstr "Zuliefererteil bearbeiten" #: company/templates/company/supplier_part_base.html:34 msgid "Delete supplier part" -msgstr "" +msgstr "Zuliefererteil entfernen" #: company/templates/company/supplier_part_base.html:46 #: company/templates/company/supplier_part_detail.html:11 msgid "Supplier Part Details" -msgstr "" +msgstr "Zuliefererteildetails" #: company/templates/company/supplier_part_base.html:51 #: company/templates/company/supplier_part_detail.html:14 msgid "Internal Part" -msgstr "" +msgstr "Internes Teil" #: company/templates/company/supplier_part_orders.html:9 msgid "Supplier Part Orders" -msgstr "" +msgstr "Zuliefererbestellungen" #: company/templates/company/supplier_part_orders.html:17 #: part/templates/part/orders.html:15 msgid "Order Part" -msgstr "" +msgstr "Teil bestellen" #: company/templates/company/supplier_part_pricing.html:10 msgid "Pricing Information" -msgstr "" +msgstr "Preisinformationen ansehen" #: company/templates/company/supplier_part_pricing.html:17 company/views.py:486 -#: part/templates/part/sale_prices.html:14 part/views.py:2565 +#: part/templates/part/sale_prices.html:14 part/views.py:2567 msgid "Add Price Break" -msgstr "" +msgstr "Preisstaffel hinzufügen" #: company/templates/company/supplier_part_pricing.html:36 #: part/templates/part/sale_prices.html:43 +#, fuzzy +#| msgid "No company information found" msgid "No price break information found" -msgstr "" +msgstr "Keine Firmeninformation gefunden" #: company/templates/company/supplier_part_pricing.html:87 #: part/templates/part/sale_prices.html:94 +#, fuzzy +#| msgid "Edit Price Break" msgid "Edit price break" -msgstr "" +msgstr "Preisstaffel bearbeiten" #: company/templates/company/supplier_part_pricing.html:88 #: part/templates/part/sale_prices.html:95 +#, fuzzy +#| msgid "Delete Price Break" msgid "Delete price break" -msgstr "" +msgstr "Preisstaffel löschen" #: company/templates/company/supplier_part_stock.html:9 msgid "Supplier Part Stock" -msgstr "" +msgstr "Zuliefererbestand" #: company/templates/company/supplier_part_tabs.html:5 msgid "Pricing" -msgstr "" +msgstr "Bepreisung" #: company/templates/company/supplier_part_tabs.html:8 #: company/templates/company/tabs.html:12 part/templates/part/tabs.html:18 @@ -1753,11 +2055,11 @@ msgstr "" #: templates/InvenTree/settings/tabs.html:25 templates/js/part.js:192 #: templates/js/part.js:418 templates/js/stock.js:519 templates/navbar.html:22 msgid "Stock" -msgstr "" +msgstr "Lagerbestand" #: company/templates/company/supplier_part_tabs.html:11 msgid "Orders" -msgstr "" +msgstr "Bestellungen" #: company/templates/company/tabs.html:9 #: order/templates/order/receive_parts.html:14 part/models.py:317 @@ -1766,149 +2068,181 @@ msgstr "" #: templates/InvenTree/settings/tabs.html:22 templates/navbar.html:19 #: templates/stats.html:35 templates/stats.html:44 users/models.py:33 msgid "Parts" -msgstr "" +msgstr "Teile" #: company/views.py:55 part/templates/part/tabs.html:42 #: templates/navbar.html:31 msgid "Suppliers" -msgstr "" +msgstr "Zulieferer" #: company/views.py:62 templates/navbar.html:32 msgid "Manufacturers" -msgstr "" +msgstr "Hersteller" #: company/views.py:69 templates/navbar.html:41 msgid "Customers" -msgstr "" +msgstr "Kunden" #: company/views.py:70 msgid "New Customer" -msgstr "" +msgstr "Neuer Kunde" #: company/views.py:78 msgid "Companies" -msgstr "" +msgstr "Firmen" #: company/views.py:79 msgid "New Company" -msgstr "" +msgstr "Neue Firma" #: company/views.py:157 msgid "Update Company Image" -msgstr "" +msgstr "Firmenbild aktualisieren" #: company/views.py:163 msgid "Updated company image" -msgstr "" +msgstr "Aktualisiertes Firmenbild" #: company/views.py:173 msgid "Edit Company" -msgstr "" +msgstr "Firma bearbeiten" #: company/views.py:178 msgid "Edited company information" -msgstr "" +msgstr "Firmeninformation bearbeitet" #: company/views.py:201 msgid "Create new Customer" -msgstr "" +msgstr "Neuen Kunden anlegen" #: company/views.py:203 msgid "Create new Company" -msgstr "" +msgstr "Neue Firma anlegen" #: company/views.py:230 msgid "Created new company" -msgstr "" +msgstr "Neue Firma angelegt" #: company/views.py:240 msgid "Delete Company" -msgstr "" +msgstr "Firma löschen" #: company/views.py:246 msgid "Company was deleted" -msgstr "" +msgstr "Firma gelöscht" #: company/views.py:271 msgid "Edit Supplier Part" -msgstr "" +msgstr "Zuliefererteil bearbeiten" -#: company/views.py:295 templates/js/stock.js:984 +#: company/views.py:295 templates/js/stock.js:1001 msgid "Create new Supplier Part" -msgstr "" +msgstr "Neues Zuliefererteil anlegen" #: company/views.py:415 msgid "Delete Supplier Part" -msgstr "" +msgstr "Zuliefererteil entfernen" -#: company/views.py:492 part/views.py:2571 +#: company/views.py:492 part/views.py:2573 +#, fuzzy +#| msgid "Add Price Break" msgid "Added new price break" -msgstr "" +msgstr "Preisstaffel hinzufügen" -#: company/views.py:548 part/views.py:2615 +#: company/views.py:548 part/views.py:2617 msgid "Edit Price Break" -msgstr "" +msgstr "Preisstaffel bearbeiten" -#: company/views.py:564 part/views.py:2631 +#: company/views.py:564 part/views.py:2633 msgid "Delete Price Break" +msgstr "Preisstaffel löschen" + +#: label/api.py:171 +#, fuzzy +#| msgid "Move Stock Items" +msgid "Must provide valid StockItem(s)" +msgstr "Lagerobjekte bewegen" + +#: label/api.py:185 label/api.py:337 +msgid "Error during label rendering" msgstr "" -#: label/models.py:55 -msgid "Label name" -msgstr "" - -#: label/models.py:58 -msgid "Label description" -msgstr "" - -#: label/models.py:63 -msgid "Label template file" +#: label/api.py:324 +msgid "Must provide valid StockLocation(s)" msgstr "" #: label/models.py:69 -msgid "Query filters (comma-separated list of key=value pairs" +#, fuzzy +#| msgid "Part name" +msgid "Label name" +msgstr "Name des Teils" + +#: label/models.py:76 +#, fuzzy +#| msgid "Part description" +msgid "Label description" +msgstr "Beschreibung des Teils" + +#: label/models.py:83 stock/forms.py:200 +msgid "Label" msgstr "" -#: label/models.py:75 +#: label/models.py:84 +msgid "Label template file" +msgstr "" + +#: label/models.py:90 report/models.py:162 +msgid "Enabled" +msgstr "" + +#: label/models.py:91 msgid "Label template is enabled" msgstr "" -#: label/models.py:76 report/models.py:162 -msgid "Enabled" +#: label/models.py:137 label/models.py:190 +msgid "Query filters (comma-separated list of key=value pairs" +msgstr "" + +#: label/models.py:138 label/models.py:191 +msgid "Filters" msgstr "" #: order/forms.py:25 order/templates/order/order_base.html:44 msgid "Place order" -msgstr "" +msgstr "Bestellung aufgeben" #: order/forms.py:36 order/templates/order/order_base.html:51 msgid "Mark order as complete" -msgstr "" +msgstr "Bestellung als vollständig markieren" #: order/forms.py:47 order/forms.py:58 order/templates/order/order_base.html:56 #: order/templates/order/sales_order_base.html:56 msgid "Cancel order" -msgstr "" +msgstr "Bestellung stornieren" #: order/forms.py:69 order/templates/order/sales_order_base.html:53 msgid "Ship order" -msgstr "" +msgstr "Bestellung versenden" #: order/forms.py:80 msgid "Receive parts to this location" -msgstr "" +msgstr "Teile in diesen Ort empfangen" #: order/forms.py:101 +#, fuzzy +#| msgid "Order reference" msgid "Purchase Order reference" -msgstr "" +msgstr "Bestell-Referenz" #: order/forms.py:107 msgid "Target date for order delivery. Order will be overdue after this date." msgstr "" #: order/forms.py:134 +#, fuzzy +#| msgid "Cancel sales order" msgid "Enter sales order number" -msgstr "" +msgstr "Auftrag stornieren" #: order/forms.py:140 order/models.py:437 msgid "" @@ -1917,23 +2251,25 @@ msgstr "" #: order/models.py:98 msgid "Order reference" -msgstr "" +msgstr "Bestell-Referenz" #: order/models.py:100 msgid "Order description" -msgstr "" +msgstr "Bestellungs-Beschreibung" #: order/models.py:102 msgid "Link to external page" -msgstr "" +msgstr "Link auf externe Seite" #: order/models.py:112 msgid "Order notes" -msgstr "" +msgstr "Bestell-Notizen" #: order/models.py:171 order/models.py:430 +#, fuzzy +#| msgid "Purchase Order Details" msgid "Purchase order status" -msgstr "" +msgstr "Bestelldetails" #: order/models.py:179 msgid "Company from which the items are being ordered" @@ -1941,19 +2277,23 @@ msgstr "" #: order/models.py:182 msgid "Supplier order reference code" -msgstr "" +msgstr "Bestellreferenz" #: order/models.py:193 +#, fuzzy +#| msgid "Issue Order" msgid "Issue Date" -msgstr "" +msgstr "Bestellung aufgeben" #: order/models.py:194 msgid "Date order was issued" msgstr "" #: order/models.py:199 +#, fuzzy +#| msgid "Shipment Date" msgid "Target Delivery Date" -msgstr "" +msgstr "Versanddatum" #: order/models.py:200 msgid "" @@ -1961,25 +2301,29 @@ msgid "" msgstr "" #: order/models.py:205 +#, fuzzy +#| msgid "Creation Date" msgid "Completion Date" -msgstr "" +msgstr "Erstelldatum" #: order/models.py:206 +#, fuzzy +#| msgid "Mark order as complete" msgid "Date order was completed" -msgstr "" +msgstr "Bestellung als vollständig markieren" -#: order/models.py:230 order/models.py:328 part/views.py:1504 -#: stock/models.py:257 stock/models.py:866 +#: order/models.py:230 order/models.py:328 part/views.py:1506 +#: stock/models.py:265 stock/models.py:881 msgid "Quantity must be greater than zero" -msgstr "" +msgstr "Anzahl muss größer Null sein" #: order/models.py:235 msgid "Part supplier must match PO supplier" -msgstr "" +msgstr "Teile-Zulieferer muss dem Zulieferer des Kaufvertrags entsprechen" #: order/models.py:323 msgid "Lines can only be received against an order marked as 'Placed'" -msgstr "" +msgstr "Nur Teile aufgegebener Bestllungen können empfangen werden" #: order/models.py:426 msgid "Company to which the items are being sold" @@ -1987,84 +2331,92 @@ msgstr "" #: order/models.py:432 msgid "Customer order reference code" -msgstr "" +msgstr "Bestellreferenz" #: order/models.py:490 msgid "SalesOrder cannot be shipped as it is not currently pending" -msgstr "" +msgstr "Bestellung kann nicht versendet werden weil sie nicht anhängig ist" #: order/models.py:577 msgid "Item quantity" -msgstr "" +msgstr "Anzahl" #: order/models.py:579 msgid "Line item reference" -msgstr "" +msgstr "Position - Referenz" #: order/models.py:581 msgid "Line item notes" -msgstr "" +msgstr "Position - Notizen" #: order/models.py:607 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:24 #: stock/templates/stock/item_base.html:296 templates/js/order.js:145 msgid "Purchase Order" -msgstr "" +msgstr "Kaufvertrag" #: order/models.py:620 msgid "Supplier part" -msgstr "" +msgstr "Zulieferer-Teil" #: order/models.py:623 msgid "Number of items received" -msgstr "" +msgstr "Empfangene Objekt-Anzahl" -#: order/models.py:630 stock/models.py:479 +#: order/models.py:630 stock/models.py:494 #: stock/templates/stock/item_base.html:303 +#, fuzzy +#| msgid "Purchase Order" msgid "Purchase Price" -msgstr "" +msgstr "Kaufvertrag" #: order/models.py:631 +#, fuzzy +#| msgid "Purchase Order" msgid "Unit purchase price" -msgstr "" +msgstr "Kaufvertrag" #: order/models.py:726 msgid "Cannot allocate stock item to a line with a different part" -msgstr "" +msgstr "Kann Lagerobjekt keiner Zeile mit einem anderen Teil hinzufügen" #: order/models.py:728 msgid "Cannot allocate stock to a line without a part" -msgstr "" +msgstr "Kann Lagerobjekt keiner Zeile ohne Teil hinzufügen" #: order/models.py:731 msgid "Allocation quantity cannot exceed stock quantity" -msgstr "" +msgstr "zugewiesene Anzahl darf nicht die verfügbare Anzahl überschreiten" #: order/models.py:741 msgid "Quantity must be 1 for serialized stock item" -msgstr "" +msgstr "Anzahl muss 1 für Objekte mit Seriennummer sein" #: order/models.py:757 msgid "Select stock item to allocate" -msgstr "" +msgstr "Lagerobjekt für Zuordnung auswählen" #: order/models.py:760 msgid "Enter stock allocation quantity" -msgstr "" +msgstr "Zuordnungsanzahl eingeben" #: order/templates/order/delete_attachment.html:5 #: stock/templates/stock/attachment_delete.html:5 #: templates/attachment_delete.html:5 msgid "Are you sure you want to delete this attachment?" -msgstr "" +msgstr "Sind Sie sicher, dass Sie diesen Anhang löschen wollen?" #: order/templates/order/order_base.html:40 +#, fuzzy +#| msgid "Edited company information" msgid "Edit order information" -msgstr "" +msgstr "Firmeninformation bearbeitet" #: order/templates/order/order_base.html:48 +#, fuzzy +#| msgid "Receive line item" msgid "Receive items" -msgstr "" +msgstr "Position empfangen" #: order/templates/order/order_base.html:61 msgid "Export order to file" @@ -2072,147 +2424,158 @@ msgstr "" #: order/templates/order/order_base.html:69 msgid "Purchase Order Details" -msgstr "" +msgstr "Bestelldetails" #: order/templates/order/order_base.html:74 #: order/templates/order/sales_order_base.html:74 msgid "Order Reference" -msgstr "" +msgstr "Bestellreferenz" #: order/templates/order/order_base.html:79 #: order/templates/order/sales_order_base.html:79 msgid "Order Status" -msgstr "" +msgstr "Bestellstatus" #: order/templates/order/order_base.html:95 templates/js/order.js:175 msgid "Supplier Reference" -msgstr "" +msgstr "Zuliefererreferenz" #: order/templates/order/order_base.html:114 msgid "Issued" -msgstr "" +msgstr "Aufgegeben" #: order/templates/order/order_base.html:128 #: order/templates/order/purchase_order_detail.html:193 #: order/templates/order/receive_parts.html:22 #: order/templates/order/sales_order_base.html:128 msgid "Received" -msgstr "" +msgstr "Empfangen" #: order/templates/order/order_cancel.html:7 #: order/templates/order/sales_order_cancel.html:9 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" +"Abbruch dieser Bestellung bedeutet, dass sie nicht länger bearbeitbar ist." #: order/templates/order/order_notes.html:13 #: order/templates/order/order_notes.html:29 #: order/templates/order/sales_order_notes.html:18 #: order/templates/order/sales_order_notes.html:34 msgid "Order Notes" -msgstr "" +msgstr "Bestellungsbemerkungen" #: order/templates/order/order_wizard/select_parts.html:9 msgid "Step 1 of 2 - Select Part Suppliers" -msgstr "" +msgstr "Schritt 1 von 2 - Zulieferer auswählen" #: order/templates/order/order_wizard/select_parts.html:14 +#, fuzzy +#| msgid "Select suppliers." msgid "Select suppliers" -msgstr "" +msgstr "Zulieferer auswählen." #: order/templates/order/order_wizard/select_parts.html:18 +#, fuzzy +#| msgid "No purchaseable parts selected." msgid "No purchaseable parts selected" -msgstr "" +msgstr "Keine kaufbaren Teile ausgewählt." #: order/templates/order/order_wizard/select_parts.html:31 msgid "Select Supplier" -msgstr "" +msgstr "Zulieferer auswählen" #: order/templates/order/order_wizard/select_parts.html:57 msgid "Select a supplier for" -msgstr "" +msgstr "Zulieferer auswählen für" #: order/templates/order/order_wizard/select_pos.html:8 msgid "Step 2 of 2 - Select Purchase Orders" -msgstr "" +msgstr "Schritt 2 von 2 - Bestellung auswählen" #: order/templates/order/order_wizard/select_pos.html:12 msgid "Select existing purchase orders, or create new orders." -msgstr "" +msgstr "Bestellungen auswählen oder anlegen." #: order/templates/order/order_wizard/select_pos.html:31 #: templates/js/order.js:203 templates/js/order.js:302 msgid "Items" -msgstr "" +msgstr "Positionen" #: order/templates/order/order_wizard/select_pos.html:32 msgid "Select Purchase Order" -msgstr "" +msgstr "Bestellung auswählen" #: order/templates/order/order_wizard/select_pos.html:67 msgid "Select a purchase order for" -msgstr "" +msgstr "Bestellung auswählen für" #: order/templates/order/po_attachments.html:11 msgid "Purchase Order Attachments" -msgstr "" +msgstr "Bestellanhänge" #: order/templates/order/po_received_items.html:11 #: order/templates/order/po_tabs.html:8 +#, fuzzy +#| msgid "Receive line item" msgid "Received Items" -msgstr "" +msgstr "Position empfangen" #: order/templates/order/po_tabs.html:5 +#, fuzzy +#| msgid "Add Line Item" msgid "Line Items" -msgstr "" +msgstr "Position hinzufügen" #: order/templates/order/purchase_order_detail.html:17 #: order/templates/order/sales_order_detail.html:19 order/views.py:1119 #: order/views.py:1203 msgid "Add Line Item" -msgstr "" +msgstr "Position hinzufügen" #: order/templates/order/purchase_order_detail.html:21 msgid "Purchase Order Items" -msgstr "" +msgstr "Bestellpositionen" #: order/templates/order/purchase_order_detail.html:39 #: order/templates/order/purchase_order_detail.html:119 #: part/templates/part/category.html:173 part/templates/part/category.html:215 -#: templates/js/stock.js:642 templates/js/stock.js:989 +#: templates/js/stock.js:647 templates/js/stock.js:1006 msgid "New Location" -msgstr "" +msgstr "Neuer Standort" #: order/templates/order/purchase_order_detail.html:40 #: order/templates/order/purchase_order_detail.html:120 #: stock/templates/stock/location.html:35 msgid "Create new stock location" -msgstr "" +msgstr "Neuen Lagerort anlegen" #: order/templates/order/purchase_order_detail.html:132 msgid "No line items found" -msgstr "" +msgstr "Keine Positionen gefunden" #: order/templates/order/purchase_order_detail.html:166 #: order/templates/order/receive_parts.html:20 msgid "Order Code" -msgstr "" +msgstr "Bestellnummer" #: order/templates/order/purchase_order_detail.html:184 +#, fuzzy +#| msgid "Price" msgid "Unit Price" -msgstr "" +msgstr "Preis" #: order/templates/order/purchase_order_detail.html:225 #: order/templates/order/sales_order_detail.html:285 msgid "Edit line item" -msgstr "" +msgstr "Position bearbeiten" #: order/templates/order/purchase_order_detail.html:226 msgid "Delete line item" -msgstr "" +msgstr "Position löschen" #: order/templates/order/purchase_order_detail.html:231 msgid "Receive line item" -msgstr "" +msgstr "Position empfangen" #: order/templates/order/receive_parts.html:8 msgid "Receive outstanding parts for" @@ -2225,11 +2588,13 @@ msgstr "" #: order/templates/order/receive_parts.html:21 #: part/templates/part/part_base.html:145 templates/js/part.js:434 msgid "On Order" -msgstr "" +msgstr "bestellt" #: order/templates/order/receive_parts.html:23 +#, fuzzy +#| msgid "Received" msgid "Receive" -msgstr "" +msgstr "Empfangen" #: order/templates/order/receive_parts.html:36 msgid "Error: Referenced part has been removed" @@ -2237,142 +2602,146 @@ msgstr "" #: order/templates/order/sales_order_base.html:15 msgid "This SalesOrder has not been fully allocated" -msgstr "" +msgstr "Dieser Auftrag ist nicht vollständig zugeordnet" #: order/templates/order/sales_order_base.html:61 msgid "Packing List" -msgstr "" +msgstr "Packliste" #: order/templates/order/sales_order_base.html:69 msgid "Sales Order Details" -msgstr "" +msgstr "Auftragsdetails" #: order/templates/order/sales_order_base.html:95 templates/js/order.js:268 msgid "Customer Reference" -msgstr "" +msgstr "Kundenreferenz" #: order/templates/order/sales_order_cancel.html:8 #: order/templates/order/sales_order_ship.html:9 #: part/templates/part/bom_duplicate.html:12 #: stock/templates/stock/stockitem_convert.html:13 msgid "Warning" -msgstr "" +msgstr "Warnung" #: order/templates/order/sales_order_detail.html:14 msgid "Sales Order Items" -msgstr "" +msgstr "Auftragspositionen" #: order/templates/order/sales_order_detail.html:72 -#: order/templates/order/sales_order_detail.html:154 stock/models.py:391 +#: order/templates/order/sales_order_detail.html:154 stock/models.py:406 #: stock/templates/stock/item_base.html:228 templates/js/build.js:418 msgid "Serial Number" -msgstr "" +msgstr "Seriennummer" #: order/templates/order/sales_order_detail.html:96 templates/js/build.js:459 #: templates/js/build.js:769 msgid "Edit stock allocation" -msgstr "" +msgstr "Lagerobjekt-Standort bearbeiten" #: order/templates/order/sales_order_detail.html:97 templates/js/build.js:461 #: templates/js/build.js:770 msgid "Delete stock allocation" -msgstr "" +msgstr "Zuweisung löschen" #: order/templates/order/sales_order_detail.html:225 #: part/templates/part/tabs.html:23 templates/js/build.js:523 #: templates/js/build.js:765 msgid "Allocated" -msgstr "" +msgstr "Zugeordnet" #: order/templates/order/sales_order_detail.html:227 msgid "Fulfilled" -msgstr "" +msgstr "Erledigt" #: order/templates/order/sales_order_detail.html:275 msgid "Buy parts" -msgstr "" +msgstr "Teile kaufen" #: order/templates/order/sales_order_detail.html:279 msgid "Build parts" -msgstr "" +msgstr "Bauteile" #: order/templates/order/sales_order_detail.html:282 msgid "Allocate parts" -msgstr "" +msgstr "Teile zuordnen" #: order/templates/order/sales_order_detail.html:286 msgid "Delete line item " -msgstr "" +msgstr "Position löschen" #: order/templates/order/sales_order_ship.html:10 msgid "" "This order has not been fully allocated. If the order is marked as shipped, " "it can no longer be adjusted." msgstr "" +"Dieser Auftrag ist nicht vollständig zugeordnet. Wenn der Auftrag als " +"versendet markiert wird, kann er nicht mehr geändert werden." #: order/templates/order/sales_order_ship.html:12 msgid "Ensure that the order allocation is correct before shipping the order." -msgstr "" +msgstr "Vor dem Versand sicherstellen, dass die Zuordnung richtig ist." #: order/templates/order/sales_order_ship.html:18 msgid "Some line items in this order have been over-allocated" -msgstr "" +msgstr "Einige Positionen dieses Auftrags sind überzugeordnet" #: order/templates/order/sales_order_ship.html:20 msgid "Ensure that this is correct before shipping the order." -msgstr "" +msgstr "Vor dem Versand sicherstellen, dass dies richtig ist" #: order/templates/order/sales_order_ship.html:27 msgid "Shipping this order means that the order will no longer be editable." msgstr "" +"Versenden dieses Auftrags bedeutet, dass der Auftrag nicht mehr bearbeitbar " +"ist." #: order/templates/order/so_allocation_delete.html:7 msgid "This action will unallocate the following stock from the Sales Order" -msgstr "" +msgstr "Diese Aktion wird die folgenden Lagerobjekte vom Auftrag entfernen" #: order/templates/order/so_attachments.html:11 msgid "Sales Order Attachments" -msgstr "" +msgstr "Auftragsanhänge" #: order/templates/order/so_lineitem_delete.html:5 msgid "Are you sure you wish to delete this line item?" -msgstr "" +msgstr "Sind Sie sicher, dass Sie diese Position löschen möchten?" #: order/templates/order/so_tabs.html:5 msgid "Order Items" -msgstr "" +msgstr "Bestellungspositionen" #: order/views.py:101 msgid "Add Purchase Order Attachment" -msgstr "" +msgstr "Bestellanhang hinzufügen" #: order/views.py:152 msgid "Add Sales Order Attachment" -msgstr "" +msgstr "Auftragsanhang hinzufügen" #: order/views.py:312 msgid "Create Purchase Order" -msgstr "" +msgstr "Bestellung anlegen" #: order/views.py:348 msgid "Create Sales Order" -msgstr "" +msgstr "Auftrag anlegen" #: order/views.py:384 msgid "Edit Purchase Order" -msgstr "" +msgstr "Bestellung bearbeiten" #: order/views.py:405 msgid "Edit Sales Order" -msgstr "" +msgstr "Auftrag bearbeiten" #: order/views.py:422 msgid "Cancel Order" -msgstr "" +msgstr "Bestellung stornieren" #: order/views.py:432 order/views.py:459 msgid "Confirm order cancellation" -msgstr "" +msgstr "Bestellstornierung bestätigen" #: order/views.py:435 order/views.py:462 msgid "Order cannot be cancelled" @@ -2380,137 +2749,145 @@ msgstr "" #: order/views.py:449 msgid "Cancel sales order" -msgstr "" +msgstr "Auftrag stornieren" #: order/views.py:476 msgid "Issue Order" -msgstr "" +msgstr "Bestellung aufgeben" #: order/views.py:486 msgid "Confirm order placement" -msgstr "" +msgstr "Bestellungstätigung bestätigen" #: order/views.py:496 +#, fuzzy +#| msgid "Purchase Order Details" msgid "Purchase order issued" -msgstr "" +msgstr "Bestelldetails" #: order/views.py:507 msgid "Complete Order" -msgstr "" +msgstr "Auftrag fertigstellen" #: order/views.py:524 +#, fuzzy +#| msgid "Confirm build completion" msgid "Confirm order completion" -msgstr "" +msgstr "Bau-Fertigstellung bestätigen" #: order/views.py:535 +#, fuzzy +#| msgid "Mark order as complete" msgid "Purchase order completed" -msgstr "" +msgstr "Bestellung als vollständig markieren" #: order/views.py:545 msgid "Ship Order" -msgstr "" +msgstr "Versenden" #: order/views.py:562 msgid "Confirm order shipment" -msgstr "" +msgstr "Versand bestätigen" #: order/views.py:568 msgid "Could not ship order" -msgstr "" +msgstr "Versand fehlgeschlagen" #: order/views.py:620 msgid "Receive Parts" -msgstr "" +msgstr "Teile empfangen" #: order/views.py:688 msgid "Items received" -msgstr "" +msgstr "Anzahl empfangener Positionen" #: order/views.py:702 msgid "No destination set" -msgstr "" +msgstr "Kein Ziel gesetzt" #: order/views.py:747 msgid "Error converting quantity to number" -msgstr "" +msgstr "Fehler beim Konvertieren zu Zahl" #: order/views.py:753 msgid "Receive quantity less than zero" -msgstr "" +msgstr "Anzahl kleiner null empfangen" #: order/views.py:759 msgid "No lines specified" -msgstr "" +msgstr "Keine Zeilen angegeben" #: order/views.py:1129 +#, fuzzy +#| msgid "Supplier part description" msgid "Supplier part must be specified" -msgstr "" +msgstr "Zuliefererbeschreibung des Teils" #: order/views.py:1135 msgid "Supplier must match for Part and Order" -msgstr "" +msgstr "Zulieferer muss zum Teil und zur Bestellung passen" #: order/views.py:1255 order/views.py:1274 msgid "Edit Line Item" -msgstr "" +msgstr "Position bearbeiten" #: order/views.py:1291 order/views.py:1304 msgid "Delete Line Item" -msgstr "" +msgstr "Position löschen" #: order/views.py:1297 order/views.py:1310 msgid "Deleted line item" -msgstr "" +msgstr "Position gelöscht" #: order/views.py:1319 msgid "Allocate Stock to Order" -msgstr "" +msgstr "Lagerbestand dem Auftrag zuweisen" #: order/views.py:1394 msgid "Edit Allocation Quantity" -msgstr "" +msgstr "Zuordnung bearbeiten" #: order/views.py:1410 msgid "Remove allocation" -msgstr "" +msgstr "Zuordnung entfernen" #: part/bom.py:138 part/models.py:722 part/templates/part/category.html:61 #: part/templates/part/detail.html:87 msgid "Default Location" -msgstr "" +msgstr "Standard-Lagerort" #: part/bom.py:139 part/templates/part/part_base.html:118 msgid "Available Stock" -msgstr "" +msgstr "Verfügbarer Lagerbestand" #: part/bom.py:274 #, python-brace-format msgid "Unsupported file format: {f}" -msgstr "" +msgstr "Nicht unterstütztes Dateiformat: {f}" #: part/bom.py:279 msgid "Error reading BOM file (invalid data)" -msgstr "" +msgstr "Fehler beim Lesen der Stückliste (ungültige Daten)" #: part/bom.py:281 msgid "Error reading BOM file (incorrect row size)" -msgstr "" +msgstr "Fehler beim Lesen der Stückliste (ungültige Zeilengröße)" #: part/forms.py:71 stock/forms.py:263 msgid "File Format" -msgstr "" +msgstr "Dateiformat" #: part/forms.py:71 stock/forms.py:263 msgid "Select output file format" -msgstr "" +msgstr "Ausgabe-Dateiformat auswählen" #: part/forms.py:73 msgid "Cascading" -msgstr "" +msgstr "Kaskadierend" #: part/forms.py:73 msgid "Download cascading / multi-level BOM" -msgstr "" +msgstr "Kaskadierende Stückliste herunterladen" #: part/forms.py:75 msgid "Levels" @@ -2521,24 +2898,32 @@ msgid "Select maximum number of BOM levels to export (0 = all levels)" msgstr "" #: part/forms.py:77 +#, fuzzy +#| msgid "New Parameter" msgid "Include Parameter Data" -msgstr "" +msgstr "Neuer Parameter" #: part/forms.py:77 msgid "Include part parameters data in exported BOM" msgstr "" #: part/forms.py:79 +#, fuzzy +#| msgid "Include stock in sublocations" msgid "Include Stock Data" -msgstr "" +msgstr "Bestand in Unterlagerorten einschließen" #: part/forms.py:79 +#, fuzzy +#| msgid "Include parts in subcategories" msgid "Include part stock data in exported BOM" -msgstr "" +msgstr "Teile in Unterkategorien einschließen" #: part/forms.py:81 +#, fuzzy +#| msgid "New Supplier Part" msgid "Include Supplier Data" -msgstr "" +msgstr "Neues Zulieferer-Teil" #: part/forms.py:81 msgid "Include part supplier data in exported BOM" @@ -2546,39 +2931,51 @@ msgstr "" #: part/forms.py:102 part/models.py:1781 msgid "Parent Part" -msgstr "" +msgstr "Ausgangsteil" #: part/forms.py:103 part/templates/part/bom_duplicate.html:7 +#, fuzzy +#| msgid "Select parent part" msgid "Select parent part to copy BOM from" -msgstr "" +msgstr "Ausgangsteil auswählen" #: part/forms.py:109 +#, fuzzy +#| msgid "Select from existing images" msgid "Clear existing BOM items" -msgstr "" +msgstr "Aus vorhandenen Bildern auswählen" #: part/forms.py:114 +#, fuzzy +#| msgid "Confim BOM item deletion" msgid "Confirm BOM duplication" -msgstr "" +msgstr "Löschung von BOM-Position bestätigen" #: part/forms.py:132 msgid "Confirm that the BOM is correct" -msgstr "" +msgstr "Bestätigen, dass die Stückliste korrekt ist" #: part/forms.py:144 msgid "Select BOM file to upload" -msgstr "" +msgstr "Stücklisten-Datei zum Upload auswählen" #: part/forms.py:163 +#, fuzzy +#| msgid "Delete Parts" msgid "Related Part" -msgstr "" +msgstr "Teile löschen" #: part/forms.py:182 msgid "Select part category" -msgstr "" +msgstr "Teilekategorie wählen" #: part/forms.py:199 +#, fuzzy +#| msgid "Perform 'deep copy' which will duplicate all BOM data for this part" msgid "Duplicate all BOM data for this part" msgstr "" +"Tiefe Kopie ausführen. Dies wird alle Daten der Stückliste für dieses Teil " +"duplizieren" #: part/forms.py:200 msgid "Copy BOM" @@ -2589,68 +2986,82 @@ msgid "Duplicate all parameter data for this part" msgstr "" #: part/forms.py:206 +#, fuzzy +#| msgid "Parameters" msgid "Copy Parameters" -msgstr "" +msgstr "Parameter" #: part/forms.py:211 msgid "Confirm part creation" -msgstr "" +msgstr "Erstellen des Teils bestätigen" #: part/forms.py:216 +#, fuzzy +#| msgid "No part parameter templates found" msgid "Include category parameter templates" -msgstr "" +msgstr "Keine Teilparametervorlagen gefunden" #: part/forms.py:221 +#, fuzzy +#| msgid "No part parameter templates found" msgid "Include parent categories parameter templates" -msgstr "" +msgstr "Keine Teilparametervorlagen gefunden" #: part/forms.py:301 +#, fuzzy +#| msgid "Parameter template name must be unique" msgid "Add parameter template to same level categories" -msgstr "" +msgstr "Vorlagen-Name des Parameters muss eindeutig sein" #: part/forms.py:305 +#, fuzzy +#| msgid "Parameter template name must be unique" msgid "Add parameter template to all categories" -msgstr "" +msgstr "Vorlagen-Name des Parameters muss eindeutig sein" #: part/forms.py:349 msgid "Input quantity for price calculation" -msgstr "" +msgstr "Eintragsmenge zur Preisberechnung" #: part/models.py:68 msgid "Default location for parts in this category" -msgstr "" +msgstr "Standard-Standort für Teile dieser Kategorie" #: part/models.py:71 msgid "Default keywords for parts in this category" -msgstr "" +msgstr "Standard-Stichworte für Teile dieser Kategorie" #: part/models.py:77 part/models.py:1826 #: part/templates/part/part_app_base.html:9 msgid "Part Category" -msgstr "" +msgstr "Teilkategorie" #: part/models.py:78 part/templates/part/category.html:18 #: part/templates/part/category.html:89 templates/stats.html:39 #: users/models.py:32 msgid "Part Categories" -msgstr "" +msgstr "Teile-Kategorien" #: part/models.py:409 part/models.py:419 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" -msgstr "" +msgstr "Teil '{p1}' wird in Stückliste für Teil '{p2}' benutzt (rekursiv)" #: part/models.py:516 +#, fuzzy +#| msgid "No serial numbers found" msgid "Next available serial numbers are" -msgstr "" +msgstr "Keine Seriennummern gefunden" #: part/models.py:520 msgid "Next available serial number is" msgstr "" #: part/models.py:525 +#, fuzzy +#| msgid "Empty serial number string" msgid "Most recent serial number is" -msgstr "" +msgstr "Keine Seriennummer angegeben" #: part/models.py:604 msgid "Duplicate IPN not allowed in part settings" @@ -2658,83 +3069,87 @@ msgstr "" #: part/models.py:615 msgid "Part must be unique for name, IPN and revision" -msgstr "" +msgstr "Namen, Teile- und Revisionsnummern müssen eindeutig sein" #: part/models.py:646 part/templates/part/detail.html:19 msgid "Part name" -msgstr "" +msgstr "Name des Teils" #: part/models.py:653 +#, fuzzy +#| msgid "Template" msgid "Is Template" -msgstr "" +msgstr "Vorlage" #: part/models.py:654 msgid "Is this part a template part?" -msgstr "" +msgstr "Ist dieses Teil eine Vorlage?" #: part/models.py:665 msgid "Is this part a variant of another part?" -msgstr "" +msgstr "Ist dieses Teil eine Variante eines anderen Teils?" #: part/models.py:666 part/templates/part/detail.html:57 msgid "Variant Of" -msgstr "" +msgstr "Variante von" #: part/models.py:672 msgid "Part description" -msgstr "" +msgstr "Beschreibung des Teils" #: part/models.py:677 part/templates/part/category.html:68 #: part/templates/part/detail.html:64 msgid "Keywords" -msgstr "" +msgstr "Schlüsselwörter" #: part/models.py:678 msgid "Part keywords to improve visibility in search results" -msgstr "" +msgstr "Schlüsselworte um die Sichtbarkeit in Suchergebnissen zu verbessern" #: part/models.py:685 part/templates/part/detail.html:70 #: part/templates/part/set_category.html:15 templates/js/part.js:405 msgid "Category" -msgstr "" +msgstr "Kategorie" #: part/models.py:686 msgid "Part category" -msgstr "" +msgstr "Teile-Kategorie" #: part/models.py:691 part/templates/part/detail.html:25 #: part/templates/part/part_base.html:95 templates/js/part.js:180 msgid "IPN" -msgstr "" +msgstr "IPN (Interne Produktnummer)" #: part/models.py:692 msgid "Internal Part Number" -msgstr "" +msgstr "Interne Teilenummer" #: part/models.py:698 msgid "Part revision or version number" -msgstr "" +msgstr "Revisions- oder Versionsnummer" #: part/models.py:699 part/templates/part/detail.html:32 #: templates/js/part.js:184 msgid "Revision" -msgstr "" +msgstr "Revision" #: part/models.py:720 msgid "Where is this item normally stored?" -msgstr "" +msgstr "Wo wird dieses Teil normalerweise gelagert?" #: part/models.py:767 part/templates/part/detail.html:94 msgid "Default Supplier" -msgstr "" +msgstr "Standard-Zulieferer" #: part/models.py:768 msgid "Default supplier part" -msgstr "" +msgstr "Standard-Zulieferer?" #: part/models.py:775 +#, fuzzy +#| msgid "Default Supplier" msgid "Default Expiry" -msgstr "" +msgstr "Standard-Zulieferer" #: part/models.py:776 msgid "Expiry time (in days) for stock items of this part" @@ -2742,107 +3157,127 @@ msgstr "" #: part/models.py:781 part/templates/part/detail.html:108 msgid "Minimum Stock" -msgstr "" +msgstr "Minimaler Lagerbestand" #: part/models.py:782 msgid "Minimum allowed stock level" -msgstr "" +msgstr "Minimal zulässiger Lagerbestand" #: part/models.py:788 part/templates/part/detail.html:102 #: part/templates/part/params.html:26 msgid "Units" -msgstr "" +msgstr "Einheiten" #: part/models.py:789 msgid "Stock keeping units for this part" -msgstr "" +msgstr "Stock Keeping Units (SKU) für dieses Teil" #: part/models.py:795 msgid "Can this part be built from other parts?" -msgstr "" +msgstr "Kann dieses Teil aus anderen Teilen angefertigt werden?" #: part/models.py:801 msgid "Can this part be used to build other parts?" -msgstr "" +msgstr "Kann dieses Teil zum Bau von anderen genutzt werden?" #: part/models.py:807 msgid "Does this part have tracking for unique items?" -msgstr "" +msgstr "Hat dieses Teil Tracking für einzelne Objekte?" #: part/models.py:812 msgid "Can this part be purchased from external suppliers?" -msgstr "" +msgstr "Kann dieses Teil von externen Zulieferern gekauft werden?" #: part/models.py:817 msgid "Can this part be sold to customers?" -msgstr "" +msgstr "Kann dieses Teil an Kunden verkauft werden?" #: part/models.py:821 part/templates/part/detail.html:222 #: templates/js/table_filters.js:19 templates/js/table_filters.js:55 #: templates/js/table_filters.js:196 templates/js/table_filters.js:265 msgid "Active" -msgstr "" +msgstr "Aktiv" #: part/models.py:822 msgid "Is this part active?" -msgstr "" +msgstr "Ist dieses Teil aktiv?" #: part/models.py:827 msgid "Is this a virtual part, such as a software product or license?" -msgstr "" +msgstr "Ist dieses Teil virtuell, wie zum Beispiel eine Software oder Lizenz?" #: part/models.py:832 msgid "Part notes - supports Markdown formatting" -msgstr "" +msgstr "Bemerkungen - unterstüzt Markdown-Formatierung" #: part/models.py:835 msgid "Stored BOM checksum" -msgstr "" +msgstr "Prüfsumme der Stückliste gespeichert" #: part/models.py:1654 +#, fuzzy +#| msgid "Stock item cannot be created for a template Part" msgid "Test templates can only be created for trackable parts" -msgstr "" +msgstr "Lagerobjekt kann nicht für Vorlagen-Teile angelegt werden" #: part/models.py:1671 +#, fuzzy +#| msgid "" +#| "A stock item with this serial number already exists for template part " +#| "{part}" msgid "Test with this name already exists for this part" msgstr "" +"Ein Teil mit dieser Seriennummer existiert bereits für die Teilevorlage " +"{part}" #: part/models.py:1690 templates/js/part.js:567 templates/js/stock.js:103 +#, fuzzy +#| msgid "Instance Name" msgid "Test Name" -msgstr "" +msgstr "Instanzname" #: part/models.py:1691 +#, fuzzy +#| msgid "Serial number for this item" msgid "Enter a name for the test" -msgstr "" +msgstr "Seriennummer für dieses Teil" #: part/models.py:1696 +#, fuzzy +#| msgid "Description" msgid "Test Description" -msgstr "" +msgstr "Beschreibung" #: part/models.py:1697 +#, fuzzy +#| msgid "Brief description of the build" msgid "Enter description for this test" -msgstr "" +msgstr "Kurze Beschreibung des Baus" #: part/models.py:1702 templates/js/part.js:576 #: templates/js/table_filters.js:182 msgid "Required" -msgstr "" +msgstr "benötigt" #: part/models.py:1703 msgid "Is this test required to pass?" msgstr "" #: part/models.py:1708 templates/js/part.js:584 +#, fuzzy +#| msgid "Required Parts" msgid "Requires Value" -msgstr "" +msgstr "benötigte Teile" #: part/models.py:1709 msgid "Does this test require a value when adding a test result?" msgstr "" #: part/models.py:1714 templates/js/part.js:591 +#, fuzzy +#| msgid "Delete Attachment" msgid "Requires Attachment" -msgstr "" +msgstr "Anhang löschen" #: part/models.py:1715 msgid "Does this test require a file attachment when adding a test result?" @@ -2850,77 +3285,89 @@ msgstr "" #: part/models.py:1748 msgid "Parameter template name must be unique" -msgstr "" +msgstr "Vorlagen-Name des Parameters muss eindeutig sein" #: part/models.py:1753 msgid "Parameter Name" -msgstr "" +msgstr "Name des Parameters" #: part/models.py:1755 msgid "Parameter Units" -msgstr "" +msgstr "Parameter Einheit" #: part/models.py:1783 part/models.py:1831 #: templates/InvenTree/settings/category.html:62 msgid "Parameter Template" -msgstr "" +msgstr "Parameter Vorlage" #: part/models.py:1785 msgid "Parameter Value" -msgstr "" +msgstr "Parameter Wert" #: part/models.py:1835 +#, fuzzy +#| msgid "Parameter Value" msgid "Default Parameter Value" -msgstr "" +msgstr "Parameter Wert" #: part/models.py:1865 msgid "Select parent part" -msgstr "" +msgstr "Ausgangsteil auswählen" #: part/models.py:1873 msgid "Select part to be used in BOM" -msgstr "" +msgstr "Teil für die Nutzung in der Stückliste auswählen" #: part/models.py:1879 msgid "BOM quantity for this BOM item" -msgstr "" +msgstr "Stücklisten-Anzahl für dieses Stücklisten-Teil" #: part/models.py:1881 +#, fuzzy +#| msgid "Confim BOM item deletion" msgid "This BOM item is optional" -msgstr "" +msgstr "Löschung von BOM-Position bestätigen" #: part/models.py:1884 msgid "Estimated build wastage quantity (absolute or percentage)" -msgstr "" +msgstr "Geschätzter Ausschuss (absolut oder prozentual)" #: part/models.py:1887 msgid "BOM item reference" -msgstr "" +msgstr "Referenz des Objekts auf der Stückliste" #: part/models.py:1890 msgid "BOM item notes" -msgstr "" +msgstr "Notizen zum Stücklisten-Objekt" #: part/models.py:1892 msgid "BOM line checksum" -msgstr "" +msgstr "Prüfsumme der Stückliste" -#: part/models.py:1963 part/views.py:1510 part/views.py:1562 -#: stock/models.py:247 +#: part/models.py:1963 part/views.py:1512 part/views.py:1564 +#: stock/models.py:255 +#, fuzzy +#| msgid "Overage must be an integer value or a percentage" msgid "Quantity must be integer value for trackable parts" -msgstr "" +msgstr "Überschuss muss eine Ganzzahl oder ein Prozentwert sein" #: part/models.py:1972 part/models.py:1974 +#, fuzzy +#| msgid "Supplier part description" msgid "Sub part must be specified" -msgstr "" +msgstr "Zuliefererbeschreibung des Teils" #: part/models.py:1977 +#, fuzzy +#| msgid "New BOM Item" msgid "BOM Item" -msgstr "" +msgstr "Neue Stücklistenposition" #: part/models.py:2098 +#, fuzzy +#| msgid "Select a part" msgid "Select Related Part" -msgstr "" +msgstr "Teil auswählen" #: part/models.py:2130 msgid "" @@ -2930,12 +3377,12 @@ msgstr "" #: part/templates/part/allocation.html:10 msgid "Part Stock Allocations" -msgstr "" +msgstr "Teilbestandszuordnungen" #: part/templates/part/allocation.html:14 #: part/templates/part/allocation.html:41 msgid "Order" -msgstr "" +msgstr "Bestellung" #: part/templates/part/allocation.html:15 #: part/templates/part/allocation.html:21 @@ -2945,25 +3392,25 @@ msgstr "" #: stock/templates/stock/item_base.html:89 #: stock/templates/stock/item_base.html:311 #: stock/templates/stock/stock_adjust.html:16 templates/js/build.js:751 -#: templates/js/stock.js:822 templates/js/stock.js:1082 +#: templates/js/stock.js:839 templates/js/stock.js:1099 msgid "Stock Item" -msgstr "" +msgstr "Lagerobjekt" #: part/templates/part/attachments.html:8 msgid "Part Attachments" -msgstr "" +msgstr "Anhänge" #: part/templates/part/bom.html:13 msgid "Bill of Materials" -msgstr "" +msgstr "Stückliste" #: part/templates/part/bom.html:34 msgid "Remove selected BOM items" -msgstr "" +msgstr "Ausgewählte Stücklistenpositionen entfernen" #: part/templates/part/bom.html:37 msgid "Import BOM data" -msgstr "" +msgstr "Stückliste importieren" #: part/templates/part/bom.html:38 msgid "Import from File" @@ -2974,75 +3421,95 @@ msgid "Copy BOM from parent part" msgstr "" #: part/templates/part/bom.html:42 +#, fuzzy +#| msgid "Parameters" msgid "Copy from Parent" -msgstr "" +msgstr "Parameter" #: part/templates/part/bom.html:45 msgid "New BOM Item" -msgstr "" +msgstr "Neue Stücklistenposition" #: part/templates/part/bom.html:46 +#, fuzzy +#| msgid "Add Line Item" msgid "Add Item" -msgstr "" +msgstr "Position hinzufügen" #: part/templates/part/bom.html:48 msgid "Finish Editing" -msgstr "" +msgstr "Bearbeitung beenden" #: part/templates/part/bom.html:49 +#, fuzzy +#| msgid "Finish Editing" msgid "Finished" -msgstr "" +msgstr "Bearbeitung beenden" #: part/templates/part/bom.html:53 msgid "Edit BOM" -msgstr "" +msgstr "Stückliste bearbeiten" #: part/templates/part/bom.html:54 part/templates/part/params.html:38 #: templates/InvenTree/settings/user.html:19 msgid "Edit" -msgstr "" +msgstr "Bearbeiten" #: part/templates/part/bom.html:57 msgid "Validate Bill of Materials" -msgstr "" +msgstr "Stückliste validieren" #: part/templates/part/bom.html:58 +#, fuzzy +#| msgid "Validate BOM" msgid "Validate" -msgstr "" +msgstr "BOM validieren" -#: part/templates/part/bom.html:62 part/views.py:1801 +#: part/templates/part/bom.html:62 part/views.py:1803 msgid "Export Bill of Materials" -msgstr "" +msgstr "Stückliste exportieren" #: part/templates/part/bom.html:123 +#, fuzzy +#| msgid "Remove selected BOM items" msgid "Delete selected BOM items?" -msgstr "" +msgstr "Ausgewählte Stücklistenpositionen entfernen" #: part/templates/part/bom.html:124 +#, fuzzy +#| msgid "Remove selected BOM items" msgid "All selected BOM items will be deleted" -msgstr "" +msgstr "Ausgewählte Stücklistenpositionen entfernen" #: part/templates/part/bom_duplicate.html:13 +#, fuzzy +#| msgid "Export Bill of Materials" msgid "This part already has a Bill of Materials" -msgstr "" +msgstr "Stückliste exportieren" #: part/templates/part/bom_upload/select_fields.html:8 #: part/templates/part/bom_upload/select_parts.html:8 #: part/templates/part/bom_upload/upload_file.html:10 +#, fuzzy +#| msgid "Export Bill of Materials" msgid "Upload Bill of Materials" -msgstr "" +msgstr "Stückliste exportieren" #: part/templates/part/bom_upload/select_fields.html:10 +#, fuzzy +#| msgid "Step 1 of 2 - Select Part Suppliers" msgid "Step 2 - Select Fields" -msgstr "" +msgstr "Schritt 1 von 2 - Zulieferer auswählen" #: part/templates/part/bom_upload/select_fields.html:15 msgid "Missing selections for the following required columns" msgstr "" #: part/templates/part/bom_upload/select_fields.html:26 +#, fuzzy +#| msgid "Sublocations" msgid "Submit Selections" -msgstr "" +msgstr "Sub-Standorte" #: part/templates/part/bom_upload/select_fields.html:35 msgid "File Fields" @@ -3053,20 +3520,26 @@ msgid "Match Fields" msgstr "" #: part/templates/part/bom_upload/select_fields.html:62 +#, fuzzy +#| msgid "Duplicate part selected" msgid "Duplicate column selection" -msgstr "" +msgstr "Teil doppelt ausgewählt" #: part/templates/part/bom_upload/select_parts.html:10 +#, fuzzy +#| msgid "Step 1 of 2 - Select Part Suppliers" msgid "Step 3 - Select Parts" -msgstr "" +msgstr "Schritt 1 von 2 - Zulieferer auswählen" #: part/templates/part/bom_upload/select_parts.html:15 msgid "Errors exist in the submitted data" msgstr "" #: part/templates/part/bom_upload/select_parts.html:21 +#, fuzzy +#| msgid "Edit BOM" msgid "Submit BOM" -msgstr "" +msgstr "Stückliste bearbeiten" #: part/templates/part/bom_upload/select_parts.html:33 msgid "Row" @@ -3074,12 +3547,16 @@ msgstr "" #: part/templates/part/bom_upload/select_parts.html:34 #: part/templates/part/bom_upload/select_parts.html:63 +#, fuzzy +#| msgid "Select part" msgid "Select Part" -msgstr "" +msgstr "Teil auswählen" #: part/templates/part/bom_upload/upload_file.html:13 +#, fuzzy +#| msgid "Step 1 of 2 - Select Part Suppliers" msgid "Step 1 - Select BOM File" -msgstr "" +msgstr "Schritt 1 von 2 - Zulieferer auswählen" #: part/templates/part/bom_upload/upload_file.html:16 msgid "Requirements for BOM upload" @@ -3091,56 +3568,66 @@ msgid "" msgstr "" #: part/templates/part/bom_upload/upload_file.html:18 +#, fuzzy +#| msgid "Upload new image" msgid "BOM Upload Template" -msgstr "" +msgstr "Neues Bild hochladen" #: part/templates/part/bom_upload/upload_file.html:19 msgid "Each part must already exist in the database" msgstr "" #: part/templates/part/build.html:8 +#, fuzzy +#| msgid "Parent Build" msgid "Part Builds" -msgstr "" +msgstr "Eltern-Bau" #: part/templates/part/build.html:15 +#, fuzzy +#| msgid "Start new Build" msgid "Start New Build" -msgstr "" +msgstr "Neuen Bau beginnen" #: part/templates/part/category.html:19 msgid "All parts" -msgstr "" +msgstr "Alle Teile" -#: part/templates/part/category.html:24 part/views.py:2192 +#: part/templates/part/category.html:24 part/views.py:2194 msgid "Create new part category" -msgstr "" +msgstr "Teilkategorie anlegen" #: part/templates/part/category.html:30 +#, fuzzy +#| msgid "Edit Part Category" msgid "Edit part category" -msgstr "" +msgstr "Teilkategorie bearbeiten" #: part/templates/part/category.html:35 +#, fuzzy +#| msgid "Select part category" msgid "Delete part category" -msgstr "" +msgstr "Teilekategorie wählen" #: part/templates/part/category.html:45 part/templates/part/category.html:84 msgid "Category Details" -msgstr "" +msgstr "Kategorie-Details" #: part/templates/part/category.html:50 msgid "Category Path" -msgstr "" +msgstr "Pfad zur Kategorie" #: part/templates/part/category.html:55 msgid "Category Description" -msgstr "" +msgstr "Kategorie-Beschreibung" #: part/templates/part/category.html:74 msgid "Subcategories" -msgstr "" +msgstr "Unter-Kategorien" #: part/templates/part/category.html:79 msgid "Parts (Including subcategories)" -msgstr "" +msgstr "Teile (inklusive Unter-Kategorien)" #: part/templates/part/category.html:111 msgid "Export Part Data" @@ -3148,208 +3635,248 @@ msgstr "" #: part/templates/part/category.html:115 msgid "Create new part" -msgstr "" +msgstr "Neues Teil anlegen" #: part/templates/part/category.html:123 +#, fuzzy +#| msgid "Part category" msgid "Set category" -msgstr "" +msgstr "Teile-Kategorie" #: part/templates/part/category.html:123 +#, fuzzy +#| msgid "Set Part Category" msgid "Set Category" -msgstr "" +msgstr "Teilkategorie auswählen" #: part/templates/part/category.html:126 +#, fuzzy +#| msgid "Export" msgid "Export Data" -msgstr "" +msgstr "Exportieren" -#: part/templates/part/category.html:174 templates/js/stock.js:643 +#: part/templates/part/category.html:174 templates/js/stock.js:648 +#, fuzzy +#| msgid "Create New Location" msgid "Create new location" -msgstr "" +msgstr "Neuen Standort anlegen" #: part/templates/part/category.html:179 part/templates/part/category.html:209 +#, fuzzy +#| msgid "Category" msgid "New Category" -msgstr "" +msgstr "Kategorie" #: part/templates/part/category.html:180 +#, fuzzy +#| msgid "Create new part category" msgid "Create new category" -msgstr "" +msgstr "Teilkategorie anlegen" #: part/templates/part/category.html:210 +#, fuzzy +#| msgid "Create new part category" msgid "Create new Part Category" -msgstr "" +msgstr "Teilkategorie anlegen" -#: part/templates/part/category.html:216 stock/views.py:1545 +#: part/templates/part/category.html:216 stock/views.py:1458 msgid "Create new Stock Location" -msgstr "" +msgstr "Neuen Lager-Standort erstellen" #: part/templates/part/category_tabs.html:9 +#, fuzzy +#| msgid "Parameter Value" msgid "Parametric Table" -msgstr "" +msgstr "Parameter Wert" #: part/templates/part/create_part.html:11 +#, fuzzy +#| msgid "No matching data" msgid "Possible Matching Parts" -msgstr "" +msgstr "Keine passenden Daten" #: part/templates/part/create_part.html:12 msgid "The new part may be a duplicate of these existing parts" msgstr "" #: part/templates/part/create_part.html:16 +#, fuzzy +#| msgid "Batch" msgid "match" -msgstr "" +msgstr "Los" #: part/templates/part/detail.html:9 msgid "Part Details" -msgstr "" +msgstr "Teile-Details" #: part/templates/part/detail.html:39 +#, fuzzy +#| msgid "Serial Number" msgid "Latest Serial Number" -msgstr "" +msgstr "Seriennummer" #: part/templates/part/detail.html:44 +#, fuzzy +#| msgid "No serial numbers found" msgid "No serial numbers recorded" -msgstr "" +msgstr "Keine Seriennummern gefunden" #: part/templates/part/detail.html:115 +#, fuzzy +#| msgid "Stock Export Options" msgid "Stock Expiry Time" -msgstr "" +msgstr "Lagerbestandsexportoptionen" #: part/templates/part/detail.html:121 templates/js/order.js:287 msgid "Creation Date" -msgstr "" +msgstr "Erstelldatum" #: part/templates/part/detail.html:127 msgid "Created By" -msgstr "" +msgstr "Erstellt von" #: part/templates/part/detail.html:134 msgid "Responsible User" -msgstr "" +msgstr "Verantwortlicher Benutzer" #: part/templates/part/detail.html:148 msgid "Part is virtual (not a physical part)" -msgstr "" +msgstr "Teil ist virtuell (kein physisches Teil)" #: part/templates/part/detail.html:150 msgid "Part is not a virtual part" -msgstr "" +msgstr "Teil ist nicht virtuell" #: part/templates/part/detail.html:158 +#, fuzzy +#| msgid "Part cannot be a template part if it is a variant of another part" msgid "Part is a template part (variants can be made from this part)" -msgstr "" +msgstr "Teil kann keine Vorlage sein wenn es Variante eines anderen Teils ist" #: part/templates/part/detail.html:160 +#, fuzzy +#| msgid "Part is not a virtual part" msgid "Part is not a template part" -msgstr "" +msgstr "Teil ist nicht virtuell" #: part/templates/part/detail.html:168 msgid "Part can be assembled from other parts" -msgstr "" +msgstr "Teil kann aus anderen Teilen angefertigt werden" #: part/templates/part/detail.html:170 msgid "Part cannot be assembled from other parts" -msgstr "" +msgstr "Teil kann nicht aus anderen Teilen angefertigt werden" #: part/templates/part/detail.html:178 msgid "Part can be used in assemblies" -msgstr "" +msgstr "Teil kann in Baugruppen benutzt werden" #: part/templates/part/detail.html:180 msgid "Part cannot be used in assemblies" -msgstr "" +msgstr "Teil kann nicht in Baugruppen benutzt werden" #: part/templates/part/detail.html:188 msgid "Part stock is tracked by serial number" -msgstr "" +msgstr "Teilebestand in der Seriennummer hinterlegt" #: part/templates/part/detail.html:190 msgid "Part stock is not tracked by serial number" -msgstr "" +msgstr "Teilebestand ist nicht in der Seriennummer hinterlegt" #: part/templates/part/detail.html:198 part/templates/part/detail.html:200 msgid "Part can be purchased from external suppliers" -msgstr "" +msgstr "Teil kann von externen Zulieferern gekauft werden" #: part/templates/part/detail.html:208 msgid "Part can be sold to customers" -msgstr "" +msgstr "Teil kann an Kunden verkauft werden" #: part/templates/part/detail.html:210 msgid "Part cannot be sold to customers" -msgstr "" +msgstr "Teil kann nicht an Kunden verkauft werden" #: part/templates/part/detail.html:225 +#, fuzzy +#| msgid "This part is not active" msgid "Part is active" -msgstr "" +msgstr "Dieses Teil ist nicht aktiv" #: part/templates/part/detail.html:227 +#, fuzzy +#| msgid "This part is not active" msgid "Part is not active" -msgstr "" +msgstr "Dieses Teil ist nicht aktiv" #: part/templates/part/notes.html:13 part/templates/part/notes.html:29 msgid "Part Notes" -msgstr "" +msgstr "Teil-Bemerkungen" #: part/templates/part/params.html:8 msgid "Part Parameters" -msgstr "" +msgstr "Teilparameter" #: part/templates/part/params.html:14 msgid "Add new parameter" -msgstr "" +msgstr "Parameter hinzufügen" #: part/templates/part/params.html:15 #: templates/InvenTree/settings/category.html:29 #: templates/InvenTree/settings/part.html:42 msgid "New Parameter" -msgstr "" +msgstr "Neuer Parameter" -#: part/templates/part/params.html:25 stock/models.py:1509 +#: part/templates/part/params.html:25 stock/models.py:1541 #: templates/InvenTree/settings/header.html:8 templates/js/stock.js:123 msgid "Value" -msgstr "" +msgstr "Wert" #: part/templates/part/params.html:41 part/templates/part/related.html:41 -#: part/templates/part/supplier.html:19 users/models.py:163 +#: part/templates/part/supplier.html:19 users/models.py:164 msgid "Delete" -msgstr "" +msgstr "Löschen" #: part/templates/part/part_app_base.html:11 msgid "Part List" -msgstr "" +msgstr "Teileliste" #: part/templates/part/part_base.html:11 +#, fuzzy +#| msgid "Part is not a virtual part" msgid "This part is a virtual part" -msgstr "" +msgstr "Teil ist nicht virtuell" #: part/templates/part/part_base.html:16 msgid "This part is a template part." -msgstr "" +msgstr "Dieses Teil ist eine Vorlage." #: part/templates/part/part_base.html:21 msgid "This part is a variant of" -msgstr "" +msgstr "Dieses Teil ist eine Variante von" #: part/templates/part/part_base.html:36 templates/js/company.js:155 #: templates/js/part.js:95 templates/js/part.js:172 msgid "Inactive" -msgstr "" +msgstr "Inaktiv" #: part/templates/part/part_base.html:43 msgid "Star this part" -msgstr "" +msgstr "Teil favorisieren" #: part/templates/part/part_base.html:49 #: stock/templates/stock/item_base.html:125 #: stock/templates/stock/location.html:43 +#, fuzzy +#| msgid "Source Location" msgid "Barcode actions" -msgstr "" +msgstr "Quell-Standort" #: part/templates/part/part_base.html:51 #: stock/templates/stock/item_base.html:127 #: stock/templates/stock/location.html:45 +#, fuzzy +#| msgid "Part QR Code" msgid "Show QR Code" -msgstr "" +msgstr "Teil-QR-Code" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:143 @@ -3359,397 +3886,467 @@ msgstr "" #: part/templates/part/part_base.html:56 msgid "Show pricing information" -msgstr "" +msgstr "Kosteninformationen ansehen" #: part/templates/part/part_base.html:60 +#, fuzzy +#| msgid "Count stock" msgid "Count part stock" -msgstr "" +msgstr "Bestand zählen" #: part/templates/part/part_base.html:75 +#, fuzzy +#| msgid "Source Location" msgid "Part actions" -msgstr "" +msgstr "Quell-Standort" #: part/templates/part/part_base.html:78 +#, fuzzy +#| msgid "Duplicate Part" msgid "Duplicate part" -msgstr "" +msgstr "Teil duplizieren" #: part/templates/part/part_base.html:81 +#, fuzzy +#| msgid "Edit Template" msgid "Edit part" -msgstr "" +msgstr "Vorlage bearbeiten" #: part/templates/part/part_base.html:84 +#, fuzzy +#| msgid "Delete Parts" msgid "Delete part" -msgstr "" +msgstr "Teile löschen" #: part/templates/part/part_base.html:124 templates/js/table_filters.js:121 msgid "In Stock" -msgstr "" +msgstr "Auf Lager" #: part/templates/part/part_base.html:131 msgid "Allocated to Build Orders" -msgstr "" +msgstr "Zu Bauaufträgen zugeordnet" #: part/templates/part/part_base.html:138 msgid "Allocated to Sales Orders" -msgstr "" +msgstr "Zu Aufträgen zugeordnet" #: part/templates/part/part_base.html:160 templates/js/bom.js:262 msgid "Can Build" -msgstr "" +msgstr "Herstellbar?" #: part/templates/part/part_base.html:166 msgid "Underway" -msgstr "" +msgstr "unterwegs" #: part/templates/part/part_tests.html:8 +#, fuzzy +#| msgid "Parameter Template" msgid "Part Test Templates" -msgstr "" +msgstr "Parameter Vorlage" #: part/templates/part/part_tests.html:14 +#, fuzzy +#| msgid "Edit Template" msgid "Add Test Template" -msgstr "" +msgstr "Vorlage bearbeiten" #: part/templates/part/part_thumb.html:16 msgid "Select from existing images" -msgstr "" +msgstr "Aus vorhandenen Bildern auswählen" #: part/templates/part/part_thumb.html:17 msgid "Upload new image" -msgstr "" +msgstr "Neues Bild hochladen" #: part/templates/part/related.html:9 +#, fuzzy +#| msgid "Delete Parts" msgid "Related Parts" -msgstr "" +msgstr "Teile löschen" #: part/templates/part/related.html:15 +#, fuzzy +#| msgid "Edit Template" msgid "Add Related" -msgstr "" +msgstr "Vorlage bearbeiten" #: part/templates/part/sale_prices.html:9 part/templates/part/tabs.html:53 +#, fuzzy +#| msgid "Price" msgid "Sale Price" -msgstr "" +msgstr "Preis" #: part/templates/part/sales_orders.html:15 msgid "New sales order" -msgstr "" +msgstr "Neuer Auftrag" #: part/templates/part/sales_orders.html:15 msgid "New Order" -msgstr "" +msgstr "Neue Bestellung" #: part/templates/part/set_category.html:9 msgid "Set category for the following parts" -msgstr "" +msgstr "Kategorie für Teile setzen" #: part/templates/part/set_category.html:32 msgid "Remove part" -msgstr "" +msgstr "Teil entfernen" #: part/templates/part/stock.html:8 msgid "Part Stock" -msgstr "" +msgstr "Teilbestand" #: part/templates/part/stock_count.html:7 templates/js/bom.js:230 #: templates/js/part.js:442 msgid "No Stock" -msgstr "" +msgstr "Kein Bestand" #: part/templates/part/stock_count.html:9 templates/InvenTree/low_stock.html:7 msgid "Low Stock" -msgstr "" +msgstr "Niedriger Bestand" #: part/templates/part/supplier.html:8 +#, fuzzy +#| msgid "Suppliers" msgid "Part Suppliers" -msgstr "" +msgstr "Zulieferer" #: part/templates/part/supplier.html:19 +#, fuzzy +#| msgid "Delete supplier part" msgid "Delete supplier parts" -msgstr "" +msgstr "Zuliefererteil entfernen" #: part/templates/part/supplier.html:48 +#, fuzzy +#| msgid "Create new Supplier" msgid "Create new supplier" -msgstr "" +msgstr "Neuen Zulieferer anlegen" #: part/templates/part/supplier.html:54 +#, fuzzy +#| msgid "Create new Manufacturer" msgid "Create new manufacturer" -msgstr "" +msgstr "Neuen Hersteller anlegen" #: part/templates/part/tabs.html:9 msgid "Parameters" -msgstr "" +msgstr "Parameter" #: part/templates/part/tabs.html:13 msgid "Variants" -msgstr "" +msgstr "Varianten" #: part/templates/part/tabs.html:28 msgid "BOM" -msgstr "" +msgstr "Stückliste" #: part/templates/part/tabs.html:37 msgid "Used In" -msgstr "" +msgstr "Benutzt in" #: part/templates/part/tabs.html:61 stock/templates/stock/item_base.html:369 msgid "Tests" msgstr "" #: part/templates/part/tabs.html:67 +#, fuzzy +#| msgid "Created" msgid "Related" -msgstr "" +msgstr "Erstellt" #: part/templates/part/track.html:8 msgid "Part Tracking" -msgstr "" +msgstr "Teilverfolgung" #: part/templates/part/used_in.html:7 msgid "Assemblies" -msgstr "" +msgstr "Baugruppen" #: part/templates/part/variants.html:11 +#, fuzzy +#| msgid "Variants" msgid "Part Variants" -msgstr "" +msgstr "Varianten" #: part/templates/part/variants.html:22 +#, fuzzy +#| msgid "Create new Part" msgid "Create new variant" -msgstr "" +msgstr "Neues Teil hinzufügen" #: part/templates/part/variants.html:23 +#, fuzzy +#| msgid "Variants" msgid "New Variant" -msgstr "" +msgstr "Varianten" #: part/views.py:86 +#, fuzzy +#| msgid "Allocated Parts" msgid "Add Related Part" -msgstr "" +msgstr "Zugeordnete Teile" #: part/views.py:142 +#, fuzzy +#| msgid "Delete Supplier Part" msgid "Delete Related Part" -msgstr "" +msgstr "Zuliefererteil entfernen" #: part/views.py:154 msgid "Add part attachment" -msgstr "" +msgstr "Teilanhang hinzufügen" #: part/views.py:209 templates/attachment_table.html:32 msgid "Edit attachment" -msgstr "" +msgstr "Anhang bearbeiten" #: part/views.py:215 msgid "Part attachment updated" -msgstr "" +msgstr "Teilanhang aktualisiert" #: part/views.py:230 msgid "Delete Part Attachment" -msgstr "" +msgstr "Teilanhang löschen" #: part/views.py:238 msgid "Deleted part attachment" -msgstr "" +msgstr "Teilanhang gelöscht" #: part/views.py:247 +#, fuzzy +#| msgid "Create Part Parameter Template" msgid "Create Test Template" -msgstr "" +msgstr "Teilparametervorlage anlegen" #: part/views.py:276 +#, fuzzy +#| msgid "Edit Template" msgid "Edit Test Template" -msgstr "" +msgstr "Vorlage bearbeiten" #: part/views.py:292 +#, fuzzy +#| msgid "Delete Template" msgid "Delete Test Template" -msgstr "" +msgstr "Vorlage löschen" #: part/views.py:301 msgid "Set Part Category" -msgstr "" +msgstr "Teilkategorie auswählen" #: part/views.py:351 #, python-brace-format msgid "Set category for {n} parts" -msgstr "" +msgstr "Kategorie für {n} Teile setzen" #: part/views.py:386 msgid "Create Variant" -msgstr "" +msgstr "Variante anlegen" #: part/views.py:468 msgid "Duplicate Part" -msgstr "" +msgstr "Teil duplizieren" #: part/views.py:475 msgid "Copied part" -msgstr "" +msgstr "Teil kopiert" -#: part/views.py:529 part/views.py:667 +#: part/views.py:529 part/views.py:669 msgid "Possible matches exist - confirm creation of new part" msgstr "" -#: part/views.py:594 templates/js/stock.js:978 +#: part/views.py:594 templates/js/stock.js:995 msgid "Create New Part" -msgstr "" +msgstr "Neues Teil anlegen" #: part/views.py:601 msgid "Created new part" -msgstr "" +msgstr "Neues Teil angelegt" -#: part/views.py:836 +#: part/views.py:838 msgid "Part QR Code" -msgstr "" +msgstr "Teil-QR-Code" -#: part/views.py:855 +#: part/views.py:857 msgid "Upload Part Image" -msgstr "" +msgstr "Teilbild hochladen" -#: part/views.py:863 part/views.py:900 +#: part/views.py:865 part/views.py:902 msgid "Updated part image" -msgstr "" +msgstr "Teilbild aktualisiert" -#: part/views.py:872 +#: part/views.py:874 msgid "Select Part Image" -msgstr "" +msgstr "Teilbild auswählen" -#: part/views.py:903 +#: part/views.py:905 msgid "Part image not found" -msgstr "" +msgstr "Teilbild nicht gefunden" -#: part/views.py:914 +#: part/views.py:916 msgid "Edit Part Properties" -msgstr "" +msgstr "Teileigenschaften bearbeiten" -#: part/views.py:945 +#: part/views.py:947 +#, fuzzy +#| msgid "Duplicate Part" msgid "Duplicate BOM" -msgstr "" +msgstr "Teil duplizieren" -#: part/views.py:976 +#: part/views.py:978 +#, fuzzy +#| msgid "Confirm unallocation of build stock" msgid "Confirm duplication of BOM from parent" -msgstr "" +msgstr "Zuweisungsaufhebung bestätigen" -#: part/views.py:997 +#: part/views.py:999 msgid "Validate BOM" -msgstr "" +msgstr "BOM validieren" -#: part/views.py:1020 +#: part/views.py:1022 +#, fuzzy +#| msgid "Confirm that the BOM is correct" msgid "Confirm that the BOM is valid" -msgstr "" +msgstr "Bestätigen, dass die Stückliste korrekt ist" -#: part/views.py:1031 +#: part/views.py:1033 +#, fuzzy +#| msgid "Validate Bill of Materials" msgid "Validated Bill of Materials" -msgstr "" +msgstr "Stückliste validieren" -#: part/views.py:1165 +#: part/views.py:1167 msgid "No BOM file provided" -msgstr "" +msgstr "Keine Stückliste angegeben" -#: part/views.py:1513 +#: part/views.py:1515 msgid "Enter a valid quantity" -msgstr "" +msgstr "Bitte eine gültige Anzahl eingeben" -#: part/views.py:1538 part/views.py:1541 +#: part/views.py:1540 part/views.py:1543 msgid "Select valid part" -msgstr "" +msgstr "Bitte ein gültiges Teil auswählen" -#: part/views.py:1547 +#: part/views.py:1549 msgid "Duplicate part selected" -msgstr "" +msgstr "Teil doppelt ausgewählt" -#: part/views.py:1585 +#: part/views.py:1587 msgid "Select a part" -msgstr "" +msgstr "Teil auswählen" -#: part/views.py:1591 +#: part/views.py:1593 +#, fuzzy +#| msgid "Select part to be used in BOM" msgid "Selected part creates a circular BOM" -msgstr "" +msgstr "Teil für die Nutzung in der Stückliste auswählen" -#: part/views.py:1595 +#: part/views.py:1597 msgid "Specify quantity" -msgstr "" +msgstr "Anzahl angeben" -#: part/views.py:1851 +#: part/views.py:1853 msgid "Confirm Part Deletion" -msgstr "" +msgstr "Löschen des Teils bestätigen" -#: part/views.py:1860 +#: part/views.py:1862 msgid "Part was deleted" -msgstr "" +msgstr "Teil wurde gelöscht" -#: part/views.py:1869 +#: part/views.py:1871 msgid "Part Pricing" -msgstr "" +msgstr "Teilbepreisung" -#: part/views.py:1983 +#: part/views.py:1985 msgid "Create Part Parameter Template" -msgstr "" +msgstr "Teilparametervorlage anlegen" -#: part/views.py:1993 +#: part/views.py:1995 msgid "Edit Part Parameter Template" -msgstr "" +msgstr "Teilparametervorlage bearbeiten" -#: part/views.py:2002 +#: part/views.py:2004 msgid "Delete Part Parameter Template" -msgstr "" +msgstr "Teilparametervorlage löschen" -#: part/views.py:2012 +#: part/views.py:2014 msgid "Create Part Parameter" -msgstr "" +msgstr "Teilparameter anlegen" -#: part/views.py:2064 +#: part/views.py:2066 msgid "Edit Part Parameter" -msgstr "" +msgstr "Teilparameter bearbeiten" -#: part/views.py:2080 +#: part/views.py:2082 msgid "Delete Part Parameter" -msgstr "" +msgstr "Teilparameter löschen" -#: part/views.py:2139 +#: part/views.py:2141 msgid "Edit Part Category" -msgstr "" +msgstr "Teilkategorie bearbeiten" -#: part/views.py:2176 +#: part/views.py:2178 msgid "Delete Part Category" -msgstr "" +msgstr "Teilkategorie löschen" -#: part/views.py:2184 +#: part/views.py:2186 msgid "Part category was deleted" -msgstr "" +msgstr "Teilekategorie wurde gelöscht" -#: part/views.py:2240 +#: part/views.py:2242 +#, fuzzy +#| msgid "Create Part Parameter Template" msgid "Create Category Parameter Template" -msgstr "" +msgstr "Teilparametervorlage anlegen" -#: part/views.py:2343 +#: part/views.py:2345 +#, fuzzy +#| msgid "Edit Part Parameter Template" msgid "Edit Category Parameter Template" -msgstr "" +msgstr "Teilparametervorlage bearbeiten" -#: part/views.py:2401 +#: part/views.py:2403 +#, fuzzy +#| msgid "Delete Part Parameter Template" msgid "Delete Category Parameter Template" -msgstr "" +msgstr "Teilparametervorlage löschen" -#: part/views.py:2426 +#: part/views.py:2428 +#, fuzzy +#| msgid "Create BOM item" msgid "Create BOM Item" -msgstr "" +msgstr "BOM-Position anlegen" -#: part/views.py:2498 +#: part/views.py:2500 msgid "Edit BOM item" -msgstr "" +msgstr "BOM-Position beaarbeiten" -#: part/views.py:2555 +#: part/views.py:2557 msgid "Confim BOM item deletion" -msgstr "" +msgstr "Löschung von BOM-Position bestätigen" #: report/models.py:147 +#, fuzzy +#| msgid "Template part" msgid "Template name" -msgstr "" +msgstr "Vorlagenteil" #: report/models.py:153 msgid "Report template file" msgstr "" #: report/models.py:157 +#, fuzzy +#| msgid "Supplier part description" msgid "Report template description" -msgstr "" +msgstr "Zuliefererbeschreibung des Teils" #: report/models.py:161 +#, fuzzy +#| msgid "Supplier part description" msgid "Report template is enabled" -msgstr "" +msgstr "Zuliefererbeschreibung des Teils" #: report/models.py:168 msgid "Part query filters (comma-separated list of key=value pairs)" @@ -3760,322 +4357,379 @@ msgid "Report asset file" msgstr "" #: report/models.py:233 +#, fuzzy +#| msgid "Settings description" msgid "Asset file description" -msgstr "" +msgstr "Einstellungs-Beschreibung" #: stock/forms.py:117 msgid "Enter unique serial numbers (or leave blank)" -msgstr "" - -#: stock/forms.py:200 -msgid "Label" -msgstr "" +msgstr "Eindeutige Seriennummern eingeben (oder leer lassen)" #: stock/forms.py:201 stock/forms.py:257 +#, fuzzy +#| msgid "Select stock item to allocate" msgid "Select test report template" -msgstr "" +msgstr "Lagerobjekt für Zuordnung auswählen" #: stock/forms.py:265 msgid "Include stock items in sub locations" -msgstr "" +msgstr "Lagerobjekte in untergeordneten Lagerorten einschließen" #: stock/forms.py:300 +#, fuzzy +#| msgid "No stock items matching query" msgid "Stock item to install" -msgstr "" +msgstr "Keine zur Anfrage passenden Lagerobjekte" #: stock/forms.py:307 +#, fuzzy +#| msgid "Stock Quantity" msgid "Stock quantity to assign" -msgstr "" +msgstr "Bestand" #: stock/forms.py:335 +#, fuzzy +#| msgid "Quantity must not exceed available stock quantity ({n})" msgid "Must not exceed available quantity" -msgstr "" +msgstr "Anzahl darf nicht die verfügbare Anzahl überschreiten ({n})" #: stock/forms.py:345 +#, fuzzy +#| msgid "Does this part have tracking for unique items?" msgid "Destination location for uninstalled items" -msgstr "" +msgstr "Hat dieses Teil Tracking für einzelne Objekte?" #: stock/forms.py:347 +#, fuzzy +#| msgid "Description of the company" msgid "Add transaction note (optional)" -msgstr "" +msgstr "Firmenbeschreibung" #: stock/forms.py:349 +#, fuzzy +#| msgid "Confirm stock allocation" msgid "Confirm uninstall" -msgstr "" +msgstr "Lagerbestandszuordnung bestätigen" #: stock/forms.py:349 +#, fuzzy +#| msgid "Confirm movement of stock items" msgid "Confirm removal of installed stock items" -msgstr "" +msgstr "Bewegung der Lagerobjekte bestätigen" #: stock/forms.py:373 msgid "Destination stock location" -msgstr "" +msgstr "Ziel-Lagerbestand" #: stock/forms.py:375 msgid "Add note (required)" msgstr "" -#: stock/forms.py:379 stock/views.py:1037 stock/views.py:1235 +#: stock/forms.py:379 stock/views.py:950 stock/views.py:1148 msgid "Confirm stock adjustment" -msgstr "" +msgstr "Bestands-Anpassung bestätigen" #: stock/forms.py:379 msgid "Confirm movement of stock items" -msgstr "" +msgstr "Bewegung der Lagerobjekte bestätigen" #: stock/forms.py:381 +#, fuzzy +#| msgid "Default Location" msgid "Set Default Location" -msgstr "" +msgstr "Standard-Lagerort" #: stock/forms.py:381 msgid "Set the destination as the default location for selected parts" -msgstr "" +msgstr "Setze das Ziel als Standard-Ziel für ausgewählte Teile" -#: stock/models.py:192 +#: stock/models.py:200 +#, fuzzy +#| msgid "Created new stock item" msgid "Created stock item" -msgstr "" +msgstr "Neues Lagerobjekt erstellt" -#: stock/models.py:228 +#: stock/models.py:236 +#, fuzzy +#| msgid "A stock item with this serial number already exists" msgid "StockItem with this serial number already exists" -msgstr "" +msgstr "Ein Teil mit dieser Seriennummer existiert bereits" -#: stock/models.py:264 +#: stock/models.py:272 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" -msgstr "" +msgstr "Teile-Typ ('{pf}') muss {pe} sein" -#: stock/models.py:274 stock/models.py:283 +#: stock/models.py:282 stock/models.py:291 msgid "Quantity must be 1 for item with a serial number" -msgstr "" +msgstr "Anzahl muss für Objekte mit Seriennummer \"1\" sein" -#: stock/models.py:275 +#: stock/models.py:283 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:297 +#: stock/models.py:305 msgid "Item cannot belong to itself" -msgstr "" +msgstr "Teil kann nicht zu sich selbst gehören" -#: stock/models.py:303 +#: stock/models.py:311 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:310 +#: stock/models.py:318 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:343 +#: stock/models.py:358 msgid "Parent Stock Item" -msgstr "" +msgstr "Eltern-Lagerobjekt" -#: stock/models.py:352 +#: stock/models.py:367 msgid "Base part" -msgstr "" +msgstr "Basis-Teil" -#: stock/models.py:361 +#: stock/models.py:376 msgid "Select a matching supplier part for this stock item" -msgstr "" +msgstr "Passenden Zulieferer für dieses Lagerobjekt auswählen" -#: stock/models.py:366 stock/templates/stock/stock_app_base.html:7 +#: stock/models.py:381 stock/templates/stock/stock_app_base.html:7 msgid "Stock Location" -msgstr "" +msgstr "Lagerort" -#: stock/models.py:369 +#: stock/models.py:384 msgid "Where is this stock item located?" -msgstr "" +msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: stock/models.py:374 stock/templates/stock/item_base.html:249 +#: stock/models.py:389 stock/templates/stock/item_base.html:249 msgid "Installed In" -msgstr "" +msgstr "Installiert in" -#: stock/models.py:377 +#: stock/models.py:392 msgid "Is this item installed in another item?" -msgstr "" +msgstr "Ist dieses Teil in einem anderen verbaut?" -#: stock/models.py:393 +#: stock/models.py:408 msgid "Serial number for this item" -msgstr "" - -#: stock/models.py:405 -msgid "Batch code for this stock item" -msgstr "" - -#: stock/models.py:409 -msgid "Stock Quantity" -msgstr "" - -#: stock/models.py:418 -msgid "Source Build" -msgstr "" +msgstr "Seriennummer für dieses Teil" #: stock/models.py:420 +msgid "Batch code for this stock item" +msgstr "Losnummer für dieses Lagerobjekt" + +#: stock/models.py:424 +msgid "Stock Quantity" +msgstr "Bestand" + +#: stock/models.py:433 +msgid "Source Build" +msgstr "Quellbau" + +#: stock/models.py:435 msgid "Build for this stock item" -msgstr "" +msgstr "Bau für dieses Lagerobjekt" -#: stock/models.py:431 +#: stock/models.py:446 msgid "Source Purchase Order" -msgstr "" +msgstr "Quellbestellung" -#: stock/models.py:434 +#: stock/models.py:449 msgid "Purchase order for this stock item" -msgstr "" +msgstr "Bestellung für dieses Teil" -#: stock/models.py:440 +#: stock/models.py:455 msgid "Destination Sales Order" -msgstr "" +msgstr "Zielauftrag" -#: stock/models.py:446 stock/templates/stock/item_base.html:336 +#: stock/models.py:461 stock/templates/stock/item_base.html:336 #: templates/js/stock.js:612 +#, fuzzy +#| msgid "Export" msgid "Expiry Date" -msgstr "" +msgstr "Exportieren" -#: stock/models.py:447 +#: stock/models.py:462 msgid "" "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:460 +#: stock/models.py:475 msgid "Delete this Stock Item when stock is depleted" -msgstr "" +msgstr "Objekt löschen wenn Lagerbestand aufgebraucht" -#: stock/models.py:470 stock/templates/stock/item_notes.html:14 +#: stock/models.py:485 stock/templates/stock/item_notes.html:14 #: stock/templates/stock/item_notes.html:30 msgid "Stock Item Notes" -msgstr "" +msgstr "Lagerobjekt-Notizen" -#: stock/models.py:480 +#: stock/models.py:495 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:584 -msgid "Assigned to Customer" -msgstr "" - -#: stock/models.py:586 -msgid "Manually assigned to customer" -msgstr "" - #: stock/models.py:599 -msgid "Returned from customer" -msgstr "" +#, fuzzy +#| msgid "Item assigned to customer?" +msgid "Assigned to Customer" +msgstr "Ist dieses Objekt einem Kunden zugeteilt?" #: stock/models.py:601 +#, fuzzy +#| msgid "Item assigned to customer?" +msgid "Manually assigned to customer" +msgstr "Ist dieses Objekt einem Kunden zugeteilt?" + +#: stock/models.py:614 +#, fuzzy +#| msgid "Item assigned to customer?" +msgid "Returned from customer" +msgstr "Ist dieses Objekt einem Kunden zugeteilt?" + +#: stock/models.py:616 +#, fuzzy +#| msgid "Create new stock location" msgid "Returned to location" -msgstr "" +msgstr "Neuen Lagerort anlegen" -#: stock/models.py:726 +#: stock/models.py:741 +#, fuzzy +#| msgid "Installed in Stock Item" msgid "Installed into stock item" -msgstr "" +msgstr "In Lagerobjekt installiert" -#: stock/models.py:734 +#: stock/models.py:749 +#, fuzzy +#| msgid "Installed in Stock Item" msgid "Installed stock item" -msgstr "" +msgstr "In Lagerobjekt installiert" -#: stock/models.py:758 +#: stock/models.py:773 +#, fuzzy +#| msgid "Installed in Stock Item" msgid "Uninstalled stock item" -msgstr "" +msgstr "In Lagerobjekt installiert" -#: stock/models.py:777 +#: stock/models.py:792 +#, fuzzy +#| msgid "Include sublocations" msgid "Uninstalled into location" -msgstr "" - -#: stock/models.py:857 -msgid "Part is not set as trackable" -msgstr "" - -#: stock/models.py:863 -msgid "Quantity must be integer" -msgstr "" - -#: stock/models.py:869 -#, python-brace-format -msgid "Quantity must not exceed available stock quantity ({n})" -msgstr "" +msgstr "Unterlagerorte einschließen" #: stock/models.py:872 +#, fuzzy +#| msgid "Part is not a virtual part" +msgid "Part is not set as trackable" +msgstr "Teil ist nicht virtuell" + +#: stock/models.py:878 +msgid "Quantity must be integer" +msgstr "Anzahl muss eine Ganzzahl sein" + +#: stock/models.py:884 +#, 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:887 msgid "Serial numbers must be a list of integers" -msgstr "" +msgstr "Seriennummern muss eine Liste von Ganzzahlen sein" -#: stock/models.py:875 +#: stock/models.py:890 msgid "Quantity does not match serial numbers" -msgstr "" +msgstr "Anzahl stimmt nicht mit den Seriennummern überein" -#: stock/models.py:907 +#: stock/models.py:922 msgid "Add serial number" -msgstr "" +msgstr "Seriennummer hinzufügen" -#: stock/models.py:910 +#: stock/models.py:925 #, python-brace-format msgid "Serialized {n} items" -msgstr "" +msgstr "{n} Teile serialisiert" -#: stock/models.py:1021 +#: stock/models.py:1036 msgid "StockItem cannot be moved as it is not in stock" -msgstr "" +msgstr "Lagerobjekt kann nicht bewegt werden, da kein Bestand vorhanden ist" -#: stock/models.py:1410 +#: stock/models.py:1442 msgid "Tracking entry title" -msgstr "" +msgstr "Name des Eintrags-Trackings" -#: stock/models.py:1412 +#: stock/models.py:1444 msgid "Entry notes" -msgstr "" +msgstr "Eintrags-Notizen" -#: stock/models.py:1414 +#: stock/models.py:1446 msgid "Link to external page for further information" -msgstr "" +msgstr "Link auf externe Seite für weitere Informationen" -#: stock/models.py:1474 +#: stock/models.py:1506 +#, fuzzy +#| msgid "Serial number for this item" msgid "Value must be provided for this test" -msgstr "" +msgstr "Seriennummer für dieses Teil" -#: stock/models.py:1480 +#: stock/models.py:1512 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1497 +#: stock/models.py:1529 msgid "Test" msgstr "" -#: stock/models.py:1498 +#: stock/models.py:1530 +#, fuzzy +#| msgid "Part name" msgid "Test name" -msgstr "" +msgstr "Name des Teils" -#: stock/models.py:1503 +#: stock/models.py:1535 +#, fuzzy +#| msgid "Search Results" msgid "Result" -msgstr "" +msgstr "Suchergebnisse" -#: stock/models.py:1504 templates/js/table_filters.js:172 +#: stock/models.py:1536 templates/js/table_filters.js:172 msgid "Test result" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1542 msgid "Test output value" msgstr "" -#: stock/models.py:1516 +#: stock/models.py:1548 +#, fuzzy +#| msgid "Attachments" msgid "Attachment" -msgstr "" +msgstr "Anhänge" -#: stock/models.py:1517 +#: stock/models.py:1549 +#, fuzzy +#| msgid "Delete attachment" msgid "Test result attachment" -msgstr "" +msgstr "Anhang löschen" -#: stock/models.py:1523 +#: stock/models.py:1555 +#, fuzzy +#| msgid "Edit notes" msgid "Test notes" -msgstr "" +msgstr "Bermerkungen bearbeiten" #: stock/templates/stock/item.html:16 msgid "Stock Tracking Information" -msgstr "" +msgstr "Informationen zum Lagerbestands-Tracking" #: stock/templates/stock/item.html:25 +#, fuzzy +#| msgid "Category" msgid "New Entry" -msgstr "" +msgstr "Kategorie" #: stock/templates/stock/item_attachments.html:10 +#, fuzzy +#| msgid "Stock Item Notes" msgid "Stock Item Attachments" -msgstr "" +msgstr "Lagerobjekt-Notizen" #: stock/templates/stock/item_base.html:24 msgid "" @@ -4084,39 +4738,47 @@ msgid "" msgstr "" #: stock/templates/stock/item_base.html:31 +#, fuzzy +#| msgid "This stock item does not have any child items" msgid "This stock item is in production and cannot be edited." -msgstr "" +msgstr "Dieses Lagerobjekt hat keine Kinder" #: stock/templates/stock/item_base.html:32 msgid "Edit the stock item from the build view." msgstr "" #: stock/templates/stock/item_base.html:45 +#, fuzzy +#| msgid "This stock item does not have any child items" msgid "This stock item has not passed all required tests" -msgstr "" +msgstr "Dieses Lagerobjekt hat keine Kinder" #: stock/templates/stock/item_base.html:51 msgid "This stock item is allocated to Sales Order" -msgstr "" +msgstr "Dieses Lagerobjekt ist dem Auftrag zugewiesen" #: stock/templates/stock/item_base.html:57 msgid "This stock item is allocated to Build" -msgstr "" +msgstr "Dieses Lagerobjekt ist dem Bau zugewiesen" #: stock/templates/stock/item_base.html:63 msgid "" "This stock item is serialized - it has a unique serial number and the " "quantity cannot be adjusted." msgstr "" +"Dieses Lagerobjekt ist serialisiert. Es hat eine eindeutige Seriennummer und " +"die Anzahl kann nicht angepasst werden." #: stock/templates/stock/item_base.html:67 msgid "This stock item cannot be deleted as it has child items" -msgstr "" +msgstr "Dieses Lagerobjekt kann nicht gelöscht werden, da es Kinder besitzt" #: stock/templates/stock/item_base.html:71 msgid "" "This stock item will be automatically deleted when all stock is depleted." msgstr "" +"Dieses Lagerobjekt wird automatisch gelöscht wenn der Lagerbestand " +"aufgebraucht ist." #: stock/templates/stock/item_base.html:91 #: stock/templates/stock/item_base.html:340 templates/js/table_filters.js:111 @@ -4138,8 +4800,10 @@ msgid "Link Barcode" msgstr "" #: stock/templates/stock/item_base.html:140 +#, fuzzy +#| msgid "Confirm stock adjustment" msgid "Document actions" -msgstr "" +msgstr "Bestands-Anpassung bestätigen" #: stock/templates/stock/item_base.html:146 #: stock/templates/stock/item_tests.html:25 @@ -4147,41 +4811,53 @@ msgid "Test Report" msgstr "" #: stock/templates/stock/item_base.html:156 +#, fuzzy +#| msgid "Confirm stock adjustment" msgid "Stock adjustment actions" -msgstr "" +msgstr "Bestands-Anpassung bestätigen" #: stock/templates/stock/item_base.html:160 -#: stock/templates/stock/location.html:57 templates/stock_table.html:31 +#: stock/templates/stock/location.html:57 templates/stock_table.html:35 msgid "Count stock" -msgstr "" +msgstr "Bestand zählen" -#: stock/templates/stock/item_base.html:161 templates/stock_table.html:29 +#: stock/templates/stock/item_base.html:161 templates/stock_table.html:33 msgid "Add stock" -msgstr "" +msgstr "Bestand hinzufügen" -#: stock/templates/stock/item_base.html:162 templates/stock_table.html:30 +#: stock/templates/stock/item_base.html:162 templates/stock_table.html:34 msgid "Remove stock" -msgstr "" +msgstr "Bestand entfernen" #: stock/templates/stock/item_base.html:164 +#, fuzzy +#| msgid "Order stock" msgid "Transfer stock" -msgstr "" +msgstr "Bestand bestellen" #: stock/templates/stock/item_base.html:166 +#, fuzzy +#| msgid "Serialize Stock" msgid "Serialize stock" -msgstr "" +msgstr "Lagerbestand erfassen" #: stock/templates/stock/item_base.html:170 +#, fuzzy +#| msgid "Item assigned to customer?" msgid "Assign to customer" -msgstr "" +msgstr "Ist dieses Objekt einem Kunden zugeteilt?" #: stock/templates/stock/item_base.html:173 +#, fuzzy +#| msgid "Count stock" msgid "Return to stock" -msgstr "" +msgstr "Bestand zählen" -#: stock/templates/stock/item_base.html:177 templates/js/stock.js:1119 +#: stock/templates/stock/item_base.html:177 templates/js/stock.js:1136 +#, fuzzy +#| msgid "Installed in Stock Item" msgid "Uninstall stock item" -msgstr "" +msgstr "In Lagerobjekt installiert" #: stock/templates/stock/item_base.html:177 msgid "Uninstall" @@ -4189,81 +4865,103 @@ msgstr "" #: stock/templates/stock/item_base.html:186 #: stock/templates/stock/location.html:54 +#, fuzzy +#| msgid "Stock Locations" msgid "Stock actions" -msgstr "" +msgstr "Lagerobjekt-Standorte" #: stock/templates/stock/item_base.html:189 +#, fuzzy +#| msgid "Count stock items" msgid "Convert to variant" -msgstr "" +msgstr "Lagerobjekte zählen" #: stock/templates/stock/item_base.html:192 +#, fuzzy +#| msgid "Count stock items" msgid "Duplicate stock item" -msgstr "" +msgstr "Lagerobjekte zählen" #: stock/templates/stock/item_base.html:194 +#, fuzzy +#| msgid "Edit Stock Item" msgid "Edit stock item" -msgstr "" +msgstr "Lagerobjekt bearbeiten" #: stock/templates/stock/item_base.html:197 +#, fuzzy +#| msgid "Delete Stock Item" msgid "Delete stock item" -msgstr "" +msgstr "Lagerobjekt löschen" #: stock/templates/stock/item_base.html:209 msgid "Stock Item Details" -msgstr "" +msgstr "Lagerbestands-Details" #: stock/templates/stock/item_base.html:268 templates/js/build.js:442 +#, fuzzy +#| msgid "No stock location set" msgid "No location set" -msgstr "" +msgstr "Kein Lagerort gesetzt" #: stock/templates/stock/item_base.html:275 +#, fuzzy +#| msgid "Unique Identifier" msgid "Barcode Identifier" -msgstr "" +msgstr "Eindeutiger Bezeichner" #: stock/templates/stock/item_base.html:289 templates/js/build.js:642 #: templates/navbar.html:25 msgid "Build" -msgstr "" +msgstr "Bau" #: stock/templates/stock/item_base.html:310 msgid "Parent Item" -msgstr "" +msgstr "Elternposition" #: stock/templates/stock/item_base.html:340 +#, fuzzy +#| msgid "This stock item is allocated to Build" msgid "This StockItem expired on" -msgstr "" +msgstr "Dieses Lagerobjekt ist dem Bau zugewiesen" #: stock/templates/stock/item_base.html:342 +#, fuzzy +#| msgid "Child Stock Items" msgid "This StockItem expires on" -msgstr "" +msgstr "Kind-Lagerobjekte" -#: stock/templates/stock/item_base.html:349 +#: stock/templates/stock/item_base.html:349 templates/js/stock.js:618 msgid "Last Updated" -msgstr "" +msgstr "Zuletzt aktualisiert" #: stock/templates/stock/item_base.html:354 msgid "Last Stocktake" -msgstr "" +msgstr "Letzte Inventur" #: stock/templates/stock/item_base.html:358 msgid "No stocktake performed" -msgstr "" +msgstr "Keine Inventur ausgeführt" #: stock/templates/stock/item_childs.html:12 msgid "Child Stock Items" -msgstr "" +msgstr "Kind-Lagerobjekte" #: stock/templates/stock/item_childs.html:18 msgid "This stock item does not have any child items" -msgstr "" +msgstr "Dieses Lagerobjekt hat keine Kinder" #: stock/templates/stock/item_delete.html:9 +#, fuzzy +#| msgid "Are you sure you want to delete this attachment?" msgid "Are you sure you want to delete this stock item?" -msgstr "" +msgstr "Sind Sie sicher, dass Sie diesen Anhang löschen wollen?" #: stock/templates/stock/item_install.html:7 +#, fuzzy +#| msgid "Installed in Stock Item" msgid "Install another StockItem into this item." -msgstr "" +msgstr "In Lagerobjekt installiert" #: stock/templates/stock/item_install.html:10 msgid "Stock items can only be installed if they meet the following criteria" @@ -4274,16 +4972,22 @@ msgid "The StockItem links to a Part which is in the BOM for this StockItem" msgstr "" #: stock/templates/stock/item_install.html:14 +#, fuzzy +#| msgid "This stock item is allocated to Build" msgid "The StockItem is currently in stock" -msgstr "" +msgstr "Dieses Lagerobjekt ist dem Bau zugewiesen" #: stock/templates/stock/item_installed.html:10 +#, fuzzy +#| msgid "Installed in Stock Item" msgid "Installed Stock Items" -msgstr "" +msgstr "In Lagerobjekt installiert" #: stock/templates/stock/item_serialize.html:5 +#, fuzzy +#| msgid "Purchase order for this stock item" msgid "Create serialized items from this stock item." -msgstr "" +msgstr "Bestellung für dieses Teil" #: stock/templates/stock/item_serialize.html:7 msgid "Select quantity to serialize, and unique serial numbers." @@ -4294,8 +4998,10 @@ msgid "Test Data" msgstr "" #: stock/templates/stock/item_tests.html:18 +#, fuzzy +#| msgid "Delete Template" msgid "Delete Test Data" -msgstr "" +msgstr "Vorlage löschen" #: stock/templates/stock/item_tests.html:22 msgid "Add Test Data" @@ -4309,72 +5015,88 @@ msgstr "" #: stock/templates/stock/location.html:30 msgid "All stock items" -msgstr "" +msgstr "Alle Lagerobjekte" #: stock/templates/stock/location.html:47 +#, fuzzy +#| msgid "Child Stock Items" msgid "Check-in Items" -msgstr "" +msgstr "Kind-Lagerobjekte" #: stock/templates/stock/location.html:63 +#, fuzzy +#| msgid "Location Description" msgid "Location actions" -msgstr "" +msgstr "Standort-Beschreibung" #: stock/templates/stock/location.html:65 +#, fuzzy +#| msgid "Edit stock location" msgid "Edit location" -msgstr "" +msgstr "Lagerort bearbeiten" #: stock/templates/stock/location.html:67 +#, fuzzy +#| msgid "Delete stock location" msgid "Delete location" -msgstr "" +msgstr "Lagerort löschen" #: stock/templates/stock/location.html:78 msgid "Location Details" -msgstr "" +msgstr "Standort-Details" #: stock/templates/stock/location.html:83 msgid "Location Path" -msgstr "" +msgstr "Standord-Pfad" #: stock/templates/stock/location.html:88 msgid "Location Description" -msgstr "" +msgstr "Standort-Beschreibung" #: stock/templates/stock/location.html:93 msgid "Sublocations" -msgstr "" +msgstr "Sub-Standorte" #: stock/templates/stock/location.html:98 #: stock/templates/stock/location.html:113 #: templates/InvenTree/search_stock_items.html:6 templates/stats.html:48 #: templates/stats.html:57 users/models.py:35 msgid "Stock Items" -msgstr "" +msgstr "Lagerobjekte" #: stock/templates/stock/location.html:103 msgid "Stock Details" -msgstr "" +msgstr "Objekt-Details" #: stock/templates/stock/location.html:108 #: templates/InvenTree/search_stock_location.html:6 templates/stats.html:52 #: users/models.py:34 msgid "Stock Locations" -msgstr "" +msgstr "Lagerobjekt-Standorte" #: stock/templates/stock/location_delete.html:7 +#, fuzzy +#| msgid "Are you sure you want to delete this attachment?" msgid "Are you sure you want to delete this stock location?" -msgstr "" +msgstr "Sind Sie sicher, dass Sie diesen Anhang löschen wollen?" #: stock/templates/stock/stock_uninstall.html:8 +#, fuzzy +#| msgid "The following items will be created" msgid "The following stock items will be uninstalled" -msgstr "" +msgstr "Die folgenden Objekte werden erstellt" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1517 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1430 +#, fuzzy +#| msgid "Count Stock Items" msgid "Convert Stock Item" -msgstr "" +msgstr "Lagerobjekte zählen" #: stock/templates/stock/stockitem_convert.html:8 +#, fuzzy +#| msgid "This stock item is allocated to Build" msgid "This stock item is current an instance of " -msgstr "" +msgstr "Dieses Lagerobjekt ist dem Bau zugewiesen" #: stock/templates/stock/stockitem_convert.html:9 msgid "It can be converted to one of the part variants listed below." @@ -4386,226 +5108,254 @@ msgstr "" #: stock/templates/stock/tabs.html:6 msgid "Tracking" -msgstr "" +msgstr "Tracking" #: stock/templates/stock/tabs.html:21 msgid "Builds" -msgstr "" +msgstr "Baue" #: stock/templates/stock/tabs.html:38 msgid "Children" -msgstr "" +msgstr "Kinder" #: stock/templates/stock/tabs.html:44 +#, fuzzy +#| msgid "Installed In" msgid "Installed Items" -msgstr "" +msgstr "Installiert in" -#: stock/views.py:127 +#: stock/views.py:126 msgid "Edit Stock Location" -msgstr "" +msgstr "Lagerobjekt-Standort bearbeiten" -#: stock/views.py:235 stock/views.py:1507 stock/views.py:1620 -#: stock/views.py:1982 +#: stock/views.py:234 stock/views.py:1420 stock/views.py:1533 +#: stock/views.py:1895 msgid "Owner is required (ownership control is enabled)" msgstr "" -#: stock/views.py:250 +#: stock/views.py:249 msgid "Stock Location QR code" -msgstr "" +msgstr "QR-Code für diesen Standort" -#: stock/views.py:269 +#: stock/views.py:268 +#, fuzzy +#| msgid "Add Attachment" msgid "Add Stock Item Attachment" -msgstr "" +msgstr "Anhang hinzufügen" -#: stock/views.py:316 +#: stock/views.py:315 +#, fuzzy +#| msgid "Edit Stock Item" msgid "Edit Stock Item Attachment" -msgstr "" +msgstr "Lagerobjekt bearbeiten" -#: stock/views.py:333 +#: stock/views.py:332 +#, fuzzy +#| msgid "Delete Part Attachment" msgid "Delete Stock Item Attachment" -msgstr "" +msgstr "Teilanhang löschen" -#: stock/views.py:350 +#: stock/views.py:349 +#, fuzzy +#| msgid "Item assigned to customer?" msgid "Assign to Customer" -msgstr "" +msgstr "Ist dieses Objekt einem Kunden zugeteilt?" -#: stock/views.py:360 +#: stock/views.py:359 msgid "Customer must be specified" msgstr "" -#: stock/views.py:384 +#: stock/views.py:383 +#, fuzzy +#| msgid "Part Stock" msgid "Return to Stock" -msgstr "" +msgstr "Teilbestand" -#: stock/views.py:394 +#: stock/views.py:393 +#, fuzzy +#| msgid "Include sublocations" msgid "Specify a valid location" -msgstr "" +msgstr "Unterlagerorte einschließen" -#: stock/views.py:405 +#: stock/views.py:404 msgid "Stock item returned from customer" msgstr "" #: stock/views.py:415 -msgid "Select Label Template" -msgstr "" - -#: stock/views.py:438 -msgid "Select valid label" -msgstr "" - -#: stock/views.py:502 +#, fuzzy +#| msgid "Delete Template" msgid "Delete All Test Data" -msgstr "" +msgstr "Vorlage löschen" -#: stock/views.py:518 +#: stock/views.py:431 +#, fuzzy +#| msgid "Confirm Part Deletion" msgid "Confirm test data deletion" -msgstr "" +msgstr "Löschen des Teils bestätigen" -#: stock/views.py:538 +#: stock/views.py:451 msgid "Add Test Result" msgstr "" -#: stock/views.py:579 +#: stock/views.py:492 +#, fuzzy +#| msgid "Edit Template" msgid "Edit Test Result" -msgstr "" +msgstr "Vorlage bearbeiten" -#: stock/views.py:597 +#: stock/views.py:510 +#, fuzzy +#| msgid "Delete Template" msgid "Delete Test Result" -msgstr "" +msgstr "Vorlage löschen" -#: stock/views.py:609 +#: stock/views.py:522 +#, fuzzy +#| msgid "Delete Template" msgid "Select Test Report Template" -msgstr "" +msgstr "Vorlage löschen" -#: stock/views.py:639 +#: stock/views.py:552 +#, fuzzy +#| msgid "Select valid part" msgid "Select valid template" -msgstr "" +msgstr "Bitte ein gültiges Teil auswählen" -#: stock/views.py:692 +#: stock/views.py:605 msgid "Stock Export Options" -msgstr "" +msgstr "Lagerbestandsexportoptionen" -#: stock/views.py:814 +#: stock/views.py:727 msgid "Stock Item QR Code" -msgstr "" +msgstr "Lagerobjekt-QR-Code" -#: stock/views.py:840 +#: stock/views.py:753 +#, fuzzy +#| msgid "Installed in Stock Item" msgid "Install Stock Item" -msgstr "" +msgstr "In Lagerobjekt installiert" -#: stock/views.py:940 +#: stock/views.py:853 +#, fuzzy +#| msgid "Installed in Stock Item" msgid "Uninstall Stock Items" -msgstr "" +msgstr "In Lagerobjekt installiert" -#: stock/views.py:1048 +#: stock/views.py:961 +#, fuzzy +#| msgid "Installed in Stock Item" msgid "Uninstalled stock items" -msgstr "" +msgstr "In Lagerobjekt installiert" -#: stock/views.py:1073 +#: stock/views.py:986 msgid "Adjust Stock" -msgstr "" +msgstr "Lagerbestand anpassen" -#: stock/views.py:1183 +#: stock/views.py:1096 msgid "Move Stock Items" -msgstr "" +msgstr "Lagerobjekte bewegen" -#: stock/views.py:1184 +#: stock/views.py:1097 msgid "Count Stock Items" -msgstr "" +msgstr "Lagerobjekte zählen" -#: stock/views.py:1185 +#: stock/views.py:1098 msgid "Remove From Stock" -msgstr "" +msgstr "Aus Lagerbestand entfernen" -#: stock/views.py:1186 +#: stock/views.py:1099 msgid "Add Stock Items" -msgstr "" +msgstr "Lagerobjekte hinzufügen" -#: stock/views.py:1187 +#: stock/views.py:1100 msgid "Delete Stock Items" -msgstr "" +msgstr "Lagerobjekte löschen" -#: stock/views.py:1215 +#: stock/views.py:1128 msgid "Must enter integer value" -msgstr "" +msgstr "Nur Ganzzahl eingeben" -#: stock/views.py:1220 +#: stock/views.py:1133 msgid "Quantity must be positive" -msgstr "" +msgstr "Anzahl muss positiv sein" -#: stock/views.py:1227 +#: stock/views.py:1140 #, python-brace-format msgid "Quantity must not exceed {x}" -msgstr "" +msgstr "Anzahl darf {x} nicht überschreiten" -#: stock/views.py:1306 +#: stock/views.py:1219 #, python-brace-format msgid "Added stock to {n} items" -msgstr "" +msgstr "Vorrat zu {n} Lagerobjekten hinzugefügt" -#: stock/views.py:1321 +#: stock/views.py:1234 #, python-brace-format msgid "Removed stock from {n} items" -msgstr "" +msgstr "Vorrat von {n} Lagerobjekten entfernt" -#: stock/views.py:1334 +#: stock/views.py:1247 #, python-brace-format msgid "Counted stock for {n} items" -msgstr "" +msgstr "Bestand für {n} Objekte erfasst" -#: stock/views.py:1374 +#: stock/views.py:1287 msgid "No items were moved" -msgstr "" +msgstr "Keine Lagerobjekte wurden bewegt" -#: stock/views.py:1377 +#: stock/views.py:1290 #, python-brace-format msgid "Moved {n} items to {dest}" -msgstr "" +msgstr "{n} Teile nach {dest} bewegt" -#: stock/views.py:1396 +#: stock/views.py:1309 #, python-brace-format msgid "Deleted {n} stock items" -msgstr "" +msgstr "{n} Teile im Lager gelöscht" -#: stock/views.py:1408 +#: stock/views.py:1321 msgid "Edit Stock Item" -msgstr "" +msgstr "Lagerobjekt bearbeiten" -#: stock/views.py:1637 +#: stock/views.py:1550 msgid "Serialize Stock" -msgstr "" +msgstr "Lagerbestand erfassen" -#: stock/views.py:1731 templates/js/build.js:210 +#: stock/views.py:1644 templates/js/build.js:210 msgid "Create new Stock Item" -msgstr "" +msgstr "Neues Lagerobjekt hinzufügen" -#: stock/views.py:1874 +#: stock/views.py:1787 +#, fuzzy +#| msgid "Count stock items" msgid "Duplicate Stock Item" -msgstr "" +msgstr "Lagerobjekte zählen" -#: stock/views.py:1956 +#: stock/views.py:1869 +#, fuzzy +#| msgid "Quantity must be greater than zero" msgid "Quantity cannot be negative" -msgstr "" +msgstr "Anzahl muss größer Null sein" -#: stock/views.py:2051 +#: stock/views.py:1964 msgid "Delete Stock Location" -msgstr "" +msgstr "Standort löschen" -#: stock/views.py:2065 +#: stock/views.py:1978 msgid "Delete Stock Item" -msgstr "" +msgstr "Lagerobjekt löschen" -#: stock/views.py:2077 +#: stock/views.py:1990 msgid "Delete Stock Tracking Entry" -msgstr "" +msgstr "Lagerbestands-Tracking-Eintrag löschen" -#: stock/views.py:2096 +#: stock/views.py:2009 msgid "Edit Stock Tracking Entry" -msgstr "" +msgstr "Lagerbestands-Tracking-Eintrag bearbeiten" -#: stock/views.py:2106 +#: stock/views.py:2019 msgid "Add Stock Tracking Entry" -msgstr "" +msgstr "Lagerbestands-Tracking-Eintrag hinzufügen" #: templates/403.html:5 templates/403.html:11 msgid "Permission Denied" @@ -4616,160 +5366,218 @@ msgid "You do not have permission to view this page." msgstr "" #: templates/404.html:5 templates/404.html:11 +#, fuzzy +#| msgid "Part image not found" msgid "Page Not Found" -msgstr "" +msgstr "Teilbild nicht gefunden" #: templates/404.html:14 +#, fuzzy +#| msgid "Part does not exist" msgid "The requested page does not exist" -msgstr "" +msgstr "Teil existiert nicht" #: templates/InvenTree/bom_invalid.html:7 msgid "BOM Waiting Validation" msgstr "" #: templates/InvenTree/build_overdue.html:7 +#, fuzzy +#| msgid "Parent Build" msgid "Overdue Builds" -msgstr "" +msgstr "Eltern-Bau" #: templates/InvenTree/build_pending.html:7 +#, fuzzy +#| msgid "Parent Build" msgid "Pending Builds" -msgstr "" +msgstr "Eltern-Bau" #: templates/InvenTree/expired_stock.html:7 +#, fuzzy +#| msgid "Assigned" msgid "Expired Stock" -msgstr "" +msgstr "Zugewiesen" #: templates/InvenTree/index.html:5 msgid "Index" msgstr "" #: templates/InvenTree/latest_parts.html:7 +#, fuzzy +#| msgid "Parent Part" msgid "Latest Parts" -msgstr "" +msgstr "Ausgangsteil" #: templates/InvenTree/po_outstanding.html:7 +#, fuzzy +#| msgid "Edit Purchase Order" msgid "Outstanding Purchase Orders" -msgstr "" +msgstr "Bestellung bearbeiten" #: templates/InvenTree/po_overdue.html:7 +#, fuzzy +#| msgid "Sales Orders" msgid "Overdue Purchase Orders" -msgstr "" +msgstr "Bestellungen" #: templates/InvenTree/required_stock_build.html:7 +#, fuzzy +#| msgid "Complete Build" msgid "Require Stock To Complete Build" -msgstr "" +msgstr "Bau fertigstellen" #: templates/InvenTree/search.html:7 templates/InvenTree/search.html:12 msgid "Search Results" -msgstr "" +msgstr "Suchergebnisse" #: templates/InvenTree/search.html:24 +#, fuzzy +#| msgid "No results found" msgid "No results found for " -msgstr "" +msgstr "Keine Ergebnisse gefunden" #: templates/InvenTree/search.html:42 +#, fuzzy +#| msgid "Cancel sales order" msgid "Enter a search query" -msgstr "" +msgstr "Auftrag stornieren" #: templates/InvenTree/search.html:191 templates/js/stock.js:300 +#, fuzzy +#| msgid "Item assigned to customer?" msgid "Shipped to customer" -msgstr "" +msgstr "Ist dieses Objekt einem Kunden zugeteilt?" #: templates/InvenTree/search.html:194 templates/js/stock.js:310 msgid "No stock location set" -msgstr "" +msgstr "Kein Lagerort gesetzt" #: templates/InvenTree/searching.html:3 +#, fuzzy +#| msgid "Search" msgid "Searching" -msgstr "" +msgstr "Suche" #: templates/InvenTree/settings/build.html:10 +#, fuzzy +#| msgid "Build Orders" msgid "Build Order Settings" -msgstr "" +msgstr "Bauaufträge" #: templates/InvenTree/settings/category.html:9 +#, fuzzy +#| msgid "Category Details" msgid "Category Settings" -msgstr "" +msgstr "Kategorie-Details" #: templates/InvenTree/settings/category.html:25 +#, fuzzy +#| msgid "Edit Part Parameter Template" msgid "Category Parameter Templates" -msgstr "" +msgstr "Teilparametervorlage bearbeiten" #: templates/InvenTree/settings/category.html:52 +#, fuzzy +#| msgid "No part parameter templates found" msgid "No category parameter templates found" -msgstr "" +msgstr "Keine Teilparametervorlagen gefunden" #: templates/InvenTree/settings/category.html:67 +#, fuzzy +#| msgid "Default Location" msgid "Default Value" -msgstr "" +msgstr "Standard-Lagerort" #: templates/InvenTree/settings/category.html:70 #: templates/InvenTree/settings/part.html:79 msgid "Edit Template" -msgstr "" +msgstr "Vorlage bearbeiten" #: templates/InvenTree/settings/category.html:71 #: templates/InvenTree/settings/part.html:80 msgid "Delete Template" -msgstr "" +msgstr "Vorlage löschen" #: templates/InvenTree/settings/global.html:10 +#, fuzzy +#| msgid "InvenTree Version" msgid "Global InvenTree Settings" -msgstr "" +msgstr "InvenTree-Version" #: templates/InvenTree/settings/header.html:7 +#, fuzzy +#| msgid "Settings" msgid "Setting" -msgstr "" +msgstr "Einstellungen" #: templates/InvenTree/settings/part.html:9 +#, fuzzy +#| msgid "Settings" msgid "Part Settings" -msgstr "" +msgstr "Einstellungen" #: templates/InvenTree/settings/part.html:14 +#, fuzzy +#| msgid "Source Location" msgid "Part Options" -msgstr "" +msgstr "Quell-Standort" #: templates/InvenTree/settings/part.html:38 +#, fuzzy +#| msgid "Edit Part Parameter Template" msgid "Part Parameter Templates" -msgstr "" +msgstr "Teilparametervorlage bearbeiten" #: templates/InvenTree/settings/part.html:59 msgid "No part parameter templates found" -msgstr "" +msgstr "Keine Teilparametervorlagen gefunden" #: templates/InvenTree/settings/po.html:9 +#, fuzzy +#| msgid "Purchase Order Details" msgid "Purchase Order Settings" -msgstr "" +msgstr "Bestelldetails" #: templates/InvenTree/settings/setting.html:23 msgid "No value set" msgstr "" #: templates/InvenTree/settings/setting.html:31 +#, fuzzy +#| msgid "Settings" msgid "Edit setting" -msgstr "" +msgstr "Einstellungen" #: templates/InvenTree/settings/settings.html:7 #: templates/InvenTree/settings/settings.html:13 templates/navbar.html:66 msgid "Settings" -msgstr "" +msgstr "Einstellungen" #: templates/InvenTree/settings/so.html:9 +#, fuzzy +#| msgid "Sales Order Details" msgid "Sales Order Settings" -msgstr "" +msgstr "Auftragsdetails" #: templates/InvenTree/settings/stock.html:9 +#, fuzzy +#| msgid "Stock Locations" msgid "Stock Settings" -msgstr "" +msgstr "Lagerobjekt-Standorte" #: templates/InvenTree/settings/stock.html:13 +#, fuzzy +#| msgid "Stock Locations" msgid "Stock Options" -msgstr "" +msgstr "Lagerobjekt-Standorte" #: templates/InvenTree/settings/tabs.html:3 #: templates/InvenTree/settings/user.html:10 +#, fuzzy +#| msgid "Settings" msgid "User Settings" -msgstr "" +msgstr "Einstellungen" #: templates/InvenTree/settings/tabs.html:6 msgid "Account" @@ -4780,20 +5588,26 @@ msgid "Theme" msgstr "" #: templates/InvenTree/settings/tabs.html:13 +#, fuzzy +#| msgid "InvenTree Version" msgid "InvenTree Settings" -msgstr "" +msgstr "InvenTree-Version" #: templates/InvenTree/settings/tabs.html:16 msgid "Global" msgstr "" #: templates/InvenTree/settings/tabs.html:19 +#, fuzzy +#| msgid "Part Categories" msgid "Categories" -msgstr "" +msgstr "Teile-Kategorien" #: templates/InvenTree/settings/theme.html:10 +#, fuzzy +#| msgid "Settings" msgid "Theme Settings" -msgstr "" +msgstr "Einstellungen" #: templates/InvenTree/settings/theme.html:17 msgid "Color Themes" @@ -4810,88 +5624,106 @@ msgid "" msgstr "" #: templates/InvenTree/settings/user.html:16 +#, fuzzy +#| msgid "No user information" msgid "User Information" -msgstr "" +msgstr "Keine Benutzerinformation" #: templates/InvenTree/settings/user.html:21 +#, fuzzy +#| msgid "Create new part" msgid "Change Password" -msgstr "" +msgstr "Neues Teil anlegen" #: templates/InvenTree/settings/user.html:28 +#, fuzzy +#| msgid "User" msgid "Username" -msgstr "" +msgstr "Benutzer" #: templates/InvenTree/settings/user.html:32 +#, fuzzy +#| msgid "Instance Name" msgid "First Name" -msgstr "" +msgstr "Instanzname" #: templates/InvenTree/settings/user.html:36 +#, fuzzy +#| msgid "Instance Name" msgid "Last Name" -msgstr "" +msgstr "Instanzname" #: templates/InvenTree/settings/user.html:40 +#, fuzzy +#| msgid "Address" msgid "Email Address" -msgstr "" +msgstr "Adresse" #: templates/InvenTree/so_outstanding.html:7 +#, fuzzy +#| msgid "Destination Sales Order" msgid "Outstanding Sales Orders" -msgstr "" +msgstr "Zielauftrag" #: templates/InvenTree/so_overdue.html:7 +#, fuzzy +#| msgid "Sales Orders" msgid "Overdue Sales Orders" -msgstr "" +msgstr "Bestellungen" #: templates/InvenTree/stale_stock.html:7 +#, fuzzy +#| msgid "Serialize Stock" msgid "Stale Stock" -msgstr "" +msgstr "Lagerbestand erfassen" #: templates/InvenTree/starred_parts.html:7 msgid "Starred Parts" -msgstr "" +msgstr "Teilfavoriten" #: templates/about.html:13 msgid "InvenTree Version Information" -msgstr "" +msgstr "InvenTree-Versionsinformationen" #: templates/about.html:21 msgid "InvenTree Version" -msgstr "" +msgstr "InvenTree-Version" #: templates/about.html:25 msgid "Django Version" -msgstr "" +msgstr "Django-Version" #: templates/about.html:29 msgid "Commit Hash" -msgstr "" +msgstr "Commit-Hash" #: templates/about.html:33 msgid "Commit Date" -msgstr "" +msgstr "Commit-Datum" #: templates/about.html:37 msgid "InvenTree Documentation" -msgstr "" +msgstr "InvenTree-Dokumentation" #: templates/about.html:42 msgid "View Code on GitHub" -msgstr "" +msgstr "Code auf GitHub ansehen" #: templates/about.html:46 msgid "Submit Bug Report" -msgstr "" +msgstr "Fehlerbericht senden" #: templates/attachment_table.html:6 msgid "Add Attachment" -msgstr "" +msgstr "Anhang hinzufügen" #: templates/attachment_table.html:15 msgid "File" -msgstr "" +msgstr "Datei" #: templates/attachment_table.html:16 msgid "Comment" -msgstr "" +msgstr "Kommentar" #: templates/attachment_table.html:17 msgid "Uploaded" @@ -4899,35 +5731,47 @@ msgstr "" #: templates/attachment_table.html:35 msgid "Delete attachment" -msgstr "" +msgstr "Anhang löschen" #: templates/js/barcode.js:8 +#, fuzzy +#| msgid "No barcode data provided" msgid "Scan barcode data here using wedge scanner" -msgstr "" +msgstr "Keine Strichcodedaten bereitgestellt" #: templates/js/barcode.js:12 +#, fuzzy +#| msgid "Source Location" msgid "Barcode" -msgstr "" +msgstr "Quell-Standort" #: templates/js/barcode.js:20 +#, fuzzy +#| msgid "No barcode data provided" msgid "Enter barcode data" -msgstr "" +msgstr "Keine Strichcodedaten bereitgestellt" -#: templates/js/barcode.js:42 +#: templates/js/barcode.js:42 templates/js/modals.js:856 msgid "Invalid server response" msgstr "" #: templates/js/barcode.js:143 +#, fuzzy +#| msgid "No barcode data provided" msgid "Scan barcode data below" -msgstr "" +msgstr "Keine Strichcodedaten bereitgestellt" #: templates/js/barcode.js:217 templates/js/barcode.js:263 +#, fuzzy +#| msgid "Unknown barcode format" msgid "Unknown response from server" -msgstr "" +msgstr "Unbekanntes Strichcode-Format" #: templates/js/barcode.js:239 +#, fuzzy +#| msgid "Parent Stock Item" msgid "Link Barcode to Stock Item" -msgstr "" +msgstr "Eltern-Lagerobjekt" #: templates/js/barcode.js:285 msgid "" @@ -4939,20 +5783,26 @@ msgid "Unlink" msgstr "" #: templates/js/barcode.js:350 +#, fuzzy +#| msgid "Remove stock" msgid "Remove stock item" -msgstr "" +msgstr "Bestand entfernen" #: templates/js/barcode.js:397 +#, fuzzy +#| msgid "Entry notes" msgid "Enter notes" -msgstr "" +msgstr "Eintrags-Notizen" #: templates/js/barcode.js:399 msgid "Enter optional notes for stock transfer" msgstr "" #: templates/js/barcode.js:404 +#, fuzzy +#| msgid "Include stock items in sub locations" msgid "Check Stock Items into Location" -msgstr "" +msgstr "Lagerobjekte in untergeordneten Lagerorten einschließen" #: templates/js/barcode.js:408 msgid "Check In" @@ -4963,205 +5813,403 @@ msgid "Server error" msgstr "" #: templates/js/barcode.js:485 +#, fuzzy +#| msgid "Stock Item Details" msgid "Stock Item already scanned" -msgstr "" +msgstr "Lagerbestands-Details" #: templates/js/barcode.js:489 +#, fuzzy +#| msgid "Include stock items in sub locations" msgid "Stock Item already in this location" -msgstr "" +msgstr "Lagerobjekte in untergeordneten Lagerorten einschließen" #: templates/js/barcode.js:496 +#, fuzzy +#| msgid "Added stock to {n} items" msgid "Added stock item" -msgstr "" +msgstr "Vorrat zu {n} Lagerobjekten hinzugefügt" #: templates/js/barcode.js:503 +#, fuzzy +#| msgid "Create new Stock Item" msgid "Barcode does not match Stock Item" -msgstr "" +msgstr "Neues Lagerobjekt hinzufügen" #: templates/js/bom.js:165 msgid "Open subassembly" -msgstr "" +msgstr "Unterbaugruppe öffnen" #: templates/js/bom.js:206 +#, fuzzy +#| msgid "Options" msgid "Optional" -msgstr "" +msgstr "Optionen" #: templates/js/bom.js:252 msgid "No pricing available" -msgstr "" +msgstr "Keine Preisinformation verfügbar" #: templates/js/bom.js:304 templates/js/build.js:571 +#, fuzzy +#| msgid "Options" msgid "Actions" -msgstr "" +msgstr "Optionen" #: templates/js/bom.js:312 msgid "Validate BOM Item" -msgstr "" +msgstr "BOM-Position validieren" #: templates/js/bom.js:314 msgid "This line has been validated" -msgstr "" +msgstr "Diese Position wurde validiert" #: templates/js/bom.js:316 msgid "Edit BOM Item" -msgstr "" +msgstr "BOM-Position bearbeiten" #: templates/js/bom.js:318 msgid "Delete BOM Item" -msgstr "" +msgstr "BOM-Position löschen" #: templates/js/bom.js:395 templates/js/build.js:305 msgid "No BOM items found" -msgstr "" +msgstr "Keine BOM-Einträge gefunden" #: templates/js/bom.js:541 msgid "INACTIVE" -msgstr "" +msgstr "INAKTIV" #: templates/js/bom.js:555 msgid "Uses" msgstr "" #: templates/js/bom.js:566 +#, fuzzy +#| msgid "No matching action found" msgid "No matching parts found" -msgstr "" +msgstr "Keine passende Aktion gefunden" #: templates/js/build.js:56 +#, fuzzy +#| msgid "Installed in Stock Item" msgid "Auto-allocate stock items to this output" -msgstr "" +msgstr "In Lagerobjekt installiert" #: templates/js/build.js:62 +#, fuzzy +#| msgid "Complete Build" msgid "Complete build output" -msgstr "" +msgstr "Bau fertigstellen" #: templates/js/build.js:71 +#, fuzzy +#| msgid "Allocate Stock to Build" msgid "Unallocate stock from build output" -msgstr "" +msgstr "Lagerbestand dem Bau zuweisen" #: templates/js/build.js:77 +#, fuzzy +#| msgid "Delete Build" msgid "Delete build output" -msgstr "" +msgstr "Bau entfernt" #: templates/js/build.js:209 templates/stock_table.html:21 msgid "New Stock Item" -msgstr "" +msgstr "Neues Lagerobjekt" #: templates/js/build.js:493 +#, fuzzy +#| msgid "Required" msgid "Required Part" -msgstr "" +msgstr "benötigt" #: templates/js/build.js:514 +#, fuzzy +#| msgid "Quantity" msgid "Quantity Per" -msgstr "" +msgstr "Anzahl" #: templates/js/build.js:578 +#, fuzzy +#| msgid "Builds" msgid "Build stock" -msgstr "" +msgstr "Baue" -#: templates/js/build.js:582 templates/stock_table.html:33 +#: templates/js/build.js:582 templates/stock_table.html:37 msgid "Order stock" -msgstr "" +msgstr "Bestand bestellen" #: templates/js/build.js:585 msgid "Allocate stock" -msgstr "" +msgstr "Lagerbestand zuweisen" #: templates/js/build.js:626 msgid "No builds matching query" -msgstr "" +msgstr "Keine Baue passen zur Anfrage" #: templates/js/build.js:656 +#, fuzzy +#| msgid "Build order allocation is complete" msgid "Build order is overdue" -msgstr "" +msgstr "Bau-Zuweisung ist vollständig" #: templates/js/build.js:747 msgid "No parts allocated for" -msgstr "" +msgstr "Keine Teile zugeordnet zu" #: templates/js/company.js:75 +#, fuzzy +#| msgid "Suppliers" msgid "Parts Supplied" -msgstr "" +msgstr "Zulieferer" #: templates/js/company.js:84 +#, fuzzy +#| msgid "Manufacturer" msgid "Parts Manufactured" -msgstr "" +msgstr "Hersteller" #: templates/js/company.js:96 msgid "No company information found" -msgstr "" +msgstr "Keine Firmeninformation gefunden" #: templates/js/company.js:129 msgid "No supplier parts found" -msgstr "" +msgstr "Keine Zuliefererteile gefunden" #: templates/js/company.js:147 templates/js/part.js:79 templates/js/part.js:164 msgid "Template part" -msgstr "" +msgstr "Vorlagenteil" #: templates/js/company.js:151 templates/js/part.js:83 templates/js/part.js:168 msgid "Assembled part" +msgstr "Baugruppe" + +#: templates/js/label.js:10 +#, fuzzy +#| msgid "Delete Stock Items" +msgid "Select Stock Items" +msgstr "Lagerobjekte löschen" + +#: templates/js/label.js:11 +#, fuzzy +#| msgid "StockItem has been allocated" +msgid "Stock item(s) must be selected before printing labels" +msgstr "Lagerobjekt wurde zugewiesen" + +#: templates/js/label.js:29 templates/js/label.js:79 +#, fuzzy +#| msgid "No parts found" +msgid "No Labels Found" +msgstr "Keine Teile gefunden" + +#: templates/js/label.js:30 +#, fuzzy +#| msgid "Remove selected BOM items" +msgid "No labels found which match selected stock item(s)" +msgstr "Ausgewählte Stücklistenpositionen entfernen" + +#: templates/js/label.js:61 +#, fuzzy +#| msgid "Delete Stock Location" +msgid "Select Stock Locations" +msgstr "Standort löschen" + +#: templates/js/label.js:62 +msgid "Stock location(s) must be selected before printing labels" +msgstr "" + +#: templates/js/label.js:80 +msgid "No labels found which match selected stock location(s)" +msgstr "" + +#: templates/js/label.js:141 +#, fuzzy +#| msgid "Select valid part" +msgid "Select Label" +msgstr "Bitte ein gültiges Teil auswählen" + +#: templates/js/label.js:156 +#, fuzzy +#| msgid "Select valid part" +msgid "Select Label Template" +msgstr "Bitte ein gültiges Teil auswählen" + +#: templates/js/modals.js:406 +#, fuzzy +#| msgid "Show pricing information" +msgid "Show Error Information" +msgstr "Kosteninformationen ansehen" + +#: templates/js/modals.js:473 +msgid "Accept" +msgstr "" + +#: templates/js/modals.js:474 +#, fuzzy +#| msgid "Cancelled" +msgid "Cancel" +msgstr "Storniert" + +#: templates/js/modals.js:538 +msgid "Loading Data" +msgstr "" + +#: templates/js/modals.js:549 templates/js/modals.js:807 +#: templates/modals.html:19 templates/modals.html:41 +#, fuzzy +#| msgid "Edit BOM" +msgid "Submit" +msgstr "Stückliste bearbeiten" + +#: templates/js/modals.js:550 templates/js/modals.js:808 +#: templates/modals.html:18 templates/modals.html:40 +msgid "Close" +msgstr "" + +#: templates/js/modals.js:759 +#, fuzzy +#| msgid "Unknown barcode format" +msgid "Invalid response from server" +msgstr "Unbekanntes Strichcode-Format" + +#: templates/js/modals.js:759 +msgid "Form data missing from server response" +msgstr "" + +#: templates/js/modals.js:772 +msgid "Error posting form data" +msgstr "" + +#: templates/js/modals.js:856 +msgid "JSON response missing form data" +msgstr "" + +#: templates/js/modals.js:866 +msgid "No Response" +msgstr "" + +#: templates/js/modals.js:867 +#, fuzzy +#| msgid "Unknown barcode format" +msgid "No response from the InvenTree server" +msgstr "Unbekanntes Strichcode-Format" + +#: templates/js/modals.js:871 +msgid "Error 400: Bad Request" +msgstr "" + +#: templates/js/modals.js:872 +msgid "Server returned error code 400" +msgstr "" + +#: templates/js/modals.js:876 +msgid "Error 401: Not Authenticated" +msgstr "" + +#: templates/js/modals.js:877 +#, fuzzy +#| msgid "Does this part have tracking for unique items?" +msgid "Authentication credentials not supplied" +msgstr "Hat dieses Teil Tracking für einzelne Objekte?" + +#: templates/js/modals.js:881 +msgid "Error 403: Permission Denied" +msgstr "" + +#: templates/js/modals.js:882 +msgid "You do not have the required permissions to access this function" +msgstr "" + +#: templates/js/modals.js:886 +msgid "Error 404: Resource Not Found" +msgstr "" + +#: templates/js/modals.js:887 +msgid "The requested resource could not be located on the server" +msgstr "" + +#: templates/js/modals.js:891 +msgid "Error 408: Timeout" +msgstr "" + +#: templates/js/modals.js:892 +msgid "Connection timeout while requesting data from server" +msgstr "" + +#: templates/js/modals.js:895 +msgid "Error requesting form data" msgstr "" #: templates/js/order.js:135 msgid "No purchase orders found" -msgstr "" +msgstr "Keine Bestellungen gefunden" #: templates/js/order.js:159 templates/js/order.js:252 +#, fuzzy +#| msgid "Build order allocation is complete" msgid "Order is overdue" -msgstr "" +msgstr "Bau-Zuweisung ist vollständig" -#: templates/js/order.js:193 templates/js/stock.js:804 +#: templates/js/order.js:193 templates/js/stock.js:821 msgid "Date" -msgstr "" +msgstr "Datum" #: templates/js/order.js:229 msgid "No sales orders found" -msgstr "" +msgstr "Keine Aufträge gefunden" #: templates/js/order.js:297 msgid "Shipment Date" -msgstr "" +msgstr "Versanddatum" #: templates/js/part.js:71 templates/js/part.js:156 +#, fuzzy +#| msgid "Trackable" msgid "Trackable part" -msgstr "" +msgstr "nachverfolgbar" #: templates/js/part.js:75 templates/js/part.js:160 +#, fuzzy +#| msgid "Virtual" msgid "Virtual part" -msgstr "" +msgstr "Virtuell" #: templates/js/part.js:87 msgid "Starred part" -msgstr "" +msgstr "Favoritenteil" #: templates/js/part.js:91 msgid "Salable part" -msgstr "" +msgstr "Verkäufliches Teil" #: templates/js/part.js:205 +#, fuzzy +#| msgid "No parts found" msgid "No variants found" -msgstr "" +msgstr "Keine Teile gefunden" #: templates/js/part.js:291 templates/js/part.js:457 msgid "No parts found" -msgstr "" +msgstr "Keine Teile gefunden" #: templates/js/part.js:343 templates/js/stock.js:473 -#: templates/js/stock.js:1151 +#: templates/js/stock.js:1168 msgid "Select" -msgstr "" +msgstr "Auswählen" #: templates/js/part.js:411 msgid "No category" -msgstr "" +msgstr "Keine Kategorie" #: templates/js/part.js:429 templates/js/table_filters.js:278 msgid "Low stock" -msgstr "" +msgstr "Bestand niedrig" #: templates/js/part.js:438 msgid "Building" -msgstr "" +msgstr "Im Bau" #: templates/js/part.js:517 msgid "YES" @@ -5172,16 +6220,22 @@ msgid "NO" msgstr "" #: templates/js/part.js:553 +#, fuzzy +#| msgid "No stock items matching query" msgid "No test templates matching query" -msgstr "" +msgstr "Keine zur Anfrage passenden Lagerobjekte" #: templates/js/part.js:604 templates/js/stock.js:74 +#, fuzzy +#| msgid "Edit Sales Order" msgid "Edit test result" -msgstr "" +msgstr "Auftrag bearbeiten" #: templates/js/part.js:605 templates/js/stock.js:75 +#, fuzzy +#| msgid "Delete attachment" msgid "Delete test result" -msgstr "" +msgstr "Anhang löschen" #: templates/js/part.js:611 msgid "This test is defined for a parent part" @@ -5200,193 +6254,267 @@ msgid "NO RESULT" msgstr "" #: templates/js/stock.js:70 +#, fuzzy +#| msgid "Edit Sales Order" msgid "Add test result" -msgstr "" +msgstr "Auftrag bearbeiten" #: templates/js/stock.js:89 +#, fuzzy +#| msgid "No results found" msgid "No test results found" -msgstr "" +msgstr "Keine Ergebnisse gefunden" #: templates/js/stock.js:131 +#, fuzzy +#| msgid "Shipment Date" msgid "Test Date" -msgstr "" +msgstr "Versanddatum" #: templates/js/stock.js:292 msgid "In production" msgstr "" #: templates/js/stock.js:296 +#, fuzzy +#| msgid "Installed in Stock Item" msgid "Installed in Stock Item" -msgstr "" +msgstr "In Lagerobjekt installiert" #: templates/js/stock.js:304 +#, fuzzy +#| msgid "Item assigned to customer?" msgid "Assigned to Sales Order" -msgstr "" +msgstr "Ist dieses Objekt einem Kunden zugeteilt?" #: templates/js/stock.js:324 msgid "No stock items matching query" -msgstr "" +msgstr "Keine zur Anfrage passenden Lagerobjekte" #: templates/js/stock.js:441 +#, fuzzy +#| msgid "Include sublocations" msgid "Undefined location" -msgstr "" +msgstr "Unterlagerorte einschließen" #: templates/js/stock.js:535 +#, fuzzy +#| msgid "StockItem is lost" msgid "Stock item is in production" -msgstr "" +msgstr "Lagerobjekt verloren" #: templates/js/stock.js:540 +#, fuzzy +#| msgid "This stock item is allocated to Sales Order" msgid "Stock item assigned to sales order" -msgstr "" +msgstr "Dieses Lagerobjekt ist dem Auftrag zugewiesen" #: templates/js/stock.js:543 +#, fuzzy +#| msgid "StockItem has been allocated" msgid "Stock item assigned to customer" -msgstr "" +msgstr "Lagerobjekt wurde zugewiesen" #: templates/js/stock.js:547 +#, fuzzy +#| msgid "StockItem has been allocated" msgid "Stock item has expired" -msgstr "" +msgstr "Lagerobjekt wurde zugewiesen" #: templates/js/stock.js:549 +#, fuzzy +#| msgid "StockItem is lost" msgid "Stock item will expire soon" -msgstr "" +msgstr "Lagerobjekt verloren" #: templates/js/stock.js:553 +#, fuzzy +#| msgid "StockItem has been allocated" msgid "Stock item has been allocated" -msgstr "" +msgstr "Lagerobjekt wurde zugewiesen" #: templates/js/stock.js:557 +#, fuzzy +#| msgid "Is this item installed in another item?" msgid "Stock item has been installed in another item" -msgstr "" +msgstr "Ist dieses Teil in einem anderen verbaut?" #: templates/js/stock.js:565 +#, fuzzy +#| msgid "StockItem has been allocated" msgid "Stock item has been rejected" -msgstr "" +msgstr "Lagerobjekt wurde zugewiesen" #: templates/js/stock.js:569 +#, fuzzy +#| msgid "StockItem is lost" msgid "Stock item is lost" -msgstr "" +msgstr "Lagerobjekt verloren" #: templates/js/stock.js:572 +#, fuzzy +#| msgid "StockItem is lost" msgid "Stock item is destroyed" -msgstr "" +msgstr "Lagerobjekt verloren" #: templates/js/stock.js:576 templates/js/table_filters.js:106 +#, fuzzy +#| msgid "Delete" msgid "Depleted" -msgstr "" +msgstr "Löschen" #: templates/js/stock.js:605 +#, fuzzy +#| msgid "Last Stocktake" msgid "Stocktake" -msgstr "" +msgstr "Letzte Inventur" -#: templates/js/stock.js:720 +#: templates/js/stock.js:737 +#, fuzzy +#| msgid "Stock status" msgid "Stock Status" -msgstr "" +msgstr "Bestandsstatus" -#: templates/js/stock.js:735 +#: templates/js/stock.js:752 +#, fuzzy +#| msgid "Stock status" msgid "Set Stock Status" -msgstr "" +msgstr "Bestandsstatus" -#: templates/js/stock.js:749 +#: templates/js/stock.js:766 +#, fuzzy +#| msgid "Select part to build" msgid "Select Status Code" -msgstr "" +msgstr "Teil für den Bau wählen" -#: templates/js/stock.js:750 +#: templates/js/stock.js:767 +#, fuzzy +#| msgid "StockItem has been allocated" msgid "Status code must be selected" -msgstr "" +msgstr "Lagerobjekt wurde zugewiesen" -#: templates/js/stock.js:870 +#: templates/js/stock.js:887 msgid "No user information" -msgstr "" +msgstr "Keine Benutzerinformation" -#: templates/js/stock.js:990 +#: templates/js/stock.js:1007 msgid "Create New Location" -msgstr "" +msgstr "Neuen Standort anlegen" -#: templates/js/stock.js:1089 +#: templates/js/stock.js:1106 +#, fuzzy +#| msgid "Serial Number" msgid "Serial" -msgstr "" +msgstr "Seriennummer" -#: templates/js/stock.js:1182 templates/js/table_filters.js:131 +#: templates/js/stock.js:1199 templates/js/table_filters.js:131 +#, fuzzy +#| msgid "Installed In" msgid "Installed" -msgstr "" +msgstr "Installiert in" -#: templates/js/stock.js:1207 +#: templates/js/stock.js:1224 +#, fuzzy +#| msgid "Installed In" msgid "Install item" -msgstr "" +msgstr "Installiert in" #: templates/js/table_filters.js:41 +#, fuzzy +#| msgid "Trackable" msgid "Trackable Part" -msgstr "" +msgstr "nachverfolgbar" #: templates/js/table_filters.js:45 +#, fuzzy +#| msgid "Validate BOM" msgid "Validated" -msgstr "" +msgstr "BOM validieren" #: templates/js/table_filters.js:65 templates/js/table_filters.js:141 +#, fuzzy +#| msgid "Serialize Stock" msgid "Is Serialized" -msgstr "" +msgstr "Lagerbestand erfassen" #: templates/js/table_filters.js:68 templates/js/table_filters.js:148 +#, fuzzy +#| msgid "Serial Number" msgid "Serial number GTE" -msgstr "" +msgstr "Seriennummer" #: templates/js/table_filters.js:69 templates/js/table_filters.js:149 +#, fuzzy +#| msgid "Serial number for this item" msgid "Serial number greater than or equal to" -msgstr "" +msgstr "Seriennummer für dieses Teil" #: templates/js/table_filters.js:72 templates/js/table_filters.js:152 +#, fuzzy +#| msgid "Serial Number" msgid "Serial number LTE" -msgstr "" +msgstr "Seriennummer" #: templates/js/table_filters.js:73 templates/js/table_filters.js:153 +#, fuzzy +#| msgid "Serial numbers already exist: " msgid "Serial number less than or equal to" -msgstr "" +msgstr "Seriennummern existieren bereits:" #: templates/js/table_filters.js:76 templates/js/table_filters.js:77 #: templates/js/table_filters.js:144 templates/js/table_filters.js:145 +#, fuzzy +#| msgid "Serial Number" msgid "Serial number" -msgstr "" +msgstr "Seriennummer" #: templates/js/table_filters.js:81 templates/js/table_filters.js:162 +#, fuzzy +#| msgid "Batch Code" msgid "Batch code" -msgstr "" +msgstr "Losnummer" #: templates/js/table_filters.js:91 templates/js/table_filters.js:245 msgid "Active parts" -msgstr "" +msgstr "Aktive Teile" #: templates/js/table_filters.js:92 msgid "Show stock for active parts" -msgstr "" +msgstr "Bestand aktiver Teile anzeigen" #: templates/js/table_filters.js:96 msgid "Is allocated" -msgstr "" +msgstr "Ist zugeordnet" #: templates/js/table_filters.js:97 msgid "Item has been alloacted" -msgstr "" +msgstr "Position wurde zugeordnet" #: templates/js/table_filters.js:101 msgid "Include sublocations" -msgstr "" +msgstr "Unterlagerorte einschließen" #: templates/js/table_filters.js:102 msgid "Include stock in sublocations" -msgstr "" +msgstr "Bestand in Unterlagerorten einschließen" #: templates/js/table_filters.js:107 +#, fuzzy +#| msgid "Delete this Stock Item when stock is depleted" msgid "Show stock items which are depleted" -msgstr "" +msgstr "Objekt löschen wenn Lagerbestand aufgebraucht" #: templates/js/table_filters.js:112 +#, fuzzy +#| msgid "Delete this Stock Item when stock is depleted" msgid "Show stock items which have expired" -msgstr "" +msgstr "Objekt löschen wenn Lagerbestand aufgebraucht" #: templates/js/table_filters.js:117 +#, fuzzy +#| msgid "Delete this Stock Item when stock is depleted" msgid "Show stock which is close to expiring" -msgstr "" +msgstr "Objekt löschen wenn Lagerbestand aufgebraucht" #: templates/js/table_filters.js:122 msgid "Show items which are in stock" @@ -5397,16 +6525,22 @@ msgid "In Production" msgstr "" #: templates/js/table_filters.js:127 +#, fuzzy +#| msgid "Delete this Stock Item when stock is depleted" msgid "Show items which are in production" -msgstr "" +msgstr "Objekt löschen wenn Lagerbestand aufgebraucht" #: templates/js/table_filters.js:132 +#, fuzzy +#| msgid "Is this item installed in another item?" msgid "Show stock items which are installed in another item" -msgstr "" +msgstr "Ist dieses Teil in einem anderen verbaut?" #: templates/js/table_filters.js:136 +#, fuzzy +#| msgid "Item assigned to customer?" msgid "Sent to customer" -msgstr "" +msgstr "Ist dieses Objekt einem Kunden zugeteilt?" #: templates/js/table_filters.js:137 msgid "Show items which have been assigned to a customer" @@ -5414,71 +6548,67 @@ msgstr "" #: templates/js/table_filters.js:157 templates/js/table_filters.js:158 msgid "Stock status" -msgstr "" +msgstr "Bestandsstatus" #: templates/js/table_filters.js:191 msgid "Build status" -msgstr "" +msgstr "Bau-Status" #: templates/js/table_filters.js:210 templates/js/table_filters.js:227 msgid "Order status" -msgstr "" +msgstr "Bestellstatus" #: templates/js/table_filters.js:215 templates/js/table_filters.js:232 +#, fuzzy +#| msgid "Cascading" msgid "Outstanding" -msgstr "" +msgstr "Kaskadierend" #: templates/js/table_filters.js:255 msgid "Include subcategories" -msgstr "" +msgstr "Unterkategorien einschließen" #: templates/js/table_filters.js:256 msgid "Include parts in subcategories" -msgstr "" +msgstr "Teile in Unterkategorien einschließen" #: templates/js/table_filters.js:260 msgid "Has IPN" msgstr "" #: templates/js/table_filters.js:261 +#, fuzzy +#| msgid "Internal Part Number" msgid "Part has internal part number" -msgstr "" +msgstr "Interne Teilenummer" #: templates/js/table_filters.js:266 msgid "Show active parts" -msgstr "" +msgstr "Aktive Teile anzeigen" #: templates/js/table_filters.js:274 msgid "Stock available" -msgstr "" +msgstr "Bestand verfügbar" #: templates/js/table_filters.js:290 msgid "Starred" -msgstr "" +msgstr "Favorit" #: templates/js/table_filters.js:302 msgid "Purchasable" -msgstr "" +msgstr "Käuflich" #: templates/modals.html:13 templates/modals.html:35 msgid "Form errors exist" msgstr "" -#: templates/modals.html:18 templates/modals.html:40 -msgid "Close" -msgstr "" - -#: templates/modals.html:19 templates/modals.html:41 -msgid "Submit" -msgstr "" - #: templates/navbar.html:29 msgid "Buy" -msgstr "" +msgstr "Kaufen" #: templates/navbar.html:39 msgid "Sell" -msgstr "" +msgstr "Verkaufen" #: templates/navbar.html:50 msgid "Scan Barcode" @@ -5490,23 +6620,23 @@ msgstr "" #: templates/navbar.html:63 users/models.py:31 msgid "Admin" -msgstr "" +msgstr "Admin" #: templates/navbar.html:67 msgid "Logout" -msgstr "" +msgstr "Ausloggen" #: templates/navbar.html:69 templates/registration/login.html:43 msgid "Login" -msgstr "" +msgstr "Einloggen" #: templates/navbar.html:80 msgid "About InvenTree" -msgstr "" +msgstr "Über InvenBaum" #: templates/search_form.html:6 templates/search_form.html:8 msgid "Search" -msgstr "" +msgstr "Suche" #: templates/stats.html:9 msgid "Server" @@ -5514,67 +6644,95 @@ msgstr "" #: templates/stats.html:13 msgid "Instance Name" -msgstr "" +msgstr "Instanzname" #: templates/stats.html:18 +#, fuzzy +#| msgid "Order status" msgid "Server status" -msgstr "" +msgstr "Bestellstatus" #: templates/stats.html:21 msgid "Healthy" msgstr "" #: templates/stats.html:23 +#, fuzzy +#| msgid "Issue Order" msgid "Issues detected" -msgstr "" +msgstr "Bestellung aufgeben" #: templates/stock_table.html:12 +#, fuzzy +#| msgid "Edit Stock Location" msgid "Export Stock Information" -msgstr "" +msgstr "Lagerobjekt-Standort bearbeiten" #: templates/stock_table.html:29 -msgid "Add to selected stock items" -msgstr "" - -#: templates/stock_table.html:30 -msgid "Remove from selected stock items" -msgstr "" - -#: templates/stock_table.html:31 -msgid "Stocktake selected stock items" -msgstr "" - -#: templates/stock_table.html:32 -msgid "Move selected stock items" -msgstr "" - -#: templates/stock_table.html:32 -msgid "Move stock" +msgid "Print labels" msgstr "" #: templates/stock_table.html:33 +#, fuzzy +#| msgid "Added stock to {n} items" +msgid "Add to selected stock items" +msgstr "Vorrat zu {n} Lagerobjekten hinzugefügt" + +#: templates/stock_table.html:34 +#, fuzzy +#| msgid "Remove selected BOM items" +msgid "Remove from selected stock items" +msgstr "Ausgewählte Stücklistenpositionen entfernen" + +#: templates/stock_table.html:35 +#, fuzzy +#| msgid "Delete Stock Item" +msgid "Stocktake selected stock items" +msgstr "Lagerobjekt löschen" + +#: templates/stock_table.html:36 +#, fuzzy +#| msgid "Delete Stock Item" +msgid "Move selected stock items" +msgstr "Lagerobjekt löschen" + +#: templates/stock_table.html:36 +msgid "Move stock" +msgstr "Bestand bewegen" + +#: templates/stock_table.html:37 +#, fuzzy +#| msgid "Remove selected BOM items" msgid "Order selected items" -msgstr "" +msgstr "Ausgewählte Stücklistenpositionen entfernen" -#: templates/stock_table.html:34 +#: templates/stock_table.html:38 +#, fuzzy +#| msgid "Settings" msgid "Change status" -msgstr "" +msgstr "Einstellungen" -#: templates/stock_table.html:34 +#: templates/stock_table.html:38 +#, fuzzy +#| msgid "Stock status" msgid "Change stock status" -msgstr "" +msgstr "Bestandsstatus" -#: templates/stock_table.html:37 +#: templates/stock_table.html:41 +#, fuzzy +#| msgid "Delete line item" msgid "Delete selected items" -msgstr "" +msgstr "Position löschen" -#: templates/stock_table.html:37 +#: templates/stock_table.html:41 msgid "Delete Stock" -msgstr "" +msgstr "Bestand löschen" #: users/admin.py:64 +#, fuzzy +#| msgid "User" msgid "Users" -msgstr "" +msgstr "Benutzer" #: users/admin.py:65 msgid "Select which users are assigned to this group" @@ -5585,49 +6743,374 @@ msgid "The following users are members of multiple groups:" msgstr "" #: users/admin.py:210 +#, fuzzy +#| msgid "External Link" msgid "Personal info" -msgstr "" +msgstr "Externer Link" #: users/admin.py:211 +#, fuzzy +#| msgid "Revision" msgid "Permissions" -msgstr "" +msgstr "Revision" #: users/admin.py:214 +#, fuzzy +#| msgid "Import BOM data" msgid "Important dates" -msgstr "" +msgstr "Stückliste importieren" -#: users/models.py:146 +#: users/models.py:147 msgid "Permission set" msgstr "" -#: users/models.py:154 +#: users/models.py:155 msgid "Group" msgstr "" -#: users/models.py:157 +#: users/models.py:158 msgid "View" msgstr "" -#: users/models.py:157 +#: users/models.py:158 msgid "Permission to view items" msgstr "" -#: users/models.py:159 +#: users/models.py:160 +#, fuzzy +#| msgid "Address" msgid "Add" -msgstr "" +msgstr "Adresse" -#: users/models.py:159 +#: users/models.py:160 msgid "Permission to add items" msgstr "" -#: users/models.py:161 +#: users/models.py:162 msgid "Change" msgstr "" -#: users/models.py:161 +#: users/models.py:162 msgid "Permissions to edit items" msgstr "" -#: users/models.py:163 +#: users/models.py:164 +#, fuzzy +#| msgid "Remove selected BOM items" msgid "Permission to delete items" -msgstr "" +msgstr "Ausgewählte Stücklistenpositionen entfernen" + +#~ msgid "Database Statistics" +#~ msgstr "Datenbankstatistiken" + +#~ msgid "BOM Price" +#~ msgstr "Stücklistenpreis" + +#~ msgid "BOM pricing is incomplete" +#~ msgstr "Stücklistenbepreisung ist unvollständig" + +#~ msgid "No pricing information" +#~ msgstr "Keine Preisinformation" + +#~ msgid "Invalid quantity" +#~ msgstr "Ungültige Menge" + +#~ msgid "Invalid part selection" +#~ msgstr "Ungültige Teileauswahl" + +#~ msgid "Created {n} new stock items" +#~ msgstr "{n} neue Lagerobjekte erstellt" + +#~ msgid "Created new stock item" +#~ msgstr "Neues Lagerobjekt erstellt" + +#~ msgid "Statistics" +#~ msgstr "Statistiken" + +#~ msgid "Currency Symbol e.g. $" +#~ msgstr "Währungs-Symbol (z.B. €)" + +#~ msgid "Currency Suffix e.g. AUD" +#~ msgstr "Währungs-Suffix (z.B. EUR)" + +#~ msgid "Currency Description" +#~ msgstr "Währungs-Beschreibung" + +#~ msgid "Currency Value" +#~ msgstr "Währungs-Wert" + +#~ msgid "Use this currency as the base currency" +#~ msgstr "Benutze diese Währung als Basis-Währung" + +#~ msgid "Create new Currency" +#~ msgstr "Neues Währung hinzufügen" + +#~ msgid "Edit Currency" +#~ msgstr "Währung bearbeiten" + +#~ msgid "Select currency for price calculation" +#~ msgstr "Währung zur Preisberechnung wählen" + +#~ msgid "Destination Build Order" +#~ msgstr "Zielbauauftrag" + +#, fuzzy +#~| msgid "Settings" +#~ msgid "General Settings" +#~ msgstr "Einstellungen" + +#, fuzzy +#~| msgid "Currency Value" +#~ msgid "Currencies" +#~ msgstr "Währungs-Wert" + +#, fuzzy +#~| msgid "Delete Currency" +#~ msgid "New Currency" +#~ msgstr "Währung entfernen" + +#, fuzzy +#~| msgid "Serial Number" +#~ msgid "Serial Numbers" +#~ msgstr "Seriennummer" + +#~ msgid "Automatically allocate stock" +#~ msgstr "Lagerbestand automatisch zuweisen" + +#~ msgid "Auto Allocate" +#~ msgstr "Automatisches Zuweisen" + +#~ msgid "Unallocate" +#~ msgstr "Zuweisung aufheben" + +#~ msgid "Assigned" +#~ msgstr "Zugewiesen" + +#, fuzzy +#~| msgid "No stock items found that can be allocated to this build" +#~ msgid "" +#~ "Where the following conditions are met, stock will be automatically " +#~ "allocated to this build" +#~ msgstr "Keine Lagerobjekt gefunden, die diesem Bau zugewiesen werden können" + +#, fuzzy +#~| msgid "Part is not a virtual part" +#~ msgid "The part is not marked as trackable" +#~ msgstr "Teil ist nicht virtuell" + +#, fuzzy +#~| msgid "Installed in Stock Item" +#~ msgid "Only single stock items exists" +#~ msgstr "In Lagerobjekt installiert" + +#, fuzzy +#~| msgid "This stock item is allocated to Build" +#~ msgid "The stock item is not already allocated to this build" +#~ msgstr "Dieses Lagerobjekt ist dem Bau zugewiesen" + +#~ msgid "Warning: Build order allocation is not complete" +#~ msgstr "Warnung: Bau-Zuweisung ist unvollständig" + +#~ msgid "" +#~ "Build Order has not been fully allocated. Ensure that all Stock Items " +#~ "have been allocated to the Build" +#~ msgstr "" +#~ "Bau-Zuweisung ist unvollständig. Sicherstellen, dass alle Lagerobjekte " +#~ "dem Bau zugewiesen wurden" + +#~ msgid "The following actions will be performed:" +#~ msgstr "Die folgenden Aktionen werden ausgeführt:" + +#~ msgid "Remove allocated items from stock" +#~ msgstr "Zugewiesene Teile dem Lager entnehmen" + +#~ msgid "Add completed items to stock" +#~ msgstr "Komplettierte Teile dem Lager hinzufügen" + +#~ msgid "Enough Parts?" +#~ msgstr "Genügend Teile?" + +#~ msgid "Yes" +#~ msgstr "Ja" + +#~ msgid "No" +#~ msgstr "Nein" + +#~ msgid "No matching build found" +#~ msgstr "Kein passender Bau gefunden" + +#~ msgid "Check the confirmation box at the bottom of the list" +#~ msgstr "Bestätigunsbox am Ende der Liste bestätigen" + +#~ msgid "Invalid location selected" +#~ msgstr "Ungültige Ortsauswahl" + +#~ msgid "The following serial numbers already exist: ({sn})" +#~ msgstr "Die folgende Seriennummer existiert bereits: ({sn})" + +#~ msgid "Build marked as COMPLETE" +#~ msgstr "Bau als FERTIG markiert" + +#, fuzzy +#~| msgid "Available" +#~ msgid "Avaialabe" +#~ msgstr "verfügbar" + +#, fuzzy +#~| msgid "Overage must be an integer value or a percentage" +#~ msgid "Build quantity must be integer value for trackable parts" +#~ msgstr "Überschuss muss eine Ganzzahl oder ein Prozentwert sein" + +#~ msgid "Parent build to which this build is allocated" +#~ msgstr "Eltern-Bau, dem dieser Bau zugewiesen ist" + +#~ msgid "" +#~ "Stock Items are selected for automatic allocation if there is only a " +#~ "single stock item available." +#~ msgstr "" +#~ "Teile werden automatisch zugewiesen, wenn nur ein Lagerobjekt verfügbar " +#~ "ist" + +#~ msgid "Title" +#~ msgstr "Titel" + +#~ msgid "Allocate new Part" +#~ msgstr "Neues Teil zuordnen" + +#~ msgid "Could not cancel order" +#~ msgstr "Stornierung fehlgeschlagen" + +#~ msgid "Invalid Purchase Order" +#~ msgstr "Ungültige Bestellung" + +#~ msgid "Invalid SupplierPart selection" +#~ msgstr "Ungültige Wahl des Zulieferer-Teils" + +#, fuzzy +#~| msgid "This stock item is allocated to Sales Order" +#~ msgid "Stock item was assigned to a build order" +#~ msgstr "Dieses Lagerobjekt ist dem Auftrag zugewiesen" + +#, fuzzy +#~| msgid "Template part" +#~ msgid "Templat part" +#~ msgstr "Vorlagenteil" + +#~ msgid "Link to extenal URL" +#~ msgstr "Link zu einer Externen URL" + +#, fuzzy +#~| msgid "Reference" +#~ msgid "Reference Prefix" +#~ msgstr "Referenz" + +#, fuzzy +#~| msgid "Reference" +#~ msgid "Reference Regex" +#~ msgstr "Referenz" + +#~ msgid "Build Title" +#~ msgstr "Bau-Titel" + +#~ msgid "Start new Build" +#~ msgstr "Neuen Bau beginnen" + +#~ msgid "Settings description" +#~ msgstr "Einstellungs-Beschreibung" + +#, fuzzy +#~| msgid "Select a purchase order for" +#~ msgid "Enter purchase order number" +#~ msgstr "Bestellung auswählen für" + +#, fuzzy +#~| msgid "Created" +#~ msgid "Create" +#~ msgstr "Erstellt" + +#, fuzzy +#~| msgid "Last Updated" +#~ msgid "Update" +#~ msgstr "Zuletzt aktualisiert" + +#~ msgid "Belongs To" +#~ msgstr "Gehört zu" + +#, fuzzy +#~| msgid "Added stock to {n} items" +#~ msgid "Uninstall selected stock items" +#~ msgstr "Vorrat zu {n} Lagerobjekten hinzugefügt" + +#~ msgid "Order Multiple" +#~ msgstr "Bestellvielfaches" + +#~ msgid "Base Price (Flat Fee)" +#~ msgstr "Grundpreis" + +#~ msgid "New Price Break" +#~ msgstr "Neue Preisstaffelung" + +#~ msgid "No price breaks have been added for this part" +#~ msgstr "Keine Preisstaffelung für dieses Teil" + +#~ msgid "Part cannot be added to its own Bill of Materials" +#~ msgstr "Teil kann nicht zu seiner eigenen Stückliste hinzugefügt werden" + +#, fuzzy +#~| msgid "" +#~| "This stock item is serialized - it has a unique serial number and the " +#~| "quantity cannot be adjusted." +#~ msgid "Stock item is serialized and quantity cannot be adjusted" +#~ msgstr "" +#~ "Dieses Lagerobjekt ist serialisiert. Es hat eine eindeutige Seriennummer " +#~ "und die Anzahl kann nicht angepasst werden." + +#~ msgid "Used for Build" +#~ msgstr "Verwendet für Bau" + +#~ msgid "Count stock items" +#~ msgstr "Lagerobjekte zählen" + +#~ msgid "Barcode successfully decoded" +#~ msgstr "Strichcode erfolgreich dekodiert" + +#~ msgid "Barcode plugin returned incorrect response" +#~ msgstr "Ungültige Antwort vom Strichcode-Plugin" + +#~ msgid "StockLocation does not exist" +#~ msgstr "Lagerort existiert nicht" + +#~ msgid "StockItem does not exist" +#~ msgstr "Lagerobjekt existiert nicht" + +#, fuzzy +#~| msgid "Add stock" +#~ msgid "Add to stock" +#~ msgstr "Bestand hinzufügen" + +#, fuzzy +#~| msgid "Remove From Stock" +#~ msgid "Take from stock" +#~ msgstr "Aus Lagerbestand entfernen" + +#~ msgid "Copy Stock Item" +#~ msgstr "Lagerobjekt kopieren" + +#~ msgid "Part cannot be a variant of another part if it is already a template" +#~ msgstr "" +#~ "Teil kann keine Variante eines anderen Teils sein wenn es bereits eine " +#~ "Vorlage ist" + +#~ msgid "It is not a real part, but real parts can be based on this template." +#~ msgstr "" +#~ "Es ist kein echtes Teil, aber echte Teile können auf dieser Vorlage " +#~ "basieren." + +#~ msgid "Allocate" +#~ msgstr "zuweisen" + +#~ msgid "Line" +#~ msgstr "Position" + +#~ msgid "URL" +#~ msgstr "URL" diff --git a/InvenTree/locale/en/LC_MESSAGES/django.po b/InvenTree/locale/en/LC_MESSAGES/django.po index 7ddbe1b10f..ee26db4504 100644 --- a/InvenTree/locale/en/LC_MESSAGES/django.po +++ b/InvenTree/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-14 13:51+0000\n" +"POT-Creation-Date: 2021-01-17 18:11+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -55,7 +55,7 @@ msgid "Select Category" msgstr "" #: InvenTree/helpers.py:361 order/models.py:232 order/models.py:330 -#: stock/views.py:1952 +#: stock/views.py:1865 msgid "Invalid quantity provided" msgstr "" @@ -95,11 +95,11 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:68 templates/js/stock.js:861 +#: InvenTree/models.py:68 templates/js/stock.js:878 msgid "User" msgstr "" -#: InvenTree/models.py:106 part/models.py:647 +#: InvenTree/models.py:106 label/models.py:68 part/models.py:647 #: part/templates/part/params.html:24 templates/js/part.js:129 msgid "Name" msgstr "" @@ -315,8 +315,8 @@ msgstr "" #: stock/templates/stock/item_base.html:57 #: stock/templates/stock/item_base.html:234 #: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:338 -#: templates/js/bom.js:195 templates/js/build.js:420 templates/js/stock.js:852 -#: templates/js/stock.js:1091 +#: templates/js/bom.js:195 templates/js/build.js:420 templates/js/stock.js:869 +#: templates/js/stock.js:1108 msgid "Quantity" msgstr "" @@ -397,7 +397,7 @@ msgstr "" #: build/models.py:116 build/templates/build/detail.html:19 #: company/models.py:359 company/templates/company/detail.html:23 #: company/templates/company/supplier_part_base.html:61 -#: company/templates/company/supplier_part_detail.html:27 +#: company/templates/company/supplier_part_detail.html:27 label/models.py:75 #: order/templates/order/purchase_order_detail.html:161 part/models.py:671 #: part/templates/part/detail.html:51 part/templates/part/set_category.html:14 #: templates/InvenTree/search.html:147 @@ -405,7 +405,7 @@ msgstr "" #: templates/js/bom.js:549 templates/js/build.js:664 templates/js/company.js:56 #: templates/js/order.js:180 templates/js/order.js:274 templates/js/part.js:188 #: templates/js/part.js:271 templates/js/part.js:391 templates/js/part.js:572 -#: templates/js/stock.js:511 templates/js/stock.js:833 +#: templates/js/stock.js:511 templates/js/stock.js:850 msgid "Description" msgstr "" @@ -433,7 +433,7 @@ msgstr "" #: templates/js/barcode.js:336 templates/js/bom.js:153 templates/js/bom.js:534 #: templates/js/build.js:669 templates/js/company.js:138 #: templates/js/part.js:252 templates/js/part.js:357 templates/js/stock.js:485 -#: templates/js/stock.js:1163 +#: templates/js/stock.js:1180 msgid "Part" msgstr "" @@ -491,7 +491,7 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:194 stock/models.py:403 +#: build/models.py:194 stock/models.py:418 msgid "Batch Code" msgstr "" @@ -507,11 +507,11 @@ msgstr "" #: company/templates/company/supplier_part_base.html:68 #: company/templates/company/supplier_part_detail.html:24 #: part/templates/part/detail.html:80 part/templates/part/part_base.html:102 -#: stock/models.py:397 stock/templates/stock/item_base.html:317 +#: stock/models.py:412 stock/templates/stock/item_base.html:317 msgid "External Link" msgstr "" -#: build/models.py:220 part/models.py:705 stock/models.py:399 +#: build/models.py:220 part/models.py:705 stock/models.py:414 msgid "Link to external URL" msgstr "" @@ -520,9 +520,9 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:213 #: order/templates/order/so_tabs.html:23 part/models.py:831 #: part/templates/part/tabs.html:73 stock/forms.py:315 stock/forms.py:347 -#: stock/forms.py:375 stock/models.py:469 stock/models.py:1522 +#: stock/forms.py:375 stock/models.py:484 stock/models.py:1554 #: stock/templates/stock/tabs.html:26 templates/js/barcode.js:391 -#: templates/js/bom.js:295 templates/js/stock.js:127 templates/js/stock.js:618 +#: templates/js/bom.js:295 templates/js/stock.js:127 templates/js/stock.js:623 msgid "Notes" msgstr "" @@ -724,7 +724,7 @@ msgstr "" #: stock/templates/stock/item_base.html:363 templates/InvenTree/search.html:175 #: templates/js/barcode.js:42 templates/js/build.js:697 #: templates/js/order.js:185 templates/js/order.js:279 -#: templates/js/stock.js:584 templates/js/stock.js:1099 +#: templates/js/stock.js:584 templates/js/stock.js:1116 msgid "Status" msgstr "" @@ -854,7 +854,7 @@ msgstr "" #: build/templates/build/detail.html:68 #: stock/templates/stock/item_base.html:282 templates/js/stock.js:592 -#: templates/js/stock.js:1106 templates/js/table_filters.js:80 +#: templates/js/stock.js:1123 templates/js/table_filters.js:80 #: templates/js/table_filters.js:161 msgid "Batch" msgstr "" @@ -953,7 +953,7 @@ msgstr "" msgid "Create Build Output" msgstr "" -#: build/views.py:207 stock/models.py:882 stock/views.py:1973 +#: build/views.py:207 stock/models.py:897 stock/views.py:1886 msgid "Serial numbers already exist" msgstr "" @@ -969,7 +969,7 @@ msgstr "" msgid "Confirm unallocation of build stock" msgstr "" -#: build/views.py:303 build/views.py:388 stock/views.py:519 +#: build/views.py:303 build/views.py:388 stock/views.py:432 msgid "Check the confirmation box" msgstr "" @@ -1063,7 +1063,7 @@ msgid "Add Build Order Attachment" msgstr "" #: build/views.py:1060 order/views.py:113 order/views.py:166 part/views.py:170 -#: stock/views.py:282 +#: stock/views.py:281 msgid "Added attachment" msgstr "" @@ -1079,7 +1079,7 @@ msgstr "" msgid "Delete Attachment" msgstr "" -#: build/views.py:1123 order/views.py:242 order/views.py:257 stock/views.py:340 +#: build/views.py:1123 order/views.py:242 order/views.py:257 stock/views.py:339 msgid "Deleted attachment" msgstr "" @@ -1435,7 +1435,7 @@ msgstr "" msgid "Currency" msgstr "" -#: company/models.py:313 stock/models.py:351 +#: company/models.py:313 stock/models.py:366 #: stock/templates/stock/item_base.html:214 msgid "Base Part" msgstr "" @@ -1545,8 +1545,8 @@ msgid "Uses default currency" msgstr "" #: company/templates/company/detail.html:62 -#: order/templates/order/sales_order_base.html:89 stock/models.py:386 -#: stock/models.py:387 stock/templates/stock/item_base.html:241 +#: order/templates/order/sales_order_base.html:89 stock/models.py:401 +#: stock/models.py:402 stock/templates/stock/item_base.html:241 #: templates/js/company.js:40 templates/js/order.js:261 msgid "Customer" msgstr "" @@ -1562,13 +1562,13 @@ msgstr "" #: company/templates/company/detail_part.html:18 #: order/templates/order/purchase_order_detail.html:68 -#: part/templates/part/supplier.html:14 templates/js/stock.js:983 +#: part/templates/part/supplier.html:14 templates/js/stock.js:1000 msgid "New Supplier Part" msgstr "" #: company/templates/company/detail_part.html:23 #: part/templates/part/category.html:120 part/templates/part/supplier.html:17 -#: templates/stock_table.html:26 +#: templates/stock_table.html:27 msgid "Options" msgstr "" @@ -1586,7 +1586,7 @@ msgid "Delete Parts" msgstr "" #: company/templates/company/detail_part.html:63 -#: part/templates/part/category.html:116 templates/js/stock.js:977 +#: part/templates/part/category.html:116 templates/js/stock.js:994 msgid "New Part" msgstr "" @@ -1678,7 +1678,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/supplier_part_base.html:6 -#: company/templates/company/supplier_part_base.html:19 stock/models.py:360 +#: company/templates/company/supplier_part_base.html:19 stock/models.py:375 #: stock/templates/stock/item_base.html:329 templates/js/company.js:180 msgid "Supplier Part" msgstr "" @@ -1720,7 +1720,7 @@ msgid "Pricing Information" msgstr "" #: company/templates/company/supplier_part_pricing.html:17 company/views.py:486 -#: part/templates/part/sale_prices.html:14 part/views.py:2565 +#: part/templates/part/sale_prices.html:14 part/views.py:2567 msgid "Add Price Break" msgstr "" @@ -1833,7 +1833,7 @@ msgstr "" msgid "Edit Supplier Part" msgstr "" -#: company/views.py:295 templates/js/stock.js:984 +#: company/views.py:295 templates/js/stock.js:1001 msgid "Create new Supplier Part" msgstr "" @@ -1841,40 +1841,60 @@ msgstr "" msgid "Delete Supplier Part" msgstr "" -#: company/views.py:492 part/views.py:2571 +#: company/views.py:492 part/views.py:2573 msgid "Added new price break" msgstr "" -#: company/views.py:548 part/views.py:2615 +#: company/views.py:548 part/views.py:2617 msgid "Edit Price Break" msgstr "" -#: company/views.py:564 part/views.py:2631 +#: company/views.py:564 part/views.py:2633 msgid "Delete Price Break" msgstr "" -#: label/models.py:55 -msgid "Label name" +#: label/api.py:171 +msgid "Must provide valid StockItem(s)" msgstr "" -#: label/models.py:58 -msgid "Label description" +#: label/api.py:185 label/api.py:337 +msgid "Error during label rendering" msgstr "" -#: label/models.py:63 -msgid "Label template file" +#: label/api.py:324 +msgid "Must provide valid StockLocation(s)" msgstr "" #: label/models.py:69 -msgid "Query filters (comma-separated list of key=value pairs" +msgid "Label name" msgstr "" -#: label/models.py:75 +#: label/models.py:76 +msgid "Label description" +msgstr "" + +#: label/models.py:83 stock/forms.py:200 +msgid "Label" +msgstr "" + +#: label/models.py:84 +msgid "Label template file" +msgstr "" + +#: label/models.py:90 report/models.py:162 +msgid "Enabled" +msgstr "" + +#: label/models.py:91 msgid "Label template is enabled" msgstr "" -#: label/models.py:76 report/models.py:162 -msgid "Enabled" +#: label/models.py:137 label/models.py:190 +msgid "Query filters (comma-separated list of key=value pairs" +msgstr "" + +#: label/models.py:138 label/models.py:191 +msgid "Filters" msgstr "" #: order/forms.py:25 order/templates/order/order_base.html:44 @@ -1968,8 +1988,8 @@ msgstr "" msgid "Date order was completed" msgstr "" -#: order/models.py:230 order/models.py:328 part/views.py:1504 -#: stock/models.py:257 stock/models.py:866 +#: order/models.py:230 order/models.py:328 part/views.py:1506 +#: stock/models.py:265 stock/models.py:881 msgid "Quantity must be greater than zero" msgstr "" @@ -2019,7 +2039,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:630 stock/models.py:479 +#: order/models.py:630 stock/models.py:494 #: stock/templates/stock/item_base.html:303 msgid "Purchase Price" msgstr "" @@ -2178,7 +2198,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:39 #: order/templates/order/purchase_order_detail.html:119 #: part/templates/part/category.html:173 part/templates/part/category.html:215 -#: templates/js/stock.js:642 templates/js/stock.js:989 +#: templates/js/stock.js:647 templates/js/stock.js:1006 msgid "New Location" msgstr "" @@ -2263,7 +2283,7 @@ msgid "Sales Order Items" msgstr "" #: order/templates/order/sales_order_detail.html:72 -#: order/templates/order/sales_order_detail.html:154 stock/models.py:391 +#: order/templates/order/sales_order_detail.html:154 stock/models.py:406 #: stock/templates/stock/item_base.html:228 templates/js/build.js:418 msgid "Serial Number" msgstr "" @@ -2905,8 +2925,8 @@ msgstr "" msgid "BOM line checksum" msgstr "" -#: part/models.py:1963 part/views.py:1510 part/views.py:1562 -#: stock/models.py:247 +#: part/models.py:1963 part/views.py:1512 part/views.py:1564 +#: stock/models.py:255 msgid "Quantity must be integer value for trackable parts" msgstr "" @@ -2945,7 +2965,7 @@ msgstr "" #: stock/templates/stock/item_base.html:89 #: stock/templates/stock/item_base.html:311 #: stock/templates/stock/stock_adjust.html:16 templates/js/build.js:751 -#: templates/js/stock.js:822 templates/js/stock.js:1082 +#: templates/js/stock.js:839 templates/js/stock.js:1099 msgid "Stock Item" msgstr "" @@ -3010,7 +3030,7 @@ msgstr "" msgid "Validate" msgstr "" -#: part/templates/part/bom.html:62 part/views.py:1801 +#: part/templates/part/bom.html:62 part/views.py:1803 msgid "Export Bill of Materials" msgstr "" @@ -3110,7 +3130,7 @@ msgstr "" msgid "All parts" msgstr "" -#: part/templates/part/category.html:24 part/views.py:2192 +#: part/templates/part/category.html:24 part/views.py:2194 msgid "Create new part category" msgstr "" @@ -3162,7 +3182,7 @@ msgstr "" msgid "Export Data" msgstr "" -#: part/templates/part/category.html:174 templates/js/stock.js:643 +#: part/templates/part/category.html:174 templates/js/stock.js:648 msgid "Create new location" msgstr "" @@ -3178,7 +3198,7 @@ msgstr "" msgid "Create new Part Category" msgstr "" -#: part/templates/part/category.html:216 stock/views.py:1545 +#: part/templates/part/category.html:216 stock/views.py:1458 msgid "Create new Stock Location" msgstr "" @@ -3304,13 +3324,13 @@ msgstr "" msgid "New Parameter" msgstr "" -#: part/templates/part/params.html:25 stock/models.py:1509 +#: part/templates/part/params.html:25 stock/models.py:1541 #: templates/InvenTree/settings/header.html:8 templates/js/stock.js:123 msgid "Value" msgstr "" #: part/templates/part/params.html:41 part/templates/part/related.html:41 -#: part/templates/part/supplier.html:19 users/models.py:163 +#: part/templates/part/supplier.html:19 users/models.py:164 msgid "Delete" msgstr "" @@ -3579,11 +3599,11 @@ msgstr "" msgid "Copied part" msgstr "" -#: part/views.py:529 part/views.py:667 +#: part/views.py:529 part/views.py:669 msgid "Possible matches exist - confirm creation of new part" msgstr "" -#: part/views.py:594 templates/js/stock.js:978 +#: part/views.py:594 templates/js/stock.js:995 msgid "Create New Part" msgstr "" @@ -3591,147 +3611,147 @@ msgstr "" msgid "Created new part" msgstr "" -#: part/views.py:836 +#: part/views.py:838 msgid "Part QR Code" msgstr "" -#: part/views.py:855 +#: part/views.py:857 msgid "Upload Part Image" msgstr "" -#: part/views.py:863 part/views.py:900 +#: part/views.py:865 part/views.py:902 msgid "Updated part image" msgstr "" -#: part/views.py:872 +#: part/views.py:874 msgid "Select Part Image" msgstr "" -#: part/views.py:903 +#: part/views.py:905 msgid "Part image not found" msgstr "" -#: part/views.py:914 +#: part/views.py:916 msgid "Edit Part Properties" msgstr "" -#: part/views.py:945 +#: part/views.py:947 msgid "Duplicate BOM" msgstr "" -#: part/views.py:976 +#: part/views.py:978 msgid "Confirm duplication of BOM from parent" msgstr "" -#: part/views.py:997 +#: part/views.py:999 msgid "Validate BOM" msgstr "" -#: part/views.py:1020 +#: part/views.py:1022 msgid "Confirm that the BOM is valid" msgstr "" -#: part/views.py:1031 +#: part/views.py:1033 msgid "Validated Bill of Materials" msgstr "" -#: part/views.py:1165 +#: part/views.py:1167 msgid "No BOM file provided" msgstr "" -#: part/views.py:1513 +#: part/views.py:1515 msgid "Enter a valid quantity" msgstr "" -#: part/views.py:1538 part/views.py:1541 +#: part/views.py:1540 part/views.py:1543 msgid "Select valid part" msgstr "" -#: part/views.py:1547 +#: part/views.py:1549 msgid "Duplicate part selected" msgstr "" -#: part/views.py:1585 +#: part/views.py:1587 msgid "Select a part" msgstr "" -#: part/views.py:1591 +#: part/views.py:1593 msgid "Selected part creates a circular BOM" msgstr "" -#: part/views.py:1595 +#: part/views.py:1597 msgid "Specify quantity" msgstr "" -#: part/views.py:1851 +#: part/views.py:1853 msgid "Confirm Part Deletion" msgstr "" -#: part/views.py:1860 +#: part/views.py:1862 msgid "Part was deleted" msgstr "" -#: part/views.py:1869 +#: part/views.py:1871 msgid "Part Pricing" msgstr "" -#: part/views.py:1983 +#: part/views.py:1985 msgid "Create Part Parameter Template" msgstr "" -#: part/views.py:1993 +#: part/views.py:1995 msgid "Edit Part Parameter Template" msgstr "" -#: part/views.py:2002 +#: part/views.py:2004 msgid "Delete Part Parameter Template" msgstr "" -#: part/views.py:2012 +#: part/views.py:2014 msgid "Create Part Parameter" msgstr "" -#: part/views.py:2064 +#: part/views.py:2066 msgid "Edit Part Parameter" msgstr "" -#: part/views.py:2080 +#: part/views.py:2082 msgid "Delete Part Parameter" msgstr "" -#: part/views.py:2139 +#: part/views.py:2141 msgid "Edit Part Category" msgstr "" -#: part/views.py:2176 +#: part/views.py:2178 msgid "Delete Part Category" msgstr "" -#: part/views.py:2184 +#: part/views.py:2186 msgid "Part category was deleted" msgstr "" -#: part/views.py:2240 +#: part/views.py:2242 msgid "Create Category Parameter Template" msgstr "" -#: part/views.py:2343 +#: part/views.py:2345 msgid "Edit Category Parameter Template" msgstr "" -#: part/views.py:2401 +#: part/views.py:2403 msgid "Delete Category Parameter Template" msgstr "" -#: part/views.py:2426 +#: part/views.py:2428 msgid "Create BOM Item" msgstr "" -#: part/views.py:2498 +#: part/views.py:2500 msgid "Edit BOM item" msgstr "" -#: part/views.py:2555 +#: part/views.py:2557 msgid "Confim BOM item deletion" msgstr "" @@ -3767,10 +3787,6 @@ msgstr "" msgid "Enter unique serial numbers (or leave blank)" msgstr "" -#: stock/forms.py:200 -msgid "Label" -msgstr "" - #: stock/forms.py:201 stock/forms.py:257 msgid "Select test report template" msgstr "" @@ -3815,7 +3831,7 @@ msgstr "" msgid "Add note (required)" msgstr "" -#: stock/forms.py:379 stock/views.py:1037 stock/views.py:1235 +#: stock/forms.py:379 stock/views.py:950 stock/views.py:1148 msgid "Confirm stock adjustment" msgstr "" @@ -3831,237 +3847,237 @@ msgstr "" msgid "Set the destination as the default location for selected parts" msgstr "" -#: stock/models.py:192 +#: stock/models.py:200 msgid "Created stock item" msgstr "" -#: stock/models.py:228 +#: stock/models.py:236 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:264 +#: stock/models.py:272 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:274 stock/models.py:283 +#: stock/models.py:282 stock/models.py:291 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:275 +#: stock/models.py:283 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:297 +#: stock/models.py:305 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:303 +#: stock/models.py:311 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:310 +#: stock/models.py:318 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:343 +#: stock/models.py:358 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:352 +#: stock/models.py:367 msgid "Base part" msgstr "" -#: stock/models.py:361 +#: stock/models.py:376 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:366 stock/templates/stock/stock_app_base.html:7 +#: stock/models.py:381 stock/templates/stock/stock_app_base.html:7 msgid "Stock Location" msgstr "" -#: stock/models.py:369 +#: stock/models.py:384 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:374 stock/templates/stock/item_base.html:249 +#: stock/models.py:389 stock/templates/stock/item_base.html:249 msgid "Installed In" msgstr "" -#: stock/models.py:377 +#: stock/models.py:392 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:393 +#: stock/models.py:408 msgid "Serial number for this item" msgstr "" -#: stock/models.py:405 +#: stock/models.py:420 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:409 +#: stock/models.py:424 msgid "Stock Quantity" msgstr "" -#: stock/models.py:418 +#: stock/models.py:433 msgid "Source Build" msgstr "" -#: stock/models.py:420 +#: stock/models.py:435 msgid "Build for this stock item" msgstr "" -#: stock/models.py:431 +#: stock/models.py:446 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:434 +#: stock/models.py:449 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:440 +#: stock/models.py:455 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:446 stock/templates/stock/item_base.html:336 +#: stock/models.py:461 stock/templates/stock/item_base.html:336 #: templates/js/stock.js:612 msgid "Expiry Date" msgstr "" -#: stock/models.py:447 +#: stock/models.py:462 msgid "" "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:460 +#: stock/models.py:475 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:470 stock/templates/stock/item_notes.html:14 +#: stock/models.py:485 stock/templates/stock/item_notes.html:14 #: stock/templates/stock/item_notes.html:30 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:480 +#: stock/models.py:495 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:584 +#: stock/models.py:599 msgid "Assigned to Customer" msgstr "" -#: stock/models.py:586 +#: stock/models.py:601 msgid "Manually assigned to customer" msgstr "" -#: stock/models.py:599 +#: stock/models.py:614 msgid "Returned from customer" msgstr "" -#: stock/models.py:601 +#: stock/models.py:616 msgid "Returned to location" msgstr "" -#: stock/models.py:726 +#: stock/models.py:741 msgid "Installed into stock item" msgstr "" -#: stock/models.py:734 +#: stock/models.py:749 msgid "Installed stock item" msgstr "" -#: stock/models.py:758 +#: stock/models.py:773 msgid "Uninstalled stock item" msgstr "" -#: stock/models.py:777 +#: stock/models.py:792 msgid "Uninstalled into location" msgstr "" -#: stock/models.py:857 +#: stock/models.py:872 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:863 +#: stock/models.py:878 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:869 +#: stock/models.py:884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:872 +#: stock/models.py:887 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:875 +#: stock/models.py:890 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:907 +#: stock/models.py:922 msgid "Add serial number" msgstr "" -#: stock/models.py:910 +#: stock/models.py:925 #, python-brace-format msgid "Serialized {n} items" msgstr "" -#: stock/models.py:1021 +#: stock/models.py:1036 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1410 +#: stock/models.py:1442 msgid "Tracking entry title" msgstr "" -#: stock/models.py:1412 +#: stock/models.py:1444 msgid "Entry notes" msgstr "" -#: stock/models.py:1414 +#: stock/models.py:1446 msgid "Link to external page for further information" msgstr "" -#: stock/models.py:1474 +#: stock/models.py:1506 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1480 +#: stock/models.py:1512 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1497 +#: stock/models.py:1529 msgid "Test" msgstr "" -#: stock/models.py:1498 +#: stock/models.py:1530 msgid "Test name" msgstr "" -#: stock/models.py:1503 +#: stock/models.py:1535 msgid "Result" msgstr "" -#: stock/models.py:1504 templates/js/table_filters.js:172 +#: stock/models.py:1536 templates/js/table_filters.js:172 msgid "Test result" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1542 msgid "Test output value" msgstr "" -#: stock/models.py:1516 +#: stock/models.py:1548 msgid "Attachment" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1549 msgid "Test result attachment" msgstr "" -#: stock/models.py:1523 +#: stock/models.py:1555 msgid "Test notes" msgstr "" @@ -4151,15 +4167,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:160 -#: stock/templates/stock/location.html:57 templates/stock_table.html:31 +#: stock/templates/stock/location.html:57 templates/stock_table.html:35 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:161 templates/stock_table.html:29 +#: stock/templates/stock/item_base.html:161 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:162 templates/stock_table.html:30 +#: stock/templates/stock/item_base.html:162 templates/stock_table.html:34 msgid "Remove stock" msgstr "" @@ -4179,7 +4195,7 @@ msgstr "" msgid "Return to stock" msgstr "" -#: stock/templates/stock/item_base.html:177 templates/js/stock.js:1119 +#: stock/templates/stock/item_base.html:177 templates/js/stock.js:1136 msgid "Uninstall stock item" msgstr "" @@ -4237,7 +4253,7 @@ msgstr "" msgid "This StockItem expires on" msgstr "" -#: stock/templates/stock/item_base.html:349 +#: stock/templates/stock/item_base.html:349 templates/js/stock.js:618 msgid "Last Updated" msgstr "" @@ -4368,7 +4384,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1517 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1430 msgid "Convert Stock Item" msgstr "" @@ -4400,210 +4416,202 @@ msgstr "" msgid "Installed Items" msgstr "" -#: stock/views.py:127 +#: stock/views.py:126 msgid "Edit Stock Location" msgstr "" -#: stock/views.py:235 stock/views.py:1507 stock/views.py:1620 -#: stock/views.py:1982 +#: stock/views.py:234 stock/views.py:1420 stock/views.py:1533 +#: stock/views.py:1895 msgid "Owner is required (ownership control is enabled)" msgstr "" -#: stock/views.py:250 +#: stock/views.py:249 msgid "Stock Location QR code" msgstr "" -#: stock/views.py:269 +#: stock/views.py:268 msgid "Add Stock Item Attachment" msgstr "" -#: stock/views.py:316 +#: stock/views.py:315 msgid "Edit Stock Item Attachment" msgstr "" -#: stock/views.py:333 +#: stock/views.py:332 msgid "Delete Stock Item Attachment" msgstr "" -#: stock/views.py:350 +#: stock/views.py:349 msgid "Assign to Customer" msgstr "" -#: stock/views.py:360 +#: stock/views.py:359 msgid "Customer must be specified" msgstr "" -#: stock/views.py:384 +#: stock/views.py:383 msgid "Return to Stock" msgstr "" -#: stock/views.py:394 +#: stock/views.py:393 msgid "Specify a valid location" msgstr "" -#: stock/views.py:405 +#: stock/views.py:404 msgid "Stock item returned from customer" msgstr "" #: stock/views.py:415 -msgid "Select Label Template" -msgstr "" - -#: stock/views.py:438 -msgid "Select valid label" -msgstr "" - -#: stock/views.py:502 msgid "Delete All Test Data" msgstr "" -#: stock/views.py:518 +#: stock/views.py:431 msgid "Confirm test data deletion" msgstr "" -#: stock/views.py:538 +#: stock/views.py:451 msgid "Add Test Result" msgstr "" -#: stock/views.py:579 +#: stock/views.py:492 msgid "Edit Test Result" msgstr "" -#: stock/views.py:597 +#: stock/views.py:510 msgid "Delete Test Result" msgstr "" -#: stock/views.py:609 +#: stock/views.py:522 msgid "Select Test Report Template" msgstr "" -#: stock/views.py:639 +#: stock/views.py:552 msgid "Select valid template" msgstr "" -#: stock/views.py:692 +#: stock/views.py:605 msgid "Stock Export Options" msgstr "" -#: stock/views.py:814 +#: stock/views.py:727 msgid "Stock Item QR Code" msgstr "" -#: stock/views.py:840 +#: stock/views.py:753 msgid "Install Stock Item" msgstr "" -#: stock/views.py:940 +#: stock/views.py:853 msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:1048 +#: stock/views.py:961 msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:1073 +#: stock/views.py:986 msgid "Adjust Stock" msgstr "" -#: stock/views.py:1183 +#: stock/views.py:1096 msgid "Move Stock Items" msgstr "" -#: stock/views.py:1184 +#: stock/views.py:1097 msgid "Count Stock Items" msgstr "" -#: stock/views.py:1185 +#: stock/views.py:1098 msgid "Remove From Stock" msgstr "" -#: stock/views.py:1186 +#: stock/views.py:1099 msgid "Add Stock Items" msgstr "" -#: stock/views.py:1187 +#: stock/views.py:1100 msgid "Delete Stock Items" msgstr "" -#: stock/views.py:1215 +#: stock/views.py:1128 msgid "Must enter integer value" msgstr "" -#: stock/views.py:1220 +#: stock/views.py:1133 msgid "Quantity must be positive" msgstr "" -#: stock/views.py:1227 +#: stock/views.py:1140 #, python-brace-format msgid "Quantity must not exceed {x}" msgstr "" -#: stock/views.py:1306 +#: stock/views.py:1219 #, python-brace-format msgid "Added stock to {n} items" msgstr "" -#: stock/views.py:1321 +#: stock/views.py:1234 #, python-brace-format msgid "Removed stock from {n} items" msgstr "" -#: stock/views.py:1334 +#: stock/views.py:1247 #, python-brace-format msgid "Counted stock for {n} items" msgstr "" -#: stock/views.py:1374 +#: stock/views.py:1287 msgid "No items were moved" msgstr "" -#: stock/views.py:1377 +#: stock/views.py:1290 #, python-brace-format msgid "Moved {n} items to {dest}" msgstr "" -#: stock/views.py:1396 +#: stock/views.py:1309 #, python-brace-format msgid "Deleted {n} stock items" msgstr "" -#: stock/views.py:1408 +#: stock/views.py:1321 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:1637 +#: stock/views.py:1550 msgid "Serialize Stock" msgstr "" -#: stock/views.py:1731 templates/js/build.js:210 +#: stock/views.py:1644 templates/js/build.js:210 msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1874 +#: stock/views.py:1787 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1956 +#: stock/views.py:1869 msgid "Quantity cannot be negative" msgstr "" -#: stock/views.py:2051 +#: stock/views.py:1964 msgid "Delete Stock Location" msgstr "" -#: stock/views.py:2065 +#: stock/views.py:1978 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:2077 +#: stock/views.py:1990 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:2096 +#: stock/views.py:2009 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:2106 +#: stock/views.py:2019 msgid "Add Stock Tracking Entry" msgstr "" @@ -4913,7 +4921,7 @@ msgstr "" msgid "Enter barcode data" msgstr "" -#: templates/js/barcode.js:42 +#: templates/js/barcode.js:42 templates/js/modals.js:856 msgid "Invalid server response" msgstr "" @@ -5058,7 +5066,7 @@ msgstr "" msgid "Build stock" msgstr "" -#: templates/js/build.js:582 templates/stock_table.html:33 +#: templates/js/build.js:582 templates/stock_table.html:37 msgid "Order stock" msgstr "" @@ -5102,6 +5110,136 @@ msgstr "" msgid "Assembled part" msgstr "" +#: templates/js/label.js:10 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/label.js:11 +msgid "Stock item(s) must be selected before printing labels" +msgstr "" + +#: templates/js/label.js:29 templates/js/label.js:79 +msgid "No Labels Found" +msgstr "" + +#: templates/js/label.js:30 +msgid "No labels found which match selected stock item(s)" +msgstr "" + +#: templates/js/label.js:61 +msgid "Select Stock Locations" +msgstr "" + +#: templates/js/label.js:62 +msgid "Stock location(s) must be selected before printing labels" +msgstr "" + +#: templates/js/label.js:80 +msgid "No labels found which match selected stock location(s)" +msgstr "" + +#: templates/js/label.js:141 +msgid "Select Label" +msgstr "" + +#: templates/js/label.js:156 +msgid "Select Label Template" +msgstr "" + +#: templates/js/modals.js:406 +msgid "Show Error Information" +msgstr "" + +#: templates/js/modals.js:473 +msgid "Accept" +msgstr "" + +#: templates/js/modals.js:474 +msgid "Cancel" +msgstr "" + +#: templates/js/modals.js:538 +msgid "Loading Data" +msgstr "" + +#: templates/js/modals.js:549 templates/js/modals.js:807 +#: templates/modals.html:19 templates/modals.html:41 +msgid "Submit" +msgstr "" + +#: templates/js/modals.js:550 templates/js/modals.js:808 +#: templates/modals.html:18 templates/modals.html:40 +msgid "Close" +msgstr "" + +#: templates/js/modals.js:759 +msgid "Invalid response from server" +msgstr "" + +#: templates/js/modals.js:759 +msgid "Form data missing from server response" +msgstr "" + +#: templates/js/modals.js:772 +msgid "Error posting form data" +msgstr "" + +#: templates/js/modals.js:856 +msgid "JSON response missing form data" +msgstr "" + +#: templates/js/modals.js:866 +msgid "No Response" +msgstr "" + +#: templates/js/modals.js:867 +msgid "No response from the InvenTree server" +msgstr "" + +#: templates/js/modals.js:871 +msgid "Error 400: Bad Request" +msgstr "" + +#: templates/js/modals.js:872 +msgid "Server returned error code 400" +msgstr "" + +#: templates/js/modals.js:876 +msgid "Error 401: Not Authenticated" +msgstr "" + +#: templates/js/modals.js:877 +msgid "Authentication credentials not supplied" +msgstr "" + +#: templates/js/modals.js:881 +msgid "Error 403: Permission Denied" +msgstr "" + +#: templates/js/modals.js:882 +msgid "You do not have the required permissions to access this function" +msgstr "" + +#: templates/js/modals.js:886 +msgid "Error 404: Resource Not Found" +msgstr "" + +#: templates/js/modals.js:887 +msgid "The requested resource could not be located on the server" +msgstr "" + +#: templates/js/modals.js:891 +msgid "Error 408: Timeout" +msgstr "" + +#: templates/js/modals.js:892 +msgid "Connection timeout while requesting data from server" +msgstr "" + +#: templates/js/modals.js:895 +msgid "Error requesting form data" +msgstr "" + #: templates/js/order.js:135 msgid "No purchase orders found" msgstr "" @@ -5110,7 +5248,7 @@ msgstr "" msgid "Order is overdue" msgstr "" -#: templates/js/order.js:193 templates/js/stock.js:804 +#: templates/js/order.js:193 templates/js/stock.js:821 msgid "Date" msgstr "" @@ -5147,7 +5285,7 @@ msgid "No parts found" msgstr "" #: templates/js/part.js:343 templates/js/stock.js:473 -#: templates/js/stock.js:1151 +#: templates/js/stock.js:1168 msgid "Select" msgstr "" @@ -5279,39 +5417,39 @@ msgstr "" msgid "Stocktake" msgstr "" -#: templates/js/stock.js:720 +#: templates/js/stock.js:737 msgid "Stock Status" msgstr "" -#: templates/js/stock.js:735 +#: templates/js/stock.js:752 msgid "Set Stock Status" msgstr "" -#: templates/js/stock.js:749 +#: templates/js/stock.js:766 msgid "Select Status Code" msgstr "" -#: templates/js/stock.js:750 +#: templates/js/stock.js:767 msgid "Status code must be selected" msgstr "" -#: templates/js/stock.js:870 +#: templates/js/stock.js:887 msgid "No user information" msgstr "" -#: templates/js/stock.js:990 +#: templates/js/stock.js:1007 msgid "Create New Location" msgstr "" -#: templates/js/stock.js:1089 +#: templates/js/stock.js:1106 msgid "Serial" msgstr "" -#: templates/js/stock.js:1182 templates/js/table_filters.js:131 +#: templates/js/stock.js:1199 templates/js/table_filters.js:131 msgid "Installed" msgstr "" -#: templates/js/stock.js:1207 +#: templates/js/stock.js:1224 msgid "Install item" msgstr "" @@ -5464,14 +5602,6 @@ msgstr "" msgid "Form errors exist" msgstr "" -#: templates/modals.html:18 templates/modals.html:40 -msgid "Close" -msgstr "" - -#: templates/modals.html:19 templates/modals.html:41 -msgid "Submit" -msgstr "" - #: templates/navbar.html:29 msgid "Buy" msgstr "" @@ -5533,42 +5663,46 @@ msgid "Export Stock Information" msgstr "" #: templates/stock_table.html:29 -msgid "Add to selected stock items" -msgstr "" - -#: templates/stock_table.html:30 -msgid "Remove from selected stock items" -msgstr "" - -#: templates/stock_table.html:31 -msgid "Stocktake selected stock items" -msgstr "" - -#: templates/stock_table.html:32 -msgid "Move selected stock items" -msgstr "" - -#: templates/stock_table.html:32 -msgid "Move stock" +msgid "Print labels" msgstr "" #: templates/stock_table.html:33 +msgid "Add to selected stock items" +msgstr "" + +#: templates/stock_table.html:34 +msgid "Remove from selected stock items" +msgstr "" + +#: templates/stock_table.html:35 +msgid "Stocktake selected stock items" +msgstr "" + +#: templates/stock_table.html:36 +msgid "Move selected stock items" +msgstr "" + +#: templates/stock_table.html:36 +msgid "Move stock" +msgstr "" + +#: templates/stock_table.html:37 msgid "Order selected items" msgstr "" -#: templates/stock_table.html:34 +#: templates/stock_table.html:38 msgid "Change status" msgstr "" -#: templates/stock_table.html:34 +#: templates/stock_table.html:38 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:37 +#: templates/stock_table.html:41 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:37 +#: templates/stock_table.html:41 msgid "Delete Stock" msgstr "" @@ -5596,38 +5730,38 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:146 +#: users/models.py:147 msgid "Permission set" msgstr "" -#: users/models.py:154 +#: users/models.py:155 msgid "Group" msgstr "" -#: users/models.py:157 +#: users/models.py:158 msgid "View" msgstr "" -#: users/models.py:157 +#: users/models.py:158 msgid "Permission to view items" msgstr "" -#: users/models.py:159 +#: users/models.py:160 msgid "Add" msgstr "" -#: users/models.py:159 +#: users/models.py:160 msgid "Permission to add items" msgstr "" -#: users/models.py:161 +#: users/models.py:162 msgid "Change" msgstr "" -#: users/models.py:161 +#: users/models.py:162 msgid "Permissions to edit items" msgstr "" -#: users/models.py:163 +#: users/models.py:164 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 7ddbe1b10f..ee26db4504 100644 --- a/InvenTree/locale/es/LC_MESSAGES/django.po +++ b/InvenTree/locale/es/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-14 13:51+0000\n" +"POT-Creation-Date: 2021-01-17 18:11+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -55,7 +55,7 @@ msgid "Select Category" msgstr "" #: InvenTree/helpers.py:361 order/models.py:232 order/models.py:330 -#: stock/views.py:1952 +#: stock/views.py:1865 msgid "Invalid quantity provided" msgstr "" @@ -95,11 +95,11 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:68 templates/js/stock.js:861 +#: InvenTree/models.py:68 templates/js/stock.js:878 msgid "User" msgstr "" -#: InvenTree/models.py:106 part/models.py:647 +#: InvenTree/models.py:106 label/models.py:68 part/models.py:647 #: part/templates/part/params.html:24 templates/js/part.js:129 msgid "Name" msgstr "" @@ -315,8 +315,8 @@ msgstr "" #: stock/templates/stock/item_base.html:57 #: stock/templates/stock/item_base.html:234 #: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:338 -#: templates/js/bom.js:195 templates/js/build.js:420 templates/js/stock.js:852 -#: templates/js/stock.js:1091 +#: templates/js/bom.js:195 templates/js/build.js:420 templates/js/stock.js:869 +#: templates/js/stock.js:1108 msgid "Quantity" msgstr "" @@ -397,7 +397,7 @@ msgstr "" #: build/models.py:116 build/templates/build/detail.html:19 #: company/models.py:359 company/templates/company/detail.html:23 #: company/templates/company/supplier_part_base.html:61 -#: company/templates/company/supplier_part_detail.html:27 +#: company/templates/company/supplier_part_detail.html:27 label/models.py:75 #: order/templates/order/purchase_order_detail.html:161 part/models.py:671 #: part/templates/part/detail.html:51 part/templates/part/set_category.html:14 #: templates/InvenTree/search.html:147 @@ -405,7 +405,7 @@ msgstr "" #: templates/js/bom.js:549 templates/js/build.js:664 templates/js/company.js:56 #: templates/js/order.js:180 templates/js/order.js:274 templates/js/part.js:188 #: templates/js/part.js:271 templates/js/part.js:391 templates/js/part.js:572 -#: templates/js/stock.js:511 templates/js/stock.js:833 +#: templates/js/stock.js:511 templates/js/stock.js:850 msgid "Description" msgstr "" @@ -433,7 +433,7 @@ msgstr "" #: templates/js/barcode.js:336 templates/js/bom.js:153 templates/js/bom.js:534 #: templates/js/build.js:669 templates/js/company.js:138 #: templates/js/part.js:252 templates/js/part.js:357 templates/js/stock.js:485 -#: templates/js/stock.js:1163 +#: templates/js/stock.js:1180 msgid "Part" msgstr "" @@ -491,7 +491,7 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:194 stock/models.py:403 +#: build/models.py:194 stock/models.py:418 msgid "Batch Code" msgstr "" @@ -507,11 +507,11 @@ msgstr "" #: company/templates/company/supplier_part_base.html:68 #: company/templates/company/supplier_part_detail.html:24 #: part/templates/part/detail.html:80 part/templates/part/part_base.html:102 -#: stock/models.py:397 stock/templates/stock/item_base.html:317 +#: stock/models.py:412 stock/templates/stock/item_base.html:317 msgid "External Link" msgstr "" -#: build/models.py:220 part/models.py:705 stock/models.py:399 +#: build/models.py:220 part/models.py:705 stock/models.py:414 msgid "Link to external URL" msgstr "" @@ -520,9 +520,9 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:213 #: order/templates/order/so_tabs.html:23 part/models.py:831 #: part/templates/part/tabs.html:73 stock/forms.py:315 stock/forms.py:347 -#: stock/forms.py:375 stock/models.py:469 stock/models.py:1522 +#: stock/forms.py:375 stock/models.py:484 stock/models.py:1554 #: stock/templates/stock/tabs.html:26 templates/js/barcode.js:391 -#: templates/js/bom.js:295 templates/js/stock.js:127 templates/js/stock.js:618 +#: templates/js/bom.js:295 templates/js/stock.js:127 templates/js/stock.js:623 msgid "Notes" msgstr "" @@ -724,7 +724,7 @@ msgstr "" #: stock/templates/stock/item_base.html:363 templates/InvenTree/search.html:175 #: templates/js/barcode.js:42 templates/js/build.js:697 #: templates/js/order.js:185 templates/js/order.js:279 -#: templates/js/stock.js:584 templates/js/stock.js:1099 +#: templates/js/stock.js:584 templates/js/stock.js:1116 msgid "Status" msgstr "" @@ -854,7 +854,7 @@ msgstr "" #: build/templates/build/detail.html:68 #: stock/templates/stock/item_base.html:282 templates/js/stock.js:592 -#: templates/js/stock.js:1106 templates/js/table_filters.js:80 +#: templates/js/stock.js:1123 templates/js/table_filters.js:80 #: templates/js/table_filters.js:161 msgid "Batch" msgstr "" @@ -953,7 +953,7 @@ msgstr "" msgid "Create Build Output" msgstr "" -#: build/views.py:207 stock/models.py:882 stock/views.py:1973 +#: build/views.py:207 stock/models.py:897 stock/views.py:1886 msgid "Serial numbers already exist" msgstr "" @@ -969,7 +969,7 @@ msgstr "" msgid "Confirm unallocation of build stock" msgstr "" -#: build/views.py:303 build/views.py:388 stock/views.py:519 +#: build/views.py:303 build/views.py:388 stock/views.py:432 msgid "Check the confirmation box" msgstr "" @@ -1063,7 +1063,7 @@ msgid "Add Build Order Attachment" msgstr "" #: build/views.py:1060 order/views.py:113 order/views.py:166 part/views.py:170 -#: stock/views.py:282 +#: stock/views.py:281 msgid "Added attachment" msgstr "" @@ -1079,7 +1079,7 @@ msgstr "" msgid "Delete Attachment" msgstr "" -#: build/views.py:1123 order/views.py:242 order/views.py:257 stock/views.py:340 +#: build/views.py:1123 order/views.py:242 order/views.py:257 stock/views.py:339 msgid "Deleted attachment" msgstr "" @@ -1435,7 +1435,7 @@ msgstr "" msgid "Currency" msgstr "" -#: company/models.py:313 stock/models.py:351 +#: company/models.py:313 stock/models.py:366 #: stock/templates/stock/item_base.html:214 msgid "Base Part" msgstr "" @@ -1545,8 +1545,8 @@ msgid "Uses default currency" msgstr "" #: company/templates/company/detail.html:62 -#: order/templates/order/sales_order_base.html:89 stock/models.py:386 -#: stock/models.py:387 stock/templates/stock/item_base.html:241 +#: order/templates/order/sales_order_base.html:89 stock/models.py:401 +#: stock/models.py:402 stock/templates/stock/item_base.html:241 #: templates/js/company.js:40 templates/js/order.js:261 msgid "Customer" msgstr "" @@ -1562,13 +1562,13 @@ msgstr "" #: company/templates/company/detail_part.html:18 #: order/templates/order/purchase_order_detail.html:68 -#: part/templates/part/supplier.html:14 templates/js/stock.js:983 +#: part/templates/part/supplier.html:14 templates/js/stock.js:1000 msgid "New Supplier Part" msgstr "" #: company/templates/company/detail_part.html:23 #: part/templates/part/category.html:120 part/templates/part/supplier.html:17 -#: templates/stock_table.html:26 +#: templates/stock_table.html:27 msgid "Options" msgstr "" @@ -1586,7 +1586,7 @@ msgid "Delete Parts" msgstr "" #: company/templates/company/detail_part.html:63 -#: part/templates/part/category.html:116 templates/js/stock.js:977 +#: part/templates/part/category.html:116 templates/js/stock.js:994 msgid "New Part" msgstr "" @@ -1678,7 +1678,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/supplier_part_base.html:6 -#: company/templates/company/supplier_part_base.html:19 stock/models.py:360 +#: company/templates/company/supplier_part_base.html:19 stock/models.py:375 #: stock/templates/stock/item_base.html:329 templates/js/company.js:180 msgid "Supplier Part" msgstr "" @@ -1720,7 +1720,7 @@ msgid "Pricing Information" msgstr "" #: company/templates/company/supplier_part_pricing.html:17 company/views.py:486 -#: part/templates/part/sale_prices.html:14 part/views.py:2565 +#: part/templates/part/sale_prices.html:14 part/views.py:2567 msgid "Add Price Break" msgstr "" @@ -1833,7 +1833,7 @@ msgstr "" msgid "Edit Supplier Part" msgstr "" -#: company/views.py:295 templates/js/stock.js:984 +#: company/views.py:295 templates/js/stock.js:1001 msgid "Create new Supplier Part" msgstr "" @@ -1841,40 +1841,60 @@ msgstr "" msgid "Delete Supplier Part" msgstr "" -#: company/views.py:492 part/views.py:2571 +#: company/views.py:492 part/views.py:2573 msgid "Added new price break" msgstr "" -#: company/views.py:548 part/views.py:2615 +#: company/views.py:548 part/views.py:2617 msgid "Edit Price Break" msgstr "" -#: company/views.py:564 part/views.py:2631 +#: company/views.py:564 part/views.py:2633 msgid "Delete Price Break" msgstr "" -#: label/models.py:55 -msgid "Label name" +#: label/api.py:171 +msgid "Must provide valid StockItem(s)" msgstr "" -#: label/models.py:58 -msgid "Label description" +#: label/api.py:185 label/api.py:337 +msgid "Error during label rendering" msgstr "" -#: label/models.py:63 -msgid "Label template file" +#: label/api.py:324 +msgid "Must provide valid StockLocation(s)" msgstr "" #: label/models.py:69 -msgid "Query filters (comma-separated list of key=value pairs" +msgid "Label name" msgstr "" -#: label/models.py:75 +#: label/models.py:76 +msgid "Label description" +msgstr "" + +#: label/models.py:83 stock/forms.py:200 +msgid "Label" +msgstr "" + +#: label/models.py:84 +msgid "Label template file" +msgstr "" + +#: label/models.py:90 report/models.py:162 +msgid "Enabled" +msgstr "" + +#: label/models.py:91 msgid "Label template is enabled" msgstr "" -#: label/models.py:76 report/models.py:162 -msgid "Enabled" +#: label/models.py:137 label/models.py:190 +msgid "Query filters (comma-separated list of key=value pairs" +msgstr "" + +#: label/models.py:138 label/models.py:191 +msgid "Filters" msgstr "" #: order/forms.py:25 order/templates/order/order_base.html:44 @@ -1968,8 +1988,8 @@ msgstr "" msgid "Date order was completed" msgstr "" -#: order/models.py:230 order/models.py:328 part/views.py:1504 -#: stock/models.py:257 stock/models.py:866 +#: order/models.py:230 order/models.py:328 part/views.py:1506 +#: stock/models.py:265 stock/models.py:881 msgid "Quantity must be greater than zero" msgstr "" @@ -2019,7 +2039,7 @@ msgstr "" msgid "Number of items received" msgstr "" -#: order/models.py:630 stock/models.py:479 +#: order/models.py:630 stock/models.py:494 #: stock/templates/stock/item_base.html:303 msgid "Purchase Price" msgstr "" @@ -2178,7 +2198,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:39 #: order/templates/order/purchase_order_detail.html:119 #: part/templates/part/category.html:173 part/templates/part/category.html:215 -#: templates/js/stock.js:642 templates/js/stock.js:989 +#: templates/js/stock.js:647 templates/js/stock.js:1006 msgid "New Location" msgstr "" @@ -2263,7 +2283,7 @@ msgid "Sales Order Items" msgstr "" #: order/templates/order/sales_order_detail.html:72 -#: order/templates/order/sales_order_detail.html:154 stock/models.py:391 +#: order/templates/order/sales_order_detail.html:154 stock/models.py:406 #: stock/templates/stock/item_base.html:228 templates/js/build.js:418 msgid "Serial Number" msgstr "" @@ -2905,8 +2925,8 @@ msgstr "" msgid "BOM line checksum" msgstr "" -#: part/models.py:1963 part/views.py:1510 part/views.py:1562 -#: stock/models.py:247 +#: part/models.py:1963 part/views.py:1512 part/views.py:1564 +#: stock/models.py:255 msgid "Quantity must be integer value for trackable parts" msgstr "" @@ -2945,7 +2965,7 @@ msgstr "" #: stock/templates/stock/item_base.html:89 #: stock/templates/stock/item_base.html:311 #: stock/templates/stock/stock_adjust.html:16 templates/js/build.js:751 -#: templates/js/stock.js:822 templates/js/stock.js:1082 +#: templates/js/stock.js:839 templates/js/stock.js:1099 msgid "Stock Item" msgstr "" @@ -3010,7 +3030,7 @@ msgstr "" msgid "Validate" msgstr "" -#: part/templates/part/bom.html:62 part/views.py:1801 +#: part/templates/part/bom.html:62 part/views.py:1803 msgid "Export Bill of Materials" msgstr "" @@ -3110,7 +3130,7 @@ msgstr "" msgid "All parts" msgstr "" -#: part/templates/part/category.html:24 part/views.py:2192 +#: part/templates/part/category.html:24 part/views.py:2194 msgid "Create new part category" msgstr "" @@ -3162,7 +3182,7 @@ msgstr "" msgid "Export Data" msgstr "" -#: part/templates/part/category.html:174 templates/js/stock.js:643 +#: part/templates/part/category.html:174 templates/js/stock.js:648 msgid "Create new location" msgstr "" @@ -3178,7 +3198,7 @@ msgstr "" msgid "Create new Part Category" msgstr "" -#: part/templates/part/category.html:216 stock/views.py:1545 +#: part/templates/part/category.html:216 stock/views.py:1458 msgid "Create new Stock Location" msgstr "" @@ -3304,13 +3324,13 @@ msgstr "" msgid "New Parameter" msgstr "" -#: part/templates/part/params.html:25 stock/models.py:1509 +#: part/templates/part/params.html:25 stock/models.py:1541 #: templates/InvenTree/settings/header.html:8 templates/js/stock.js:123 msgid "Value" msgstr "" #: part/templates/part/params.html:41 part/templates/part/related.html:41 -#: part/templates/part/supplier.html:19 users/models.py:163 +#: part/templates/part/supplier.html:19 users/models.py:164 msgid "Delete" msgstr "" @@ -3579,11 +3599,11 @@ msgstr "" msgid "Copied part" msgstr "" -#: part/views.py:529 part/views.py:667 +#: part/views.py:529 part/views.py:669 msgid "Possible matches exist - confirm creation of new part" msgstr "" -#: part/views.py:594 templates/js/stock.js:978 +#: part/views.py:594 templates/js/stock.js:995 msgid "Create New Part" msgstr "" @@ -3591,147 +3611,147 @@ msgstr "" msgid "Created new part" msgstr "" -#: part/views.py:836 +#: part/views.py:838 msgid "Part QR Code" msgstr "" -#: part/views.py:855 +#: part/views.py:857 msgid "Upload Part Image" msgstr "" -#: part/views.py:863 part/views.py:900 +#: part/views.py:865 part/views.py:902 msgid "Updated part image" msgstr "" -#: part/views.py:872 +#: part/views.py:874 msgid "Select Part Image" msgstr "" -#: part/views.py:903 +#: part/views.py:905 msgid "Part image not found" msgstr "" -#: part/views.py:914 +#: part/views.py:916 msgid "Edit Part Properties" msgstr "" -#: part/views.py:945 +#: part/views.py:947 msgid "Duplicate BOM" msgstr "" -#: part/views.py:976 +#: part/views.py:978 msgid "Confirm duplication of BOM from parent" msgstr "" -#: part/views.py:997 +#: part/views.py:999 msgid "Validate BOM" msgstr "" -#: part/views.py:1020 +#: part/views.py:1022 msgid "Confirm that the BOM is valid" msgstr "" -#: part/views.py:1031 +#: part/views.py:1033 msgid "Validated Bill of Materials" msgstr "" -#: part/views.py:1165 +#: part/views.py:1167 msgid "No BOM file provided" msgstr "" -#: part/views.py:1513 +#: part/views.py:1515 msgid "Enter a valid quantity" msgstr "" -#: part/views.py:1538 part/views.py:1541 +#: part/views.py:1540 part/views.py:1543 msgid "Select valid part" msgstr "" -#: part/views.py:1547 +#: part/views.py:1549 msgid "Duplicate part selected" msgstr "" -#: part/views.py:1585 +#: part/views.py:1587 msgid "Select a part" msgstr "" -#: part/views.py:1591 +#: part/views.py:1593 msgid "Selected part creates a circular BOM" msgstr "" -#: part/views.py:1595 +#: part/views.py:1597 msgid "Specify quantity" msgstr "" -#: part/views.py:1851 +#: part/views.py:1853 msgid "Confirm Part Deletion" msgstr "" -#: part/views.py:1860 +#: part/views.py:1862 msgid "Part was deleted" msgstr "" -#: part/views.py:1869 +#: part/views.py:1871 msgid "Part Pricing" msgstr "" -#: part/views.py:1983 +#: part/views.py:1985 msgid "Create Part Parameter Template" msgstr "" -#: part/views.py:1993 +#: part/views.py:1995 msgid "Edit Part Parameter Template" msgstr "" -#: part/views.py:2002 +#: part/views.py:2004 msgid "Delete Part Parameter Template" msgstr "" -#: part/views.py:2012 +#: part/views.py:2014 msgid "Create Part Parameter" msgstr "" -#: part/views.py:2064 +#: part/views.py:2066 msgid "Edit Part Parameter" msgstr "" -#: part/views.py:2080 +#: part/views.py:2082 msgid "Delete Part Parameter" msgstr "" -#: part/views.py:2139 +#: part/views.py:2141 msgid "Edit Part Category" msgstr "" -#: part/views.py:2176 +#: part/views.py:2178 msgid "Delete Part Category" msgstr "" -#: part/views.py:2184 +#: part/views.py:2186 msgid "Part category was deleted" msgstr "" -#: part/views.py:2240 +#: part/views.py:2242 msgid "Create Category Parameter Template" msgstr "" -#: part/views.py:2343 +#: part/views.py:2345 msgid "Edit Category Parameter Template" msgstr "" -#: part/views.py:2401 +#: part/views.py:2403 msgid "Delete Category Parameter Template" msgstr "" -#: part/views.py:2426 +#: part/views.py:2428 msgid "Create BOM Item" msgstr "" -#: part/views.py:2498 +#: part/views.py:2500 msgid "Edit BOM item" msgstr "" -#: part/views.py:2555 +#: part/views.py:2557 msgid "Confim BOM item deletion" msgstr "" @@ -3767,10 +3787,6 @@ msgstr "" msgid "Enter unique serial numbers (or leave blank)" msgstr "" -#: stock/forms.py:200 -msgid "Label" -msgstr "" - #: stock/forms.py:201 stock/forms.py:257 msgid "Select test report template" msgstr "" @@ -3815,7 +3831,7 @@ msgstr "" msgid "Add note (required)" msgstr "" -#: stock/forms.py:379 stock/views.py:1037 stock/views.py:1235 +#: stock/forms.py:379 stock/views.py:950 stock/views.py:1148 msgid "Confirm stock adjustment" msgstr "" @@ -3831,237 +3847,237 @@ msgstr "" msgid "Set the destination as the default location for selected parts" msgstr "" -#: stock/models.py:192 +#: stock/models.py:200 msgid "Created stock item" msgstr "" -#: stock/models.py:228 +#: stock/models.py:236 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:264 +#: stock/models.py:272 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:274 stock/models.py:283 +#: stock/models.py:282 stock/models.py:291 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:275 +#: stock/models.py:283 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:297 +#: stock/models.py:305 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:303 +#: stock/models.py:311 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:310 +#: stock/models.py:318 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:343 +#: stock/models.py:358 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:352 +#: stock/models.py:367 msgid "Base part" msgstr "" -#: stock/models.py:361 +#: stock/models.py:376 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:366 stock/templates/stock/stock_app_base.html:7 +#: stock/models.py:381 stock/templates/stock/stock_app_base.html:7 msgid "Stock Location" msgstr "" -#: stock/models.py:369 +#: stock/models.py:384 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:374 stock/templates/stock/item_base.html:249 +#: stock/models.py:389 stock/templates/stock/item_base.html:249 msgid "Installed In" msgstr "" -#: stock/models.py:377 +#: stock/models.py:392 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:393 +#: stock/models.py:408 msgid "Serial number for this item" msgstr "" -#: stock/models.py:405 +#: stock/models.py:420 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:409 +#: stock/models.py:424 msgid "Stock Quantity" msgstr "" -#: stock/models.py:418 +#: stock/models.py:433 msgid "Source Build" msgstr "" -#: stock/models.py:420 +#: stock/models.py:435 msgid "Build for this stock item" msgstr "" -#: stock/models.py:431 +#: stock/models.py:446 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:434 +#: stock/models.py:449 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:440 +#: stock/models.py:455 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:446 stock/templates/stock/item_base.html:336 +#: stock/models.py:461 stock/templates/stock/item_base.html:336 #: templates/js/stock.js:612 msgid "Expiry Date" msgstr "" -#: stock/models.py:447 +#: stock/models.py:462 msgid "" "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:460 +#: stock/models.py:475 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:470 stock/templates/stock/item_notes.html:14 +#: stock/models.py:485 stock/templates/stock/item_notes.html:14 #: stock/templates/stock/item_notes.html:30 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:480 +#: stock/models.py:495 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:584 +#: stock/models.py:599 msgid "Assigned to Customer" msgstr "" -#: stock/models.py:586 +#: stock/models.py:601 msgid "Manually assigned to customer" msgstr "" -#: stock/models.py:599 +#: stock/models.py:614 msgid "Returned from customer" msgstr "" -#: stock/models.py:601 +#: stock/models.py:616 msgid "Returned to location" msgstr "" -#: stock/models.py:726 +#: stock/models.py:741 msgid "Installed into stock item" msgstr "" -#: stock/models.py:734 +#: stock/models.py:749 msgid "Installed stock item" msgstr "" -#: stock/models.py:758 +#: stock/models.py:773 msgid "Uninstalled stock item" msgstr "" -#: stock/models.py:777 +#: stock/models.py:792 msgid "Uninstalled into location" msgstr "" -#: stock/models.py:857 +#: stock/models.py:872 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:863 +#: stock/models.py:878 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:869 +#: stock/models.py:884 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:872 +#: stock/models.py:887 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:875 +#: stock/models.py:890 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:907 +#: stock/models.py:922 msgid "Add serial number" msgstr "" -#: stock/models.py:910 +#: stock/models.py:925 #, python-brace-format msgid "Serialized {n} items" msgstr "" -#: stock/models.py:1021 +#: stock/models.py:1036 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1410 +#: stock/models.py:1442 msgid "Tracking entry title" msgstr "" -#: stock/models.py:1412 +#: stock/models.py:1444 msgid "Entry notes" msgstr "" -#: stock/models.py:1414 +#: stock/models.py:1446 msgid "Link to external page for further information" msgstr "" -#: stock/models.py:1474 +#: stock/models.py:1506 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1480 +#: stock/models.py:1512 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1497 +#: stock/models.py:1529 msgid "Test" msgstr "" -#: stock/models.py:1498 +#: stock/models.py:1530 msgid "Test name" msgstr "" -#: stock/models.py:1503 +#: stock/models.py:1535 msgid "Result" msgstr "" -#: stock/models.py:1504 templates/js/table_filters.js:172 +#: stock/models.py:1536 templates/js/table_filters.js:172 msgid "Test result" msgstr "" -#: stock/models.py:1510 +#: stock/models.py:1542 msgid "Test output value" msgstr "" -#: stock/models.py:1516 +#: stock/models.py:1548 msgid "Attachment" msgstr "" -#: stock/models.py:1517 +#: stock/models.py:1549 msgid "Test result attachment" msgstr "" -#: stock/models.py:1523 +#: stock/models.py:1555 msgid "Test notes" msgstr "" @@ -4151,15 +4167,15 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:160 -#: stock/templates/stock/location.html:57 templates/stock_table.html:31 +#: stock/templates/stock/location.html:57 templates/stock_table.html:35 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:161 templates/stock_table.html:29 +#: stock/templates/stock/item_base.html:161 templates/stock_table.html:33 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:162 templates/stock_table.html:30 +#: stock/templates/stock/item_base.html:162 templates/stock_table.html:34 msgid "Remove stock" msgstr "" @@ -4179,7 +4195,7 @@ msgstr "" msgid "Return to stock" msgstr "" -#: stock/templates/stock/item_base.html:177 templates/js/stock.js:1119 +#: stock/templates/stock/item_base.html:177 templates/js/stock.js:1136 msgid "Uninstall stock item" msgstr "" @@ -4237,7 +4253,7 @@ msgstr "" msgid "This StockItem expires on" msgstr "" -#: stock/templates/stock/item_base.html:349 +#: stock/templates/stock/item_base.html:349 templates/js/stock.js:618 msgid "Last Updated" msgstr "" @@ -4368,7 +4384,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1517 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1430 msgid "Convert Stock Item" msgstr "" @@ -4400,210 +4416,202 @@ msgstr "" msgid "Installed Items" msgstr "" -#: stock/views.py:127 +#: stock/views.py:126 msgid "Edit Stock Location" msgstr "" -#: stock/views.py:235 stock/views.py:1507 stock/views.py:1620 -#: stock/views.py:1982 +#: stock/views.py:234 stock/views.py:1420 stock/views.py:1533 +#: stock/views.py:1895 msgid "Owner is required (ownership control is enabled)" msgstr "" -#: stock/views.py:250 +#: stock/views.py:249 msgid "Stock Location QR code" msgstr "" -#: stock/views.py:269 +#: stock/views.py:268 msgid "Add Stock Item Attachment" msgstr "" -#: stock/views.py:316 +#: stock/views.py:315 msgid "Edit Stock Item Attachment" msgstr "" -#: stock/views.py:333 +#: stock/views.py:332 msgid "Delete Stock Item Attachment" msgstr "" -#: stock/views.py:350 +#: stock/views.py:349 msgid "Assign to Customer" msgstr "" -#: stock/views.py:360 +#: stock/views.py:359 msgid "Customer must be specified" msgstr "" -#: stock/views.py:384 +#: stock/views.py:383 msgid "Return to Stock" msgstr "" -#: stock/views.py:394 +#: stock/views.py:393 msgid "Specify a valid location" msgstr "" -#: stock/views.py:405 +#: stock/views.py:404 msgid "Stock item returned from customer" msgstr "" #: stock/views.py:415 -msgid "Select Label Template" -msgstr "" - -#: stock/views.py:438 -msgid "Select valid label" -msgstr "" - -#: stock/views.py:502 msgid "Delete All Test Data" msgstr "" -#: stock/views.py:518 +#: stock/views.py:431 msgid "Confirm test data deletion" msgstr "" -#: stock/views.py:538 +#: stock/views.py:451 msgid "Add Test Result" msgstr "" -#: stock/views.py:579 +#: stock/views.py:492 msgid "Edit Test Result" msgstr "" -#: stock/views.py:597 +#: stock/views.py:510 msgid "Delete Test Result" msgstr "" -#: stock/views.py:609 +#: stock/views.py:522 msgid "Select Test Report Template" msgstr "" -#: stock/views.py:639 +#: stock/views.py:552 msgid "Select valid template" msgstr "" -#: stock/views.py:692 +#: stock/views.py:605 msgid "Stock Export Options" msgstr "" -#: stock/views.py:814 +#: stock/views.py:727 msgid "Stock Item QR Code" msgstr "" -#: stock/views.py:840 +#: stock/views.py:753 msgid "Install Stock Item" msgstr "" -#: stock/views.py:940 +#: stock/views.py:853 msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:1048 +#: stock/views.py:961 msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:1073 +#: stock/views.py:986 msgid "Adjust Stock" msgstr "" -#: stock/views.py:1183 +#: stock/views.py:1096 msgid "Move Stock Items" msgstr "" -#: stock/views.py:1184 +#: stock/views.py:1097 msgid "Count Stock Items" msgstr "" -#: stock/views.py:1185 +#: stock/views.py:1098 msgid "Remove From Stock" msgstr "" -#: stock/views.py:1186 +#: stock/views.py:1099 msgid "Add Stock Items" msgstr "" -#: stock/views.py:1187 +#: stock/views.py:1100 msgid "Delete Stock Items" msgstr "" -#: stock/views.py:1215 +#: stock/views.py:1128 msgid "Must enter integer value" msgstr "" -#: stock/views.py:1220 +#: stock/views.py:1133 msgid "Quantity must be positive" msgstr "" -#: stock/views.py:1227 +#: stock/views.py:1140 #, python-brace-format msgid "Quantity must not exceed {x}" msgstr "" -#: stock/views.py:1306 +#: stock/views.py:1219 #, python-brace-format msgid "Added stock to {n} items" msgstr "" -#: stock/views.py:1321 +#: stock/views.py:1234 #, python-brace-format msgid "Removed stock from {n} items" msgstr "" -#: stock/views.py:1334 +#: stock/views.py:1247 #, python-brace-format msgid "Counted stock for {n} items" msgstr "" -#: stock/views.py:1374 +#: stock/views.py:1287 msgid "No items were moved" msgstr "" -#: stock/views.py:1377 +#: stock/views.py:1290 #, python-brace-format msgid "Moved {n} items to {dest}" msgstr "" -#: stock/views.py:1396 +#: stock/views.py:1309 #, python-brace-format msgid "Deleted {n} stock items" msgstr "" -#: stock/views.py:1408 +#: stock/views.py:1321 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:1637 +#: stock/views.py:1550 msgid "Serialize Stock" msgstr "" -#: stock/views.py:1731 templates/js/build.js:210 +#: stock/views.py:1644 templates/js/build.js:210 msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1874 +#: stock/views.py:1787 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1956 +#: stock/views.py:1869 msgid "Quantity cannot be negative" msgstr "" -#: stock/views.py:2051 +#: stock/views.py:1964 msgid "Delete Stock Location" msgstr "" -#: stock/views.py:2065 +#: stock/views.py:1978 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:2077 +#: stock/views.py:1990 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:2096 +#: stock/views.py:2009 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:2106 +#: stock/views.py:2019 msgid "Add Stock Tracking Entry" msgstr "" @@ -4913,7 +4921,7 @@ msgstr "" msgid "Enter barcode data" msgstr "" -#: templates/js/barcode.js:42 +#: templates/js/barcode.js:42 templates/js/modals.js:856 msgid "Invalid server response" msgstr "" @@ -5058,7 +5066,7 @@ msgstr "" msgid "Build stock" msgstr "" -#: templates/js/build.js:582 templates/stock_table.html:33 +#: templates/js/build.js:582 templates/stock_table.html:37 msgid "Order stock" msgstr "" @@ -5102,6 +5110,136 @@ msgstr "" msgid "Assembled part" msgstr "" +#: templates/js/label.js:10 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/label.js:11 +msgid "Stock item(s) must be selected before printing labels" +msgstr "" + +#: templates/js/label.js:29 templates/js/label.js:79 +msgid "No Labels Found" +msgstr "" + +#: templates/js/label.js:30 +msgid "No labels found which match selected stock item(s)" +msgstr "" + +#: templates/js/label.js:61 +msgid "Select Stock Locations" +msgstr "" + +#: templates/js/label.js:62 +msgid "Stock location(s) must be selected before printing labels" +msgstr "" + +#: templates/js/label.js:80 +msgid "No labels found which match selected stock location(s)" +msgstr "" + +#: templates/js/label.js:141 +msgid "Select Label" +msgstr "" + +#: templates/js/label.js:156 +msgid "Select Label Template" +msgstr "" + +#: templates/js/modals.js:406 +msgid "Show Error Information" +msgstr "" + +#: templates/js/modals.js:473 +msgid "Accept" +msgstr "" + +#: templates/js/modals.js:474 +msgid "Cancel" +msgstr "" + +#: templates/js/modals.js:538 +msgid "Loading Data" +msgstr "" + +#: templates/js/modals.js:549 templates/js/modals.js:807 +#: templates/modals.html:19 templates/modals.html:41 +msgid "Submit" +msgstr "" + +#: templates/js/modals.js:550 templates/js/modals.js:808 +#: templates/modals.html:18 templates/modals.html:40 +msgid "Close" +msgstr "" + +#: templates/js/modals.js:759 +msgid "Invalid response from server" +msgstr "" + +#: templates/js/modals.js:759 +msgid "Form data missing from server response" +msgstr "" + +#: templates/js/modals.js:772 +msgid "Error posting form data" +msgstr "" + +#: templates/js/modals.js:856 +msgid "JSON response missing form data" +msgstr "" + +#: templates/js/modals.js:866 +msgid "No Response" +msgstr "" + +#: templates/js/modals.js:867 +msgid "No response from the InvenTree server" +msgstr "" + +#: templates/js/modals.js:871 +msgid "Error 400: Bad Request" +msgstr "" + +#: templates/js/modals.js:872 +msgid "Server returned error code 400" +msgstr "" + +#: templates/js/modals.js:876 +msgid "Error 401: Not Authenticated" +msgstr "" + +#: templates/js/modals.js:877 +msgid "Authentication credentials not supplied" +msgstr "" + +#: templates/js/modals.js:881 +msgid "Error 403: Permission Denied" +msgstr "" + +#: templates/js/modals.js:882 +msgid "You do not have the required permissions to access this function" +msgstr "" + +#: templates/js/modals.js:886 +msgid "Error 404: Resource Not Found" +msgstr "" + +#: templates/js/modals.js:887 +msgid "The requested resource could not be located on the server" +msgstr "" + +#: templates/js/modals.js:891 +msgid "Error 408: Timeout" +msgstr "" + +#: templates/js/modals.js:892 +msgid "Connection timeout while requesting data from server" +msgstr "" + +#: templates/js/modals.js:895 +msgid "Error requesting form data" +msgstr "" + #: templates/js/order.js:135 msgid "No purchase orders found" msgstr "" @@ -5110,7 +5248,7 @@ msgstr "" msgid "Order is overdue" msgstr "" -#: templates/js/order.js:193 templates/js/stock.js:804 +#: templates/js/order.js:193 templates/js/stock.js:821 msgid "Date" msgstr "" @@ -5147,7 +5285,7 @@ msgid "No parts found" msgstr "" #: templates/js/part.js:343 templates/js/stock.js:473 -#: templates/js/stock.js:1151 +#: templates/js/stock.js:1168 msgid "Select" msgstr "" @@ -5279,39 +5417,39 @@ msgstr "" msgid "Stocktake" msgstr "" -#: templates/js/stock.js:720 +#: templates/js/stock.js:737 msgid "Stock Status" msgstr "" -#: templates/js/stock.js:735 +#: templates/js/stock.js:752 msgid "Set Stock Status" msgstr "" -#: templates/js/stock.js:749 +#: templates/js/stock.js:766 msgid "Select Status Code" msgstr "" -#: templates/js/stock.js:750 +#: templates/js/stock.js:767 msgid "Status code must be selected" msgstr "" -#: templates/js/stock.js:870 +#: templates/js/stock.js:887 msgid "No user information" msgstr "" -#: templates/js/stock.js:990 +#: templates/js/stock.js:1007 msgid "Create New Location" msgstr "" -#: templates/js/stock.js:1089 +#: templates/js/stock.js:1106 msgid "Serial" msgstr "" -#: templates/js/stock.js:1182 templates/js/table_filters.js:131 +#: templates/js/stock.js:1199 templates/js/table_filters.js:131 msgid "Installed" msgstr "" -#: templates/js/stock.js:1207 +#: templates/js/stock.js:1224 msgid "Install item" msgstr "" @@ -5464,14 +5602,6 @@ msgstr "" msgid "Form errors exist" msgstr "" -#: templates/modals.html:18 templates/modals.html:40 -msgid "Close" -msgstr "" - -#: templates/modals.html:19 templates/modals.html:41 -msgid "Submit" -msgstr "" - #: templates/navbar.html:29 msgid "Buy" msgstr "" @@ -5533,42 +5663,46 @@ msgid "Export Stock Information" msgstr "" #: templates/stock_table.html:29 -msgid "Add to selected stock items" -msgstr "" - -#: templates/stock_table.html:30 -msgid "Remove from selected stock items" -msgstr "" - -#: templates/stock_table.html:31 -msgid "Stocktake selected stock items" -msgstr "" - -#: templates/stock_table.html:32 -msgid "Move selected stock items" -msgstr "" - -#: templates/stock_table.html:32 -msgid "Move stock" +msgid "Print labels" msgstr "" #: templates/stock_table.html:33 +msgid "Add to selected stock items" +msgstr "" + +#: templates/stock_table.html:34 +msgid "Remove from selected stock items" +msgstr "" + +#: templates/stock_table.html:35 +msgid "Stocktake selected stock items" +msgstr "" + +#: templates/stock_table.html:36 +msgid "Move selected stock items" +msgstr "" + +#: templates/stock_table.html:36 +msgid "Move stock" +msgstr "" + +#: templates/stock_table.html:37 msgid "Order selected items" msgstr "" -#: templates/stock_table.html:34 +#: templates/stock_table.html:38 msgid "Change status" msgstr "" -#: templates/stock_table.html:34 +#: templates/stock_table.html:38 msgid "Change stock status" msgstr "" -#: templates/stock_table.html:37 +#: templates/stock_table.html:41 msgid "Delete selected items" msgstr "" -#: templates/stock_table.html:37 +#: templates/stock_table.html:41 msgid "Delete Stock" msgstr "" @@ -5596,38 +5730,38 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:146 +#: users/models.py:147 msgid "Permission set" msgstr "" -#: users/models.py:154 +#: users/models.py:155 msgid "Group" msgstr "" -#: users/models.py:157 +#: users/models.py:158 msgid "View" msgstr "" -#: users/models.py:157 +#: users/models.py:158 msgid "Permission to view items" msgstr "" -#: users/models.py:159 +#: users/models.py:160 msgid "Add" msgstr "" -#: users/models.py:159 +#: users/models.py:160 msgid "Permission to add items" msgstr "" -#: users/models.py:161 +#: users/models.py:162 msgid "Change" msgstr "" -#: users/models.py:161 +#: users/models.py:162 msgid "Permissions to edit items" msgstr "" -#: users/models.py:163 +#: users/models.py:164 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/part/views.py b/InvenTree/part/views.py index 26cf93e56d..6367921fbf 100644 --- a/InvenTree/part/views.py +++ b/InvenTree/part/views.py @@ -655,7 +655,9 @@ class PartCreate(AjaxCreateView): matches = match_part_names(name) if len(matches) > 0: - context['matches'] = matches + + # Limit to the top 5 matches (to prevent clutter) + context['matches'] = matches[:5] # Enforce display of the checkbox form.fields['confirm_creation'].widget = CheckboxInput() diff --git a/InvenTree/stock/api.py b/InvenTree/stock/api.py index 9f0a4278f5..c8211aaeca 100644 --- a/InvenTree/stock/api.py +++ b/InvenTree/stock/api.py @@ -644,7 +644,7 @@ class StockList(generics.ListCreateAPIView): queryset = queryset.filter(Q(sales_order_allocations__isnull=True) & Q(allocations__isnull=True)) # Do we wish to filter by "active parts" - active = self.request.query_params.get('active', None) + active = params.get('active', None) if active is not None: active = str2bool(active) @@ -683,7 +683,7 @@ class StockList(generics.ListCreateAPIView): raise ValidationError({"part": "Invalid Part ID specified"}) # Does the client wish to filter by the 'ancestor'? - anc_id = self.request.query_params.get('ancestor', None) + anc_id = params.get('ancestor', None) if anc_id: try: @@ -696,9 +696,9 @@ class StockList(generics.ListCreateAPIView): raise ValidationError({"ancestor": "Invalid ancestor ID specified"}) # Does the client wish to filter by stock location? - loc_id = self.request.query_params.get('location', None) + loc_id = params.get('location', None) - cascade = str2bool(self.request.query_params.get('cascade', True)) + cascade = str2bool(params.get('cascade', True)) if loc_id is not None: @@ -718,7 +718,7 @@ class StockList(generics.ListCreateAPIView): pass # Does the client wish to filter by part category? - cat_id = self.request.query_params.get('category', None) + cat_id = params.get('category', None) if cat_id: try: @@ -729,35 +729,68 @@ class StockList(generics.ListCreateAPIView): raise ValidationError({"category": "Invalid category id specified"}) # Filter by StockItem status - status = self.request.query_params.get('status', None) + status = params.get('status', None) if status: queryset = queryset.filter(status=status) # Filter by supplier_part ID - supplier_part_id = self.request.query_params.get('supplier_part', None) + supplier_part_id = params.get('supplier_part', None) if supplier_part_id: queryset = queryset.filter(supplier_part=supplier_part_id) # Filter by company (either manufacturer or supplier) - company = self.request.query_params.get('company', None) + company = params.get('company', None) if company is not None: queryset = queryset.filter(Q(supplier_part__supplier=company) | Q(supplier_part__manufacturer=company)) # Filter by supplier - supplier = self.request.query_params.get('supplier', None) + supplier = params.get('supplier', None) if supplier is not None: queryset = queryset.filter(supplier_part__supplier=supplier) # Filter by manufacturer - manufacturer = self.request.query_params.get('manufacturer', None) + manufacturer = params.get('manufacturer', None) if manufacturer is not None: queryset = queryset.filter(supplier_part__manufacturer=manufacturer) + """ + Filter by the 'last updated' date of the stock item(s): + + - updated_before=? : Filter stock items which were last updated *before* the provided date + - updated_after=? : Filter stock items which were last updated *after* the provided date + """ + + date_fmt = '%Y-%m-%d' # ISO format date string + + updated_before = params.get('updated_before', None) + updated_after = params.get('updated_after', None) + + if updated_before: + try: + updated_before = datetime.strptime(str(updated_before), date_fmt).date() + queryset = queryset.filter(updated__lte=updated_before) + + print("Before:", updated_before.isoformat()) + except (ValueError, TypeError): + # Account for improperly formatted date string + print("After before:", str(updated_before)) + pass + + if updated_after: + try: + updated_after = datetime.strptime(str(updated_after), date_fmt).date() + queryset = queryset.filter(updated__gte=updated_after) + print("After:", updated_after.isoformat()) + except (ValueError, TypeError): + # Account for improperly formatted date string + print("After error:", str(updated_after)) + pass + # Also ensure that we pre-fecth all the related items queryset = queryset.prefetch_related( 'part', diff --git a/InvenTree/stock/models.py b/InvenTree/stock/models.py index 471dae8451..78895b54e3 100644 --- a/InvenTree/stock/models.py +++ b/InvenTree/stock/models.py @@ -32,6 +32,7 @@ from InvenTree import helpers import common.models import report.models +import label.models from InvenTree.status_codes import StockStatus from InvenTree.models import InvenTreeTree, InvenTreeAttachment @@ -69,6 +70,13 @@ class StockLocation(InvenTreeTree): **kwargs ) + @property + def barcode(self): + """ + Brief payload data (e.g. for labels) + """ + return self.format_barcode(brief=True) + def get_stock_items(self, cascade=True): """ Return a queryset for all stock items under this category. @@ -336,6 +344,13 @@ class StockItem(MPTTModel): **kwargs ) + @property + def barcode(self): + """ + Brief payload data (e.g. for labels) + """ + return self.format_barcode(brief=True) + uid = models.CharField(blank=True, max_length=128, help_text=("Unique identifier field")) parent = TreeForeignKey( @@ -1343,14 +1358,31 @@ class StockItem(MPTTModel): return len(self.available_test_reports()) > 0 + def available_labels(self): + """ + Return a list of Label objects which match this StockItem + """ + + labels = [] + + item_query = StockItem.objects.filter(pk=self.pk) + + for lbl in label.models.StockItemLabel.objects.filter(enabled=True): + + filters = helpers.validateFilterString(lbl.filters) + + if item_query.filter(**filters).exists(): + labels.append(lbl) + + return labels + @property def has_labels(self): """ Return True if there are any label templates available for this stock item """ - # TODO - Implement this - return True + return len(self.available_labels()) > 0 @receiver(pre_delete, sender=StockItem, dispatch_uid='stock_item_pre_delete_log') diff --git a/InvenTree/stock/serializers.py b/InvenTree/stock/serializers.py index 6048d5e248..b8e71ff58c 100644 --- a/InvenTree/stock/serializers.py +++ b/InvenTree/stock/serializers.py @@ -213,6 +213,7 @@ class StockItemSerializer(InvenTreeModelSerializer): 'supplier_part_detail', 'tracking_items', 'uid', + 'updated', ] """ These fields are read-only in this context. diff --git a/InvenTree/stock/templates/stock/item_base.html b/InvenTree/stock/templates/stock/item_base.html index 615c9d7155..dbfefc96d7 100644 --- a/InvenTree/stock/templates/stock/item_base.html +++ b/InvenTree/stock/templates/stock/item_base.html @@ -423,12 +423,7 @@ $("#stock-test-report").click(function() { }); $("#print-label").click(function() { - launchModalForm( - "{% url 'stock-item-label-select' item.id %}", - { - follow: true, - } - ) + printStockItemLabels([{{ item.pk }}]); }); $("#stock-duplicate").click(function() { diff --git a/InvenTree/stock/templates/stock/location.html b/InvenTree/stock/templates/stock/location.html index 1c7ecc11c5..f3501a50cf 100644 --- a/InvenTree/stock/templates/stock/location.html +++ b/InvenTree/stock/templates/stock/location.html @@ -43,7 +43,7 @@ @@ -222,6 +222,15 @@ } }); }); + + $('#print-label').click(function() { + + var locs = [{{ location.pk }}]; + + printStockLocationLabels(locs); + + }); + {% endif %} $('#show-qr-code').click(function() { diff --git a/InvenTree/stock/urls.py b/InvenTree/stock/urls.py index 7ad8bc4f7f..6aeb1f5b73 100644 --- a/InvenTree/stock/urls.py +++ b/InvenTree/stock/urls.py @@ -30,7 +30,6 @@ stock_item_detail_urls = [ url(r'^add_tracking/', views.StockItemTrackingCreate.as_view(), name='stock-tracking-create'), url(r'^test-report-select/', views.StockItemTestReportSelect.as_view(), name='stock-item-test-report-select'), - url(r'^label-select/', views.StockItemSelectLabels.as_view(), name='stock-item-label-select'), url(r'^test/', views.StockItemDetail.as_view(template_name='stock/item_tests.html'), name='stock-item-test-results'), url(r'^children/', views.StockItemDetail.as_view(template_name='stock/item_childs.html'), name='stock-item-children'), @@ -64,7 +63,6 @@ stock_urls = [ url(r'^item/uninstall/', views.StockItemUninstall.as_view(), name='stock-item-uninstall'), url(r'^item/test-report-download/', views.StockItemTestReportDownload.as_view(), name='stock-item-test-report-download'), - url(r'^item/print-stock-labels/', views.StockItemPrintLabels.as_view(), name='stock-item-print-labels'), # URLs for StockItem attachments url(r'^item/attachment/', include([ diff --git a/InvenTree/stock/views.py b/InvenTree/stock/views.py index 4e93545f1e..0fdff60b27 100644 --- a/InvenTree/stock/views.py +++ b/InvenTree/stock/views.py @@ -33,7 +33,6 @@ from datetime import datetime, timedelta from company.models import Company, SupplierPart from part.models import Part from report.models import TestReport -from label.models import StockItemLabel from .models import StockItem, StockLocation, StockItemTracking, StockItemAttachment, StockItemTestResult import common.settings @@ -406,92 +405,6 @@ class StockItemReturnToStock(AjaxUpdateView): } -class StockItemSelectLabels(AjaxView): - """ - View for selecting a template for printing labels for one (or more) StockItem objects - """ - - model = StockItem - ajax_form_title = _('Select Label Template') - role_required = 'stock.view' - - def get_form(self): - - item = StockItem.objects.get(pk=self.kwargs['pk']) - - labels = [] - - # Construct a list of StockItemLabel objects which are enabled, and the filters match the selected StockItem - for label in StockItemLabel.objects.filter(enabled=True): - if label.matches_stock_item(item): - labels.append(label) - - return StockForms.StockItemLabelSelectForm(labels) - - def post(self, request, *args, **kwargs): - - label = request.POST.get('label', None) - - try: - label = StockItemLabel.objects.get(pk=label) - except (ValueError, StockItemLabel.DoesNotExist): - raise ValidationError({'label': _("Select valid label")}) - - stock_item = StockItem.objects.get(pk=self.kwargs['pk']) - - url = reverse('stock-item-print-labels') - - url += '?label={pk}'.format(pk=label.pk) - url += '&items[]={pk}'.format(pk=stock_item.pk) - - data = { - 'form_valid': True, - 'url': url, - } - - return self.renderJsonResponse(request, self.get_form(), data=data) - - -class StockItemPrintLabels(AjaxView): - """ - View for printing labels and returning a PDF - - Requires the following arguments to be passed as URL params: - - items: List of valid StockItem pk values - label: Valid pk of a StockItemLabel template - """ - - role_required = 'stock.view' - - def get(self, request, *args, **kwargs): - - label = request.GET.get('label', None) - - try: - label = StockItemLabel.objects.get(pk=label) - except (ValueError, StockItemLabel.DoesNotExist): - raise ValidationError({'label': 'Invalid label ID'}) - - item_pks = request.GET.getlist('items[]') - - items = [] - - for pk in item_pks: - try: - item = StockItem.objects.get(pk=pk) - items.append(item) - except (ValueError, StockItem.DoesNotExist): - pass - - if len(items) == 0: - raise ValidationError({'items': 'Must provide valid stockitems'}) - - pdf = label.render(items).getbuffer() - - return DownloadFile(pdf, 'stock_labels.pdf', content_type='application/pdf') - - class StockItemDeleteTestData(AjaxUpdateView): """ View for deleting all test data diff --git a/InvenTree/templates/base.html b/InvenTree/templates/base.html index c025919936..36f4974816 100644 --- a/InvenTree/templates/base.html +++ b/InvenTree/templates/base.html @@ -112,7 +112,6 @@ InvenTree - @@ -120,6 +119,8 @@ InvenTree + + diff --git a/InvenTree/templates/js/label.js b/InvenTree/templates/js/label.js new file mode 100644 index 0000000000..93eb1c60c5 --- /dev/null +++ b/InvenTree/templates/js/label.js @@ -0,0 +1,173 @@ +{% load i18n %} + +function printStockItemLabels(items, options={}) { + /** + * Print stock item labels for the given stock items + */ + + if (items.length == 0) { + showAlertDialog( + '{% trans "Select Stock Items" %}', + '{% trans "Stock item(s) must be selected before printing labels" %}' + ); + + return; + } + + // Request available labels from the server + inventreeGet( + '{% url "api-stockitem-label-list" %}', + { + enabled: true, + items: items, + }, + { + success: function(response) { + + if (response.length == 0) { + showAlertDialog( + '{% trans "No Labels Found" %}', + '{% trans "No labels found which match selected stock item(s)" %}', + ); + + return; + } + + // Select label to print + selectLabel( + response, + items, + { + success: function(pk) { + var href = `/api/label/stock/${pk}/print/?`; + + items.forEach(function(item) { + href += `items[]=${item}&`; + }); + + window.location.href = href; + } + } + ); + } + } + ); +} + +function printStockLocationLabels(locations, options={}) { + + if (locations.length == 0) { + showAlertDialog( + '{% trans "Select Stock Locations" %}', + '{% trans "Stock location(s) must be selected before printing labels" %}' + ); + + return; + } + + // Request available labels from the server + inventreeGet( + '{% url "api-stocklocation-label-list" %}', + { + enabled: true, + locations: locations, + }, + { + success: function(response) { + if (response.length == 0) { + showAlertDialog( + '{% trans "No Labels Found" %}', + '{% trans "No labels found which match selected stock location(s)" %}', + ); + + return; + } + + // Select label to print + selectLabel( + response, + locations, + { + success: function(pk) { + var href = `/api/label/location/${pk}/print/?`; + + locations.forEach(function(location) { + href += `locations[]=${location}&`; + }); + + window.location.href = href; + } + } + ); + } + } + ) +} + + +function selectLabel(labels, items, options={}) { + /** + * Present the user with the available labels, + * and allow them to select which label to print. + * + * The intent is that the available labels have been requested + * (via AJAX) from the server. + */ + + var modal = options.modal || '#modal-form'; + + var label_list = makeOptionsList( + labels, + function(item) { + var text = item.name; + + if (item.description) { + text += ` - ${item.description}`; + } + + return text; + }, + function(item) { + return item.pk; + } + ); + + // Construct form + var html = ` + +
+
+ +
+ +
+
+
`; + + openModal({ + modal: modal, + }); + + modalEnable(modal, true); + modalSetTitle(modal, '{% trans "Select Label Template" %}'); + modalSetContent(modal, html); + + attachSelect(modal); + + modalSubmit(modal, function() { + + var label = $(modal).find('#id_label'); + + var pk = label.val(); + + closeModal(modal); + + if (options.success) { + options.success(pk); + } + }); +} \ No newline at end of file diff --git a/InvenTree/InvenTree/static/script/inventree/modals.js b/InvenTree/templates/js/modals.js similarity index 92% rename from InvenTree/InvenTree/static/script/inventree/modals.js rename to InvenTree/templates/js/modals.js index 12a496c481..33be851d83 100644 --- a/InvenTree/InvenTree/static/script/inventree/modals.js +++ b/InvenTree/templates/js/modals.js @@ -1,3 +1,5 @@ +{% load i18n %} + function makeOption(text, value, title) { /* Format an option for a select element */ @@ -164,6 +166,15 @@ function setFieldValue(fieldName, value, options={}) { field.val(value); } +function getFieldValue(fieldName, options={}) { + + var modal = options.modal || '#modal-form'; + + var field = getFieldByName(modal, fieldName); + + return field.val(); +} + function partialMatcher(params, data) { /* Replacement function for the 'matcher' parameter for a select2 dropdown. @@ -392,7 +403,7 @@ function renderErrorMessage(xhr) {
@@ -459,8 +470,8 @@ function showQuestionDialog(title, content, options={}) { modalSetTitle(modal, title); modalSetContent(modal, content); - var accept_text = options.accept_text || 'Accept'; - var cancel_text = options.cancel_text || 'Cancel'; + var accept_text = options.accept_text || '{% trans "Accept" %}'; + var cancel_text = options.cancel_text || '{% trans "Cancel" %}'; $(modal).find('#modal-form-cancel').html(cancel_text); $(modal).find('#modal-form-accept').html(accept_text); @@ -524,7 +535,7 @@ function openModal(options) { if (options.title) { modalSetTitle(modal, options.title); } else { - modalSetTitle(modal, 'Loading Data...'); + modalSetTitle(modal, '{% trans "Loading Data" %}...'); } // Unless the content is explicitly set, display loading message @@ -535,8 +546,8 @@ function openModal(options) { } // Default labels for 'Submit' and 'Close' buttons in the form - var submit_text = options.submit_text || 'Submit'; - var close_text = options.close_text || 'Close'; + var submit_text = options.submit_text || '{% trans "Submit" %}'; + var close_text = options.close_text || '{% trans "Close" %}'; modalSetButtonText(modal, submit_text, close_text); @@ -745,7 +756,7 @@ function handleModalForm(url, options) { } else { $(modal).modal('hide'); - showAlertDialog('Invalid response from server', 'Form data missing from server response'); + showAlertDialog('{% trans "Invalid response from server" %}', '{% trans "Form data missing from server response" %}'); } } } @@ -758,7 +769,7 @@ function handleModalForm(url, options) { // There was an error submitting form data via POST $(modal).modal('hide'); - showAlertDialog('Error posting form data', renderErrorMessage(xhr)); + showAlertDialog('{% trans "Error posting form data" %}', renderErrorMessage(xhr)); }, complete: function(xhr) { //TODO @@ -793,8 +804,8 @@ function launchModalForm(url, options = {}) { var modal = options.modal || '#modal-form'; // Default labels for 'Submit' and 'Close' buttons in the form - var submit_text = options.submit_text || 'Submit'; - var close_text = options.close_text || 'Close'; + var submit_text = options.submit_text || '{% trans "Submit" %}'; + var close_text = options.close_text || '{% trans "Close" %}'; // Form the ajax request to retrieve the django form data ajax_data = { @@ -842,7 +853,7 @@ function launchModalForm(url, options = {}) { } else { $(modal).modal('hide'); - showAlertDialog('Invalid server response', 'JSON response missing form data'); + showAlertDialog('{% trans "Invalid server response" %}', '{% trans "JSON response missing form data" %}'); } }, error: function (xhr, ajaxOptions, thrownError) { @@ -852,36 +863,36 @@ function launchModalForm(url, options = {}) { if (xhr.status == 0) { // No response from the server showAlertDialog( - "No Response", - "No response from the InvenTree server", + '{% trans "No Response" %}', + '{% trans "No response from the InvenTree server" %}', ); } else if (xhr.status == 400) { showAlertDialog( - "Error 400: Bad Request", - "Server returned error code 400" + '{% trans "Error 400: Bad Request" %}', + '{% trans "Server returned error code 400" %}', ); } else if (xhr.status == 401) { showAlertDialog( - "Error 401: Not Authenticated", - "Authentication credentials not supplied" + '{% trans "Error 401: Not Authenticated" %}', + '{% trans "Authentication credentials not supplied" %}', ); } else if (xhr.status == 403) { showAlertDialog( - "Error 403: Permission Denied", - "You do not have the required permissions to access this function" + '{% trans "Error 403: Permission Denied" %}', + '{% trans "You do not have the required permissions to access this function" %}', ); } else if (xhr.status == 404) { showAlertDialog( - "Error 404: Resource Not Found", - "The requested resource could not be located on the server" + '{% trans "Error 404: Resource Not Found" %}', + '{% trans "The requested resource could not be located on the server" %}', ); } else if (xhr.status == 408) { showAlertDialog( - "Error 408: Timeout", - "Connection timeout while requesting data from server" + '{% trans "Error 408: Timeout" %}', + '{% trans "Connection timeout while requesting data from server" %}', ); } else { - showAlertDialog('Error requesting form data', renderErrorMessage(xhr)); + showAlertDialog('{% trans "Error requesting form data" %}', renderErrorMessage(xhr)); } console.log("Modal form error: " + xhr.status); diff --git a/InvenTree/templates/js/stock.js b/InvenTree/templates/js/stock.js index e9cb5e2696..276be131f0 100644 --- a/InvenTree/templates/js/stock.js +++ b/InvenTree/templates/js/stock.js @@ -613,6 +613,11 @@ function loadStockTable(table, options) { sortable: true, }, {% endif %} + { + field: 'updated', + title: '{% trans "Last Updated" %}', + sortable: true, + }, { field: 'notes', title: '{% trans "Notes" %}', @@ -660,6 +665,18 @@ function loadStockTable(table, options) { } // Automatically link button callbacks + $('#multi-item-print-label').click(function() { + var selections = $('#stock-table').bootstrapTable('getSelections'); + + var items = []; + + selections.forEach(function(item) { + items.push(item.pk); + }); + + printStockItemLabels(items); + }); + $('#multi-item-stocktake').click(function() { stockAdjustment('count'); }); diff --git a/InvenTree/templates/stock_table.html b/InvenTree/templates/stock_table.html index 2ce934fd00..887a0a6e2b 100644 --- a/InvenTree/templates/stock_table.html +++ b/InvenTree/templates/stock_table.html @@ -14,32 +14,36 @@ {% if read_only %} {% else %} - - {% if owner_control.value == "False" or owner_control.value == "True" and user in owners or user.is_superuser %} - {% if roles.stock.add %} - - {% endif %} - {% if roles.stock.change or roles.stock.delete %} -
- - -
- {% endif %} - {% endif %} + + {% if owner_control.value == "True" and user in owners or user.is_superuser or owner_control.value == "False" %} + {% if roles.stock.add %} + + {% endif %} + {% endif %} + {% if roles.stock.change or roles.stock.delete %} +
+ + +
+ {% endif %} {% endif %}
diff --git a/InvenTree/users/models.py b/InvenTree/users/models.py index 3646c1cd13..57cee2774f 100644 --- a/InvenTree/users/models.py +++ b/InvenTree/users/models.py @@ -116,6 +116,7 @@ class RuleSet(models.Model): 'common_inventreesetting', 'company_contact', 'label_stockitemlabel', + 'label_stocklocationlabel', 'report_reportasset', 'report_testreport', 'part_partstar',