diff --git a/InvenTree/InvenTree/helpers.py b/InvenTree/InvenTree/helpers.py index da96c7ee79..921a45c112 100644 --- a/InvenTree/InvenTree/helpers.py +++ b/InvenTree/InvenTree/helpers.py @@ -120,6 +120,19 @@ def str2bool(text, test=True): return str(text).lower() in ['0', 'n', 'no', 'none', 'f', 'false', 'off', ] +def is_bool(text): + """ + Determine if a string value 'looks' like a boolean. + """ + + if str2bool(text, True): + return True + elif str2bool(text, False): + return True + else: + return False + + def isNull(text): """ Test if a string 'looks' like a null value. diff --git a/InvenTree/InvenTree/urls.py b/InvenTree/InvenTree/urls.py index 0b4292cbd9..334f285e2c 100644 --- a/InvenTree/InvenTree/urls.py +++ b/InvenTree/InvenTree/urls.py @@ -39,6 +39,8 @@ from .views import IndexView, SearchView, DatabaseStatsView from .views import SettingsView, EditUserView, SetPasswordView, ColorThemeSelectView from .views import DynamicJsView +from common.views import SettingEdit + from .api import InfoView from .api import ActionPluginView @@ -71,6 +73,7 @@ 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'^global/?', SettingsView.as_view(template_name='InvenTree/settings/global.html'), name='settings-global'), 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'^stock/?', SettingsView.as_view(template_name='InvenTree/settings/stock.html'), name='settings-stock'), @@ -78,6 +81,8 @@ settings_urls = [ 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'), + url(r'^(?P\d+)/edit/?', SettingEdit.as_view(), name='setting-edit'), + # Catch any other urls url(r'^.*$', SettingsView.as_view(template_name='InvenTree/settings/user.html'), name='settings'), ] diff --git a/InvenTree/InvenTree/views.py b/InvenTree/InvenTree/views.py index bb7c1e6f5d..b4bc6ebe06 100644 --- a/InvenTree/InvenTree/views.py +++ b/InvenTree/InvenTree/views.py @@ -128,9 +128,13 @@ class InvenTreeRoleMixin(PermissionRequiredMixin): def has_permission(self): """ - Determine if the current user + Determine if the current user has specified permissions """ + if self.permission_required: + # Ignore role-based permissions + return super().has_permission() + roles_required = [] if type(self.role_required) is str: diff --git a/InvenTree/common/apps.py b/InvenTree/common/apps.py index 0535709686..06b825c574 100644 --- a/InvenTree/common/apps.py +++ b/InvenTree/common/apps.py @@ -32,7 +32,7 @@ class CommonConfig(AppConfig): return # Default instance name - instance_name = 'InvenTree Server' + instance_name = InvenTreeSetting.get_default_value('INVENTREE_INSTANCE') # Use the old name if it exists if InvenTreeSetting.objects.filter(key='InstanceName').exists(): @@ -59,12 +59,12 @@ class CommonConfig(AppConfig): from .models import InvenTreeSetting - for key in InvenTreeSetting.DEFAULT_VALUES.keys(): + for key in InvenTreeSetting.GLOBAL_SETTINGS.keys(): try: settings = InvenTreeSetting.objects.filter(key__iexact=key) if settings.count() == 0: - value = InvenTreeSetting.DEFAULT_VALUES[key] + value = InvenTreeSetting.get_default_value(key) print(f"Creating default setting for {key} -> '{value}'") diff --git a/InvenTree/common/forms.py b/InvenTree/common/forms.py index 53493faff0..ba6289221e 100644 --- a/InvenTree/common/forms.py +++ b/InvenTree/common/forms.py @@ -33,6 +33,5 @@ class SettingEditForm(HelperForm): model = InvenTreeSetting fields = [ - 'key', 'value' ] diff --git a/InvenTree/common/models.py b/InvenTree/common/models.py index 31f8e12260..0d3afbe226 100644 --- a/InvenTree/common/models.py +++ b/InvenTree/common/models.py @@ -11,10 +11,12 @@ import decimal from django.db import models from django.conf import settings + from django.utils.translation import ugettext as _ from django.core.validators import MinValueValidator, MaxValueValidator from django.core.exceptions import ValidationError +import InvenTree.helpers import InvenTree.fields @@ -27,34 +29,205 @@ 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', + """ + Dict of all global settings values: - # Part settings - 'PART_IPN_REGEX': '', - 'PART_COPY_BOM': True, - 'PART_COPY_PARAMETERS': True, - 'PART_COPY_TESTS': True, + The key of each item is the name of the value as it appears in the database. - # Stock settings + Each global setting has the following parameters: + + - name: Translatable string name of the setting (required) + - description: Translatable string description of the setting (required) + - default: Default value (optional) + - units: Units of the particular setting (optional) + - validator: Validation function for the setting (optional) - # Build Order settings - 'BUILDORDER_REFERENCE_PREFIX': 'BO', - 'BUILDORDER_REFERENCE_REGEX': '', + The keys must be upper-case + """ - # Purchase Order Settings - 'PURCHASEORDER_REFERENCE_PREFIX': 'PO', + GLOBAL_SETTINGS = { - # Sales Order Settings - 'SALESORDER_REFERENCE_PREFIX': 'SO', + 'INVENTREE_INSTANCE': { + 'name': _('InvenTree Instance Name'), + 'default': 'InvenTree server', + 'description': _('String descriptor for the server instance'), + }, + + 'INVENTREE_COMPANY_NAME': { + 'name': _('Company name'), + 'description': _('Internal company name'), + 'default': 'My company name', + }, + + 'PART_IPN_REGEX': { + 'name': _('IPN Regex'), + 'description': _('Regular expression pattern for matching Part IPN') + }, + + 'PART_COPY_BOM': { + 'name': _('Copy Part BOM Data'), + 'description': _('Copy BOM data by default when duplicating a part'), + 'default': True, + 'validator': bool, + }, + + 'PART_COPY_PARAMETERS': { + 'name': _('Copy Part Parameter Data'), + 'description': _('Copy parameter data by default when duplicating a part'), + 'default': True, + 'validator': bool, + }, + + 'PART_COPY_TESTS': { + 'name': _('Copy Part Test Data'), + 'description': _('Copy test data by default when duplicating a part'), + 'default': True, + 'validator': bool + }, + + 'BUILDORDER_REFERENCE_PREFIX': { + 'name': _('Build Order Reference Prefix'), + 'description': _('Prefix value for build order reference'), + 'default': 'BO', + }, + + 'BUILDORDER_REFERENCE_REGEX': { + 'name': _('Build Order Reference Regex'), + 'description': _('Regular expression pattern for matching build order reference') + }, + + 'SALESORDER_REFERENCE_PREFIX': { + 'name': _('Sales Order Reference Prefix'), + 'description': _('Prefix value for sales order reference'), + }, + + 'PURCHASEORDER_REFERENCE_PREFIX': { + 'name': _('Purchase Order Reference Prefix'), + 'description': _('Prefix value for purchase order reference'), + }, } class Meta: verbose_name = "InvenTree Setting" verbose_name_plural = "InvenTree Settings" + @classmethod + def get_setting_name(cls, key): + """ + Return the name of a particular setting. + + If it does not exist, return an empty string. + """ + + key = str(key).strip().upper() + + if key in cls.GLOBAL_SETTINGS: + setting = cls.GLOBAL_SETTINGS[key] + return setting.get('name', '') + else: + return '' + + @classmethod + def get_setting_description(cls, key): + """ + Return the description for a particular setting. + + If it does not exist, return an empty string. + """ + + key = str(key).strip().upper() + + if key in cls.GLOBAL_SETTINGS: + setting = cls.GLOBAL_SETTINGS[key] + return setting.get('description', '') + else: + return '' + + @classmethod + def get_setting_units(cls, key): + """ + Return the units for a particular setting. + + If it does not exist, return an empty string. + """ + + key = str(key).strip().upper() + + if key in cls.GLOBAL_SETTINGS: + setting = cls.GLOBAL_SETTINGS[key] + return setting.get('units', '') + else: + return '' + + @classmethod + def get_setting_validator(cls, key): + """ + Return the validator for a particular setting. + + If it does not exist, return None + """ + + key = str(key).strip().upper() + + if key in cls.GLOBAL_SETTINGS: + setting = cls.GLOBAL_SETTINGS[key] + return setting.get('validator', None) + else: + return None + + @classmethod + def get_default_value(cls, key): + """ + Return the default value for a particular setting. + + If it does not exist, return an empty string + """ + + key = str(key).strip().upper() + + if key in cls.GLOBAL_SETTINGS: + setting = cls.GLOBAL_SETTINGS[key] + return setting.get('default', '') + else: + return '' + + @classmethod + def get_setting_object(cls, key): + """ + Return an InvenTreeSetting object matching the given key. + + - Key is case-insensitive + - Returns None if no match is made + """ + + key = str(key).strip().upper() + + try: + setting = InvenTreeSetting.objects.filter(key__iexact=key).first() + except (InvenTreeSetting.DoesNotExist): + # Create the setting if it does not exist + setting = InvenTreeSetting.create( + key=key, + value=InvenTreeSetting.get_default_value(key) + ) + + return setting + + @classmethod + def get_setting_pk(cls, key): + """ + Return the primary-key value for a given setting. + + If the setting does not exist, return None + """ + + setting = InvenTreeSetting.get_setting_object(cls) + + if setting: + return setting.pk + else: + return None + @classmethod def get_setting(cls, key, backup_value=None): """ @@ -64,16 +237,13 @@ class InvenTreeSetting(models.Model): # 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) + backup_value = cls.get_default_value(key) - try: - settings = InvenTreeSetting.objects.filter(key__iexact=key) + setting = InvenTreeSetting.get_setting_object(key) - if len(settings) > 0: - return settings[0].value - else: - return backup_value - except InvenTreeSetting.DoesNotExist: + if setting: + return setting.value + else: return backup_value @classmethod @@ -108,6 +278,59 @@ class InvenTreeSetting(models.Model): value = models.CharField(max_length=200, blank=True, unique=False, help_text=_('Settings value')) + @property + def name(self): + return InvenTreeSetting.get_setting_name(self.key) + + @property + def description(self): + return InvenTreeSetting.get_setting_description(self.key) + + @property + def units(self): + return InvenTreeSetting.get_setting_units(self.key) + + def clean(self): + """ + If a validator (or multiple validators) are defined for a particular setting key, + run them against the 'value' field. + """ + + super().clean() + + validator = InvenTreeSetting.get_setting_validator(self.key) + + if validator is not None: + self.run_validator(validator) + + def run_validator(self, validator): + """ + Run a validator against the 'value' field for this InvenTreeSetting object. + """ + + if validator is None: + return + + # If a list of validators is supplied, iterate through each one + if type(validator) in [list, tuple]: + for v in validator: + self.run_validator(v) + + return + + # Check if a 'type' has been specified for this value + if type(validator) == type: + + if validator == bool: + # Value must "look like" a boolean value + if InvenTree.helpers.is_bool(self.value): + # Coerce into either "True" or "False" + self.value = str(InvenTree.helpers.str2bool(self.value)) + else: + raise ValidationError({ + 'value': _('Value must be a boolean value') + }) + 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' @@ -123,6 +346,24 @@ class InvenTreeSetting(models.Model): except InvenTreeSetting.DoesNotExist: pass + def is_bool(self): + """ + Check if this setting is required to be a boolean value + """ + + validator = InvenTreeSetting.get_setting_validator(self.key) + + return validator == bool + + def as_bool(self): + """ + Return the value of this setting converted to a boolean value. + + Warning: Only use on values where is_bool evaluates to true! + """ + + return InvenTree.helpers.str2bool(self.value) + class Currency(models.Model): """ diff --git a/InvenTree/common/templates/common/edit_setting.html b/InvenTree/common/templates/common/edit_setting.html new file mode 100644 index 0000000000..c74ed7d591 --- /dev/null +++ b/InvenTree/common/templates/common/edit_setting.html @@ -0,0 +1,14 @@ +{% extends "modal_form.html" %} +{% load i18n %} + +{% block pre_form_content %} + +{{ block.super }} + +{% endblock %} \ No newline at end of file diff --git a/InvenTree/common/tests.py b/InvenTree/common/tests.py index a5d32dc3d6..e0b6812f40 100644 --- a/InvenTree/common/tests.py +++ b/InvenTree/common/tests.py @@ -35,14 +35,37 @@ class SettingsTest(TestCase): self.client.login(username='username', password='password') + def test_required_values(self): + """ + - Ensure that every global setting has a name. + - Ensure that every global setting has a description. + """ + + for key in InvenTreeSetting.GLOBAL_SETTINGS.keys(): + + setting = InvenTreeSetting.GLOBAL_SETTINGS[key] + + name = setting.get('name', None) + + if name is None: + raise ValueError(f'Missing GLOBAL_SETTING name for {key}') + + description = setting.get('description', None) + + if description is None: + raise ValueError(f'Missing GLOBAL_SETTING description for {key}') + + if not key == key.upper(): + raise ValueError(f"GLOBAL_SETTINGS key '{key}' is not uppercase") + def test_defaults(self): """ Populate the settings with default values """ - for key in InvenTreeSetting.DEFAULT_VALUES.keys(): + for key in InvenTreeSetting.GLOBAL_SETTINGS.keys(): - value = InvenTreeSetting.DEFAULT_VALUES[key] + value = InvenTreeSetting.get_default_value(key) InvenTreeSetting.set_setting(key, value, self.user) diff --git a/InvenTree/common/views.py b/InvenTree/common/views.py index a205b8b915..cfcee8bfa9 100644 --- a/InvenTree/common/views.py +++ b/InvenTree/common/views.py @@ -6,8 +6,10 @@ Django views for interacting with common models from __future__ import unicode_literals from django.utils.translation import ugettext as _ +from django.forms import CheckboxInput from InvenTree.views import AjaxCreateView, AjaxUpdateView, AjaxDeleteView +from InvenTree.helpers import str2bool from . import models from . import forms @@ -46,3 +48,47 @@ class SettingEdit(AjaxUpdateView): model = models.InvenTreeSetting ajax_form_title = _('Change Setting') form_class = forms.SettingEditForm + ajax_template_name = "common/edit_setting.html" + + def get_context_data(self, **kwargs): + """ + Add extra context information about the particular setting object. + """ + + ctx = super().get_context_data(**kwargs) + + setting = self.get_object() + + ctx['key'] = setting.key + ctx['value'] = setting.value + ctx['name'] = models.InvenTreeSetting.get_setting_name(setting.key) + ctx['description'] = models.InvenTreeSetting.get_setting_description(setting.key) + + return ctx + + def get_form(self): + """ + Override default get_form behaviour + """ + + form = super().get_form() + + setting = self.get_object() + + if setting.is_bool(): + form.fields['value'].widget = CheckboxInput() + + self.object.value = str2bool(setting.value) + form.fields['value'].value = str2bool(setting.value) + + name = models.InvenTreeSetting.get_setting_name(setting.key) + + if name: + form.fields['value'].label = name + + description = models.InvenTreeSetting.get_setting_description(setting.key) + + if description: + form.fields['value'].help_text = description + + return form diff --git a/InvenTree/company/migrations/0024_unique_name_email_constraint.py b/InvenTree/company/migrations/0024_unique_name_email_constraint.py new file mode 100644 index 0000000000..3a8781f98d --- /dev/null +++ b/InvenTree/company/migrations/0024_unique_name_email_constraint.py @@ -0,0 +1,38 @@ +from django.db import migrations, models + + +def make_empty_email_field_null(apps, schema_editor): + Company = apps.get_model('company', 'Company') + for company in Company.objects.all(): + if company.email == '': + company.email = None + company.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('company', '0023_auto_20200808_0715'), + ] + + operations = [ + # Allow email field to be NULL + migrations.AlterField( + model_name='company', + name='email', + field=models.EmailField(blank=True, help_text='Contact email address', max_length=254, null=True, unique=False, verbose_name='Email'), + ), + # Convert empty email string to NULL + migrations.RunPython(make_empty_email_field_null), + # Remove unique constraint on name field + migrations.AlterField( + model_name='company', + name='name', + field=models.CharField(help_text='Company name', max_length=100, verbose_name='Company name'), + ), + # Add unique constraint on name/email pair + migrations.AddConstraint( + model_name='company', + constraint=models.UniqueConstraint(fields=('name', 'email'), name='unique_name_email_pair'), + ), + ] diff --git a/InvenTree/company/models.py b/InvenTree/company/models.py index f1e249fd58..b9fed2ee7b 100644 --- a/InvenTree/company/models.py +++ b/InvenTree/company/models.py @@ -12,7 +12,7 @@ import math from django.utils.translation import gettext_lazy as _ from django.core.validators import MinValueValidator from django.db import models -from django.db.models import Sum, Q +from django.db.models import Sum, Q, UniqueConstraint from django.apps import apps from django.urls import reverse @@ -81,8 +81,11 @@ class Company(models.Model): class Meta: ordering = ['name', ] + constraints = [ + UniqueConstraint(fields=['name', 'email'], name='unique_name_email_pair') + ] - name = models.CharField(max_length=100, blank=False, unique=True, + name = models.CharField(max_length=100, blank=False, help_text=_('Company name'), verbose_name=_('Company name')) @@ -98,7 +101,8 @@ class Company(models.Model): verbose_name=_('Phone number'), blank=True, help_text=_('Contact phone number')) - email = models.EmailField(blank=True, verbose_name=_('Email'), help_text=_('Contact email address')) + email = models.EmailField(blank=True, null=True, + verbose_name=_('Email'), help_text=_('Contact email address')) contact = models.CharField(max_length=100, verbose_name=_('Contact'), diff --git a/InvenTree/company/templates/company/company_base.html b/InvenTree/company/templates/company/company_base.html index f20107277d..cdca22fa36 100644 --- a/InvenTree/company/templates/company/company_base.html +++ b/InvenTree/company/templates/company/company_base.html @@ -23,23 +23,27 @@ InvenTree | {% trans "Company" %} - {{ company.name }}

{{ company.name }} - {% if user.is_staff and roles.company.change %} + {% if user.is_staff and perms.company.change_company %} {% endif %}

{{ company.description }}

- {% if company.is_supplier %} + {% if company.is_supplier and roles.purchase_order.add %} {% endif %} + {% if perms.company.change_company %} + {% endif %} + {% if perms.company.delete_company %} + {% endif %}
{% endblock %} diff --git a/InvenTree/company/templates/company/detail_part.html b/InvenTree/company/templates/company/detail_part.html index e07304dd13..463bf5814d 100644 --- a/InvenTree/company/templates/company/detail_part.html +++ b/InvenTree/company/templates/company/detail_part.html @@ -9,17 +9,25 @@
+{% if roles.purchase_order.change %}
+ {% if roles.purchase_order.add %} + {% endif %}
+{% endif %}
diff --git a/InvenTree/company/templates/company/index.html b/InvenTree/company/templates/company/index.html index 253085568e..f110950c0b 100644 --- a/InvenTree/company/templates/company/index.html +++ b/InvenTree/company/templates/company/index.html @@ -12,12 +12,13 @@ InvenTree | {% trans "Supplier List" %}

{{ title }}


+{% if pagetype == 'manufacturers' and roles.purchase_order.add or pagetype == 'suppliers' and roles.purchase_order.add or pagetype == 'customers' and roles.sales_order.add %}
- +{% endif %}
diff --git a/InvenTree/company/templates/company/purchase_orders.html b/InvenTree/company/templates/company/purchase_orders.html index bab5cd4bce..a0ef1612fa 100644 --- a/InvenTree/company/templates/company/purchase_orders.html +++ b/InvenTree/company/templates/company/purchase_orders.html @@ -9,6 +9,7 @@

{% trans "Purchase Orders" %}


+{% if roles.purchase_order.add %}
@@ -17,6 +18,7 @@
+{% endif %}
diff --git a/InvenTree/company/templates/company/sales_orders.html b/InvenTree/company/templates/company/sales_orders.html index 0b64bed2f5..03c64d5b88 100644 --- a/InvenTree/company/templates/company/sales_orders.html +++ b/InvenTree/company/templates/company/sales_orders.html @@ -9,6 +9,7 @@

{% trans "Sales Orders" %}


+{% if roles.sales_order.add %}
@@ -17,6 +18,7 @@
+{% endif %}
diff --git a/InvenTree/company/templates/company/supplier_part_base.html b/InvenTree/company/templates/company/supplier_part_base.html index ca09caee93..7476a7c606 100644 --- a/InvenTree/company/templates/company/supplier_part_base.html +++ b/InvenTree/company/templates/company/supplier_part_base.html @@ -18,19 +18,27 @@ src="{% static 'img/blank_image.png' %}" {% block page_data %}

{% trans "Supplier Part" %}

{{ part.supplier.name }} - {{ part.SKU }}

+ +{% if roles.purchase_order.change %}
+ {% if roles.purchase_order.add %} + {% endif %} + {% if roles.purchase_order.delete %} + {% endif %}
+{% endif %} + {% endblock %} {% block page_details %} diff --git a/InvenTree/company/templates/company/supplier_part_orders.html b/InvenTree/company/templates/company/supplier_part_orders.html index 5c2ea6d1d4..29eb8ee874 100644 --- a/InvenTree/company/templates/company/supplier_part_orders.html +++ b/InvenTree/company/templates/company/supplier_part_orders.html @@ -10,11 +10,13 @@
+{% if roles.purchase_order.add %}
+{% endif %}
diff --git a/InvenTree/company/templates/company/supplier_part_pricing.html b/InvenTree/company/templates/company/supplier_part_pricing.html index f9f5063190..97022024f5 100644 --- a/InvenTree/company/templates/company/supplier_part_pricing.html +++ b/InvenTree/company/templates/company/supplier_part_pricing.html @@ -11,9 +11,11 @@
+{% if roles.purchase_order.add %}
+{% endif %}
diff --git a/InvenTree/company/test_views.py b/InvenTree/company/test_views.py index b9bb69e503..d895c18957 100644 --- a/InvenTree/company/test_views.py +++ b/InvenTree/company/test_views.py @@ -6,6 +6,7 @@ from __future__ import unicode_literals from django.test import TestCase from django.urls import reverse from django.contrib.auth import get_user_model +from django.contrib.auth.models import Group from .models import SupplierPart @@ -25,7 +26,24 @@ class CompanyViewTest(TestCase): # Create a user User = get_user_model() - User.objects.create_user('username', 'user@email.com', 'password') + self.user = User.objects.create_user( + username='username', + email='user@email.com', + password='password' + ) + + # Put the user into a group with the correct permissions + group = Group.objects.create(name='mygroup') + self.user.groups.add(group) + + # Give the group *all* the permissions! + for rule in group.rule_sets.all(): + rule.can_view = True + rule.can_change = True + rule.can_add = True + rule.can_delete = True + + rule.save() self.client.login(username='username', password='password') diff --git a/InvenTree/company/views.py b/InvenTree/company/views.py index 9ef6adea0e..dce341d184 100644 --- a/InvenTree/company/views.py +++ b/InvenTree/company/views.py @@ -14,6 +14,7 @@ from django.forms import HiddenInput from InvenTree.views import AjaxCreateView, AjaxUpdateView, AjaxDeleteView from InvenTree.helpers import str2bool +from InvenTree.views import InvenTreeRoleMixin from common.models import Currency @@ -29,7 +30,7 @@ from .forms import EditSupplierPartForm from .forms import EditPriceBreakForm -class CompanyIndex(ListView): +class CompanyIndex(InvenTreeRoleMixin, ListView): """ View for displaying list of companies """ @@ -37,6 +38,7 @@ class CompanyIndex(ListView): template_name = 'company/index.html' context_object_name = 'companies' paginate_by = 50 + permission_required = 'company.view_company' def get_context_data(self, **kwargs): @@ -116,8 +118,8 @@ class CompanyNotes(UpdateView): context_object_name = 'company' template_name = 'company/notes.html' model = Company - fields = ['notes'] + permission_required = 'company.view_company' def get_success_url(self): return reverse('company-notes', kwargs={'pk': self.get_object().id}) @@ -137,6 +139,7 @@ class CompanyDetail(DetailView): template_name = 'company/detail.html' queryset = Company.objects.all() model = Company + permission_required = 'company.view_company' def get_context_data(self, **kwargs): ctx = super().get_context_data(**kwargs) @@ -150,6 +153,7 @@ class CompanyImage(AjaxUpdateView): ajax_template_name = 'modal_form.html' ajax_form_title = _('Update Company Image') form_class = CompanyImageForm + permission_required = 'company.change_company' def get_data(self): return { @@ -164,6 +168,7 @@ class CompanyEdit(AjaxUpdateView): context_object_name = 'company' ajax_template_name = 'modal_form.html' ajax_form_title = _('Edit Company') + permission_required = 'company.change_company' def get_data(self): return { @@ -177,6 +182,7 @@ class CompanyCreate(AjaxCreateView): context_object_name = 'company' form_class = EditCompanyForm ajax_template_name = 'modal_form.html' + permission_required = 'company.add_company' def get_form_title(self): @@ -230,6 +236,7 @@ class CompanyDelete(AjaxDeleteView): ajax_template_name = 'company/delete.html' ajax_form_title = _('Delete Company') context_object_name = 'company' + permission_required = 'company.delete_company' def get_data(self): return { @@ -243,6 +250,7 @@ class SupplierPartDetail(DetailView): template_name = 'company/supplier_part_detail.html' context_object_name = 'part' queryset = SupplierPart.objects.all() + permission_required = 'purchase_order.view' def get_context_data(self, **kwargs): ctx = super().get_context_data(**kwargs) @@ -258,6 +266,7 @@ class SupplierPartEdit(AjaxUpdateView): form_class = EditSupplierPartForm ajax_template_name = 'modal_form.html' ajax_form_title = _('Edit Supplier Part') + role_required = 'purchase_order.change' class SupplierPartCreate(AjaxCreateView): @@ -268,6 +277,7 @@ class SupplierPartCreate(AjaxCreateView): ajax_template_name = 'modal_form.html' ajax_form_title = _('Create new Supplier Part') context_object_name = 'part' + role_required = 'purchase_order.add' def get_form(self): """ Create Form instance to create a new SupplierPart object. @@ -327,6 +337,7 @@ class SupplierPartDelete(AjaxDeleteView): success_url = '/supplier/' ajax_template_name = 'company/partdelete.html' ajax_form_title = _('Delete Supplier Part') + role_required = 'purchase_order.delete' parts = [] @@ -398,6 +409,7 @@ class PriceBreakCreate(AjaxCreateView): form_class = EditPriceBreakForm ajax_form_title = _('Add Price Break') ajax_template_name = 'modal_form.html' + role_required = 'purchase_order.add' def get_data(self): return { @@ -440,6 +452,7 @@ class PriceBreakEdit(AjaxUpdateView): form_class = EditPriceBreakForm ajax_form_title = _('Edit Price Break') ajax_template_name = 'modal_form.html' + role_required = 'purchase_order.change' def get_form(self): @@ -455,3 +468,4 @@ class PriceBreakDelete(AjaxDeleteView): model = SupplierPriceBreak ajax_form_title = _("Delete Price Break") ajax_template_name = 'modal_delete_form.html' + role_required = 'purchase_order.delete' diff --git a/InvenTree/locale/de/LC_MESSAGES/django.po b/InvenTree/locale/de/LC_MESSAGES/django.po index 10f223fcd4..12f23f2b25 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-19 21:40+0000\n" +"POT-Creation-Date: 2020-10-25 10:54+0000\n" "PO-Revision-Date: 2020-05-03 11:32+0200\n" "Last-Translator: Christian Schlüter \n" "Language-Team: C \n" @@ -49,35 +49,35 @@ msgstr "" msgid "Apply Theme" msgstr "" -#: InvenTree/helpers.py:348 order/models.py:187 order/models.py:261 +#: InvenTree/helpers.py:361 order/models.py:187 order/models.py:261 msgid "Invalid quantity provided" msgstr "Keine gültige Menge" -#: InvenTree/helpers.py:351 +#: InvenTree/helpers.py:364 msgid "Empty serial number string" msgstr "Keine Seriennummer angegeben" -#: InvenTree/helpers.py:372 +#: InvenTree/helpers.py:385 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "Doppelte Seriennummer: {n}" -#: InvenTree/helpers.py:376 InvenTree/helpers.py:379 InvenTree/helpers.py:382 +#: InvenTree/helpers.py:389 InvenTree/helpers.py:392 InvenTree/helpers.py:395 #, python-brace-format msgid "Invalid group: {g}" msgstr "Ungültige Gruppe: {g}" -#: InvenTree/helpers.py:387 +#: InvenTree/helpers.py:400 #, fuzzy, python-brace-format #| msgid "Duplicate serial: {n}" msgid "Duplicate serial: {g}" msgstr "Doppelte Seriennummer: {n}" -#: InvenTree/helpers.py:395 +#: InvenTree/helpers.py:408 msgid "No serial numbers found" msgstr "Keine Seriennummern gefunden" -#: InvenTree/helpers.py:399 +#: InvenTree/helpers.py:412 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" @@ -92,7 +92,7 @@ msgstr "Datei zum Anhängen auswählen" msgid "File comment" msgstr "Datei-Kommentar" -#: InvenTree/models.py:68 templates/js/stock.html:699 +#: InvenTree/models.py:68 templates/js/stock.html:700 msgid "User" msgstr "Benutzer" @@ -177,7 +177,7 @@ msgid "Rejected" msgstr "" #: InvenTree/status_codes.py:223 build/templates/build/allocate.html:358 -#: order/templates/order/sales_order_detail.html:221 +#: order/templates/order/sales_order_detail.html:223 #: part/templates/part/tabs.html:23 templates/js/build.html:140 msgid "Allocated" msgstr "Zugeordnet" @@ -214,7 +214,7 @@ msgstr "Überschuss darf 100% nicht überschreiten" msgid "Overage must be an integer value or a percentage" msgstr "Überschuss muss eine Ganzzahl oder ein Prozentwert sein" -#: InvenTree/views.py:703 +#: InvenTree/views.py:707 msgid "Database Statistics" msgstr "Datenbankstatistiken" @@ -298,7 +298,7 @@ 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 +#: templates/InvenTree/settings/tabs.html:28 users/models.py:30 msgid "Build Orders" msgstr "Bauaufträge" @@ -321,16 +321,16 @@ 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_base.html:61 #: 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/order.html:167 templates/js/order.html:249 #: 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 +#: templates/js/stock.html:445 templates/js/stock.html:672 msgid "Description" msgstr "Beschreibung" @@ -358,7 +358,7 @@ msgstr "Eltern-Bau, dem dieser Bau zugewiesen ist" #: templates/js/barcode.html:336 templates/js/bom.html:124 #: 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 +#: templates/js/stock.html:421 templates/js/stock.html:978 msgid "Part" msgstr "Teil" @@ -411,7 +411,7 @@ msgid "Batch code for this build output" msgstr "Chargennummer für diese Bau-Ausgabe" #: build/models.py:176 build/templates/build/detail.html:55 -#: company/templates/company/supplier_part_base.html:60 +#: company/templates/company/supplier_part_base.html:68 #: company/templates/company/supplier_part_detail.html:24 #: part/templates/part/detail.html:80 part/templates/part/part_base.html:102 #: stock/models.py:381 stock/templates/stock/item_base.html:266 @@ -422,14 +422,14 @@ msgstr "Externer Link" msgid "Link to external URL" msgstr "Link zu einer externen URL" -#: build/models.py:181 build/templates/build/tabs.html:14 company/models.py:310 +#: build/models.py:181 build/templates/build/tabs.html:14 company/models.py:314 #: 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 #: stock/models.py:1404 stock/templates/stock/tabs.html:26 #: templates/js/barcode.html:391 templates/js/bom.html:223 -#: templates/js/stock.html:116 templates/js/stock.html:543 +#: templates/js/stock.html:116 templates/js/stock.html:544 msgid "Notes" msgstr "Notizen" @@ -473,7 +473,7 @@ msgid "Stock quantity to allocate to build" msgstr "Lagerobjekt-Anzahl dem Bau zuweisen" #: build/templates/build/allocate.html:17 -#: company/templates/company/detail_part.html:18 order/views.py:804 +#: company/templates/company/detail_part.html:22 order/views.py:804 #: part/templates/part/category.html:122 msgid "Order Parts" msgstr "Teile bestellen" @@ -499,8 +499,8 @@ 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 +#: order/templates/order/sales_order_detail.html:70 +#: order/templates/order/sales_order_detail.html:152 stock/models.py:375 #: stock/templates/stock/item_base.html:178 msgid "Serial Number" msgstr "Seriennummer" @@ -509,11 +509,11 @@ msgstr "Seriennummer" #: build/templates/build/auto_allocate.html:20 #: build/templates/build/build_base.html:83 #: build/templates/build/detail.html:27 -#: company/templates/company/supplier_part_pricing.html:71 +#: company/templates/company/supplier_part_pricing.html:73 #: order/templates/order/order_wizard/select_parts.html:32 #: order/templates/order/purchase_order_detail.html:177 -#: order/templates/order/sales_order_detail.html:70 -#: order/templates/order/sales_order_detail.html:152 +#: order/templates/order/sales_order_detail.html:72 +#: order/templates/order/sales_order_detail.html:154 #: part/templates/part/allocation.html:16 #: part/templates/part/allocation.html:49 #: part/templates/part/sale_prices.html:80 stock/forms.py:297 @@ -522,7 +522,7 @@ msgstr "Seriennummer" #: 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:72 -#: templates/js/stock.html:690 templates/js/stock.html:905 +#: templates/js/stock.html:691 templates/js/stock.html:906 msgid "Quantity" msgstr "Anzahl" @@ -531,17 +531,17 @@ msgstr "Anzahl" #: 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 +#: templates/js/stock.html:519 msgid "Location" msgstr "Standort" #: build/templates/build/allocate.html:210 -#: order/templates/order/sales_order_detail.html:92 templates/js/build.html:144 +#: order/templates/order/sales_order_detail.html:94 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:145 +#: order/templates/order/sales_order_detail.html:95 templates/js/build.html:145 msgid "Delete stock allocation" msgstr "Zuweisung löschen" @@ -559,12 +559,12 @@ msgid "Assigned" msgstr "Zugewiesen" #: build/templates/build/allocate.html:394 -#: order/templates/order/sales_order_detail.html:271 +#: order/templates/order/sales_order_detail.html:273 msgid "Buy parts" msgstr "Teile kaufen" #: build/templates/build/allocate.html:398 -#: order/templates/order/sales_order_detail.html:275 +#: order/templates/order/sales_order_detail.html:277 msgid "Build parts" msgstr "Bauteile" @@ -650,8 +650,8 @@ msgstr "Bau-Status" #: order/templates/order/receive_parts.html:24 #: 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 +#: templates/js/order.html:172 templates/js/order.html:254 +#: templates/js/stock.html:506 templates/js/stock.html:914 msgid "Status" msgstr "Status" @@ -661,7 +661,7 @@ msgstr "Status" #: 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:208 templates/js/order.html:213 +#: stock/templates/stock/item_base.html:208 templates/js/order.html:221 msgid "Sales Order" msgstr "Bestellung" @@ -736,8 +736,8 @@ 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:238 templates/js/stock.html:513 -#: templates/js/stock.html:920 templates/js/table_filters.html:34 +#: stock/templates/stock/item_base.html:238 templates/js/stock.html:514 +#: templates/js/stock.html:921 templates/js/table_filters.html:34 #: templates/js/table_filters.html:100 msgid "Batch" msgstr "Los" @@ -881,175 +881,287 @@ msgstr "Teilzuordnung bearbeiten" msgid "Updated Build Item" msgstr "Bauobjekt aktualisiert" -#: common/models.py:107 +#: common/models.py:51 +#, fuzzy +#| msgid "Instance Name" +msgid "InvenTree Instance Name" +msgstr "Instanzname" + +#: common/models.py:53 +#, fuzzy +#| msgid "Brief description of the build" +msgid "String descriptor for the server instance" +msgstr "Kurze Beschreibung des Baus" + +#: common/models.py:57 company/models.py:89 company/models.py:90 +msgid "Company name" +msgstr "Firmenname" + +#: common/models.py:58 +#, fuzzy +#| msgid "Company name" +msgid "Internal company name" +msgstr "Firmenname" + +#: common/models.py:63 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:64 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:68 +#, fuzzy +#| msgid "Import BOM data" +msgid "Copy Part BOM Data" +msgstr "Stückliste importieren" + +#: common/models.py:69 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:75 +#, fuzzy +#| msgid "Parameters" +msgid "Copy Part Parameter Data" +msgstr "Parameter" + +#: common/models.py:76 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:82 +#, fuzzy +#| msgid "Parameters" +msgid "Copy Part Test Data" +msgstr "Parameter" + +#: common/models.py:83 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:89 +#, fuzzy +#| msgid "Order Reference" +msgid "Build Order Reference Prefix" +msgstr "Bestellreferenz" + +#: common/models.py:90 +#, fuzzy +#| msgid "Order reference" +msgid "Prefix value for build order reference" +msgstr "Bestell-Referenz" + +#: common/models.py:95 +#, fuzzy +#| msgid "Order Reference" +msgid "Build Order Reference Regex" +msgstr "Bestellreferenz" + +#: common/models.py:96 +msgid "Regular expression pattern for matching build order reference" +msgstr "" + +#: common/models.py:100 +#, fuzzy +#| msgid "Sales Order Reference" +msgid "Sales Order Reference Prefix" +msgstr "Bestellungsreferenz" + +#: common/models.py:101 +#, fuzzy +#| msgid "Order reference" +msgid "Prefix value for sales order reference" +msgstr "Bestell-Referenz" + +#: common/models.py:105 +#, fuzzy +#| msgid "Order reference" +msgid "Purchase Order Reference Prefix" +msgstr "Bestell-Referenz" + +#: common/models.py:106 +#, fuzzy +#| msgid "Order reference" +msgid "Prefix value for purchase order reference" +msgstr "Bestell-Referenz" + +#: common/models.py:272 msgid "Settings key (must be unique - case insensitive" msgstr "" "Einstellungs-Schlüssel (muss einzigartig sein, Groß-/ Kleinschreibung wird " "nicht beachtet)" -#: common/models.py:109 +#: common/models.py:274 msgid "Settings value" msgstr "Einstellungs-Wert" -#: common/models.py:122 +#: common/models.py:326 +msgid "Value must be a boolean value" +msgstr "" + +#: common/models.py:340 msgid "Key string must be unique" msgstr "Schlüsseltext muss eindeutig sein" -#: common/models.py:143 +#: common/models.py:379 msgid "Currency Symbol e.g. $" msgstr "Währungs-Symbol (z.B. €)" -#: common/models.py:145 +#: common/models.py:381 msgid "Currency Suffix e.g. AUD" msgstr "Währungs-Suffix (z.B. EUR)" -#: common/models.py:147 +#: common/models.py:383 msgid "Currency Description" msgstr "Währungs-Beschreibung" -#: common/models.py:149 +#: common/models.py:385 msgid "Currency Value" msgstr "Währungs-Wert" -#: common/models.py:151 +#: common/models.py:387 msgid "Use this currency as the base currency" msgstr "Benutze diese Währung als Basis-Währung" -#: common/models.py:234 +#: common/models.py:470 #, fuzzy #| msgid "Default Location" msgid "Default" msgstr "Standard-Lagerort" -#: common/views.py:21 +#: common/templates/common/edit_setting.html:11 +#, fuzzy +#| msgid "Currency Value" +msgid "Current value" +msgstr "Währungs-Wert" + +#: common/views.py:23 msgid "Create new Currency" msgstr "Neues Währung hinzufügen" -#: common/views.py:29 +#: common/views.py:31 msgid "Edit Currency" msgstr "Währung bearbeiten" -#: common/views.py:36 +#: common/views.py:38 msgid "Delete Currency" msgstr "Währung entfernen" -#: common/views.py:47 +#: common/views.py:49 #, fuzzy #| msgid "Settings" msgid "Change Setting" msgstr "Einstellungen" -#: company/models.py:86 company/models.py:87 -msgid "Company name" -msgstr "Firmenname" - -#: company/models.py:89 +#: company/models.py:92 #, fuzzy #| msgid "Part description" msgid "Company description" msgstr "Beschreibung des Teils" -#: company/models.py:89 +#: company/models.py:92 msgid "Description of the company" msgstr "Firmenbeschreibung" -#: company/models.py:91 company/templates/company/company_base.html:53 +#: company/models.py:94 company/templates/company/company_base.html:57 #: templates/js/company.html:61 msgid "Website" msgstr "Website" -#: company/models.py:91 +#: company/models.py:94 msgid "Company website URL" msgstr "Firmenwebsite" -#: company/models.py:94 company/templates/company/company_base.html:60 +#: company/models.py:97 company/templates/company/company_base.html:64 msgid "Address" msgstr "Adresse" -#: company/models.py:95 +#: company/models.py:98 msgid "Company address" msgstr "Firmenadresse" -#: company/models.py:98 +#: company/models.py:101 #, fuzzy #| msgid "Contact phone number" msgid "Phone number" msgstr "Kontakt-Tel." -#: company/models.py:99 +#: company/models.py:102 msgid "Contact phone number" msgstr "Kontakt-Tel." -#: company/models.py:101 company/templates/company/company_base.html:74 +#: company/models.py:105 company/templates/company/company_base.html:78 msgid "Email" msgstr "Email" -#: company/models.py:101 +#: company/models.py:105 msgid "Contact email address" msgstr "Kontakt-Email" -#: company/models.py:104 company/templates/company/company_base.html:81 +#: company/models.py:108 company/templates/company/company_base.html:85 msgid "Contact" msgstr "Kontakt" -#: company/models.py:105 +#: company/models.py:109 msgid "Point of contact" msgstr "Anlaufstelle" -#: company/models.py:107 +#: company/models.py:111 msgid "Link to external company information" msgstr "Link auf externe Firmeninformation" -#: company/models.py:119 +#: company/models.py:123 msgid "Do you sell items to this company?" msgstr "Verkaufen Sie Teile an diese Firma?" -#: company/models.py:121 +#: company/models.py:125 msgid "Do you purchase items from this company?" msgstr "Kaufen Sie Teile von dieser Firma?" -#: company/models.py:123 +#: company/models.py:127 msgid "Does this company manufacture parts?" msgstr "Produziert diese Firma Teile?" -#: company/models.py:279 stock/models.py:335 +#: company/models.py:283 stock/models.py:335 #: stock/templates/stock/item_base.html:164 msgid "Base Part" msgstr "Basisteil" -#: company/models.py:284 +#: company/models.py:288 msgid "Select part" msgstr "Teil auswählen" -#: company/models.py:290 +#: company/models.py:294 msgid "Select supplier" msgstr "Zulieferer auswählen" -#: company/models.py:293 +#: company/models.py:297 msgid "Supplier stock keeping unit" msgstr "Stock Keeping Units (SKU) des Zulieferers" -#: company/models.py:300 +#: company/models.py:304 msgid "Select manufacturer" msgstr "Hersteller auswählen" -#: company/models.py:304 +#: company/models.py:308 msgid "Manufacturer part number" msgstr "Hersteller-Teilenummer" -#: company/models.py:306 +#: company/models.py:310 msgid "URL for external supplier part link" msgstr "Teil-URL des Zulieferers" -#: company/models.py:308 +#: company/models.py:312 msgid "Supplier part description" msgstr "Zuliefererbeschreibung des Teils" -#: company/models.py:312 +#: company/models.py:316 msgid "Minimum charge (e.g. stocking fee)" msgstr "Mindestpreis" -#: company/models.py:314 +#: company/models.py:318 msgid "Part packaging" msgstr "Teile-Packaging" @@ -1065,36 +1177,36 @@ msgstr "Zugewiesen" msgid "Company" msgstr "Firma" -#: company/templates/company/company_base.html:47 +#: company/templates/company/company_base.html:51 #: company/templates/company/detail.html:8 msgid "Company Details" msgstr "Firmendetails" -#: company/templates/company/company_base.html:67 +#: company/templates/company/company_base.html:71 msgid "Phone" msgstr "Telefon" #: company/templates/company/detail.html:16 -#: company/templates/company/supplier_part_base.html:76 +#: company/templates/company/supplier_part_base.html:84 #: company/templates/company/supplier_part_detail.html:30 part/bom.py:172 #: templates/js/company.html:44 templates/js/company.html:186 msgid "Manufacturer" msgstr "Hersteller" #: company/templates/company/detail.html:21 -#: company/templates/company/supplier_part_base.html:66 +#: company/templates/company/supplier_part_base.html:74 #: company/templates/company/supplier_part_detail.html:21 #: 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:273 templates/js/company.html:48 -#: templates/js/company.html:162 templates/js/order.html:146 +#: templates/js/company.html:162 templates/js/order.html:154 msgid "Supplier" msgstr "Zulieferer" #: company/templates/company/detail.html:26 #: 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 +#: templates/js/company.html:40 templates/js/order.html:236 msgid "Customer" msgstr "Kunde" @@ -1102,64 +1214,64 @@ msgstr "Kunde" msgid "Supplier Parts" msgstr "Zulieferer-Teile" -#: company/templates/company/detail_part.html:13 +#: company/templates/company/detail_part.html:15 #: order/templates/order/purchase_order_detail.html:68 msgid "Create new supplier part" msgstr "Neues Zuliefererteil anlegen" -#: company/templates/company/detail_part.html:13 +#: company/templates/company/detail_part.html:15 #: order/templates/order/purchase_order_detail.html:67 -#: part/templates/part/supplier.html:13 templates/js/stock.html:797 +#: part/templates/part/supplier.html:13 templates/js/stock.html:798 msgid "New Supplier Part" msgstr "Neues Zulieferer-Teil" -#: company/templates/company/detail_part.html:15 +#: company/templates/company/detail_part.html:18 #: part/templates/part/category.html:117 part/templates/part/supplier.html:15 #: templates/stock_table.html:14 msgid "Options" msgstr "Optionen" -#: company/templates/company/detail_part.html:18 +#: company/templates/company/detail_part.html:22 #: part/templates/part/category.html:122 #, fuzzy #| msgid "Order part" msgid "Order parts" msgstr "Teil bestellen" -#: company/templates/company/detail_part.html:19 +#: company/templates/company/detail_part.html:25 #, fuzzy #| msgid "Delete Parts" msgid "Delete parts" msgstr "Teile löschen" -#: company/templates/company/detail_part.html:19 +#: company/templates/company/detail_part.html:25 msgid "Delete Parts" msgstr "Teile löschen" -#: company/templates/company/detail_part.html:43 -#: part/templates/part/category.html:114 templates/js/stock.html:791 +#: company/templates/company/detail_part.html:51 +#: part/templates/part/category.html:114 templates/js/stock.html:792 msgid "New Part" msgstr "Neues Teil" -#: company/templates/company/detail_part.html:44 +#: company/templates/company/detail_part.html:52 msgid "Create new Part" msgstr "Neues Teil hinzufügen" -#: company/templates/company/detail_part.html:49 company/views.py:51 +#: company/templates/company/detail_part.html:57 company/views.py:53 #: part/templates/part/supplier.html:45 msgid "New Supplier" msgstr "Neuer Zulieferer" -#: company/templates/company/detail_part.html:50 company/views.py:186 +#: company/templates/company/detail_part.html:58 company/views.py:192 msgid "Create new Supplier" msgstr "Neuen Zulieferer anlegen" -#: company/templates/company/detail_part.html:55 company/views.py:58 +#: company/templates/company/detail_part.html:63 company/views.py:60 #: part/templates/part/supplier.html:51 msgid "New Manufacturer" msgstr "Neuer Hersteller" -#: company/templates/company/detail_part.html:56 company/views.py:189 +#: company/templates/company/detail_part.html:64 company/views.py:195 msgid "Create new Manufacturer" msgstr "Neuen Hersteller anlegen" @@ -1193,17 +1305,17 @@ 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/InvenTree/settings/tabs.html:27 templates/navbar.html:33 +#: templates/InvenTree/settings/tabs.html:31 templates/navbar.html:33 #: users/models.py:31 msgid "Purchase Orders" msgstr "Bestellungen" -#: company/templates/company/purchase_orders.html:14 +#: company/templates/company/purchase_orders.html:15 #: order/templates/order/purchase_orders.html:18 msgid "Create new purchase order" msgstr "Neue Bestellung anlegen" -#: company/templates/company/purchase_orders.html:14 +#: company/templates/company/purchase_orders.html:15 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "Neue Bestellung" @@ -1213,17 +1325,17 @@ 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/InvenTree/settings/tabs.html:30 templates/navbar.html:42 +#: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:42 #: users/models.py:32 msgid "Sales Orders" msgstr "Bestellungen" -#: company/templates/company/sales_orders.html:14 +#: company/templates/company/sales_orders.html:15 #: order/templates/order/sales_orders.html:18 msgid "Create new sales order" msgstr "Neuen Auftrag anlegen" -#: company/templates/company/sales_orders.html:14 +#: company/templates/company/sales_orders.html:15 #: order/templates/order/sales_orders.html:18 msgid "New Sales Order" msgstr "Neuer Auftrag" @@ -1234,41 +1346,41 @@ msgstr "Neuer Auftrag" msgid "Supplier Part" msgstr "Zulieferer-Teil" -#: company/templates/company/supplier_part_base.html:23 +#: company/templates/company/supplier_part_base.html:26 #: part/templates/part/orders.html:14 part/templates/part/part_base.html:66 msgid "Order part" msgstr "Teil bestellen" -#: company/templates/company/supplier_part_base.html:26 +#: company/templates/company/supplier_part_base.html:30 msgid "Edit supplier part" msgstr "Zuliefererteil bearbeiten" -#: company/templates/company/supplier_part_base.html:29 +#: company/templates/company/supplier_part_base.html:34 msgid "Delete supplier part" msgstr "Zuliefererteil entfernen" -#: company/templates/company/supplier_part_base.html:38 +#: company/templates/company/supplier_part_base.html:46 #: company/templates/company/supplier_part_detail.html:11 msgid "Supplier Part Details" msgstr "Zuliefererteildetails" -#: company/templates/company/supplier_part_base.html:43 +#: company/templates/company/supplier_part_base.html:51 #: company/templates/company/supplier_part_detail.html:14 msgid "Internal Part" msgstr "Internes Teil" -#: company/templates/company/supplier_part_base.html:70 +#: company/templates/company/supplier_part_base.html:78 #: company/templates/company/supplier_part_detail.html:22 part/bom.py:171 msgid "SKU" msgstr "SKU" -#: company/templates/company/supplier_part_base.html:80 +#: company/templates/company/supplier_part_base.html:88 #: company/templates/company/supplier_part_detail.html:31 part/bom.py:173 #: templates/js/company.html:202 msgid "MPN" msgstr "MPN" -#: company/templates/company/supplier_part_base.html:87 +#: company/templates/company/supplier_part_base.html:95 #: company/templates/company/supplier_part_detail.html:34 msgid "Note" msgstr "Notiz" @@ -1281,31 +1393,31 @@ msgstr "Zuliefererbestellungen" msgid "Pricing Information" msgstr "Preisinformationen ansehen" -#: company/templates/company/supplier_part_pricing.html:15 company/views.py:399 +#: company/templates/company/supplier_part_pricing.html:16 company/views.py:410 #: part/templates/part/sale_prices.html:13 part/views.py:2228 msgid "Add Price Break" msgstr "Preisstaffel hinzufügen" -#: company/templates/company/supplier_part_pricing.html:32 +#: company/templates/company/supplier_part_pricing.html:34 #: part/templates/part/sale_prices.html:41 #, fuzzy #| msgid "No company information found" msgid "No price break information found" msgstr "Keine Firmeninformation gefunden" -#: company/templates/company/supplier_part_pricing.html:76 +#: company/templates/company/supplier_part_pricing.html:78 #: part/templates/part/sale_prices.html:85 templates/js/bom.html:207 msgid "Price" msgstr "Preis" -#: company/templates/company/supplier_part_pricing.html:90 +#: company/templates/company/supplier_part_pricing.html:92 #: part/templates/part/sale_prices.html:99 #, fuzzy #| msgid "Edit Price Break" msgid "Edit price break" msgstr "Preisstaffel bearbeiten" -#: company/templates/company/supplier_part_pricing.html:91 +#: company/templates/company/supplier_part_pricing.html:93 #: part/templates/part/sale_prices.html:100 #, fuzzy #| msgid "Delete Price Break" @@ -1323,8 +1435,8 @@ 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/InvenTree/settings/tabs.html:21 templates/js/part.html:124 -#: templates/js/part.html:372 templates/js/stock.html:452 +#: templates/InvenTree/settings/tabs.html:25 templates/js/part.html:124 +#: templates/js/part.html:372 templates/js/stock.html:453 #: templates/navbar.html:22 users/models.py:29 msgid "Stock" msgstr "Lagerbestand" @@ -1337,95 +1449,95 @@ msgstr "Bestellungen" #: 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/InvenTree/settings/tabs.html:18 templates/navbar.html:19 +#: templates/InvenTree/settings/tabs.html:22 templates/navbar.html:19 #: templates/stats.html:8 templates/stats.html:17 users/models.py:28 msgid "Parts" msgstr "Teile" -#: company/views.py:50 part/templates/part/tabs.html:42 +#: company/views.py:52 part/templates/part/tabs.html:42 #: templates/navbar.html:31 msgid "Suppliers" msgstr "Zulieferer" -#: company/views.py:57 templates/navbar.html:32 +#: company/views.py:59 templates/navbar.html:32 msgid "Manufacturers" msgstr "Hersteller" -#: company/views.py:64 templates/navbar.html:41 +#: company/views.py:66 templates/navbar.html:41 msgid "Customers" msgstr "Kunden" -#: company/views.py:65 +#: company/views.py:67 msgid "New Customer" msgstr "Neuer Kunde" -#: company/views.py:73 +#: company/views.py:75 msgid "Companies" msgstr "Firmen" -#: company/views.py:74 +#: company/views.py:76 msgid "New Company" msgstr "Neue Firma" -#: company/views.py:151 +#: company/views.py:154 msgid "Update Company Image" msgstr "Firmenbild aktualisieren" -#: company/views.py:156 +#: company/views.py:160 msgid "Updated company image" msgstr "Aktualisiertes Firmenbild" -#: company/views.py:166 +#: company/views.py:170 msgid "Edit Company" msgstr "Firma bearbeiten" -#: company/views.py:170 +#: company/views.py:175 msgid "Edited company information" msgstr "Firmeninformation bearbeitet" -#: company/views.py:192 +#: company/views.py:198 msgid "Create new Customer" msgstr "Neuen Kunden anlegen" -#: company/views.py:194 +#: company/views.py:200 msgid "Create new Company" msgstr "Neue Firma anlegen" -#: company/views.py:221 +#: company/views.py:227 msgid "Created new company" msgstr "Neue Firma angelegt" -#: company/views.py:231 +#: company/views.py:237 msgid "Delete Company" msgstr "Firma löschen" -#: company/views.py:236 +#: company/views.py:243 msgid "Company was deleted" msgstr "Firma gelöscht" -#: company/views.py:260 +#: company/views.py:268 msgid "Edit Supplier Part" msgstr "Zuliefererteil bearbeiten" -#: company/views.py:269 templates/js/stock.html:798 +#: company/views.py:278 templates/js/stock.html:799 msgid "Create new Supplier Part" msgstr "Neues Zuliefererteil anlegen" -#: company/views.py:329 +#: company/views.py:339 msgid "Delete Supplier Part" msgstr "Zuliefererteil entfernen" -#: company/views.py:404 part/views.py:2234 +#: company/views.py:416 part/views.py:2234 #, fuzzy #| msgid "Add Price Break" msgid "Added new price break" msgstr "Preisstaffel hinzufügen" -#: company/views.py:441 part/views.py:2279 +#: company/views.py:453 part/views.py:2279 msgid "Edit Price Break" msgstr "Preisstaffel bearbeiten" -#: company/views.py:456 part/views.py:2295 +#: company/views.py:469 part/views.py:2295 msgid "Delete Price Break" msgstr "Preisstaffel löschen" @@ -1569,7 +1681,7 @@ msgstr "Position - Notizen" #: order/models.py:466 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:24 -#: stock/templates/stock/item_base.html:252 templates/js/order.html:138 +#: stock/templates/stock/item_base.html:252 templates/js/order.html:139 msgid "Purchase Order" msgstr "Kaufvertrag" @@ -1641,7 +1753,7 @@ msgstr "Bestellreferenz" msgid "Order Status" msgstr "Bestellstatus" -#: order/templates/order/order_base.html:85 templates/js/order.html:153 +#: order/templates/order/order_base.html:85 templates/js/order.html:161 msgid "Supplier Reference" msgstr "Zuliefererreferenz" @@ -1698,7 +1810,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 -#: templates/js/order.html:177 templates/js/order.html:257 +#: templates/js/order.html:185 templates/js/order.html:272 msgid "Items" msgstr "Positionen" @@ -1733,7 +1845,7 @@ msgid "Attachments" msgstr "Anhänge" #: order/templates/order/purchase_order_detail.html:16 -#: order/templates/order/sales_order_detail.html:17 order/views.py:1117 +#: order/templates/order/sales_order_detail.html:18 order/views.py:1117 #: order/views.py:1232 msgid "Add Line Item" msgstr "Position hinzufügen" @@ -1745,7 +1857,7 @@ msgstr "Bestellpositionen" #: order/templates/order/purchase_order_detail.html:38 #: order/templates/order/purchase_order_detail.html:118 #: part/templates/part/category.html:171 part/templates/part/category.html:213 -#: templates/js/stock.html:803 +#: templates/js/stock.html:804 msgid "New Location" msgstr "Neuer Standort" @@ -1765,7 +1877,7 @@ msgid "Order Code" msgstr "Bestellnummer" #: order/templates/order/purchase_order_detail.html:213 -#: order/templates/order/sales_order_detail.html:281 +#: order/templates/order/sales_order_detail.html:283 msgid "Edit line item" msgstr "Position bearbeiten" @@ -1812,7 +1924,7 @@ msgstr "Packliste" msgid "Sales Order Details" msgstr "Auftragsdetails" -#: order/templates/order/sales_order_base.html:87 templates/js/order.html:228 +#: order/templates/order/sales_order_base.html:87 templates/js/order.html:243 msgid "Customer Reference" msgstr "Kundenreferenz" @@ -1826,15 +1938,15 @@ msgstr "Warnung" msgid "Sales Order Items" msgstr "Auftragspositionen" -#: order/templates/order/sales_order_detail.html:223 +#: order/templates/order/sales_order_detail.html:225 msgid "Fulfilled" msgstr "Erledigt" -#: order/templates/order/sales_order_detail.html:278 +#: order/templates/order/sales_order_detail.html:280 msgid "Allocate parts" msgstr "Teile zuordnen" -#: order/templates/order/sales_order_detail.html:282 +#: order/templates/order/sales_order_detail.html:284 msgid "Delete line item " msgstr "Position löschen" @@ -2430,7 +2542,7 @@ msgstr "Bestellung" #: stock/templates/stock/item_base.html:58 #: 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 +#: templates/js/stock.html:661 templates/js/stock.html:897 msgid "Stock Item" msgstr "Lagerobjekt" @@ -2728,7 +2840,7 @@ msgstr "Einheiten" msgid "Minimum Stock" msgstr "Minimaler Lagerbestand" -#: part/templates/part/detail.html:114 templates/js/order.html:247 +#: part/templates/part/detail.html:114 templates/js/order.html:262 msgid "Creation Date" msgstr "Erstelldatum" @@ -2857,7 +2969,7 @@ msgstr "Teilparameter" msgid "Add new parameter" msgstr "Parameter hinzufügen" -#: part/templates/part/params.html:14 templates/InvenTree/settings/part.html:17 +#: part/templates/part/params.html:14 templates/InvenTree/settings/part.html:27 msgid "New Parameter" msgstr "Neuer Parameter" @@ -3764,7 +3876,7 @@ msgstr "Ist dieses Objekt einem Kunden zugeteilt?" msgid "Return to stock" msgstr "Bestand zählen" -#: stock/templates/stock/item_base.html:125 templates/js/stock.html:933 +#: stock/templates/stock/item_base.html:125 templates/js/stock.html:934 #, fuzzy #| msgid "Installed in Stock Item" msgid "Uninstall stock item" @@ -4336,13 +4448,13 @@ msgstr "Keine Ergebnisse gefunden" msgid "Enter a search query" msgstr "Auftrag stornieren" -#: templates/InvenTree/search.html:191 templates/js/stock.html:527 +#: templates/InvenTree/search.html:191 templates/js/stock.html:528 #, fuzzy #| msgid "Item assigned to customer?" msgid "Shipped to customer" msgstr "Ist dieses Objekt einem Kunden zugeteilt?" -#: templates/InvenTree/search.html:194 templates/js/stock.html:537 +#: templates/InvenTree/search.html:194 templates/js/stock.html:538 msgid "No stock location set" msgstr "Kein Lagerort gesetzt" @@ -4358,28 +4470,6 @@ msgstr "Suche" 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" @@ -4398,27 +4488,33 @@ msgstr "Währungs-Wert" msgid "New Currency" msgstr "Währung entfernen" +#: templates/InvenTree/settings/global.html:10 +#, fuzzy +#| msgid "InvenTree Version" +msgid "Global InvenTree Settings" +msgstr "InvenTree-Version" + #: templates/InvenTree/settings/part.html:9 #, fuzzy #| msgid "Settings" msgid "Part Settings" msgstr "Einstellungen" -#: templates/InvenTree/settings/part.html:14 +#: templates/InvenTree/settings/part.html:24 #, fuzzy #| msgid "Edit Part Parameter Template" msgid "Part Parameter Templates" msgstr "Teilparametervorlage bearbeiten" -#: templates/InvenTree/settings/part.html:33 +#: templates/InvenTree/settings/part.html:43 msgid "No part parameter templates found" msgstr "Keine Teilparametervorlagen gefunden" -#: templates/InvenTree/settings/part.html:53 +#: templates/InvenTree/settings/part.html:63 msgid "Edit Template" msgstr "Vorlage bearbeiten" -#: templates/InvenTree/settings/part.html:54 +#: templates/InvenTree/settings/part.html:64 msgid "Delete Template" msgstr "Vorlage löschen" @@ -4428,6 +4524,16 @@ msgstr "Vorlage löschen" msgid "Purchase Order Settings" msgstr "Bestelldetails" +#: templates/InvenTree/settings/setting.html:16 +msgid "No value set" +msgstr "" + +#: templates/InvenTree/settings/setting.html:24 +#, fuzzy +#| msgid "Settings" +msgid "Edit setting" +msgstr "Einstellungen" + #: templates/InvenTree/settings/settings.html:7 #: templates/InvenTree/settings/settings.html:13 templates/navbar.html:62 msgid "Settings" @@ -4460,13 +4566,17 @@ msgstr "" msgid "Theme" msgstr "" -#: templates/InvenTree/settings/tabs.html:12 +#: templates/InvenTree/settings/tabs.html:13 #, fuzzy #| msgid "InvenTree Version" msgid "InvenTree Settings" msgstr "InvenTree-Version" -#: templates/InvenTree/settings/tabs.html:15 +#: templates/InvenTree/settings/tabs.html:16 +msgid "Global" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:19 #, fuzzy #| msgid "Edit Currency" msgid "Currency" @@ -4771,19 +4881,19 @@ msgstr "Baugruppe" msgid "Link" msgstr "Link" -#: templates/js/order.html:127 +#: templates/js/order.html:128 msgid "No purchase orders found" msgstr "Keine Bestellungen gefunden" -#: templates/js/order.html:172 templates/js/stock.html:642 +#: templates/js/order.html:180 templates/js/stock.html:643 msgid "Date" msgstr "Datum" -#: templates/js/order.html:202 +#: templates/js/order.html:210 msgid "No sales orders found" msgstr "Keine Aufträge gefunden" -#: templates/js/order.html:252 +#: templates/js/order.html:267 msgid "Shipment Date" msgstr "Versanddatum" @@ -4798,7 +4908,7 @@ msgid "No parts found" msgstr "Keine Teile gefunden" #: templates/js/part.html:275 templates/js/stock.html:409 -#: templates/js/stock.html:965 +#: templates/js/stock.html:966 msgid "Select" msgstr "Auswählen" @@ -4892,91 +5002,91 @@ msgstr "Keine zur Anfrage passenden Lagerobjekte" msgid "Undefined location" msgstr "Unterlagerorte einschließen" -#: templates/js/stock.html:468 +#: templates/js/stock.html:469 #, fuzzy #| msgid "StockItem has been allocated" msgid "Stock item has been allocated" msgstr "Lagerobjekt wurde zugewiesen" -#: templates/js/stock.html:472 +#: templates/js/stock.html:473 #, fuzzy #| msgid "StockItem has been allocated" msgid "Stock item has been assigned to customer" msgstr "Lagerobjekt wurde zugewiesen" -#: templates/js/stock.html:475 +#: templates/js/stock.html:476 #, fuzzy #| msgid "This stock item is allocated to Sales Order" msgid "Stock item was assigned to a build order" msgstr "Dieses Lagerobjekt ist dem Auftrag zugewiesen" -#: templates/js/stock.html:477 +#: templates/js/stock.html:478 #, fuzzy #| msgid "This stock item is allocated to Sales Order" msgid "Stock item was assigned to a sales order" msgstr "Dieses Lagerobjekt ist dem Auftrag zugewiesen" -#: templates/js/stock.html:482 +#: templates/js/stock.html:483 #, fuzzy #| msgid "Is this item installed in another item?" msgid "Stock item has been installed in another item" msgstr "Ist dieses Teil in einem anderen verbaut?" -#: templates/js/stock.html:489 +#: templates/js/stock.html:490 #, fuzzy #| msgid "StockItem has been allocated" msgid "Stock item has been rejected" msgstr "Lagerobjekt wurde zugewiesen" -#: templates/js/stock.html:493 +#: templates/js/stock.html:494 #, fuzzy #| msgid "StockItem is lost" msgid "Stock item is lost" msgstr "Lagerobjekt verloren" -#: templates/js/stock.html:497 templates/js/table_filters.html:60 +#: templates/js/stock.html:498 templates/js/table_filters.html:60 #, fuzzy #| msgid "Delete" msgid "Depleted" msgstr "Löschen" -#: templates/js/stock.html:522 +#: templates/js/stock.html:523 #, fuzzy #| msgid "Installed in Stock Item" msgid "Installed in Stock Item " msgstr "In Lagerobjekt installiert" -#: templates/js/stock.html:530 +#: templates/js/stock.html:531 #, fuzzy #| msgid "Item assigned to customer?" msgid "Assigned to sales order" msgstr "Ist dieses Objekt einem Kunden zugeteilt?" -#: templates/js/stock.html:708 +#: templates/js/stock.html:709 msgid "No user information" msgstr "Keine Benutzerinformation" -#: templates/js/stock.html:792 +#: templates/js/stock.html:793 msgid "Create New Part" msgstr "Neues Teil anlegen" -#: templates/js/stock.html:804 +#: templates/js/stock.html:805 msgid "Create New Location" msgstr "Neuen Standort anlegen" -#: templates/js/stock.html:903 +#: templates/js/stock.html:904 #, fuzzy #| msgid "Serial Number" msgid "Serial" msgstr "Seriennummer" -#: templates/js/stock.html:996 templates/js/table_filters.html:70 +#: templates/js/stock.html:997 templates/js/table_filters.html:70 #, fuzzy #| msgid "Installed In" msgid "Installed" msgstr "Installiert in" -#: templates/js/stock.html:1021 +#: templates/js/stock.html:1022 #, fuzzy #| msgid "Installed In" msgid "Install item" @@ -5285,6 +5395,16 @@ msgstr "" msgid "Permission to delete items" msgstr "Ausgewählte Stücklistenpositionen entfernen" +#, fuzzy +#~| msgid "Reference" +#~ msgid "Reference Prefix" +#~ msgstr "Referenz" + +#, fuzzy +#~| msgid "Reference" +#~ msgid "Reference Regex" +#~ msgstr "Referenz" + #~ msgid "Build Title" #~ msgstr "Bau-Titel" diff --git a/InvenTree/locale/en/LC_MESSAGES/django.po b/InvenTree/locale/en/LC_MESSAGES/django.po index 5c6d3a00c1..a5f56143f0 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-19 21:40+0000\n" +"POT-Creation-Date: 2020-10-25 10:54+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -46,34 +46,34 @@ msgstr "" msgid "Apply Theme" msgstr "" -#: InvenTree/helpers.py:348 order/models.py:187 order/models.py:261 +#: InvenTree/helpers.py:361 order/models.py:187 order/models.py:261 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:351 +#: InvenTree/helpers.py:364 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:372 +#: InvenTree/helpers.py:385 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:376 InvenTree/helpers.py:379 InvenTree/helpers.py:382 +#: InvenTree/helpers.py:389 InvenTree/helpers.py:392 InvenTree/helpers.py:395 #, python-brace-format msgid "Invalid group: {g}" msgstr "" -#: InvenTree/helpers.py:387 +#: InvenTree/helpers.py:400 #, python-brace-format msgid "Duplicate serial: {g}" msgstr "" -#: InvenTree/helpers.py:395 +#: InvenTree/helpers.py:408 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:399 +#: InvenTree/helpers.py:412 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" @@ -86,7 +86,7 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:68 templates/js/stock.html:699 +#: InvenTree/models.py:68 templates/js/stock.html:700 msgid "User" msgstr "" @@ -169,7 +169,7 @@ msgid "Rejected" msgstr "" #: InvenTree/status_codes.py:223 build/templates/build/allocate.html:358 -#: order/templates/order/sales_order_detail.html:221 +#: order/templates/order/sales_order_detail.html:223 #: part/templates/part/tabs.html:23 templates/js/build.html:140 msgid "Allocated" msgstr "" @@ -204,7 +204,7 @@ msgstr "" msgid "Overage must be an integer value or a percentage" msgstr "" -#: InvenTree/views.py:703 +#: InvenTree/views.py:707 msgid "Database Statistics" msgstr "" @@ -278,7 +278,7 @@ 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 +#: templates/InvenTree/settings/tabs.html:28 users/models.py:30 msgid "Build Orders" msgstr "" @@ -297,16 +297,16 @@ 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_base.html:61 #: 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/order.html:167 templates/js/order.html:249 #: 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 +#: templates/js/stock.html:445 templates/js/stock.html:672 msgid "Description" msgstr "" @@ -334,7 +334,7 @@ msgstr "" #: templates/js/barcode.html:336 templates/js/bom.html:124 #: 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 +#: templates/js/stock.html:421 templates/js/stock.html:978 msgid "Part" msgstr "" @@ -385,7 +385,7 @@ msgid "Batch code for this build output" msgstr "" #: build/models.py:176 build/templates/build/detail.html:55 -#: company/templates/company/supplier_part_base.html:60 +#: company/templates/company/supplier_part_base.html:68 #: company/templates/company/supplier_part_detail.html:24 #: part/templates/part/detail.html:80 part/templates/part/part_base.html:102 #: stock/models.py:381 stock/templates/stock/item_base.html:266 @@ -396,14 +396,14 @@ msgstr "" msgid "Link to external URL" msgstr "" -#: build/models.py:181 build/templates/build/tabs.html:14 company/models.py:310 +#: build/models.py:181 build/templates/build/tabs.html:14 company/models.py:314 #: 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 #: stock/models.py:1404 stock/templates/stock/tabs.html:26 #: templates/js/barcode.html:391 templates/js/bom.html:223 -#: templates/js/stock.html:116 templates/js/stock.html:543 +#: templates/js/stock.html:116 templates/js/stock.html:544 msgid "Notes" msgstr "" @@ -446,7 +446,7 @@ msgid "Stock quantity to allocate to build" msgstr "" #: build/templates/build/allocate.html:17 -#: company/templates/company/detail_part.html:18 order/views.py:804 +#: company/templates/company/detail_part.html:22 order/views.py:804 #: part/templates/part/category.html:122 msgid "Order Parts" msgstr "" @@ -472,8 +472,8 @@ 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 +#: order/templates/order/sales_order_detail.html:70 +#: order/templates/order/sales_order_detail.html:152 stock/models.py:375 #: stock/templates/stock/item_base.html:178 msgid "Serial Number" msgstr "" @@ -482,11 +482,11 @@ msgstr "" #: build/templates/build/auto_allocate.html:20 #: build/templates/build/build_base.html:83 #: build/templates/build/detail.html:27 -#: company/templates/company/supplier_part_pricing.html:71 +#: company/templates/company/supplier_part_pricing.html:73 #: order/templates/order/order_wizard/select_parts.html:32 #: order/templates/order/purchase_order_detail.html:177 -#: order/templates/order/sales_order_detail.html:70 -#: order/templates/order/sales_order_detail.html:152 +#: order/templates/order/sales_order_detail.html:72 +#: order/templates/order/sales_order_detail.html:154 #: part/templates/part/allocation.html:16 #: part/templates/part/allocation.html:49 #: part/templates/part/sale_prices.html:80 stock/forms.py:297 @@ -495,7 +495,7 @@ msgstr "" #: 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:72 -#: templates/js/stock.html:690 templates/js/stock.html:905 +#: templates/js/stock.html:691 templates/js/stock.html:906 msgid "Quantity" msgstr "" @@ -504,17 +504,17 @@ msgstr "" #: 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 +#: templates/js/stock.html:519 msgid "Location" msgstr "" #: build/templates/build/allocate.html:210 -#: order/templates/order/sales_order_detail.html:92 templates/js/build.html:144 +#: order/templates/order/sales_order_detail.html:94 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:145 +#: order/templates/order/sales_order_detail.html:95 templates/js/build.html:145 msgid "Delete stock allocation" msgstr "" @@ -532,12 +532,12 @@ msgid "Assigned" msgstr "" #: build/templates/build/allocate.html:394 -#: order/templates/order/sales_order_detail.html:271 +#: order/templates/order/sales_order_detail.html:273 msgid "Buy parts" msgstr "" #: build/templates/build/allocate.html:398 -#: order/templates/order/sales_order_detail.html:275 +#: order/templates/order/sales_order_detail.html:277 msgid "Build parts" msgstr "" @@ -610,8 +610,8 @@ msgstr "" #: order/templates/order/receive_parts.html:24 #: 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 +#: templates/js/order.html:172 templates/js/order.html:254 +#: templates/js/stock.html:506 templates/js/stock.html:914 msgid "Status" msgstr "" @@ -621,7 +621,7 @@ msgstr "" #: 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:208 templates/js/order.html:213 +#: stock/templates/stock/item_base.html:208 templates/js/order.html:221 msgid "Sales Order" msgstr "" @@ -694,8 +694,8 @@ msgid "Stock can be taken from any available location." msgstr "" #: build/templates/build/detail.html:48 -#: stock/templates/stock/item_base.html:238 templates/js/stock.html:513 -#: templates/js/stock.html:920 templates/js/table_filters.html:34 +#: stock/templates/stock/item_base.html:238 templates/js/stock.html:514 +#: templates/js/stock.html:921 templates/js/table_filters.html:34 #: templates/js/table_filters.html:100 msgid "Batch" msgstr "" @@ -838,165 +838,249 @@ msgstr "" msgid "Updated Build Item" msgstr "" -#: common/models.py:107 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:51 +msgid "InvenTree Instance Name" msgstr "" -#: common/models.py:109 -msgid "Settings value" +#: common/models.py:53 +msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:122 -msgid "Key string must be unique" -msgstr "" - -#: common/models.py:143 -msgid "Currency Symbol e.g. $" -msgstr "" - -#: common/models.py:145 -msgid "Currency Suffix e.g. AUD" -msgstr "" - -#: common/models.py:147 -msgid "Currency Description" -msgstr "" - -#: common/models.py:149 -msgid "Currency Value" -msgstr "" - -#: common/models.py:151 -msgid "Use this currency as the base currency" -msgstr "" - -#: common/models.py:234 -msgid "Default" -msgstr "" - -#: common/views.py:21 -msgid "Create new Currency" -msgstr "" - -#: common/views.py:29 -msgid "Edit Currency" -msgstr "" - -#: common/views.py:36 -msgid "Delete Currency" -msgstr "" - -#: common/views.py:47 -msgid "Change Setting" -msgstr "" - -#: company/models.py:86 company/models.py:87 +#: common/models.py:57 company/models.py:89 company/models.py:90 msgid "Company name" msgstr "" -#: company/models.py:89 +#: common/models.py:58 +msgid "Internal company name" +msgstr "" + +#: common/models.py:63 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:64 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:68 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:69 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:75 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:76 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:82 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:83 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:89 +msgid "Build Order Reference Prefix" +msgstr "" + +#: common/models.py:90 +msgid "Prefix value for build order reference" +msgstr "" + +#: common/models.py:95 +msgid "Build Order Reference Regex" +msgstr "" + +#: common/models.py:96 +msgid "Regular expression pattern for matching build order reference" +msgstr "" + +#: common/models.py:100 +msgid "Sales Order Reference Prefix" +msgstr "" + +#: common/models.py:101 +msgid "Prefix value for sales order reference" +msgstr "" + +#: common/models.py:105 +msgid "Purchase Order Reference Prefix" +msgstr "" + +#: common/models.py:106 +msgid "Prefix value for purchase order reference" +msgstr "" + +#: common/models.py:272 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:274 +msgid "Settings value" +msgstr "" + +#: common/models.py:326 +msgid "Value must be a boolean value" +msgstr "" + +#: common/models.py:340 +msgid "Key string must be unique" +msgstr "" + +#: common/models.py:379 +msgid "Currency Symbol e.g. $" +msgstr "" + +#: common/models.py:381 +msgid "Currency Suffix e.g. AUD" +msgstr "" + +#: common/models.py:383 +msgid "Currency Description" +msgstr "" + +#: common/models.py:385 +msgid "Currency Value" +msgstr "" + +#: common/models.py:387 +msgid "Use this currency as the base currency" +msgstr "" + +#: common/models.py:470 +msgid "Default" +msgstr "" + +#: common/templates/common/edit_setting.html:11 +msgid "Current value" +msgstr "" + +#: common/views.py:23 +msgid "Create new Currency" +msgstr "" + +#: common/views.py:31 +msgid "Edit Currency" +msgstr "" + +#: common/views.py:38 +msgid "Delete Currency" +msgstr "" + +#: common/views.py:49 +msgid "Change Setting" +msgstr "" + +#: company/models.py:92 msgid "Company description" msgstr "" -#: company/models.py:89 +#: company/models.py:92 msgid "Description of the company" msgstr "" -#: company/models.py:91 company/templates/company/company_base.html:53 +#: company/models.py:94 company/templates/company/company_base.html:57 #: templates/js/company.html:61 msgid "Website" msgstr "" -#: company/models.py:91 +#: company/models.py:94 msgid "Company website URL" msgstr "" -#: company/models.py:94 company/templates/company/company_base.html:60 +#: company/models.py:97 company/templates/company/company_base.html:64 msgid "Address" msgstr "" -#: company/models.py:95 +#: company/models.py:98 msgid "Company address" msgstr "" -#: company/models.py:98 +#: company/models.py:101 msgid "Phone number" msgstr "" -#: company/models.py:99 +#: company/models.py:102 msgid "Contact phone number" msgstr "" -#: company/models.py:101 company/templates/company/company_base.html:74 +#: company/models.py:105 company/templates/company/company_base.html:78 msgid "Email" msgstr "" -#: company/models.py:101 +#: company/models.py:105 msgid "Contact email address" msgstr "" -#: company/models.py:104 company/templates/company/company_base.html:81 +#: company/models.py:108 company/templates/company/company_base.html:85 msgid "Contact" msgstr "" -#: company/models.py:105 +#: company/models.py:109 msgid "Point of contact" msgstr "" -#: company/models.py:107 +#: company/models.py:111 msgid "Link to external company information" msgstr "" -#: company/models.py:119 +#: company/models.py:123 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:121 +#: company/models.py:125 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:123 +#: company/models.py:127 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:279 stock/models.py:335 +#: company/models.py:283 stock/models.py:335 #: stock/templates/stock/item_base.html:164 msgid "Base Part" msgstr "" -#: company/models.py:284 +#: company/models.py:288 msgid "Select part" msgstr "" -#: company/models.py:290 +#: company/models.py:294 msgid "Select supplier" msgstr "" -#: company/models.py:293 +#: company/models.py:297 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:300 +#: company/models.py:304 msgid "Select manufacturer" msgstr "" -#: company/models.py:304 +#: company/models.py:308 msgid "Manufacturer part number" msgstr "" -#: company/models.py:306 +#: company/models.py:310 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:308 +#: company/models.py:312 msgid "Supplier part description" msgstr "" -#: company/models.py:312 +#: company/models.py:316 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:314 +#: company/models.py:318 msgid "Part packaging" msgstr "" @@ -1010,36 +1094,36 @@ msgstr "" msgid "Company" msgstr "" -#: company/templates/company/company_base.html:47 +#: company/templates/company/company_base.html:51 #: company/templates/company/detail.html:8 msgid "Company Details" msgstr "" -#: company/templates/company/company_base.html:67 +#: company/templates/company/company_base.html:71 msgid "Phone" msgstr "" #: company/templates/company/detail.html:16 -#: company/templates/company/supplier_part_base.html:76 +#: company/templates/company/supplier_part_base.html:84 #: company/templates/company/supplier_part_detail.html:30 part/bom.py:172 #: templates/js/company.html:44 templates/js/company.html:186 msgid "Manufacturer" msgstr "" #: company/templates/company/detail.html:21 -#: company/templates/company/supplier_part_base.html:66 +#: company/templates/company/supplier_part_base.html:74 #: company/templates/company/supplier_part_detail.html:21 #: 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:273 templates/js/company.html:48 -#: templates/js/company.html:162 templates/js/order.html:146 +#: templates/js/company.html:162 templates/js/order.html:154 msgid "Supplier" msgstr "" #: company/templates/company/detail.html:26 #: 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 +#: templates/js/company.html:40 templates/js/order.html:236 msgid "Customer" msgstr "" @@ -1047,60 +1131,60 @@ msgstr "" msgid "Supplier Parts" msgstr "" -#: company/templates/company/detail_part.html:13 +#: company/templates/company/detail_part.html:15 #: order/templates/order/purchase_order_detail.html:68 msgid "Create new supplier part" msgstr "" -#: company/templates/company/detail_part.html:13 +#: company/templates/company/detail_part.html:15 #: order/templates/order/purchase_order_detail.html:67 -#: part/templates/part/supplier.html:13 templates/js/stock.html:797 +#: part/templates/part/supplier.html:13 templates/js/stock.html:798 msgid "New Supplier Part" msgstr "" -#: company/templates/company/detail_part.html:15 +#: company/templates/company/detail_part.html:18 #: part/templates/part/category.html:117 part/templates/part/supplier.html:15 #: templates/stock_table.html:14 msgid "Options" msgstr "" -#: company/templates/company/detail_part.html:18 +#: company/templates/company/detail_part.html:22 #: part/templates/part/category.html:122 msgid "Order parts" msgstr "" -#: company/templates/company/detail_part.html:19 +#: company/templates/company/detail_part.html:25 msgid "Delete parts" msgstr "" -#: company/templates/company/detail_part.html:19 +#: company/templates/company/detail_part.html:25 msgid "Delete Parts" msgstr "" -#: company/templates/company/detail_part.html:43 -#: part/templates/part/category.html:114 templates/js/stock.html:791 +#: company/templates/company/detail_part.html:51 +#: part/templates/part/category.html:114 templates/js/stock.html:792 msgid "New Part" msgstr "" -#: company/templates/company/detail_part.html:44 +#: company/templates/company/detail_part.html:52 msgid "Create new Part" msgstr "" -#: company/templates/company/detail_part.html:49 company/views.py:51 +#: company/templates/company/detail_part.html:57 company/views.py:53 #: part/templates/part/supplier.html:45 msgid "New Supplier" msgstr "" -#: company/templates/company/detail_part.html:50 company/views.py:186 +#: company/templates/company/detail_part.html:58 company/views.py:192 msgid "Create new Supplier" msgstr "" -#: company/templates/company/detail_part.html:55 company/views.py:58 +#: company/templates/company/detail_part.html:63 company/views.py:60 #: part/templates/part/supplier.html:51 msgid "New Manufacturer" msgstr "" -#: company/templates/company/detail_part.html:56 company/views.py:189 +#: company/templates/company/detail_part.html:64 company/views.py:195 msgid "Create new Manufacturer" msgstr "" @@ -1133,17 +1217,17 @@ 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/InvenTree/settings/tabs.html:27 templates/navbar.html:33 +#: templates/InvenTree/settings/tabs.html:31 templates/navbar.html:33 #: users/models.py:31 msgid "Purchase Orders" msgstr "" -#: company/templates/company/purchase_orders.html:14 +#: company/templates/company/purchase_orders.html:15 #: order/templates/order/purchase_orders.html:18 msgid "Create new purchase order" msgstr "" -#: company/templates/company/purchase_orders.html:14 +#: company/templates/company/purchase_orders.html:15 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "" @@ -1153,17 +1237,17 @@ 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/InvenTree/settings/tabs.html:30 templates/navbar.html:42 +#: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:42 #: users/models.py:32 msgid "Sales Orders" msgstr "" -#: company/templates/company/sales_orders.html:14 +#: company/templates/company/sales_orders.html:15 #: order/templates/order/sales_orders.html:18 msgid "Create new sales order" msgstr "" -#: company/templates/company/sales_orders.html:14 +#: company/templates/company/sales_orders.html:15 #: order/templates/order/sales_orders.html:18 msgid "New Sales Order" msgstr "" @@ -1174,41 +1258,41 @@ msgstr "" msgid "Supplier Part" msgstr "" -#: company/templates/company/supplier_part_base.html:23 +#: company/templates/company/supplier_part_base.html:26 #: part/templates/part/orders.html:14 part/templates/part/part_base.html:66 msgid "Order part" msgstr "" -#: company/templates/company/supplier_part_base.html:26 +#: company/templates/company/supplier_part_base.html:30 msgid "Edit supplier part" msgstr "" -#: company/templates/company/supplier_part_base.html:29 +#: company/templates/company/supplier_part_base.html:34 msgid "Delete supplier part" msgstr "" -#: company/templates/company/supplier_part_base.html:38 +#: company/templates/company/supplier_part_base.html:46 #: company/templates/company/supplier_part_detail.html:11 msgid "Supplier Part Details" msgstr "" -#: company/templates/company/supplier_part_base.html:43 +#: company/templates/company/supplier_part_base.html:51 #: company/templates/company/supplier_part_detail.html:14 msgid "Internal Part" msgstr "" -#: company/templates/company/supplier_part_base.html:70 +#: company/templates/company/supplier_part_base.html:78 #: company/templates/company/supplier_part_detail.html:22 part/bom.py:171 msgid "SKU" msgstr "" -#: company/templates/company/supplier_part_base.html:80 +#: company/templates/company/supplier_part_base.html:88 #: company/templates/company/supplier_part_detail.html:31 part/bom.py:173 #: templates/js/company.html:202 msgid "MPN" msgstr "" -#: company/templates/company/supplier_part_base.html:87 +#: company/templates/company/supplier_part_base.html:95 #: company/templates/company/supplier_part_detail.html:34 msgid "Note" msgstr "" @@ -1221,27 +1305,27 @@ msgstr "" msgid "Pricing Information" msgstr "" -#: company/templates/company/supplier_part_pricing.html:15 company/views.py:399 +#: company/templates/company/supplier_part_pricing.html:16 company/views.py:410 #: part/templates/part/sale_prices.html:13 part/views.py:2228 msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part_pricing.html:32 +#: company/templates/company/supplier_part_pricing.html:34 #: part/templates/part/sale_prices.html:41 msgid "No price break information found" msgstr "" -#: company/templates/company/supplier_part_pricing.html:76 +#: company/templates/company/supplier_part_pricing.html:78 #: part/templates/part/sale_prices.html:85 templates/js/bom.html:207 msgid "Price" msgstr "" -#: company/templates/company/supplier_part_pricing.html:90 +#: company/templates/company/supplier_part_pricing.html:92 #: part/templates/part/sale_prices.html:99 msgid "Edit price break" msgstr "" -#: company/templates/company/supplier_part_pricing.html:91 +#: company/templates/company/supplier_part_pricing.html:93 #: part/templates/part/sale_prices.html:100 msgid "Delete price break" msgstr "" @@ -1257,8 +1341,8 @@ 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/InvenTree/settings/tabs.html:21 templates/js/part.html:124 -#: templates/js/part.html:372 templates/js/stock.html:452 +#: templates/InvenTree/settings/tabs.html:25 templates/js/part.html:124 +#: templates/js/part.html:372 templates/js/stock.html:453 #: templates/navbar.html:22 users/models.py:29 msgid "Stock" msgstr "" @@ -1271,93 +1355,93 @@ msgstr "" #: 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/InvenTree/settings/tabs.html:18 templates/navbar.html:19 +#: templates/InvenTree/settings/tabs.html:22 templates/navbar.html:19 #: templates/stats.html:8 templates/stats.html:17 users/models.py:28 msgid "Parts" msgstr "" -#: company/views.py:50 part/templates/part/tabs.html:42 +#: company/views.py:52 part/templates/part/tabs.html:42 #: templates/navbar.html:31 msgid "Suppliers" msgstr "" -#: company/views.py:57 templates/navbar.html:32 +#: company/views.py:59 templates/navbar.html:32 msgid "Manufacturers" msgstr "" -#: company/views.py:64 templates/navbar.html:41 +#: company/views.py:66 templates/navbar.html:41 msgid "Customers" msgstr "" -#: company/views.py:65 +#: company/views.py:67 msgid "New Customer" msgstr "" -#: company/views.py:73 +#: company/views.py:75 msgid "Companies" msgstr "" -#: company/views.py:74 +#: company/views.py:76 msgid "New Company" msgstr "" -#: company/views.py:151 +#: company/views.py:154 msgid "Update Company Image" msgstr "" -#: company/views.py:156 +#: company/views.py:160 msgid "Updated company image" msgstr "" -#: company/views.py:166 +#: company/views.py:170 msgid "Edit Company" msgstr "" -#: company/views.py:170 +#: company/views.py:175 msgid "Edited company information" msgstr "" -#: company/views.py:192 +#: company/views.py:198 msgid "Create new Customer" msgstr "" -#: company/views.py:194 +#: company/views.py:200 msgid "Create new Company" msgstr "" -#: company/views.py:221 +#: company/views.py:227 msgid "Created new company" msgstr "" -#: company/views.py:231 +#: company/views.py:237 msgid "Delete Company" msgstr "" -#: company/views.py:236 +#: company/views.py:243 msgid "Company was deleted" msgstr "" -#: company/views.py:260 +#: company/views.py:268 msgid "Edit Supplier Part" msgstr "" -#: company/views.py:269 templates/js/stock.html:798 +#: company/views.py:278 templates/js/stock.html:799 msgid "Create new Supplier Part" msgstr "" -#: company/views.py:329 +#: company/views.py:339 msgid "Delete Supplier Part" msgstr "" -#: company/views.py:404 part/views.py:2234 +#: company/views.py:416 part/views.py:2234 msgid "Added new price break" msgstr "" -#: company/views.py:441 part/views.py:2279 +#: company/views.py:453 part/views.py:2279 msgid "Edit Price Break" msgstr "" -#: company/views.py:456 part/views.py:2295 +#: company/views.py:469 part/views.py:2295 msgid "Delete Price Break" msgstr "" @@ -1489,7 +1573,7 @@ msgstr "" #: order/models.py:466 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:24 -#: stock/templates/stock/item_base.html:252 templates/js/order.html:138 +#: stock/templates/stock/item_base.html:252 templates/js/order.html:139 msgid "Purchase Order" msgstr "" @@ -1557,7 +1641,7 @@ msgstr "" msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:85 templates/js/order.html:153 +#: order/templates/order/order_base.html:85 templates/js/order.html:161 msgid "Supplier Reference" msgstr "" @@ -1613,7 +1697,7 @@ msgid "Select existing purchase orders, or create new orders." msgstr "" #: order/templates/order/order_wizard/select_pos.html:31 -#: templates/js/order.html:177 templates/js/order.html:257 +#: templates/js/order.html:185 templates/js/order.html:272 msgid "Items" msgstr "" @@ -1644,7 +1728,7 @@ msgid "Attachments" msgstr "" #: order/templates/order/purchase_order_detail.html:16 -#: order/templates/order/sales_order_detail.html:17 order/views.py:1117 +#: order/templates/order/sales_order_detail.html:18 order/views.py:1117 #: order/views.py:1232 msgid "Add Line Item" msgstr "" @@ -1656,7 +1740,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:38 #: order/templates/order/purchase_order_detail.html:118 #: part/templates/part/category.html:171 part/templates/part/category.html:213 -#: templates/js/stock.html:803 +#: templates/js/stock.html:804 msgid "New Location" msgstr "" @@ -1676,7 +1760,7 @@ msgid "Order Code" msgstr "" #: order/templates/order/purchase_order_detail.html:213 -#: order/templates/order/sales_order_detail.html:281 +#: order/templates/order/sales_order_detail.html:283 msgid "Edit line item" msgstr "" @@ -1721,7 +1805,7 @@ msgstr "" msgid "Sales Order Details" msgstr "" -#: order/templates/order/sales_order_base.html:87 templates/js/order.html:228 +#: order/templates/order/sales_order_base.html:87 templates/js/order.html:243 msgid "Customer Reference" msgstr "" @@ -1735,15 +1819,15 @@ msgstr "" msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_detail.html:223 +#: order/templates/order/sales_order_detail.html:225 msgid "Fulfilled" msgstr "" -#: order/templates/order/sales_order_detail.html:278 +#: order/templates/order/sales_order_detail.html:280 msgid "Allocate parts" msgstr "" -#: order/templates/order/sales_order_detail.html:282 +#: order/templates/order/sales_order_detail.html:284 msgid "Delete line item " msgstr "" @@ -2291,7 +2375,7 @@ msgstr "" #: stock/templates/stock/item_base.html:58 #: 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 +#: templates/js/stock.html:661 templates/js/stock.html:897 msgid "Stock Item" msgstr "" @@ -2541,7 +2625,7 @@ msgstr "" msgid "Minimum Stock" msgstr "" -#: part/templates/part/detail.html:114 templates/js/order.html:247 +#: part/templates/part/detail.html:114 templates/js/order.html:262 msgid "Creation Date" msgstr "" @@ -2662,7 +2746,7 @@ msgstr "" msgid "Add new parameter" msgstr "" -#: part/templates/part/params.html:14 templates/InvenTree/settings/part.html:17 +#: part/templates/part/params.html:14 templates/InvenTree/settings/part.html:27 msgid "New Parameter" msgstr "" @@ -3446,7 +3530,7 @@ msgstr "" msgid "Return to stock" msgstr "" -#: stock/templates/stock/item_base.html:125 templates/js/stock.html:933 +#: stock/templates/stock/item_base.html:125 templates/js/stock.html:934 msgid "Uninstall stock item" msgstr "" @@ -3918,11 +4002,11 @@ msgstr "" msgid "Enter a search query" msgstr "" -#: templates/InvenTree/search.html:191 templates/js/stock.html:527 +#: templates/InvenTree/search.html:191 templates/js/stock.html:528 msgid "Shipped to customer" msgstr "" -#: templates/InvenTree/search.html:194 templates/js/stock.html:537 +#: templates/InvenTree/search.html:194 templates/js/stock.html:538 msgid "No stock location set" msgstr "" @@ -3934,22 +4018,6 @@ msgstr "" 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 "" @@ -3962,23 +4030,27 @@ msgstr "" msgid "New Currency" msgstr "" +#: templates/InvenTree/settings/global.html:10 +msgid "Global InvenTree Settings" +msgstr "" + #: templates/InvenTree/settings/part.html:9 msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:14 +#: templates/InvenTree/settings/part.html:24 msgid "Part Parameter Templates" msgstr "" -#: templates/InvenTree/settings/part.html:33 +#: templates/InvenTree/settings/part.html:43 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/part.html:53 +#: templates/InvenTree/settings/part.html:63 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/part.html:54 +#: templates/InvenTree/settings/part.html:64 msgid "Delete Template" msgstr "" @@ -3986,6 +4058,14 @@ msgstr "" msgid "Purchase Order Settings" msgstr "" +#: templates/InvenTree/settings/setting.html:16 +msgid "No value set" +msgstr "" + +#: templates/InvenTree/settings/setting.html:24 +msgid "Edit setting" +msgstr "" + #: templates/InvenTree/settings/settings.html:7 #: templates/InvenTree/settings/settings.html:13 templates/navbar.html:62 msgid "Settings" @@ -4012,11 +4092,15 @@ msgstr "" msgid "Theme" msgstr "" -#: templates/InvenTree/settings/tabs.html:12 +#: templates/InvenTree/settings/tabs.html:13 msgid "InvenTree Settings" msgstr "" -#: templates/InvenTree/settings/tabs.html:15 +#: templates/InvenTree/settings/tabs.html:16 +msgid "Global" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:19 msgid "Currency" msgstr "" @@ -4271,19 +4355,19 @@ msgstr "" msgid "Link" msgstr "" -#: templates/js/order.html:127 +#: templates/js/order.html:128 msgid "No purchase orders found" msgstr "" -#: templates/js/order.html:172 templates/js/stock.html:642 +#: templates/js/order.html:180 templates/js/stock.html:643 msgid "Date" msgstr "" -#: templates/js/order.html:202 +#: templates/js/order.html:210 msgid "No sales orders found" msgstr "" -#: templates/js/order.html:252 +#: templates/js/order.html:267 msgid "Shipment Date" msgstr "" @@ -4296,7 +4380,7 @@ msgid "No parts found" msgstr "" #: templates/js/part.html:275 templates/js/stock.html:409 -#: templates/js/stock.html:965 +#: templates/js/stock.html:966 msgid "Select" msgstr "" @@ -4376,67 +4460,67 @@ msgstr "" msgid "Undefined location" msgstr "" -#: templates/js/stock.html:468 +#: templates/js/stock.html:469 msgid "Stock item has been allocated" msgstr "" -#: templates/js/stock.html:472 +#: templates/js/stock.html:473 msgid "Stock item has been assigned to customer" msgstr "" -#: templates/js/stock.html:475 +#: templates/js/stock.html:476 msgid "Stock item was assigned to a build order" msgstr "" -#: templates/js/stock.html:477 +#: templates/js/stock.html:478 msgid "Stock item was assigned to a sales order" msgstr "" -#: templates/js/stock.html:482 +#: templates/js/stock.html:483 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/stock.html:489 +#: templates/js/stock.html:490 msgid "Stock item has been rejected" msgstr "" -#: templates/js/stock.html:493 +#: templates/js/stock.html:494 msgid "Stock item is lost" msgstr "" -#: templates/js/stock.html:497 templates/js/table_filters.html:60 +#: templates/js/stock.html:498 templates/js/table_filters.html:60 msgid "Depleted" msgstr "" -#: templates/js/stock.html:522 +#: templates/js/stock.html:523 msgid "Installed in Stock Item " msgstr "" -#: templates/js/stock.html:530 +#: templates/js/stock.html:531 msgid "Assigned to sales order" msgstr "" -#: templates/js/stock.html:708 +#: templates/js/stock.html:709 msgid "No user information" msgstr "" -#: templates/js/stock.html:792 +#: templates/js/stock.html:793 msgid "Create New Part" msgstr "" -#: templates/js/stock.html:804 +#: templates/js/stock.html:805 msgid "Create New Location" msgstr "" -#: templates/js/stock.html:903 +#: templates/js/stock.html:904 msgid "Serial" msgstr "" -#: templates/js/stock.html:996 templates/js/table_filters.html:70 +#: templates/js/stock.html:997 templates/js/table_filters.html:70 msgid "Installed" msgstr "" -#: templates/js/stock.html:1021 +#: templates/js/stock.html:1022 msgid "Install item" msgstr "" diff --git a/InvenTree/locale/es/LC_MESSAGES/django.po b/InvenTree/locale/es/LC_MESSAGES/django.po index 5c6d3a00c1..a5f56143f0 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-19 21:40+0000\n" +"POT-Creation-Date: 2020-10-25 10:54+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -46,34 +46,34 @@ msgstr "" msgid "Apply Theme" msgstr "" -#: InvenTree/helpers.py:348 order/models.py:187 order/models.py:261 +#: InvenTree/helpers.py:361 order/models.py:187 order/models.py:261 msgid "Invalid quantity provided" msgstr "" -#: InvenTree/helpers.py:351 +#: InvenTree/helpers.py:364 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:372 +#: InvenTree/helpers.py:385 #, python-brace-format msgid "Duplicate serial: {n}" msgstr "" -#: InvenTree/helpers.py:376 InvenTree/helpers.py:379 InvenTree/helpers.py:382 +#: InvenTree/helpers.py:389 InvenTree/helpers.py:392 InvenTree/helpers.py:395 #, python-brace-format msgid "Invalid group: {g}" msgstr "" -#: InvenTree/helpers.py:387 +#: InvenTree/helpers.py:400 #, python-brace-format msgid "Duplicate serial: {g}" msgstr "" -#: InvenTree/helpers.py:395 +#: InvenTree/helpers.py:408 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:399 +#: InvenTree/helpers.py:412 #, python-brace-format msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" @@ -86,7 +86,7 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:68 templates/js/stock.html:699 +#: InvenTree/models.py:68 templates/js/stock.html:700 msgid "User" msgstr "" @@ -169,7 +169,7 @@ msgid "Rejected" msgstr "" #: InvenTree/status_codes.py:223 build/templates/build/allocate.html:358 -#: order/templates/order/sales_order_detail.html:221 +#: order/templates/order/sales_order_detail.html:223 #: part/templates/part/tabs.html:23 templates/js/build.html:140 msgid "Allocated" msgstr "" @@ -204,7 +204,7 @@ msgstr "" msgid "Overage must be an integer value or a percentage" msgstr "" -#: InvenTree/views.py:703 +#: InvenTree/views.py:707 msgid "Database Statistics" msgstr "" @@ -278,7 +278,7 @@ 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 +#: templates/InvenTree/settings/tabs.html:28 users/models.py:30 msgid "Build Orders" msgstr "" @@ -297,16 +297,16 @@ 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_base.html:61 #: 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/order.html:167 templates/js/order.html:249 #: 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 +#: templates/js/stock.html:445 templates/js/stock.html:672 msgid "Description" msgstr "" @@ -334,7 +334,7 @@ msgstr "" #: templates/js/barcode.html:336 templates/js/bom.html:124 #: 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 +#: templates/js/stock.html:421 templates/js/stock.html:978 msgid "Part" msgstr "" @@ -385,7 +385,7 @@ msgid "Batch code for this build output" msgstr "" #: build/models.py:176 build/templates/build/detail.html:55 -#: company/templates/company/supplier_part_base.html:60 +#: company/templates/company/supplier_part_base.html:68 #: company/templates/company/supplier_part_detail.html:24 #: part/templates/part/detail.html:80 part/templates/part/part_base.html:102 #: stock/models.py:381 stock/templates/stock/item_base.html:266 @@ -396,14 +396,14 @@ msgstr "" msgid "Link to external URL" msgstr "" -#: build/models.py:181 build/templates/build/tabs.html:14 company/models.py:310 +#: build/models.py:181 build/templates/build/tabs.html:14 company/models.py:314 #: 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 #: stock/models.py:1404 stock/templates/stock/tabs.html:26 #: templates/js/barcode.html:391 templates/js/bom.html:223 -#: templates/js/stock.html:116 templates/js/stock.html:543 +#: templates/js/stock.html:116 templates/js/stock.html:544 msgid "Notes" msgstr "" @@ -446,7 +446,7 @@ msgid "Stock quantity to allocate to build" msgstr "" #: build/templates/build/allocate.html:17 -#: company/templates/company/detail_part.html:18 order/views.py:804 +#: company/templates/company/detail_part.html:22 order/views.py:804 #: part/templates/part/category.html:122 msgid "Order Parts" msgstr "" @@ -472,8 +472,8 @@ 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 +#: order/templates/order/sales_order_detail.html:70 +#: order/templates/order/sales_order_detail.html:152 stock/models.py:375 #: stock/templates/stock/item_base.html:178 msgid "Serial Number" msgstr "" @@ -482,11 +482,11 @@ msgstr "" #: build/templates/build/auto_allocate.html:20 #: build/templates/build/build_base.html:83 #: build/templates/build/detail.html:27 -#: company/templates/company/supplier_part_pricing.html:71 +#: company/templates/company/supplier_part_pricing.html:73 #: order/templates/order/order_wizard/select_parts.html:32 #: order/templates/order/purchase_order_detail.html:177 -#: order/templates/order/sales_order_detail.html:70 -#: order/templates/order/sales_order_detail.html:152 +#: order/templates/order/sales_order_detail.html:72 +#: order/templates/order/sales_order_detail.html:154 #: part/templates/part/allocation.html:16 #: part/templates/part/allocation.html:49 #: part/templates/part/sale_prices.html:80 stock/forms.py:297 @@ -495,7 +495,7 @@ msgstr "" #: 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:72 -#: templates/js/stock.html:690 templates/js/stock.html:905 +#: templates/js/stock.html:691 templates/js/stock.html:906 msgid "Quantity" msgstr "" @@ -504,17 +504,17 @@ msgstr "" #: 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 +#: templates/js/stock.html:519 msgid "Location" msgstr "" #: build/templates/build/allocate.html:210 -#: order/templates/order/sales_order_detail.html:92 templates/js/build.html:144 +#: order/templates/order/sales_order_detail.html:94 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:145 +#: order/templates/order/sales_order_detail.html:95 templates/js/build.html:145 msgid "Delete stock allocation" msgstr "" @@ -532,12 +532,12 @@ msgid "Assigned" msgstr "" #: build/templates/build/allocate.html:394 -#: order/templates/order/sales_order_detail.html:271 +#: order/templates/order/sales_order_detail.html:273 msgid "Buy parts" msgstr "" #: build/templates/build/allocate.html:398 -#: order/templates/order/sales_order_detail.html:275 +#: order/templates/order/sales_order_detail.html:277 msgid "Build parts" msgstr "" @@ -610,8 +610,8 @@ msgstr "" #: order/templates/order/receive_parts.html:24 #: 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 +#: templates/js/order.html:172 templates/js/order.html:254 +#: templates/js/stock.html:506 templates/js/stock.html:914 msgid "Status" msgstr "" @@ -621,7 +621,7 @@ msgstr "" #: 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:208 templates/js/order.html:213 +#: stock/templates/stock/item_base.html:208 templates/js/order.html:221 msgid "Sales Order" msgstr "" @@ -694,8 +694,8 @@ msgid "Stock can be taken from any available location." msgstr "" #: build/templates/build/detail.html:48 -#: stock/templates/stock/item_base.html:238 templates/js/stock.html:513 -#: templates/js/stock.html:920 templates/js/table_filters.html:34 +#: stock/templates/stock/item_base.html:238 templates/js/stock.html:514 +#: templates/js/stock.html:921 templates/js/table_filters.html:34 #: templates/js/table_filters.html:100 msgid "Batch" msgstr "" @@ -838,165 +838,249 @@ msgstr "" msgid "Updated Build Item" msgstr "" -#: common/models.py:107 -msgid "Settings key (must be unique - case insensitive" +#: common/models.py:51 +msgid "InvenTree Instance Name" msgstr "" -#: common/models.py:109 -msgid "Settings value" +#: common/models.py:53 +msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:122 -msgid "Key string must be unique" -msgstr "" - -#: common/models.py:143 -msgid "Currency Symbol e.g. $" -msgstr "" - -#: common/models.py:145 -msgid "Currency Suffix e.g. AUD" -msgstr "" - -#: common/models.py:147 -msgid "Currency Description" -msgstr "" - -#: common/models.py:149 -msgid "Currency Value" -msgstr "" - -#: common/models.py:151 -msgid "Use this currency as the base currency" -msgstr "" - -#: common/models.py:234 -msgid "Default" -msgstr "" - -#: common/views.py:21 -msgid "Create new Currency" -msgstr "" - -#: common/views.py:29 -msgid "Edit Currency" -msgstr "" - -#: common/views.py:36 -msgid "Delete Currency" -msgstr "" - -#: common/views.py:47 -msgid "Change Setting" -msgstr "" - -#: company/models.py:86 company/models.py:87 +#: common/models.py:57 company/models.py:89 company/models.py:90 msgid "Company name" msgstr "" -#: company/models.py:89 +#: common/models.py:58 +msgid "Internal company name" +msgstr "" + +#: common/models.py:63 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:64 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:68 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:69 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:75 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:76 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:82 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:83 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:89 +msgid "Build Order Reference Prefix" +msgstr "" + +#: common/models.py:90 +msgid "Prefix value for build order reference" +msgstr "" + +#: common/models.py:95 +msgid "Build Order Reference Regex" +msgstr "" + +#: common/models.py:96 +msgid "Regular expression pattern for matching build order reference" +msgstr "" + +#: common/models.py:100 +msgid "Sales Order Reference Prefix" +msgstr "" + +#: common/models.py:101 +msgid "Prefix value for sales order reference" +msgstr "" + +#: common/models.py:105 +msgid "Purchase Order Reference Prefix" +msgstr "" + +#: common/models.py:106 +msgid "Prefix value for purchase order reference" +msgstr "" + +#: common/models.py:272 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:274 +msgid "Settings value" +msgstr "" + +#: common/models.py:326 +msgid "Value must be a boolean value" +msgstr "" + +#: common/models.py:340 +msgid "Key string must be unique" +msgstr "" + +#: common/models.py:379 +msgid "Currency Symbol e.g. $" +msgstr "" + +#: common/models.py:381 +msgid "Currency Suffix e.g. AUD" +msgstr "" + +#: common/models.py:383 +msgid "Currency Description" +msgstr "" + +#: common/models.py:385 +msgid "Currency Value" +msgstr "" + +#: common/models.py:387 +msgid "Use this currency as the base currency" +msgstr "" + +#: common/models.py:470 +msgid "Default" +msgstr "" + +#: common/templates/common/edit_setting.html:11 +msgid "Current value" +msgstr "" + +#: common/views.py:23 +msgid "Create new Currency" +msgstr "" + +#: common/views.py:31 +msgid "Edit Currency" +msgstr "" + +#: common/views.py:38 +msgid "Delete Currency" +msgstr "" + +#: common/views.py:49 +msgid "Change Setting" +msgstr "" + +#: company/models.py:92 msgid "Company description" msgstr "" -#: company/models.py:89 +#: company/models.py:92 msgid "Description of the company" msgstr "" -#: company/models.py:91 company/templates/company/company_base.html:53 +#: company/models.py:94 company/templates/company/company_base.html:57 #: templates/js/company.html:61 msgid "Website" msgstr "" -#: company/models.py:91 +#: company/models.py:94 msgid "Company website URL" msgstr "" -#: company/models.py:94 company/templates/company/company_base.html:60 +#: company/models.py:97 company/templates/company/company_base.html:64 msgid "Address" msgstr "" -#: company/models.py:95 +#: company/models.py:98 msgid "Company address" msgstr "" -#: company/models.py:98 +#: company/models.py:101 msgid "Phone number" msgstr "" -#: company/models.py:99 +#: company/models.py:102 msgid "Contact phone number" msgstr "" -#: company/models.py:101 company/templates/company/company_base.html:74 +#: company/models.py:105 company/templates/company/company_base.html:78 msgid "Email" msgstr "" -#: company/models.py:101 +#: company/models.py:105 msgid "Contact email address" msgstr "" -#: company/models.py:104 company/templates/company/company_base.html:81 +#: company/models.py:108 company/templates/company/company_base.html:85 msgid "Contact" msgstr "" -#: company/models.py:105 +#: company/models.py:109 msgid "Point of contact" msgstr "" -#: company/models.py:107 +#: company/models.py:111 msgid "Link to external company information" msgstr "" -#: company/models.py:119 +#: company/models.py:123 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:121 +#: company/models.py:125 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:123 +#: company/models.py:127 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:279 stock/models.py:335 +#: company/models.py:283 stock/models.py:335 #: stock/templates/stock/item_base.html:164 msgid "Base Part" msgstr "" -#: company/models.py:284 +#: company/models.py:288 msgid "Select part" msgstr "" -#: company/models.py:290 +#: company/models.py:294 msgid "Select supplier" msgstr "" -#: company/models.py:293 +#: company/models.py:297 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:300 +#: company/models.py:304 msgid "Select manufacturer" msgstr "" -#: company/models.py:304 +#: company/models.py:308 msgid "Manufacturer part number" msgstr "" -#: company/models.py:306 +#: company/models.py:310 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:308 +#: company/models.py:312 msgid "Supplier part description" msgstr "" -#: company/models.py:312 +#: company/models.py:316 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:314 +#: company/models.py:318 msgid "Part packaging" msgstr "" @@ -1010,36 +1094,36 @@ msgstr "" msgid "Company" msgstr "" -#: company/templates/company/company_base.html:47 +#: company/templates/company/company_base.html:51 #: company/templates/company/detail.html:8 msgid "Company Details" msgstr "" -#: company/templates/company/company_base.html:67 +#: company/templates/company/company_base.html:71 msgid "Phone" msgstr "" #: company/templates/company/detail.html:16 -#: company/templates/company/supplier_part_base.html:76 +#: company/templates/company/supplier_part_base.html:84 #: company/templates/company/supplier_part_detail.html:30 part/bom.py:172 #: templates/js/company.html:44 templates/js/company.html:186 msgid "Manufacturer" msgstr "" #: company/templates/company/detail.html:21 -#: company/templates/company/supplier_part_base.html:66 +#: company/templates/company/supplier_part_base.html:74 #: company/templates/company/supplier_part_detail.html:21 #: 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:273 templates/js/company.html:48 -#: templates/js/company.html:162 templates/js/order.html:146 +#: templates/js/company.html:162 templates/js/order.html:154 msgid "Supplier" msgstr "" #: company/templates/company/detail.html:26 #: 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 +#: templates/js/company.html:40 templates/js/order.html:236 msgid "Customer" msgstr "" @@ -1047,60 +1131,60 @@ msgstr "" msgid "Supplier Parts" msgstr "" -#: company/templates/company/detail_part.html:13 +#: company/templates/company/detail_part.html:15 #: order/templates/order/purchase_order_detail.html:68 msgid "Create new supplier part" msgstr "" -#: company/templates/company/detail_part.html:13 +#: company/templates/company/detail_part.html:15 #: order/templates/order/purchase_order_detail.html:67 -#: part/templates/part/supplier.html:13 templates/js/stock.html:797 +#: part/templates/part/supplier.html:13 templates/js/stock.html:798 msgid "New Supplier Part" msgstr "" -#: company/templates/company/detail_part.html:15 +#: company/templates/company/detail_part.html:18 #: part/templates/part/category.html:117 part/templates/part/supplier.html:15 #: templates/stock_table.html:14 msgid "Options" msgstr "" -#: company/templates/company/detail_part.html:18 +#: company/templates/company/detail_part.html:22 #: part/templates/part/category.html:122 msgid "Order parts" msgstr "" -#: company/templates/company/detail_part.html:19 +#: company/templates/company/detail_part.html:25 msgid "Delete parts" msgstr "" -#: company/templates/company/detail_part.html:19 +#: company/templates/company/detail_part.html:25 msgid "Delete Parts" msgstr "" -#: company/templates/company/detail_part.html:43 -#: part/templates/part/category.html:114 templates/js/stock.html:791 +#: company/templates/company/detail_part.html:51 +#: part/templates/part/category.html:114 templates/js/stock.html:792 msgid "New Part" msgstr "" -#: company/templates/company/detail_part.html:44 +#: company/templates/company/detail_part.html:52 msgid "Create new Part" msgstr "" -#: company/templates/company/detail_part.html:49 company/views.py:51 +#: company/templates/company/detail_part.html:57 company/views.py:53 #: part/templates/part/supplier.html:45 msgid "New Supplier" msgstr "" -#: company/templates/company/detail_part.html:50 company/views.py:186 +#: company/templates/company/detail_part.html:58 company/views.py:192 msgid "Create new Supplier" msgstr "" -#: company/templates/company/detail_part.html:55 company/views.py:58 +#: company/templates/company/detail_part.html:63 company/views.py:60 #: part/templates/part/supplier.html:51 msgid "New Manufacturer" msgstr "" -#: company/templates/company/detail_part.html:56 company/views.py:189 +#: company/templates/company/detail_part.html:64 company/views.py:195 msgid "Create new Manufacturer" msgstr "" @@ -1133,17 +1217,17 @@ 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/InvenTree/settings/tabs.html:27 templates/navbar.html:33 +#: templates/InvenTree/settings/tabs.html:31 templates/navbar.html:33 #: users/models.py:31 msgid "Purchase Orders" msgstr "" -#: company/templates/company/purchase_orders.html:14 +#: company/templates/company/purchase_orders.html:15 #: order/templates/order/purchase_orders.html:18 msgid "Create new purchase order" msgstr "" -#: company/templates/company/purchase_orders.html:14 +#: company/templates/company/purchase_orders.html:15 #: order/templates/order/purchase_orders.html:18 msgid "New Purchase Order" msgstr "" @@ -1153,17 +1237,17 @@ 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/InvenTree/settings/tabs.html:30 templates/navbar.html:42 +#: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:42 #: users/models.py:32 msgid "Sales Orders" msgstr "" -#: company/templates/company/sales_orders.html:14 +#: company/templates/company/sales_orders.html:15 #: order/templates/order/sales_orders.html:18 msgid "Create new sales order" msgstr "" -#: company/templates/company/sales_orders.html:14 +#: company/templates/company/sales_orders.html:15 #: order/templates/order/sales_orders.html:18 msgid "New Sales Order" msgstr "" @@ -1174,41 +1258,41 @@ msgstr "" msgid "Supplier Part" msgstr "" -#: company/templates/company/supplier_part_base.html:23 +#: company/templates/company/supplier_part_base.html:26 #: part/templates/part/orders.html:14 part/templates/part/part_base.html:66 msgid "Order part" msgstr "" -#: company/templates/company/supplier_part_base.html:26 +#: company/templates/company/supplier_part_base.html:30 msgid "Edit supplier part" msgstr "" -#: company/templates/company/supplier_part_base.html:29 +#: company/templates/company/supplier_part_base.html:34 msgid "Delete supplier part" msgstr "" -#: company/templates/company/supplier_part_base.html:38 +#: company/templates/company/supplier_part_base.html:46 #: company/templates/company/supplier_part_detail.html:11 msgid "Supplier Part Details" msgstr "" -#: company/templates/company/supplier_part_base.html:43 +#: company/templates/company/supplier_part_base.html:51 #: company/templates/company/supplier_part_detail.html:14 msgid "Internal Part" msgstr "" -#: company/templates/company/supplier_part_base.html:70 +#: company/templates/company/supplier_part_base.html:78 #: company/templates/company/supplier_part_detail.html:22 part/bom.py:171 msgid "SKU" msgstr "" -#: company/templates/company/supplier_part_base.html:80 +#: company/templates/company/supplier_part_base.html:88 #: company/templates/company/supplier_part_detail.html:31 part/bom.py:173 #: templates/js/company.html:202 msgid "MPN" msgstr "" -#: company/templates/company/supplier_part_base.html:87 +#: company/templates/company/supplier_part_base.html:95 #: company/templates/company/supplier_part_detail.html:34 msgid "Note" msgstr "" @@ -1221,27 +1305,27 @@ msgstr "" msgid "Pricing Information" msgstr "" -#: company/templates/company/supplier_part_pricing.html:15 company/views.py:399 +#: company/templates/company/supplier_part_pricing.html:16 company/views.py:410 #: part/templates/part/sale_prices.html:13 part/views.py:2228 msgid "Add Price Break" msgstr "" -#: company/templates/company/supplier_part_pricing.html:32 +#: company/templates/company/supplier_part_pricing.html:34 #: part/templates/part/sale_prices.html:41 msgid "No price break information found" msgstr "" -#: company/templates/company/supplier_part_pricing.html:76 +#: company/templates/company/supplier_part_pricing.html:78 #: part/templates/part/sale_prices.html:85 templates/js/bom.html:207 msgid "Price" msgstr "" -#: company/templates/company/supplier_part_pricing.html:90 +#: company/templates/company/supplier_part_pricing.html:92 #: part/templates/part/sale_prices.html:99 msgid "Edit price break" msgstr "" -#: company/templates/company/supplier_part_pricing.html:91 +#: company/templates/company/supplier_part_pricing.html:93 #: part/templates/part/sale_prices.html:100 msgid "Delete price break" msgstr "" @@ -1257,8 +1341,8 @@ 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/InvenTree/settings/tabs.html:21 templates/js/part.html:124 -#: templates/js/part.html:372 templates/js/stock.html:452 +#: templates/InvenTree/settings/tabs.html:25 templates/js/part.html:124 +#: templates/js/part.html:372 templates/js/stock.html:453 #: templates/navbar.html:22 users/models.py:29 msgid "Stock" msgstr "" @@ -1271,93 +1355,93 @@ msgstr "" #: 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/InvenTree/settings/tabs.html:18 templates/navbar.html:19 +#: templates/InvenTree/settings/tabs.html:22 templates/navbar.html:19 #: templates/stats.html:8 templates/stats.html:17 users/models.py:28 msgid "Parts" msgstr "" -#: company/views.py:50 part/templates/part/tabs.html:42 +#: company/views.py:52 part/templates/part/tabs.html:42 #: templates/navbar.html:31 msgid "Suppliers" msgstr "" -#: company/views.py:57 templates/navbar.html:32 +#: company/views.py:59 templates/navbar.html:32 msgid "Manufacturers" msgstr "" -#: company/views.py:64 templates/navbar.html:41 +#: company/views.py:66 templates/navbar.html:41 msgid "Customers" msgstr "" -#: company/views.py:65 +#: company/views.py:67 msgid "New Customer" msgstr "" -#: company/views.py:73 +#: company/views.py:75 msgid "Companies" msgstr "" -#: company/views.py:74 +#: company/views.py:76 msgid "New Company" msgstr "" -#: company/views.py:151 +#: company/views.py:154 msgid "Update Company Image" msgstr "" -#: company/views.py:156 +#: company/views.py:160 msgid "Updated company image" msgstr "" -#: company/views.py:166 +#: company/views.py:170 msgid "Edit Company" msgstr "" -#: company/views.py:170 +#: company/views.py:175 msgid "Edited company information" msgstr "" -#: company/views.py:192 +#: company/views.py:198 msgid "Create new Customer" msgstr "" -#: company/views.py:194 +#: company/views.py:200 msgid "Create new Company" msgstr "" -#: company/views.py:221 +#: company/views.py:227 msgid "Created new company" msgstr "" -#: company/views.py:231 +#: company/views.py:237 msgid "Delete Company" msgstr "" -#: company/views.py:236 +#: company/views.py:243 msgid "Company was deleted" msgstr "" -#: company/views.py:260 +#: company/views.py:268 msgid "Edit Supplier Part" msgstr "" -#: company/views.py:269 templates/js/stock.html:798 +#: company/views.py:278 templates/js/stock.html:799 msgid "Create new Supplier Part" msgstr "" -#: company/views.py:329 +#: company/views.py:339 msgid "Delete Supplier Part" msgstr "" -#: company/views.py:404 part/views.py:2234 +#: company/views.py:416 part/views.py:2234 msgid "Added new price break" msgstr "" -#: company/views.py:441 part/views.py:2279 +#: company/views.py:453 part/views.py:2279 msgid "Edit Price Break" msgstr "" -#: company/views.py:456 part/views.py:2295 +#: company/views.py:469 part/views.py:2295 msgid "Delete Price Break" msgstr "" @@ -1489,7 +1573,7 @@ msgstr "" #: order/models.py:466 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:24 -#: stock/templates/stock/item_base.html:252 templates/js/order.html:138 +#: stock/templates/stock/item_base.html:252 templates/js/order.html:139 msgid "Purchase Order" msgstr "" @@ -1557,7 +1641,7 @@ msgstr "" msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:85 templates/js/order.html:153 +#: order/templates/order/order_base.html:85 templates/js/order.html:161 msgid "Supplier Reference" msgstr "" @@ -1613,7 +1697,7 @@ msgid "Select existing purchase orders, or create new orders." msgstr "" #: order/templates/order/order_wizard/select_pos.html:31 -#: templates/js/order.html:177 templates/js/order.html:257 +#: templates/js/order.html:185 templates/js/order.html:272 msgid "Items" msgstr "" @@ -1644,7 +1728,7 @@ msgid "Attachments" msgstr "" #: order/templates/order/purchase_order_detail.html:16 -#: order/templates/order/sales_order_detail.html:17 order/views.py:1117 +#: order/templates/order/sales_order_detail.html:18 order/views.py:1117 #: order/views.py:1232 msgid "Add Line Item" msgstr "" @@ -1656,7 +1740,7 @@ msgstr "" #: order/templates/order/purchase_order_detail.html:38 #: order/templates/order/purchase_order_detail.html:118 #: part/templates/part/category.html:171 part/templates/part/category.html:213 -#: templates/js/stock.html:803 +#: templates/js/stock.html:804 msgid "New Location" msgstr "" @@ -1676,7 +1760,7 @@ msgid "Order Code" msgstr "" #: order/templates/order/purchase_order_detail.html:213 -#: order/templates/order/sales_order_detail.html:281 +#: order/templates/order/sales_order_detail.html:283 msgid "Edit line item" msgstr "" @@ -1721,7 +1805,7 @@ msgstr "" msgid "Sales Order Details" msgstr "" -#: order/templates/order/sales_order_base.html:87 templates/js/order.html:228 +#: order/templates/order/sales_order_base.html:87 templates/js/order.html:243 msgid "Customer Reference" msgstr "" @@ -1735,15 +1819,15 @@ msgstr "" msgid "Sales Order Items" msgstr "" -#: order/templates/order/sales_order_detail.html:223 +#: order/templates/order/sales_order_detail.html:225 msgid "Fulfilled" msgstr "" -#: order/templates/order/sales_order_detail.html:278 +#: order/templates/order/sales_order_detail.html:280 msgid "Allocate parts" msgstr "" -#: order/templates/order/sales_order_detail.html:282 +#: order/templates/order/sales_order_detail.html:284 msgid "Delete line item " msgstr "" @@ -2291,7 +2375,7 @@ msgstr "" #: stock/templates/stock/item_base.html:58 #: 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 +#: templates/js/stock.html:661 templates/js/stock.html:897 msgid "Stock Item" msgstr "" @@ -2541,7 +2625,7 @@ msgstr "" msgid "Minimum Stock" msgstr "" -#: part/templates/part/detail.html:114 templates/js/order.html:247 +#: part/templates/part/detail.html:114 templates/js/order.html:262 msgid "Creation Date" msgstr "" @@ -2662,7 +2746,7 @@ msgstr "" msgid "Add new parameter" msgstr "" -#: part/templates/part/params.html:14 templates/InvenTree/settings/part.html:17 +#: part/templates/part/params.html:14 templates/InvenTree/settings/part.html:27 msgid "New Parameter" msgstr "" @@ -3446,7 +3530,7 @@ msgstr "" msgid "Return to stock" msgstr "" -#: stock/templates/stock/item_base.html:125 templates/js/stock.html:933 +#: stock/templates/stock/item_base.html:125 templates/js/stock.html:934 msgid "Uninstall stock item" msgstr "" @@ -3918,11 +4002,11 @@ msgstr "" msgid "Enter a search query" msgstr "" -#: templates/InvenTree/search.html:191 templates/js/stock.html:527 +#: templates/InvenTree/search.html:191 templates/js/stock.html:528 msgid "Shipped to customer" msgstr "" -#: templates/InvenTree/search.html:194 templates/js/stock.html:537 +#: templates/InvenTree/search.html:194 templates/js/stock.html:538 msgid "No stock location set" msgstr "" @@ -3934,22 +4018,6 @@ msgstr "" 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 "" @@ -3962,23 +4030,27 @@ msgstr "" msgid "New Currency" msgstr "" +#: templates/InvenTree/settings/global.html:10 +msgid "Global InvenTree Settings" +msgstr "" + #: templates/InvenTree/settings/part.html:9 msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:14 +#: templates/InvenTree/settings/part.html:24 msgid "Part Parameter Templates" msgstr "" -#: templates/InvenTree/settings/part.html:33 +#: templates/InvenTree/settings/part.html:43 msgid "No part parameter templates found" msgstr "" -#: templates/InvenTree/settings/part.html:53 +#: templates/InvenTree/settings/part.html:63 msgid "Edit Template" msgstr "" -#: templates/InvenTree/settings/part.html:54 +#: templates/InvenTree/settings/part.html:64 msgid "Delete Template" msgstr "" @@ -3986,6 +4058,14 @@ msgstr "" msgid "Purchase Order Settings" msgstr "" +#: templates/InvenTree/settings/setting.html:16 +msgid "No value set" +msgstr "" + +#: templates/InvenTree/settings/setting.html:24 +msgid "Edit setting" +msgstr "" + #: templates/InvenTree/settings/settings.html:7 #: templates/InvenTree/settings/settings.html:13 templates/navbar.html:62 msgid "Settings" @@ -4012,11 +4092,15 @@ msgstr "" msgid "Theme" msgstr "" -#: templates/InvenTree/settings/tabs.html:12 +#: templates/InvenTree/settings/tabs.html:13 msgid "InvenTree Settings" msgstr "" -#: templates/InvenTree/settings/tabs.html:15 +#: templates/InvenTree/settings/tabs.html:16 +msgid "Global" +msgstr "" + +#: templates/InvenTree/settings/tabs.html:19 msgid "Currency" msgstr "" @@ -4271,19 +4355,19 @@ msgstr "" msgid "Link" msgstr "" -#: templates/js/order.html:127 +#: templates/js/order.html:128 msgid "No purchase orders found" msgstr "" -#: templates/js/order.html:172 templates/js/stock.html:642 +#: templates/js/order.html:180 templates/js/stock.html:643 msgid "Date" msgstr "" -#: templates/js/order.html:202 +#: templates/js/order.html:210 msgid "No sales orders found" msgstr "" -#: templates/js/order.html:252 +#: templates/js/order.html:267 msgid "Shipment Date" msgstr "" @@ -4296,7 +4380,7 @@ msgid "No parts found" msgstr "" #: templates/js/part.html:275 templates/js/stock.html:409 -#: templates/js/stock.html:965 +#: templates/js/stock.html:966 msgid "Select" msgstr "" @@ -4376,67 +4460,67 @@ msgstr "" msgid "Undefined location" msgstr "" -#: templates/js/stock.html:468 +#: templates/js/stock.html:469 msgid "Stock item has been allocated" msgstr "" -#: templates/js/stock.html:472 +#: templates/js/stock.html:473 msgid "Stock item has been assigned to customer" msgstr "" -#: templates/js/stock.html:475 +#: templates/js/stock.html:476 msgid "Stock item was assigned to a build order" msgstr "" -#: templates/js/stock.html:477 +#: templates/js/stock.html:478 msgid "Stock item was assigned to a sales order" msgstr "" -#: templates/js/stock.html:482 +#: templates/js/stock.html:483 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/stock.html:489 +#: templates/js/stock.html:490 msgid "Stock item has been rejected" msgstr "" -#: templates/js/stock.html:493 +#: templates/js/stock.html:494 msgid "Stock item is lost" msgstr "" -#: templates/js/stock.html:497 templates/js/table_filters.html:60 +#: templates/js/stock.html:498 templates/js/table_filters.html:60 msgid "Depleted" msgstr "" -#: templates/js/stock.html:522 +#: templates/js/stock.html:523 msgid "Installed in Stock Item " msgstr "" -#: templates/js/stock.html:530 +#: templates/js/stock.html:531 msgid "Assigned to sales order" msgstr "" -#: templates/js/stock.html:708 +#: templates/js/stock.html:709 msgid "No user information" msgstr "" -#: templates/js/stock.html:792 +#: templates/js/stock.html:793 msgid "Create New Part" msgstr "" -#: templates/js/stock.html:804 +#: templates/js/stock.html:805 msgid "Create New Location" msgstr "" -#: templates/js/stock.html:903 +#: templates/js/stock.html:904 msgid "Serial" msgstr "" -#: templates/js/stock.html:996 templates/js/table_filters.html:70 +#: templates/js/stock.html:997 templates/js/table_filters.html:70 msgid "Installed" msgstr "" -#: templates/js/stock.html:1021 +#: templates/js/stock.html:1022 msgid "Install item" msgstr "" diff --git a/InvenTree/order/templates/order/sales_order_detail.html b/InvenTree/order/templates/order/sales_order_detail.html index b6cc761cc7..d21a4e950e 100644 --- a/InvenTree/order/templates/order/sales_order_detail.html +++ b/InvenTree/order/templates/order/sales_order_detail.html @@ -13,9 +13,11 @@

{% trans "Sales Order Items" %}

+{% if roles.sales_order.change %}
+{% endif %} diff --git a/InvenTree/part/templates/part/notes.html b/InvenTree/part/templates/part/notes.html index 3f833325cd..1c46f53bcd 100644 --- a/InvenTree/part/templates/part/notes.html +++ b/InvenTree/part/templates/part/notes.html @@ -37,7 +37,9 @@
+ {% if part.notes %} {{ part.notes | markdownify }} + {% endif %}
diff --git a/InvenTree/part/templatetags/inventree_extras.py b/InvenTree/part/templatetags/inventree_extras.py index 2c175003d0..3af495cc1c 100644 --- a/InvenTree/part/templatetags/inventree_extras.py +++ b/InvenTree/part/templatetags/inventree_extras.py @@ -5,7 +5,8 @@ import os from django import template from InvenTree import version, settings -from InvenTree.helpers import decimal2string + +import InvenTree.helpers from common.models import InvenTreeSetting, ColorTheme @@ -16,7 +17,14 @@ register = template.Library() def decimal(x, *args, **kwargs): """ Simplified rendering of a decimal number """ - return decimal2string(x) + return InvenTree.helpers.decimal2string(x) + + +@register.simple_tag() +def str2bool(x, *args, **kwargs): + """ Convert a string to a boolean value """ + + return InvenTree.helpers.str2bool(x) @register.simple_tag() @@ -28,7 +36,7 @@ def inrange(n, *args, **kwargs): @register.simple_tag() def multiply(x, y, *args, **kwargs): """ Multiply two numbers together """ - return decimal2string(x * y) + return InvenTree.helpers.decimal2string(x * y) @register.simple_tag() @@ -41,7 +49,7 @@ def add(x, y, *args, **kwargs): def part_allocation_count(build, part, *args, **kwargs): """ Return the total number of allocated to """ - return decimal2string(build.getAllocatedQuantity(part)) + return InvenTree.helpers.decimal2string(build.getAllocatedQuantity(part)) @register.simple_tag() @@ -87,8 +95,15 @@ def inventree_docs_url(*args, **kwargs): @register.simple_tag() -def inventree_setting(key, *args, **kwargs): - return InvenTreeSetting.get_setting(key, backup_value=kwargs.get('backup', None)) +def setting_object(key, *args, **kwargs): + """ + Return a setting object speciifed by the given key + (Or return None if the setting does not exist) + """ + + setting = InvenTreeSetting.get_setting_object(key) + + return setting @register.simple_tag() diff --git a/InvenTree/templates/InvenTree/settings/build.html b/InvenTree/templates/InvenTree/settings/build.html index 6d19e21f1a..781402795b 100644 --- a/InvenTree/templates/InvenTree/settings/build.html +++ b/InvenTree/templates/InvenTree/settings/build.html @@ -15,17 +15,8 @@
- - - - - - - - - - - + {% include "InvenTree/settings/setting.html" with key="BUILDORDER_REFERENCE_PREFIX" %} + {% include "InvenTree/settings/setting.html" with key="BUILDORDER_REFERENCE_REGEX" %}
{% 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" %}
diff --git a/InvenTree/templates/InvenTree/settings/global.html b/InvenTree/templates/InvenTree/settings/global.html new file mode 100644 index 0000000000..7dcdd54bea --- /dev/null +++ b/InvenTree/templates/InvenTree/settings/global.html @@ -0,0 +1,23 @@ +{% extends "InvenTree/settings/settings.html" %} +{% load i18n %} +{% load inventree_extras %} + +{% block tabs %} +{% include "InvenTree/settings/tabs.html" with tab='global' %} +{% endblock %} + +{% block subtitle %} +{% trans "Global InvenTree Settings" %} +{% endblock %} + +{% block settings %} + + + + + {% include "InvenTree/settings/setting.html" with key="INVENTREE_INSTANCE" %} + {% include "InvenTree/settings/setting.html" with key="INVENTREE_COMPANY_NAME" %} + +
+ +{% endblock %} \ No newline at end of file diff --git a/InvenTree/templates/InvenTree/settings/part.html b/InvenTree/templates/InvenTree/settings/part.html index 7c028ca6d6..cac04a60ff 100644 --- a/InvenTree/templates/InvenTree/settings/part.html +++ b/InvenTree/templates/InvenTree/settings/part.html @@ -11,6 +11,16 @@ {% block settings %} + + + + {% include "InvenTree/settings/setting.html" with key="PART_IPN_REGEX" %} + {% include "InvenTree/settings/setting.html" with key="PART_COPY_BOM" %} + {% include "InvenTree/settings/setting.html" with key="PART_COPY_PARAMETERS" %} + {% include "InvenTree/settings/setting.html" with key="PART_COPY_TESTS" %} + +
+

{% trans "Part Parameter Templates" %}

@@ -53,7 +63,7 @@ var bEdit = ""; var bDel = ""; - var html = "
" + bEdit + bDel + "
"; + var html = "
" + bEdit + bDel + "
"; return html; } diff --git a/InvenTree/templates/InvenTree/settings/po.html b/InvenTree/templates/InvenTree/settings/po.html index 7d32611404..a709d40dd3 100644 --- a/InvenTree/templates/InvenTree/settings/po.html +++ b/InvenTree/templates/InvenTree/settings/po.html @@ -10,4 +10,10 @@ {% endblock %} {% block settings %} + + + + {% include "InvenTree/settings/setting.html" with key="PURCHASEORDER_REFERENCE_PREFIX" %} + +
{% endblock %} \ No newline at end of file diff --git a/InvenTree/templates/InvenTree/settings/setting.html b/InvenTree/templates/InvenTree/settings/setting.html new file mode 100644 index 0000000000..ffbb78cbbc --- /dev/null +++ b/InvenTree/templates/InvenTree/settings/setting.html @@ -0,0 +1,29 @@ +{% load inventree_extras %} +{% load i18n %} + +{% setting_object key as setting %} + + {{ setting.name }} + + {% if setting.is_bool %} +
+ +
+ {% else %} + {% if setting.value %} + {{ setting.value }}{{ setting.units }} + {% else %} + {% trans "No value set" %} + {% endif %} + {% endif %} + + {{ setting.description }} + + +
+ +
+ + \ No newline at end of file diff --git a/InvenTree/templates/InvenTree/settings/settings.html b/InvenTree/templates/InvenTree/settings/settings.html index 90adfd5fed..fe9fd00e53 100644 --- a/InvenTree/templates/InvenTree/settings/settings.html +++ b/InvenTree/templates/InvenTree/settings/settings.html @@ -37,3 +37,20 @@ InvenTree | {% trans "Settings" %} {% block js_load %} {{ block.super }} {% endblock %} + +{% block js_ready %} +{{ block.super }} + +$('table').find('.btn-edit-setting').click(function() { + var setting = $(this).attr('setting'); + var pk = $(this).attr('pk'); + + launchModalForm( + `/settings/${pk}/edit/`, + { + reload: true, + } + ); +}); + +{% endblock %} diff --git a/InvenTree/templates/InvenTree/settings/so.html b/InvenTree/templates/InvenTree/settings/so.html index e66fd85148..368374532f 100644 --- a/InvenTree/templates/InvenTree/settings/so.html +++ b/InvenTree/templates/InvenTree/settings/so.html @@ -10,4 +10,12 @@ {% endblock %} {% block settings %} + + + + + {% include "InvenTree/settings/setting.html" with key="SALESORDER_REFERENCE_PREFIX" %} + +
+ {% endblock %} \ No newline at end of file diff --git a/InvenTree/templates/InvenTree/settings/tabs.html b/InvenTree/templates/InvenTree/settings/tabs.html index ee402feb4f..d104908c49 100644 --- a/InvenTree/templates/InvenTree/settings/tabs.html +++ b/InvenTree/templates/InvenTree/settings/tabs.html @@ -9,8 +9,12 @@ {% trans "Theme" %} +{% if user.is_staff %}

{% trans "InvenTree Settings" %}

\ No newline at end of file + +{% endif %} \ No newline at end of file diff --git a/InvenTree/templates/js/build.html b/InvenTree/templates/js/build.html index 6a12b97bfd..1f577802b2 100644 --- a/InvenTree/templates/js/build.html +++ b/InvenTree/templates/js/build.html @@ -42,7 +42,7 @@ function loadBuildTable(table, options) { switchable: false, formatter: function(value, row, index, field) { - var prefix = "{% inventree_setting 'BUILDORDER_REFERENCE_PREFIX' %}"; + var prefix = "{% settings_value 'BUILDORDER_REFERENCE_PREFIX' %}"; if (prefix) { value = `${prefix}${value}`; diff --git a/InvenTree/templates/js/order.html b/InvenTree/templates/js/order.html index 4dbfbefa13..0c958c65a2 100644 --- a/InvenTree/templates/js/order.html +++ b/InvenTree/templates/js/order.html @@ -139,7 +139,7 @@ function loadPurchaseOrderTable(table, options) { title: '{% trans "Purchase Order" %}', formatter: function(value, row, index, field) { - var prefix = "{% inventree_setting 'PURCHASEORDER_REFERENCE_PREFIX' %}"; + var prefix = "{% settings_value 'PURCHASEORDER_REFERENCE_PREFIX' %}"; if (prefix) { value = `${prefix}${value}`; @@ -221,7 +221,7 @@ function loadSalesOrderTable(table, options) { title: '{% trans "Sales Order" %}', formatter: function(value, row, index, field) { - var prefix = "{% inventree_setting 'SALESORDER_REFERENCE_PREFIX' %}"; + var prefix = "{% settings_value 'SALESORDER_REFERENCE_PREFIX' %}"; if (prefix) { value = `${prefix}${value}`;