diff --git a/InvenTree/InvenTree/helpers.py b/InvenTree/InvenTree/helpers.py index 13b770539c..da96c7ee79 100644 --- a/InvenTree/InvenTree/helpers.py +++ b/InvenTree/InvenTree/helpers.py @@ -19,9 +19,18 @@ from django.contrib.auth.models import Permission import InvenTree.version +from common.models import InvenTreeSetting from .settings import MEDIA_URL, STATIC_URL +def getSetting(key, backup_value=None): + """ + Shortcut for reading a setting value from the database + """ + + return InvenTreeSetting.get_setting(key, backup_value=backup_value) + + def generateTestKey(test_name): """ Generate a test 'key' for a given test name. diff --git a/InvenTree/InvenTree/urls.py b/InvenTree/InvenTree/urls.py index d718871851..0b4292cbd9 100644 --- a/InvenTree/InvenTree/urls.py +++ b/InvenTree/InvenTree/urls.py @@ -69,10 +69,14 @@ apipatterns = [ settings_urls = [ url(r'^user/?', SettingsView.as_view(template_name='InvenTree/settings/user.html'), name='settings-user'), + url(r'^theme/?', ColorThemeSelectView.as_view(), name='settings-theme'), + url(r'^currency/?', SettingsView.as_view(template_name='InvenTree/settings/currency.html'), name='settings-currency'), url(r'^part/?', SettingsView.as_view(template_name='InvenTree/settings/part.html'), name='settings-part'), - url(r'^theme/?', ColorThemeSelectView.as_view(), name='settings-theme'), - url(r'^other/?', SettingsView.as_view(template_name='InvenTree/settings/other.html'), name='settings-other'), + url(r'^stock/?', SettingsView.as_view(template_name='InvenTree/settings/stock.html'), name='settings-stock'), + url(r'^build/?', SettingsView.as_view(template_name='InvenTree/settings/build.html'), name='settings-build'), + url(r'^purchase-order/?', SettingsView.as_view(template_name='InvenTree/settings/po.html'), name='settings-po'), + url(r'^sales-order/?', SettingsView.as_view(template_name='InvenTree/settings/so.html'), name='settings-so'), # Catch any other urls url(r'^.*$', SettingsView.as_view(template_name='InvenTree/settings/user.html'), name='settings'), diff --git a/InvenTree/InvenTree/validators.py b/InvenTree/InvenTree/validators.py index 548bce12ab..e85dc40810 100644 --- a/InvenTree/InvenTree/validators.py +++ b/InvenTree/InvenTree/validators.py @@ -43,7 +43,7 @@ def validate_part_name(value): def validate_part_ipn(value): """ Validate the Part IPN against regex rule """ - pattern = common.models.InvenTreeSetting.get_setting('part_ipn_regex') + pattern = common.models.InvenTreeSetting.get_setting('PART_IPN_REGEX') if pattern: match = re.search(pattern, value) @@ -52,6 +52,48 @@ def validate_part_ipn(value): raise ValidationError(_('IPN must match regex pattern') + " '{pat}'".format(pat=pattern)) +def validate_build_order_reference(value): + """ + Validate the 'reference' field of a BuildOrder + """ + + pattern = common.models.InvenTreeSetting.get_setting('BUILDORDER_REFERENCE_REGEX') + + if pattern: + match = re.search(pattern, value) + + if match is None: + raise ValidationError(_('Reference must match pattern') + f" '{pattern}'") + + +def validate_purchase_order_reference(value): + """ + Validate the 'reference' field of a PurchaseOrder + """ + + pattern = common.models.InvenTreeSetting.get_setting('PURCHASEORDER_REFERENCE_REGEX') + + if pattern: + match = re.search(pattern, value) + + if match is None: + raise ValidationError(_('Reference must match pattern') + f" '{pattern}'") + + +def validate_sales_order_reference(value): + """ + Validate the 'reference' field of a SalesOrder + """ + + pattern = common.models.InvenTreeSetting.get_setting('SALESORDER_REFERENCE_REGEX') + + if pattern: + match = re.search(pattern, value) + + if match is None: + raise ValidationError(_('Reference must match pattern') + f" '{pattern}'") + + def validate_tree_name(value): """ Prevent illegal characters in tree item names """ diff --git a/InvenTree/InvenTree/version.py b/InvenTree/InvenTree/version.py index 827769c32a..1e545cc68e 100644 --- a/InvenTree/InvenTree/version.py +++ b/InvenTree/InvenTree/version.py @@ -12,7 +12,7 @@ INVENTREE_SW_VERSION = "0.1.4 pre" def inventreeInstanceName(): """ Returns the InstanceName settings for the current database """ - return common.models.InvenTreeSetting.get_setting("InstanceName", "") + return common.models.InvenTreeSetting.get_setting("INVENTREE_INSTANCE", "") def inventreeVersion(): diff --git a/InvenTree/build/admin.py b/InvenTree/build/admin.py index b47d38e36d..86592c7a81 100644 --- a/InvenTree/build/admin.py +++ b/InvenTree/build/admin.py @@ -10,17 +10,16 @@ from .models import Build, BuildItem class BuildAdmin(ImportExportModelAdmin): list_display = ( + 'reference', + 'title', 'part', 'status', 'batch', 'quantity', - 'creation_date', - 'completion_date', - 'title', - 'notes', ) search_fields = [ + 'reference', 'title', 'part__name', 'part__description', diff --git a/InvenTree/build/fixtures/build.yaml b/InvenTree/build/fixtures/build.yaml index 532d502098..0ac5d00a20 100644 --- a/InvenTree/build/fixtures/build.yaml +++ b/InvenTree/build/fixtures/build.yaml @@ -5,6 +5,7 @@ fields: part: 25 batch: 'B1' + reference: "0001" title: 'Building 7 parts' quantity: 7 notes: 'Some simple notes' @@ -20,6 +21,7 @@ pk: 2 fields: part: 50 + reference: "0002" title: 'Making things' batch: 'B2' status: 40 # COMPLETE diff --git a/InvenTree/build/forms.py b/InvenTree/build/forms.py index f60c257cef..74227adb9c 100644 --- a/InvenTree/build/forms.py +++ b/InvenTree/build/forms.py @@ -17,14 +17,26 @@ class EditBuildForm(HelperForm): """ Form for editing a Build object. """ + field_prefix = { + 'reference': 'BO', + 'link': 'fa-link', + 'batch': 'fa-layer-group', + 'location': 'fa-map-marker-alt', + } + + field_placeholder = { + 'reference': _('Build Order reference') + } + class Meta: model = Build fields = [ + 'reference', 'title', 'part', + 'quantity', 'parent', 'sales_order', - 'quantity', 'take_from', 'batch', 'link', diff --git a/InvenTree/build/migrations/0018_build_reference.py b/InvenTree/build/migrations/0018_build_reference.py new file mode 100644 index 0000000000..bcf4f9b9d4 --- /dev/null +++ b/InvenTree/build/migrations/0018_build_reference.py @@ -0,0 +1,64 @@ +# Generated by Django 3.0.7 on 2020-10-19 11:25 + +from django.db import migrations, models + + +def add_default_reference(apps, schema_editor): + """ + Add a "default" build-order reference for any existing build orders. + Best we can do is use the PK of the build order itself. + """ + + Build = apps.get_model('build', 'Build') + + count = 0 + + for build in Build.objects.all(): + + build.reference = str(build.pk) + build.save() + count += 1 + + print(f"\nUpdated build reference for {count} existing BuildOrder objects") + + +def reverse_default_reference(apps, schema_editor): + """ + Do nothing! But we need to have a function here so the whole process is reversible. + """ + pass + + +class Migration(migrations.Migration): + + dependencies = [ + ('build', '0017_auto_20200426_0612'), + ] + + operations = [ + # Initial operation - create a 'reference' field for the Build object: + migrations.AddField( + model_name='build', + name='reference', + field=models.CharField(help_text='Build Order Reference', blank=True, max_length=64, unique=False, verbose_name='Reference'), + ), + + # Auto-populate the new reference field for any existing build order objects + migrations.RunPython( + add_default_reference, + reverse_code=reverse_default_reference + ), + + # Now that each build has a non-empty, unique reference, update the field requirements! + migrations.AlterField( + model_name='build', + name='reference', + field=models.CharField( + help_text='Build Order Reference', + max_length=64, + blank=False, + unique=True, + verbose_name='Reference' + ) + ) + ] diff --git a/InvenTree/build/migrations/0019_auto_20201019_1302.py b/InvenTree/build/migrations/0019_auto_20201019_1302.py new file mode 100644 index 0000000000..c767d3a3d9 --- /dev/null +++ b/InvenTree/build/migrations/0019_auto_20201019_1302.py @@ -0,0 +1,23 @@ +# Generated by Django 3.0.7 on 2020-10-19 13:02 + +import InvenTree.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('build', '0018_build_reference'), + ] + + operations = [ + migrations.AlterModelOptions( + name='build', + options={'verbose_name': 'Build Order', 'verbose_name_plural': 'Build Orders'}, + ), + migrations.AlterField( + model_name='build', + name='reference', + field=models.CharField(help_text='Build Order Reference', max_length=64, unique=True, validators=[InvenTree.validators.validate_build_order_reference], verbose_name='Reference'), + ), + ] diff --git a/InvenTree/build/migrations/0020_auto_20201019_1325.py b/InvenTree/build/migrations/0020_auto_20201019_1325.py new file mode 100644 index 0000000000..1406530c8d --- /dev/null +++ b/InvenTree/build/migrations/0020_auto_20201019_1325.py @@ -0,0 +1,18 @@ +# Generated by Django 3.0.7 on 2020-10-19 13:25 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('build', '0019_auto_20201019_1302'), + ] + + operations = [ + migrations.AlterField( + model_name='build', + name='title', + field=models.CharField(help_text='Brief description of the build', max_length=100, verbose_name='Description'), + ), + ] diff --git a/InvenTree/build/models.py b/InvenTree/build/models.py index 35870adde4..877affd144 100644 --- a/InvenTree/build/models.py +++ b/InvenTree/build/models.py @@ -22,7 +22,9 @@ from markdownx.models import MarkdownxField from mptt.models import MPTTModel, TreeForeignKey from InvenTree.status_codes import BuildStatus -from InvenTree.helpers import decimal2string +from InvenTree.helpers import increment, getSetting +from InvenTree.validators import validate_build_order_reference + import InvenTree.fields from stock import models as StockModels @@ -34,6 +36,7 @@ class Build(MPTTModel): Attributes: part: The part to be built (from component BOM items) + reference: Build order reference (required, must be unique) title: Brief title describing the build (required) quantity: Number of units to be built parent: Reference to a Build object for which this Build is required @@ -47,8 +50,15 @@ class Build(MPTTModel): notes: Text notes """ + class Meta: + verbose_name = _("Build Order") + verbose_name_plural = _("Build Orders") + def __str__(self): - return "{q} x {part}".format(q=decimal2string(self.quantity), part=str(self.part.full_name)) + + prefix = getSetting("BUILDORDER_REFERENCE_PREFIX") + + return f"{prefix}{self.reference}" def get_absolute_url(self): return reverse('build-detail', kwargs={'pk': self.id}) @@ -69,8 +79,19 @@ class Build(MPTTModel): except PartModels.Part.DoesNotExist: pass + reference = models.CharField( + unique=True, + max_length=64, + blank=False, + help_text=_('Build Order Reference'), + verbose_name=_('Reference'), + validators=[ + validate_build_order_reference + ] + ) + title = models.CharField( - verbose_name=_('Build Title'), + verbose_name=_('Description'), blank=False, max_length=100, help_text=_('Brief description of the build') @@ -165,6 +186,38 @@ class Build(MPTTModel): def output_count(self): return self.build_outputs.count() + @classmethod + def getNextBuildNumber(cls): + """ + Try to predict the next Build Order reference: + """ + + if cls.objects.count() == 0: + return None + + build = cls.objects.last() + ref = build.reference + + if not ref: + return None + + tries = set() + + while 1: + new_ref = increment(ref) + + if new_ref in tries: + # We are potentially stuck in a loop - simply return the original reference + return ref + + if cls.objects.filter(reference=new_ref).exists(): + tries.add(new_ref) + new_ref = increment(new_ref) + else: + break + + return new_ref + @transaction.atomic def cancelBuild(self, user): """ Mark the Build as CANCELLED diff --git a/InvenTree/build/serializers.py b/InvenTree/build/serializers.py index 6480004699..53e75942f0 100644 --- a/InvenTree/build/serializers.py +++ b/InvenTree/build/serializers.py @@ -41,6 +41,7 @@ class BuildSerializer(InvenTreeModelSerializer): 'completion_date', 'part', 'part_detail', + 'reference', 'sales_order', 'quantity', 'status', diff --git a/InvenTree/build/templates/build/build_base.html b/InvenTree/build/templates/build/build_base.html index f076013def..a366459908 100644 --- a/InvenTree/build/templates/build/build_base.html +++ b/InvenTree/build/templates/build/build_base.html @@ -5,18 +5,18 @@ {% load status_codes %} {% block page_title %} -InvenTree | {% trans "Build" %} - {{ build }} +InvenTree | {% trans "Build Order" %} - {{ build }} {% endblock %} {% block pre_content %} {% if build.sales_order %}
- {% trans "This build is allocated to Sales Order" %} {{ build.sales_order }} + {% trans "This Build Order is allocated to Sales Order" %} {{ build.sales_order }}
{% endif %} {% if build.parent %}
- {% trans "This build is a child of Build" %} {{ build.parent }} + {% trans "This Build Order is a child of Build Order" %} {{ build.parent }}
{% endif %} {% endblock %} @@ -31,14 +31,15 @@ src="{% static 'img/blank_image.png' %}" {% endblock %} {% block page_data %} -

{% trans "Build" %} {% build_status_label build.status large=True %}

-
-

- {{ build.quantity }} x {{ build.part.full_name }} +

+ {% trans "Build Order" %} {{ build }} {% if user.is_staff and roles.build.change %} -{% endif %} -

+ {% endif %} + +

{% build_status_label build.status large=True %}

+
+

{{ build.title }}

{% if roles.build.change %} @@ -68,9 +69,9 @@ src="{% static 'img/blank_image.png' %}"

{% trans "Build Details" %}

- - - + + + diff --git a/InvenTree/build/tests.py b/InvenTree/build/tests.py index 92ca034a4a..ded98a441c 100644 --- a/InvenTree/build/tests.py +++ b/InvenTree/build/tests.py @@ -54,7 +54,7 @@ class BuildTestSimple(TestCase): self.assertEqual(b.batch, 'B2') self.assertEqual(b.quantity, 21) - self.assertEqual(str(b), '21 x Orphan') + self.assertEqual(str(b), 'BO0002') def test_url(self): b1 = Build.objects.get(pk=1) diff --git a/InvenTree/build/views.py b/InvenTree/build/views.py index b2b8b24502..1296e42fae 100644 --- a/InvenTree/build/views.py +++ b/InvenTree/build/views.py @@ -400,7 +400,7 @@ class BuildCreate(AjaxCreateView): model = Build context_object_name = 'build' form_class = forms.EditBuildForm - ajax_form_title = _('Start new Build') + ajax_form_title = _('New Build Order') ajax_template_name = 'modal_form.html' role_required = 'build.add' @@ -415,6 +415,8 @@ class BuildCreate(AjaxCreateView): # User has provided a Part ID initials['part'] = self.request.GET.get('part', None) + initials['reference'] = Build.getNextBuildNumber() + initials['parent'] = self.request.GET.get('parent', None) # User has provided a SalesOrder ID diff --git a/InvenTree/common/admin.py b/InvenTree/common/admin.py index cb643deca4..da12852d83 100644 --- a/InvenTree/common/admin.py +++ b/InvenTree/common/admin.py @@ -14,7 +14,7 @@ class CurrencyAdmin(ImportExportModelAdmin): class SettingsAdmin(ImportExportModelAdmin): - list_display = ('key', 'value', 'description') + list_display = ('key', 'value') admin.site.register(Currency, CurrencyAdmin) diff --git a/InvenTree/common/apps.py b/InvenTree/common/apps.py index 4661c69370..afdf845f15 100644 --- a/InvenTree/common/apps.py +++ b/InvenTree/common/apps.py @@ -1,10 +1,6 @@ from django.apps import AppConfig from django.db.utils import OperationalError, ProgrammingError -import os -import uuid -import yaml - class CommonConfig(AppConfig): name = 'common' @@ -12,45 +8,8 @@ class CommonConfig(AppConfig): def ready(self): """ Will be called when the Common app is first loaded """ - self.populate_default_settings() self.add_instance_name() - - def populate_default_settings(self): - """ Populate the default values for InvenTree key:value pairs. - If a setting does not exist, it will be created. - """ - - # Import this here, rather than at the global-level, - # otherwise it is called all the time, and we don't want that, - # as the InvenTreeSetting model may have not been instantiated yet. - from .models import InvenTreeSetting - - here = os.path.dirname(os.path.abspath(__file__)) - settings_file = os.path.join(here, 'kvp.yaml') - - with open(settings_file) as kvp: - values = yaml.safe_load(kvp) - - for value in values: - key = value['key'] - default = value['default'] - description = value['description'] - - try: - # If a particular setting does not exist in the database, create it now - if not InvenTreeSetting.objects.filter(key=key).exists(): - setting = InvenTreeSetting( - key=key, - value=default, - description=description - ) - - setting.save() - - print("Creating new key: '{k}' = '{v}'".format(k=key, v=default)) - except (OperationalError, ProgrammingError): - # Migrations have not yet been applied - table does not exist - break + self.add_default_settings() def add_instance_name(self): """ @@ -61,20 +20,73 @@ class CommonConfig(AppConfig): # See note above from .models import InvenTreeSetting + """ + Note: The "old" instance name was stored under the key 'InstanceName', + but has now been renamed to 'INVENTREE_INSTANCE'. + """ + try: - if not InvenTreeSetting.objects.filter(key='InstanceName').exists(): - val = uuid.uuid4().hex + # Quick exit if a value already exists for 'inventree_instance' + if InvenTreeSetting.objects.filter(key='INVENTREE_INSTANCE').exists(): + return - print("No 'InstanceName' found - generating random name '{n}'".format(n=val)) + # Default instance name + instance_name = 'InvenTree Server' - name = InvenTreeSetting( - key="InstanceName", - value=val, - description="Instance name for this InvenTree database installation." - ) + # Use the old name if it exists + if InvenTreeSetting.objects.filter(key='InstanceName').exists(): + instance = InvenTreeSetting.objects.get(key='InstanceName') + instance_name = instance.value + + # Delete the legacy key + instance.delete() + + # Create new value + InvenTreeSetting.objects.create( + key='INVENTREE_INSTANCE', + value=instance_name + ) - name.save() except (OperationalError, ProgrammingError): # Migrations have not yet been applied - table does not exist pass + + def add_default_settings(self): + """ + Create all required settings, if they do not exist. + """ + + from .models import InvenTreeSetting + + for key in InvenTreeSetting.DEFAULT_VALUES.keys(): + try: + settings = InvenTreeSetting.objects.filter(key__iexact=key) + + if settings.count() == 0: + value = InvenTreeSetting.DEFAULT_VALUES[key] + + print(f"Creating default setting for {key} -> '{value}'") + + InvenTreeSetting.objects.create( + key=key, + value=value + ) + + return + + elif settings.count() > 1: + # Prevent multiple shadow copies of the same setting! + for setting in settings[1:]: + setting.delete() + + # Ensure that the key has the correct case + setting = settings[0] + + if not setting.key == key: + setting.key = key + setting.save() + + except (OperationalError, ProgrammingError): + # Table might not yet exist + pass diff --git a/InvenTree/common/forms.py b/InvenTree/common/forms.py index 00e6c15c7f..53493faff0 100644 --- a/InvenTree/common/forms.py +++ b/InvenTree/common/forms.py @@ -7,7 +7,7 @@ from __future__ import unicode_literals from InvenTree.forms import HelperForm -from .models import Currency +from .models import Currency, InvenTreeSetting class CurrencyEditForm(HelperForm): @@ -22,3 +22,17 @@ class CurrencyEditForm(HelperForm): 'value', 'base' ] + + +class SettingEditForm(HelperForm): + """ + Form for creating / editing a settings object + """ + + class Meta: + model = InvenTreeSetting + + fields = [ + 'key', + 'value' + ] diff --git a/InvenTree/common/kvp.yaml b/InvenTree/common/kvp.yaml deleted file mode 100644 index d0f7249dff..0000000000 --- a/InvenTree/common/kvp.yaml +++ /dev/null @@ -1,16 +0,0 @@ -# This file contains the default values for the key:value settings available in InvenTree -# This file should not be edited locally. - -# Note: The description strings provided here will be translatable, -# so ensure that any translations are provided as appropriate. - -# TODO: Update the formatting here to include logical separators e.g. double-underscore -# TODO: This is so when there are enough options, we will be able to display them as a tree - -- key: 'part_ipn_regex' - default: '' - description: 'Format string for internal part number' - -- key: part_deep_copy - default: True - description: 'Parts are deep-copied by default' \ No newline at end of file diff --git a/InvenTree/common/migrations/0008_remove_inventreesetting_description.py b/InvenTree/common/migrations/0008_remove_inventreesetting_description.py new file mode 100644 index 0000000000..d7889ced17 --- /dev/null +++ b/InvenTree/common/migrations/0008_remove_inventreesetting_description.py @@ -0,0 +1,17 @@ +# Generated by Django 3.0.7 on 2020-10-19 13:02 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('common', '0007_colortheme'), + ] + + operations = [ + migrations.RemoveField( + model_name='inventreesetting', + name='description', + ), + ] diff --git a/InvenTree/common/models.py b/InvenTree/common/models.py index b0a836118d..31f8e12260 100644 --- a/InvenTree/common/models.py +++ b/InvenTree/common/models.py @@ -27,6 +27,30 @@ class InvenTreeSetting(models.Model): even if that key does not exist. """ + # Dict of default values for various internal settings + DEFAULT_VALUES = { + # Global inventree settings + 'INVENTREE_INSTANCE': 'InvenTree Server', + + # Part settings + 'PART_IPN_REGEX': '', + 'PART_COPY_BOM': True, + 'PART_COPY_PARAMETERS': True, + 'PART_COPY_TESTS': True, + + # Stock settings + + # Build Order settings + 'BUILDORDER_REFERENCE_PREFIX': 'BO', + 'BUILDORDER_REFERENCE_REGEX': '', + + # Purchase Order Settings + 'PURCHASEORDER_REFERENCE_PREFIX': 'PO', + + # Sales Order Settings + 'SALESORDER_REFERENCE_PREFIX': 'SO', + } + class Meta: verbose_name = "InvenTree Setting" verbose_name_plural = "InvenTree Settings" @@ -38,9 +62,17 @@ class InvenTreeSetting(models.Model): If it does not exist, return the backup value (default = None) """ + # If no backup value is specified, atttempt to retrieve a "default" value + if backup_value is None: + backup_value = InvenTreeSetting.DEFAULT_VALUES.get(key, None) + try: - setting = InvenTreeSetting.objects.get(key__iexact=key) - return setting.value + settings = InvenTreeSetting.objects.filter(key__iexact=key) + + if len(settings) > 0: + return settings[0].value + else: + return backup_value except InvenTreeSetting.DoesNotExist: return backup_value @@ -69,15 +101,13 @@ class InvenTreeSetting(models.Model): else: return - setting.value = value + setting.value = str(value) setting.save() key = models.CharField(max_length=50, blank=False, unique=True, help_text=_('Settings key (must be unique - case insensitive')) value = models.CharField(max_length=200, blank=True, unique=False, help_text=_('Settings value')) - description = models.CharField(max_length=200, blank=True, unique=False, help_text=_('Settings description')) - def validate_unique(self, exclude=None): """ Ensure that the key:value pair is unique. In addition to the base validators, this ensures that the 'key' diff --git a/InvenTree/common/tests.py b/InvenTree/common/tests.py index 5c6171a65c..a5d32dc3d6 100644 --- a/InvenTree/common/tests.py +++ b/InvenTree/common/tests.py @@ -2,8 +2,9 @@ from __future__ import unicode_literals from django.test import TestCase +from django.contrib.auth import get_user_model -from .models import Currency +from .models import Currency, InvenTreeSetting class CurrencyTest(TestCase): @@ -17,3 +18,32 @@ class CurrencyTest(TestCase): # Simple test for now (improve this later!) self.assertEqual(Currency.objects.count(), 2) + + +class SettingsTest(TestCase): + """ + Tests for the 'settings' model + """ + + def setUp(self): + + User = get_user_model() + + self.user = User.objects.create_user('username', 'user@email.com', 'password') + self.user.is_staff = True + self.user.save() + + self.client.login(username='username', password='password') + + def test_defaults(self): + """ + Populate the settings with default values + """ + + for key in InvenTreeSetting.DEFAULT_VALUES.keys(): + + value = InvenTreeSetting.DEFAULT_VALUES[key] + + InvenTreeSetting.set_setting(key, value, self.user) + + self.assertEqual(str(value), InvenTreeSetting.get_setting(key)) diff --git a/InvenTree/common/views.py b/InvenTree/common/views.py index 5da634c6d3..a205b8b915 100644 --- a/InvenTree/common/views.py +++ b/InvenTree/common/views.py @@ -35,3 +35,14 @@ class CurrencyDelete(AjaxDeleteView): model = models.Currency ajax_form_title = _('Delete Currency') ajax_template_name = "common/delete_currency.html" + + +class SettingEdit(AjaxUpdateView): + """ + View for editing an InvenTree key:value settings object, + (or creating it if the key does not already exist) + """ + + model = models.InvenTreeSetting + ajax_form_title = _('Change Setting') + form_class = forms.SettingEditForm diff --git a/InvenTree/locale/de/LC_MESSAGES/django.mo b/InvenTree/locale/de/LC_MESSAGES/django.mo index 6391f0ae5a..23c7009592 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 7f955ffea2..10f223fcd4 100644 --- a/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/InvenTree/locale/de/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-06 09:31+0000\n" +"POT-Creation-Date: 2020-10-19 21:40+0000\n" "PO-Revision-Date: 2020-05-03 11:32+0200\n" "Last-Translator: Christian Schlüter \n" "Language-Team: C \n" @@ -25,7 +25,7 @@ msgstr "Keine Aktion angegeben" msgid "No matching action found" msgstr "Keine passende Aktion gefunden" -#: InvenTree/forms.py:102 build/forms.py:37 +#: InvenTree/forms.py:102 build/forms.py:49 msgid "Confirm" msgstr "Bestätigen" @@ -49,35 +49,35 @@ msgstr "" msgid "Apply Theme" msgstr "" -#: InvenTree/helpers.py:339 order/models.py:187 order/models.py:261 +#: InvenTree/helpers.py:348 order/models.py:187 order/models.py:261 msgid "Invalid quantity provided" msgstr "Keine gültige Menge" -#: InvenTree/helpers.py:342 +#: InvenTree/helpers.py:351 msgid "Empty serial number string" msgstr "Keine Seriennummer angegeben" -#: InvenTree/helpers.py:363 +#: InvenTree/helpers.py:372 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "Doppelte Seriennummer: {n}" -#: InvenTree/helpers.py:367 InvenTree/helpers.py:370 InvenTree/helpers.py:373 +#: InvenTree/helpers.py:376 InvenTree/helpers.py:379 InvenTree/helpers.py:382 #, python-brace-format msgid "Invalid group: {g}" msgstr "Ungültige Gruppe: {g}" -#: InvenTree/helpers.py:378 +#: InvenTree/helpers.py:387 #, fuzzy, python-brace-format #| msgid "Duplicate serial: {n}" msgid "Duplicate serial: {g}" msgstr "Doppelte Seriennummer: {n}" -#: InvenTree/helpers.py:386 +#: InvenTree/helpers.py:395 msgid "No serial numbers found" msgstr "Keine Seriennummern gefunden" -#: InvenTree/helpers.py:390 +#: InvenTree/helpers.py:399 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" @@ -152,7 +152,7 @@ msgid "Returned" msgstr "Zurückgegeben" #: InvenTree/status_codes.py:136 -#: order/templates/order/sales_order_base.html:105 +#: order/templates/order/sales_order_base.html:106 msgid "Shipped" msgstr "Versendet" @@ -178,7 +178,7 @@ msgstr "" #: InvenTree/status_codes.py:223 build/templates/build/allocate.html:358 #: order/templates/order/sales_order_detail.html:221 -#: part/templates/part/tabs.html:23 templates/js/build.html:126 +#: part/templates/part/tabs.html:23 templates/js/build.html:140 msgid "Allocated" msgstr "Zugeordnet" @@ -190,20 +190,27 @@ msgstr "Ungültiger Buchstabe im Teilenamen" msgid "IPN must match regex pattern" msgstr "IPN muss zu Regex-Muster passen" -#: InvenTree/validators.py:60 +#: InvenTree/validators.py:66 InvenTree/validators.py:80 +#: InvenTree/validators.py:94 +#, fuzzy +#| msgid "IPN must match regex pattern" +msgid "Reference must match pattern" +msgstr "IPN muss zu Regex-Muster passen" + +#: InvenTree/validators.py:102 #, python-brace-format msgid "Illegal character in name ({x})" msgstr "Ungültiges Zeichen im Namen ({x})" -#: InvenTree/validators.py:79 InvenTree/validators.py:95 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "Überschuss-Wert darf nicht negativ sein" -#: InvenTree/validators.py:97 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "Überschuss darf 100% nicht überschreiten" -#: InvenTree/validators.py:104 +#: InvenTree/validators.py:146 msgid "Overage must be an integer value or a percentage" msgstr "Überschuss muss eine Ganzzahl oder ein Prozentwert sein" @@ -255,51 +262,93 @@ msgstr "" msgid "Barcode associated with StockItem" msgstr "Neues Lagerobjekt hinzufügen" -#: build/forms.py:58 +#: build/forms.py:28 +#, fuzzy +#| msgid "Order reference" +msgid "Build Order reference" +msgstr "Bestell-Referenz" + +#: build/forms.py:70 #, fuzzy #| msgid "Location Details" msgid "Location of completed parts" msgstr "Standort-Details" -#: build/forms.py:62 +#: build/forms.py:74 #, fuzzy #| msgid "Serial Number" msgid "Serial numbers" msgstr "Seriennummer" -#: build/forms.py:64 stock/forms.py:111 +#: build/forms.py:76 stock/forms.py:111 msgid "Enter unique serial numbers (or leave blank)" msgstr "Eindeutige Seriennummern eingeben (oder leer lassen)" -#: build/forms.py:67 +#: build/forms.py:79 msgid "Confirm build completion" msgstr "Bau-Fertigstellung bestätigen" -#: build/models.py:67 +#: build/models.py:54 build/templates/build/build_base.html:8 +#: build/templates/build/build_base.html:35 +#: part/templates/part/allocation.html:20 +#: stock/templates/stock/item_base.html:214 +msgid "Build Order" +msgstr "Bauauftrag" + +#: build/models.py:55 build/templates/build/index.html:6 +#: build/templates/build/index.html:14 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:24 users/models.py:30 +msgid "Build Orders" +msgstr "Bauaufträge" + +#: build/models.py:77 #, 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" -#: build/models.py:73 build/templates/build/build_base.html:72 -msgid "Build Title" -msgstr "Bau-Titel" +#: build/models.py:86 build/templates/build/build_base.html:73 +#, fuzzy +#| msgid "Order Reference" +msgid "Build Order Reference" +msgstr "Bestellreferenz" -#: build/models.py:76 +#: build/models.py:87 build/templates/build/allocate.html:342 +#: order/templates/order/purchase_order_detail.html:172 +#: templates/js/bom.html:154 +msgid "Reference" +msgstr "Referenz" + +#: build/models.py:94 build/templates/build/allocate.html:337 +#: company/templates/company/supplier_part_base.html:53 +#: company/templates/company/supplier_part_detail.html:27 +#: order/templates/order/purchase_order_detail.html:159 +#: part/templates/part/detail.html:51 part/templates/part/set_category.html:14 +#: templates/InvenTree/search.html:147 templates/js/bom.html:147 +#: templates/js/build.html:56 templates/js/company.html:56 +#: templates/js/order.html:159 templates/js/order.html:234 +#: templates/js/part.html:120 templates/js/part.html:203 +#: templates/js/part.html:345 templates/js/part.html:526 +#: templates/js/stock.html:444 templates/js/stock.html:671 +msgid "Description" +msgstr "Beschreibung" + +#: build/models.py:97 msgid "Brief description of the build" msgstr "Kurze Beschreibung des Baus" -#: build/models.py:84 build/templates/build/build_base.html:93 +#: build/models.py:105 build/templates/build/build_base.html:94 msgid "Parent Build" msgstr "Eltern-Bau" -#: build/models.py:85 +#: build/models.py:106 msgid "Parent build to which this build is allocated" msgstr "Eltern-Bau, dem dieser Bau zugewiesen ist" -#: build/models.py:90 build/templates/build/allocate.html:329 +#: build/models.py:111 build/templates/build/allocate.html:329 #: build/templates/build/auto_allocate.html:19 -#: build/templates/build/build_base.html:77 +#: build/templates/build/build_base.html:78 #: build/templates/build/detail.html:22 order/models.py:501 #: order/templates/order/order_wizard/select_parts.html:30 #: order/templates/order/purchase_order_detail.html:147 @@ -307,29 +356,29 @@ msgstr "Eltern-Bau, dem dieser Bau zugewiesen ist" #: part/templates/part/part_app_base.html:7 #: part/templates/part/set_category.html:13 templates/InvenTree/search.html:133 #: templates/js/barcode.html:336 templates/js/bom.html:124 -#: templates/js/build.html:47 templates/js/company.html:137 +#: templates/js/build.html:61 templates/js/company.html:137 #: templates/js/part.html:184 templates/js/part.html:289 #: templates/js/stock.html:421 templates/js/stock.html:977 msgid "Part" msgstr "Teil" -#: build/models.py:99 +#: build/models.py:120 msgid "Select part to build" msgstr "Teil für den Bau wählen" -#: build/models.py:104 +#: build/models.py:125 msgid "Sales Order Reference" msgstr "Bestellungsreferenz" -#: build/models.py:108 +#: build/models.py:129 msgid "SalesOrder to which this build is allocated" msgstr "Bestellung, die diesem Bau zugwiesen ist" -#: build/models.py:113 +#: build/models.py:134 msgid "Source Location" msgstr "Quell-Standort" -#: build/models.py:117 +#: build/models.py:138 msgid "" "Select location to take stock from for this build (leave blank to take from " "any stock location)" @@ -337,44 +386,44 @@ msgstr "" "Lager-Entnahmestandort für diesen Bau wählen (oder leer lassen für einen " "beliebigen Lager-Standort)" -#: build/models.py:121 +#: build/models.py:142 msgid "Build Quantity" msgstr "Bau-Anzahl" -#: build/models.py:124 +#: build/models.py:145 msgid "Number of parts to build" msgstr "Anzahl der zu bauenden Teile" -#: build/models.py:128 part/templates/part/part_base.html:155 +#: build/models.py:149 part/templates/part/part_base.html:155 msgid "Build Status" msgstr "Bau-Status" -#: build/models.py:132 +#: build/models.py:153 msgid "Build status code" msgstr "Bau-Statuscode" -#: build/models.py:136 stock/models.py:387 +#: build/models.py:157 stock/models.py:387 msgid "Batch Code" msgstr "Losnummer" -#: build/models.py:140 +#: build/models.py:161 msgid "Batch code for this build output" msgstr "Chargennummer für diese Bau-Ausgabe" -#: build/models.py:155 build/templates/build/detail.html:55 +#: build/models.py:176 build/templates/build/detail.html:55 #: company/templates/company/supplier_part_base.html:60 #: company/templates/company/supplier_part_detail.html:24 #: part/templates/part/detail.html:80 part/templates/part/part_base.html:102 -#: stock/models.py:381 stock/templates/stock/item_base.html:244 +#: stock/models.py:381 stock/templates/stock/item_base.html:266 msgid "External Link" msgstr "Externer Link" -#: build/models.py:156 stock/models.py:383 +#: build/models.py:177 stock/models.py:383 msgid "Link to external URL" msgstr "Link zu einer externen URL" -#: build/models.py:160 build/templates/build/tabs.html:14 company/models.py:310 -#: company/templates/company/tabs.html:33 order/templates/order/po_tabs.html:15 +#: build/models.py:181 build/templates/build/tabs.html:14 company/models.py:310 +#: company/templates/company/tabs.html:33 order/templates/order/po_tabs.html:18 #: order/templates/order/purchase_order_detail.html:202 #: order/templates/order/so_tabs.html:23 part/templates/part/tabs.html:70 #: stock/forms.py:306 stock/forms.py:338 stock/forms.py:366 stock/models.py:453 @@ -384,42 +433,42 @@ msgstr "Link zu einer externen URL" msgid "Notes" msgstr "Notizen" -#: build/models.py:161 +#: build/models.py:182 msgid "Extra build notes" msgstr "Notizen für den Bau" -#: build/models.py:467 +#: build/models.py:520 #, python-brace-format msgid "Selected stock item not found in BOM for part '{p}'" msgstr "Ausgewähltes Lagerobjekt nicht in BOM für Teil '{p}' gefunden" -#: build/models.py:470 +#: build/models.py:523 #, 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:476 order/models.py:585 +#: build/models.py:529 order/models.py:585 msgid "StockItem is over-allocated" msgstr "Zu viele Lagerobjekte zugewiesen" -#: build/models.py:479 order/models.py:588 +#: build/models.py:532 order/models.py:588 msgid "Allocation quantity must be greater than zero" msgstr "Anzahl muss größer null sein" -#: build/models.py:482 +#: build/models.py:535 msgid "Quantity must be 1 for serialized stock" msgstr "Anzahl muss 1 für Objekte mit Seriennummer sein" -#: build/models.py:511 +#: build/models.py:564 msgid "Build to allocate parts" msgstr "Bau starten um Teile zuzuweisen" -#: build/models.py:518 +#: build/models.py:571 msgid "Stock Item to allocate to build" msgstr "Lagerobjekt dem Bau zuweisen" -#: build/models.py:531 +#: build/models.py:584 msgid "Stock quantity to allocate to build" msgstr "Lagerobjekt-Anzahl dem Bau zuweisen" @@ -445,20 +494,20 @@ msgstr "Zuweisung aufheben" msgid "New Stock Item" msgstr "Neues Lagerobjekt" -#: build/templates/build/allocate.html:88 stock/views.py:1428 +#: build/templates/build/allocate.html:88 stock/views.py:1459 msgid "Create new Stock Item" msgstr "Neues Lagerobjekt hinzufügen" #: build/templates/build/allocate.html:170 #: order/templates/order/sales_order_detail.html:68 #: order/templates/order/sales_order_detail.html:150 stock/models.py:375 -#: stock/templates/stock/item_base.html:156 +#: stock/templates/stock/item_base.html:178 msgid "Serial Number" msgstr "Seriennummer" #: build/templates/build/allocate.html:172 #: build/templates/build/auto_allocate.html:20 -#: build/templates/build/build_base.html:82 +#: build/templates/build/build_base.html:83 #: build/templates/build/detail.html:27 #: company/templates/company/supplier_part_pricing.html:71 #: order/templates/order/order_wizard/select_parts.html:32 @@ -470,16 +519,16 @@ msgstr "Seriennummer" #: part/templates/part/sale_prices.html:80 stock/forms.py:297 #: stock/templates/stock/item_base.html:26 #: stock/templates/stock/item_base.html:32 -#: stock/templates/stock/item_base.html:162 +#: stock/templates/stock/item_base.html:184 #: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.html:338 -#: templates/js/bom.html:162 templates/js/build.html:58 +#: templates/js/bom.html:162 templates/js/build.html:72 #: templates/js/stock.html:690 templates/js/stock.html:905 msgid "Quantity" msgstr "Anzahl" #: build/templates/build/allocate.html:186 #: build/templates/build/auto_allocate.html:21 stock/forms.py:336 -#: stock/templates/stock/item_base.html:198 +#: stock/templates/stock/item_base.html:220 #: stock/templates/stock/stock_adjust.html:17 #: templates/InvenTree/search.html:183 templates/js/barcode.html:337 #: templates/js/stock.html:518 @@ -487,12 +536,12 @@ msgid "Location" msgstr "Standort" #: build/templates/build/allocate.html:210 -#: order/templates/order/sales_order_detail.html:92 templates/js/build.html:130 +#: order/templates/order/sales_order_detail.html:92 templates/js/build.html:144 msgid "Edit stock allocation" msgstr "Lagerobjekt-Standort bearbeiten" #: build/templates/build/allocate.html:211 -#: order/templates/order/sales_order_detail.html:93 templates/js/build.html:131 +#: order/templates/order/sales_order_detail.html:93 templates/js/build.html:145 msgid "Delete stock allocation" msgstr "Zuweisung löschen" @@ -500,26 +549,6 @@ msgstr "Zuweisung löschen" msgid "No BOM items found" msgstr "Keine BOM-Einträge gefunden" -#: build/templates/build/allocate.html:337 -#: company/templates/company/supplier_part_base.html:53 -#: company/templates/company/supplier_part_detail.html:27 -#: order/templates/order/purchase_order_detail.html:159 -#: part/templates/part/detail.html:51 part/templates/part/set_category.html:14 -#: templates/InvenTree/search.html:147 templates/js/bom.html:147 -#: templates/js/company.html:56 templates/js/order.html:159 -#: templates/js/order.html:234 templates/js/part.html:120 -#: templates/js/part.html:203 templates/js/part.html:345 -#: templates/js/part.html:526 templates/js/stock.html:444 -#: templates/js/stock.html:671 -msgid "Description" -msgstr "Beschreibung" - -#: build/templates/build/allocate.html:342 -#: order/templates/order/purchase_order_detail.html:172 -#: templates/js/bom.html:154 -msgid "Reference" -msgstr "Referenz" - #: build/templates/build/allocate.html:347 part/models.py:1401 #: templates/js/part.html:530 templates/js/table_filters.html:121 msgid "Required" @@ -570,85 +599,81 @@ msgstr "Keine Lagerobjekt gefunden, die diesem Bau zugewiesen werden können" msgid "Stock items will have to be manually allocated" msgstr "Lagerobjekt wurde zugewiesen" -#: build/templates/build/build_base.html:8 -#: build/templates/build/build_base.html:34 -#: build/templates/build/complete.html:6 -#: stock/templates/stock/item_base.html:223 templates/js/build.html:39 -#: templates/navbar.html:25 -msgid "Build" -msgstr "Bau" - #: build/templates/build/build_base.html:14 -msgid "This build is allocated to Sales Order" +#, fuzzy +#| msgid "This build is allocated to Sales Order" +msgid "This Build Order is allocated to Sales Order" msgstr "Dieser Bau ist der Bestellung zugeordnet" #: build/templates/build/build_base.html:19 -msgid "This build is a child of Build" +#, fuzzy +#| msgid "This build is a child of Build" +msgid "This Build Order is a child of Build Order" msgstr "Dieser Bau ist Kind von Bau" -#: build/templates/build/build_base.html:39 +#: build/templates/build/build_base.html:37 #: company/templates/company/company_base.html:27 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 +#: order/templates/order/order_base.html:26 +#: order/templates/order/sales_order_base.html:35 #: part/templates/part/category.html:13 part/templates/part/part_base.html:32 -#: stock/templates/stock/item_base.html:69 +#: stock/templates/stock/item_base.html:76 #: stock/templates/stock/location.html:12 #, fuzzy #| msgid "Admin" msgid "Admin view" msgstr "Admin" -#: build/templates/build/build_base.html:45 +#: build/templates/build/build_base.html:46 #, fuzzy #| msgid "Edited build" msgid "Edit Build" msgstr "Bau bearbeitet" -#: build/templates/build/build_base.html:49 build/views.py:190 +#: build/templates/build/build_base.html:50 build/views.py:190 msgid "Complete Build" msgstr "Bau fertigstellen" -#: build/templates/build/build_base.html:52 build/views.py:58 +#: build/templates/build/build_base.html:53 build/views.py:58 msgid "Cancel Build" msgstr "Bau abbrechen" -#: build/templates/build/build_base.html:58 build/views.py:454 +#: build/templates/build/build_base.html:59 build/views.py:456 msgid "Delete Build" msgstr "Bau entfernt" -#: build/templates/build/build_base.html:68 build/templates/build/detail.html:9 +#: build/templates/build/build_base.html:69 build/templates/build/detail.html:9 msgid "Build Details" msgstr "Bau-Status" -#: build/templates/build/build_base.html:87 +#: build/templates/build/build_base.html:88 #: build/templates/build/detail.html:42 #: order/templates/order/receive_parts.html:24 -#: stock/templates/stock/item_base.html:276 templates/InvenTree/search.html:175 -#: templates/js/barcode.html:42 templates/js/build.html:63 +#: stock/templates/stock/item_base.html:298 templates/InvenTree/search.html:175 +#: templates/js/barcode.html:42 templates/js/build.html:77 #: templates/js/order.html:164 templates/js/order.html:239 #: templates/js/stock.html:505 templates/js/stock.html:913 msgid "Status" msgstr "Status" -#: build/templates/build/build_base.html:100 order/models.py:499 +#: build/templates/build/build_base.html:101 order/models.py:499 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:33 #: order/templates/order/sales_order_notes.html:10 #: order/templates/order/sales_order_ship.html:25 #: part/templates/part/allocation.html:27 -#: stock/templates/stock/item_base.html:186 templates/js/order.html:213 +#: stock/templates/stock/item_base.html:208 templates/js/order.html:213 msgid "Sales Order" msgstr "Bestellung" -#: build/templates/build/build_base.html:106 +#: build/templates/build/build_base.html:107 msgid "BOM Price" msgstr "Stücklistenpreis" -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:112 msgid "BOM pricing is incomplete" msgstr "Stücklistenbepreisung ist unvollständig" -#: build/templates/build/build_base.html:114 +#: build/templates/build/build_base.html:115 msgid "No pricing information" msgstr "Keine Preisinformation" @@ -656,6 +681,12 @@ msgstr "Keine Preisinformation" msgid "Build Outputs" msgstr "Bau-Ausgabe" +#: build/templates/build/complete.html:6 +#: stock/templates/stock/item_base.html:245 templates/js/build.html:40 +#: templates/navbar.html:25 +msgid "Build" +msgstr "Bau" + #: build/templates/build/complete.html:10 msgid "Build order allocation is complete" msgstr "Bau-Zuweisung ist vollständig" @@ -705,15 +736,15 @@ msgid "Stock can be taken from any available location." msgstr "Bestand kann jedem verfügbaren Lagerort entnommen werden." #: build/templates/build/detail.html:48 -#: stock/templates/stock/item_base.html:216 templates/js/stock.html:513 +#: stock/templates/stock/item_base.html:238 templates/js/stock.html:513 #: templates/js/stock.html:920 templates/js/table_filters.html:34 #: templates/js/table_filters.html:100 msgid "Batch" msgstr "Los" #: build/templates/build/detail.html:61 -#: order/templates/order/order_base.html:100 -#: order/templates/order/sales_order_base.html:99 templates/js/build.html:71 +#: order/templates/order/order_base.html:98 +#: order/templates/order/sales_order_base.html:100 templates/js/build.html:85 msgid "Created" msgstr "Erstellt" @@ -729,17 +760,11 @@ msgstr "Ja" msgid "No" msgstr "Nein" -#: build/templates/build/detail.html:80 templates/js/build.html:76 +#: build/templates/build/detail.html:80 templates/js/build.html:90 msgid "Completed" msgstr "Fertig" -#: build/templates/build/index.html:6 build/templates/build/index.html:14 -#: order/templates/order/so_builds.html:11 order/templates/order/so_tabs.html:9 -#: part/templates/part/tabs.html:31 users/models.py:30 -msgid "Build Orders" -msgstr "Bauaufträge" - -#: build/templates/build/index.html:24 +#: build/templates/build/index.html:24 build/views.py:403 msgid "New Build Order" msgstr "Neuer Bauauftrag" @@ -799,7 +824,7 @@ msgstr "Lagerbestandszuordnung bestätigen" msgid "Check the confirmation box at the bottom of the list" msgstr "Bestätigunsbox am Ende der Liste bestätigen" -#: build/views.py:152 build/views.py:465 +#: build/views.py:152 build/views.py:467 msgid "Unallocate Stock" msgstr "Zuweisung aufheben" @@ -807,7 +832,7 @@ msgstr "Zuweisung aufheben" msgid "Confirm unallocation of build stock" msgstr "Zuweisungsaufhebung bestätigen" -#: build/views.py:167 stock/views.py:405 +#: build/views.py:167 stock/views.py:421 msgid "Check the confirmation box" msgstr "Bestätigungsbox bestätigen" @@ -819,7 +844,7 @@ msgstr "Baufertigstellung bestätigen" msgid "Invalid location selected" msgstr "Ungültige Ortsauswahl" -#: build/views.py:302 stock/views.py:1621 +#: build/views.py:302 stock/views.py:1653 #, python-brace-format msgid "The following serial numbers already exist: ({sn})" msgstr "Die folgende Seriennummer existiert bereits: ({sn})" @@ -828,77 +853,69 @@ msgstr "Die folgende Seriennummer existiert bereits: ({sn})" msgid "Build marked as COMPLETE" msgstr "Bau als FERTIG markiert" -#: build/views.py:403 -msgid "Start new Build" -msgstr "Neuen Bau beginnen" - -#: build/views.py:429 +#: build/views.py:431 msgid "Created new build" msgstr "Neuen Bau angelegt" -#: build/views.py:439 +#: build/views.py:441 msgid "Edit Build Details" msgstr "Baudetails bearbeiten" -#: build/views.py:445 +#: build/views.py:447 msgid "Edited build" msgstr "Bau bearbeitet" -#: build/views.py:471 +#: build/views.py:473 msgid "Removed parts from build allocation" msgstr "Teile von Bauzuordnung entfernt" -#: build/views.py:481 +#: build/views.py:483 msgid "Allocate new Part" msgstr "Neues Teil zuordnen" -#: build/views.py:635 +#: build/views.py:637 msgid "Edit Stock Allocation" msgstr "Teilzuordnung bearbeiten" -#: build/views.py:640 +#: build/views.py:642 msgid "Updated Build Item" msgstr "Bauobjekt aktualisiert" -#: common/models.py:75 +#: common/models.py:107 msgid "Settings key (must be unique - case insensitive" msgstr "" "Einstellungs-Schlüssel (muss einzigartig sein, Groß-/ Kleinschreibung wird " "nicht beachtet)" -#: common/models.py:77 +#: common/models.py:109 msgid "Settings value" msgstr "Einstellungs-Wert" -#: common/models.py:79 -msgid "Settings description" -msgstr "Einstellungs-Beschreibung" - -#: common/models.py:92 +#: common/models.py:122 msgid "Key string must be unique" msgstr "Schlüsseltext muss eindeutig sein" -#: common/models.py:113 +#: common/models.py:143 msgid "Currency Symbol e.g. $" msgstr "Währungs-Symbol (z.B. €)" -#: common/models.py:115 +#: common/models.py:145 msgid "Currency Suffix e.g. AUD" msgstr "Währungs-Suffix (z.B. EUR)" -#: common/models.py:117 +#: common/models.py:147 msgid "Currency Description" msgstr "Währungs-Beschreibung" -#: common/models.py:119 +#: common/models.py:149 msgid "Currency Value" msgstr "Währungs-Wert" -#: common/models.py:121 +#: common/models.py:151 msgid "Use this currency as the base currency" msgstr "Benutze diese Währung als Basis-Währung" -#: common/models.py:204 +#: common/models.py:234 #, fuzzy #| msgid "Default Location" msgid "Default" @@ -916,6 +933,12 @@ msgstr "Währung bearbeiten" msgid "Delete Currency" msgstr "Währung entfernen" +#: common/views.py:47 +#, fuzzy +#| msgid "Settings" +msgid "Change Setting" +msgstr "Einstellungen" + #: company/models.py:86 company/models.py:87 msgid "Company name" msgstr "Firmenname" @@ -990,7 +1013,7 @@ msgid "Does this company manufacture parts?" msgstr "Produziert diese Firma Teile?" #: company/models.py:279 stock/models.py:335 -#: stock/templates/stock/item_base.html:148 +#: stock/templates/stock/item_base.html:164 msgid "Base Part" msgstr "Basisteil" @@ -1061,16 +1084,16 @@ msgstr "Hersteller" #: company/templates/company/detail.html:21 #: company/templates/company/supplier_part_base.html:66 #: company/templates/company/supplier_part_detail.html:21 -#: order/templates/order/order_base.html:81 +#: order/templates/order/order_base.html:79 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:170 -#: stock/templates/stock/item_base.html:251 templates/js/company.html:48 +#: stock/templates/stock/item_base.html:273 templates/js/company.html:48 #: templates/js/company.html:162 templates/js/order.html:146 msgid "Supplier" msgstr "Zulieferer" #: company/templates/company/detail.html:26 -#: order/templates/order/sales_order_base.html:80 stock/models.py:370 -#: stock/models.py:371 stock/templates/stock/item_base.html:169 +#: order/templates/order/sales_order_base.html:81 stock/models.py:370 +#: stock/models.py:371 stock/templates/stock/item_base.html:191 #: templates/js/company.html:40 templates/js/order.html:221 msgid "Customer" msgstr "Kunde" @@ -1170,7 +1193,8 @@ msgstr "" #: order/templates/order/purchase_orders.html:7 #: order/templates/order/purchase_orders.html:12 #: part/templates/part/orders.html:9 part/templates/part/tabs.html:48 -#: templates/navbar.html:33 users/models.py:31 +#: templates/InvenTree/settings/tabs.html:27 templates/navbar.html:33 +#: users/models.py:31 msgid "Purchase Orders" msgstr "Bestellungen" @@ -1189,7 +1213,8 @@ msgstr "Neue Bestellung" #: order/templates/order/sales_orders.html:7 #: order/templates/order/sales_orders.html:12 #: part/templates/part/sales_orders.html:9 part/templates/part/tabs.html:56 -#: templates/navbar.html:42 users/models.py:32 +#: templates/InvenTree/settings/tabs.html:30 templates/navbar.html:42 +#: users/models.py:32 msgid "Sales Orders" msgstr "Bestellungen" @@ -1205,7 +1230,7 @@ msgstr "Neuer Auftrag" #: company/templates/company/supplier_part_base.html:6 #: company/templates/company/supplier_part_base.html:19 stock/models.py:344 -#: stock/templates/stock/item_base.html:256 templates/js/company.html:178 +#: stock/templates/stock/item_base.html:278 templates/js/company.html:178 msgid "Supplier Part" msgstr "Zulieferer-Teil" @@ -1248,11 +1273,11 @@ msgstr "MPN" msgid "Note" msgstr "Notiz" -#: company/templates/company/supplier_part_orders.html:11 +#: company/templates/company/supplier_part_orders.html:9 msgid "Supplier Part Orders" msgstr "Zuliefererbestellungen" -#: company/templates/company/supplier_part_pricing.html:12 +#: company/templates/company/supplier_part_pricing.html:10 msgid "Pricing Information" msgstr "Preisinformationen ansehen" @@ -1287,7 +1312,7 @@ msgstr "Preisstaffel bearbeiten" msgid "Delete price break" msgstr "Preisstaffel löschen" -#: company/templates/company/supplier_part_stock.html:11 +#: company/templates/company/supplier_part_stock.html:9 msgid "Supplier Part Stock" msgstr "Zuliefererbestand" @@ -1298,8 +1323,9 @@ msgstr "Bepreisung" #: company/templates/company/supplier_part_tabs.html:8 #: company/templates/company/tabs.html:12 part/templates/part/tabs.html:18 #: stock/templates/stock/location.html:17 templates/InvenTree/search.html:155 -#: templates/js/part.html:124 templates/js/part.html:372 -#: templates/js/stock.html:452 templates/navbar.html:22 users/models.py:29 +#: templates/InvenTree/settings/tabs.html:21 templates/js/part.html:124 +#: templates/js/part.html:372 templates/js/stock.html:452 +#: templates/navbar.html:22 users/models.py:29 msgid "Stock" msgstr "Lagerbestand" @@ -1310,7 +1336,8 @@ msgstr "Bestellungen" #: company/templates/company/tabs.html:9 #: order/templates/order/receive_parts.html:14 part/models.py:294 #: part/templates/part/cat_link.html:7 part/templates/part/category.html:94 -#: part/templates/part/category_tabs.html:6 templates/navbar.html:19 +#: part/templates/part/category_tabs.html:6 +#: templates/InvenTree/settings/tabs.html:18 templates/navbar.html:19 #: templates/stats.html:8 templates/stats.html:17 users/models.py:28 msgid "Parts" msgstr "Teile" @@ -1430,20 +1457,20 @@ msgstr "" msgid "Enabled" msgstr "" -#: order/forms.py:24 order/templates/order/order_base.html:40 +#: order/forms.py:24 order/templates/order/order_base.html:39 msgid "Place order" msgstr "Bestellung aufgeben" -#: order/forms.py:35 order/templates/order/order_base.html:47 +#: order/forms.py:35 order/templates/order/order_base.html:46 msgid "Mark order as complete" msgstr "Bestellung als vollständig markieren" -#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:52 -#: order/templates/order/sales_order_base.html:52 +#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:51 +#: order/templates/order/sales_order_base.html:53 msgid "Cancel order" msgstr "Bestellung stornieren" -#: order/forms.py:68 order/templates/order/sales_order_base.html:49 +#: order/forms.py:68 order/templates/order/sales_order_base.html:50 msgid "Ship order" msgstr "Bestellung versenden" @@ -1453,9 +1480,9 @@ msgstr "Teile in diesen Ort empfangen" #: order/forms.py:99 #, fuzzy -#| msgid "Select a purchase order for" -msgid "Enter purchase order number" -msgstr "Bestellung auswählen für" +#| msgid "Order reference" +msgid "Purchase Order reference" +msgstr "Bestell-Referenz" #: order/forms.py:126 #, fuzzy @@ -1541,8 +1568,8 @@ msgid "Line item notes" msgstr "Position - Notizen" #: order/models.py:466 order/templates/order/order_base.html:9 -#: order/templates/order/order_base.html:23 -#: stock/templates/stock/item_base.html:230 templates/js/order.html:138 +#: order/templates/order/order_base.html:24 +#: stock/templates/stock/item_base.html:252 templates/js/order.html:138 msgid "Purchase Order" msgstr "Kaufvertrag" @@ -1584,48 +1611,48 @@ msgstr "Zuordnungsanzahl eingeben" msgid "Are you sure you want to delete this attachment?" msgstr "Sind Sie sicher, dass Sie diesen Anhang löschen wollen?" -#: order/templates/order/order_base.html:36 +#: order/templates/order/order_base.html:35 #, fuzzy #| msgid "Edited company information" msgid "Edit order information" msgstr "Firmeninformation bearbeitet" -#: order/templates/order/order_base.html:44 +#: order/templates/order/order_base.html:43 #, fuzzy #| msgid "Receive line item" msgid "Receive items" msgstr "Position empfangen" -#: order/templates/order/order_base.html:57 +#: order/templates/order/order_base.html:56 msgid "Export order to file" msgstr "" -#: order/templates/order/order_base.html:66 +#: order/templates/order/order_base.html:64 msgid "Purchase Order Details" msgstr "Bestelldetails" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:70 +#: order/templates/order/order_base.html:69 +#: order/templates/order/sales_order_base.html:71 msgid "Order Reference" msgstr "Bestellreferenz" -#: order/templates/order/order_base.html:76 -#: order/templates/order/sales_order_base.html:75 +#: order/templates/order/order_base.html:74 +#: order/templates/order/sales_order_base.html:76 msgid "Order Status" msgstr "Bestellstatus" -#: order/templates/order/order_base.html:87 templates/js/order.html:153 +#: order/templates/order/order_base.html:85 templates/js/order.html:153 msgid "Supplier Reference" msgstr "Zuliefererreferenz" -#: order/templates/order/order_base.html:106 +#: order/templates/order/order_base.html:104 msgid "Issued" msgstr "Aufgegeben" -#: order/templates/order/order_base.html:113 +#: order/templates/order/order_base.html:111 #: order/templates/order/purchase_order_detail.html:182 #: order/templates/order/receive_parts.html:22 -#: order/templates/order/sales_order_base.html:112 +#: order/templates/order/sales_order_base.html:113 msgid "Received" msgstr "Empfangen" @@ -1671,8 +1698,7 @@ msgid "Select existing purchase orders, or create new orders." msgstr "Bestellungen auswählen oder anlegen." #: order/templates/order/order_wizard/select_pos.html:31 -#: order/templates/order/po_tabs.html:5 templates/js/order.html:177 -#: templates/js/order.html:257 +#: templates/js/order.html:177 templates/js/order.html:257 msgid "Items" msgstr "Positionen" @@ -1688,7 +1714,20 @@ msgstr "Bestellung auswählen für" msgid "Purchase Order Attachments" msgstr "Bestellanhänge" -#: order/templates/order/po_tabs.html:8 order/templates/order/so_tabs.html:16 +#: order/templates/order/po_received_items.html:11 +#: order/templates/order/po_tabs.html:8 +#, fuzzy +#| msgid "Receive line item" +msgid "Received Items" +msgstr "Position empfangen" + +#: order/templates/order/po_tabs.html:5 +#, fuzzy +#| msgid "Add Line Item" +msgid "Line Items" +msgstr "Position hinzufügen" + +#: order/templates/order/po_tabs.html:11 order/templates/order/so_tabs.html:16 #: part/templates/part/tabs.html:67 stock/templates/stock/tabs.html:32 msgid "Attachments" msgstr "Anhänge" @@ -1712,7 +1751,7 @@ msgstr "Neuer Standort" #: order/templates/order/purchase_order_detail.html:39 #: order/templates/order/purchase_order_detail.html:119 -#: stock/templates/stock/location.html:21 +#: stock/templates/stock/location.html:22 msgid "Create new stock location" msgstr "Neuen Lagerort anlegen" @@ -1765,15 +1804,15 @@ msgstr "" msgid "This SalesOrder has not been fully allocated" msgstr "Dieser Auftrag ist nicht vollständig zugeordnet" -#: order/templates/order/sales_order_base.html:57 +#: order/templates/order/sales_order_base.html:58 msgid "Packing List" msgstr "Packliste" -#: order/templates/order/sales_order_base.html:65 +#: order/templates/order/sales_order_base.html:66 msgid "Sales Order Details" msgstr "Auftragsdetails" -#: order/templates/order/sales_order_base.html:86 templates/js/order.html:228 +#: order/templates/order/sales_order_base.html:87 templates/js/order.html:228 msgid "Customer Reference" msgstr "Kundenreferenz" @@ -1845,7 +1884,7 @@ msgstr "Bestellungspositionen" msgid "Add Purchase Order Attachment" msgstr "Bestellanhang hinzufügen" -#: order/views.py:109 order/views.py:157 part/views.py:92 stock/views.py:167 +#: order/views.py:109 order/views.py:157 part/views.py:92 stock/views.py:175 msgid "Added attachment" msgstr "Anhang hinzugefügt" @@ -1865,7 +1904,7 @@ msgstr "Anhang aktualisiert" msgid "Delete Attachment" msgstr "Anhang löschen" -#: order/views.py:233 order/views.py:248 stock/views.py:223 +#: order/views.py:233 order/views.py:248 stock/views.py:233 msgid "Deleted attachment" msgstr "Anhang gelöscht" @@ -2389,17 +2428,12 @@ msgstr "Bestellung" #: part/templates/part/allocation.html:45 #: stock/templates/stock/item_base.html:8 #: stock/templates/stock/item_base.html:58 -#: stock/templates/stock/item_base.html:238 -#: stock/templates/stock/stock_adjust.html:16 templates/js/build.html:112 +#: stock/templates/stock/item_base.html:260 +#: stock/templates/stock/stock_adjust.html:16 templates/js/build.html:126 #: templates/js/stock.html:660 templates/js/stock.html:896 msgid "Stock Item" msgstr "Lagerobjekt" -#: part/templates/part/allocation.html:20 -#: stock/templates/stock/item_base.html:192 -msgid "Build Order" -msgstr "Bauauftrag" - #: part/templates/part/attachments.html:8 msgid "Part Attachments" msgstr "Anhänge" @@ -2638,7 +2672,7 @@ msgstr "Teilkategorie anlegen" msgid "Create new Part Category" msgstr "Teilkategorie anlegen" -#: part/templates/part/category.html:214 stock/views.py:1314 +#: part/templates/part/category.html:214 stock/views.py:1343 msgid "Create new Stock Location" msgstr "Neuen Lager-Standort erstellen" @@ -2823,7 +2857,7 @@ msgstr "Teilparameter" msgid "Add new parameter" msgstr "Parameter hinzufügen" -#: part/templates/part/params.html:14 templates/InvenTree/settings/part.html:12 +#: part/templates/part/params.html:14 templates/InvenTree/settings/part.html:17 msgid "New Parameter" msgstr "Neuer Parameter" @@ -2869,24 +2903,24 @@ msgid "Star this part" msgstr "Teil favorisieren" #: part/templates/part/part_base.html:49 -#: stock/templates/stock/item_base.html:81 -#: stock/templates/stock/location.html:27 +#: stock/templates/stock/item_base.html:88 +#: stock/templates/stock/location.html:29 #, fuzzy #| msgid "Source Location" msgid "Barcode actions" msgstr "Quell-Standort" #: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:83 -#: stock/templates/stock/location.html:29 +#: stock/templates/stock/item_base.html:90 +#: stock/templates/stock/location.html:31 #, fuzzy #| msgid "Part QR Code" msgid "Show QR Code" msgstr "Teil-QR-Code" #: part/templates/part/part_base.html:52 -#: stock/templates/stock/item_base.html:84 -#: stock/templates/stock/location.html:30 +#: stock/templates/stock/item_base.html:91 +#: stock/templates/stock/location.html:32 msgid "Print Label" msgstr "" @@ -3039,7 +3073,7 @@ msgstr "Stückliste" msgid "Used In" msgstr "Benutzt in" -#: part/templates/part/tabs.html:61 stock/templates/stock/item_base.html:282 +#: part/templates/part/tabs.html:61 stock/templates/stock/item_base.html:304 msgid "Tests" msgstr "" @@ -3077,7 +3111,7 @@ msgstr "Varianten" msgid "Add part attachment" msgstr "Teilanhang hinzufügen" -#: part/views.py:131 templates/attachment_table.html:30 +#: part/views.py:131 templates/attachment_table.html:32 msgid "Edit attachment" msgstr "Anhang bearbeiten" @@ -3360,7 +3394,7 @@ msgstr "Ziel-Lagerbestand" msgid "Add note (required)" msgstr "" -#: stock/forms.py:370 stock/views.py:895 stock/views.py:1092 +#: stock/forms.py:370 stock/views.py:921 stock/views.py:1119 msgid "Confirm stock adjustment" msgstr "Bestands-Anpassung bestätigen" @@ -3430,7 +3464,7 @@ msgstr "Lagerort" msgid "Where is this stock item located?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: stock/models.py:358 stock/templates/stock/item_base.html:177 +#: stock/models.py:358 stock/templates/stock/item_base.html:199 msgid "Installed In" msgstr "Installiert in" @@ -3678,130 +3712,132 @@ msgstr "" "Dieses Lagerobjekt wird automatisch gelöscht wenn der Lagerbestand " "aufgebraucht ist." -#: stock/templates/stock/item_base.html:86 templates/js/barcode.html:283 +#: stock/templates/stock/item_base.html:94 templates/js/barcode.html:283 #: templates/js/barcode.html:288 msgid "Unlink Barcode" msgstr "" -#: stock/templates/stock/item_base.html:88 +#: stock/templates/stock/item_base.html:96 msgid "Link Barcode" msgstr "" -#: stock/templates/stock/item_base.html:94 +#: stock/templates/stock/item_base.html:104 #, fuzzy #| msgid "Confirm stock adjustment" msgid "Stock adjustment actions" msgstr "Bestands-Anpassung bestätigen" -#: stock/templates/stock/item_base.html:98 -#: stock/templates/stock/location.html:38 templates/stock_table.html:19 +#: stock/templates/stock/item_base.html:108 +#: stock/templates/stock/location.html:41 templates/stock_table.html:19 msgid "Count stock" msgstr "Bestand zählen" -#: stock/templates/stock/item_base.html:99 templates/stock_table.html:17 +#: stock/templates/stock/item_base.html:109 templates/stock_table.html:17 msgid "Add stock" msgstr "Bestand hinzufügen" -#: stock/templates/stock/item_base.html:100 templates/stock_table.html:18 +#: stock/templates/stock/item_base.html:110 templates/stock_table.html:18 msgid "Remove stock" msgstr "Bestand entfernen" -#: stock/templates/stock/item_base.html:102 +#: stock/templates/stock/item_base.html:112 #, fuzzy #| msgid "Order stock" msgid "Transfer stock" msgstr "Bestand bestellen" -#: stock/templates/stock/item_base.html:104 +#: stock/templates/stock/item_base.html:114 #, fuzzy #| msgid "Serialize Stock" msgid "Serialize stock" msgstr "Lagerbestand erfassen" -#: stock/templates/stock/item_base.html:108 +#: stock/templates/stock/item_base.html:118 #, fuzzy #| msgid "Item assigned to customer?" msgid "Assign to customer" msgstr "Ist dieses Objekt einem Kunden zugeteilt?" -#: stock/templates/stock/item_base.html:111 +#: stock/templates/stock/item_base.html:121 #, fuzzy #| msgid "Count stock" msgid "Return to stock" msgstr "Bestand zählen" -#: stock/templates/stock/item_base.html:115 templates/js/stock.html:933 +#: stock/templates/stock/item_base.html:125 templates/js/stock.html:933 #, fuzzy #| msgid "Installed in Stock Item" msgid "Uninstall stock item" msgstr "In Lagerobjekt installiert" -#: stock/templates/stock/item_base.html:115 +#: stock/templates/stock/item_base.html:125 msgid "Uninstall" msgstr "" -#: stock/templates/stock/item_base.html:122 -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/item_base.html:134 +#: stock/templates/stock/location.html:38 #, fuzzy #| msgid "Stock Locations" msgid "Stock actions" msgstr "Lagerobjekt-Standorte" -#: stock/templates/stock/item_base.html:126 +#: stock/templates/stock/item_base.html:137 #, fuzzy #| msgid "Count stock items" msgid "Convert to variant" msgstr "Lagerobjekte zählen" -#: stock/templates/stock/item_base.html:128 +#: stock/templates/stock/item_base.html:140 #, fuzzy #| msgid "Count stock items" msgid "Duplicate stock item" msgstr "Lagerobjekte zählen" -#: stock/templates/stock/item_base.html:129 +#: stock/templates/stock/item_base.html:142 #, fuzzy #| msgid "Edit Stock Item" msgid "Edit stock item" msgstr "Lagerobjekt bearbeiten" -#: stock/templates/stock/item_base.html:131 +#: stock/templates/stock/item_base.html:145 #, fuzzy #| msgid "Delete Stock Item" msgid "Delete stock item" msgstr "Lagerobjekt löschen" -#: stock/templates/stock/item_base.html:135 +#: stock/templates/stock/item_base.html:151 msgid "Generate test report" msgstr "" -#: stock/templates/stock/item_base.html:143 +#: stock/templates/stock/item_base.html:159 msgid "Stock Item Details" msgstr "Lagerbestands-Details" -#: stock/templates/stock/item_base.html:202 +#: stock/templates/stock/item_base.html:224 #, fuzzy #| msgid "No stock location set" msgid "No location set" msgstr "Kein Lagerort gesetzt" -#: stock/templates/stock/item_base.html:209 -msgid "Unique Identifier" +#: stock/templates/stock/item_base.html:231 +#, fuzzy +#| msgid "Unique Identifier" +msgid "Barcode Identifier" msgstr "Eindeutiger Bezeichner" -#: stock/templates/stock/item_base.html:237 +#: stock/templates/stock/item_base.html:259 msgid "Parent Item" msgstr "Elternposition" -#: stock/templates/stock/item_base.html:262 +#: stock/templates/stock/item_base.html:284 msgid "Last Updated" msgstr "Zuletzt aktualisiert" -#: stock/templates/stock/item_base.html:267 +#: stock/templates/stock/item_base.html:289 msgid "Last Stocktake" msgstr "Letzte Inventur" -#: stock/templates/stock/item_base.html:271 +#: stock/templates/stock/item_base.html:293 msgid "No stocktake performed" msgstr "Keine Inventur ausgeführt" @@ -3877,58 +3913,58 @@ msgstr "" msgid "All stock items" msgstr "Alle Lagerobjekte" -#: stock/templates/stock/location.html:31 +#: stock/templates/stock/location.html:33 #, fuzzy #| msgid "Child Stock Items" msgid "Check-in Items" msgstr "Kind-Lagerobjekte" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 #, fuzzy #| msgid "Location Description" msgid "Location actions" msgstr "Standort-Beschreibung" -#: stock/templates/stock/location.html:44 +#: stock/templates/stock/location.html:47 #, fuzzy #| msgid "Edit stock location" msgid "Edit location" msgstr "Lagerort bearbeiten" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:49 #, fuzzy #| msgid "Delete stock location" msgid "Delete location" msgstr "Lagerort löschen" -#: stock/templates/stock/location.html:53 +#: stock/templates/stock/location.html:59 msgid "Location Details" msgstr "Standort-Details" -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:64 msgid "Location Path" msgstr "Standord-Pfad" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Location Description" msgstr "Standort-Beschreibung" -#: stock/templates/stock/location.html:68 +#: stock/templates/stock/location.html:74 msgid "Sublocations" msgstr "Sub-Standorte" -#: stock/templates/stock/location.html:73 -#: stock/templates/stock/location.html:88 +#: stock/templates/stock/location.html:79 +#: stock/templates/stock/location.html:94 #: templates/InvenTree/search_stock_items.html:6 templates/stats.html:21 #: templates/stats.html:30 msgid "Stock Items" msgstr "Lagerobjekte" -#: stock/templates/stock/location.html:78 +#: stock/templates/stock/location.html:84 msgid "Stock Details" msgstr "Objekt-Details" -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:89 #: templates/InvenTree/search_stock_location.html:6 templates/stats.html:25 msgid "Stock Locations" msgstr "Lagerobjekt-Standorte" @@ -3945,7 +3981,7 @@ msgstr "Sind Sie sicher, dass Sie diesen Anhang löschen wollen?" msgid "The following stock items will be uninstalled" msgstr "Die folgenden Objekte werden erstellt" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1287 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1315 #, fuzzy #| msgid "Count Stock Items" msgid "Convert Stock Item" @@ -3983,252 +4019,252 @@ msgstr "Kinder" msgid "Installed Items" msgstr "Installiert in" -#: stock/views.py:114 +#: stock/views.py:119 msgid "Edit Stock Location" msgstr "Lagerobjekt-Standort bearbeiten" -#: stock/views.py:138 +#: stock/views.py:144 msgid "Stock Location QR code" msgstr "QR-Code für diesen Standort" -#: stock/views.py:156 +#: stock/views.py:163 #, fuzzy #| msgid "Add Attachment" msgid "Add Stock Item Attachment" msgstr "Anhang hinzufügen" -#: stock/views.py:201 +#: stock/views.py:209 #, fuzzy #| msgid "Edit Stock Item" msgid "Edit Stock Item Attachment" msgstr "Lagerobjekt bearbeiten" -#: stock/views.py:217 +#: stock/views.py:226 #, fuzzy #| msgid "Delete Part Attachment" msgid "Delete Stock Item Attachment" msgstr "Teilanhang löschen" -#: stock/views.py:233 +#: stock/views.py:243 #, fuzzy #| msgid "Item assigned to customer?" msgid "Assign to Customer" msgstr "Ist dieses Objekt einem Kunden zugeteilt?" -#: stock/views.py:270 +#: stock/views.py:281 #, fuzzy #| msgid "Part Stock" msgid "Return to Stock" msgstr "Teilbestand" -#: stock/views.py:289 +#: stock/views.py:301 #, fuzzy #| msgid "Include sublocations" msgid "Specify a valid location" msgstr "Unterlagerorte einschließen" -#: stock/views.py:293 +#: stock/views.py:305 msgid "Stock item returned from customer" msgstr "" -#: stock/views.py:305 +#: stock/views.py:317 #, fuzzy #| msgid "Select valid part" msgid "Select Label Template" msgstr "Bitte ein gültiges Teil auswählen" -#: stock/views.py:327 +#: stock/views.py:340 #, fuzzy #| msgid "Select valid part" msgid "Select valid label" msgstr "Bitte ein gültiges Teil auswählen" -#: stock/views.py:389 +#: stock/views.py:404 #, fuzzy #| msgid "Delete Template" msgid "Delete All Test Data" msgstr "Vorlage löschen" -#: stock/views.py:404 +#: stock/views.py:420 #, fuzzy #| msgid "Confirm Part Deletion" msgid "Confirm test data deletion" msgstr "Löschen des Teils bestätigen" -#: stock/views.py:424 +#: stock/views.py:440 msgid "Add Test Result" msgstr "" -#: stock/views.py:461 +#: stock/views.py:478 #, fuzzy #| msgid "Edit Template" msgid "Edit Test Result" msgstr "Vorlage bearbeiten" -#: stock/views.py:478 +#: stock/views.py:496 #, fuzzy #| msgid "Delete Template" msgid "Delete Test Result" msgstr "Vorlage löschen" -#: stock/views.py:489 +#: stock/views.py:508 #, fuzzy #| msgid "Delete Template" msgid "Select Test Report Template" msgstr "Vorlage löschen" -#: stock/views.py:503 +#: stock/views.py:523 #, fuzzy #| msgid "Select valid part" msgid "Select valid template" msgstr "Bitte ein gültiges Teil auswählen" -#: stock/views.py:555 +#: stock/views.py:576 msgid "Stock Export Options" msgstr "Lagerbestandsexportoptionen" -#: stock/views.py:675 +#: stock/views.py:698 msgid "Stock Item QR Code" msgstr "Lagerobjekt-QR-Code" -#: stock/views.py:700 +#: stock/views.py:724 #, fuzzy #| msgid "Installed in Stock Item" msgid "Install Stock Item" msgstr "In Lagerobjekt installiert" -#: stock/views.py:799 +#: stock/views.py:824 #, fuzzy #| msgid "Installed in Stock Item" msgid "Uninstall Stock Items" msgstr "In Lagerobjekt installiert" -#: stock/views.py:906 +#: stock/views.py:932 #, fuzzy #| msgid "Installed in Stock Item" msgid "Uninstalled stock items" msgstr "In Lagerobjekt installiert" -#: stock/views.py:931 +#: stock/views.py:957 msgid "Adjust Stock" msgstr "Lagerbestand anpassen" -#: stock/views.py:1040 +#: stock/views.py:1067 msgid "Move Stock Items" msgstr "Lagerobjekte bewegen" -#: stock/views.py:1041 +#: stock/views.py:1068 msgid "Count Stock Items" msgstr "Lagerobjekte zählen" -#: stock/views.py:1042 +#: stock/views.py:1069 msgid "Remove From Stock" msgstr "Aus Lagerbestand entfernen" -#: stock/views.py:1043 +#: stock/views.py:1070 msgid "Add Stock Items" msgstr "Lagerobjekte hinzufügen" -#: stock/views.py:1044 +#: stock/views.py:1071 msgid "Delete Stock Items" msgstr "Lagerobjekte löschen" -#: stock/views.py:1072 +#: stock/views.py:1099 msgid "Must enter integer value" msgstr "Nur Ganzzahl eingeben" -#: stock/views.py:1077 +#: stock/views.py:1104 msgid "Quantity must be positive" msgstr "Anzahl muss positiv sein" -#: stock/views.py:1084 +#: stock/views.py:1111 #, python-brace-format msgid "Quantity must not exceed {x}" msgstr "Anzahl darf {x} nicht überschreiten" -#: stock/views.py:1163 +#: stock/views.py:1190 #, python-brace-format msgid "Added stock to {n} items" msgstr "Vorrat zu {n} Lagerobjekten hinzugefügt" -#: stock/views.py:1178 +#: stock/views.py:1205 #, python-brace-format msgid "Removed stock from {n} items" msgstr "Vorrat von {n} Lagerobjekten entfernt" -#: stock/views.py:1191 +#: stock/views.py:1218 #, python-brace-format msgid "Counted stock for {n} items" msgstr "Bestand für {n} Objekte erfasst" -#: stock/views.py:1219 +#: stock/views.py:1246 msgid "No items were moved" msgstr "Keine Lagerobjekte wurden bewegt" -#: stock/views.py:1222 +#: stock/views.py:1249 #, python-brace-format msgid "Moved {n} items to {dest}" msgstr "{n} Teile nach {dest} bewegt" -#: stock/views.py:1241 +#: stock/views.py:1268 #, python-brace-format msgid "Deleted {n} stock items" msgstr "{n} Teile im Lager gelöscht" -#: stock/views.py:1253 +#: stock/views.py:1280 msgid "Edit Stock Item" msgstr "Lagerobjekt bearbeiten" -#: stock/views.py:1335 +#: stock/views.py:1365 msgid "Serialize Stock" msgstr "Lagerbestand erfassen" -#: stock/views.py:1527 +#: stock/views.py:1559 #, fuzzy #| msgid "Count stock items" msgid "Duplicate Stock Item" msgstr "Lagerobjekte zählen" -#: stock/views.py:1593 +#: stock/views.py:1625 msgid "Invalid quantity" msgstr "Ungültige Menge" -#: stock/views.py:1596 +#: stock/views.py:1628 #, fuzzy #| msgid "Quantity must be greater than zero" msgid "Quantity cannot be less than zero" msgstr "Anzahl muss größer Null sein" -#: stock/views.py:1600 +#: stock/views.py:1632 msgid "Invalid part selection" msgstr "Ungültige Teileauswahl" -#: stock/views.py:1649 +#: stock/views.py:1681 #, python-brace-format msgid "Created {n} new stock items" msgstr "{n} neue Lagerobjekte erstellt" -#: stock/views.py:1668 stock/views.py:1684 +#: stock/views.py:1700 stock/views.py:1716 msgid "Created new stock item" msgstr "Neues Lagerobjekt erstellt" -#: stock/views.py:1703 +#: stock/views.py:1735 msgid "Delete Stock Location" msgstr "Standort löschen" -#: stock/views.py:1716 +#: stock/views.py:1749 msgid "Delete Stock Item" msgstr "Lagerobjekt löschen" -#: stock/views.py:1727 +#: stock/views.py:1761 msgid "Delete Stock Tracking Entry" msgstr "Lagerbestands-Tracking-Eintrag löschen" -#: stock/views.py:1744 +#: stock/views.py:1780 msgid "Edit Stock Tracking Entry" msgstr "Lagerbestands-Tracking-Eintrag bearbeiten" -#: stock/views.py:1753 +#: stock/views.py:1790 msgid "Add Stock Tracking Entry" msgstr "Lagerbestands-Tracking-Eintrag hinzufügen" @@ -4240,6 +4276,18 @@ msgstr "" 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 "Teilbild nicht gefunden" + +#: templates/404.html:14 +#, fuzzy +#| msgid "Part does not exist" +msgid "The requested page does not exist" +msgstr "Teil existiert nicht" + #: templates/InvenTree/bom_invalid.html:7 msgid "BOM Waiting Validation" msgstr "" @@ -4304,25 +4352,137 @@ msgstr "Kein Lagerort gesetzt" msgid "Searching" msgstr "Suche" +#: templates/InvenTree/settings/build.html:10 +#, fuzzy +#| msgid "Build Orders" +msgid "Build Order Settings" +msgstr "Bauaufträge" + +#: templates/InvenTree/settings/build.html:19 +#, fuzzy +#| msgid "Reference" +msgid "Reference Prefix" +msgstr "Referenz" + +#: templates/InvenTree/settings/build.html:21 +#, fuzzy +#| msgid "Order reference" +msgid "Prefix for Build Order reference" +msgstr "Bestell-Referenz" + +#: templates/InvenTree/settings/build.html:24 +#, fuzzy +#| msgid "Reference" +msgid "Reference Regex" +msgstr "Referenz" + +#: templates/InvenTree/settings/build.html:26 +msgid "Regex validator for Build Order reference" +msgstr "" + +#: templates/InvenTree/settings/currency.html:5 +#, fuzzy +#| msgid "Settings" +msgid "General Settings" +msgstr "Einstellungen" + +#: templates/InvenTree/settings/currency.html:14 +#, fuzzy +#| msgid "Currency Value" +msgid "Currencies" +msgstr "Währungs-Wert" + +#: templates/InvenTree/settings/currency.html:17 +#, fuzzy +#| msgid "Delete Currency" +msgid "New Currency" +msgstr "Währung entfernen" + #: templates/InvenTree/settings/part.html:9 #, fuzzy +#| msgid "Settings" +msgid "Part Settings" +msgstr "Einstellungen" + +#: templates/InvenTree/settings/part.html:14 +#, fuzzy #| msgid "Edit Part Parameter Template" msgid "Part Parameter Templates" msgstr "Teilparametervorlage bearbeiten" -#: templates/InvenTree/settings/part.html:28 +#: templates/InvenTree/settings/part.html:33 msgid "No part parameter templates found" msgstr "Keine Teilparametervorlagen gefunden" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:53 msgid "Edit Template" msgstr "Vorlage bearbeiten" -#: templates/InvenTree/settings/part.html:49 +#: templates/InvenTree/settings/part.html:54 msgid "Delete Template" msgstr "Vorlage löschen" -#: templates/InvenTree/settings/theme.html:25 +#: templates/InvenTree/settings/po.html:9 +#, fuzzy +#| msgid "Purchase Order Details" +msgid "Purchase Order Settings" +msgstr "Bestelldetails" + +#: templates/InvenTree/settings/settings.html:7 +#: templates/InvenTree/settings/settings.html:13 templates/navbar.html:62 +msgid "Settings" +msgstr "Einstellungen" + +#: templates/InvenTree/settings/so.html:9 +#, fuzzy +#| msgid "Sales Order Details" +msgid "Sales Order Settings" +msgstr "Auftragsdetails" + +#: templates/InvenTree/settings/stock.html:9 +#, fuzzy +#| msgid "Stock Locations" +msgid "Stock Settings" +msgstr "Lagerobjekt-Standorte" + +#: templates/InvenTree/settings/tabs.html:3 +#: templates/InvenTree/settings/user.html:10 +#, fuzzy +#| msgid "Settings" +msgid "User Settings" +msgstr "Einstellungen" + +#: templates/InvenTree/settings/tabs.html:6 +msgid "Account" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:9 +msgid "Theme" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:12 +#, fuzzy +#| msgid "InvenTree Version" +msgid "InvenTree Settings" +msgstr "InvenTree-Version" + +#: templates/InvenTree/settings/tabs.html:15 +#, fuzzy +#| msgid "Edit Currency" +msgid "Currency" +msgstr "Währung bearbeiten" + +#: templates/InvenTree/settings/theme.html:10 +#, fuzzy +#| msgid "Settings" +msgid "Theme Settings" +msgstr "Einstellungen" + +#: templates/InvenTree/settings/theme.html:17 +msgid "Color Themes" +msgstr "" + +#: templates/InvenTree/settings/theme.html:29 #, python-format msgid "" "\n" @@ -4332,6 +4492,36 @@ msgid "" "\t" msgstr "" +#: templates/InvenTree/settings/user.html:16 +#, fuzzy +#| msgid "No user information" +msgid "User Information" +msgstr "Keine Benutzerinformation" + +#: templates/InvenTree/settings/user.html:24 +#, fuzzy +#| msgid "User" +msgid "Username" +msgstr "Benutzer" + +#: templates/InvenTree/settings/user.html:28 +#, fuzzy +#| msgid "Instance Name" +msgid "First Name" +msgstr "Instanzname" + +#: templates/InvenTree/settings/user.html:32 +#, fuzzy +#| msgid "Instance Name" +msgid "Last Name" +msgstr "Instanzname" + +#: templates/InvenTree/settings/user.html:36 +#, fuzzy +#| msgid "Address" +msgid "Email Address" +msgstr "Adresse" + #: templates/InvenTree/so_outstanding.html:7 #, fuzzy #| msgid "Destination Sales Order" @@ -4378,23 +4568,23 @@ msgstr "Code auf GitHub ansehen" msgid "Submit Bug Report" msgstr "Fehlerbericht senden" -#: templates/attachment_table.html:5 +#: templates/attachment_table.html:6 msgid "Add Attachment" msgstr "Anhang hinzufügen" -#: templates/attachment_table.html:13 +#: templates/attachment_table.html:15 msgid "File" msgstr "Datei" -#: templates/attachment_table.html:14 +#: templates/attachment_table.html:16 msgid "Comment" msgstr "Kommentar" -#: templates/attachment_table.html:15 +#: templates/attachment_table.html:17 msgid "Uploaded" msgstr "" -#: templates/attachment_table.html:33 +#: templates/attachment_table.html:35 msgid "Delete attachment" msgstr "Anhang löschen" @@ -4511,7 +4701,7 @@ msgstr "Unterbaugruppe öffnen" msgid "Optional" msgstr "Optionen" -#: templates/js/bom.html:188 templates/js/build.html:119 +#: templates/js/bom.html:188 templates/js/build.html:133 msgid "Available" msgstr "verfügbar" @@ -4541,11 +4731,11 @@ msgstr "BOM-Position bearbeiten" msgid "Delete BOM Item" msgstr "BOM-Position löschen" -#: templates/js/build.html:23 +#: templates/js/build.html:24 msgid "No builds matching query" msgstr "Keine Baue passen zur Anfrage" -#: templates/js/build.html:108 +#: templates/js/build.html:122 msgid "No parts allocated for" msgstr "Keine Teile zugeordnet zu" @@ -4953,10 +5143,6 @@ msgstr "" msgid "Admin" msgstr "Admin" -#: templates/navbar.html:62 -msgid "Settings" -msgstr "Einstellungen" - #: templates/navbar.html:63 msgid "Logout" msgstr "Ausloggen" @@ -5099,6 +5285,20 @@ msgstr "" msgid "Permission to delete items" msgstr "Ausgewählte Stücklistenpositionen entfernen" +#~ 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" @@ -5156,9 +5356,6 @@ msgstr "Ausgewählte Stücklistenpositionen entfernen" #~ msgid "Barcode plugin returned incorrect response" #~ msgstr "Ungültige Antwort vom Strichcode-Plugin" -#~ msgid "Part does not exist" -#~ msgstr "Teil existiert nicht" - #~ msgid "StockLocation does not exist" #~ msgstr "Lagerort existiert nicht" diff --git a/InvenTree/locale/en/LC_MESSAGES/django.po b/InvenTree/locale/en/LC_MESSAGES/django.po index 74b435c791..5c6d3a00c1 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: 2020-10-06 09:31+0000\n" +"POT-Creation-Date: 2020-10-19 21:40+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -26,7 +26,7 @@ msgstr "" msgid "No matching action found" msgstr "" -#: InvenTree/forms.py:102 build/forms.py:37 +#: InvenTree/forms.py:102 build/forms.py:49 msgid "Confirm" msgstr "" @@ -46,34 +46,34 @@ msgstr "" msgid "Apply Theme" msgstr "" -#: InvenTree/helpers.py:339 order/models.py:187 order/models.py:261 +#: InvenTree/helpers.py:348 order/models.py:187 order/models.py:261 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:342 +#: InvenTree/helpers.py:351 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:363 +#: InvenTree/helpers.py:372 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:367 InvenTree/helpers.py:370 InvenTree/helpers.py:373 +#: InvenTree/helpers.py:376 InvenTree/helpers.py:379 InvenTree/helpers.py:382 #, python-brace-format msgid "Invalid group: {g}" msgstr "" -#: InvenTree/helpers.py:378 +#: InvenTree/helpers.py:387 #, python-brace-format msgid "Duplicate serial: {g}" msgstr "" -#: InvenTree/helpers.py:386 +#: InvenTree/helpers.py:395 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:390 +#: InvenTree/helpers.py:399 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" @@ -144,7 +144,7 @@ msgid "Returned" msgstr "" #: InvenTree/status_codes.py:136 -#: order/templates/order/sales_order_base.html:105 +#: order/templates/order/sales_order_base.html:106 msgid "Shipped" msgstr "" @@ -170,7 +170,7 @@ msgstr "" #: InvenTree/status_codes.py:223 build/templates/build/allocate.html:358 #: order/templates/order/sales_order_detail.html:221 -#: part/templates/part/tabs.html:23 templates/js/build.html:126 +#: part/templates/part/tabs.html:23 templates/js/build.html:140 msgid "Allocated" msgstr "" @@ -182,20 +182,25 @@ msgstr "" msgid "IPN must match regex pattern" msgstr "" -#: InvenTree/validators.py:60 +#: InvenTree/validators.py:66 InvenTree/validators.py:80 +#: InvenTree/validators.py:94 +msgid "Reference must match pattern" +msgstr "" + +#: InvenTree/validators.py:102 #, python-brace-format msgid "Illegal character in name ({x})" msgstr "" -#: InvenTree/validators.py:79 InvenTree/validators.py:95 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:97 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:104 +#: InvenTree/validators.py:146 msgid "Overage must be an integer value or a percentage" msgstr "" @@ -243,45 +248,83 @@ msgstr "" msgid "Barcode associated with StockItem" msgstr "" -#: build/forms.py:58 +#: build/forms.py:28 +msgid "Build Order reference" +msgstr "" + +#: build/forms.py:70 msgid "Location of completed parts" msgstr "" -#: build/forms.py:62 +#: build/forms.py:74 msgid "Serial numbers" msgstr "" -#: build/forms.py:64 stock/forms.py:111 +#: build/forms.py:76 stock/forms.py:111 msgid "Enter unique serial numbers (or leave blank)" msgstr "" -#: build/forms.py:67 +#: build/forms.py:79 msgid "Confirm build completion" msgstr "" -#: build/models.py:67 +#: build/models.py:54 build/templates/build/build_base.html:8 +#: build/templates/build/build_base.html:35 +#: part/templates/part/allocation.html:20 +#: stock/templates/stock/item_base.html:214 +msgid "Build Order" +msgstr "" + +#: build/models.py:55 build/templates/build/index.html:6 +#: build/templates/build/index.html:14 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:24 users/models.py:30 +msgid "Build Orders" +msgstr "" + +#: build/models.py:77 msgid "Build quantity must be integer value for trackable parts" msgstr "" -#: build/models.py:73 build/templates/build/build_base.html:72 -msgid "Build Title" +#: build/models.py:86 build/templates/build/build_base.html:73 +msgid "Build Order Reference" msgstr "" -#: build/models.py:76 +#: build/models.py:87 build/templates/build/allocate.html:342 +#: order/templates/order/purchase_order_detail.html:172 +#: templates/js/bom.html:154 +msgid "Reference" +msgstr "" + +#: build/models.py:94 build/templates/build/allocate.html:337 +#: company/templates/company/supplier_part_base.html:53 +#: company/templates/company/supplier_part_detail.html:27 +#: order/templates/order/purchase_order_detail.html:159 +#: part/templates/part/detail.html:51 part/templates/part/set_category.html:14 +#: templates/InvenTree/search.html:147 templates/js/bom.html:147 +#: templates/js/build.html:56 templates/js/company.html:56 +#: templates/js/order.html:159 templates/js/order.html:234 +#: templates/js/part.html:120 templates/js/part.html:203 +#: templates/js/part.html:345 templates/js/part.html:526 +#: templates/js/stock.html:444 templates/js/stock.html:671 +msgid "Description" +msgstr "" + +#: build/models.py:97 msgid "Brief description of the build" msgstr "" -#: build/models.py:84 build/templates/build/build_base.html:93 +#: build/models.py:105 build/templates/build/build_base.html:94 msgid "Parent Build" msgstr "" -#: build/models.py:85 +#: build/models.py:106 msgid "Parent build to which this build is allocated" msgstr "" -#: build/models.py:90 build/templates/build/allocate.html:329 +#: build/models.py:111 build/templates/build/allocate.html:329 #: build/templates/build/auto_allocate.html:19 -#: build/templates/build/build_base.html:77 +#: build/templates/build/build_base.html:78 #: build/templates/build/detail.html:22 order/models.py:501 #: order/templates/order/order_wizard/select_parts.html:30 #: order/templates/order/purchase_order_detail.html:147 @@ -289,72 +332,72 @@ msgstr "" #: part/templates/part/part_app_base.html:7 #: part/templates/part/set_category.html:13 templates/InvenTree/search.html:133 #: templates/js/barcode.html:336 templates/js/bom.html:124 -#: templates/js/build.html:47 templates/js/company.html:137 +#: templates/js/build.html:61 templates/js/company.html:137 #: templates/js/part.html:184 templates/js/part.html:289 #: templates/js/stock.html:421 templates/js/stock.html:977 msgid "Part" msgstr "" -#: build/models.py:99 +#: build/models.py:120 msgid "Select part to build" msgstr "" -#: build/models.py:104 +#: build/models.py:125 msgid "Sales Order Reference" msgstr "" -#: build/models.py:108 +#: build/models.py:129 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:113 +#: build/models.py:134 msgid "Source Location" msgstr "" -#: build/models.py:117 +#: build/models.py:138 msgid "" "Select location to take stock from for this build (leave blank to take from " "any stock location)" msgstr "" -#: build/models.py:121 +#: build/models.py:142 msgid "Build Quantity" msgstr "" -#: build/models.py:124 +#: build/models.py:145 msgid "Number of parts to build" msgstr "" -#: build/models.py:128 part/templates/part/part_base.html:155 +#: build/models.py:149 part/templates/part/part_base.html:155 msgid "Build Status" msgstr "" -#: build/models.py:132 +#: build/models.py:153 msgid "Build status code" msgstr "" -#: build/models.py:136 stock/models.py:387 +#: build/models.py:157 stock/models.py:387 msgid "Batch Code" msgstr "" -#: build/models.py:140 +#: build/models.py:161 msgid "Batch code for this build output" msgstr "" -#: build/models.py:155 build/templates/build/detail.html:55 +#: build/models.py:176 build/templates/build/detail.html:55 #: company/templates/company/supplier_part_base.html:60 #: company/templates/company/supplier_part_detail.html:24 #: part/templates/part/detail.html:80 part/templates/part/part_base.html:102 -#: stock/models.py:381 stock/templates/stock/item_base.html:244 +#: stock/models.py:381 stock/templates/stock/item_base.html:266 msgid "External Link" msgstr "" -#: build/models.py:156 stock/models.py:383 +#: build/models.py:177 stock/models.py:383 msgid "Link to external URL" msgstr "" -#: build/models.py:160 build/templates/build/tabs.html:14 company/models.py:310 -#: company/templates/company/tabs.html:33 order/templates/order/po_tabs.html:15 +#: build/models.py:181 build/templates/build/tabs.html:14 company/models.py:310 +#: company/templates/company/tabs.html:33 order/templates/order/po_tabs.html:18 #: order/templates/order/purchase_order_detail.html:202 #: order/templates/order/so_tabs.html:23 part/templates/part/tabs.html:70 #: stock/forms.py:306 stock/forms.py:338 stock/forms.py:366 stock/models.py:453 @@ -364,41 +407,41 @@ msgstr "" msgid "Notes" msgstr "" -#: build/models.py:161 +#: build/models.py:182 msgid "Extra build notes" msgstr "" -#: build/models.py:467 +#: build/models.py:520 #, python-brace-format msgid "Selected stock item not found in BOM for part '{p}'" msgstr "" -#: build/models.py:470 +#: build/models.py:523 #, python-brace-format msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" msgstr "" -#: build/models.py:476 order/models.py:585 +#: build/models.py:529 order/models.py:585 msgid "StockItem is over-allocated" msgstr "" -#: build/models.py:479 order/models.py:588 +#: build/models.py:532 order/models.py:588 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:482 +#: build/models.py:535 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:511 +#: build/models.py:564 msgid "Build to allocate parts" msgstr "" -#: build/models.py:518 +#: build/models.py:571 msgid "Stock Item to allocate to build" msgstr "" -#: build/models.py:531 +#: build/models.py:584 msgid "Stock quantity to allocate to build" msgstr "" @@ -424,20 +467,20 @@ msgstr "" msgid "New Stock Item" msgstr "" -#: build/templates/build/allocate.html:88 stock/views.py:1428 +#: build/templates/build/allocate.html:88 stock/views.py:1459 msgid "Create new Stock Item" msgstr "" #: build/templates/build/allocate.html:170 #: order/templates/order/sales_order_detail.html:68 #: order/templates/order/sales_order_detail.html:150 stock/models.py:375 -#: stock/templates/stock/item_base.html:156 +#: stock/templates/stock/item_base.html:178 msgid "Serial Number" msgstr "" #: build/templates/build/allocate.html:172 #: build/templates/build/auto_allocate.html:20 -#: build/templates/build/build_base.html:82 +#: build/templates/build/build_base.html:83 #: build/templates/build/detail.html:27 #: company/templates/company/supplier_part_pricing.html:71 #: order/templates/order/order_wizard/select_parts.html:32 @@ -449,16 +492,16 @@ msgstr "" #: part/templates/part/sale_prices.html:80 stock/forms.py:297 #: stock/templates/stock/item_base.html:26 #: stock/templates/stock/item_base.html:32 -#: stock/templates/stock/item_base.html:162 +#: stock/templates/stock/item_base.html:184 #: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.html:338 -#: templates/js/bom.html:162 templates/js/build.html:58 +#: templates/js/bom.html:162 templates/js/build.html:72 #: templates/js/stock.html:690 templates/js/stock.html:905 msgid "Quantity" msgstr "" #: build/templates/build/allocate.html:186 #: build/templates/build/auto_allocate.html:21 stock/forms.py:336 -#: stock/templates/stock/item_base.html:198 +#: stock/templates/stock/item_base.html:220 #: stock/templates/stock/stock_adjust.html:17 #: templates/InvenTree/search.html:183 templates/js/barcode.html:337 #: templates/js/stock.html:518 @@ -466,12 +509,12 @@ msgid "Location" msgstr "" #: build/templates/build/allocate.html:210 -#: order/templates/order/sales_order_detail.html:92 templates/js/build.html:130 +#: order/templates/order/sales_order_detail.html:92 templates/js/build.html:144 msgid "Edit stock allocation" msgstr "" #: build/templates/build/allocate.html:211 -#: order/templates/order/sales_order_detail.html:93 templates/js/build.html:131 +#: order/templates/order/sales_order_detail.html:93 templates/js/build.html:145 msgid "Delete stock allocation" msgstr "" @@ -479,26 +522,6 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: build/templates/build/allocate.html:337 -#: company/templates/company/supplier_part_base.html:53 -#: company/templates/company/supplier_part_detail.html:27 -#: order/templates/order/purchase_order_detail.html:159 -#: part/templates/part/detail.html:51 part/templates/part/set_category.html:14 -#: templates/InvenTree/search.html:147 templates/js/bom.html:147 -#: templates/js/company.html:56 templates/js/order.html:159 -#: templates/js/order.html:234 templates/js/part.html:120 -#: templates/js/part.html:203 templates/js/part.html:345 -#: templates/js/part.html:526 templates/js/stock.html:444 -#: templates/js/stock.html:671 -msgid "Description" -msgstr "" - -#: build/templates/build/allocate.html:342 -#: order/templates/order/purchase_order_detail.html:172 -#: templates/js/bom.html:154 -msgid "Reference" -msgstr "" - #: build/templates/build/allocate.html:347 part/models.py:1401 #: templates/js/part.html:530 templates/js/table_filters.html:121 msgid "Required" @@ -544,81 +567,73 @@ msgstr "" msgid "Stock items will have to be manually allocated" msgstr "" -#: build/templates/build/build_base.html:8 -#: build/templates/build/build_base.html:34 -#: build/templates/build/complete.html:6 -#: stock/templates/stock/item_base.html:223 templates/js/build.html:39 -#: templates/navbar.html:25 -msgid "Build" -msgstr "" - #: build/templates/build/build_base.html:14 -msgid "This build is allocated to Sales Order" +msgid "This Build Order is allocated to Sales Order" msgstr "" #: build/templates/build/build_base.html:19 -msgid "This build is a child of Build" +msgid "This Build Order is a child of Build Order" msgstr "" -#: build/templates/build/build_base.html:39 +#: build/templates/build/build_base.html:37 #: company/templates/company/company_base.html:27 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 +#: order/templates/order/order_base.html:26 +#: order/templates/order/sales_order_base.html:35 #: part/templates/part/category.html:13 part/templates/part/part_base.html:32 -#: stock/templates/stock/item_base.html:69 +#: stock/templates/stock/item_base.html:76 #: stock/templates/stock/location.html:12 msgid "Admin view" msgstr "" -#: build/templates/build/build_base.html:45 +#: build/templates/build/build_base.html:46 msgid "Edit Build" msgstr "" -#: build/templates/build/build_base.html:49 build/views.py:190 +#: build/templates/build/build_base.html:50 build/views.py:190 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:52 build/views.py:58 +#: build/templates/build/build_base.html:53 build/views.py:58 msgid "Cancel Build" msgstr "" -#: build/templates/build/build_base.html:58 build/views.py:454 +#: build/templates/build/build_base.html:59 build/views.py:456 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:68 build/templates/build/detail.html:9 +#: build/templates/build/build_base.html:69 build/templates/build/detail.html:9 msgid "Build Details" msgstr "" -#: build/templates/build/build_base.html:87 +#: build/templates/build/build_base.html:88 #: build/templates/build/detail.html:42 #: order/templates/order/receive_parts.html:24 -#: stock/templates/stock/item_base.html:276 templates/InvenTree/search.html:175 -#: templates/js/barcode.html:42 templates/js/build.html:63 +#: stock/templates/stock/item_base.html:298 templates/InvenTree/search.html:175 +#: templates/js/barcode.html:42 templates/js/build.html:77 #: templates/js/order.html:164 templates/js/order.html:239 #: templates/js/stock.html:505 templates/js/stock.html:913 msgid "Status" msgstr "" -#: build/templates/build/build_base.html:100 order/models.py:499 +#: build/templates/build/build_base.html:101 order/models.py:499 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:33 #: order/templates/order/sales_order_notes.html:10 #: order/templates/order/sales_order_ship.html:25 #: part/templates/part/allocation.html:27 -#: stock/templates/stock/item_base.html:186 templates/js/order.html:213 +#: stock/templates/stock/item_base.html:208 templates/js/order.html:213 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:106 +#: build/templates/build/build_base.html:107 msgid "BOM Price" msgstr "" -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:112 msgid "BOM pricing is incomplete" msgstr "" -#: build/templates/build/build_base.html:114 +#: build/templates/build/build_base.html:115 msgid "No pricing information" msgstr "" @@ -626,6 +641,12 @@ msgstr "" msgid "Build Outputs" msgstr "" +#: build/templates/build/complete.html:6 +#: stock/templates/stock/item_base.html:245 templates/js/build.html:40 +#: templates/navbar.html:25 +msgid "Build" +msgstr "" + #: build/templates/build/complete.html:10 msgid "Build order allocation is complete" msgstr "" @@ -673,15 +694,15 @@ msgid "Stock can be taken from any available location." msgstr "" #: build/templates/build/detail.html:48 -#: stock/templates/stock/item_base.html:216 templates/js/stock.html:513 +#: stock/templates/stock/item_base.html:238 templates/js/stock.html:513 #: templates/js/stock.html:920 templates/js/table_filters.html:34 #: templates/js/table_filters.html:100 msgid "Batch" msgstr "" #: build/templates/build/detail.html:61 -#: order/templates/order/order_base.html:100 -#: order/templates/order/sales_order_base.html:99 templates/js/build.html:71 +#: order/templates/order/order_base.html:98 +#: order/templates/order/sales_order_base.html:100 templates/js/build.html:85 msgid "Created" msgstr "" @@ -697,17 +718,11 @@ msgstr "" msgid "No" msgstr "" -#: build/templates/build/detail.html:80 templates/js/build.html:76 +#: build/templates/build/detail.html:80 templates/js/build.html:90 msgid "Completed" msgstr "" -#: build/templates/build/index.html:6 build/templates/build/index.html:14 -#: order/templates/order/so_builds.html:11 order/templates/order/so_tabs.html:9 -#: part/templates/part/tabs.html:31 users/models.py:30 -msgid "Build Orders" -msgstr "" - -#: build/templates/build/index.html:24 +#: build/templates/build/index.html:24 build/views.py:403 msgid "New Build Order" msgstr "" @@ -766,7 +781,7 @@ msgstr "" msgid "Check the confirmation box at the bottom of the list" msgstr "" -#: build/views.py:152 build/views.py:465 +#: build/views.py:152 build/views.py:467 msgid "Unallocate Stock" msgstr "" @@ -774,7 +789,7 @@ msgstr "" msgid "Confirm unallocation of build stock" msgstr "" -#: build/views.py:167 stock/views.py:405 +#: build/views.py:167 stock/views.py:421 msgid "Check the confirmation box" msgstr "" @@ -786,7 +801,7 @@ msgstr "" msgid "Invalid location selected" msgstr "" -#: build/views.py:302 stock/views.py:1621 +#: build/views.py:302 stock/views.py:1653 #, python-brace-format msgid "The following serial numbers already exist: ({sn})" msgstr "" @@ -795,75 +810,67 @@ msgstr "" msgid "Build marked as COMPLETE" msgstr "" -#: build/views.py:403 -msgid "Start new Build" -msgstr "" - -#: build/views.py:429 +#: build/views.py:431 msgid "Created new build" msgstr "" -#: build/views.py:439 +#: build/views.py:441 msgid "Edit Build Details" msgstr "" -#: build/views.py:445 +#: build/views.py:447 msgid "Edited build" msgstr "" -#: build/views.py:471 +#: build/views.py:473 msgid "Removed parts from build allocation" msgstr "" -#: build/views.py:481 +#: build/views.py:483 msgid "Allocate new Part" msgstr "" -#: build/views.py:635 +#: build/views.py:637 msgid "Edit Stock Allocation" msgstr "" -#: build/views.py:640 +#: build/views.py:642 msgid "Updated Build Item" msgstr "" -#: common/models.py:75 +#: common/models.py:107 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:77 +#: common/models.py:109 msgid "Settings value" msgstr "" -#: common/models.py:79 -msgid "Settings description" -msgstr "" - -#: common/models.py:92 +#: common/models.py:122 msgid "Key string must be unique" msgstr "" -#: common/models.py:113 +#: common/models.py:143 msgid "Currency Symbol e.g. $" msgstr "" -#: common/models.py:115 +#: common/models.py:145 msgid "Currency Suffix e.g. AUD" msgstr "" -#: common/models.py:117 +#: common/models.py:147 msgid "Currency Description" msgstr "" -#: common/models.py:119 +#: common/models.py:149 msgid "Currency Value" msgstr "" -#: common/models.py:121 +#: common/models.py:151 msgid "Use this currency as the base currency" msgstr "" -#: common/models.py:204 +#: common/models.py:234 msgid "Default" msgstr "" @@ -879,6 +886,10 @@ msgstr "" msgid "Delete Currency" msgstr "" +#: common/views.py:47 +msgid "Change Setting" +msgstr "" + #: company/models.py:86 company/models.py:87 msgid "Company name" msgstr "" @@ -949,7 +960,7 @@ msgid "Does this company manufacture parts?" msgstr "" #: company/models.py:279 stock/models.py:335 -#: stock/templates/stock/item_base.html:148 +#: stock/templates/stock/item_base.html:164 msgid "Base Part" msgstr "" @@ -1018,16 +1029,16 @@ msgstr "" #: company/templates/company/detail.html:21 #: company/templates/company/supplier_part_base.html:66 #: company/templates/company/supplier_part_detail.html:21 -#: order/templates/order/order_base.html:81 +#: order/templates/order/order_base.html:79 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:170 -#: stock/templates/stock/item_base.html:251 templates/js/company.html:48 +#: stock/templates/stock/item_base.html:273 templates/js/company.html:48 #: templates/js/company.html:162 templates/js/order.html:146 msgid "Supplier" msgstr "" #: company/templates/company/detail.html:26 -#: order/templates/order/sales_order_base.html:80 stock/models.py:370 -#: stock/models.py:371 stock/templates/stock/item_base.html:169 +#: order/templates/order/sales_order_base.html:81 stock/models.py:370 +#: stock/models.py:371 stock/templates/stock/item_base.html:191 #: templates/js/company.html:40 templates/js/order.html:221 msgid "Customer" msgstr "" @@ -1122,7 +1133,8 @@ msgstr "" #: order/templates/order/purchase_orders.html:7 #: order/templates/order/purchase_orders.html:12 #: part/templates/part/orders.html:9 part/templates/part/tabs.html:48 -#: templates/navbar.html:33 users/models.py:31 +#: templates/InvenTree/settings/tabs.html:27 templates/navbar.html:33 +#: users/models.py:31 msgid "Purchase Orders" msgstr "" @@ -1141,7 +1153,8 @@ msgstr "" #: order/templates/order/sales_orders.html:7 #: order/templates/order/sales_orders.html:12 #: part/templates/part/sales_orders.html:9 part/templates/part/tabs.html:56 -#: templates/navbar.html:42 users/models.py:32 +#: templates/InvenTree/settings/tabs.html:30 templates/navbar.html:42 +#: users/models.py:32 msgid "Sales Orders" msgstr "" @@ -1157,7 +1170,7 @@ msgstr "" #: company/templates/company/supplier_part_base.html:6 #: company/templates/company/supplier_part_base.html:19 stock/models.py:344 -#: stock/templates/stock/item_base.html:256 templates/js/company.html:178 +#: stock/templates/stock/item_base.html:278 templates/js/company.html:178 msgid "Supplier Part" msgstr "" @@ -1200,11 +1213,11 @@ msgstr "" msgid "Note" msgstr "" -#: company/templates/company/supplier_part_orders.html:11 +#: company/templates/company/supplier_part_orders.html:9 msgid "Supplier Part Orders" msgstr "" -#: company/templates/company/supplier_part_pricing.html:12 +#: company/templates/company/supplier_part_pricing.html:10 msgid "Pricing Information" msgstr "" @@ -1233,7 +1246,7 @@ msgstr "" msgid "Delete price break" msgstr "" -#: company/templates/company/supplier_part_stock.html:11 +#: company/templates/company/supplier_part_stock.html:9 msgid "Supplier Part Stock" msgstr "" @@ -1244,8 +1257,9 @@ msgstr "" #: company/templates/company/supplier_part_tabs.html:8 #: company/templates/company/tabs.html:12 part/templates/part/tabs.html:18 #: stock/templates/stock/location.html:17 templates/InvenTree/search.html:155 -#: templates/js/part.html:124 templates/js/part.html:372 -#: templates/js/stock.html:452 templates/navbar.html:22 users/models.py:29 +#: templates/InvenTree/settings/tabs.html:21 templates/js/part.html:124 +#: templates/js/part.html:372 templates/js/stock.html:452 +#: templates/navbar.html:22 users/models.py:29 msgid "Stock" msgstr "" @@ -1256,7 +1270,8 @@ msgstr "" #: company/templates/company/tabs.html:9 #: order/templates/order/receive_parts.html:14 part/models.py:294 #: part/templates/part/cat_link.html:7 part/templates/part/category.html:94 -#: part/templates/part/category_tabs.html:6 templates/navbar.html:19 +#: part/templates/part/category_tabs.html:6 +#: templates/InvenTree/settings/tabs.html:18 templates/navbar.html:19 #: templates/stats.html:8 templates/stats.html:17 users/models.py:28 msgid "Parts" msgstr "" @@ -1370,20 +1385,20 @@ msgstr "" msgid "Enabled" msgstr "" -#: order/forms.py:24 order/templates/order/order_base.html:40 +#: order/forms.py:24 order/templates/order/order_base.html:39 msgid "Place order" msgstr "" -#: order/forms.py:35 order/templates/order/order_base.html:47 +#: order/forms.py:35 order/templates/order/order_base.html:46 msgid "Mark order as complete" msgstr "" -#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:52 -#: order/templates/order/sales_order_base.html:52 +#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:51 +#: order/templates/order/sales_order_base.html:53 msgid "Cancel order" msgstr "" -#: order/forms.py:68 order/templates/order/sales_order_base.html:49 +#: order/forms.py:68 order/templates/order/sales_order_base.html:50 msgid "Ship order" msgstr "" @@ -1392,7 +1407,7 @@ msgid "Receive parts to this location" msgstr "" #: order/forms.py:99 -msgid "Enter purchase order number" +msgid "Purchase Order reference" msgstr "" #: order/forms.py:126 @@ -1473,8 +1488,8 @@ msgid "Line item notes" msgstr "" #: order/models.py:466 order/templates/order/order_base.html:9 -#: order/templates/order/order_base.html:23 -#: stock/templates/stock/item_base.html:230 templates/js/order.html:138 +#: order/templates/order/order_base.html:24 +#: stock/templates/stock/item_base.html:252 templates/js/order.html:138 msgid "Purchase Order" msgstr "" @@ -1516,44 +1531,44 @@ msgstr "" msgid "Are you sure you want to delete this attachment?" msgstr "" -#: order/templates/order/order_base.html:36 +#: order/templates/order/order_base.html:35 msgid "Edit order information" msgstr "" -#: order/templates/order/order_base.html:44 +#: order/templates/order/order_base.html:43 msgid "Receive items" msgstr "" -#: order/templates/order/order_base.html:57 +#: order/templates/order/order_base.html:56 msgid "Export order to file" msgstr "" -#: order/templates/order/order_base.html:66 +#: order/templates/order/order_base.html:64 msgid "Purchase Order Details" msgstr "" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:70 +#: order/templates/order/order_base.html:69 +#: order/templates/order/sales_order_base.html:71 msgid "Order Reference" msgstr "" -#: order/templates/order/order_base.html:76 -#: order/templates/order/sales_order_base.html:75 +#: order/templates/order/order_base.html:74 +#: order/templates/order/sales_order_base.html:76 msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:87 templates/js/order.html:153 +#: order/templates/order/order_base.html:85 templates/js/order.html:153 msgid "Supplier Reference" msgstr "" -#: order/templates/order/order_base.html:106 +#: order/templates/order/order_base.html:104 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:113 +#: order/templates/order/order_base.html:111 #: order/templates/order/purchase_order_detail.html:182 #: order/templates/order/receive_parts.html:22 -#: order/templates/order/sales_order_base.html:112 +#: order/templates/order/sales_order_base.html:113 msgid "Received" msgstr "" @@ -1598,8 +1613,7 @@ msgid "Select existing purchase orders, or create new orders." msgstr "" #: order/templates/order/order_wizard/select_pos.html:31 -#: order/templates/order/po_tabs.html:5 templates/js/order.html:177 -#: templates/js/order.html:257 +#: templates/js/order.html:177 templates/js/order.html:257 msgid "Items" msgstr "" @@ -1615,7 +1629,16 @@ msgstr "" msgid "Purchase Order Attachments" msgstr "" -#: order/templates/order/po_tabs.html:8 order/templates/order/so_tabs.html:16 +#: order/templates/order/po_received_items.html:11 +#: order/templates/order/po_tabs.html:8 +msgid "Received Items" +msgstr "" + +#: order/templates/order/po_tabs.html:5 +msgid "Line Items" +msgstr "" + +#: order/templates/order/po_tabs.html:11 order/templates/order/so_tabs.html:16 #: part/templates/part/tabs.html:67 stock/templates/stock/tabs.html:32 msgid "Attachments" msgstr "" @@ -1639,7 +1662,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:39 #: order/templates/order/purchase_order_detail.html:119 -#: stock/templates/stock/location.html:21 +#: stock/templates/stock/location.html:22 msgid "Create new stock location" msgstr "" @@ -1690,15 +1713,15 @@ msgstr "" msgid "This SalesOrder has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:57 +#: order/templates/order/sales_order_base.html:58 msgid "Packing List" msgstr "" -#: order/templates/order/sales_order_base.html:65 +#: order/templates/order/sales_order_base.html:66 msgid "Sales Order Details" msgstr "" -#: order/templates/order/sales_order_base.html:86 templates/js/order.html:228 +#: order/templates/order/sales_order_base.html:87 templates/js/order.html:228 msgid "Customer Reference" msgstr "" @@ -1766,7 +1789,7 @@ msgstr "" msgid "Add Purchase Order Attachment" msgstr "" -#: order/views.py:109 order/views.py:157 part/views.py:92 stock/views.py:167 +#: order/views.py:109 order/views.py:157 part/views.py:92 stock/views.py:175 msgid "Added attachment" msgstr "" @@ -1786,7 +1809,7 @@ msgstr "" msgid "Delete Attachment" msgstr "" -#: order/views.py:233 order/views.py:248 stock/views.py:223 +#: order/views.py:233 order/views.py:248 stock/views.py:233 msgid "Deleted attachment" msgstr "" @@ -2266,17 +2289,12 @@ msgstr "" #: part/templates/part/allocation.html:45 #: stock/templates/stock/item_base.html:8 #: stock/templates/stock/item_base.html:58 -#: stock/templates/stock/item_base.html:238 -#: stock/templates/stock/stock_adjust.html:16 templates/js/build.html:112 +#: stock/templates/stock/item_base.html:260 +#: stock/templates/stock/stock_adjust.html:16 templates/js/build.html:126 #: templates/js/stock.html:660 templates/js/stock.html:896 msgid "Stock Item" msgstr "" -#: part/templates/part/allocation.html:20 -#: stock/templates/stock/item_base.html:192 -msgid "Build Order" -msgstr "" - #: part/templates/part/attachments.html:8 msgid "Part Attachments" msgstr "" @@ -2473,7 +2491,7 @@ msgstr "" msgid "Create new Part Category" msgstr "" -#: part/templates/part/category.html:214 stock/views.py:1314 +#: part/templates/part/category.html:214 stock/views.py:1343 msgid "Create new Stock Location" msgstr "" @@ -2644,7 +2662,7 @@ msgstr "" msgid "Add new parameter" msgstr "" -#: part/templates/part/params.html:14 templates/InvenTree/settings/part.html:12 +#: part/templates/part/params.html:14 templates/InvenTree/settings/part.html:17 msgid "New Parameter" msgstr "" @@ -2688,20 +2706,20 @@ msgid "Star this part" msgstr "" #: part/templates/part/part_base.html:49 -#: stock/templates/stock/item_base.html:81 -#: stock/templates/stock/location.html:27 +#: stock/templates/stock/item_base.html:88 +#: stock/templates/stock/location.html:29 msgid "Barcode actions" msgstr "" #: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:83 -#: stock/templates/stock/location.html:29 +#: stock/templates/stock/item_base.html:90 +#: stock/templates/stock/location.html:31 msgid "Show QR Code" msgstr "" #: part/templates/part/part_base.html:52 -#: stock/templates/stock/item_base.html:84 -#: stock/templates/stock/location.html:30 +#: stock/templates/stock/item_base.html:91 +#: stock/templates/stock/location.html:32 msgid "Print Label" msgstr "" @@ -2830,7 +2848,7 @@ msgstr "" msgid "Used In" msgstr "" -#: part/templates/part/tabs.html:61 stock/templates/stock/item_base.html:282 +#: part/templates/part/tabs.html:61 stock/templates/stock/item_base.html:304 msgid "Tests" msgstr "" @@ -2862,7 +2880,7 @@ msgstr "" msgid "Add part attachment" msgstr "" -#: part/views.py:131 templates/attachment_table.html:30 +#: part/views.py:131 templates/attachment_table.html:32 msgid "Edit attachment" msgstr "" @@ -3111,7 +3129,7 @@ msgstr "" msgid "Add note (required)" msgstr "" -#: stock/forms.py:370 stock/views.py:895 stock/views.py:1092 +#: stock/forms.py:370 stock/views.py:921 stock/views.py:1119 msgid "Confirm stock adjustment" msgstr "" @@ -3176,7 +3194,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:358 stock/templates/stock/item_base.html:177 +#: stock/models.py:358 stock/templates/stock/item_base.html:199 msgid "Installed In" msgstr "" @@ -3386,106 +3404,106 @@ msgid "" "This stock item will be automatically deleted when all stock is depleted." msgstr "" -#: stock/templates/stock/item_base.html:86 templates/js/barcode.html:283 +#: stock/templates/stock/item_base.html:94 templates/js/barcode.html:283 #: templates/js/barcode.html:288 msgid "Unlink Barcode" msgstr "" -#: stock/templates/stock/item_base.html:88 +#: stock/templates/stock/item_base.html:96 msgid "Link Barcode" msgstr "" -#: stock/templates/stock/item_base.html:94 +#: stock/templates/stock/item_base.html:104 msgid "Stock adjustment actions" msgstr "" -#: stock/templates/stock/item_base.html:98 -#: stock/templates/stock/location.html:38 templates/stock_table.html:19 +#: stock/templates/stock/item_base.html:108 +#: stock/templates/stock/location.html:41 templates/stock_table.html:19 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:99 templates/stock_table.html:17 +#: stock/templates/stock/item_base.html:109 templates/stock_table.html:17 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:100 templates/stock_table.html:18 +#: stock/templates/stock/item_base.html:110 templates/stock_table.html:18 msgid "Remove stock" msgstr "" -#: stock/templates/stock/item_base.html:102 +#: stock/templates/stock/item_base.html:112 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:104 +#: stock/templates/stock/item_base.html:114 msgid "Serialize stock" msgstr "" -#: stock/templates/stock/item_base.html:108 +#: stock/templates/stock/item_base.html:118 msgid "Assign to customer" msgstr "" -#: stock/templates/stock/item_base.html:111 +#: stock/templates/stock/item_base.html:121 msgid "Return to stock" msgstr "" -#: stock/templates/stock/item_base.html:115 templates/js/stock.html:933 +#: stock/templates/stock/item_base.html:125 templates/js/stock.html:933 msgid "Uninstall stock item" msgstr "" -#: stock/templates/stock/item_base.html:115 +#: stock/templates/stock/item_base.html:125 msgid "Uninstall" msgstr "" -#: stock/templates/stock/item_base.html:122 -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/item_base.html:134 +#: stock/templates/stock/location.html:38 msgid "Stock actions" msgstr "" -#: stock/templates/stock/item_base.html:126 +#: stock/templates/stock/item_base.html:137 msgid "Convert to variant" msgstr "" -#: stock/templates/stock/item_base.html:128 +#: stock/templates/stock/item_base.html:140 msgid "Duplicate stock item" msgstr "" -#: stock/templates/stock/item_base.html:129 +#: stock/templates/stock/item_base.html:142 msgid "Edit stock item" msgstr "" -#: stock/templates/stock/item_base.html:131 +#: stock/templates/stock/item_base.html:145 msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:135 +#: stock/templates/stock/item_base.html:151 msgid "Generate test report" msgstr "" -#: stock/templates/stock/item_base.html:143 +#: stock/templates/stock/item_base.html:159 msgid "Stock Item Details" msgstr "" -#: stock/templates/stock/item_base.html:202 +#: stock/templates/stock/item_base.html:224 msgid "No location set" msgstr "" -#: stock/templates/stock/item_base.html:209 -msgid "Unique Identifier" +#: stock/templates/stock/item_base.html:231 +msgid "Barcode Identifier" msgstr "" -#: stock/templates/stock/item_base.html:237 +#: stock/templates/stock/item_base.html:259 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:262 +#: stock/templates/stock/item_base.html:284 msgid "Last Updated" msgstr "" -#: stock/templates/stock/item_base.html:267 +#: stock/templates/stock/item_base.html:289 msgid "Last Stocktake" msgstr "" -#: stock/templates/stock/item_base.html:271 +#: stock/templates/stock/item_base.html:293 msgid "No stocktake performed" msgstr "" @@ -3549,50 +3567,50 @@ msgstr "" msgid "All stock items" msgstr "" -#: stock/templates/stock/location.html:31 +#: stock/templates/stock/location.html:33 msgid "Check-in Items" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:44 +#: stock/templates/stock/location.html:47 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:49 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:53 +#: stock/templates/stock/location.html:59 msgid "Location Details" msgstr "" -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:64 msgid "Location Path" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Location Description" msgstr "" -#: stock/templates/stock/location.html:68 +#: stock/templates/stock/location.html:74 msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:73 -#: stock/templates/stock/location.html:88 +#: stock/templates/stock/location.html:79 +#: stock/templates/stock/location.html:94 #: templates/InvenTree/search_stock_items.html:6 templates/stats.html:21 #: templates/stats.html:30 msgid "Stock Items" msgstr "" -#: stock/templates/stock/location.html:78 +#: stock/templates/stock/location.html:84 msgid "Stock Details" msgstr "" -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:89 #: templates/InvenTree/search_stock_location.html:6 templates/stats.html:25 msgid "Stock Locations" msgstr "" @@ -3605,7 +3623,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1287 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1315 msgid "Convert Stock Item" msgstr "" @@ -3637,214 +3655,214 @@ msgstr "" msgid "Installed Items" msgstr "" -#: stock/views.py:114 +#: stock/views.py:119 msgid "Edit Stock Location" msgstr "" -#: stock/views.py:138 +#: stock/views.py:144 msgid "Stock Location QR code" msgstr "" -#: stock/views.py:156 +#: stock/views.py:163 msgid "Add Stock Item Attachment" msgstr "" -#: stock/views.py:201 +#: stock/views.py:209 msgid "Edit Stock Item Attachment" msgstr "" -#: stock/views.py:217 +#: stock/views.py:226 msgid "Delete Stock Item Attachment" msgstr "" -#: stock/views.py:233 +#: stock/views.py:243 msgid "Assign to Customer" msgstr "" -#: stock/views.py:270 +#: stock/views.py:281 msgid "Return to Stock" msgstr "" -#: stock/views.py:289 +#: stock/views.py:301 msgid "Specify a valid location" msgstr "" -#: stock/views.py:293 +#: stock/views.py:305 msgid "Stock item returned from customer" msgstr "" -#: stock/views.py:305 +#: stock/views.py:317 msgid "Select Label Template" msgstr "" -#: stock/views.py:327 +#: stock/views.py:340 msgid "Select valid label" msgstr "" -#: stock/views.py:389 +#: stock/views.py:404 msgid "Delete All Test Data" msgstr "" -#: stock/views.py:404 +#: stock/views.py:420 msgid "Confirm test data deletion" msgstr "" -#: stock/views.py:424 +#: stock/views.py:440 msgid "Add Test Result" msgstr "" -#: stock/views.py:461 +#: stock/views.py:478 msgid "Edit Test Result" msgstr "" -#: stock/views.py:478 +#: stock/views.py:496 msgid "Delete Test Result" msgstr "" -#: stock/views.py:489 +#: stock/views.py:508 msgid "Select Test Report Template" msgstr "" -#: stock/views.py:503 +#: stock/views.py:523 msgid "Select valid template" msgstr "" -#: stock/views.py:555 +#: stock/views.py:576 msgid "Stock Export Options" msgstr "" -#: stock/views.py:675 +#: stock/views.py:698 msgid "Stock Item QR Code" msgstr "" -#: stock/views.py:700 +#: stock/views.py:724 msgid "Install Stock Item" msgstr "" -#: stock/views.py:799 +#: stock/views.py:824 msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:906 +#: stock/views.py:932 msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:931 +#: stock/views.py:957 msgid "Adjust Stock" msgstr "" -#: stock/views.py:1040 +#: stock/views.py:1067 msgid "Move Stock Items" msgstr "" -#: stock/views.py:1041 +#: stock/views.py:1068 msgid "Count Stock Items" msgstr "" -#: stock/views.py:1042 +#: stock/views.py:1069 msgid "Remove From Stock" msgstr "" -#: stock/views.py:1043 +#: stock/views.py:1070 msgid "Add Stock Items" msgstr "" -#: stock/views.py:1044 +#: stock/views.py:1071 msgid "Delete Stock Items" msgstr "" -#: stock/views.py:1072 +#: stock/views.py:1099 msgid "Must enter integer value" msgstr "" -#: stock/views.py:1077 +#: stock/views.py:1104 msgid "Quantity must be positive" msgstr "" -#: stock/views.py:1084 +#: stock/views.py:1111 #, python-brace-format msgid "Quantity must not exceed {x}" msgstr "" -#: stock/views.py:1163 +#: stock/views.py:1190 #, python-brace-format msgid "Added stock to {n} items" msgstr "" -#: stock/views.py:1178 +#: stock/views.py:1205 #, python-brace-format msgid "Removed stock from {n} items" msgstr "" -#: stock/views.py:1191 +#: stock/views.py:1218 #, python-brace-format msgid "Counted stock for {n} items" msgstr "" -#: stock/views.py:1219 +#: stock/views.py:1246 msgid "No items were moved" msgstr "" -#: stock/views.py:1222 +#: stock/views.py:1249 #, python-brace-format msgid "Moved {n} items to {dest}" msgstr "" -#: stock/views.py:1241 +#: stock/views.py:1268 #, python-brace-format msgid "Deleted {n} stock items" msgstr "" -#: stock/views.py:1253 +#: stock/views.py:1280 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:1335 +#: stock/views.py:1365 msgid "Serialize Stock" msgstr "" -#: stock/views.py:1527 +#: stock/views.py:1559 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1593 +#: stock/views.py:1625 msgid "Invalid quantity" msgstr "" -#: stock/views.py:1596 +#: stock/views.py:1628 msgid "Quantity cannot be less than zero" msgstr "" -#: stock/views.py:1600 +#: stock/views.py:1632 msgid "Invalid part selection" msgstr "" -#: stock/views.py:1649 +#: stock/views.py:1681 #, python-brace-format msgid "Created {n} new stock items" msgstr "" -#: stock/views.py:1668 stock/views.py:1684 +#: stock/views.py:1700 stock/views.py:1716 msgid "Created new stock item" msgstr "" -#: stock/views.py:1703 +#: stock/views.py:1735 msgid "Delete Stock Location" msgstr "" -#: stock/views.py:1716 +#: stock/views.py:1749 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:1727 +#: stock/views.py:1761 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:1744 +#: stock/views.py:1780 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:1753 +#: stock/views.py:1790 msgid "Add Stock Tracking Entry" msgstr "" @@ -3856,6 +3874,14 @@ msgstr "" msgid "You do not have permission to view this page." msgstr "" +#: templates/404.html:5 templates/404.html:11 +msgid "Page Not Found" +msgstr "" + +#: templates/404.html:14 +msgid "The requested page does not exist" +msgstr "" + #: templates/InvenTree/bom_invalid.html:7 msgid "BOM Waiting Validation" msgstr "" @@ -3904,23 +3930,105 @@ msgstr "" msgid "Searching" msgstr "" +#: templates/InvenTree/settings/build.html:10 +msgid "Build Order Settings" +msgstr "" + +#: templates/InvenTree/settings/build.html:19 +msgid "Reference Prefix" +msgstr "" + +#: templates/InvenTree/settings/build.html:21 +msgid "Prefix for Build Order reference" +msgstr "" + +#: templates/InvenTree/settings/build.html:24 +msgid "Reference Regex" +msgstr "" + +#: templates/InvenTree/settings/build.html:26 +msgid "Regex validator for Build Order reference" +msgstr "" + +#: templates/InvenTree/settings/currency.html:5 +msgid "General Settings" +msgstr "" + +#: templates/InvenTree/settings/currency.html:14 +msgid "Currencies" +msgstr "" + +#: templates/InvenTree/settings/currency.html:17 +msgid "New Currency" +msgstr "" + #: templates/InvenTree/settings/part.html:9 +msgid "Part Settings" +msgstr "" + +#: templates/InvenTree/settings/part.html:14 msgid "Part Parameter Templates" msgstr "" -#: templates/InvenTree/settings/part.html:28 +#: templates/InvenTree/settings/part.html:33 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:53 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/part.html:49 +#: templates/InvenTree/settings/part.html:54 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/theme.html:25 +#: templates/InvenTree/settings/po.html:9 +msgid "Purchase Order Settings" +msgstr "" + +#: templates/InvenTree/settings/settings.html:7 +#: templates/InvenTree/settings/settings.html:13 templates/navbar.html:62 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/so.html:9 +msgid "Sales Order Settings" +msgstr "" + +#: templates/InvenTree/settings/stock.html:9 +msgid "Stock Settings" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:3 +#: templates/InvenTree/settings/user.html:10 +msgid "User Settings" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:6 +msgid "Account" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:9 +msgid "Theme" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:12 +msgid "InvenTree Settings" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:15 +msgid "Currency" +msgstr "" + +#: templates/InvenTree/settings/theme.html:10 +msgid "Theme Settings" +msgstr "" + +#: templates/InvenTree/settings/theme.html:17 +msgid "Color Themes" +msgstr "" + +#: templates/InvenTree/settings/theme.html:29 #, python-format msgid "" "\n" @@ -3930,6 +4038,26 @@ msgid "" "\t" msgstr "" +#: templates/InvenTree/settings/user.html:16 +msgid "User Information" +msgstr "" + +#: templates/InvenTree/settings/user.html:24 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:28 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:32 +msgid "Last Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:36 +msgid "Email Address" +msgstr "" + #: templates/InvenTree/so_outstanding.html:7 msgid "Outstanding Sales Orders" msgstr "" @@ -3974,23 +4102,23 @@ msgstr "" msgid "Submit Bug Report" msgstr "" -#: templates/attachment_table.html:5 +#: templates/attachment_table.html:6 msgid "Add Attachment" msgstr "" -#: templates/attachment_table.html:13 +#: templates/attachment_table.html:15 msgid "File" msgstr "" -#: templates/attachment_table.html:14 +#: templates/attachment_table.html:16 msgid "Comment" msgstr "" -#: templates/attachment_table.html:15 +#: templates/attachment_table.html:17 msgid "Uploaded" msgstr "" -#: templates/attachment_table.html:33 +#: templates/attachment_table.html:35 msgid "Delete attachment" msgstr "" @@ -4079,7 +4207,7 @@ msgstr "" msgid "Optional" msgstr "" -#: templates/js/bom.html:188 templates/js/build.html:119 +#: templates/js/bom.html:188 templates/js/build.html:133 msgid "Available" msgstr "" @@ -4107,11 +4235,11 @@ msgstr "" msgid "Delete BOM Item" msgstr "" -#: templates/js/build.html:23 +#: templates/js/build.html:24 msgid "No builds matching query" msgstr "" -#: templates/js/build.html:108 +#: templates/js/build.html:122 msgid "No parts allocated for" msgstr "" @@ -4449,10 +4577,6 @@ msgstr "" msgid "Admin" msgstr "" -#: templates/navbar.html:62 -msgid "Settings" -msgstr "" - #: templates/navbar.html:63 msgid "Logout" msgstr "" diff --git a/InvenTree/locale/es/LC_MESSAGES/django.po b/InvenTree/locale/es/LC_MESSAGES/django.po index 74b435c791..5c6d3a00c1 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: 2020-10-06 09:31+0000\n" +"POT-Creation-Date: 2020-10-19 21:40+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -26,7 +26,7 @@ msgstr "" msgid "No matching action found" msgstr "" -#: InvenTree/forms.py:102 build/forms.py:37 +#: InvenTree/forms.py:102 build/forms.py:49 msgid "Confirm" msgstr "" @@ -46,34 +46,34 @@ msgstr "" msgid "Apply Theme" msgstr "" -#: InvenTree/helpers.py:339 order/models.py:187 order/models.py:261 +#: InvenTree/helpers.py:348 order/models.py:187 order/models.py:261 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:342 +#: InvenTree/helpers.py:351 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:363 +#: InvenTree/helpers.py:372 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:367 InvenTree/helpers.py:370 InvenTree/helpers.py:373 +#: InvenTree/helpers.py:376 InvenTree/helpers.py:379 InvenTree/helpers.py:382 #, python-brace-format msgid "Invalid group: {g}" msgstr "" -#: InvenTree/helpers.py:378 +#: InvenTree/helpers.py:387 #, python-brace-format msgid "Duplicate serial: {g}" msgstr "" -#: InvenTree/helpers.py:386 +#: InvenTree/helpers.py:395 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:390 +#: InvenTree/helpers.py:399 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" @@ -144,7 +144,7 @@ msgid "Returned" msgstr "" #: InvenTree/status_codes.py:136 -#: order/templates/order/sales_order_base.html:105 +#: order/templates/order/sales_order_base.html:106 msgid "Shipped" msgstr "" @@ -170,7 +170,7 @@ msgstr "" #: InvenTree/status_codes.py:223 build/templates/build/allocate.html:358 #: order/templates/order/sales_order_detail.html:221 -#: part/templates/part/tabs.html:23 templates/js/build.html:126 +#: part/templates/part/tabs.html:23 templates/js/build.html:140 msgid "Allocated" msgstr "" @@ -182,20 +182,25 @@ msgstr "" msgid "IPN must match regex pattern" msgstr "" -#: InvenTree/validators.py:60 +#: InvenTree/validators.py:66 InvenTree/validators.py:80 +#: InvenTree/validators.py:94 +msgid "Reference must match pattern" +msgstr "" + +#: InvenTree/validators.py:102 #, python-brace-format msgid "Illegal character in name ({x})" msgstr "" -#: InvenTree/validators.py:79 InvenTree/validators.py:95 +#: InvenTree/validators.py:121 InvenTree/validators.py:137 msgid "Overage value must not be negative" msgstr "" -#: InvenTree/validators.py:97 +#: InvenTree/validators.py:139 msgid "Overage must not exceed 100%" msgstr "" -#: InvenTree/validators.py:104 +#: InvenTree/validators.py:146 msgid "Overage must be an integer value or a percentage" msgstr "" @@ -243,45 +248,83 @@ msgstr "" msgid "Barcode associated with StockItem" msgstr "" -#: build/forms.py:58 +#: build/forms.py:28 +msgid "Build Order reference" +msgstr "" + +#: build/forms.py:70 msgid "Location of completed parts" msgstr "" -#: build/forms.py:62 +#: build/forms.py:74 msgid "Serial numbers" msgstr "" -#: build/forms.py:64 stock/forms.py:111 +#: build/forms.py:76 stock/forms.py:111 msgid "Enter unique serial numbers (or leave blank)" msgstr "" -#: build/forms.py:67 +#: build/forms.py:79 msgid "Confirm build completion" msgstr "" -#: build/models.py:67 +#: build/models.py:54 build/templates/build/build_base.html:8 +#: build/templates/build/build_base.html:35 +#: part/templates/part/allocation.html:20 +#: stock/templates/stock/item_base.html:214 +msgid "Build Order" +msgstr "" + +#: build/models.py:55 build/templates/build/index.html:6 +#: build/templates/build/index.html:14 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:24 users/models.py:30 +msgid "Build Orders" +msgstr "" + +#: build/models.py:77 msgid "Build quantity must be integer value for trackable parts" msgstr "" -#: build/models.py:73 build/templates/build/build_base.html:72 -msgid "Build Title" +#: build/models.py:86 build/templates/build/build_base.html:73 +msgid "Build Order Reference" msgstr "" -#: build/models.py:76 +#: build/models.py:87 build/templates/build/allocate.html:342 +#: order/templates/order/purchase_order_detail.html:172 +#: templates/js/bom.html:154 +msgid "Reference" +msgstr "" + +#: build/models.py:94 build/templates/build/allocate.html:337 +#: company/templates/company/supplier_part_base.html:53 +#: company/templates/company/supplier_part_detail.html:27 +#: order/templates/order/purchase_order_detail.html:159 +#: part/templates/part/detail.html:51 part/templates/part/set_category.html:14 +#: templates/InvenTree/search.html:147 templates/js/bom.html:147 +#: templates/js/build.html:56 templates/js/company.html:56 +#: templates/js/order.html:159 templates/js/order.html:234 +#: templates/js/part.html:120 templates/js/part.html:203 +#: templates/js/part.html:345 templates/js/part.html:526 +#: templates/js/stock.html:444 templates/js/stock.html:671 +msgid "Description" +msgstr "" + +#: build/models.py:97 msgid "Brief description of the build" msgstr "" -#: build/models.py:84 build/templates/build/build_base.html:93 +#: build/models.py:105 build/templates/build/build_base.html:94 msgid "Parent Build" msgstr "" -#: build/models.py:85 +#: build/models.py:106 msgid "Parent build to which this build is allocated" msgstr "" -#: build/models.py:90 build/templates/build/allocate.html:329 +#: build/models.py:111 build/templates/build/allocate.html:329 #: build/templates/build/auto_allocate.html:19 -#: build/templates/build/build_base.html:77 +#: build/templates/build/build_base.html:78 #: build/templates/build/detail.html:22 order/models.py:501 #: order/templates/order/order_wizard/select_parts.html:30 #: order/templates/order/purchase_order_detail.html:147 @@ -289,72 +332,72 @@ msgstr "" #: part/templates/part/part_app_base.html:7 #: part/templates/part/set_category.html:13 templates/InvenTree/search.html:133 #: templates/js/barcode.html:336 templates/js/bom.html:124 -#: templates/js/build.html:47 templates/js/company.html:137 +#: templates/js/build.html:61 templates/js/company.html:137 #: templates/js/part.html:184 templates/js/part.html:289 #: templates/js/stock.html:421 templates/js/stock.html:977 msgid "Part" msgstr "" -#: build/models.py:99 +#: build/models.py:120 msgid "Select part to build" msgstr "" -#: build/models.py:104 +#: build/models.py:125 msgid "Sales Order Reference" msgstr "" -#: build/models.py:108 +#: build/models.py:129 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:113 +#: build/models.py:134 msgid "Source Location" msgstr "" -#: build/models.py:117 +#: build/models.py:138 msgid "" "Select location to take stock from for this build (leave blank to take from " "any stock location)" msgstr "" -#: build/models.py:121 +#: build/models.py:142 msgid "Build Quantity" msgstr "" -#: build/models.py:124 +#: build/models.py:145 msgid "Number of parts to build" msgstr "" -#: build/models.py:128 part/templates/part/part_base.html:155 +#: build/models.py:149 part/templates/part/part_base.html:155 msgid "Build Status" msgstr "" -#: build/models.py:132 +#: build/models.py:153 msgid "Build status code" msgstr "" -#: build/models.py:136 stock/models.py:387 +#: build/models.py:157 stock/models.py:387 msgid "Batch Code" msgstr "" -#: build/models.py:140 +#: build/models.py:161 msgid "Batch code for this build output" msgstr "" -#: build/models.py:155 build/templates/build/detail.html:55 +#: build/models.py:176 build/templates/build/detail.html:55 #: company/templates/company/supplier_part_base.html:60 #: company/templates/company/supplier_part_detail.html:24 #: part/templates/part/detail.html:80 part/templates/part/part_base.html:102 -#: stock/models.py:381 stock/templates/stock/item_base.html:244 +#: stock/models.py:381 stock/templates/stock/item_base.html:266 msgid "External Link" msgstr "" -#: build/models.py:156 stock/models.py:383 +#: build/models.py:177 stock/models.py:383 msgid "Link to external URL" msgstr "" -#: build/models.py:160 build/templates/build/tabs.html:14 company/models.py:310 -#: company/templates/company/tabs.html:33 order/templates/order/po_tabs.html:15 +#: build/models.py:181 build/templates/build/tabs.html:14 company/models.py:310 +#: company/templates/company/tabs.html:33 order/templates/order/po_tabs.html:18 #: order/templates/order/purchase_order_detail.html:202 #: order/templates/order/so_tabs.html:23 part/templates/part/tabs.html:70 #: stock/forms.py:306 stock/forms.py:338 stock/forms.py:366 stock/models.py:453 @@ -364,41 +407,41 @@ msgstr "" msgid "Notes" msgstr "" -#: build/models.py:161 +#: build/models.py:182 msgid "Extra build notes" msgstr "" -#: build/models.py:467 +#: build/models.py:520 #, python-brace-format msgid "Selected stock item not found in BOM for part '{p}'" msgstr "" -#: build/models.py:470 +#: build/models.py:523 #, python-brace-format msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" msgstr "" -#: build/models.py:476 order/models.py:585 +#: build/models.py:529 order/models.py:585 msgid "StockItem is over-allocated" msgstr "" -#: build/models.py:479 order/models.py:588 +#: build/models.py:532 order/models.py:588 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:482 +#: build/models.py:535 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:511 +#: build/models.py:564 msgid "Build to allocate parts" msgstr "" -#: build/models.py:518 +#: build/models.py:571 msgid "Stock Item to allocate to build" msgstr "" -#: build/models.py:531 +#: build/models.py:584 msgid "Stock quantity to allocate to build" msgstr "" @@ -424,20 +467,20 @@ msgstr "" msgid "New Stock Item" msgstr "" -#: build/templates/build/allocate.html:88 stock/views.py:1428 +#: build/templates/build/allocate.html:88 stock/views.py:1459 msgid "Create new Stock Item" msgstr "" #: build/templates/build/allocate.html:170 #: order/templates/order/sales_order_detail.html:68 #: order/templates/order/sales_order_detail.html:150 stock/models.py:375 -#: stock/templates/stock/item_base.html:156 +#: stock/templates/stock/item_base.html:178 msgid "Serial Number" msgstr "" #: build/templates/build/allocate.html:172 #: build/templates/build/auto_allocate.html:20 -#: build/templates/build/build_base.html:82 +#: build/templates/build/build_base.html:83 #: build/templates/build/detail.html:27 #: company/templates/company/supplier_part_pricing.html:71 #: order/templates/order/order_wizard/select_parts.html:32 @@ -449,16 +492,16 @@ msgstr "" #: part/templates/part/sale_prices.html:80 stock/forms.py:297 #: stock/templates/stock/item_base.html:26 #: stock/templates/stock/item_base.html:32 -#: stock/templates/stock/item_base.html:162 +#: stock/templates/stock/item_base.html:184 #: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.html:338 -#: templates/js/bom.html:162 templates/js/build.html:58 +#: templates/js/bom.html:162 templates/js/build.html:72 #: templates/js/stock.html:690 templates/js/stock.html:905 msgid "Quantity" msgstr "" #: build/templates/build/allocate.html:186 #: build/templates/build/auto_allocate.html:21 stock/forms.py:336 -#: stock/templates/stock/item_base.html:198 +#: stock/templates/stock/item_base.html:220 #: stock/templates/stock/stock_adjust.html:17 #: templates/InvenTree/search.html:183 templates/js/barcode.html:337 #: templates/js/stock.html:518 @@ -466,12 +509,12 @@ msgid "Location" msgstr "" #: build/templates/build/allocate.html:210 -#: order/templates/order/sales_order_detail.html:92 templates/js/build.html:130 +#: order/templates/order/sales_order_detail.html:92 templates/js/build.html:144 msgid "Edit stock allocation" msgstr "" #: build/templates/build/allocate.html:211 -#: order/templates/order/sales_order_detail.html:93 templates/js/build.html:131 +#: order/templates/order/sales_order_detail.html:93 templates/js/build.html:145 msgid "Delete stock allocation" msgstr "" @@ -479,26 +522,6 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: build/templates/build/allocate.html:337 -#: company/templates/company/supplier_part_base.html:53 -#: company/templates/company/supplier_part_detail.html:27 -#: order/templates/order/purchase_order_detail.html:159 -#: part/templates/part/detail.html:51 part/templates/part/set_category.html:14 -#: templates/InvenTree/search.html:147 templates/js/bom.html:147 -#: templates/js/company.html:56 templates/js/order.html:159 -#: templates/js/order.html:234 templates/js/part.html:120 -#: templates/js/part.html:203 templates/js/part.html:345 -#: templates/js/part.html:526 templates/js/stock.html:444 -#: templates/js/stock.html:671 -msgid "Description" -msgstr "" - -#: build/templates/build/allocate.html:342 -#: order/templates/order/purchase_order_detail.html:172 -#: templates/js/bom.html:154 -msgid "Reference" -msgstr "" - #: build/templates/build/allocate.html:347 part/models.py:1401 #: templates/js/part.html:530 templates/js/table_filters.html:121 msgid "Required" @@ -544,81 +567,73 @@ msgstr "" msgid "Stock items will have to be manually allocated" msgstr "" -#: build/templates/build/build_base.html:8 -#: build/templates/build/build_base.html:34 -#: build/templates/build/complete.html:6 -#: stock/templates/stock/item_base.html:223 templates/js/build.html:39 -#: templates/navbar.html:25 -msgid "Build" -msgstr "" - #: build/templates/build/build_base.html:14 -msgid "This build is allocated to Sales Order" +msgid "This Build Order is allocated to Sales Order" msgstr "" #: build/templates/build/build_base.html:19 -msgid "This build is a child of Build" +msgid "This Build Order is a child of Build Order" msgstr "" -#: build/templates/build/build_base.html:39 +#: build/templates/build/build_base.html:37 #: company/templates/company/company_base.html:27 -#: order/templates/order/order_base.html:28 -#: order/templates/order/sales_order_base.html:38 +#: order/templates/order/order_base.html:26 +#: order/templates/order/sales_order_base.html:35 #: part/templates/part/category.html:13 part/templates/part/part_base.html:32 -#: stock/templates/stock/item_base.html:69 +#: stock/templates/stock/item_base.html:76 #: stock/templates/stock/location.html:12 msgid "Admin view" msgstr "" -#: build/templates/build/build_base.html:45 +#: build/templates/build/build_base.html:46 msgid "Edit Build" msgstr "" -#: build/templates/build/build_base.html:49 build/views.py:190 +#: build/templates/build/build_base.html:50 build/views.py:190 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:52 build/views.py:58 +#: build/templates/build/build_base.html:53 build/views.py:58 msgid "Cancel Build" msgstr "" -#: build/templates/build/build_base.html:58 build/views.py:454 +#: build/templates/build/build_base.html:59 build/views.py:456 msgid "Delete Build" msgstr "" -#: build/templates/build/build_base.html:68 build/templates/build/detail.html:9 +#: build/templates/build/build_base.html:69 build/templates/build/detail.html:9 msgid "Build Details" msgstr "" -#: build/templates/build/build_base.html:87 +#: build/templates/build/build_base.html:88 #: build/templates/build/detail.html:42 #: order/templates/order/receive_parts.html:24 -#: stock/templates/stock/item_base.html:276 templates/InvenTree/search.html:175 -#: templates/js/barcode.html:42 templates/js/build.html:63 +#: stock/templates/stock/item_base.html:298 templates/InvenTree/search.html:175 +#: templates/js/barcode.html:42 templates/js/build.html:77 #: templates/js/order.html:164 templates/js/order.html:239 #: templates/js/stock.html:505 templates/js/stock.html:913 msgid "Status" msgstr "" -#: build/templates/build/build_base.html:100 order/models.py:499 +#: build/templates/build/build_base.html:101 order/models.py:499 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:33 #: order/templates/order/sales_order_notes.html:10 #: order/templates/order/sales_order_ship.html:25 #: part/templates/part/allocation.html:27 -#: stock/templates/stock/item_base.html:186 templates/js/order.html:213 +#: stock/templates/stock/item_base.html:208 templates/js/order.html:213 msgid "Sales Order" msgstr "" -#: build/templates/build/build_base.html:106 +#: build/templates/build/build_base.html:107 msgid "BOM Price" msgstr "" -#: build/templates/build/build_base.html:111 +#: build/templates/build/build_base.html:112 msgid "BOM pricing is incomplete" msgstr "" -#: build/templates/build/build_base.html:114 +#: build/templates/build/build_base.html:115 msgid "No pricing information" msgstr "" @@ -626,6 +641,12 @@ msgstr "" msgid "Build Outputs" msgstr "" +#: build/templates/build/complete.html:6 +#: stock/templates/stock/item_base.html:245 templates/js/build.html:40 +#: templates/navbar.html:25 +msgid "Build" +msgstr "" + #: build/templates/build/complete.html:10 msgid "Build order allocation is complete" msgstr "" @@ -673,15 +694,15 @@ msgid "Stock can be taken from any available location." msgstr "" #: build/templates/build/detail.html:48 -#: stock/templates/stock/item_base.html:216 templates/js/stock.html:513 +#: stock/templates/stock/item_base.html:238 templates/js/stock.html:513 #: templates/js/stock.html:920 templates/js/table_filters.html:34 #: templates/js/table_filters.html:100 msgid "Batch" msgstr "" #: build/templates/build/detail.html:61 -#: order/templates/order/order_base.html:100 -#: order/templates/order/sales_order_base.html:99 templates/js/build.html:71 +#: order/templates/order/order_base.html:98 +#: order/templates/order/sales_order_base.html:100 templates/js/build.html:85 msgid "Created" msgstr "" @@ -697,17 +718,11 @@ msgstr "" msgid "No" msgstr "" -#: build/templates/build/detail.html:80 templates/js/build.html:76 +#: build/templates/build/detail.html:80 templates/js/build.html:90 msgid "Completed" msgstr "" -#: build/templates/build/index.html:6 build/templates/build/index.html:14 -#: order/templates/order/so_builds.html:11 order/templates/order/so_tabs.html:9 -#: part/templates/part/tabs.html:31 users/models.py:30 -msgid "Build Orders" -msgstr "" - -#: build/templates/build/index.html:24 +#: build/templates/build/index.html:24 build/views.py:403 msgid "New Build Order" msgstr "" @@ -766,7 +781,7 @@ msgstr "" msgid "Check the confirmation box at the bottom of the list" msgstr "" -#: build/views.py:152 build/views.py:465 +#: build/views.py:152 build/views.py:467 msgid "Unallocate Stock" msgstr "" @@ -774,7 +789,7 @@ msgstr "" msgid "Confirm unallocation of build stock" msgstr "" -#: build/views.py:167 stock/views.py:405 +#: build/views.py:167 stock/views.py:421 msgid "Check the confirmation box" msgstr "" @@ -786,7 +801,7 @@ msgstr "" msgid "Invalid location selected" msgstr "" -#: build/views.py:302 stock/views.py:1621 +#: build/views.py:302 stock/views.py:1653 #, python-brace-format msgid "The following serial numbers already exist: ({sn})" msgstr "" @@ -795,75 +810,67 @@ msgstr "" msgid "Build marked as COMPLETE" msgstr "" -#: build/views.py:403 -msgid "Start new Build" -msgstr "" - -#: build/views.py:429 +#: build/views.py:431 msgid "Created new build" msgstr "" -#: build/views.py:439 +#: build/views.py:441 msgid "Edit Build Details" msgstr "" -#: build/views.py:445 +#: build/views.py:447 msgid "Edited build" msgstr "" -#: build/views.py:471 +#: build/views.py:473 msgid "Removed parts from build allocation" msgstr "" -#: build/views.py:481 +#: build/views.py:483 msgid "Allocate new Part" msgstr "" -#: build/views.py:635 +#: build/views.py:637 msgid "Edit Stock Allocation" msgstr "" -#: build/views.py:640 +#: build/views.py:642 msgid "Updated Build Item" msgstr "" -#: common/models.py:75 +#: common/models.py:107 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:77 +#: common/models.py:109 msgid "Settings value" msgstr "" -#: common/models.py:79 -msgid "Settings description" -msgstr "" - -#: common/models.py:92 +#: common/models.py:122 msgid "Key string must be unique" msgstr "" -#: common/models.py:113 +#: common/models.py:143 msgid "Currency Symbol e.g. $" msgstr "" -#: common/models.py:115 +#: common/models.py:145 msgid "Currency Suffix e.g. AUD" msgstr "" -#: common/models.py:117 +#: common/models.py:147 msgid "Currency Description" msgstr "" -#: common/models.py:119 +#: common/models.py:149 msgid "Currency Value" msgstr "" -#: common/models.py:121 +#: common/models.py:151 msgid "Use this currency as the base currency" msgstr "" -#: common/models.py:204 +#: common/models.py:234 msgid "Default" msgstr "" @@ -879,6 +886,10 @@ msgstr "" msgid "Delete Currency" msgstr "" +#: common/views.py:47 +msgid "Change Setting" +msgstr "" + #: company/models.py:86 company/models.py:87 msgid "Company name" msgstr "" @@ -949,7 +960,7 @@ msgid "Does this company manufacture parts?" msgstr "" #: company/models.py:279 stock/models.py:335 -#: stock/templates/stock/item_base.html:148 +#: stock/templates/stock/item_base.html:164 msgid "Base Part" msgstr "" @@ -1018,16 +1029,16 @@ msgstr "" #: company/templates/company/detail.html:21 #: company/templates/company/supplier_part_base.html:66 #: company/templates/company/supplier_part_detail.html:21 -#: order/templates/order/order_base.html:81 +#: order/templates/order/order_base.html:79 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:170 -#: stock/templates/stock/item_base.html:251 templates/js/company.html:48 +#: stock/templates/stock/item_base.html:273 templates/js/company.html:48 #: templates/js/company.html:162 templates/js/order.html:146 msgid "Supplier" msgstr "" #: company/templates/company/detail.html:26 -#: order/templates/order/sales_order_base.html:80 stock/models.py:370 -#: stock/models.py:371 stock/templates/stock/item_base.html:169 +#: order/templates/order/sales_order_base.html:81 stock/models.py:370 +#: stock/models.py:371 stock/templates/stock/item_base.html:191 #: templates/js/company.html:40 templates/js/order.html:221 msgid "Customer" msgstr "" @@ -1122,7 +1133,8 @@ msgstr "" #: order/templates/order/purchase_orders.html:7 #: order/templates/order/purchase_orders.html:12 #: part/templates/part/orders.html:9 part/templates/part/tabs.html:48 -#: templates/navbar.html:33 users/models.py:31 +#: templates/InvenTree/settings/tabs.html:27 templates/navbar.html:33 +#: users/models.py:31 msgid "Purchase Orders" msgstr "" @@ -1141,7 +1153,8 @@ msgstr "" #: order/templates/order/sales_orders.html:7 #: order/templates/order/sales_orders.html:12 #: part/templates/part/sales_orders.html:9 part/templates/part/tabs.html:56 -#: templates/navbar.html:42 users/models.py:32 +#: templates/InvenTree/settings/tabs.html:30 templates/navbar.html:42 +#: users/models.py:32 msgid "Sales Orders" msgstr "" @@ -1157,7 +1170,7 @@ msgstr "" #: company/templates/company/supplier_part_base.html:6 #: company/templates/company/supplier_part_base.html:19 stock/models.py:344 -#: stock/templates/stock/item_base.html:256 templates/js/company.html:178 +#: stock/templates/stock/item_base.html:278 templates/js/company.html:178 msgid "Supplier Part" msgstr "" @@ -1200,11 +1213,11 @@ msgstr "" msgid "Note" msgstr "" -#: company/templates/company/supplier_part_orders.html:11 +#: company/templates/company/supplier_part_orders.html:9 msgid "Supplier Part Orders" msgstr "" -#: company/templates/company/supplier_part_pricing.html:12 +#: company/templates/company/supplier_part_pricing.html:10 msgid "Pricing Information" msgstr "" @@ -1233,7 +1246,7 @@ msgstr "" msgid "Delete price break" msgstr "" -#: company/templates/company/supplier_part_stock.html:11 +#: company/templates/company/supplier_part_stock.html:9 msgid "Supplier Part Stock" msgstr "" @@ -1244,8 +1257,9 @@ msgstr "" #: company/templates/company/supplier_part_tabs.html:8 #: company/templates/company/tabs.html:12 part/templates/part/tabs.html:18 #: stock/templates/stock/location.html:17 templates/InvenTree/search.html:155 -#: templates/js/part.html:124 templates/js/part.html:372 -#: templates/js/stock.html:452 templates/navbar.html:22 users/models.py:29 +#: templates/InvenTree/settings/tabs.html:21 templates/js/part.html:124 +#: templates/js/part.html:372 templates/js/stock.html:452 +#: templates/navbar.html:22 users/models.py:29 msgid "Stock" msgstr "" @@ -1256,7 +1270,8 @@ msgstr "" #: company/templates/company/tabs.html:9 #: order/templates/order/receive_parts.html:14 part/models.py:294 #: part/templates/part/cat_link.html:7 part/templates/part/category.html:94 -#: part/templates/part/category_tabs.html:6 templates/navbar.html:19 +#: part/templates/part/category_tabs.html:6 +#: templates/InvenTree/settings/tabs.html:18 templates/navbar.html:19 #: templates/stats.html:8 templates/stats.html:17 users/models.py:28 msgid "Parts" msgstr "" @@ -1370,20 +1385,20 @@ msgstr "" msgid "Enabled" msgstr "" -#: order/forms.py:24 order/templates/order/order_base.html:40 +#: order/forms.py:24 order/templates/order/order_base.html:39 msgid "Place order" msgstr "" -#: order/forms.py:35 order/templates/order/order_base.html:47 +#: order/forms.py:35 order/templates/order/order_base.html:46 msgid "Mark order as complete" msgstr "" -#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:52 -#: order/templates/order/sales_order_base.html:52 +#: order/forms.py:46 order/forms.py:57 order/templates/order/order_base.html:51 +#: order/templates/order/sales_order_base.html:53 msgid "Cancel order" msgstr "" -#: order/forms.py:68 order/templates/order/sales_order_base.html:49 +#: order/forms.py:68 order/templates/order/sales_order_base.html:50 msgid "Ship order" msgstr "" @@ -1392,7 +1407,7 @@ msgid "Receive parts to this location" msgstr "" #: order/forms.py:99 -msgid "Enter purchase order number" +msgid "Purchase Order reference" msgstr "" #: order/forms.py:126 @@ -1473,8 +1488,8 @@ msgid "Line item notes" msgstr "" #: order/models.py:466 order/templates/order/order_base.html:9 -#: order/templates/order/order_base.html:23 -#: stock/templates/stock/item_base.html:230 templates/js/order.html:138 +#: order/templates/order/order_base.html:24 +#: stock/templates/stock/item_base.html:252 templates/js/order.html:138 msgid "Purchase Order" msgstr "" @@ -1516,44 +1531,44 @@ msgstr "" msgid "Are you sure you want to delete this attachment?" msgstr "" -#: order/templates/order/order_base.html:36 +#: order/templates/order/order_base.html:35 msgid "Edit order information" msgstr "" -#: order/templates/order/order_base.html:44 +#: order/templates/order/order_base.html:43 msgid "Receive items" msgstr "" -#: order/templates/order/order_base.html:57 +#: order/templates/order/order_base.html:56 msgid "Export order to file" msgstr "" -#: order/templates/order/order_base.html:66 +#: order/templates/order/order_base.html:64 msgid "Purchase Order Details" msgstr "" -#: order/templates/order/order_base.html:71 -#: order/templates/order/sales_order_base.html:70 +#: order/templates/order/order_base.html:69 +#: order/templates/order/sales_order_base.html:71 msgid "Order Reference" msgstr "" -#: order/templates/order/order_base.html:76 -#: order/templates/order/sales_order_base.html:75 +#: order/templates/order/order_base.html:74 +#: order/templates/order/sales_order_base.html:76 msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:87 templates/js/order.html:153 +#: order/templates/order/order_base.html:85 templates/js/order.html:153 msgid "Supplier Reference" msgstr "" -#: order/templates/order/order_base.html:106 +#: order/templates/order/order_base.html:104 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:113 +#: order/templates/order/order_base.html:111 #: order/templates/order/purchase_order_detail.html:182 #: order/templates/order/receive_parts.html:22 -#: order/templates/order/sales_order_base.html:112 +#: order/templates/order/sales_order_base.html:113 msgid "Received" msgstr "" @@ -1598,8 +1613,7 @@ msgid "Select existing purchase orders, or create new orders." msgstr "" #: order/templates/order/order_wizard/select_pos.html:31 -#: order/templates/order/po_tabs.html:5 templates/js/order.html:177 -#: templates/js/order.html:257 +#: templates/js/order.html:177 templates/js/order.html:257 msgid "Items" msgstr "" @@ -1615,7 +1629,16 @@ msgstr "" msgid "Purchase Order Attachments" msgstr "" -#: order/templates/order/po_tabs.html:8 order/templates/order/so_tabs.html:16 +#: order/templates/order/po_received_items.html:11 +#: order/templates/order/po_tabs.html:8 +msgid "Received Items" +msgstr "" + +#: order/templates/order/po_tabs.html:5 +msgid "Line Items" +msgstr "" + +#: order/templates/order/po_tabs.html:11 order/templates/order/so_tabs.html:16 #: part/templates/part/tabs.html:67 stock/templates/stock/tabs.html:32 msgid "Attachments" msgstr "" @@ -1639,7 +1662,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:39 #: order/templates/order/purchase_order_detail.html:119 -#: stock/templates/stock/location.html:21 +#: stock/templates/stock/location.html:22 msgid "Create new stock location" msgstr "" @@ -1690,15 +1713,15 @@ msgstr "" msgid "This SalesOrder has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:57 +#: order/templates/order/sales_order_base.html:58 msgid "Packing List" msgstr "" -#: order/templates/order/sales_order_base.html:65 +#: order/templates/order/sales_order_base.html:66 msgid "Sales Order Details" msgstr "" -#: order/templates/order/sales_order_base.html:86 templates/js/order.html:228 +#: order/templates/order/sales_order_base.html:87 templates/js/order.html:228 msgid "Customer Reference" msgstr "" @@ -1766,7 +1789,7 @@ msgstr "" msgid "Add Purchase Order Attachment" msgstr "" -#: order/views.py:109 order/views.py:157 part/views.py:92 stock/views.py:167 +#: order/views.py:109 order/views.py:157 part/views.py:92 stock/views.py:175 msgid "Added attachment" msgstr "" @@ -1786,7 +1809,7 @@ msgstr "" msgid "Delete Attachment" msgstr "" -#: order/views.py:233 order/views.py:248 stock/views.py:223 +#: order/views.py:233 order/views.py:248 stock/views.py:233 msgid "Deleted attachment" msgstr "" @@ -2266,17 +2289,12 @@ msgstr "" #: part/templates/part/allocation.html:45 #: stock/templates/stock/item_base.html:8 #: stock/templates/stock/item_base.html:58 -#: stock/templates/stock/item_base.html:238 -#: stock/templates/stock/stock_adjust.html:16 templates/js/build.html:112 +#: stock/templates/stock/item_base.html:260 +#: stock/templates/stock/stock_adjust.html:16 templates/js/build.html:126 #: templates/js/stock.html:660 templates/js/stock.html:896 msgid "Stock Item" msgstr "" -#: part/templates/part/allocation.html:20 -#: stock/templates/stock/item_base.html:192 -msgid "Build Order" -msgstr "" - #: part/templates/part/attachments.html:8 msgid "Part Attachments" msgstr "" @@ -2473,7 +2491,7 @@ msgstr "" msgid "Create new Part Category" msgstr "" -#: part/templates/part/category.html:214 stock/views.py:1314 +#: part/templates/part/category.html:214 stock/views.py:1343 msgid "Create new Stock Location" msgstr "" @@ -2644,7 +2662,7 @@ msgstr "" msgid "Add new parameter" msgstr "" -#: part/templates/part/params.html:14 templates/InvenTree/settings/part.html:12 +#: part/templates/part/params.html:14 templates/InvenTree/settings/part.html:17 msgid "New Parameter" msgstr "" @@ -2688,20 +2706,20 @@ msgid "Star this part" msgstr "" #: part/templates/part/part_base.html:49 -#: stock/templates/stock/item_base.html:81 -#: stock/templates/stock/location.html:27 +#: stock/templates/stock/item_base.html:88 +#: stock/templates/stock/location.html:29 msgid "Barcode actions" msgstr "" #: part/templates/part/part_base.html:51 -#: stock/templates/stock/item_base.html:83 -#: stock/templates/stock/location.html:29 +#: stock/templates/stock/item_base.html:90 +#: stock/templates/stock/location.html:31 msgid "Show QR Code" msgstr "" #: part/templates/part/part_base.html:52 -#: stock/templates/stock/item_base.html:84 -#: stock/templates/stock/location.html:30 +#: stock/templates/stock/item_base.html:91 +#: stock/templates/stock/location.html:32 msgid "Print Label" msgstr "" @@ -2830,7 +2848,7 @@ msgstr "" msgid "Used In" msgstr "" -#: part/templates/part/tabs.html:61 stock/templates/stock/item_base.html:282 +#: part/templates/part/tabs.html:61 stock/templates/stock/item_base.html:304 msgid "Tests" msgstr "" @@ -2862,7 +2880,7 @@ msgstr "" msgid "Add part attachment" msgstr "" -#: part/views.py:131 templates/attachment_table.html:30 +#: part/views.py:131 templates/attachment_table.html:32 msgid "Edit attachment" msgstr "" @@ -3111,7 +3129,7 @@ msgstr "" msgid "Add note (required)" msgstr "" -#: stock/forms.py:370 stock/views.py:895 stock/views.py:1092 +#: stock/forms.py:370 stock/views.py:921 stock/views.py:1119 msgid "Confirm stock adjustment" msgstr "" @@ -3176,7 +3194,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:358 stock/templates/stock/item_base.html:177 +#: stock/models.py:358 stock/templates/stock/item_base.html:199 msgid "Installed In" msgstr "" @@ -3386,106 +3404,106 @@ msgid "" "This stock item will be automatically deleted when all stock is depleted." msgstr "" -#: stock/templates/stock/item_base.html:86 templates/js/barcode.html:283 +#: stock/templates/stock/item_base.html:94 templates/js/barcode.html:283 #: templates/js/barcode.html:288 msgid "Unlink Barcode" msgstr "" -#: stock/templates/stock/item_base.html:88 +#: stock/templates/stock/item_base.html:96 msgid "Link Barcode" msgstr "" -#: stock/templates/stock/item_base.html:94 +#: stock/templates/stock/item_base.html:104 msgid "Stock adjustment actions" msgstr "" -#: stock/templates/stock/item_base.html:98 -#: stock/templates/stock/location.html:38 templates/stock_table.html:19 +#: stock/templates/stock/item_base.html:108 +#: stock/templates/stock/location.html:41 templates/stock_table.html:19 msgid "Count stock" msgstr "" -#: stock/templates/stock/item_base.html:99 templates/stock_table.html:17 +#: stock/templates/stock/item_base.html:109 templates/stock_table.html:17 msgid "Add stock" msgstr "" -#: stock/templates/stock/item_base.html:100 templates/stock_table.html:18 +#: stock/templates/stock/item_base.html:110 templates/stock_table.html:18 msgid "Remove stock" msgstr "" -#: stock/templates/stock/item_base.html:102 +#: stock/templates/stock/item_base.html:112 msgid "Transfer stock" msgstr "" -#: stock/templates/stock/item_base.html:104 +#: stock/templates/stock/item_base.html:114 msgid "Serialize stock" msgstr "" -#: stock/templates/stock/item_base.html:108 +#: stock/templates/stock/item_base.html:118 msgid "Assign to customer" msgstr "" -#: stock/templates/stock/item_base.html:111 +#: stock/templates/stock/item_base.html:121 msgid "Return to stock" msgstr "" -#: stock/templates/stock/item_base.html:115 templates/js/stock.html:933 +#: stock/templates/stock/item_base.html:125 templates/js/stock.html:933 msgid "Uninstall stock item" msgstr "" -#: stock/templates/stock/item_base.html:115 +#: stock/templates/stock/item_base.html:125 msgid "Uninstall" msgstr "" -#: stock/templates/stock/item_base.html:122 -#: stock/templates/stock/location.html:35 +#: stock/templates/stock/item_base.html:134 +#: stock/templates/stock/location.html:38 msgid "Stock actions" msgstr "" -#: stock/templates/stock/item_base.html:126 +#: stock/templates/stock/item_base.html:137 msgid "Convert to variant" msgstr "" -#: stock/templates/stock/item_base.html:128 +#: stock/templates/stock/item_base.html:140 msgid "Duplicate stock item" msgstr "" -#: stock/templates/stock/item_base.html:129 +#: stock/templates/stock/item_base.html:142 msgid "Edit stock item" msgstr "" -#: stock/templates/stock/item_base.html:131 +#: stock/templates/stock/item_base.html:145 msgid "Delete stock item" msgstr "" -#: stock/templates/stock/item_base.html:135 +#: stock/templates/stock/item_base.html:151 msgid "Generate test report" msgstr "" -#: stock/templates/stock/item_base.html:143 +#: stock/templates/stock/item_base.html:159 msgid "Stock Item Details" msgstr "" -#: stock/templates/stock/item_base.html:202 +#: stock/templates/stock/item_base.html:224 msgid "No location set" msgstr "" -#: stock/templates/stock/item_base.html:209 -msgid "Unique Identifier" +#: stock/templates/stock/item_base.html:231 +msgid "Barcode Identifier" msgstr "" -#: stock/templates/stock/item_base.html:237 +#: stock/templates/stock/item_base.html:259 msgid "Parent Item" msgstr "" -#: stock/templates/stock/item_base.html:262 +#: stock/templates/stock/item_base.html:284 msgid "Last Updated" msgstr "" -#: stock/templates/stock/item_base.html:267 +#: stock/templates/stock/item_base.html:289 msgid "Last Stocktake" msgstr "" -#: stock/templates/stock/item_base.html:271 +#: stock/templates/stock/item_base.html:293 msgid "No stocktake performed" msgstr "" @@ -3549,50 +3567,50 @@ msgstr "" msgid "All stock items" msgstr "" -#: stock/templates/stock/location.html:31 +#: stock/templates/stock/location.html:33 msgid "Check-in Items" msgstr "" -#: stock/templates/stock/location.html:42 +#: stock/templates/stock/location.html:45 msgid "Location actions" msgstr "" -#: stock/templates/stock/location.html:44 +#: stock/templates/stock/location.html:47 msgid "Edit location" msgstr "" -#: stock/templates/stock/location.html:45 +#: stock/templates/stock/location.html:49 msgid "Delete location" msgstr "" -#: stock/templates/stock/location.html:53 +#: stock/templates/stock/location.html:59 msgid "Location Details" msgstr "" -#: stock/templates/stock/location.html:58 +#: stock/templates/stock/location.html:64 msgid "Location Path" msgstr "" -#: stock/templates/stock/location.html:63 +#: stock/templates/stock/location.html:69 msgid "Location Description" msgstr "" -#: stock/templates/stock/location.html:68 +#: stock/templates/stock/location.html:74 msgid "Sublocations" msgstr "" -#: stock/templates/stock/location.html:73 -#: stock/templates/stock/location.html:88 +#: stock/templates/stock/location.html:79 +#: stock/templates/stock/location.html:94 #: templates/InvenTree/search_stock_items.html:6 templates/stats.html:21 #: templates/stats.html:30 msgid "Stock Items" msgstr "" -#: stock/templates/stock/location.html:78 +#: stock/templates/stock/location.html:84 msgid "Stock Details" msgstr "" -#: stock/templates/stock/location.html:83 +#: stock/templates/stock/location.html:89 #: templates/InvenTree/search_stock_location.html:6 templates/stats.html:25 msgid "Stock Locations" msgstr "" @@ -3605,7 +3623,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1287 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1315 msgid "Convert Stock Item" msgstr "" @@ -3637,214 +3655,214 @@ msgstr "" msgid "Installed Items" msgstr "" -#: stock/views.py:114 +#: stock/views.py:119 msgid "Edit Stock Location" msgstr "" -#: stock/views.py:138 +#: stock/views.py:144 msgid "Stock Location QR code" msgstr "" -#: stock/views.py:156 +#: stock/views.py:163 msgid "Add Stock Item Attachment" msgstr "" -#: stock/views.py:201 +#: stock/views.py:209 msgid "Edit Stock Item Attachment" msgstr "" -#: stock/views.py:217 +#: stock/views.py:226 msgid "Delete Stock Item Attachment" msgstr "" -#: stock/views.py:233 +#: stock/views.py:243 msgid "Assign to Customer" msgstr "" -#: stock/views.py:270 +#: stock/views.py:281 msgid "Return to Stock" msgstr "" -#: stock/views.py:289 +#: stock/views.py:301 msgid "Specify a valid location" msgstr "" -#: stock/views.py:293 +#: stock/views.py:305 msgid "Stock item returned from customer" msgstr "" -#: stock/views.py:305 +#: stock/views.py:317 msgid "Select Label Template" msgstr "" -#: stock/views.py:327 +#: stock/views.py:340 msgid "Select valid label" msgstr "" -#: stock/views.py:389 +#: stock/views.py:404 msgid "Delete All Test Data" msgstr "" -#: stock/views.py:404 +#: stock/views.py:420 msgid "Confirm test data deletion" msgstr "" -#: stock/views.py:424 +#: stock/views.py:440 msgid "Add Test Result" msgstr "" -#: stock/views.py:461 +#: stock/views.py:478 msgid "Edit Test Result" msgstr "" -#: stock/views.py:478 +#: stock/views.py:496 msgid "Delete Test Result" msgstr "" -#: stock/views.py:489 +#: stock/views.py:508 msgid "Select Test Report Template" msgstr "" -#: stock/views.py:503 +#: stock/views.py:523 msgid "Select valid template" msgstr "" -#: stock/views.py:555 +#: stock/views.py:576 msgid "Stock Export Options" msgstr "" -#: stock/views.py:675 +#: stock/views.py:698 msgid "Stock Item QR Code" msgstr "" -#: stock/views.py:700 +#: stock/views.py:724 msgid "Install Stock Item" msgstr "" -#: stock/views.py:799 +#: stock/views.py:824 msgid "Uninstall Stock Items" msgstr "" -#: stock/views.py:906 +#: stock/views.py:932 msgid "Uninstalled stock items" msgstr "" -#: stock/views.py:931 +#: stock/views.py:957 msgid "Adjust Stock" msgstr "" -#: stock/views.py:1040 +#: stock/views.py:1067 msgid "Move Stock Items" msgstr "" -#: stock/views.py:1041 +#: stock/views.py:1068 msgid "Count Stock Items" msgstr "" -#: stock/views.py:1042 +#: stock/views.py:1069 msgid "Remove From Stock" msgstr "" -#: stock/views.py:1043 +#: stock/views.py:1070 msgid "Add Stock Items" msgstr "" -#: stock/views.py:1044 +#: stock/views.py:1071 msgid "Delete Stock Items" msgstr "" -#: stock/views.py:1072 +#: stock/views.py:1099 msgid "Must enter integer value" msgstr "" -#: stock/views.py:1077 +#: stock/views.py:1104 msgid "Quantity must be positive" msgstr "" -#: stock/views.py:1084 +#: stock/views.py:1111 #, python-brace-format msgid "Quantity must not exceed {x}" msgstr "" -#: stock/views.py:1163 +#: stock/views.py:1190 #, python-brace-format msgid "Added stock to {n} items" msgstr "" -#: stock/views.py:1178 +#: stock/views.py:1205 #, python-brace-format msgid "Removed stock from {n} items" msgstr "" -#: stock/views.py:1191 +#: stock/views.py:1218 #, python-brace-format msgid "Counted stock for {n} items" msgstr "" -#: stock/views.py:1219 +#: stock/views.py:1246 msgid "No items were moved" msgstr "" -#: stock/views.py:1222 +#: stock/views.py:1249 #, python-brace-format msgid "Moved {n} items to {dest}" msgstr "" -#: stock/views.py:1241 +#: stock/views.py:1268 #, python-brace-format msgid "Deleted {n} stock items" msgstr "" -#: stock/views.py:1253 +#: stock/views.py:1280 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:1335 +#: stock/views.py:1365 msgid "Serialize Stock" msgstr "" -#: stock/views.py:1527 +#: stock/views.py:1559 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1593 +#: stock/views.py:1625 msgid "Invalid quantity" msgstr "" -#: stock/views.py:1596 +#: stock/views.py:1628 msgid "Quantity cannot be less than zero" msgstr "" -#: stock/views.py:1600 +#: stock/views.py:1632 msgid "Invalid part selection" msgstr "" -#: stock/views.py:1649 +#: stock/views.py:1681 #, python-brace-format msgid "Created {n} new stock items" msgstr "" -#: stock/views.py:1668 stock/views.py:1684 +#: stock/views.py:1700 stock/views.py:1716 msgid "Created new stock item" msgstr "" -#: stock/views.py:1703 +#: stock/views.py:1735 msgid "Delete Stock Location" msgstr "" -#: stock/views.py:1716 +#: stock/views.py:1749 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:1727 +#: stock/views.py:1761 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:1744 +#: stock/views.py:1780 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:1753 +#: stock/views.py:1790 msgid "Add Stock Tracking Entry" msgstr "" @@ -3856,6 +3874,14 @@ msgstr "" msgid "You do not have permission to view this page." msgstr "" +#: templates/404.html:5 templates/404.html:11 +msgid "Page Not Found" +msgstr "" + +#: templates/404.html:14 +msgid "The requested page does not exist" +msgstr "" + #: templates/InvenTree/bom_invalid.html:7 msgid "BOM Waiting Validation" msgstr "" @@ -3904,23 +3930,105 @@ msgstr "" msgid "Searching" msgstr "" +#: templates/InvenTree/settings/build.html:10 +msgid "Build Order Settings" +msgstr "" + +#: templates/InvenTree/settings/build.html:19 +msgid "Reference Prefix" +msgstr "" + +#: templates/InvenTree/settings/build.html:21 +msgid "Prefix for Build Order reference" +msgstr "" + +#: templates/InvenTree/settings/build.html:24 +msgid "Reference Regex" +msgstr "" + +#: templates/InvenTree/settings/build.html:26 +msgid "Regex validator for Build Order reference" +msgstr "" + +#: templates/InvenTree/settings/currency.html:5 +msgid "General Settings" +msgstr "" + +#: templates/InvenTree/settings/currency.html:14 +msgid "Currencies" +msgstr "" + +#: templates/InvenTree/settings/currency.html:17 +msgid "New Currency" +msgstr "" + #: templates/InvenTree/settings/part.html:9 +msgid "Part Settings" +msgstr "" + +#: templates/InvenTree/settings/part.html:14 msgid "Part Parameter Templates" msgstr "" -#: templates/InvenTree/settings/part.html:28 +#: templates/InvenTree/settings/part.html:33 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/part.html:48 +#: templates/InvenTree/settings/part.html:53 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/part.html:49 +#: templates/InvenTree/settings/part.html:54 msgid "Delete Template" msgstr "" -#: templates/InvenTree/settings/theme.html:25 +#: templates/InvenTree/settings/po.html:9 +msgid "Purchase Order Settings" +msgstr "" + +#: templates/InvenTree/settings/settings.html:7 +#: templates/InvenTree/settings/settings.html:13 templates/navbar.html:62 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/so.html:9 +msgid "Sales Order Settings" +msgstr "" + +#: templates/InvenTree/settings/stock.html:9 +msgid "Stock Settings" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:3 +#: templates/InvenTree/settings/user.html:10 +msgid "User Settings" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:6 +msgid "Account" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:9 +msgid "Theme" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:12 +msgid "InvenTree Settings" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:15 +msgid "Currency" +msgstr "" + +#: templates/InvenTree/settings/theme.html:10 +msgid "Theme Settings" +msgstr "" + +#: templates/InvenTree/settings/theme.html:17 +msgid "Color Themes" +msgstr "" + +#: templates/InvenTree/settings/theme.html:29 #, python-format msgid "" "\n" @@ -3930,6 +4038,26 @@ msgid "" "\t" msgstr "" +#: templates/InvenTree/settings/user.html:16 +msgid "User Information" +msgstr "" + +#: templates/InvenTree/settings/user.html:24 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:28 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:32 +msgid "Last Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:36 +msgid "Email Address" +msgstr "" + #: templates/InvenTree/so_outstanding.html:7 msgid "Outstanding Sales Orders" msgstr "" @@ -3974,23 +4102,23 @@ msgstr "" msgid "Submit Bug Report" msgstr "" -#: templates/attachment_table.html:5 +#: templates/attachment_table.html:6 msgid "Add Attachment" msgstr "" -#: templates/attachment_table.html:13 +#: templates/attachment_table.html:15 msgid "File" msgstr "" -#: templates/attachment_table.html:14 +#: templates/attachment_table.html:16 msgid "Comment" msgstr "" -#: templates/attachment_table.html:15 +#: templates/attachment_table.html:17 msgid "Uploaded" msgstr "" -#: templates/attachment_table.html:33 +#: templates/attachment_table.html:35 msgid "Delete attachment" msgstr "" @@ -4079,7 +4207,7 @@ msgstr "" msgid "Optional" msgstr "" -#: templates/js/bom.html:188 templates/js/build.html:119 +#: templates/js/bom.html:188 templates/js/build.html:133 msgid "Available" msgstr "" @@ -4107,11 +4235,11 @@ msgstr "" msgid "Delete BOM Item" msgstr "" -#: templates/js/build.html:23 +#: templates/js/build.html:24 msgid "No builds matching query" msgstr "" -#: templates/js/build.html:108 +#: templates/js/build.html:122 msgid "No parts allocated for" msgstr "" @@ -4449,10 +4577,6 @@ msgstr "" msgid "Admin" msgstr "" -#: templates/navbar.html:62 -msgid "Settings" -msgstr "" - #: templates/navbar.html:63 msgid "Logout" msgstr "" diff --git a/InvenTree/order/forms.py b/InvenTree/order/forms.py index ca61bd77be..1f412271e0 100644 --- a/InvenTree/order/forms.py +++ b/InvenTree/order/forms.py @@ -96,7 +96,7 @@ class EditPurchaseOrderForm(HelperForm): } self.field_placeholder = { - 'reference': _('Enter purchase order number'), + 'reference': _('Purchase Order reference'), } super().__init__(*args, **kwargs) diff --git a/InvenTree/order/templates/order/order_base.html b/InvenTree/order/templates/order/order_base.html index 3b199c1840..d3e1e02437 100644 --- a/InvenTree/order/templates/order/order_base.html +++ b/InvenTree/order/templates/order/order_base.html @@ -20,46 +20,44 @@ src="{% static 'img/blank_image.png' %}" {% endblock %} {% block page_data %} -

{% trans "Purchase Order" %} {% purchase_order_status_label order.status large=True %}

-
-

- {{ order }} +

+ {% trans "Purchase Order" %} {{ order.reference }} {% if user.is_staff and roles.purchase_order.change %} {% endif %} -

+ +

{% purchase_order_status_label order.status large=True %}

+

{{ order.description }}

-

-

-
- {% if roles.purchase_order.change %} - - {% if order.status == PurchaseOrderStatus.PENDING and order.lines.count > 0 %} - - {% elif order.status == PurchaseOrderStatus.PLACED %} - - - {% endif %} - {% if order.status == PurchaseOrderStatus.PENDING or order.status == PurchaseOrderStatus.PLACED %} - - {% endif %} - {% endif %} - -
+
+
+ {% if roles.purchase_order.change %} + + {% if order.status == PurchaseOrderStatus.PENDING and order.lines.count > 0 %} + + {% elif order.status == PurchaseOrderStatus.PLACED %} + + + {% endif %} + {% if order.status == PurchaseOrderStatus.PENDING or order.status == PurchaseOrderStatus.PLACED %} + + {% endif %} + {% endif %} +
-

+
{% endblock %} {% block page_details %} diff --git a/InvenTree/order/templates/order/sales_order_base.html b/InvenTree/order/templates/order/sales_order_base.html index 2eb13eaa64..59ff0eeda8 100644 --- a/InvenTree/order/templates/order/sales_order_base.html +++ b/InvenTree/order/templates/order/sales_order_base.html @@ -27,17 +27,18 @@ src="{% static 'img/blank_image.png' %}" /> {% endblock %} - {% block page_data %} -

{% trans "Sales Order" %} {% sales_order_status_label order.status large=True %}

-
-

- {{ order }} +

+ {% trans "Sales Order" %} {{ order.reference }} {% if user.is_staff and roles.sales_order.change %} {% endif %} -

+ +

+ {% sales_order_status_label order.status large=True %} +

+

{{ order.description }}

diff --git a/InvenTree/part/templatetags/inventree_extras.py b/InvenTree/part/templatetags/inventree_extras.py index 3eca883aea..2c175003d0 100644 --- a/InvenTree/part/templatetags/inventree_extras.py +++ b/InvenTree/part/templatetags/inventree_extras.py @@ -88,7 +88,7 @@ def inventree_docs_url(*args, **kwargs): @register.simple_tag() def inventree_setting(key, *args, **kwargs): - return InvenTreeSetting.get_setting(key) + return InvenTreeSetting.get_setting(key, backup_value=kwargs.get('backup', None)) @register.simple_tag() diff --git a/InvenTree/part/views.py b/InvenTree/part/views.py index 6498774285..a1ce33df51 100644 --- a/InvenTree/part/views.py +++ b/InvenTree/part/views.py @@ -493,9 +493,9 @@ class PartDuplicate(AjaxCreateView): else: initials = super(AjaxCreateView, self).get_initial() - initials['bom_copy'] = str2bool(InvenTreeSetting.get_setting('part_deep_copy', True)) - # Create new entry in InvenTree/common/kvp.yaml? - initials['parameters_copy'] = str2bool(InvenTreeSetting.get_setting('part_deep_copy', True)) + initials['bom_copy'] = str2bool(InvenTreeSetting.get_setting('PART_COPY_BOM', True)) + + initials['parameters_copy'] = str2bool(InvenTreeSetting.get_setting('PART_COPY_PARAMETERS', True)) return initials diff --git a/InvenTree/templates/InvenTree/settings/build.html b/InvenTree/templates/InvenTree/settings/build.html new file mode 100644 index 0000000000..6d19e21f1a --- /dev/null +++ b/InvenTree/templates/InvenTree/settings/build.html @@ -0,0 +1,32 @@ +{% extends "InvenTree/settings/settings.html" %} +{% load i18n %} +{% load inventree_extras %} + +{% block tabs %} +{% include "InvenTree/settings/tabs.html" with tab='build' %} +{% endblock %} + +{% block subtitle %} +{% trans "Build Order Settings" %} +{% endblock %} + +{% block settings %} + +
{% trans "Build Title" %}{{ build.title }}{% trans "Build Order Reference" %}{{ build }}
+ + + + + + + + + + + + + + +
{% trans "Reference Prefix" %}{% inventree_setting 'BUILDORDER_REFERENCE_PREFIX' backup='BO' %}{% trans "Prefix for Build Order reference" %}
{% trans "Reference Regex" %}{% inventree_setting 'BUILDORDER_REFERENCE_REGEX' %}{% trans "Regex validator for Build Order reference" %}
+ +{% endblock %} \ No newline at end of file diff --git a/InvenTree/templates/InvenTree/settings/currency.html b/InvenTree/templates/InvenTree/settings/currency.html index c585011ecd..99948eeeb1 100644 --- a/InvenTree/templates/InvenTree/settings/currency.html +++ b/InvenTree/templates/InvenTree/settings/currency.html @@ -1,4 +1,9 @@ {% extends "InvenTree/settings/settings.html" %} +{% load i18n %} + +{% block subtitle %} +{% trans "General Settings" %} +{% endblock %} {% block tabs %} {% include "InvenTree/settings/tabs.html" with tab='currency' %} @@ -6,10 +11,10 @@ {% block settings %} -

Currencies

+

{% trans "Currencies" %}

- +
diff --git a/InvenTree/templates/InvenTree/settings/other.html b/InvenTree/templates/InvenTree/settings/other.html deleted file mode 100644 index 2f6207b170..0000000000 --- a/InvenTree/templates/InvenTree/settings/other.html +++ /dev/null @@ -1,37 +0,0 @@ -{% extends "InvenTree/settings/settings.html" %} - -{% block tabs %} -{% include "InvenTree/settings/tabs.html" with tab='other' %} -{% endblock %} - -{% block settings %} - -

InvenTree Settings

- -
- - - - - - - - - {% for setting in settings %} - - - - - - {% endfor %} - -
SettingValueDescription
{{ setting.key }}{{ setting.value }}{{ setting.description }}
- -{% endblock %} - -{% block js_ready %} -{{ block.super }} - - $("#other-table").bootstrapTable(); - -{% endblock %} \ No newline at end of file diff --git a/InvenTree/templates/InvenTree/settings/part.html b/InvenTree/templates/InvenTree/settings/part.html index 5eba81a72a..7c028ca6d6 100644 --- a/InvenTree/templates/InvenTree/settings/part.html +++ b/InvenTree/templates/InvenTree/settings/part.html @@ -5,7 +5,12 @@ {% include "InvenTree/settings/tabs.html" with tab='part' %} {% endblock %} +{% block subtitle %} +{% trans "Part Settings" %} +{% endblock %} + {% block settings %} +

{% trans "Part Parameter Templates" %}

diff --git a/InvenTree/templates/InvenTree/settings/po.html b/InvenTree/templates/InvenTree/settings/po.html new file mode 100644 index 0000000000..7d32611404 --- /dev/null +++ b/InvenTree/templates/InvenTree/settings/po.html @@ -0,0 +1,13 @@ +{% extends "InvenTree/settings/settings.html" %} +{% load i18n %} + +{% block tabs %} +{% include "InvenTree/settings/tabs.html" with tab='po' %} +{% endblock %} + +{% block subtitle %} +{% trans "Purchase Order Settings" %} +{% endblock %} + +{% block settings %} +{% endblock %} \ No newline at end of file diff --git a/InvenTree/templates/InvenTree/settings/settings.html b/InvenTree/templates/InvenTree/settings/settings.html index dab7ec277b..90adfd5fed 100644 --- a/InvenTree/templates/InvenTree/settings/settings.html +++ b/InvenTree/templates/InvenTree/settings/settings.html @@ -1,15 +1,16 @@ {% extends "base.html" %} +{% load i18n %} {% load static %} {% block page_title %} -InvenTree | Settings +InvenTree | {% trans "Settings" %} {% endblock %} {% block content %}
-

InvenTree Settings

+

InvenTree {% trans "Settings" %}


@@ -19,6 +20,12 @@ InvenTree | Settings
+

+ {% block subtitle %} + SUBTITLE GOES HERE + {% endblock %} +

+
{% block settings %} {% endblock %}
diff --git a/InvenTree/templates/InvenTree/settings/so.html b/InvenTree/templates/InvenTree/settings/so.html new file mode 100644 index 0000000000..e66fd85148 --- /dev/null +++ b/InvenTree/templates/InvenTree/settings/so.html @@ -0,0 +1,13 @@ +{% extends "InvenTree/settings/settings.html" %} +{% load i18n %} + +{% block tabs %} +{% include "InvenTree/settings/tabs.html" with tab='so' %} +{% endblock %} + +{% block subtitle %} +{% trans "Sales Order Settings" %} +{% endblock %} + +{% block settings %} +{% endblock %} \ No newline at end of file diff --git a/InvenTree/templates/InvenTree/settings/stock.html b/InvenTree/templates/InvenTree/settings/stock.html new file mode 100644 index 0000000000..c3c40087ff --- /dev/null +++ b/InvenTree/templates/InvenTree/settings/stock.html @@ -0,0 +1,13 @@ +{% extends "InvenTree/settings/settings.html" %} +{% load i18n %} + +{% block tabs %} +{% include "InvenTree/settings/tabs.html" with tab='stock' %} +{% endblock %} + +{% block subtitle %} +{% trans "Stock Settings" %} +{% endblock %} + +{% block settings %} +{% endblock %} \ No newline at end of file diff --git a/InvenTree/templates/InvenTree/settings/tabs.html b/InvenTree/templates/InvenTree/settings/tabs.html index 8719d29c81..ee402feb4f 100644 --- a/InvenTree/templates/InvenTree/settings/tabs.html +++ b/InvenTree/templates/InvenTree/settings/tabs.html @@ -1,19 +1,32 @@ +{% load i18n %} + +

{% trans "User Settings" %}

+

{% trans "InvenTree Settings" %}

+ \ No newline at end of file diff --git a/InvenTree/templates/InvenTree/settings/theme.html b/InvenTree/templates/InvenTree/settings/theme.html index 90f148b468..413bb67dd3 100644 --- a/InvenTree/templates/InvenTree/settings/theme.html +++ b/InvenTree/templates/InvenTree/settings/theme.html @@ -6,11 +6,15 @@ {% include "InvenTree/settings/tabs.html" with tab='theme' %} {% endblock %} +{% block subtitle %} +{% trans "Theme Settings" %} +{% endblock %} + {% block settings %}
-

Color Themes

+

{% trans "Color Themes" %}

diff --git a/InvenTree/templates/InvenTree/settings/user.html b/InvenTree/templates/InvenTree/settings/user.html index 7dcef2bc90..28ab8746cb 100644 --- a/InvenTree/templates/InvenTree/settings/user.html +++ b/InvenTree/templates/InvenTree/settings/user.html @@ -1,41 +1,43 @@ {% extends "InvenTree/settings/settings.html" %} +{% load i18n %} + {% block tabs %} {% include "InvenTree/settings/tabs.html" with tab='user' %} {% endblock %} +{% block subtitle %} +{% trans "User Settings" %} +{% endblock %} + {% block settings %} -
-
-

User Information

+
+

{% trans "User Information" %}

+
+
Edit
+
Set Password
-
-
-
Edit
-
Set Password
-
-
-
- - - - - - - - - - - - - - - - - -
Username{{ user.username }}
First Name{{ user.first_name }}
Last Name{{ user.last_name }}
Email Address{{ user.email }}
+ + + + + + + + + + + + + + + + + +
{% trans "Username" %}{{ user.username }}
{% trans "First Name" %}{{ user.first_name }}
{% trans "Last Name" %}{{ user.last_name }}
{% trans "Email Address" %}{{ user.email }}
+
{% endblock %} diff --git a/InvenTree/templates/js/build.html b/InvenTree/templates/js/build.html index e36e15ddeb..6a12b97bfd 100644 --- a/InvenTree/templates/js/build.html +++ b/InvenTree/templates/js/build.html @@ -1,4 +1,5 @@ {% load i18n %} +{% load inventree_extras %} function loadBuildTable(table, options) { // Display a table of Build objects @@ -35,13 +36,26 @@ function loadBuildTable(table, options) { switchable: false, }, { - field: 'title', + field: 'reference', title: '{% trans "Build" %}', sortable: true, + switchable: false, formatter: function(value, row, index, field) { + + var prefix = "{% inventree_setting 'BUILDORDER_REFERENCE_PREFIX' %}"; + + if (prefix) { + value = `${prefix}${value}`; + } + return renderLink(value, '/build/' + row.pk + '/'); } }, + { + field: 'title', + title: '{% trans "Description" %}', + sortable: true, + }, { field: 'part', title: '{% trans "Part" %}', diff --git a/InvenTree/templates/js/order.html b/InvenTree/templates/js/order.html index c16b40583c..4dbfbefa13 100644 --- a/InvenTree/templates/js/order.html +++ b/InvenTree/templates/js/order.html @@ -1,4 +1,5 @@ {% load i18n %} +{% load inventree_extras %} function removeOrderRowFromOrderWizard(e) { /* Remove a part selection from an order form. */ @@ -137,6 +138,13 @@ function loadPurchaseOrderTable(table, options) { field: 'reference', title: '{% trans "Purchase Order" %}', formatter: function(value, row, index, field) { + + var prefix = "{% inventree_setting 'PURCHASEORDER_REFERENCE_PREFIX' %}"; + + if (prefix) { + value = `${prefix}${value}`; + } + return renderLink(value, `/order/purchase-order/${row.pk}/`); } }, @@ -212,6 +220,13 @@ function loadSalesOrderTable(table, options) { field: 'reference', title: '{% trans "Sales Order" %}', formatter: function(value, row, index, field) { + + var prefix = "{% inventree_setting 'SALESORDER_REFERENCE_PREFIX' %}"; + + if (prefix) { + value = `${prefix}${value}`; + } + return renderLink(value, `/order/sales-order/${row.pk}/`); }, },