diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index c7ea36b147..80ff84e297 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -7,7 +7,7 @@ services: expose: - 5432/tcp volumes: - - ../dev:/var/lib/postgresql/data:z + - inventreedatabase:/var/lib/postgresql/data:z environment: POSTGRES_DB: inventree POSTGRES_USER: inventree_user @@ -19,7 +19,6 @@ services: target: dev args: base_image: "mcr.microsoft.com/vscode/devcontainers/base:alpine-3.18" - workspace: "${containerWorkspaceFolder}" data_dir: "dev" volumes: - ../:/home/inventree:z @@ -32,7 +31,12 @@ services: INVENTREE_DB_USER: inventree_user INVENTREE_DB_PASSWORD: inventree_password INVENTREE_PLUGINS_ENABLED: True + INVENTREE_SITE_URL: http://localhost:8000 + INVENTREE_CORS_ORIGIN_ALLOW_ALL: True INVENTREE_PY_ENV: /home/inventree/dev/venv depends_on: - db + +volumes: + inventreedatabase: diff --git a/.devcontainer/postCreateCommand.sh b/.devcontainer/postCreateCommand.sh index 04be371ef1..9cf0b9c3a0 100755 --- a/.devcontainer/postCreateCommand.sh +++ b/.devcontainer/postCreateCommand.sh @@ -7,9 +7,13 @@ git config --global --add safe.directory /home/inventree python3 -m venv /home/inventree/dev/venv --system-site-packages --upgrade-deps . /home/inventree/dev/venv/bin/activate -# setup InvenTree server +# Run initial InvenTree server setup invoke update -s + +# Configure dev environment invoke setup-dev + +# Install required frontend packages invoke frontend-install # remove existing gitconfig created by "Avoiding Dubious Ownership" step diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index ff3198174d..10a5e7a1c2 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,4 +1,5 @@ github: inventree ko_fi: inventree patreon: inventree +polar: inventree custom: [paypal.me/inventree] diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index 711c49e8be..20fb3ce9d2 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -44,6 +44,7 @@ jobs: - docker-compose.yml - docker.dev.env - Dockerfile + - InvenTree/settings.py - requirements.txt - tasks.py @@ -58,15 +59,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} python_version: "3.11" - strategy: - matrix: - platform: ["linux/amd64", "linux/arm64"] - include: - - platform: linux/amd64 - os: ubuntu-latest - - platform: linux/arm64 - os: ubuntu-latest # in the future we can try to use alternative runners here - runs-on: ${{ matrix.os }} + runs-on: ubuntu-latest # in the future we can try to use alternative runners here steps: - name: Check out repo @@ -82,6 +75,14 @@ jobs: python3 ci/version_check.py echo "git_commit_hash=$(git rev-parse --short HEAD)" >> $GITHUB_ENV echo "git_commit_date=$(git show -s --format=%ci)" >> $GITHUB_ENV + - name: Test Docker Image + id: test-docker + run: | + docker build . --target production --tag inventree-test + docker run --rm inventree-test invoke --version + docker run --rm inventree-test invoke --list + docker run --rm inventree-test gunicorn --version + docker run --rm inventree-test pg_dump --version - name: Build Docker Image # Build the development docker image (using docker-compose.yml) run: docker-compose build --no-cache @@ -148,24 +149,18 @@ jobs: inventree/inventree ghcr.io/${{ github.repository }} - - name: Build and Push - id: build-and-push + - name: Push Docker Images + id: push-docker if: github.event_name != 'pull_request' uses: docker/build-push-action@0565240e2d4ab88bba5387d719585280857ece09 # pin@v5.0.0 with: context: . - platforms: ${{ matrix.platform }} + platforms: linux/amd64,linux/arm64 push: true sbom: true provenance: false target: production - tags: ${{ steps.meta.outputs.tags }} + tags: ${{ env.docker_tags }} build-args: | commit_hash=${{ env.git_commit_hash }} commit_date=${{ env.git_commit_date }} - - - name: Sign the published image - if: ${{ false }} # github.event_name != 'pull_request' - env: - COSIGN_EXPERIMENTAL: "true" - run: cosign sign ${{ steps.meta.outputs.tags }}@${{ steps.build-and-push.outputs.digest }} diff --git a/.github/workflows/qc_checks.yaml b/.github/workflows/qc_checks.yaml index 85073cf38f..10d905db29 100644 --- a/.github/workflows/qc_checks.yaml +++ b/.github/workflows/qc_checks.yaml @@ -20,6 +20,7 @@ env: INVENTREE_MEDIA_ROOT: ../test_inventree_media INVENTREE_STATIC_ROOT: ../test_inventree_static INVENTREE_BACKUP_DIR: ../test_inventree_backup + INVENTREE_SITE_URL: http://localhost:8000 jobs: paths-filter: @@ -144,7 +145,7 @@ jobs: dev-install: true update: true - name: Export API Documentation - run: invoke schema --ignore-warnings + run: invoke schema --ignore-warnings --filename InvenTree/schema.yml - name: Upload schema uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # pin@v3.1.3 with: @@ -160,7 +161,7 @@ jobs: echo "URL: $url" curl -s -o api.yaml $url echo "Downloaded api.yaml" - - name: Check for differences in schemas + - name: Check for differences in API Schema if: needs.paths-filter.outputs.api == 'false' run: | diff --color -u InvenTree/schema.yml api.yaml @@ -216,9 +217,10 @@ jobs: INVENTREE_ADMIN_USER: testuser INVENTREE_ADMIN_PASSWORD: testpassword INVENTREE_ADMIN_EMAIL: test@test.com - INVENTREE_PYTHON_TEST_SERVER: http://localhost:12345 + INVENTREE_PYTHON_TEST_SERVER: http://127.0.0.1:12345 INVENTREE_PYTHON_TEST_USERNAME: testuser INVENTREE_PYTHON_TEST_PASSWORD: testpassword + INVENTREE_SITE_URL: http://127.0.0.1:12345 steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 @@ -505,7 +507,7 @@ jobs: - name: Install dependencies run: cd src/frontend && yarn install - name: Build frontend - run: cd src/frontend && npm run build + run: cd src/frontend && npm run compile && npm run build - name: Zip frontend run: | cd InvenTree/web/static diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b22280b195..44b616f7c8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -37,7 +37,7 @@ jobs: - name: Install dependencies run: cd src/frontend && yarn install - name: Build frontend - run: cd src/frontend && npm run build + run: cd src/frontend && npm run compile && npm run build - name: Zip frontend run: | cd InvenTree/web/static/web diff --git a/.github/workflows/translations.yml b/.github/workflows/translations.yml index 600d5d22c2..8389c2af2d 100644 --- a/.github/workflows/translations.yml +++ b/.github/workflows/translations.yml @@ -22,6 +22,7 @@ jobs: INVENTREE_MEDIA_ROOT: ./media INVENTREE_STATIC_ROOT: ./static INVENTREE_BACKUP_DIR: ./backup + INVENTREE_SITE_URL: http://localhost:8000 steps: - name: Checkout Code diff --git a/.gitignore b/.gitignore index 5f2b31d170..bcc2f2ac5d 100644 --- a/.gitignore +++ b/.gitignore @@ -104,3 +104,7 @@ api.yaml # web frontend (static files) InvenTree/web/static + +# Generated docs files +docs/docs/api/*.yml +docs/docs/api/schema/*.yml diff --git a/.pkgr.yml b/.pkgr.yml index 2bb7ae530e..88f27034a5 100644 --- a/.pkgr.yml +++ b/.pkgr.yml @@ -19,9 +19,9 @@ before: - contrib/packager.io/before.sh dependencies: - curl - - python3.9 - - python3.9-venv - - python3.9-dev + - "python3.9 | python3.10 | python3.11" + - "python3.9-venv | python3.10-venv | python3.11-venv" + - "python3.9-dev | python3.10-dev | python3.11-dev" - python3-pip - python3-cffi - python3-brotli @@ -36,4 +36,3 @@ dependencies: targets: ubuntu-20.04: true debian-11: true - debian-12: true diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8b340ebe93..b6cbc60ba8 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -16,7 +16,7 @@ repos: - id: check-yaml - id: mixed-line-ending - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.2.2 + rev: v0.3.3 hooks: - id: ruff-format args: [--preview] @@ -26,7 +26,7 @@ repos: --preview ] - repo: https://github.com/matmair/ruff-pre-commit - rev: 830893bf46db844d9c99b6c468e285199adf2de6 # uv-018 + rev: 8bed1087452bdf816b840ea7b6848b21d32b7419 # uv-018 hooks: - id: pip-compile name: pip-compile requirements-dev.in @@ -60,7 +60,7 @@ repos: - "prettier@^2.4.1" - "@trivago/prettier-plugin-sort-imports" - repo: https://github.com/pre-commit/mirrors-eslint - rev: "v9.0.0-beta.0" + rev: "v9.0.0-beta.2" hooks: - id: eslint additional_dependencies: diff --git a/Dockerfile b/Dockerfile index c87a7dea44..bb3f3134e3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,7 +23,6 @@ ENV PYTHONUNBUFFERED 1 ENV PIP_DISABLE_PIP_VERSION_CHECK 1 ENV INVOKE_RUN_SHELL="/bin/ash" -ENV INVENTREE_LOG_LEVEL="WARNING" ENV INVENTREE_DOCKER="true" # InvenTree paths @@ -48,8 +47,6 @@ ENV INVENTREE_BACKGROUND_WORKERS="4" ENV INVENTREE_WEB_ADDR=0.0.0.0 ENV INVENTREE_WEB_PORT=8000 -ENV VIRTUAL_ENV=/usr/local - LABEL org.label-schema.schema-version="1.0" \ org.label-schema.build-date=${DATE} \ org.label-schema.vendor="inventree" \ @@ -65,8 +62,11 @@ RUN apk add --no-cache \ libjpeg libwebp zlib \ # Weasyprint requirements : https://doc.courtbouillon.org/weasyprint/stable/first_steps.html#alpine-3-12 py3-pip py3-pillow py3-cffi py3-brotli pango poppler-utils openldap \ - # Core database packages - postgresql13-client && \ + # Postgres client + postgresql13-client \ + # MySQL / MariaDB client + mariadb-client mariadb-connector-c \ + && \ # fonts apk --update --upgrade --no-cache add fontconfig ttf-freefont font-noto terminus-font && fc-cache -f @@ -96,7 +96,7 @@ FROM inventree_base as prebuild ENV PATH=/root/.local/bin:$PATH RUN ./install_build_packages.sh --no-cache --virtual .build-deps && \ - pip install --user uv --no-cache-dir && pip install -r base_requirements.txt -r requirements.txt --no-cache && \ + pip install --user -r base_requirements.txt -r requirements.txt --no-cache && \ apk --purge del .build-deps # Frontend builder image: diff --git a/InvenTree/InvenTree/api_version.py b/InvenTree/InvenTree/api_version.py index 692ec09480..bc69e28ae8 100644 --- a/InvenTree/InvenTree/api_version.py +++ b/InvenTree/InvenTree/api_version.py @@ -1,11 +1,43 @@ """InvenTree API version information.""" # InvenTree API version -INVENTREE_API_VERSION = 177 +INVENTREE_API_VERSION = 184 """Increment this API version number whenever there is a significant change to the API that any clients need to know about.""" INVENTREE_API_TEXT = """ +v184 - 2024-03-17 : https://github.com/inventree/InvenTree/pull/10464 + - Add additional fields for tests (start/end datetime, test station) + +v183 - 2024-03-14 : https://github.com/inventree/InvenTree/pull/5972 + - Adds "category_default_location" annotated field to part serializer + - Adds "part_detail.category_default_location" annotated field to stock item serializer + - Adds "part_detail.category_default_location" annotated field to purchase order line serializer + - Adds "parent_default_location" annotated field to category serializer + +v182 - 2024-03-13 : https://github.com/inventree/InvenTree/pull/6714 + - Expose ReportSnippet model to the /report/snippet/ API endpoint + - Expose ReportAsset model to the /report/asset/ API endpoint + +v181 - 2024-02-21 : https://github.com/inventree/InvenTree/pull/6541 + - Adds "width" and "height" fields to the LabelTemplate API endpoint + - Adds "page_size" and "landscape" fields to the ReportTemplate API endpoint + +v180 - 2024-3-02 : https://github.com/inventree/InvenTree/pull/6463 + - Tweaks to API documentation to allow automatic documentation generation + +v179 - 2024-03-01 : https://github.com/inventree/InvenTree/pull/6605 + - Adds "subcategories" count to PartCategory serializer + - Adds "sublocations" count to StockLocation serializer + - Adds "image" field to PartBrief serializer + - Adds "image" field to CompanyBrief serializer + +v178 - 2024-02-29 : https://github.com/inventree/InvenTree/pull/6604 + - Adds "external_stock" field to the Part API endpoint + - Adds "external_stock" field to the BomItem API endpoint + - Adds "external_stock" field to the BuildLine API endpoint + - Stock quantites represented in the BuildLine API endpoint are now filtered by Build.source_location + v177 - 2024-02-27 : https://github.com/inventree/InvenTree/pull/6581 - Adds "subcategoies" count to PartCategoryTree serializer - Adds "sublocations" count to StockLocationTree serializer diff --git a/InvenTree/InvenTree/conversion.py b/InvenTree/InvenTree/conversion.py index e154dc76f8..c02fd7a561 100644 --- a/InvenTree/InvenTree/conversion.py +++ b/InvenTree/InvenTree/conversion.py @@ -39,9 +39,9 @@ def reload_unit_registry(): reg = pint.UnitRegistry(autoconvert_offset_to_baseunit=True) # Aliases for temperature units - reg.define('@alias degC = celsius = Celsius') - reg.define('@alias degF = fahrenheit = Fahrenheit') - reg.define('@alias degK = kelvin = Kelvin') + reg.define('@alias degC = Celsius') + reg.define('@alias degF = Fahrenheit') + reg.define('@alias degK = Kelvin') # Define some "standard" additional units reg.define('piece = 1') @@ -165,6 +165,13 @@ def convert_physical_value(value: str, unit: str = None, strip_units=True): value = str(value).strip() if value else '' unit = str(unit).strip() if unit else '' + # Handle imperial length measurements + if value.count("'") == 1 and value.endswith("'"): + value = value.replace("'", ' feet') + + if value.count('"') == 1 and value.endswith('"'): + value = value.replace('"', ' inches') + # Error on blank values if not value: raise ValidationError(_('No value provided')) diff --git a/InvenTree/InvenTree/helpers.py b/InvenTree/InvenTree/helpers.py index d43a462f92..1e30999cec 100644 --- a/InvenTree/InvenTree/helpers.py +++ b/InvenTree/InvenTree/helpers.py @@ -1,5 +1,6 @@ """Provides helper functions used throughout the InvenTree project.""" +import datetime import hashlib import io import json @@ -11,6 +12,7 @@ from decimal import Decimal, InvalidOperation from typing import TypeVar from wsgiref.util import FileWrapper +import django.utils.timezone as timezone from django.conf import settings from django.contrib.staticfiles.storage import StaticFilesStorage from django.core.exceptions import FieldError, ValidationError @@ -18,6 +20,7 @@ from django.core.files.storage import default_storage from django.http import StreamingHttpResponse from django.utils.translation import gettext_lazy as _ +import pytz import regex from bleach import clean from djmoney.money import Money @@ -87,11 +90,24 @@ def generateTestKey(test_name: str) -> str: key = test_name.strip().lower() key = key.replace(' ', '') - # Remove any characters that cannot be used to represent a variable - key = re.sub(r'[^a-zA-Z0-9_]', '', key) + def valid_char(char: str): + """Determine if a particular character is valid for use in a test key.""" + if not char.isprintable(): + return False - # If the key starts with a digit, prefix with an underscore - if key[0].isdigit(): + if char.isidentifier(): + return True + + if char.isalnum(): + return True + + return False + + # Remove any characters that cannot be used to represent a variable + key = ''.join([c for c in key if valid_char(c)]) + + # If the key starts with a non-identifier character, prefix with an underscore + if len(key) > 0 and not key[0].isidentifier(): key = '_' + key return key @@ -850,6 +866,56 @@ def hash_file(filename: str): return hashlib.md5(open(filename, 'rb').read()).hexdigest() +def server_timezone() -> str: + """Return the timezone of the server as a string. + + e.g. "UTC" / "Australia/Sydney" etc + """ + return settings.TIME_ZONE + + +def to_local_time(time, target_tz: str = None): + """Convert the provided time object to the local timezone. + + Arguments: + time: The time / date to convert + target_tz: The desired timezone (string) - defaults to server time + + Returns: + A timezone aware datetime object, with the desired timezone + + Raises: + TypeError: If the provided time object is not a datetime or date object + """ + if isinstance(time, datetime.datetime): + pass + elif isinstance(time, datetime.date): + time = timezone.datetime(year=time.year, month=time.month, day=time.day) + else: + raise TypeError( + f'Argument must be a datetime or date object (found {type(time)}' + ) + + # Extract timezone information from the provided time + source_tz = getattr(time, 'tzinfo', None) + + if not source_tz: + # Default to UTC if not provided + source_tz = pytz.utc + + if not target_tz: + target_tz = server_timezone() + + try: + target_tz = pytz.timezone(str(target_tz)) + except pytz.UnknownTimeZoneError: + target_tz = pytz.utc + + target_time = time.replace(tzinfo=source_tz).astimezone(target_tz) + + return target_time + + def get_objectreference( obj, type_ref: str = 'content_type', object_ref: str = 'object_id' ): diff --git a/InvenTree/InvenTree/locales.py b/InvenTree/InvenTree/locales.py index b0983871b3..d5c7391261 100644 --- a/InvenTree/InvenTree/locales.py +++ b/InvenTree/InvenTree/locales.py @@ -2,12 +2,14 @@ If a new language translation is supported, it must be added here After adding a new language, run the following command: + python manage.py makemessages -l -e html,js,py --no-wrap -where is the code for the new language + - where is the code for the new language + Additionally, update the following files with the new locale code: - /src/frontend/.linguirc file -- /src/frontend/src/context/LanguageContext.tsx +- /src/frontend/src/contexts/LanguageContext.tsx """ from django.utils.translation import gettext_lazy as _ @@ -30,6 +32,7 @@ LOCALES = [ ('it', _('Italian')), ('ja', _('Japanese')), ('ko', _('Korean')), + ('lv', _('Latvian')), ('nl', _('Dutch')), ('no', _('Norwegian')), ('pl', _('Polish')), diff --git a/InvenTree/InvenTree/middleware.py b/InvenTree/InvenTree/middleware.py index e9a272e13b..1eda1df57a 100644 --- a/InvenTree/InvenTree/middleware.py +++ b/InvenTree/InvenTree/middleware.py @@ -74,6 +74,7 @@ class AuthRequiredMiddleware(object): # Is the function exempt from auth requirements? path_func = resolve(request.path).func + if getattr(path_func, 'auth_exempt', False) is True: return self.get_response(request) @@ -119,7 +120,13 @@ class AuthRequiredMiddleware(object): ] # Do not redirect requests to any of these paths - paths_ignore = ['/api/', '/js/', '/media/', '/static/'] + paths_ignore = [ + '/api/', + '/auth/', + '/js/', + settings.MEDIA_URL, + settings.STATIC_URL, + ] if path not in urls and not any( path.startswith(p) for p in paths_ignore diff --git a/InvenTree/InvenTree/serializers.py b/InvenTree/InvenTree/serializers.py index 4745647ea5..3b4978d15d 100644 --- a/InvenTree/InvenTree/serializers.py +++ b/InvenTree/InvenTree/serializers.py @@ -352,7 +352,12 @@ class InvenTreeModelSerializer(serializers.ModelSerializer): try: instance.full_clean() except (ValidationError, DjangoValidationError) as exc: - data = exc.message_dict + if hasattr(exc, 'message_dict'): + data = exc.message_dict + elif hasattr(exc, 'message'): + data = {'non_field_errors': [str(exc.message)]} + else: + data = {'non_field_errors': [str(exc)]} # Change '__all__' key (django style) to 'non_field_errors' (DRF style) if '__all__' in data: diff --git a/InvenTree/InvenTree/settings.py b/InvenTree/InvenTree/settings.py index f08b85e2e7..ff322ac10d 100644 --- a/InvenTree/InvenTree/settings.py +++ b/InvenTree/InvenTree/settings.py @@ -22,9 +22,11 @@ from django.http import Http404 from django.utils.translation import gettext_lazy as _ import moneyed +import pytz from dotenv import load_dotenv from InvenTree.config import get_boolean_setting, get_custom_file, get_setting +from InvenTree.ready import isInMainThread from InvenTree.sentry import default_sentry_dsn, init_sentry from InvenTree.version import checkMinPythonVersion, inventreeApiVersion @@ -130,6 +132,9 @@ DATA_UPLOAD_MAX_NUMBER_FIELDS = 10000 # Web URL endpoint for served static files STATIC_URL = '/static/' +# Web URL endpoint for served media files +MEDIA_URL = '/media/' + STATICFILES_DIRS = [] # Translated Template settings @@ -155,9 +160,6 @@ STATFILES_I18_PROCESSORS = ['InvenTree.context.status_codes'] # Color Themes Directory STATIC_COLOR_THEMES_DIR = STATIC_ROOT.joinpath('css', 'color-themes').resolve() -# Web URL endpoint for served media files -MEDIA_URL = '/media/' - # Database backup options # Ref: https://django-dbbackup.readthedocs.io/en/master/configuration.html DBBACKUP_SEND_EMAIL = False @@ -205,6 +207,7 @@ INSTALLED_APPS = [ 'django.contrib.auth', 'django.contrib.contenttypes', 'user_sessions', # db user sessions + 'whitenoise.runserver_nostatic', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.sites', @@ -249,6 +252,7 @@ MIDDLEWARE = CONFIG.get( 'django.middleware.locale.LocaleMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'corsheaders.middleware.CorsMiddleware', + 'whitenoise.middleware.WhiteNoiseMiddleware', 'django.middleware.common.CommonMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'InvenTree.middleware.InvenTreeRemoteUserMiddleware', # Remote / proxy auth @@ -294,7 +298,10 @@ if LDAP_AUTH: # get global options from dict and use ldap.OPT_* as keys and values global_options_dict = get_setting( - 'INVENTREE_LDAP_GLOBAL_OPTIONS', 'ldap.global_options', {}, dict + 'INVENTREE_LDAP_GLOBAL_OPTIONS', + 'ldap.global_options', + default_value=None, + typecast=dict, ) global_options = {} for k, v in global_options_dict.items(): @@ -364,24 +371,16 @@ if LDAP_AUTH: ) AUTH_LDAP_DENY_GROUP = get_setting('INVENTREE_LDAP_DENY_GROUP', 'ldap.deny_group') AUTH_LDAP_USER_FLAGS_BY_GROUP = get_setting( - 'INVENTREE_LDAP_USER_FLAGS_BY_GROUP', 'ldap.user_flags_by_group', {}, dict + 'INVENTREE_LDAP_USER_FLAGS_BY_GROUP', + 'ldap.user_flags_by_group', + default_value=None, + typecast=dict, ) AUTH_LDAP_FIND_GROUP_PERMS = True -# Internal IP addresses allowed to see the debug toolbar -INTERNAL_IPS = ['127.0.0.1'] - # Internal flag to determine if we are running in docker mode DOCKER = get_boolean_setting('INVENTREE_DOCKER', default_value=False) -if DOCKER: # pragma: no cover - # Internal IP addresses are different when running under docker - hostname, ___, ips = socket.gethostbyname_ex(socket.gethostname()) - INTERNAL_IPS = [ip[: ip.rfind('.')] + '.1' for ip in ips] + [ - '127.0.0.1', - '10.0.2.2', - ] - # Allow secure http developer server in debug mode if DEBUG: INSTALLED_APPS.append('sslserver') @@ -469,21 +468,6 @@ if USE_JWT: INSTALLED_APPS.append('rest_framework_simplejwt') # WSGI default setting -SPECTACULAR_SETTINGS = { - 'TITLE': 'InvenTree API', - 'DESCRIPTION': 'API for InvenTree - the intuitive open source inventory management system', - 'LICENSE': { - 'name': 'MIT', - 'url': 'https://github.com/inventree/InvenTree/blob/master/LICENSE', - }, - 'EXTERNAL_DOCS': { - 'description': 'More information about InvenTree in the official docs', - 'url': 'https://docs.inventree.org', - }, - 'VERSION': str(inventreeApiVersion()), - 'SERVE_INCLUDE_SCHEMA': False, -} - WSGI_APPLICATION = 'InvenTree.wsgi.application' """ @@ -497,7 +481,7 @@ Configure the database backend based on the user-specified values. logger.debug('Configuring database backend:') # Extract database configuration from the config.yaml file -db_config = CONFIG.get('database', {}) +db_config = CONFIG.get('database', None) if not db_config: db_config = {} @@ -573,7 +557,10 @@ Ref: https://docs.djangoproject.com/en/3.2/ref/settings/#std:setting-OPTIONS # connecting to the database server (such as a replica failover) don't sit and # wait for possibly an hour or more, just tell the client something went wrong # and let the client retry when they want to. -db_options = db_config.get('OPTIONS', db_config.get('options', {})) +db_options = db_config.get('OPTIONS', db_config.get('options', None)) + +if db_options is None: + db_options = {} # Specific options for postgres backend if 'postgres' in db_engine: # pragma: no cover @@ -736,7 +723,10 @@ if TRACING_ENABLED: # pragma: no cover logger.info('OpenTelemetry tracing enabled') _t_resources = get_setting( - 'INVENTREE_TRACING_RESOURCES', 'tracing.resources', {}, dict + 'INVENTREE_TRACING_RESOURCES', + 'tracing.resources', + default_value=None, + typecast=dict, ) cstm_tags = {'inventree.env.' + k: v for k, v in inventree_tags.items()} tracing_resources = {**cstm_tags, **_t_resources} @@ -748,7 +738,12 @@ if TRACING_ENABLED: # pragma: no cover console=get_boolean_setting( 'INVENTREE_TRACING_CONSOLE', 'tracing.console', False ), - auth=get_setting('INVENTREE_TRACING_AUTH', 'tracing.auth', {}), + auth=get_setting( + 'INVENTREE_TRACING_AUTH', + 'tracing.auth', + default_value=None, + typecast=dict, + ), is_http=get_setting('INVENTREE_TRACING_IS_HTTP', 'tracing.is_http', True), append_http=get_boolean_setting( 'INVENTREE_TRACING_APPEND_HTTP', 'tracing.append_http', True @@ -945,8 +940,13 @@ LOCALE_PATHS = (BASE_DIR.joinpath('locale/'),) TIME_ZONE = get_setting('INVENTREE_TIMEZONE', 'timezone', 'UTC') -USE_I18N = True +# Check that the timezone is valid +try: + pytz.timezone(TIME_ZONE) +except pytz.exceptions.UnknownTimeZoneError: # pragma: no cover + raise ValueError(f"Specified timezone '{TIME_ZONE}' is not valid") +USE_I18N = True # Do not use native timezone support in "test" mode # It generates a *lot* of cruft in the logs @@ -990,13 +990,33 @@ if not SITE_MULTI: ALLOWED_HOSTS = get_setting( 'INVENTREE_ALLOWED_HOSTS', config_key='allowed_hosts', - default_value=['*'], + default_value=[], typecast=list, ) if SITE_URL and SITE_URL not in ALLOWED_HOSTS: ALLOWED_HOSTS.append(SITE_URL) +if not ALLOWED_HOSTS: + if DEBUG: + logger.info( + 'No ALLOWED_HOSTS specified. Defaulting to ["*"] for debug mode. This is not recommended for production use' + ) + ALLOWED_HOSTS = ['*'] + elif not TESTING: + logger.error( + 'No ALLOWED_HOSTS specified. Please provide a list of allowed hosts, or specify INVENTREE_SITE_URL' + ) + + # Server cannot run without ALLOWED_HOSTS + if isInMainThread(): + sys.exit(-1) + +# Ensure that the ALLOWED_HOSTS do not contain any scheme info +for i, host in enumerate(ALLOWED_HOSTS): + if '://' in host: + ALLOWED_HOSTS[i] = host.split('://')[1] + # List of trusted origins for unsafe requests # Ref: https://docs.djangoproject.com/en/4.2/ref/settings/#csrf-trusted-origins CSRF_TRUSTED_ORIGINS = get_setting( @@ -1010,6 +1030,20 @@ CSRF_TRUSTED_ORIGINS = get_setting( if SITE_URL and SITE_URL not in CSRF_TRUSTED_ORIGINS: CSRF_TRUSTED_ORIGINS.append(SITE_URL) +if not TESTING and len(CSRF_TRUSTED_ORIGINS) == 0: + if DEBUG: + logger.warning( + 'No CSRF_TRUSTED_ORIGINS specified. Defaulting to http://* for debug mode. This is not recommended for production use' + ) + CSRF_TRUSTED_ORIGINS = ['http://*'] + + elif isInMainThread(): + # Server thread cannot run without CSRF_TRUSTED_ORIGINS + logger.error( + 'No CSRF_TRUSTED_ORIGINS specified. Please provide a list of trusted origins, or specify INVENTREE_SITE_URL' + ) + sys.exit(-1) + USE_X_FORWARDED_HOST = get_boolean_setting( 'INVENTREE_USE_X_FORWARDED_HOST', config_key='use_x_forwarded_host', @@ -1037,8 +1071,8 @@ CORS_ALLOW_CREDENTIALS = get_boolean_setting( default_value=True, ) -# Only allow CORS access to API and media endpoints -CORS_URLS_REGEX = r'^/(api|media|static)/.*$' +# Only allow CORS access to the following URL endpoints +CORS_URLS_REGEX = r'^/(api|auth|media|static)/.*$' CORS_ALLOWED_ORIGINS = get_setting( 'INVENTREE_CORS_ORIGIN_WHITELIST', @@ -1051,6 +1085,27 @@ CORS_ALLOWED_ORIGINS = get_setting( if SITE_URL and SITE_URL not in CORS_ALLOWED_ORIGINS: CORS_ALLOWED_ORIGINS.append(SITE_URL) +CORS_ALLOWED_ORIGIN_REGEXES = get_setting( + 'INVENTREE_CORS_ORIGIN_REGEX', + config_key='cors.regex', + default_value=[], + typecast=list, +) + +# In debug mode allow CORS requests from localhost +# This allows connection from the frontend development server +if DEBUG: + CORS_ALLOWED_ORIGIN_REGEXES.append(r'^http://localhost:\d+$') + +if CORS_ALLOW_ALL_ORIGINS: + logger.info('CORS: All origins allowed') +else: + if CORS_ALLOWED_ORIGINS: + logger.info('CORS: Whitelisted origins: %s', CORS_ALLOWED_ORIGINS) + + if CORS_ALLOWED_ORIGIN_REGEXES: + logger.info('CORS: Whitelisted origin regexes: %s', CORS_ALLOWED_ORIGIN_REGEXES) + for app in SOCIAL_BACKENDS: # Ensure that the app starts with 'allauth.socialaccount.providers' social_prefix = 'allauth.socialaccount.providers.' @@ -1083,6 +1138,7 @@ ACCOUNT_DEFAULT_HTTP_PROTOCOL = get_setting( ) ACCOUNT_LOGOUT_ON_PASSWORD_CHANGE = True ACCOUNT_PREVENT_ENUMERATION = True +ACCOUNT_EMAIL_SUBJECT_PREFIX = EMAIL_SUBJECT_PREFIX # 2FA REMOVE_SUCCESS_URL = 'settings' @@ -1165,6 +1221,9 @@ PLUGIN_RETRY = get_setting( ) # How often should plugin loading be tried? PLUGIN_FILE_CHECKED = False # Was the plugin file checked? +# Flag to allow table events during testing +TESTING_TABLE_EVENTS = False + # User interface customization values CUSTOM_LOGO = get_custom_file( 'INVENTREE_CUSTOM_LOGO', 'customize.logo', 'custom logo', lookup_media=True @@ -1173,7 +1232,9 @@ CUSTOM_SPLASH = get_custom_file( 'INVENTREE_CUSTOM_SPLASH', 'customize.splash', 'custom splash' ) -CUSTOMIZE = get_setting('INVENTREE_CUSTOMIZE', 'customize', {}) +CUSTOMIZE = get_setting( + 'INVENTREE_CUSTOMIZE', 'customize', default_value=None, typecast=dict +) # Load settings for the frontend interface FRONTEND_SETTINGS = config.get_frontend_settings(debug=DEBUG) @@ -1208,3 +1269,23 @@ if CUSTOM_FLAGS: # Magic login django-sesame SESAME_MAX_AGE = 300 LOGIN_REDIRECT_URL = '/api/auth/login-redirect/' + +# Configuratino for API schema generation +SPECTACULAR_SETTINGS = { + 'TITLE': 'InvenTree API', + 'DESCRIPTION': 'API for InvenTree - the intuitive open source inventory management system', + 'LICENSE': { + 'name': 'MIT', + 'url': 'https://github.com/inventree/InvenTree/blob/master/LICENSE', + }, + 'EXTERNAL_DOCS': { + 'description': 'More information about InvenTree in the official docs', + 'url': 'https://docs.inventree.org', + }, + 'VERSION': str(inventreeApiVersion()), + 'SERVE_INCLUDE_SCHEMA': False, + 'SCHEMA_PATH_PREFIX': '/api/', +} + +if SITE_URL and not TESTING: + SPECTACULAR_SETTINGS['SERVERS'] = [{'url': SITE_URL}] diff --git a/InvenTree/InvenTree/tasks.py b/InvenTree/InvenTree/tasks.py index 036ac98796..4356509e12 100644 --- a/InvenTree/InvenTree/tasks.py +++ b/InvenTree/InvenTree/tasks.py @@ -180,6 +180,8 @@ def offload_task( Returns: bool: True if the task was offloaded (or ran), False otherwise """ + from InvenTree.exceptions import log_error + try: import importlib @@ -213,6 +215,7 @@ def offload_task( return False except Exception as exc: raise_warning(f"WARNING: '{taskname}' not offloaded due to {str(exc)}") + log_error('InvenTree.offload_task') return False else: if callable(taskname): @@ -233,6 +236,7 @@ def offload_task( try: _mod = importlib.import_module(app_mod) except ModuleNotFoundError: + log_error('InvenTree.offload_task') raise_warning( f"WARNING: '{taskname}' not started - No module named '{app_mod}'" ) @@ -249,6 +253,7 @@ def offload_task( if not _func: _func = eval(func) # pragma: no cover except NameError: + log_error('InvenTree.offload_task') raise_warning( f"WARNING: '{taskname}' not started - No function named '{func}'" ) @@ -258,6 +263,7 @@ def offload_task( try: _func(*args, **kwargs) except Exception as exc: + log_error('InvenTree.offload_task') raise_warning(f"WARNING: '{taskname}' not started due to {str(exc)}") return False diff --git a/InvenTree/InvenTree/tests.py b/InvenTree/InvenTree/tests.py index 8a3d41b528..ff60d83881 100644 --- a/InvenTree/InvenTree/tests.py +++ b/InvenTree/InvenTree/tests.py @@ -14,8 +14,10 @@ from django.core import mail from django.core.exceptions import ValidationError from django.test import TestCase, override_settings, tag from django.urls import reverse +from django.utils import timezone import pint.errors +import pytz from djmoney.contrib.exchange.exceptions import MissingRate from djmoney.contrib.exchange.models import Rate, convert_money from djmoney.money import Money @@ -40,6 +42,147 @@ from .tasks import offload_task from .validators import validate_overage +class HostTest(InvenTreeTestCase): + """Test for host configuration.""" + + @override_settings(ALLOWED_HOSTS=['testserver']) + def test_allowed_hosts(self): + """Test that the ALLOWED_HOSTS functions as expected.""" + self.assertIn('testserver', settings.ALLOWED_HOSTS) + + response = self.client.get('/api/', headers={'host': 'testserver'}) + + self.assertEqual(response.status_code, 200) + + response = self.client.get('/api/', headers={'host': 'invalidserver'}) + + self.assertEqual(response.status_code, 400) + + @override_settings(ALLOWED_HOSTS=['invalidserver.co.uk']) + def test_allowed_hosts_2(self): + """Another test for ALLOWED_HOSTS functionality.""" + response = self.client.get('/api/', headers={'host': 'invalidserver.co.uk'}) + + self.assertEqual(response.status_code, 200) + + +class CorsTest(TestCase): + """Unit tests for CORS functionality.""" + + def cors_headers(self): + """Return a list of CORS headers.""" + return [ + 'access-control-allow-origin', + 'access-control-allow-credentials', + 'access-control-allow-methods', + 'access-control-allow-headers', + ] + + def preflight(self, url, origin, method='GET'): + """Make a CORS preflight request to the specified URL.""" + headers = {'origin': origin, 'access-control-request-method': method} + + return self.client.options(url, headers=headers) + + def test_no_origin(self): + """Test that CORS headers are not included for regular requests. + + - We use the /api/ endpoint for this test (it does not require auth) + - By default, in debug mode *all* CORS origins are allowed + """ + # Perform an initial response without the "origin" header + response = self.client.get('/api/') + self.assertEqual(response.status_code, 200) + + for header in self.cors_headers(): + self.assertNotIn(header, response.headers) + + # Now, perform a "preflight" request with the "origin" header + response = self.preflight('/api/', origin='http://random-external-server.com') + self.assertEqual(response.status_code, 200) + + for header in self.cors_headers(): + self.assertIn(header, response.headers) + + self.assertEqual(response.headers['content-length'], '0') + self.assertEqual( + response.headers['access-control-allow-origin'], + 'http://random-external-server.com', + ) + + @override_settings( + CORS_ALLOW_ALL_ORIGINS=False, + CORS_ALLOWED_ORIGINS=['http://my-external-server.com'], + CORS_ALLOWED_ORIGIN_REGEXES=[], + ) + def test_auth_view(self): + """Test that CORS requests work for the /auth/ view. + + Here, we are not authorized by default, + but the CORS headers should still be included. + """ + url = '/auth/' + + # First, a preflight request with a "valid" origin + + response = self.preflight(url, origin='http://my-external-server.com') + + self.assertEqual(response.status_code, 200) + + for header in self.cors_headers(): + self.assertIn(header, response.headers) + + # Next, a preflight request with an "invalid" origin + response = self.preflight(url, origin='http://random-external-server.com') + + self.assertEqual(response.status_code, 200) + + for header in self.cors_headers(): + self.assertNotIn(header, response.headers) + + # Next, make a GET request (without a token) + response = self.client.get( + url, headers={'origin': 'http://my-external-server.com'} + ) + + # Unauthorized + self.assertEqual(response.status_code, 401) + + self.assertIn('access-control-allow-origin', response.headers) + self.assertNotIn('access-control-allow-methods', response.headers) + + @override_settings( + CORS_ALLOW_ALL_ORIGINS=False, + CORS_ALLOWED_ORIGINS=[], + CORS_ALLOWED_ORIGIN_REGEXES=['http://.*myserver.com'], + ) + def test_cors_regex(self): + """Test that CORS regexes work as expected.""" + valid_urls = [ + 'http://www.myserver.com', + 'http://test.myserver.com', + 'http://myserver.com', + 'http://www.myserver.com:8080', + ] + + invalid_urls = [ + 'http://myserver.org', + 'http://www.other-server.org', + 'http://google.com', + 'http://myserver.co.uk:8080', + ] + + for url in valid_urls: + response = self.preflight('/api/', origin=url) + self.assertEqual(response.status_code, 200) + self.assertIn('access-control-allow-origin', response.headers) + + for url in invalid_urls: + response = self.preflight('/api/', origin=url) + self.assertEqual(response.status_code, 200) + self.assertNotIn('access-control-allow-origin', response.headers) + + class ConversionTest(TestCase): """Tests for conversion of physical units.""" @@ -138,6 +281,24 @@ class ConversionTest(TestCase): q = InvenTree.conversion.convert_physical_value(val, 'W', strip_units=False) self.assertAlmostEqual(float(q.magnitude), expected, places=2) + def test_imperial_lengths(self): + """Test support of imperial length measurements.""" + tests = [ + ('1 inch', 'mm', 25.4), + ('1 "', 'mm', 25.4), + ('2 "', 'inches', 2), + ('3 feet', 'inches', 36), + ("3'", 'inches', 36), + ("7 '", 'feet', 7), + ] + + for val, unit, expected in tests: + output = InvenTree.conversion.convert_physical_value( + val, unit, strip_units=True + ) + + self.assertAlmostEqual(output, expected, 3) + def test_dimensionless_units(self): """Tests for 'dimensionless' unit quantities.""" # Test some dimensionless units @@ -413,6 +574,7 @@ class FormatTest(TestCase): class TestHelpers(TestCase): """Tests for InvenTree helper functions.""" + @override_settings(SITE_URL=None) def test_absolute_url(self): """Test helper function for generating an absolute URL.""" base = 'https://demo.inventree.org:12345' @@ -587,6 +749,47 @@ class TestHelpers(TestCase): self.assertEqual(helpers.generateTestKey(name), key) +class TestTimeFormat(TestCase): + """Unit test for time formatting functionality.""" + + @override_settings(TIME_ZONE='UTC') + def test_tz_utc(self): + """Check UTC timezone.""" + self.assertEqual(InvenTree.helpers.server_timezone(), 'UTC') + + @override_settings(TIME_ZONE='Europe/London') + def test_tz_london(self): + """Check London timezone.""" + self.assertEqual(InvenTree.helpers.server_timezone(), 'Europe/London') + + @override_settings(TIME_ZONE='Australia/Sydney') + def test_to_local_time(self): + """Test that the local time conversion works as expected.""" + source_time = timezone.datetime( + year=2000, + month=1, + day=1, + hour=0, + minute=0, + second=0, + tzinfo=pytz.timezone('Europe/London'), + ) + + tests = [ + ('UTC', '2000-01-01 00:01:00+00:00'), + ('Europe/London', '2000-01-01 00:00:00-00:01'), + ('America/New_York', '1999-12-31 19:01:00-05:00'), + # All following tests should result in the same value + ('Australia/Sydney', '2000-01-01 11:01:00+11:00'), + (None, '2000-01-01 11:01:00+11:00'), + ('', '2000-01-01 11:01:00+11:00'), + ] + + for tz, expected in tests: + local_time = InvenTree.helpers.to_local_time(source_time, tz) + self.assertEqual(str(local_time), expected) + + class TestQuoteWrap(TestCase): """Tests for string wrapping.""" @@ -894,6 +1097,7 @@ class TestVersionNumber(TestCase): hash = str( subprocess.check_output('git rev-parse --short HEAD'.split()), 'utf-8' ).strip() + self.assertEqual(hash, version.inventreeCommitHash()) d = ( @@ -1144,6 +1348,7 @@ class TestInstanceName(InvenTreeTestCase): site_obj = Site.objects.all().order_by('id').first() self.assertEqual(site_obj.name, 'Testing title') + @override_settings(SITE_URL=None) def test_instance_url(self): """Test instance url settings.""" # Set up required setting diff --git a/InvenTree/InvenTree/version.py b/InvenTree/InvenTree/version.py index bd84bd7d7c..ef7e6c69b7 100644 --- a/InvenTree/InvenTree/version.py +++ b/InvenTree/InvenTree/version.py @@ -19,7 +19,7 @@ from dulwich.repo import NotGitRepository, Repo from .api_version import INVENTREE_API_TEXT, INVENTREE_API_VERSION # InvenTree software version -INVENTREE_SW_VERSION = '0.14.0 dev' +INVENTREE_SW_VERSION = '0.15.0 dev' # Discover git try: diff --git a/InvenTree/build/api.py b/InvenTree/build/api.py index 47fd8ae0cf..291e0694ae 100644 --- a/InvenTree/build/api.py +++ b/InvenTree/build/api.py @@ -314,11 +314,21 @@ class BuildLineEndpoint: queryset = BuildLine.objects.all() serializer_class = build.serializers.BuildLineSerializer + def get_source_build(self) -> Build: + """Return the source Build object for the BuildLine queryset. + + This source build is used to filter the available stock for each BuildLine. + + - If this is a "detail" view, use the build associated with the line + - If this is a "list" view, use the build associated with the request + """ + raise NotImplementedError("get_source_build must be implemented in the child class") + def get_queryset(self): """Override queryset to select-related and annotate""" queryset = super().get_queryset() - - queryset = build.serializers.BuildLineSerializer.annotate_queryset(queryset) + source_build = self.get_source_build() + queryset = build.serializers.BuildLineSerializer.annotate_queryset(queryset, build=source_build) return queryset @@ -353,10 +363,26 @@ class BuildLineList(BuildLineEndpoint, ListCreateAPI): 'bom_item__reference', ] + def get_source_build(self) -> Build: + """Return the target build for the BuildLine queryset.""" + + try: + build_id = self.request.query_params.get('build', None) + if build_id: + build = Build.objects.get(pk=build_id) + return build + except (Build.DoesNotExist, AttributeError, ValueError): + pass + + return None class BuildLineDetail(BuildLineEndpoint, RetrieveUpdateDestroyAPI): """API endpoint for detail view of a BuildLine object.""" - pass + + def get_source_build(self) -> Build: + """Return the target source location for the BuildLine queryset.""" + + return None class BuildOrderContextMixin: diff --git a/InvenTree/build/models.py b/InvenTree/build/models.py index ca3b202317..43308ad9ba 100644 --- a/InvenTree/build/models.py +++ b/InvenTree/build/models.py @@ -518,9 +518,25 @@ class Build(InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNo return True + @transaction.atomic + def complete_allocations(self, user): + """Complete all stock allocations for this build order. + + - This function is called when a build order is completed + """ + # Remove untracked allocated stock + self.subtract_allocated_stock(user) + + # Ensure that there are no longer any BuildItem objects + # which point to this Build Order + self.allocated_stock.delete() + @transaction.atomic def complete_build(self, user): """Mark this build as complete.""" + + import build.tasks + if self.incomplete_count > 0: return @@ -529,12 +545,12 @@ class Build(InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNo self.status = BuildStatus.COMPLETE.value self.save() - # Remove untracked allocated stock - self.subtract_allocated_stock(user) - - # Ensure that there are no longer any BuildItem objects - # which point to this Build Order - self.allocated_stock.delete() + # Offload task to complete build allocations + InvenTree.tasks.offload_task( + build.tasks.complete_build_allocations, + self.pk, + user.pk if user else None + ) # Register an event trigger_event('build.completed', id=self.pk) diff --git a/InvenTree/build/serializers.py b/InvenTree/build/serializers.py index 41299f04b1..0ae06ef18f 100644 --- a/InvenTree/build/serializers.py +++ b/InvenTree/build/serializers.py @@ -1083,6 +1083,7 @@ class BuildLineSerializer(InvenTreeModelSerializer): 'available_substitute_stock', 'available_variant_stock', 'total_available_stock', + 'external_stock', ] read_only_fields = [ @@ -1124,15 +1125,23 @@ class BuildLineSerializer(InvenTreeModelSerializer): available_substitute_stock = serializers.FloatField(read_only=True) available_variant_stock = serializers.FloatField(read_only=True) total_available_stock = serializers.FloatField(read_only=True) + external_stock = serializers.FloatField(read_only=True) @staticmethod - def annotate_queryset(queryset): + def annotate_queryset(queryset, build=None): """Add extra annotations to the queryset: - allocated: Total stock quantity allocated against this build line - available: Total stock available for allocation against this build line - on_order: Total stock on order for this build line - in_production: Total stock currently in production for this build line + + Arguments: + queryset: The queryset to annotate + build: The build order to filter against (optional) + + Note: If the 'build' is provided, we can use it to filter available stock, depending on the specified location for the build + """ queryset = queryset.select_related( 'build', 'bom_item', @@ -1169,6 +1178,18 @@ class BuildLineSerializer(InvenTreeModelSerializer): ref = 'bom_item__sub_part__' + stock_filter = None + + if build is not None and build.take_from is not None: + location = build.take_from + # Filter by locations below the specified location + stock_filter = Q( + location__tree_id=location.tree_id, + location__lft__gte=location.lft, + location__rght__lte=location.rght, + location__level__gte=location.level, + ) + # Annotate the "in_production" quantity queryset = queryset.annotate( in_production=part.filters.annotate_in_production_quantity(reference=ref) @@ -1181,10 +1202,8 @@ class BuildLineSerializer(InvenTreeModelSerializer): ) # Annotate the "available" quantity - # TODO: In the future, this should be refactored. - # TODO: Note that part.serializers.BomItemSerializer also has a similar annotation queryset = queryset.alias( - total_stock=part.filters.annotate_total_stock(reference=ref), + total_stock=part.filters.annotate_total_stock(reference=ref, filter=stock_filter), allocated_to_sales_orders=part.filters.annotate_sales_order_allocations(reference=ref), allocated_to_build_orders=part.filters.annotate_build_order_allocations(reference=ref), ) @@ -1197,11 +1216,21 @@ class BuildLineSerializer(InvenTreeModelSerializer): ) ) + external_stock_filter = Q(location__external=True) + + if stock_filter: + external_stock_filter &= stock_filter + + # Add 'external stock' annotations + queryset = queryset.annotate( + external_stock=part.filters.annotate_total_stock(reference=ref, filter=external_stock_filter) + ) + ref = 'bom_item__substitutes__part__' # Extract similar information for any 'substitute' parts queryset = queryset.alias( - substitute_stock=part.filters.annotate_total_stock(reference=ref), + substitute_stock=part.filters.annotate_total_stock(reference=ref, filter=stock_filter), substitute_build_allocations=part.filters.annotate_build_order_allocations(reference=ref), substitute_sales_allocations=part.filters.annotate_sales_order_allocations(reference=ref) ) @@ -1215,7 +1244,7 @@ class BuildLineSerializer(InvenTreeModelSerializer): ) # Annotate the queryset with 'available variant stock' information - variant_stock_query = part.filters.variant_stock_query(reference='bom_item__sub_part__') + variant_stock_query = part.filters.variant_stock_query(reference='bom_item__sub_part__', filter=stock_filter) queryset = queryset.alias( variant_stock_total=part.filters.annotate_variant_quantity(variant_stock_query, reference='quantity'), diff --git a/InvenTree/build/tasks.py b/InvenTree/build/tasks.py index 46fd97cab4..472b8c5166 100644 --- a/InvenTree/build/tasks.py +++ b/InvenTree/build/tasks.py @@ -4,6 +4,7 @@ from datetime import datetime, timedelta from decimal import Decimal import logging +from django.contrib.auth.models import User from django.utils.translation import gettext_lazy as _ from django.template.loader import render_to_string @@ -24,6 +25,27 @@ import part.models as part_models logger = logging.getLogger('inventree') +def complete_build_allocations(build_id: int, user_id: int): + """Complete build allocations for a specified BuildOrder.""" + + build_order = build.models.Build.objects.filter(pk=build_id).first() + + if user_id: + try: + user = User.objects.get(pk=user_id) + except User.DoesNotExist: + logger.warning("Could not complete build allocations for BuildOrder <%s> - User does not exist", build_id) + return + else: + user = None + + if not build_order: + logger.warning("Could not complete build allocations for BuildOrder <%s> - BuildOrder does not exist", build_id) + return + + build_order.complete_allocations(user) + + def update_build_order_lines(bom_item_pk: int): """Update all BuildOrderLineItem objects which reference a particular BomItem. diff --git a/InvenTree/build/templates/build/detail.html b/InvenTree/build/templates/build/detail.html index 19438e70f5..3d2e5d4e96 100644 --- a/InvenTree/build/templates/build/detail.html +++ b/InvenTree/build/templates/build/detail.html @@ -200,6 +200,11 @@
{% include "filter_list.html" with id='buildlines' %}
+ {% if build.take_from %} +
+ {% trans "Available stock has been filtered based on specified source location for this build order" %} +
+ {% endif %}
@@ -374,6 +379,9 @@ onPanelLoad('allocate', function() { "#build-lines-table", {{ build.pk }}, { + {% if build.take_from %} + location: {{ build.take_from.pk }}, + {% endif %} {% if build.project_code %} project_code: {{ build.project_code.pk }}, {% endif %} diff --git a/InvenTree/common/models.py b/InvenTree/common/models.py index 9ca83c361a..47d9bf47bc 100644 --- a/InvenTree/common/models.py +++ b/InvenTree/common/models.py @@ -226,9 +226,12 @@ class BaseInvenTreeSetting(models.Model): """ cache_key = f'BUILD_DEFAULT_VALUES:{str(cls.__name__)}' - if InvenTree.helpers.str2bool(cache.get(cache_key, False)): - # Already built default values - return + try: + if InvenTree.helpers.str2bool(cache.get(cache_key, False)): + # Already built default values + return + except Exception: + pass try: existing_keys = cls.objects.filter(**kwargs).values_list('key', flat=True) @@ -251,7 +254,10 @@ class BaseInvenTreeSetting(models.Model): ) pass - cache.set(cache_key, True, timeout=3600) + try: + cache.set(cache_key, True, timeout=3600) + except Exception: + pass def _call_settings_function(self, reference: str, args, kwargs): """Call a function associated with a particular setting. @@ -290,8 +296,7 @@ class BaseInvenTreeSetting(models.Model): try: cache.set(ckey, self, timeout=3600) - except TypeError: - # Some characters cause issues with caching; ignore and move on + except Exception: pass @classmethod @@ -554,16 +559,18 @@ class BaseInvenTreeSetting(models.Model): # Unless otherwise specified, attempt to create the setting create = kwargs.pop('create', True) + # Perform cache lookup by default + do_cache = kwargs.pop('cache', True) + # Prevent saving to the database during data import if InvenTree.ready.isImportingData(): create = False + do_cache = False # Prevent saving to the database during migrations if InvenTree.ready.isRunningMigrations(): create = False - - # Perform cache lookup by default - do_cache = kwargs.pop('cache', True) + do_cache = False ckey = cls.create_cache_key(key, **kwargs) @@ -575,7 +582,7 @@ class BaseInvenTreeSetting(models.Model): if cached_setting is not None: return cached_setting - except AppRegistryNotReady: + except Exception: # Cache is not ready yet do_cache = False @@ -1646,6 +1653,12 @@ class InvenTreeSetting(BaseInvenTreeSetting): 'default': False, 'validator': bool, }, + 'REPORT_LOG_ERRORS': { + 'name': _('Log Report Errors'), + 'description': _('Log errors which occur when generating reports'), + 'default': False, + 'validator': bool, + }, 'REPORT_DEFAULT_PAGE_SIZE': { 'name': _('Page Size'), 'description': _('Default page size for PDF reports'), @@ -1737,6 +1750,14 @@ class InvenTreeSetting(BaseInvenTreeSetting): 'default': False, 'validator': bool, }, + 'STOCK_ENFORCE_BOM_INSTALLATION': { + 'name': _('Check BOM when installing items'), + 'description': _( + 'Installed stock items must exist in the BOM for the parent part' + ), + 'default': True, + 'validator': bool, + }, 'BUILDORDER_REFERENCE_PATTERN': { 'name': _('Build Order Reference Pattern'), 'description': _( @@ -1991,6 +2012,12 @@ class InvenTreeSetting(BaseInvenTreeSetting): 'default': False, 'validator': bool, }, + 'TEST_STATION_DATA': { + 'name': _('Enable Test Station Data'), + 'description': _('Enable test station data collection for test results'), + 'default': False, + 'validator': bool, + }, } typ = 'inventree' diff --git a/InvenTree/common/settings.py b/InvenTree/common/settings.py index 03601ad1f8..3380def996 100644 --- a/InvenTree/common/settings.py +++ b/InvenTree/common/settings.py @@ -14,7 +14,10 @@ def currency_code_default(): """Returns the default currency code (or USD if not specified).""" from common.models import InvenTreeSetting - cached_value = cache.get('currency_code_default', '') + try: + cached_value = cache.get('currency_code_default', '') + except Exception: + cached_value = None if cached_value: return cached_value @@ -31,7 +34,10 @@ def currency_code_default(): code = 'USD' # pragma: no cover # Cache the value for a short amount of time - cache.set('currency_code_default', code, 30) + try: + cache.set('currency_code_default', code, 30) + except Exception: + pass return code diff --git a/InvenTree/common/tests.py b/InvenTree/common/tests.py index 49c02dd47b..744237ba5b 100644 --- a/InvenTree/common/tests.py +++ b/InvenTree/common/tests.py @@ -12,6 +12,7 @@ from django.core.cache import cache from django.core.exceptions import ValidationError from django.core.files.uploadedfile import SimpleUploadedFile from django.test import Client, TestCase +from django.test.utils import override_settings from django.urls import reverse import PIL @@ -271,6 +272,7 @@ class SettingsTest(InvenTreeTestCase): print(f"run_settings_check failed for user setting '{key}'") raise exc + @override_settings(SITE_URL=None) def test_defaults(self): """Populate the settings with default values.""" for key in InvenTreeSetting.SETTINGS.keys(): diff --git a/InvenTree/company/serializers.py b/InvenTree/company/serializers.py index ad6202e83a..f94333aca8 100644 --- a/InvenTree/company/serializers.py +++ b/InvenTree/company/serializers.py @@ -42,11 +42,13 @@ class CompanyBriefSerializer(InvenTreeModelSerializer): """Metaclass options.""" model = Company - fields = ['pk', 'url', 'name', 'description', 'image'] + fields = ['pk', 'url', 'name', 'description', 'image', 'thumbnail'] url = serializers.CharField(source='get_absolute_url', read_only=True) - image = serializers.CharField(source='get_thumbnail_url', read_only=True) + image = InvenTreeImageSerializerField(read_only=True) + + thumbnail = serializers.CharField(source='get_thumbnail_url', read_only=True) class AddressSerializer(InvenTreeModelSerializer): diff --git a/InvenTree/config_template.yaml b/InvenTree/config_template.yaml index 931c135d1e..e429aa2bea 100644 --- a/InvenTree/config_template.yaml +++ b/InvenTree/config_template.yaml @@ -168,9 +168,9 @@ allowed_hosts: # Trusted origins (see CSRF_TRUSTED_ORIGINS in Django settings documentation) # If you are running behind a proxy, you may need to add the proxy address here -trusted_origins: - - 'http://localhost:8000' - +# trusted_origins: +# - 'http://localhost' +# - 'http://*.localhost' # Proxy forwarding settings # If InvenTree is running behind a proxy, you may need to configure these settings @@ -183,24 +183,23 @@ use_x_forwarded_port: false # Cross Origin Resource Sharing (CORS) settings (see https://github.com/adamchainz/django-cors-headers) cors: - allow_all: True - allow_credentials: True, + allow_all: true + allow_credentials: true # whitelist: # - https://example.com # - https://sub.example.com + # regex: + # MEDIA_ROOT is the local filesystem location for storing uploaded files #media_root: '/home/inventree/data/media' # STATIC_ROOT is the local filesystem location for storing static files #static_root: '/home/inventree/data/static' -### Backup configuration options ### # INVENTREE_BACKUP_DIR is the local filesystem location for storing backups -backup_storage: django.core.files.storage.FileSystemStorage #backup_dir: '/home/inventree/data/backup' -#backup_options: # Background worker options background: diff --git a/InvenTree/label/serializers.py b/InvenTree/label/serializers.py index a38f4bb3ac..ef1f467937 100644 --- a/InvenTree/label/serializers.py +++ b/InvenTree/label/serializers.py @@ -15,7 +15,16 @@ class LabelSerializerBase(InvenTreeModelSerializer): @staticmethod def label_fields(): """Generic serializer fields for a label template.""" - return ['pk', 'name', 'description', 'label', 'filters', 'enabled'] + return [ + 'pk', + 'name', + 'description', + 'label', + 'filters', + 'width', + 'height', + 'enabled', + ] class StockItemLabelSerializer(LabelSerializerBase): diff --git a/InvenTree/locale/bg/LC_MESSAGES/django.po b/InvenTree/locale/bg/LC_MESSAGES/django.po index ef16d558bb..80cb1b1f7f 100644 --- a/InvenTree/locale/bg/LC_MESSAGES/django.po +++ b/InvenTree/locale/bg/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2024-02-28 07:23\n" "Last-Translator: \n" "Language-Team: Bulgarian\n" @@ -66,9 +66,9 @@ msgstr "Въведи дата" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" @@ -1242,48 +1242,48 @@ msgstr "" msgid "Project code for this build order" msgstr "" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "" msgid "Stock Item" msgstr "" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "" @@ -1659,44 +1659,45 @@ msgstr "" msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1990,27 +1991,31 @@ msgstr "" msgid "Order Parts" msgstr "" -#: build/templates/build/detail.html:210 -msgid "Incomplete Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:214 -msgid "Create new build output" +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" msgstr "" #: build/templates/build/detail.html:215 +msgid "Incomplete Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:219 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "" msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "" @@ -4218,7 +4223,7 @@ msgstr "" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -5861,10 +5869,10 @@ msgstr "" msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "" msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "" msgid "Category" msgstr "" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Цялостна наличност" @@ -6010,7 +6023,8 @@ msgstr "" msgid "Default location for parts in this category" msgstr "" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "" msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" @@ -6446,7 +6460,7 @@ msgstr "" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" @@ -6455,7 +6469,7 @@ msgstr "" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" @@ -6463,7 +6477,7 @@ msgstr "" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6685,311 +6699,325 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +#, fuzzy +#| msgid "Total Stock" +msgid "External Stock" +msgstr "Цялостна наличност" + +#: part/serializers.py:806 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:808 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7221,7 +7249,7 @@ msgid "Validate BOM" msgstr "" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" @@ -7405,7 +7433,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -8784,7 +8812,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -8796,7 +8824,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -8905,7 +8933,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -8986,7 +9014,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9059,77 +9087,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -10662,7 +10691,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -10676,7 +10705,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" @@ -11051,62 +11080,68 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#, fuzzy +#| msgid "Total Stock" +msgid "External stock" +msgstr "Цялостна наличност" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11484,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12348,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14087,3 @@ msgstr "" #: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/InvenTree/locale/cs/LC_MESSAGES/django.po b/InvenTree/locale/cs/LC_MESSAGES/django.po index bcd0c21ed8..391b076154 100644 --- a/InvenTree/locale/cs/LC_MESSAGES/django.po +++ b/InvenTree/locale/cs/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2024-02-28 07:23\n" "Last-Translator: \n" "Language-Team: Czech\n" @@ -66,9 +66,9 @@ msgstr "Zadejte datum" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "Název" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "URL souboru vzdáleného obrázku" msgid "Downloading images from remote URL is not enabled" msgstr "Stahování obrázků ze vzdálené URL není povoleno" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "Kontrola procesů na pozadí se nezdařila" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "Sledováno" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "Příkaz sestavení pro který je toto sestavení přiděleno" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "Stavový kód sestavení" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Kód dávky" @@ -1242,48 +1242,48 @@ msgstr "Kód projektu" msgid "Project code for this build order" msgstr "Kód projektu pro objednávku sestavení" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Příkaz k sestavení {build} byl dokončen" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "Příkaz k sestavení byl dokončen" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "Nebyl specifikováno žádný výstup sestavení" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "Výstup sestavení je již dokončen" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "Výstup sestavení neodpovídá příkazu sestavení" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "Množství musí být vyšší než nula" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "Množství nemůže být větší než výstupní množství" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "Vytvořit objekt" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "Vytvořit objekt" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "Vytvořit objekt" msgid "Quantity" msgstr "Množství" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "Vyžadované množství pro objednávku" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Položka sestavení musí specifikovat výstup sestavení, protože hlavní díl je označen jako sledovatelný" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Zabrané množství ({q}) nesmí překročit dostupné skladové množství ({a})" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "Skladová položka je nadměrně zabrána" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "Zabrané množství musí být větší než nula" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "Množství musí být 1 pro zřetězený sklad" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "Vybraná položka zásob neodpovídá řádku BOM" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "Vybraná položka zásob neodpovídá řádku BOM" msgid "Stock Item" msgstr "Skladové položky" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "Zdrojová skladová položka" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "Skladové množství pro sestavení" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "Instalovat do" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "" @@ -1659,44 +1659,45 @@ msgstr "Volitelné položky" msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1990,27 +1991,31 @@ msgstr "" msgid "Order Parts" msgstr "" -#: build/templates/build/detail.html:210 -msgid "Incomplete Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:214 -msgid "Create new build output" +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" msgstr "" #: build/templates/build/detail.html:215 +msgid "Incomplete Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:219 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "" msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "Zvolte díl" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "Vyberte výrobce" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "" @@ -4218,7 +4223,7 @@ msgstr "Smazat obrázek" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -5861,10 +5869,10 @@ msgstr "" msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "" msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "" msgid "Category" msgstr "" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,7 +6023,8 @@ msgstr "" msgid "Default location for parts in this category" msgstr "" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "" msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" @@ -6446,7 +6460,7 @@ msgstr "" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" @@ -6455,7 +6469,7 @@ msgstr "" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" @@ -6463,7 +6477,7 @@ msgstr "" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6685,311 +6699,327 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +#, fuzzy +#| msgid "External Link" +msgid "External Stock" +msgstr "Externí odkaz" + +#: part/serializers.py:806 +#, fuzzy +#| msgid "Allocated" +msgid "Unallocated Stock" +msgstr "Přiděleno" + +#: part/serializers.py:808 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7221,7 +7251,7 @@ msgid "Validate BOM" msgstr "" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" @@ -7405,7 +7435,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -8784,7 +8814,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -8796,7 +8826,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -8905,7 +8935,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -8986,7 +9016,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9059,77 +9089,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -10662,7 +10693,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -10676,7 +10707,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" @@ -11051,62 +11082,68 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#, fuzzy +#| msgid "External Link" +msgid "External stock" +msgstr "Externí odkaz" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11486,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12350,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14089,3 @@ msgstr "Oprávnění k úpravě položek" #: users/models.py:413 msgid "Permission to delete items" msgstr "Oprávnění k odstranění položek" - diff --git a/InvenTree/locale/da/LC_MESSAGES/django.po b/InvenTree/locale/da/LC_MESSAGES/django.po index fdce570ffb..86b13dc4a1 100644 --- a/InvenTree/locale/da/LC_MESSAGES/django.po +++ b/InvenTree/locale/da/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2024-02-28 07:23\n" "Last-Translator: \n" "Language-Team: Danish\n" @@ -66,9 +66,9 @@ msgstr "Angiv dato" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "Navn" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "URL til ekstern billedfil" msgid "Downloading images from remote URL is not enabled" msgstr "Download af billeder fra ekstern URL er ikke aktiveret" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "Kontrol af baggrundstjeneste mislykkedes" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "Sporet" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "Produktionsordre som er tildelt denne produktion" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "Produktions statuskode" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Batch Kode" @@ -1242,48 +1242,48 @@ msgstr "" msgid "Project code for this build order" msgstr "" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Bygningsordre {build} er fuldført" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "En byggeordre er fuldført" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "" msgid "Stock Item" msgstr "" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "" @@ -1659,44 +1659,45 @@ msgstr "" msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1990,27 +1991,31 @@ msgstr "" msgid "Order Parts" msgstr "" -#: build/templates/build/detail.html:210 -msgid "Incomplete Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:214 -msgid "Create new build output" +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" msgstr "" #: build/templates/build/detail.html:215 +msgid "Incomplete Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:219 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "" msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "" @@ -4218,7 +4223,7 @@ msgstr "" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -5861,10 +5869,10 @@ msgstr "" msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "" msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "" msgid "Category" msgstr "" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,7 +6023,8 @@ msgstr "" msgid "Default location for parts in this category" msgstr "" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "" msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" @@ -6446,7 +6460,7 @@ msgstr "" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" @@ -6455,7 +6469,7 @@ msgstr "" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" @@ -6463,7 +6477,7 @@ msgstr "" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6685,311 +6699,327 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +#, fuzzy +#| msgid "External Link" +msgid "External Stock" +msgstr "Ekstern link" + +#: part/serializers.py:806 +#, fuzzy +#| msgid "Accept Unallocated" +msgid "Unallocated Stock" +msgstr "Accepter Ikke tildelt" + +#: part/serializers.py:808 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7221,7 +7251,7 @@ msgid "Validate BOM" msgstr "" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" @@ -7405,7 +7435,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -8784,7 +8814,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -8796,7 +8826,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -8905,7 +8935,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -8986,7 +9016,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9059,77 +9089,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -10662,7 +10693,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -10676,7 +10707,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" @@ -11051,62 +11082,68 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#, fuzzy +#| msgid "External Link" +msgid "External stock" +msgstr "Ekstern link" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11486,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12350,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14089,3 @@ msgstr "" #: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/InvenTree/locale/de/LC_MESSAGES/django.po b/InvenTree/locale/de/LC_MESSAGES/django.po index 4a3fa970a1..368e85e894 100644 --- a/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/InvenTree/locale/de/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" -"PO-Revision-Date: 2024-02-28 07:23\n" +"POT-Creation-Date: 2024-03-02 07:22+0000\n" +"PO-Revision-Date: 2024-03-11 09:31\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -28,7 +28,7 @@ msgstr "Benutzer hat keine Berechtigung, dieses Modell anzuzeigen" #: InvenTree/conversion.py:160 #, python-brace-format msgid "Invalid unit provided ({unit})" -msgstr "" +msgstr "Ungültige Einheit angegeben ({unit})" #: InvenTree/conversion.py:170 msgid "No value provided" @@ -66,9 +66,9 @@ msgstr "Datum eingeben" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "Name" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "URL der Remote-Bilddatei" msgid "Downloading images from remote URL is not enabled" msgstr "Das Herunterladen von Bildern von Remote-URLs ist nicht aktiviert" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "Hintergrund-Prozess-Kontrolle fehlgeschlagen" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "Nachverfolgt" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "Bauauftrag, zu dem dieser Bauauftrag zugwiesen ist" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "Bau-Statuscode" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Losnummer" @@ -1242,48 +1242,48 @@ msgstr "Projektcode" msgid "Project code for this build order" msgstr "Projektcode für diesen Auftrag" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Bauauftrag {build} wurde fertiggestellt" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "Ein Bauauftrag wurde fertiggestellt" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "kein Endprodukt angegeben" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "Endprodukt bereits hergstellt" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "Endprodukt stimmt nicht mit dem Bauauftrag überein" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "Anzahl muss größer Null sein" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "Menge kann nicht größer als die Ausgangsmenge sein" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Build Ausgabe {serial} hat nicht alle erforderlichen Tests bestanden" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "Objekt bauen" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "Objekt bauen" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "Objekt bauen" msgid "Quantity" msgstr "Anzahl" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "Erforderliche Menge für Auftrag" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Bauauftragsposition muss ein Endprodukt festlegen, da der übergeordnete Teil verfolgbar ist" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Zugewiesene Menge ({q}) darf nicht verfügbare Menge ({a}) übersteigen" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "BestandObjekt ist zu oft zugewiesen" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "Reserviermenge muss größer null sein" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "Anzahl muss 1 für Objekte mit Seriennummer sein" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "Ausgewählter Lagerbestand stimmt nicht mit BOM-Linie überein" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "Ausgewählter Lagerbestand stimmt nicht mit BOM-Linie überein" msgid "Stock Item" msgstr "Lagerartikel" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "Quell-Lagerartikel" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "Anzahl an Lagerartikel dem Bauauftrag zuweisen" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "Installiere in" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "Ziel-Lagerartikel" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "Eine Liste von Endprodukten muss angegeben werden" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "Lagerort für fertige Endprodukte" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "Bauauftragspositionsartikel" msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part muss auf dasselbe Teil verweisen wie der Bauauftrag" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "Teil muss auf Lager sein" @@ -1659,44 +1659,45 @@ msgstr "Optionale Positionen" msgid "Allocate optional BOM items to build order" msgstr "Optionale Stücklisten-Positionen dem Bauauftrag hinzufügen" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "Stücklisten-Position" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "Zugewiesener Bestand" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "Bestellt" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "In Produktion" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "Verfügbarer Bestand" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "Bestand für Bauauftrag erforderlich" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "Überfälliger Bauauftrag" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Bauauftrag {bo} ist jetzt überfällig" @@ -1990,27 +1991,31 @@ msgstr "Benötigte Teile bestellen" msgid "Order Parts" msgstr "Teile bestellen" -#: build/templates/build/detail.html:210 +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" +msgstr "Der verfügbare Bestand wurde auf der Grundlage des angegebenen Ausgangs-Lagers für diesen Bauauftrag gefiltert" + +#: build/templates/build/detail.html:215 msgid "Incomplete Build Outputs" msgstr "Unfertige Endprodukte" -#: build/templates/build/detail.html:214 +#: build/templates/build/detail.html:219 msgid "Create new build output" msgstr "Neues Endprodukt anlegen" -#: build/templates/build/detail.html:215 +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "Neues Endprodukt" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "Verbrauchte Bestände" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "Fertiggestellte Endprodukte" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "Fertiggestellte Endprodukte" msgid "Attachments" msgstr "Anhänge" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Bauauftrags-Notizen" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "Zuordnung abgeschlossen" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "Alle Zeilen wurden vollständig zugewiesen" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "Teile sind standardmäßig Vorlagen" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -2833,11 +2838,11 @@ msgstr "Erstelle eine Standardsendung für Aufträge" #: common/models.py:1785 msgid "Edit Completed Sales Orders" -msgstr "Abgeschlossene Verkaufsaufträge bearbeiten" +msgstr "Abgeschlossene Aufträge bearbeiten" #: common/models.py:1787 msgid "Allow editing of sales orders after they have been shipped or completed" -msgstr "Bearbeitung von Verkaufsaufträgen nach Versand oder Abschluss erlauben" +msgstr "Bearbeitung von Aufträgen nach Versand oder Abschluss erlauben" #: common/models.py:1793 msgid "Purchase Order Reference Pattern" @@ -3495,7 +3500,7 @@ msgstr "Die zuletzt benutzten Druckmaschinen für einen Benutzer speichern" msgid "Price break quantity" msgstr "Preisstaffelungs Anzahl" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "Teil auswählen" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "Hersteller auswählen" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "Verlinktes Herstellerteil muss dasselbe Basisteil referenzieren" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "Zulieferer" msgid "Select supplier" msgstr "Zulieferer auswählen" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "Lagerbestandseinheit (SKU) des Zulieferers" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "Mindestpreis" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "Verfügbarkeit aktualisiert" msgid "Date of last update of availability data" msgstr "Datum des letzten Updates der Verfügbarkeitsdaten" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "Standard-Währung für diesen Zulieferer" @@ -4218,7 +4223,7 @@ msgstr "Bild löschen" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "Keine Herstellerdaten verfügbar" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "Zulieferer" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "Keine Lieferanteninformationen verfügbar" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "Barcode mit Zulieferteil verknüpfen" msgid "Update Part Availability" msgstr "Verfügbarkeit der Teile aktualisieren" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "Label-Vorlage-Datei" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "Aktiviert" @@ -5693,7 +5701,7 @@ msgstr "Bestelldetails" #: order/templates/order/sales_order_base.html:60 msgid "Print sales order report" -msgstr "Verkaufsauftragsbericht drucken" +msgstr "Auftragsbericht drucken" #: order/templates/order/sales_order_base.html:88 #: order/templates/order/sales_order_base.html:89 @@ -5717,7 +5725,7 @@ msgstr "Abgeschlossene Sendungen" #: order/templates/order/sales_order_base.html:312 msgid "Sales Order QR Code" -msgstr "Verkaufsauftrag QR-Code" +msgstr "Auftrag QR-Code" #: order/templates/order/sales_order_base.html:324 msgid "Link Barcode to Sales Order" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "Ausstehende Sendungen" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "Aktionen" @@ -5861,10 +5869,10 @@ msgstr "Name des übergeordneten Teils" msgid "Category Path" msgstr "Pfad zur Kategorie" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "Übergeordnete IPN" msgid "Part IPN" msgstr "Teil IPN" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Niedrigster Preis" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "Diese Option muss ausgewählt werden" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "Diese Option muss ausgewählt werden" msgid "Category" msgstr "Kategorie" +#: part/api.py:1828 +msgid "Uses" +msgstr "Verwendet" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Standard-Lagerort" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Gesamtbestand" @@ -6010,7 +6023,8 @@ msgstr "Teil-Kategorien" msgid "Default location for parts in this category" msgstr "Standard-Lagerort für Teile dieser Kategorie" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6048,12 +6062,12 @@ msgstr "Ungültige Auswahl für übergeordnetes Teil" #: part/models.py:531 part/models.py:538 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" -msgstr "Teil '{self}' kann im BOM nicht für '{parent}' (rekursiv) verwendet werden" +msgstr "Teil '{self}' kann in der Stückliste nicht für '{parent}' (rekursiv) verwendet werden" #: part/models.py:550 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" -msgstr "Teil '{parent}' wird im BOM für '{self}' (rekursiv) verwendet" +msgstr "Teil '{parent}' wird in der Stückliste für '{self}' (rekursiv) verwendet" #: part/models.py:615 #, python-brace-format @@ -6418,7 +6432,7 @@ msgstr "Test-Vorlagen können nur für verfolgbare Teile angelegt werden" msgid "Test with this name already exists for this part" msgstr "Ein Test mit diesem Namen besteht bereits für dieses Teil" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "Test-Name" @@ -6446,7 +6460,7 @@ msgstr "Beschreibung für diesen Test eingeben" msgid "Is this test enabled?" msgstr "Ist dieser Test aktiviert?" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Benötigt" @@ -6455,7 +6469,7 @@ msgstr "Benötigt" msgid "Is this test required to pass?" msgstr "Muss dieser Test erfolgreich sein?" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "Erfordert Wert" @@ -6463,7 +6477,7 @@ msgstr "Erfordert Wert" msgid "Does this test require a value when adding a test result?" msgstr "Muss für diesen Test ein Wert für das Test-Ergebnis eingetragen werden?" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "Anhang muss eingegeben werden" @@ -6685,311 +6699,323 @@ msgstr "Teil-Beziehung kann nicht zwischen einem Teil und sich selbst erstellt w msgid "Duplicate relationship already exists" msgstr "Doppelte Beziehung existiert bereits" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Unter-Kategorien" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "Ergebnisse" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "Anzahl der Ergebnisse, die in dieser Vorlage aufgezeichnet wurden" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "Kaufwährung dieses Lagerartikels" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "Anzahl der Teile, die diese Vorlage verwenden" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "Keine Teile ausgewählt" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "Kategorie auswählen" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "Originalteil" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "Originalteil zum Duplizieren auswählen" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "Bild kopieren" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "Bild vom Originalteil kopieren" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "Stückliste kopieren" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "Stückliste vom Originalteil kopieren" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "Parameter kopieren" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "Parameterdaten vom Originalteil kopieren" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "Anmerkungen kopieren" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "Notizen aus Originalteil kopieren" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "Start-Bestandsmenge" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Initiale Lagermenge für dieses Teil. Wenn die Menge null ist, wird kein Lagerbestand hinzugefügt." -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "Initialer Lagerort" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "Lagerstandort für dieses Teil angeben" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "Lieferant auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "Hersteller auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "Hersteller-Teilenummer" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "Ausgewählte Firma ist kein gültiger Lieferant" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "Ausgewählte Firma ist kein gültiger Hersteller" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "Herstellerteil mit dieser MPN existiert bereits" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "Lieferantenteil mit dieser SKU existiert bereits" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +msgid "External Stock" +msgstr "Externes Lager" + +#: part/serializers.py:806 +msgid "Unallocated Stock" +msgstr "Nicht zugewiesenes Lager" + +#: part/serializers.py:808 +msgid "Variant Stock" +msgstr "Alternatives Lager" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Teil duplizieren" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "Initiale Daten von anderem Teil kopieren" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "Initialer Lagerbestand" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "Erstelle Teil mit Ausgangsbestand" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "Lieferanteninformationen" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "Lieferanteninformationen zu diesem Teil hinzufügen" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "Kategorieparameter kopieren" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "Parametervorlagen aus der ausgewählten Teilkategorie kopieren" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "Vorhandenes Bild" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "Dateiname eines vorhandenen Teilbildes" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "Bilddatei existiert nicht" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "Inventurbericht auf ein bestimmtes Teil und alle Variantenteile beschränken" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "Inventurbericht auf eine bestimmte Teilekategorie und alle untergeordneten Kategorien beschränken" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "Inventurbericht auf einen bestimmten Lagerort und alle untergeordneten Lagerorte beschränken" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "Externen Bestand ausschließen" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "Lagerartikel an externen Orten ausschließen" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "Bericht generieren" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "Erstelle Berichtsdatei mit berechneten Inventurdaten" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "Teile aktualisieren" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "Angegebene Teile mit berechneten Inventurdaten aktualisieren" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "Inventur-Funktionalität ist nicht aktiviert" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "Berechneten Wert für Mindestpreis überschreiben" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "Mindestpreis Währung" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "Berechneten Wert für maximalen Preis überschreiben" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "Maximalpreis Währung" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "Aktualisieren" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "Preis für dieses Teil aktualisieren" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Konnte nicht von den angegebenen Währungen in {default_currency} umrechnen" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "Mindestpreis darf nicht größer als der Maximalpreis sein" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "Der Maximalpreis darf nicht kleiner als der Mindestpreis sein" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "Teil auswählen, von dem Stückliste kopiert wird" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "Bestehende Daten entfernen" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "Bestehende Stücklisten-Positionen vor dem Kopieren entfernen" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "Vererbtes einschließen" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "Stücklisten-Positionen einbeziehen, die von Vorlage-Teilen geerbt werden" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "Ungültige Zeilen überspringen" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "Aktiviere diese Option, um ungültige Zeilen zu überspringen" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "Ersatzteile kopieren" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "Ersatzteile beim Duplizieren von Stücklisten-Positionen kopieren" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "Bestehende Stückliste löschen" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "Bestehende Stücklisten-Positionen vor dem Importieren entfernen" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "Keine Teilspalte angegeben" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "Mehrere übereinstimmende Teile gefunden" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "Keine passenden Teile gefunden" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "Teil ist nicht als Komponente angelegt" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "Menge nicht angegeben" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "Ungültige Menge" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "Mindestens eine Stückliste-Position ist erforderlich" @@ -7221,7 +7247,7 @@ msgid "Validate BOM" msgstr "Stückliste überprüfen" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "Stücklisten-Position hinzufügen" @@ -7405,7 +7431,7 @@ msgstr "Zu Bauaufträgen zugeordnet" msgid "Allocated to Sales Orders" msgstr "Zur Bestellung zugeordnet" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "Herstellbar" @@ -7872,15 +7898,15 @@ msgstr "Labeldruck fehlgeschlagen" #: plugin/base/label/mixins.py:63 msgid "Error rendering label to PDF" -msgstr "Fehler beim Rendern des Labels als PDF" +msgstr "Fehler beim Rendern des Etikett als PDF" #: plugin/base/label/mixins.py:76 msgid "Error rendering label to HTML" -msgstr "Fehler beim Rendern des Labels als HTML" +msgstr "Fehler beim Rendern des Etikett als HTML" #: plugin/base/label/mixins.py:111 msgid "Error rendering label to PNG" -msgstr "Fehler beim Rendern des Labels als PNG" +msgstr "Fehler beim Rendern des Etikett als PNG" #: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" @@ -7981,7 +8007,7 @@ msgstr "Optionen" #: plugin/builtin/labels/label_sheet.py:29 msgid "Page size for the label sheet" -msgstr "Seitengröße für das Labelblatt" +msgstr "Seitengröße für das Etikett" #: plugin/builtin/labels/label_sheet.py:34 msgid "Skip Labels" @@ -8077,7 +8103,7 @@ msgstr "Nur Mitarbeiter können Plugins verwalten" #: plugin/installer.py:197 msgid "Plugin installation is disabled" -msgstr "" +msgstr "Plugin-Installation ist deaktiviert" #: plugin/installer.py:248 msgid "Installed plugin successfully" @@ -8102,7 +8128,7 @@ msgstr "Plugin-Paketname nicht gefunden" #: plugin/installer.py:299 msgid "Plugin uninstalling is disabled" -msgstr "" +msgstr "Plugin-Deinstallation ist deaktiviert" #: plugin/installer.py:303 msgid "Plugin cannot be uninstalled as it is currently active" @@ -8488,7 +8514,7 @@ msgstr "Seriennummer" #: report/templates/report/inventree_slr_report.html:97 msgid "Stock location items" -msgstr "Lagerstandort Elemente" +msgstr "Lagerstandorte" #: report/templates/report/inventree_test_report_base.html:21 msgid "Stock Item Test Report" @@ -8641,7 +8667,7 @@ msgstr "Externer Standort" #: stock/api.py:753 msgid "Part Tree" -msgstr "Teilbaum" +msgstr "Teile-Baum" #: stock/api.py:781 msgid "Expiry date before" @@ -8784,7 +8810,7 @@ msgstr "Passendes Zuliefererteil für diesen Lagerartikel auswählen" msgid "Where is this stock item located?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "Verpackung, in der dieser Lagerartikel gelagert ist" @@ -8796,7 +8822,7 @@ msgstr "Ist dieses Teil in einem anderen verbaut?" msgid "Serial number for this item" msgstr "Seriennummer für dieses Teil" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "Losnummer für diesen Lagerartikel" @@ -8905,7 +8931,7 @@ msgstr "Lagerartikel wird aktuell produziert" msgid "Serialized stock cannot be merged" msgstr "Nachverfolgbare Lagerartikel können nicht zusammengeführt werden" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "Artikel duplizeren" @@ -8986,7 +9012,7 @@ msgstr "Anzahl darf nicht die verfügbare Menge überschreiten ({q})" msgid "Enter serial numbers for new items" msgstr "Seriennummern für neue Teile eingeben" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "Ziel-Bestand" @@ -9008,7 +9034,7 @@ msgstr "Zu installierende Menge" #: stock/serializers.py:553 msgid "Enter the quantity of items to install" -msgstr "" +msgstr "Anzahl der zu verwendenden Artikel eingeben" #: stock/serializers.py:558 stock/serializers.py:633 stock/serializers.py:729 #: stock/serializers.py:779 @@ -9017,7 +9043,7 @@ msgstr " Transaktionsnotizen hinzufügen (optional)" #: stock/serializers.py:566 msgid "Quantity to install must be at least 1" -msgstr "" +msgstr "Die zu verwendende Menge muss mindestens 1 sein" #: stock/serializers.py:574 msgid "Stock item is unavailable" @@ -9029,7 +9055,7 @@ msgstr "Ausgewähltes Teil ist nicht in der Stückliste" #: stock/serializers.py:593 msgid "Quantity to install must not exceed available quantity" -msgstr "" +msgstr "Die zu verwendende Menge darf die verfügbare Menge nicht überschreiten" #: stock/serializers.py:628 msgid "Destination location for uninstalled item" @@ -9045,7 +9071,7 @@ msgstr "Das ausgewählte Teil ist keine gültige Option für die Umwandlung" #: stock/serializers.py:693 msgid "Cannot convert stock item with assigned SupplierPart" -msgstr "" +msgstr "Lagerartikel konnte nicht mit Zulieferteil zugewiesen werden" #: stock/serializers.py:724 msgid "Destination location for returned item" @@ -9059,77 +9085,78 @@ msgstr "Lagerartikel auswählen, um den Status zu ändern" msgid "No stock items selected" msgstr "Keine Lagerartikel ausgewählt" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Unter-Lagerorte" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "Teil muss verkaufbar sein" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "Artikel ist einem Kundenauftrag zugeordnet" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "Artikel ist einem Fertigungsauftrag zugeordnet" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "Kunde zum Zuweisen von Lagerartikel" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "Ausgewählte Firma ist kein Kunde" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "Notizen zur Lagerzuordnung" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "Eine Liste der Lagerbestände muss angegeben werden" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "Notizen zur Lagerartikelzusammenführung" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "Unterschiedliche Lieferanten erlauben" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "Zusammenführen von Lagerartikeln mit unterschiedlichen Lieferanten erlauben" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "Unterschiedliche Status erlauben" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "Zusammenführen von Lagerartikeln mit unterschiedlichen Status-Codes erlauben" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "Mindestens zwei Lagerartikel müssen angegeben werden" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "Keine Änderung" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "Primärschlüssel Lagerelement" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" -msgstr "" +msgstr "Lagerartikel Status-Code" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "Bestandsbewegungsnotizen" @@ -9475,7 +9502,7 @@ msgstr "Lagerort" #: stock/templates/stock/location.html:315 msgid "Scanned stock container into this location" -msgstr "" +msgstr "Lagerbehälter an diesen Ort eingescannt" #: stock/templates/stock/location.html:388 msgid "Stock Location QR Code" @@ -9483,7 +9510,7 @@ msgstr "Lagerort QR-Code" #: stock/templates/stock/location.html:399 msgid "Link Barcode to Stock Location" -msgstr "" +msgstr "Barcode mit Lagerort verknüpfen" #: stock/templates/stock/stock_app_base.html:16 msgid "Loading..." @@ -9569,7 +9596,7 @@ msgstr "Neueste Teile" #: templates/InvenTree/index.html:77 msgid "BOM Waiting Validation" -msgstr "" +msgstr "Ausstehende Überprüfung der Stückliste" #: templates/InvenTree/index.html:106 msgid "Recently Updated" @@ -9577,7 +9604,7 @@ msgstr "Kürzlich aktualisiert" #: templates/InvenTree/index.html:134 msgid "Depleted Stock" -msgstr "" +msgstr "Verbrauchter Bestand" #: templates/InvenTree/index.html:148 msgid "Required for Build Orders" @@ -9589,7 +9616,7 @@ msgstr "Abgelaufener Bestand" #: templates/InvenTree/index.html:172 msgid "Stale Stock" -msgstr "" +msgstr "Veralteter Bestand" #: templates/InvenTree/index.html:199 msgid "Build Orders In Progress" @@ -10376,7 +10403,7 @@ msgstr "Aktualisierung verfügbar" #: templates/about.html:43 msgid "Commit Branch" -msgstr "" +msgstr "Commit-Branch" #: templates/about.html:49 msgid "InvenTree Documentation" @@ -10662,7 +10689,7 @@ msgid "The following parts are low on required stock" msgstr "Bei den folgenden Teilen gibt es wenige Lagerartikel" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "Benötigte Menge" @@ -10676,7 +10703,7 @@ msgid "Click on the following link to view this part" msgstr "Klicken Sie auf den folgenden Link, um diesen Teil anzuzeigen" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "Mindestmenge" @@ -10702,7 +10729,7 @@ msgstr "" #: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 msgid "Authentication credentials not supplied" -msgstr "" +msgstr "Anmeldeinformationen nicht angegeben" #: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 msgid "Error 403: Permission Denied" @@ -10710,7 +10737,7 @@ msgstr "" #: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 msgid "You do not have the required permissions to access this function" -msgstr "" +msgstr "Sie haben nicht die erforderliche Berechtigung auf diesen Inhalt zuzugreifen" #: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 msgid "Error 404: Resource Not Found" @@ -10750,7 +10777,7 @@ msgstr "" #: templates/js/translated/api.js:266 msgid "Error code" -msgstr "" +msgstr "Fehlercode" #: templates/js/translated/attachment.js:114 msgid "All selected attachments will be deleted" @@ -10766,7 +10793,7 @@ msgstr "Anhänge löschen" #: templates/js/translated/attachment.js:253 msgid "Attachment actions" -msgstr "Anhang Aktionen" +msgstr "Anhang-Aktionen" #: templates/js/translated/attachment.js:275 msgid "No attachments found" @@ -10823,7 +10850,7 @@ msgstr "" #: templates/js/translated/barcode.js:372 msgid "Scan barcode data" -msgstr "" +msgstr "Barcode Daten scannen" #: templates/js/translated/barcode.js:420 templates/navbar.html:114 msgid "Scan Barcode" @@ -10831,7 +10858,7 @@ msgstr "Barcode scannen" #: templates/js/translated/barcode.js:458 msgid "No URL in response" -msgstr "" +msgstr "Keine URL in der Antwort" #: templates/js/translated/barcode.js:498 msgid "This will remove the link to the associated barcode" @@ -10839,77 +10866,77 @@ msgstr "Dadurch wird der Link zu dem zugehörigen Barcode entfernt" #: templates/js/translated/barcode.js:504 msgid "Unlink" -msgstr "" +msgstr "Verknüpfung aufheben" #: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 msgid "Remove stock item" -msgstr "" +msgstr "Lagerartikel entfernen" #: templates/js/translated/barcode.js:610 msgid "Scan Stock Items Into Location" -msgstr "" +msgstr "Artikel per Barcode-Scan zu Lagerort hinzufügen" #: templates/js/translated/barcode.js:612 msgid "Scan stock item barcode to check in to this location" -msgstr "" +msgstr "Barcode des Lagerartikels scannen um ihn an diesen Ort hinzuzufügen" #: templates/js/translated/barcode.js:615 #: templates/js/translated/barcode.js:812 msgid "Check In" -msgstr "" +msgstr "Einbuchen" #: templates/js/translated/barcode.js:647 msgid "No barcode provided" -msgstr "" +msgstr "Kein Barcode vorhanden" #: templates/js/translated/barcode.js:687 msgid "Stock Item already scanned" -msgstr "" +msgstr "Lagerartikel bereits gescannt" #: templates/js/translated/barcode.js:691 msgid "Stock Item already in this location" -msgstr "" +msgstr "Lagerartikel bereits an diesem Standort vorhanden" #: templates/js/translated/barcode.js:698 msgid "Added stock item" -msgstr "" +msgstr "Lagerartikel hinzugefügt" #: templates/js/translated/barcode.js:707 msgid "Barcode does not match valid stock item" -msgstr "" +msgstr "Barcode entspricht keinem Lagerartikel" #: templates/js/translated/barcode.js:726 msgid "Scan Stock Container Into Location" -msgstr "" +msgstr "Lagerbehälter an diesen Ort einscannen" #: templates/js/translated/barcode.js:728 msgid "Scan stock container barcode to check in to this location" -msgstr "" +msgstr "Barcode des Lagerbehälters scannen um ihn an diesen Ort hinzuzufügen" #: templates/js/translated/barcode.js:762 msgid "Barcode does not match valid stock location" -msgstr "" +msgstr "Barcode entspricht keinem gültigen Lagerort" #: templates/js/translated/barcode.js:806 msgid "Check Into Location" -msgstr "" +msgstr "Zu Lagerort hinzufügen" #: templates/js/translated/barcode.js:875 #: templates/js/translated/barcode.js:884 msgid "Barcode does not match a valid location" -msgstr "" +msgstr "Barcode entspricht keinem Lagerort" #: templates/js/translated/bom.js:78 msgid "Create BOM Item" -msgstr "" +msgstr "Stücklisten-Position anlegen" #: templates/js/translated/bom.js:132 msgid "Display row data" -msgstr "" +msgstr "Zeilendaten anzeigen" #: templates/js/translated/bom.js:188 msgid "Row Data" -msgstr "" +msgstr "Zeilendaten" #: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 #: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 @@ -10925,19 +10952,19 @@ msgstr "Vorlage einer Stückliste herunterladen" #: templates/js/translated/bom.js:351 msgid "Multi Level BOM" -msgstr "" +msgstr "Mehrstufige Stückliste" #: templates/js/translated/bom.js:352 msgid "Include BOM data for subassemblies" -msgstr "" +msgstr "Stücklistendaten für Untergruppen einbeziehen" #: templates/js/translated/bom.js:357 msgid "Levels" -msgstr "" +msgstr "Stufen" #: templates/js/translated/bom.js:358 msgid "Select maximum number of BOM levels to export (0 = all levels)" -msgstr "" +msgstr "Wählen Sie die maximale Anzahl an zu exportierenden Stücklistenstufen (0 = alle Stufen)" #: templates/js/translated/bom.js:365 msgid "Include Alternative Parts" @@ -10961,7 +10988,7 @@ msgstr "Bestand einschließen" #: templates/js/translated/bom.js:378 msgid "Include part stock data in exported BOM" -msgstr "" +msgstr "Teilebestand in exportierte Stückliste einbeziehen" #: templates/js/translated/bom.js:383 msgid "Include Manufacturer Data" @@ -11033,7 +11060,7 @@ msgstr "Ersatzteile verfügbar" #: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 msgid "Variant stock allowed" -msgstr "" +msgstr "Alternatives Lager erlaubt" #: templates/js/translated/bom.js:1014 msgid "Substitutes" @@ -11041,136 +11068,140 @@ msgstr "Ersatzteile" #: templates/js/translated/bom.js:1139 msgid "BOM pricing is complete" -msgstr "" +msgstr "Stücklistenpreise sind vollständig" #: templates/js/translated/bom.js:1144 msgid "BOM pricing is incomplete" -msgstr "" +msgstr "Stücklistenpreise sind vollständig" #: templates/js/translated/bom.js:1151 msgid "No pricing available" msgstr "Keine Preisinformation verfügbar" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +msgid "External stock" +msgstr "Externes Lager" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "Kein Lagerbestand verfügbar" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" -msgstr "" +msgstr "Alternatives Lager und Ersatzteillager einschließen" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" -msgstr "" +msgstr "Alternatives Lager einschließen" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" -msgstr "" +msgstr "Ersatzteillager einschließen" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "Verbrauchsartikel" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "Stücklisten-Position kontrollieren" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "Diese Position wurde kontrolliert" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "Ersatzteile bearbeiten" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "Stücklisten-Position bearbeiten" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "Stücklisten-Position löschen" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "Stückliste anzeigen" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" -msgstr "" +msgstr "Keine Stücklisten-Position(en) gefunden" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" -msgstr "" +msgstr "Benötigtes Teil" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" -msgstr "" +msgstr "Von übergeordneter Stückliste geerbt" #: templates/js/translated/build.js:142 msgid "Edit Build Order" -msgstr "" +msgstr "Bauauftrag bearbeiten" #: templates/js/translated/build.js:190 msgid "Create Build Order" -msgstr "" +msgstr "Bauauftrag erstellen" #: templates/js/translated/build.js:222 msgid "Cancel Build Order" -msgstr "" +msgstr "Bauauftrag abbrechen" #: templates/js/translated/build.js:231 msgid "Are you sure you wish to cancel this build?" -msgstr "" +msgstr "Sind Sie sicher, dass sie diesen Bauauftrag abbrechen möchten?" #: templates/js/translated/build.js:237 msgid "Stock items have been allocated to this build order" -msgstr "" +msgstr "Lagerartikel wurden zu diesem Bauauftrag hinzugefügt" #: templates/js/translated/build.js:244 msgid "There are incomplete outputs remaining for this build order" -msgstr "" +msgstr "Es sind noch unvollständige Artikel für diesen Bauauftrag vorhanden" #: templates/js/translated/build.js:296 msgid "Build order is ready to be completed" -msgstr "" +msgstr "Bauauftrag ist bereit abgeschlossen zu werden" #: templates/js/translated/build.js:304 msgid "This build order cannot be completed as there are incomplete outputs" -msgstr "" +msgstr "Dieser Bauauftrag kann nicht abgeschlossen werden, da es unfertige Endprodukte gibt" #: templates/js/translated/build.js:309 msgid "Build Order is incomplete" -msgstr "" +msgstr "Bauauftrag ist unvollständig" #: templates/js/translated/build.js:327 msgid "Complete Build Order" -msgstr "" +msgstr "Bauauftrag fertigstellen" #: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 #: templates/js/translated/stock.js:294 msgid "Next available serial number" -msgstr "" +msgstr "Nächste verfügbare Seriennummer" #: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 #: templates/js/translated/stock.js:296 msgid "Latest serial number" -msgstr "" +msgstr "Letzte Seriennummer" #: templates/js/translated/build.js:379 msgid "The Bill of Materials contains trackable parts" -msgstr "" +msgstr "Die Stückliste enthält verfolgbare Teile" #: templates/js/translated/build.js:380 msgid "Build outputs must be generated individually" -msgstr "" +msgstr "Endprodukte müssen individuell angelegt werden" #: templates/js/translated/build.js:388 msgid "Trackable parts can have serial numbers specified" -msgstr "" +msgstr "Nachverfolgbare Teile können Seriennummern haben" #: templates/js/translated/build.js:389 msgid "Enter serial numbers to generate multiple single build outputs" @@ -11178,94 +11209,94 @@ msgstr "" #: templates/js/translated/build.js:396 msgid "Create Build Output" -msgstr "" +msgstr "Endprodukt anlegen" #: templates/js/translated/build.js:427 msgid "Allocate stock items to this build output" -msgstr "" +msgstr "Lagerartikel zu diesem Endprodukt zuweisen" #: templates/js/translated/build.js:435 msgid "Deallocate stock from build output" -msgstr "" +msgstr "Bestand von Endprodukt entfernen" #: templates/js/translated/build.js:444 msgid "Complete build output" -msgstr "" +msgstr "Endprodukt fertigstellen" #: templates/js/translated/build.js:452 msgid "Scrap build output" -msgstr "" +msgstr "Ausschuss Endprodukt" #: templates/js/translated/build.js:459 msgid "Delete build output" -msgstr "" +msgstr "Endprodukt entfernen" #: templates/js/translated/build.js:479 msgid "Are you sure you wish to deallocate the selected stock items from this build?" -msgstr "" +msgstr "Sind Sie sicher, dass sie alle Lagerartikel von diesem Bauauftrag entfernen möchten?" #: templates/js/translated/build.js:497 msgid "Deallocate Stock Items" -msgstr "" +msgstr "Lagerartikel entfernen" #: templates/js/translated/build.js:583 templates/js/translated/build.js:711 #: templates/js/translated/build.js:837 msgid "Select Build Outputs" -msgstr "" +msgstr "Endprodukte auswählen" #: templates/js/translated/build.js:584 templates/js/translated/build.js:712 #: templates/js/translated/build.js:838 msgid "At least one build output must be selected" -msgstr "" +msgstr "Mindestens ein Endprodukt muss ausgewählt werden" #: templates/js/translated/build.js:598 msgid "Selected build outputs will be marked as complete" -msgstr "" +msgstr "Ausgewählte Endprodukte werden als vollständig markiert" #: templates/js/translated/build.js:602 templates/js/translated/build.js:736 #: templates/js/translated/build.js:860 msgid "Output" -msgstr "" +msgstr "Endprodukt" #: templates/js/translated/build.js:630 msgid "Complete Build Outputs" -msgstr "" +msgstr "Endprodukte fertigstellen" #: templates/js/translated/build.js:727 msgid "Selected build outputs will be marked as scrapped" -msgstr "" +msgstr "Ausgewählte Endprodukte werden als Ausschuss markiert" #: templates/js/translated/build.js:729 msgid "Scrapped output are marked as rejected" -msgstr "" +msgstr "Ausschuss wird als verworfen markiert" #: templates/js/translated/build.js:730 msgid "Allocated stock items will no longer be available" -msgstr "" +msgstr "Zugewiesene Lagerbestände werden nicht mehr verfügbar sein" #: templates/js/translated/build.js:731 msgid "The completion status of the build order will not be adjusted" -msgstr "" +msgstr "Der Fertigstellungsstatus des Bauauftrags wird nicht angepasst" #: templates/js/translated/build.js:762 msgid "Scrap Build Outputs" -msgstr "" +msgstr "Ausschuss Endprodukte" #: templates/js/translated/build.js:852 msgid "Selected build outputs will be deleted" -msgstr "" +msgstr "Ausgewählte Endprodukte werden gelöscht" #: templates/js/translated/build.js:854 msgid "Build output data will be permanently deleted" -msgstr "" +msgstr "Endprodukte werden dauerhaft gelöscht" #: templates/js/translated/build.js:855 msgid "Allocated stock items will be returned to stock" -msgstr "" +msgstr "Zugewiesene Lagerartikel werden in den Bestand zurückgeführt" #: templates/js/translated/build.js:873 msgid "Delete Build Outputs" -msgstr "" +msgstr "Endprodukte entfernen" #: templates/js/translated/build.js:960 msgid "No build order allocations found" @@ -11273,205 +11304,205 @@ msgstr "" #: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 msgid "Allocated Quantity" -msgstr "" +msgstr "Zugewiesene Menge" #: templates/js/translated/build.js:1003 msgid "Location not specified" -msgstr "" +msgstr "Standort nicht angegeben" #: templates/js/translated/build.js:1025 msgid "Complete outputs" -msgstr "" +msgstr "Endprodukte fertigstellen" #: templates/js/translated/build.js:1043 msgid "Scrap outputs" -msgstr "" +msgstr "Ausschuss" #: templates/js/translated/build.js:1061 msgid "Delete outputs" -msgstr "" +msgstr "Endprodukte löschen" #: templates/js/translated/build.js:1115 msgid "build output" -msgstr "" +msgstr "Endprodukt" #: templates/js/translated/build.js:1116 msgid "build outputs" -msgstr "" +msgstr "Endprodukte" #: templates/js/translated/build.js:1120 msgid "Build output actions" -msgstr "" +msgstr "Endprodukt-Aktionen" #: templates/js/translated/build.js:1294 msgid "No active build outputs found" -msgstr "" +msgstr "Keine aktiven Endprodukte gefunden" #: templates/js/translated/build.js:1387 msgid "Allocated Lines" -msgstr "" +msgstr "Zugewiesene Positionen" #: templates/js/translated/build.js:1401 msgid "Required Tests" -msgstr "" +msgstr "Erforderliche Prüfungen" #: templates/js/translated/build.js:1573 #: templates/js/translated/purchase_order.js:611 #: templates/js/translated/sales_order.js:1171 msgid "Select Parts" -msgstr "" +msgstr "Teile auswählen" #: templates/js/translated/build.js:1574 #: templates/js/translated/sales_order.js:1172 msgid "You must select at least one part to allocate" -msgstr "" +msgstr "Sie müssen mindestens einen Teil für die Zuweisung auswählen" #: templates/js/translated/build.js:1637 #: templates/js/translated/sales_order.js:1121 msgid "Specify stock allocation quantity" -msgstr "" +msgstr "Anzahl für Bestandszuordnung eingeben" #: templates/js/translated/build.js:1714 msgid "All Parts Allocated" -msgstr "" +msgstr "Alle Teile zugeordnet" #: templates/js/translated/build.js:1715 msgid "All selected parts have been fully allocated" -msgstr "" +msgstr "Alle ausgewählten Teile wurden vollständig zugeordnet" #: templates/js/translated/build.js:1729 #: templates/js/translated/sales_order.js:1186 msgid "Select source location (leave blank to take from all locations)" -msgstr "" +msgstr "Wählen Sie den Quellort aus (leer lassen, um von allen Standorten zu nehmen)" #: templates/js/translated/build.js:1757 msgid "Allocate Stock Items to Build Order" -msgstr "" +msgstr "Lagerartikel für Bauauftrag zuweisen" #: templates/js/translated/build.js:1768 #: templates/js/translated/sales_order.js:1283 msgid "No matching stock locations" -msgstr "" +msgstr "Keine passenden Lagerstandorte" #: templates/js/translated/build.js:1841 #: templates/js/translated/sales_order.js:1362 msgid "No matching stock items" -msgstr "" +msgstr "Keine passenden Lagerartikel" #: templates/js/translated/build.js:1938 msgid "Automatic Stock Allocation" -msgstr "" +msgstr "Automatische Lagerzuordnung" #: templates/js/translated/build.js:1939 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" -msgstr "" +msgstr "Lagerartikel werden automatisch diesem Bauauftrag zugewiesen, entsprechend den angegebenen Richtlinien" #: templates/js/translated/build.js:1941 msgid "If a location is specified, stock will only be allocated from that location" -msgstr "" +msgstr "Wenn ein Lagerort angegeben ist, wird der Lagerbestand nur von diesem Ort zugewiesen" #: templates/js/translated/build.js:1942 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" -msgstr "" +msgstr "Wenn der Lagerbestand als austauschbar gilt, wird er vom ersten Standort zugewiesen, an dem er gefunden wird" #: templates/js/translated/build.js:1943 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" -msgstr "" +msgstr "Wenn ein Ersatzlager zugelassen ist, wird dieses verwendet, wenn das Primärteil nicht vorrätig ist" #: templates/js/translated/build.js:1974 msgid "Allocate Stock Items" -msgstr "" +msgstr "Lagerartikel zuordnen" #: templates/js/translated/build.js:2080 msgid "No builds matching query" -msgstr "" +msgstr "Keine Bauaufträge zur Suchanfrage" #: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 #: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 #: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 #: templates/js/translated/stock.js:1946 templates/js/translated/stock.js:2674 msgid "Select" -msgstr "" +msgstr "Auswählen" #: templates/js/translated/build.js:2129 msgid "Build order is overdue" -msgstr "" +msgstr "Bauauftrag ist überfällig" #: templates/js/translated/build.js:2175 msgid "Progress" -msgstr "" +msgstr "Fortschritt" #: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3006 msgid "No user information" -msgstr "" +msgstr "Keine Benutzerinformation" #: templates/js/translated/build.js:2387 #: templates/js/translated/sales_order.js:1646 msgid "Edit stock allocation" -msgstr "" +msgstr "Bestands-Zuordnung bearbeiten" #: templates/js/translated/build.js:2388 #: templates/js/translated/sales_order.js:1647 msgid "Delete stock allocation" -msgstr "" +msgstr "Bestands-Zuordnung löschen" #: templates/js/translated/build.js:2403 msgid "Edit Allocation" -msgstr "" +msgstr "Zuordnung bearbeiten" #: templates/js/translated/build.js:2415 msgid "Remove Allocation" -msgstr "" +msgstr "Zuordnung entfernen" #: templates/js/translated/build.js:2456 msgid "build line" -msgstr "" +msgstr "Bauauftragsposition" #: templates/js/translated/build.js:2457 msgid "build lines" -msgstr "" +msgstr "Bauauftragspositionen" #: templates/js/translated/build.js:2475 msgid "No build lines found" -msgstr "" +msgstr "Keine Bauauftragspositionen gefunden" #: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" -msgstr "" +msgstr "Nachverfolgbares Teil" #: templates/js/translated/build.js:2540 msgid "Unit Quantity" -msgstr "" +msgstr "Menge" #: templates/js/translated/build.js:2592 #: templates/js/translated/sales_order.js:1915 msgid "Sufficient stock available" -msgstr "" +msgstr "Ausreichender Bestand vorhanden" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" -msgstr "" +msgstr "Verbrauchsartikel" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" -msgstr "" +msgstr "Verfolgtes Objekt" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -11516,7 +11547,7 @@ msgstr "Teile geliefert" #: templates/js/translated/company.js:545 msgid "Parts Manufactured" -msgstr "" +msgstr "Hersteller-Teile" #: templates/js/translated/company.js:560 msgid "No company information found" @@ -11628,7 +11659,7 @@ msgstr "Herstellerteile löschen" #: templates/js/translated/company.js:1230 msgid "Manufacturer part actions" -msgstr "" +msgstr "Herstellerteil-Aktionen" #: templates/js/translated/company.js:1249 msgid "No manufacturer parts found" @@ -11728,11 +11759,11 @@ msgstr "" #: templates/js/translated/filters.js:214 msgid "Select filter" -msgstr "" +msgstr "Filter auswählen" #: templates/js/translated/filters.js:437 msgid "Print Labels" -msgstr "" +msgstr "Etiketten drucken" #: templates/js/translated/filters.js:441 msgid "Print Reports" @@ -11785,7 +11816,7 @@ msgstr "" #: templates/js/translated/forms.js:903 msgid "Enter a valid number" -msgstr "" +msgstr "Gib eine gültige Nummer ein" #: templates/js/translated/forms.js:1473 templates/modals.html:19 #: templates/modals.html:43 @@ -11794,27 +11825,27 @@ msgstr "Fehler in Formular" #: templates/js/translated/forms.js:1971 msgid "No results found" -msgstr "" +msgstr "Keine Ergebnisse gefunden" #: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 msgid "Searching" -msgstr "" +msgstr "Suche" #: templates/js/translated/forms.js:2489 msgid "Clear input" -msgstr "" +msgstr "Eingabe löschen" #: templates/js/translated/forms.js:3075 msgid "File Column" -msgstr "" +msgstr "Dateispalte" #: templates/js/translated/forms.js:3075 msgid "Field Name" -msgstr "" +msgstr "Feldname" #: templates/js/translated/forms.js:3087 msgid "Select Columns" -msgstr "" +msgstr "Spalten auswählen" #: templates/js/translated/helpers.js:77 msgid "YES" @@ -11838,15 +11869,15 @@ msgstr "" #: templates/js/translated/label.js:53 templates/js/translated/report.js:123 msgid "Select Items" -msgstr "" +msgstr "Elemente auswählen" #: templates/js/translated/label.js:54 msgid "No items selected for printing" -msgstr "" +msgstr "Keine Elemente zum Drucken ausgewählt" #: templates/js/translated/label.js:72 msgid "No Labels Found" -msgstr "" +msgstr "Keine Etiketten gefunden" #: templates/js/translated/label.js:73 msgid "No label templates found which match the selected items" @@ -11854,31 +11885,31 @@ msgstr "" #: templates/js/translated/label.js:97 msgid "selected" -msgstr "" +msgstr "ausgewählt" #: templates/js/translated/label.js:133 msgid "Printing Options" -msgstr "" +msgstr "Druckoptionen" #: templates/js/translated/label.js:148 msgid "Print label" -msgstr "" +msgstr "Etikett drucken" #: templates/js/translated/label.js:148 msgid "Print labels" -msgstr "" +msgstr "Etiketten drucken" #: templates/js/translated/label.js:149 msgid "Print" -msgstr "" +msgstr "Drucken" #: templates/js/translated/label.js:155 msgid "Select label template" -msgstr "" +msgstr "Etiketten-Vorlage auswählen" #: templates/js/translated/label.js:168 msgid "Select plugin" -msgstr "" +msgstr "Plugin auswählen" #: templates/js/translated/label.js:187 msgid "Labels sent to printer" @@ -11929,7 +11960,7 @@ msgstr "" #: templates/js/translated/modals.js:1120 msgid "JSON response missing form data" -msgstr "" +msgstr "JSON Antwort enthält keine Formulardaten" #: templates/js/translated/modals.js:1135 msgid "Error 400: Bad Request" @@ -11979,7 +12010,7 @@ msgstr "Benachrichtigungen erscheinen hier" #: templates/js/translated/order.js:89 msgid "Add Extra Line Item" -msgstr "" +msgstr "Zusätzliche Position hinzufügen" #: templates/js/translated/order.js:126 msgid "Export Order" @@ -11987,32 +12018,32 @@ msgstr "Bestellung exportieren" #: templates/js/translated/order.js:241 msgid "Duplicate Line" -msgstr "" +msgstr "Position duplizieren" #: templates/js/translated/order.js:255 msgid "Edit Line" -msgstr "" +msgstr "Postion bearbeiten" #: templates/js/translated/order.js:268 msgid "Delete Line" -msgstr "" +msgstr "Position löschen" #: templates/js/translated/order.js:281 #: templates/js/translated/purchase_order.js:1991 msgid "No line items found" -msgstr "" +msgstr "Keine Postionen gefunden" #: templates/js/translated/order.js:369 msgid "Duplicate line" -msgstr "" +msgstr "Postionen duplizieren" #: templates/js/translated/order.js:370 msgid "Edit line" -msgstr "" +msgstr "Position bearbeiten" #: templates/js/translated/order.js:374 msgid "Delete line" -msgstr "" +msgstr "Position löschen" #: templates/js/translated/part.js:90 msgid "Part Attributes" @@ -12144,7 +12175,7 @@ msgstr "" #: templates/js/translated/part.js:619 msgid "Validating the BOM will mark each line item as valid" -msgstr "" +msgstr "Die Stückliste zu validieren markiert jede Position als gültig" #: templates/js/translated/part.js:629 msgid "Validate Bill of Materials" @@ -12245,12 +12276,12 @@ msgstr "" #: templates/js/translated/return_order.js:756 #: templates/js/translated/sales_order.js:1875 msgid "This line item is overdue" -msgstr "" +msgstr "Diese Position ist überfällig" #: templates/js/translated/part.js:1906 #: templates/js/translated/purchase_order.js:2221 msgid "Receive line item" -msgstr "" +msgstr "Position empfangen" #: templates/js/translated/part.js:1969 msgid "Delete part relationship" @@ -12313,64 +12344,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" -msgstr "" +msgstr "Maximale Menge" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -12468,19 +12499,19 @@ msgstr "" #: templates/js/translated/purchase_order.js:176 msgid "Duplicate Line Items" -msgstr "" +msgstr "Positionen duplizieren" #: templates/js/translated/purchase_order.js:177 msgid "Duplicate all line items from the selected order" -msgstr "" +msgstr "Alle Positionen der ausgewählten Bestellung duplizieren" #: templates/js/translated/purchase_order.js:184 msgid "Duplicate Extra Lines" -msgstr "" +msgstr "Zusätzliche Positionen duplizieren" #: templates/js/translated/purchase_order.js:185 msgid "Duplicate extra line items from the selected order" -msgstr "" +msgstr "Zusätzliche Positionen der ausgewählten Bestellung duplizieren" #: templates/js/translated/purchase_order.js:206 msgid "Edit Purchase Order" @@ -12502,16 +12533,16 @@ msgstr "" #: templates/js/translated/purchase_order.js:454 msgid "All line items have been received" -msgstr "" +msgstr "Alle Positionen wurden erhalten" #: templates/js/translated/purchase_order.js:459 msgid "This order has line items which have not been marked as received." -msgstr "" +msgstr "Diese Bestellung enthält Positionen, die nicht als empfangen markiert wurden." #: templates/js/translated/purchase_order.js:460 #: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." -msgstr "" +msgstr "Fertigstellen dieser Bestellung bedeutet, dass sie ihre Positionen nicht länger bearbeiten können." #: templates/js/translated/purchase_order.js:483 msgid "Cancel Purchase Order" @@ -12528,7 +12559,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:515 #: templates/js/translated/return_order.js:164 msgid "After placing this order, line items will no longer be editable." -msgstr "" +msgstr "Nachdem diese Bestellung platziert ist, können die Positionen nicht länger bearbeitet werden." #: templates/js/translated/purchase_order.js:520 msgid "Issue Purchase Order" @@ -12540,7 +12571,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:637 msgid "Quantity to order" -msgstr "" +msgstr "Zu bestellende Menge" #: templates/js/translated/purchase_order.js:646 msgid "New supplier part" @@ -12568,20 +12599,20 @@ msgstr "" #: templates/js/translated/purchase_order.js:1073 msgid "Select Line Items" -msgstr "" +msgstr "Positionen auswählen" #: templates/js/translated/purchase_order.js:1074 #: templates/js/translated/return_order.js:492 msgid "At least one line item must be selected" -msgstr "" +msgstr "Mindestens eine Position muss ausgewählt werden" #: templates/js/translated/purchase_order.js:1104 msgid "Received Quantity" -msgstr "" +msgstr "Erhaltene Menge" #: templates/js/translated/purchase_order.js:1115 msgid "Quantity to receive" -msgstr "" +msgstr "Zu erhaltende Menge" #: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" @@ -12617,7 +12648,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" -msgstr "" +msgstr "Zu erhaltende Menge" #: templates/js/translated/purchase_order.js:1333 #: templates/js/translated/return_order.js:561 @@ -12656,46 +12687,46 @@ msgstr "" #: templates/js/translated/purchase_order.js:1844 msgid "All selected Line items will be deleted" -msgstr "" +msgstr "Alle ausgewählten Positionen werden gelöscht" #: templates/js/translated/purchase_order.js:1862 msgid "Delete selected Line items?" -msgstr "" +msgstr "Ausgewählte Positionen löschen?" #: templates/js/translated/purchase_order.js:1917 #: templates/js/translated/sales_order.js:2070 msgid "Duplicate Line Item" -msgstr "" +msgstr "Position duplizieren" #: templates/js/translated/purchase_order.js:1932 #: templates/js/translated/return_order.js:476 #: templates/js/translated/return_order.js:669 #: templates/js/translated/sales_order.js:2083 msgid "Edit Line Item" -msgstr "" +msgstr "Position bearbeiten" #: templates/js/translated/purchase_order.js:1943 #: templates/js/translated/return_order.js:682 #: templates/js/translated/sales_order.js:2094 msgid "Delete Line Item" -msgstr "" +msgstr "Position löschen" #: templates/js/translated/purchase_order.js:2225 #: templates/js/translated/sales_order.js:2024 msgid "Duplicate line item" -msgstr "" +msgstr "Position duplizieren" #: templates/js/translated/purchase_order.js:2226 #: templates/js/translated/return_order.js:801 #: templates/js/translated/sales_order.js:2025 msgid "Edit line item" -msgstr "" +msgstr "Position bearbeiten" #: templates/js/translated/purchase_order.js:2227 #: templates/js/translated/return_order.js:805 #: templates/js/translated/sales_order.js:2031 msgid "Delete line item" -msgstr "" +msgstr "Position löschen" #: templates/js/translated/report.js:63 msgid "items selected" @@ -12762,7 +12793,7 @@ msgstr "" #: templates/js/translated/return_order.js:693 #: templates/js/translated/sales_order.js:2231 msgid "No matching line items" -msgstr "" +msgstr "Keine passenden Positionen gefunden" #: templates/js/translated/return_order.js:798 msgid "Mark item as received" @@ -12770,11 +12801,11 @@ msgstr "" #: templates/js/translated/sales_order.js:161 msgid "Create Sales Order" -msgstr "" +msgstr "Auftrag anlegen" #: templates/js/translated/sales_order.js:176 msgid "Edit Sales Order" -msgstr "" +msgstr "Auftrag bearbeiten" #: templates/js/translated/sales_order.js:291 msgid "No stock items have been allocated to this shipment" @@ -12810,19 +12841,19 @@ msgstr "" #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." -msgstr "" +msgstr "Dieser Auftrag enthält Positionen, die noch nicht abgeschlossen sind." #: templates/js/translated/sales_order.js:535 msgid "Issue this Sales Order?" -msgstr "" +msgstr "Diesen Auftrag aufgeben?" #: templates/js/translated/sales_order.js:540 msgid "Issue Sales Order" -msgstr "" +msgstr "Auftrag aufgeben" #: templates/js/translated/sales_order.js:559 msgid "Cancel Sales Order" -msgstr "" +msgstr "Auftrag stornieren" #: templates/js/translated/sales_order.js:564 msgid "Cancelling this order means that the order will no longer be editable." @@ -12834,7 +12865,7 @@ msgstr "" #: templates/js/translated/sales_order.js:728 msgid "No sales orders found" -msgstr "" +msgstr "Keine Aufträge gefunden" #: templates/js/translated/sales_order.js:908 msgid "Edit shipment" @@ -12887,11 +12918,11 @@ msgstr "" #: templates/js/translated/sales_order.js:1271 msgid "Allocate Stock Items to Sales Order" -msgstr "" +msgstr "Lagerartikel Auftrag zuweisen" #: templates/js/translated/sales_order.js:1477 msgid "No sales order allocations found" -msgstr "" +msgstr "Keine Allokationen für Auftrag gefunden" #: templates/js/translated/sales_order.js:1569 msgid "Edit Stock Allocation" @@ -13251,7 +13282,7 @@ msgstr "" #: templates/js/translated/stock.js:1932 msgid "Stock Actions" -msgstr "" +msgstr "Lager-Aktionen" #: templates/js/translated/stock.js:1976 msgid "Load installed items" @@ -13461,7 +13492,7 @@ msgstr "" #: templates/js/translated/table_filters.js:158 msgid "Trackable Part" -msgstr "" +msgstr "Nachverfolgbares Teil" #: templates/js/translated/table_filters.js:162 msgid "Assembled Part" @@ -13473,7 +13504,7 @@ msgstr "" #: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" -msgstr "" +msgstr "Erlaube alternatives Lager" #: templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 @@ -13588,7 +13619,7 @@ msgstr "" #: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" -msgstr "" +msgstr "Lagerartikel für Teile-Varianten einschließen" #: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" diff --git a/InvenTree/locale/el/LC_MESSAGES/django.po b/InvenTree/locale/el/LC_MESSAGES/django.po index 5afc1fc072..d671c1c73b 100644 --- a/InvenTree/locale/el/LC_MESSAGES/django.po +++ b/InvenTree/locale/el/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" -"PO-Revision-Date: 2024-02-28 07:23\n" +"POT-Creation-Date: 2024-03-02 07:22+0000\n" +"PO-Revision-Date: 2024-03-11 09:31\n" "Last-Translator: \n" "Language-Team: Greek\n" "Language: el_GR\n" @@ -28,7 +28,7 @@ msgstr "Δεν έχετε δικαιώματα να το δείτε αυτό" #: InvenTree/conversion.py:160 #, python-brace-format msgid "Invalid unit provided ({unit})" -msgstr "" +msgstr "Η μονάδα μέτρησης δεν είναι έγκυρη ({unit})" #: InvenTree/conversion.py:170 msgid "No value provided" @@ -66,9 +66,9 @@ msgstr "Εισάγετε ημερομηνία" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -213,7 +213,7 @@ msgstr "Τσέχικα" #: InvenTree/locales.py:18 msgid "Danish" -msgstr "" +msgstr "Δανέζικα" #: InvenTree/locales.py:19 msgid "German" @@ -297,15 +297,15 @@ msgstr "Ρωσικά" #: InvenTree/locales.py:39 msgid "Slovak" -msgstr "" +msgstr "Σλοβάκικα" #: InvenTree/locales.py:40 msgid "Slovenian" -msgstr "" +msgstr "Σλοβενικά" #: InvenTree/locales.py:41 msgid "Serbian" -msgstr "" +msgstr "Σερβικά" #: InvenTree/locales.py:42 msgid "Swedish" @@ -334,7 +334,7 @@ msgstr "Κινέζικα (Παραδοσιακά)" #: InvenTree/magic_login.py:28 #, python-brace-format msgid "[{site_name}] Log in to the app" -msgstr "" +msgstr "[{site_name}] Σύνδεση στην εφαρμογή" #: InvenTree/magic_login.py:38 company/models.py:132 #: company/templates/company/company_base.html:132 @@ -345,7 +345,7 @@ msgstr "Email" #: InvenTree/models.py:107 msgid "Error running plugin validation" -msgstr "" +msgstr "Σφάλμα κατά την εκτέλεση επικύρωσης προσθέτου" #: InvenTree/models.py:162 msgid "Metadata must be a python dict object" @@ -523,7 +523,7 @@ msgstr "Όνομα" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -598,23 +598,23 @@ msgstr "Επιλέξτε νόμισμα από τις διαθέσιμες επ #: InvenTree/serializers.py:436 msgid "You do not have permission to change this user role." -msgstr "" +msgstr "Δεν έχετε άδεια να αλλάξετε αυτόν τον ρόλο χρήστη." #: InvenTree/serializers.py:448 msgid "Only superusers can create new users" -msgstr "" +msgstr "Μόνο υπερχρήστες (superusers) μπορούν να δημιουργήσουν νέους χρήστες" #: InvenTree/serializers.py:467 msgid "Your account has been created." -msgstr "" +msgstr "Ο λογαριασμός σας δημιουργήθηκε." #: InvenTree/serializers.py:469 msgid "Please use the password reset function to login" -msgstr "" +msgstr "Παρακαλούμε χρησιμοποιήστε τη λειτουργία επαναφοράς κωδικού πρόσβασης για να συνδεθείτε" #: InvenTree/serializers.py:476 msgid "Welcome to InvenTree" -msgstr "" +msgstr "Καλώς ήρθατε στο InvenTree" #: InvenTree/serializers.py:537 msgid "Filename" @@ -668,7 +668,7 @@ msgstr "Διπλή στήλη: '{col}'" #: InvenTree/serializers.py:854 msgid "Remote Image" -msgstr "" +msgstr "Απομακρυσμένες Εικόνες" #: InvenTree/serializers.py:855 msgid "URL of remote image file" @@ -678,7 +678,7 @@ msgstr "Διεύθυνση URL του αρχείου απομακρυσμένη msgid "Downloading images from remote URL is not enabled" msgstr "Η λήψη εικόνων από απομακρυσμένο URL δεν είναι ενεργοποιημένη" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "Ο έλεγχος εργασίας στο παρασκήνιο απέτυχε" @@ -836,7 +836,7 @@ msgstr "Η έξοδος της σειράς κατασκευής ολοκληρ #: InvenTree/status_codes.py:128 msgid "Build order output rejected" -msgstr "" +msgstr "Η εντολή κατασκευής απορρίφθηκε" #: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1725 msgid "Consumed by build order" @@ -844,15 +844,15 @@ msgstr "Κατανάλωση με εντολή κατασκευής" #: InvenTree/status_codes.py:132 msgid "Shipped against Sales Order" -msgstr "" +msgstr "Αποστολή έναντι Εντολής Πώλησης" #: InvenTree/status_codes.py:135 msgid "Received against Purchase Order" -msgstr "" +msgstr "Λήφθηκε έναντι Εντολής Αγοράς" #: InvenTree/status_codes.py:138 msgid "Returned against Return Order" -msgstr "" +msgstr "Επιστράφηκε έναντι Εντολής Αγοράς" #: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 msgid "Sent to customer" @@ -868,31 +868,31 @@ msgstr "Παραγωγή" #: InvenTree/status_codes.py:185 msgid "Return" -msgstr "" +msgstr "Επιστροφή" #: InvenTree/status_codes.py:188 msgid "Repair" -msgstr "" +msgstr "Επισκευή" #: InvenTree/status_codes.py:191 msgid "Replace" -msgstr "" +msgstr "Αντικατάσταση" #: InvenTree/status_codes.py:194 msgid "Refund" -msgstr "" +msgstr "Επιστροφή χρημάτων" #: InvenTree/status_codes.py:197 msgid "Reject" -msgstr "" +msgstr "Απόρριψη" #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" -msgstr "" +msgstr "Άγνωστη βάση δεδομένων" #: InvenTree/validators.py:31 InvenTree/validators.py:33 msgid "Invalid physical unit" -msgstr "" +msgstr "Μη έγκυρη φυσική μονάδα" #: InvenTree/validators.py:39 msgid "Not a valid currency code" @@ -943,7 +943,7 @@ msgstr "Η έκδοση πρέπει να ακυρωθεί πριν διαγρα #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" -msgstr "" +msgstr "Αναλώσιμο" #: build/api.py:282 part/models.py:4006 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 @@ -952,19 +952,19 @@ msgstr "" #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" -msgstr "" +msgstr "Προαιρετικό" #: build/api.py:283 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" -msgstr "" +msgstr "Υπό παρακολούθηση" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" -msgstr "" +msgstr "Κατανεμημένο" #: build/api.py:293 company/models.py:890 #: company/templates/company/supplier_part.html:114 @@ -978,7 +978,7 @@ msgstr "" #: templates/js/translated/table_filters.js:340 #: templates/js/translated/table_filters.js:575 msgid "Available" -msgstr "" +msgstr "Διαθέσιμο" #: build/models.py:74 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 @@ -1006,7 +1006,7 @@ msgstr "Μη έγκυρη επιλογή για γονική κατασκευή" #: build/models.py:127 msgid "Build order part cannot be changed" -msgstr "" +msgstr "Εξάρτημα από εντολή κατασκευής δεν μπορεί να αλλάξει" #: build/models.py:173 msgid "Build Order Reference" @@ -1030,7 +1030,7 @@ msgstr "Αναφορά" #: build/models.py:185 msgid "Brief description of the build (optional)" -msgstr "" +msgstr "Σύντομη περιγραφή της κατασκευής (προαιρετικό)" #: build/models.py:193 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 @@ -1044,11 +1044,11 @@ msgstr "BuildOrder στην οποία έχει δοθεί αυτή η κατα #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "Κωδικός κατάστασης κατασκευής" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Κωδικός Παρτίδας" @@ -1205,7 +1205,7 @@ msgstr "Υπεύθυνος" #: build/models.py:303 msgid "User or group responsible for this build order" -msgstr "" +msgstr "Χρήστης ή ομάδα υπεύθυνη για αυτή την εντολή κατασκευής" #: build/models.py:308 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 @@ -1221,11 +1221,11 @@ msgstr "Εξωτερικοί σύνδεσμοι" #: build/models.py:313 msgid "Build Priority" -msgstr "" +msgstr "Προτεραιότητα Κατασκευής" #: build/models.py:316 msgid "Priority of this build order" -msgstr "" +msgstr "Προτεραιότητα αυτής της εντολής κατασκευής" #: build/models.py:323 common/models.py:129 order/admin.py:18 #: order/models.py:274 templates/InvenTree/settings/settings_staff_js.html:146 @@ -1236,54 +1236,54 @@ msgstr "" #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" -msgstr "" +msgstr "Κωδικός Έργου" #: build/models.py:324 msgid "Project code for this build order" -msgstr "" +msgstr "Κωδικός έργου για αυτήν την εντολή κατασκευής" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Η παραγγελία κατασκευής {build} έχει ολοκληρωθεί" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "Δεν καθορίστηκε έξοδος κατασκευής" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" -msgstr "" +msgstr "Η ποσότητα δεν μπορεί να είναι μεγαλύτερη από την παραγόμενη ποσότητα" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" -msgstr "" +msgstr "Το προϊόν κατασκευής {serial} δεν έχει περάσει όλες τις απαιτούμενες δοκιμές" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" -msgstr "" +msgstr "Αντικείμενο κατασκευής" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "" msgid "Quantity" msgstr "Ποσότητα" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" -msgstr "" +msgstr "Απαιτούμενη ποσότητα για την εντολή κατασκευής" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Το στοιχείο κατασκευής πρέπει να ορίζει μια έξοδο κατασκευής, καθώς το κύριο τμήμα επισημαίνεται ως ανιχνεύσιμο" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Η καταχωρημένη ποσότητα ({q}) δεν πρέπει να υπερβαίνει τη διαθέσιμη ποσότητα αποθέματος ({a})" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "Στοιχείο αποθέματος είναι υπερ-κατανεμημένο" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "Η ποσότητα πρέπει να είναι 1 για σειριακό απόθεμα" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" -msgstr "" +msgstr "Το επιλεγμένο στοιχείο αποθέματος δεν ταιριάζει με τη γραμμή ΤΥ" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "" msgid "Stock Item" msgstr "Στοιχείο Αποθέματος" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "Στοιχείο πηγαίου αποθέματος" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "Ποσότητα αποθέματος για διάθεση για κατασκευή" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "Εγκατάσταση σε" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "Αποθήκη προορισμού" @@ -1441,20 +1441,20 @@ msgstr "Αυτόματη Κατανομή Σειριακών Αριθμών" #: build/serializers.py:302 msgid "Automatically allocate required items with matching serial numbers" -msgstr "" +msgstr "Αυτόματη κατανομή των απαιτούμενων στοιχείων με τους αντίστοιχους σειριακούς αριθμούς" #: build/serializers.py:337 stock/api.py:978 msgid "The following serial numbers already exist or are invalid" -msgstr "" +msgstr "Οι παρακάτω σειριακοί αριθμοί υπάρχουν ήδη ή δεν είναι έγκυροι" #: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 msgid "A list of build outputs must be provided" -msgstr "" +msgstr "Πρέπει να παρέχεται μια λίστα με τα αποτελέσματα κατασκευής" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1469,32 +1469,32 @@ msgstr "" #: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2164 #: templates/js/translated/stock.js:2835 msgid "Location" -msgstr "" +msgstr "Τοποθεσία" #: build/serializers.py:427 msgid "Stock location for scrapped outputs" -msgstr "" +msgstr "Θέση αποθέματος για απορριφθείσες παραγωγές" #: build/serializers.py:433 msgid "Discard Allocations" -msgstr "" +msgstr "Απόρριψη Κατανομών" #: build/serializers.py:434 msgid "Discard any stock allocations for scrapped outputs" -msgstr "" +msgstr "Απορρίψτε τυχόν κατανομές αποθέματος για παραγωγές που έχουν απορριφθεί" #: build/serializers.py:439 msgid "Reason for scrapping build output(s)" -msgstr "" +msgstr "Αιτία απόρριψης προϊόντων κατασκευής" #: build/serializers.py:499 msgid "Location for completed build outputs" -msgstr "" +msgstr "Τοποθεσία για ολοκληρωμένα προϊόντα κατασκευής" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1504,105 +1504,105 @@ msgstr "" #: templates/js/translated/stock.js:2139 templates/js/translated/stock.js:2959 #: templates/js/translated/stock.js:3084 msgid "Status" -msgstr "" +msgstr "Κατάσταση" #: build/serializers.py:511 msgid "Accept Incomplete Allocation" -msgstr "" +msgstr "Αποδοχή Ελλιπούς Δέσμευσης" #: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" -msgstr "" +msgstr "Ολοκλήρωσε τα προϊόντα εάν το απόθεμα δεν έχει δεσμευτεί πλήρως" #: build/serializers.py:592 msgid "Remove Allocated Stock" -msgstr "" +msgstr "Αφαίρεση Καταχωρημένου Αποθέματος" #: build/serializers.py:593 msgid "Subtract any stock which has already been allocated to this build" -msgstr "" +msgstr "Αφαίρεσε το απόθεμα που έχει κατανεμηθεί σε αυτή την κατασκευή" #: build/serializers.py:599 msgid "Remove Incomplete Outputs" -msgstr "" +msgstr "Αφαίρεση Ατελείωτων Προϊόντων" #: build/serializers.py:600 msgid "Delete any build outputs which have not been completed" -msgstr "" +msgstr "Διαγράψτε τυχόν προϊόντα κατασκευής που δεν έχουν ολοκληρωθεί" #: build/serializers.py:627 msgid "Not permitted" -msgstr "" +msgstr "Δεν επιτρέπεται" #: build/serializers.py:628 msgid "Accept as consumed by this build order" -msgstr "" +msgstr "Αποδοχή ως κατανάλωση για αυτή την παραγγελία κατασκευής" #: build/serializers.py:629 msgid "Deallocate before completing this build order" -msgstr "" +msgstr "Αποδέσμευση πριν από την ολοκλήρωση αυτής της παραγγελίας κατασκευής" #: build/serializers.py:651 msgid "Overallocated Stock" -msgstr "" +msgstr "Υπερ-δεσμευμένο Απόθεμα" #: build/serializers.py:653 msgid "How do you want to handle extra stock items assigned to the build order" -msgstr "" +msgstr "Πώς θέλετε να χειριστείτε το επιπλέον απόθεμα που έχει δεσμευτεί στην παραγγελία κατασκευής" #: build/serializers.py:663 msgid "Some stock items have been overallocated" -msgstr "" +msgstr "Μερικά στοιχεία αποθέματος έχουν υπερ-δεσμευτεί" #: build/serializers.py:668 msgid "Accept Unallocated" -msgstr "" +msgstr "Αποδοχή Μη Δεσμευμένων" #: build/serializers.py:669 msgid "Accept that stock items have not been fully allocated to this build order" -msgstr "" +msgstr "Αποδεχτείτε ότι αντικείμενα αποθέματος δεν έχουν δεσμευτεί πλήρως σε αυτή την παραγγελία κατασκευής" #: build/serializers.py:679 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" -msgstr "" +msgstr "Το απαιτούμενο απόθεμα δεν έχει δεσμευτεί πλήρως" #: build/serializers.py:684 order/serializers.py:280 order/serializers.py:1213 msgid "Accept Incomplete" -msgstr "" +msgstr "Αποδοχή Μη Ολοκληρωμένων" #: build/serializers.py:685 msgid "Accept that the required number of build outputs have not been completed" -msgstr "" +msgstr "Αποδεχτείτε ότι ο απαιτούμενος αριθμός προϊόντων κατασκευής δεν έχει ολοκληρωθεί" #: build/serializers.py:695 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" -msgstr "" +msgstr "Ο απαιτούμενος αριθμός προϊόντων δεν έχει ολοκληρωθεί" #: build/serializers.py:704 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" -msgstr "" +msgstr "Η παραγγελία κατασκευής έχει ελλιπή προϊόντα" #: build/serializers.py:734 msgid "Build Line" -msgstr "" +msgstr "Γραμμή Κατασκευής" #: build/serializers.py:744 msgid "Build output" -msgstr "" +msgstr "Προϊόν Κατασκευής" #: build/serializers.py:752 msgid "Build output must point to the same build" -msgstr "" +msgstr "Το προϊόν κατασκευής πρέπει να δείχνει στην ίδια κατασκευή" #: build/serializers.py:788 msgid "Build Line Item" -msgstr "" +msgstr "Αντικείμενο Γραμμής Κατασκευής" #: build/serializers.py:802 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "" @@ -1659,44 +1659,45 @@ msgstr "" msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1739,7 +1740,7 @@ msgstr "" #: templates/js/translated/barcode.js:496 #: templates/js/translated/barcode.js:501 msgid "Unlink Barcode" -msgstr "" +msgstr "Αποσύνδεση Barcode" #: build/templates/build/build_base.html:47 #: company/templates/company/supplier_part.html:43 @@ -1750,67 +1751,67 @@ msgstr "" #: stock/templates/stock/item_base.html:49 #: stock/templates/stock/location.html:61 msgid "Link Barcode" -msgstr "" +msgstr "Σύνδεση Barcode" #: build/templates/build/build_base.html:56 #: order/templates/order/order_base.html:46 #: order/templates/order/return_order_base.html:55 #: order/templates/order/sales_order_base.html:55 msgid "Print actions" -msgstr "" +msgstr "Ενέργειες εκτύπωσης" #: build/templates/build/build_base.html:60 msgid "Print build order report" -msgstr "" +msgstr "Εκτύπωση αναφοράς εντολών κατασκευής" #: build/templates/build/build_base.html:67 msgid "Build actions" -msgstr "" +msgstr "Εντολές κατασκευής" #: build/templates/build/build_base.html:71 msgid "Edit Build" -msgstr "" +msgstr "Επεξεργασία Κατασκευής" #: build/templates/build/build_base.html:73 msgid "Cancel Build" -msgstr "" +msgstr "Ακύρωση κατασκευής" #: build/templates/build/build_base.html:76 msgid "Duplicate Build" -msgstr "" +msgstr "Αντιγραφή Κατασκευής" #: build/templates/build/build_base.html:79 msgid "Delete Build" -msgstr "" +msgstr "Διαγραφή Κατασκευής" #: build/templates/build/build_base.html:84 #: build/templates/build/build_base.html:85 msgid "Complete Build" -msgstr "" +msgstr "Ολοκλήρωση Κατασκευής" #: build/templates/build/build_base.html:107 msgid "Build Description" -msgstr "" +msgstr "Περιγραφή Κατασκευής" #: build/templates/build/build_base.html:117 msgid "No build outputs have been created for this build order" -msgstr "" +msgstr "Δεν έχουν δημιουργηθεί προϊόντα για αυτήν την εντολή κατασκευής" #: build/templates/build/build_base.html:124 msgid "Build Order is ready to mark as completed" -msgstr "" +msgstr "Η εντολή Κατασκευής είναι έτοιμη για να επισημανθεί ως ολοκληρωμένη" #: build/templates/build/build_base.html:129 msgid "Build Order cannot be completed as outstanding outputs remain" -msgstr "" +msgstr "Η Εντολή Κατασκευής δεν μπορεί να ολοκληρωθεί καθώς υπάρχουν εκκρεμή προϊόντα" #: build/templates/build/build_base.html:134 msgid "Required build quantity has not yet been completed" -msgstr "" +msgstr "Ο απαιτούμενος αριθμός προϊόντων δεν έχει ακόμα ολοκληρωθεί" #: build/templates/build/build_base.html:139 msgid "Stock has not been fully allocated to this Build Order" -msgstr "" +msgstr "Το Απόθεμα δεν έχει κατανεμηθεί πλήρως σε αυτή την Εντολή Κατασκευής" #: build/templates/build/build_base.html:160 #: build/templates/build/detail.html:138 order/models.py:285 @@ -1826,12 +1827,12 @@ msgstr "" #: templates/js/translated/sales_order.js:835 #: templates/js/translated/sales_order.js:1867 msgid "Target Date" -msgstr "" +msgstr "Επιθυμητή Προθεσμία" #: build/templates/build/build_base.html:165 #, python-format msgid "This build was due on %(target)s" -msgstr "" +msgstr "Αυτή η κατασκευή είχε προθεσμία %(target)s" #: build/templates/build/build_base.html:165 #: build/templates/build/build_base.html:222 @@ -1843,12 +1844,12 @@ msgstr "" #: templates/js/translated/table_filters.js:626 #: templates/js/translated/table_filters.js:667 msgid "Overdue" -msgstr "" +msgstr "Εκπρόθεσμη" #: build/templates/build/build_base.html:177 #: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 msgid "Completed Outputs" -msgstr "" +msgstr "Ολοκληρωμένα Προϊόντα" #: build/templates/build/build_base.html:190 #: build/templates/build/detail.html:101 order/api.py:1457 order/models.py:1524 @@ -1864,48 +1865,48 @@ msgstr "" #: templates/js/translated/sales_order.js:992 #: templates/js/translated/stock.js:2888 msgid "Sales Order" -msgstr "" +msgstr "Εντολές Πώλησης" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 #: report/templates/report/inventree_build_order_base.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" -msgstr "" +msgstr "Εκδόθηκε από" #: build/templates/build/build_base.html:211 #: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 msgid "Priority" -msgstr "" +msgstr "Προτεραιότητα" #: build/templates/build/build_base.html:273 msgid "Delete Build Order" -msgstr "" +msgstr "Διαγραφή Εντολής Κατασκευής" #: build/templates/build/build_base.html:283 msgid "Build Order QR Code" -msgstr "" +msgstr "Κωδικός QR Εντολής Κατασκευής" #: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" -msgstr "" +msgstr "Σύνδεση Barcode με την Εντολή Κατασκευής" #: build/templates/build/detail.html:15 msgid "Build Details" -msgstr "" +msgstr "Λεπτομέρειες Κατασκευής" #: build/templates/build/detail.html:38 msgid "Stock Source" -msgstr "" +msgstr "Προέλευση Αποθέματος" #: build/templates/build/detail.html:43 msgid "Stock can be taken from any available location." -msgstr "" +msgstr "Το απόθεμα μπορεί να ληφθεί από οποιαδήποτε διαθέσιμη τοποθεσία." #: build/templates/build/detail.html:49 order/models.py:1418 #: templates/js/translated/purchase_order.js:2190 msgid "Destination" -msgstr "" +msgstr "Προορισμός" #: build/templates/build/detail.html:56 msgid "Destination location not specified" @@ -1990,27 +1991,31 @@ msgstr "" msgid "Order Parts" msgstr "" -#: build/templates/build/detail.html:210 -msgid "Incomplete Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:214 -msgid "Create new build output" +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" msgstr "" #: build/templates/build/detail.html:215 +msgid "Incomplete Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:219 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "" msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "" @@ -4218,7 +4223,7 @@ msgstr "" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -5861,10 +5869,10 @@ msgstr "" msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "" msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "" msgid "Category" msgstr "" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,7 +6023,8 @@ msgstr "" msgid "Default location for parts in this category" msgstr "" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "" msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" @@ -6446,7 +6460,7 @@ msgstr "" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" @@ -6455,7 +6469,7 @@ msgstr "" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" @@ -6463,7 +6477,7 @@ msgstr "" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6685,311 +6699,323 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +msgid "External Stock" +msgstr "" + +#: part/serializers.py:806 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:808 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7221,7 +7247,7 @@ msgid "Validate BOM" msgstr "" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" @@ -7405,7 +7431,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -8784,7 +8810,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -8796,7 +8822,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -8905,7 +8931,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -8986,7 +9012,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9059,77 +9085,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -10662,7 +10689,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -10676,7 +10703,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" @@ -11051,62 +11078,66 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +msgid "External stock" +msgstr "" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11480,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12344,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" diff --git a/InvenTree/locale/en/LC_MESSAGES/django.po b/InvenTree/locale/en/LC_MESSAGES/django.po index a6f744f447..7d787a6234 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: 2024-02-28 06:44+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -67,9 +67,9 @@ msgstr "" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -524,7 +524,7 @@ msgstr "" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -679,7 +679,7 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "" @@ -961,7 +961,7 @@ msgid "Tracked" msgstr "" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1045,11 +1045,11 @@ msgstr "" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1148,7 +1148,7 @@ msgid "Build status code" msgstr "" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" @@ -1243,48 +1243,48 @@ msgstr "" msgid "Project code for this build order" msgstr "" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1311,7 +1311,7 @@ msgstr "" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1331,38 +1331,38 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1377,19 +1377,19 @@ msgstr "" msgid "Stock Item" msgstr "" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "" @@ -1453,9 +1453,9 @@ msgid "A list of build outputs must be provided" msgstr "" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1495,7 +1495,7 @@ msgstr "" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1603,7 +1603,7 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "" @@ -1660,44 +1660,45 @@ msgstr "" msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1991,27 +1992,31 @@ msgstr "" msgid "Order Parts" msgstr "" -#: build/templates/build/detail.html:210 -msgid "Incomplete Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:214 -msgid "Create new build output" +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" msgstr "" #: build/templates/build/detail.html:215 +msgid "Incomplete Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:219 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2027,15 +2032,15 @@ msgstr "" msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2437,7 +2442,7 @@ msgid "Parts are templates by default" msgstr "" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3496,7 +3501,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3973,7 +3978,7 @@ msgstr "" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3988,7 +3993,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4060,7 +4065,7 @@ msgstr "" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4077,7 +4082,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "" @@ -4113,7 +4118,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4158,7 +4163,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "" @@ -4219,7 +4224,7 @@ msgstr "" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4430,8 +4435,9 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "" @@ -4529,7 +4535,7 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4578,10 +4584,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4641,7 +4649,7 @@ msgid "Label template file" msgstr "" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "" @@ -5734,7 +5742,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -5862,10 +5870,10 @@ msgstr "" msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5890,13 +5898,13 @@ msgstr "" msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5975,7 +5983,7 @@ msgid "This option must be selected" msgstr "" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5983,12 +5991,17 @@ msgstr "" msgid "Category" msgstr "" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6011,7 +6024,8 @@ msgstr "" msgid "Default location for parts in this category" msgstr "" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6419,7 +6433,7 @@ msgstr "" msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" @@ -6447,7 +6461,7 @@ msgstr "" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" @@ -6456,7 +6470,7 @@ msgstr "" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" @@ -6464,7 +6478,7 @@ msgstr "" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6686,311 +6700,323 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +msgid "External Stock" +msgstr "" + +#: part/serializers.py:806 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:808 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7222,7 +7248,7 @@ msgid "Validate BOM" msgstr "" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" @@ -7406,7 +7432,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -8785,7 +8811,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -8797,7 +8823,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -8906,7 +8932,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -8987,7 +9013,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9060,77 +9086,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -10663,7 +10690,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -10677,7 +10704,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" @@ -11052,62 +11079,66 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +msgid "External stock" +msgstr "" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11450,29 +11481,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12314,64 +12345,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" diff --git a/InvenTree/locale/es/LC_MESSAGES/django.po b/InvenTree/locale/es/LC_MESSAGES/django.po index 8484881342..e2251ee9b2 100644 --- a/InvenTree/locale/es/LC_MESSAGES/django.po +++ b/InvenTree/locale/es/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" -"PO-Revision-Date: 2024-02-28 07:23\n" +"POT-Creation-Date: 2024-03-02 07:22+0000\n" +"PO-Revision-Date: 2024-03-07 10:33\n" "Last-Translator: \n" "Language-Team: Spanish, Mexico\n" "Language: es_MX\n" @@ -66,9 +66,9 @@ msgstr "Ingrese la fecha" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -297,7 +297,7 @@ msgstr "Ruso" #: InvenTree/locales.py:39 msgid "Slovak" -msgstr "" +msgstr "Eslovaco" #: InvenTree/locales.py:40 msgid "Slovenian" @@ -523,7 +523,7 @@ msgstr "Nombre" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -606,7 +606,7 @@ msgstr "Solo los superusuarios pueden crear nuevos usuarios" #: InvenTree/serializers.py:467 msgid "Your account has been created." -msgstr "" +msgstr "Su cuenta ha sido creada." #: InvenTree/serializers.py:469 msgid "Please use the password reset function to login" @@ -614,7 +614,7 @@ msgstr "" #: InvenTree/serializers.py:476 msgid "Welcome to InvenTree" -msgstr "" +msgstr "Bienvenido a InvenTree" #: InvenTree/serializers.py:537 msgid "Filename" @@ -678,7 +678,7 @@ msgstr "URL de imagen remota" msgid "Downloading images from remote URL is not enabled" msgstr "La descarga de imágenes desde la URL remota no está habilitada" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "Falló la comprobación en segundo plano del worker" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "Rastreado" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "Orden de Construcción o Armado a la que se asigna" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "Código de estado de construcción" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Numero de lote" @@ -1242,48 +1242,48 @@ msgstr "Código del proyecto" msgid "Project code for this build order" msgstr "Código de proyecto para esta orden de ensamble" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "El pedido {build} ha sido procesado" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "Pedido #[order] ha sido procesado" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "No se ha especificado salida de construcción" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "La construcción de la salida ya está completa" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "La salida de la construcción no coincide con el orden de construcción" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "La cantidad debe ser mayor que cero" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "La cantidad no puede ser mayor que la cantidad de salida" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "Ensamblar equipo" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "Ensamblar equipo" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "Ensamblar equipo" msgid "Quantity" msgstr "Cantidad" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "Cantidad requerida para orden de ensamble" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Item de construcción o armado debe especificar un resultado o salida, ya que la parte maestra está marcada como rastreable" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Cantidad asignada ({q}) no debe exceder la cantidad disponible de stock ({a})" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "Artículo de stock sobreasignado" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "Cantidad asignada debe ser mayor que cero" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "La cantidad debe ser 1 para el stock serializado" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "El artículo de almacén selelccionado no coincide con la línea BOM" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "El artículo de almacén selelccionado no coincide con la línea BOM" msgid "Stock Item" msgstr "Artículo de stock" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "Producto original de stock" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "Cantidad de stock a asignar para construir" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "Instalar en" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "Artículo de stock de destino" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "Debe proporcionarse una lista de salidas de construcción" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "Ubicación para las salidas de construcción completadas" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "Crear partida" msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part debe apuntar a la misma parte que la orden de construcción" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "El artículo debe estar en stock" @@ -1659,44 +1659,45 @@ msgstr "Elementos opcionales" msgid "Allocate optional BOM items to build order" msgstr "Asignar artículos de la BOM opcionales para construir la orden" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "Item de Lista de Materiales" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" -msgstr "" +msgstr "Stock Asignado" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "En pedido" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" -msgstr "" +msgstr "En producción" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "Stock Disponible" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "Stock requerido para la orden de construcción" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "Orden de construcción atrasada" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "El pedido de construcción {bo} está atrasado" @@ -1880,11 +1881,11 @@ msgstr "Prioridad" #: build/templates/build/build_base.html:273 msgid "Delete Build Order" -msgstr "" +msgstr "Eliminar Orden de Trabajo" #: build/templates/build/build_base.html:283 msgid "Build Order QR Code" -msgstr "" +msgstr "Código QR de la Orden de Trabajo" #: build/templates/build/build_base.html:295 msgid "Link Barcode to Build Order" @@ -1990,27 +1991,31 @@ msgstr "Pedir partes necesarias" msgid "Order Parts" msgstr "Partes del pedido" -#: build/templates/build/detail.html:210 +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" +msgstr "" + +#: build/templates/build/detail.html:215 msgid "Incomplete Build Outputs" msgstr "Salidas de Trabajo incompletas" -#: build/templates/build/detail.html:214 +#: build/templates/build/detail.html:219 msgid "Create new build output" msgstr "Crear nueva salida de trabajo" -#: build/templates/build/detail.html:215 +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "Nueva Salida de Trabajo" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "Existencias consumidas" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "Salidas de Trabajo Completadas" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "Salidas de Trabajo Completadas" msgid "Attachments" msgstr "Adjuntos" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Notas del Trabajo" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" -msgstr "" +msgstr "Asignación Completa" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "Las partes son plantillas por defecto" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3485,7 +3490,7 @@ msgstr "" #: common/models.py:2389 msgid "Last used printing machines" -msgstr "" +msgstr "Últimas impresoras usadas" #: common/models.py:2390 msgid "Save the last used printing machines for a user" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "Cantidad de salto de precio" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3697,63 +3702,63 @@ msgstr "Error generado por el complemento" #: common/serializers.py:333 msgid "Is Running" -msgstr "" +msgstr "Está en ejecución" #: common/serializers.py:339 msgid "Pending Tasks" -msgstr "" +msgstr "Tareas pendientes" #: common/serializers.py:345 msgid "Scheduled Tasks" -msgstr "" +msgstr "Tareas Programadas" #: common/serializers.py:351 msgid "Failed Tasks" -msgstr "" +msgstr "Tareas fallidas" #: common/serializers.py:366 msgid "Task ID" -msgstr "" +msgstr "Identificación de Tarea" #: common/serializers.py:366 msgid "Unique task ID" -msgstr "" +msgstr "Identificación de tarea única" #: common/serializers.py:368 msgid "Lock" -msgstr "" +msgstr "Bloquear" #: common/serializers.py:368 msgid "Lock time" -msgstr "" +msgstr "Bloquear hora" #: common/serializers.py:370 msgid "Task name" -msgstr "" +msgstr "Nombre de la tarea" #: common/serializers.py:372 msgid "Function" -msgstr "" +msgstr "Función" #: common/serializers.py:372 msgid "Function name" -msgstr "" +msgstr "Nombre de la Función" #: common/serializers.py:374 msgid "Arguments" -msgstr "" +msgstr "Argumentos" #: common/serializers.py:374 msgid "Task arguments" -msgstr "" +msgstr "Argumentos de la tarea" #: common/serializers.py:377 msgid "Keyword Arguments" -msgstr "" +msgstr "Argumentos de palabra clave" #: common/serializers.py:377 msgid "Task keyword arguments" -msgstr "" +msgstr "Argumentos de palabra clave de tarea" #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 @@ -3972,7 +3977,7 @@ msgstr "Seleccionar parte" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "Seleccionar fabricante" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "La parte vinculada del fabricante debe hacer referencia a la misma parte #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "Proveedor" msgid "Select supplier" msgstr "Seleccionar proveedor" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "Unidad de mantenimiento de stock de proveedores" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "Cargo mínimo (p. ej., cuota de almacenamiento)" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "Disponibilidad actualizada" msgid "Date of last update of availability data" msgstr "Fecha de última actualización de los datos de disponibilidad" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "Moneda predeterminada utilizada para este proveedor" @@ -4218,7 +4223,7 @@ msgstr "Borrar imagen" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4247,11 +4252,11 @@ msgstr "Teléfono" #: company/templates/company/company_base.html:205 #: part/templates/part/part_base.html:528 msgid "Remove Image" -msgstr "" +msgstr "Eliminar imagen" #: company/templates/company/company_base.html:206 msgid "Remove associated image from this company" -msgstr "" +msgstr "Eliminar imagen asociada a esta empresa" #: company/templates/company/company_base.html:208 #: part/templates/part/part_base.html:531 @@ -4263,12 +4268,12 @@ msgstr "Eliminar" #: company/templates/company/company_base.html:237 #: part/templates/part/part_base.html:560 msgid "Upload Image" -msgstr "" +msgstr "Subir Imagen" #: company/templates/company/company_base.html:252 #: part/templates/part/part_base.html:614 msgid "Download Image" -msgstr "" +msgstr "Descargar imagen" #: company/templates/company/detail.html:15 #: company/templates/company/manufacturer_part_sidebar.html:7 @@ -4429,8 +4434,9 @@ msgstr "No hay información del fabricante disponible" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "Proveedores" @@ -4451,7 +4457,7 @@ msgstr "Nuevo parámetro" #: company/templates/company/manufacturer_part.html:206 #: templates/js/translated/part.js:1422 msgid "Add Parameter" -msgstr "" +msgstr "Añadir parámetro" #: company/templates/company/sidebar.html:6 msgid "Manufactured Parts" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "No hay información de proveedor disponible" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4567,7 +4573,7 @@ msgstr "Agregar descuento de precio" #: company/templates/company/supplier_part.html:276 msgid "Supplier Part QR Code" -msgstr "" +msgstr "Código QR de parte del Proveedor" #: company/templates/company/supplier_part.html:287 msgid "Link Barcode to Supplier Part" @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "Archivo de plantilla de etiqueta" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "Habilitado" @@ -4699,7 +4707,7 @@ msgstr "Código QR" #: machine/machine_types/label_printer.py:217 msgid "Copies" -msgstr "" +msgstr "Copias" #: machine/machine_types/label_printer.py:218 msgid "Number of copies to print for each label" @@ -4707,7 +4715,7 @@ msgstr "" #: machine/machine_types/label_printer.py:233 msgid "Connected" -msgstr "" +msgstr "Conectado" #: machine/machine_types/label_printer.py:234 order/api.py:1461 #: templates/js/translated/sales_order.js:1042 @@ -4716,27 +4724,27 @@ msgstr "Desconocido" #: machine/machine_types/label_printer.py:235 msgid "Printing" -msgstr "" +msgstr "Impresión" #: machine/machine_types/label_printer.py:236 msgid "No media" -msgstr "" +msgstr "Sin archivos multimedia" #: machine/machine_types/label_printer.py:237 msgid "Disconnected" -msgstr "" +msgstr "Desconectado" #: machine/machine_types/label_printer.py:244 msgid "Label Printer" -msgstr "" +msgstr "Impresora de Etiquetas" #: machine/machine_types/label_printer.py:245 msgid "Directly print labels for various items." -msgstr "" +msgstr "Imprime directamente etiquetas para varios artículos." #: machine/machine_types/label_printer.py:251 msgid "Printer Location" -msgstr "" +msgstr "Ubicación de la Impresora" #: machine/machine_types/label_printer.py:252 msgid "Scope the printer to a specific location" @@ -4744,51 +4752,51 @@ msgstr "" #: machine/models.py:25 msgid "Name of machine" -msgstr "" +msgstr "Nombre de la máquina" #: machine/models.py:29 msgid "Machine Type" -msgstr "" +msgstr "Tipo de Máquina" #: machine/models.py:29 msgid "Type of machine" -msgstr "" +msgstr "Tipo de máquina" #: machine/models.py:34 machine/models.py:146 msgid "Driver" -msgstr "" +msgstr "Controlador" #: machine/models.py:35 msgid "Driver used for the machine" -msgstr "" +msgstr "Controlador usado para la máquina" #: machine/models.py:39 msgid "Machines can be disabled" -msgstr "" +msgstr "Las máquinas pueden ser desactivadas" #: machine/models.py:95 msgid "Driver available" -msgstr "" +msgstr "Controlador disponible" #: machine/models.py:100 msgid "No errors" -msgstr "" +msgstr "Sin errores" #: machine/models.py:105 msgid "Initialized" -msgstr "" +msgstr "Inicializado" #: machine/models.py:110 msgid "Errors" -msgstr "" +msgstr "Errores" #: machine/models.py:117 msgid "Machine status" -msgstr "" +msgstr "Estado de máquina" #: machine/models.py:145 msgid "Machine" -msgstr "" +msgstr "Máquina" #: machine/models.py:151 msgid "Machine Config" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "Envíos pendientes" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "Acciones" @@ -5861,10 +5869,10 @@ msgstr "Nombre del padre" msgid "Category Path" msgstr "Ruta de Categoría" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "IPN del padre" msgid "Part IPN" msgstr "IPN de la parte" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Precio mínimo" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "Esta opción debe ser seleccionada" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "Esta opción debe ser seleccionada" msgid "Category" msgstr "Categoría" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Ubicación Predeterminada" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Inventario Total" @@ -6010,7 +6023,8 @@ msgstr "Categorías de parte" msgid "Default location for parts in this category" msgstr "Ubicación predeterminada para partes de esta categoría" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "Las plantillas de prueba sólo pueden ser creadas para partes rastreable msgid "Test with this name already exists for this part" msgstr "Ya existe una prueba con este nombre para esta parte" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "Nombre de prueba" @@ -6446,7 +6460,7 @@ msgstr "Introduce la descripción para esta prueba" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Requerido" @@ -6455,7 +6469,7 @@ msgstr "Requerido" msgid "Is this test required to pass?" msgstr "¿Es necesario pasar esta prueba?" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "Requiere valor" @@ -6463,7 +6477,7 @@ msgstr "Requiere valor" msgid "Does this test require a value when adding a test result?" msgstr "¿Esta prueba requiere un valor al agregar un resultado de la prueba?" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "Adjunto obligatorio" @@ -6685,311 +6699,323 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Subcategorías" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "Moneda de compra de ítem de stock" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "Parte original" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "Seleccione la parte original a duplicar" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "Copiar Imagen" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "Copiar imagen desde la parte original" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "Copiar BOM" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "Copiar la factura de materiales de la parte original" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "Copiar Parámetros" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "Copiar datos del parámetro de la parte original" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "Copiar Notas" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "Cantidad Inicial de Stock" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "Seleccione proveedor (o déjelo en blanco para saltar)" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleccionar fabricante (o dejar en blanco para saltar)" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "Número de parte del fabricante" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "La empresa seleccionada no es un proveedor válido" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "La empresa seleccionada no es un fabricante válido" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +msgid "External Stock" +msgstr "" + +#: part/serializers.py:806 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:808 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Duplicar Parte" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "Stock Inicial" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "Crear Parte con cantidad inicial de stock" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "Información del proveedor" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "Añadir información inicial del proveedor para esta parte" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "Copiar Parámetros de Categoría" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "Copiar plantillas de parámetro de la categoría de partes seleccionada" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "Imagen Existente" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "El archivo de imagen no existe" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "Generar informe" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "Actualizar partes" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "Anular el valor calculado para precio mínimo" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "Precio mínimo de moneda" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "Precio máximo de moneda" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "Actualizar" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "El precio mínimo no debe ser mayor que el precio máximo" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "El precio máximo no debe ser inferior al precio mínimo" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "Seleccionar parte de la que copiar BOM" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "Eliminar Datos Existentes" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "Eliminar artículos BOM existentes antes de copiar" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "Incluye Heredado" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "Incluye artículos BOM que son heredados de partes con plantillas" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "Omitir filas no válidas" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "Activar esta opción para omitir filas inválidas" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "Copiar partes sustitutas" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "Limpiar BOM Existente" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "Varios resultados encontrados" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "No se encontraron partes coincidentes" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "La parte no está designada como componente" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "Cantidad no proporcionada" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "Cantidad no válida" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "Se requiere al menos un artículo BOM" @@ -7221,7 +7247,7 @@ msgid "Validate BOM" msgstr "Validar BOM" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "Añadir artículo al BOM" @@ -7405,7 +7431,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "Puede construir" @@ -7435,23 +7461,23 @@ msgstr "" #: part/templates/part/part_base.html:461 msgid "Link Barcode to Part" -msgstr "" +msgstr "Vincular código de barras a parte" #: part/templates/part/part_base.html:512 msgid "Calculate" -msgstr "" +msgstr "Calcular" #: part/templates/part/part_base.html:529 msgid "Remove associated image from this part" -msgstr "" +msgstr "Eliminar imagen asociada de esta parte" #: part/templates/part/part_base.html:580 msgid "No matching images found" -msgstr "" +msgstr "No se encontraron imágenes coincidentes" #: part/templates/part/part_base.html:676 msgid "Hide Part Details" -msgstr "" +msgstr "Ocultar Detalles de la Parte" #: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:76 #: part/templates/part/prices.html:227 templates/js/translated/pricing.js:485 @@ -8784,7 +8810,7 @@ msgstr "Seleccione una parte del proveedor correspondiente para este artículo d msgid "Where is this stock item located?" msgstr "¿Dónde se encuentra este artículo de stock?" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "Empaquetar este artículo de stock se almacena en" @@ -8796,7 +8822,7 @@ msgstr "¿Está este artículo instalado en otro artículo?" msgid "Serial number for this item" msgstr "Número de serie para este artículo" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "Código de lote para este artículo de stock" @@ -8905,7 +8931,7 @@ msgstr "El artículo de stock está en producción" msgid "Serialized stock cannot be merged" msgstr "Stock serializado no puede ser combinado" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "Artículos de Stock Duplicados" @@ -8986,7 +9012,7 @@ msgstr "La cantidad no debe exceder la cantidad disponible de stock ({q})" msgid "Enter serial numbers for new items" msgstr "Introduzca números de serie para nuevos artículos" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "Ubicación de stock de destino" @@ -9059,77 +9085,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Sub-ubicación" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "La parte debe ser vendible" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "El artículo está asignado a una orden de venta" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "El artículo está asignado a una orden de creación" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "Cliente para asignar artículos de stock" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "La empresa seleccionada no es un cliente" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "Notas de asignación de stock" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "Debe proporcionarse una lista de artículos de stock" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "Notas de fusión de stock" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "Permitir proveedores no coincidentes" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "Permitir fusionar artículos de stock con diferentes partes de proveedor" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "Permitir estado no coincidente" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "Permitir fusionar artículos de stock con diferentes códigos de estado" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "Debe proporcionar al menos dos artículos de stock" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "Valor de clave primaria de Stock" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "Notas de transacción de stock" @@ -10662,7 +10689,7 @@ msgid "The following parts are low on required stock" msgstr "Las siguientes partes están bajas en stock requerido" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "Cantidad requerida" @@ -10676,7 +10703,7 @@ msgid "Click on the following link to view this part" msgstr "Haga clic en el siguiente enlace para ver esta parte" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "Cantidad Mínima" @@ -11051,62 +11078,66 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +msgid "External stock" +msgstr "" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11391,7 +11422,7 @@ msgstr "" #: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 #: templates/js/translated/stock.js:1946 templates/js/translated/stock.js:2674 msgid "Select" -msgstr "" +msgstr "Seleccionar" #: templates/js/translated/build.js:2129 msgid "Build order is overdue" @@ -11399,7 +11430,7 @@ msgstr "" #: templates/js/translated/build.js:2175 msgid "Progress" -msgstr "" +msgstr "Progreso" #: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3006 msgid "No user information" @@ -11449,29 +11480,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -11504,19 +11535,19 @@ msgstr "" #: templates/js/translated/company.js:360 msgid "Delete Supplier Parts" -msgstr "" +msgstr "Eliminar Partes de Proveedor" #: templates/js/translated/company.js:465 msgid "Add new Company" -msgstr "" +msgstr "Añadir nueva Empresa" #: templates/js/translated/company.js:536 msgid "Parts Supplied" -msgstr "" +msgstr "Partes Suministradas" #: templates/js/translated/company.js:545 msgid "Parts Manufactured" -msgstr "" +msgstr "Partes Fabricadas" #: templates/js/translated/company.js:560 msgid "No company information found" @@ -11524,7 +11555,7 @@ msgstr "" #: templates/js/translated/company.js:609 msgid "Create New Contact" -msgstr "" +msgstr "Crear Nuevo Contacto" #: templates/js/translated/company.js:625 #: templates/js/translated/company.js:748 @@ -11558,137 +11589,137 @@ msgstr "" #: templates/js/translated/company.js:752 msgid "Delete Contact" -msgstr "" +msgstr "Eliminar Contacto" #: templates/js/translated/company.js:849 msgid "Create New Address" -msgstr "" +msgstr "Crear Nueva Dirección" #: templates/js/translated/company.js:864 #: templates/js/translated/company.js:1025 msgid "Edit Address" -msgstr "" +msgstr "Editar Dirección" #: templates/js/translated/company.js:899 msgid "All selected addresses will be deleted" -msgstr "" +msgstr "Todos las direcciones seleccionadas serán eliminadas" #: templates/js/translated/company.js:913 msgid "Delete Addresses" -msgstr "" +msgstr "Eliminar Direcciones" #: templates/js/translated/company.js:940 msgid "No addresses found" -msgstr "" +msgstr "No se encontraron direcciones" #: templates/js/translated/company.js:979 msgid "Postal city" -msgstr "" +msgstr "Ciudad postal" #: templates/js/translated/company.js:985 msgid "State/province" -msgstr "" +msgstr "Estado/provincia" #: templates/js/translated/company.js:997 msgid "Courier notes" -msgstr "" +msgstr "Notas del mensajero" #: templates/js/translated/company.js:1003 msgid "Internal notes" -msgstr "" +msgstr "Notas internas" #: templates/js/translated/company.js:1029 msgid "Delete Address" -msgstr "" +msgstr "Eliminar Dirección" #: templates/js/translated/company.js:1102 msgid "All selected manufacturer parts will be deleted" -msgstr "" +msgstr "Se eliminarán todas las partes del fabricante seleccionadas" #: templates/js/translated/company.js:1117 msgid "Delete Manufacturer Parts" -msgstr "" +msgstr "Eliminar Partes del Fabricante" #: templates/js/translated/company.js:1151 msgid "All selected parameters will be deleted" -msgstr "" +msgstr "Todos los parámetros seleccionados serán eliminados" #: templates/js/translated/company.js:1165 msgid "Delete Parameters" -msgstr "" +msgstr "Eliminar Parámetros" #: templates/js/translated/company.js:1181 #: templates/js/translated/company.js:1469 templates/js/translated/part.js:2244 msgid "Order parts" -msgstr "" +msgstr "Ordenar Partes" #: templates/js/translated/company.js:1198 msgid "Delete manufacturer parts" -msgstr "" +msgstr "Eliminar partes del fabricante" #: templates/js/translated/company.js:1230 msgid "Manufacturer part actions" -msgstr "" +msgstr "Acciones para partes del fabricante" #: templates/js/translated/company.js:1249 msgid "No manufacturer parts found" -msgstr "" +msgstr "No se encontraron partes del fabricante" #: templates/js/translated/company.js:1269 #: templates/js/translated/company.js:1557 templates/js/translated/part.js:798 #: templates/js/translated/part.js:1210 msgid "Template part" -msgstr "" +msgstr "Plantilla de parte" #: templates/js/translated/company.js:1273 #: templates/js/translated/company.js:1561 templates/js/translated/part.js:802 #: templates/js/translated/part.js:1214 msgid "Assembled part" -msgstr "" +msgstr "Parte ensamblada" #: templates/js/translated/company.js:1393 templates/js/translated/part.js:1464 msgid "No parameters found" -msgstr "" +msgstr "No se encontraron parámetros" #: templates/js/translated/company.js:1428 templates/js/translated/part.js:1527 msgid "Edit parameter" -msgstr "" +msgstr "Editar parámetro" #: templates/js/translated/company.js:1429 templates/js/translated/part.js:1528 msgid "Delete parameter" -msgstr "" +msgstr "Eliminar parámetro" #: templates/js/translated/company.js:1446 templates/js/translated/part.js:1433 msgid "Edit Parameter" -msgstr "" +msgstr "Editar Parámetro" #: templates/js/translated/company.js:1455 templates/js/translated/part.js:1549 msgid "Delete Parameter" -msgstr "" +msgstr "Eliminar Parámetro" #: templates/js/translated/company.js:1486 msgid "Delete supplier parts" -msgstr "" +msgstr "Eliminar piezas del proveedor" #: templates/js/translated/company.js:1536 msgid "No supplier parts found" -msgstr "" +msgstr "No se encontraron partes de proveedor" #: templates/js/translated/company.js:1654 msgid "Base Units" -msgstr "" +msgstr "Unidades base" #: templates/js/translated/company.js:1684 msgid "Availability" -msgstr "" +msgstr "Disponibilidad" #: templates/js/translated/company.js:1715 msgid "Edit supplier part" -msgstr "" +msgstr "Editar parte del proveedor" #: templates/js/translated/company.js:1716 msgid "Delete supplier part" -msgstr "" +msgstr "Eliminar parte del proveedor" #: templates/js/translated/company.js:1769 #: templates/js/translated/pricing.js:694 @@ -11706,7 +11737,7 @@ msgstr "" #: templates/js/translated/company.js:1823 msgid "Last updated" -msgstr "" +msgstr "Última actualización" #: templates/js/translated/company.js:1830 msgid "Edit price break" @@ -11719,53 +11750,53 @@ msgstr "" #: templates/js/translated/filters.js:186 #: templates/js/translated/filters.js:672 msgid "true" -msgstr "" +msgstr "verdadero" #: templates/js/translated/filters.js:190 #: templates/js/translated/filters.js:673 msgid "false" -msgstr "" +msgstr "falso" #: templates/js/translated/filters.js:214 msgid "Select filter" -msgstr "" +msgstr "Seleccionar filtro" #: templates/js/translated/filters.js:437 msgid "Print Labels" -msgstr "" +msgstr "Imprimir Etiquetas" #: templates/js/translated/filters.js:441 msgid "Print Reports" -msgstr "" +msgstr "Imprimir reportes" #: templates/js/translated/filters.js:453 msgid "Download table data" -msgstr "" +msgstr "Descargar tabla de datos" #: templates/js/translated/filters.js:460 msgid "Reload table data" -msgstr "" +msgstr "Recargar tabla de datos" #: templates/js/translated/filters.js:469 msgid "Add new filter" -msgstr "" +msgstr "Añadir un nuevo filtro" #: templates/js/translated/filters.js:477 msgid "Clear all filters" -msgstr "" +msgstr "Limpiar todos los filtros" #: templates/js/translated/filters.js:582 msgid "Create filter" -msgstr "" +msgstr "Crear filtro" #: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 #: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 msgid "Action Prohibited" -msgstr "" +msgstr "Acción Prohibida" #: templates/js/translated/forms.js:380 msgid "Create operation not allowed" -msgstr "" +msgstr "Operación de creación no permitida" #: templates/js/translated/forms.js:395 msgid "Update operation not allowed" @@ -11991,48 +12022,48 @@ msgstr "" #: templates/js/translated/order.js:255 msgid "Edit Line" -msgstr "" +msgstr "Editar Línea" #: templates/js/translated/order.js:268 msgid "Delete Line" -msgstr "" +msgstr "Eliminar Línea" #: templates/js/translated/order.js:281 #: templates/js/translated/purchase_order.js:1991 msgid "No line items found" -msgstr "" +msgstr "No se encontraron artículos de línea" #: templates/js/translated/order.js:369 msgid "Duplicate line" -msgstr "" +msgstr "Duplicar línea" #: templates/js/translated/order.js:370 msgid "Edit line" -msgstr "" +msgstr "Editar línea" #: templates/js/translated/order.js:374 msgid "Delete line" -msgstr "" +msgstr "Eliminar línea" #: templates/js/translated/part.js:90 msgid "Part Attributes" -msgstr "" +msgstr "Atributos de Parte" #: templates/js/translated/part.js:94 msgid "Part Creation Options" -msgstr "" +msgstr "Opciones de Creación de Parte" #: templates/js/translated/part.js:98 msgid "Part Duplication Options" -msgstr "" +msgstr "Opciones de Duplicación de Parte" #: templates/js/translated/part.js:121 msgid "Add Part Category" -msgstr "" +msgstr "Añadir Categoría de Parte" #: templates/js/translated/part.js:308 msgid "Parent part category" -msgstr "" +msgstr "Categoría principal de parte" #: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 msgid "Icon (optional) - Explore all available icons on" @@ -12040,59 +12071,59 @@ msgstr "" #: templates/js/translated/part.js:352 msgid "Create Part Category" -msgstr "" +msgstr "Crear Categoría de Parte" #: templates/js/translated/part.js:355 msgid "Create new category after this one" -msgstr "" +msgstr "Crear nueva categoría después de esta" #: templates/js/translated/part.js:356 msgid "Part category created" -msgstr "" +msgstr "Categoría de parte creada" #: templates/js/translated/part.js:370 msgid "Edit Part Category" -msgstr "" +msgstr "Editar Categoría de Parte" #: templates/js/translated/part.js:383 msgid "Are you sure you want to delete this part category?" -msgstr "" +msgstr "¿Estás seguro de que deseas eliminar esta categoría?" #: templates/js/translated/part.js:388 msgid "Move to parent category" -msgstr "" +msgstr "Mover a la categoría principal" #: templates/js/translated/part.js:397 msgid "Delete Part Category" -msgstr "" +msgstr "Eliminar Categoría de Parte" #: templates/js/translated/part.js:401 msgid "Action for parts in this category" -msgstr "" +msgstr "Acción para partes en esta categoría" #: templates/js/translated/part.js:406 msgid "Action for child categories" -msgstr "" +msgstr "Acción para categorías secundarias" #: templates/js/translated/part.js:430 msgid "Create Part" -msgstr "" +msgstr "Crear Parte" #: templates/js/translated/part.js:432 msgid "Create another part after this one" -msgstr "" +msgstr "Crear otra parte después de esta" #: templates/js/translated/part.js:433 msgid "Part created successfully" -msgstr "" +msgstr "Parte creada exitosamente" #: templates/js/translated/part.js:461 msgid "Edit Part" -msgstr "" +msgstr "Editar Parte" #: templates/js/translated/part.js:463 msgid "Part edited" -msgstr "" +msgstr "Parte editada" #: templates/js/translated/part.js:474 msgid "Create Part Variant" @@ -12161,11 +12192,11 @@ msgstr "" #: templates/js/translated/part.js:685 #: templates/js/translated/table_filters.js:747 msgid "Low stock" -msgstr "" +msgstr "Stock bajo" #: templates/js/translated/part.js:688 msgid "No stock available" -msgstr "" +msgstr "No hay stock disponible" #: templates/js/translated/part.js:748 msgid "Demand" @@ -12282,95 +12313,95 @@ msgstr "" #: templates/js/translated/part.js:2288 msgid "parts" -msgstr "" +msgstr "partes" #: templates/js/translated/part.js:2384 msgid "No category" -msgstr "" +msgstr "Sin categoría" #: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 #: templates/js/translated/stock.js:2633 msgid "Display as list" -msgstr "" +msgstr "Mostrar como lista" #: templates/js/translated/part.js:2547 msgid "Display as grid" -msgstr "" +msgstr "Mostrar como cuadrícula" #: templates/js/translated/part.js:2645 msgid "No subcategories found" -msgstr "" +msgstr "No se encontraron subcategorías" #: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2653 msgid "Display as tree" -msgstr "" +msgstr "Mostrar como árbol" #: templates/js/translated/part.js:2761 msgid "Load Subcategories" -msgstr "" +msgstr "Cargar subcategorías" #: templates/js/translated/part.js:2777 msgid "Subscribed category" -msgstr "" +msgstr "Categoría suscrita" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" -msgstr "" +msgstr "No hay plantillas de prueba que coincidan con la consulta" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" -msgstr "" +msgstr "resultados" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" -msgstr "" +msgstr "Editar resultado de prueba" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" -msgstr "" +msgstr "Eliminar resultado de prueba" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" -msgstr "" +msgstr "Esta prueba está definida para una parte principal" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" -msgstr "" +msgstr "Editar plantilla de resultado de prueba" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" -msgstr "" +msgstr "Eliminar plantilla de resultados de prueba" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" -msgstr "" +msgstr "Sin fecha especificada" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" -msgstr "" +msgstr "Fecha especificada es en el pasado" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" -msgstr "" +msgstr "Especulativo" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" -msgstr "" +msgstr "No hay información de planificación disponible para esta parte" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" -msgstr "" +msgstr "Cantidad de Stock Programadas" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" -msgstr "" +msgstr "Cantidad Máxima" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -12392,35 +12423,35 @@ msgstr "" #: templates/js/translated/plugin.js:117 templates/js/translated/plugin.js:186 msgid "Disable Plugin" -msgstr "" +msgstr "Desactivar Plugin" #: templates/js/translated/plugin.js:119 templates/js/translated/plugin.js:186 msgid "Enable Plugin" -msgstr "" +msgstr "Activar Plugin" #: templates/js/translated/plugin.js:158 msgid "The Plugin was installed" -msgstr "" +msgstr "El plugin fue instalado" #: templates/js/translated/plugin.js:177 msgid "Are you sure you want to enable this plugin?" -msgstr "" +msgstr "¿Estás seguro de que deseas activar este plugin?" #: templates/js/translated/plugin.js:181 msgid "Are you sure you want to disable this plugin?" -msgstr "" +msgstr "¿Estás seguro de que deseas desactivar este plugin?" #: templates/js/translated/plugin.js:189 msgid "Enable" -msgstr "" +msgstr "Activar" #: templates/js/translated/plugin.js:189 msgid "Disable" -msgstr "" +msgstr "Desactivar" #: templates/js/translated/plugin.js:203 msgid "Plugin updated" -msgstr "" +msgstr "Plugin actualizado" #: templates/js/translated/pricing.js:159 msgid "Error fetching currency data" @@ -13127,7 +13158,7 @@ msgstr "" #: templates/js/translated/stock.js:1025 msgid "Move" -msgstr "" +msgstr "Mover" #: templates/js/translated/stock.js:1031 msgid "Count Stock" diff --git a/InvenTree/locale/es_MX/LC_MESSAGES/django.po b/InvenTree/locale/es_MX/LC_MESSAGES/django.po index a6f744f447..7d787a6234 100644 --- a/InvenTree/locale/es_MX/LC_MESSAGES/django.po +++ b/InvenTree/locale/es_MX/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 06:44+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -67,9 +67,9 @@ msgstr "" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -524,7 +524,7 @@ msgstr "" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -679,7 +679,7 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "" @@ -961,7 +961,7 @@ msgid "Tracked" msgstr "" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1045,11 +1045,11 @@ msgstr "" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1148,7 +1148,7 @@ msgid "Build status code" msgstr "" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" @@ -1243,48 +1243,48 @@ msgstr "" msgid "Project code for this build order" msgstr "" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1311,7 +1311,7 @@ msgstr "" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1331,38 +1331,38 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1377,19 +1377,19 @@ msgstr "" msgid "Stock Item" msgstr "" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "" @@ -1453,9 +1453,9 @@ msgid "A list of build outputs must be provided" msgstr "" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1495,7 +1495,7 @@ msgstr "" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1603,7 +1603,7 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "" @@ -1660,44 +1660,45 @@ msgstr "" msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1991,27 +1992,31 @@ msgstr "" msgid "Order Parts" msgstr "" -#: build/templates/build/detail.html:210 -msgid "Incomplete Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:214 -msgid "Create new build output" +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" msgstr "" #: build/templates/build/detail.html:215 +msgid "Incomplete Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:219 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2027,15 +2032,15 @@ msgstr "" msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2437,7 +2442,7 @@ msgid "Parts are templates by default" msgstr "" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3496,7 +3501,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3973,7 +3978,7 @@ msgstr "" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3988,7 +3993,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4060,7 +4065,7 @@ msgstr "" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4077,7 +4082,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "" @@ -4113,7 +4118,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4158,7 +4163,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "" @@ -4219,7 +4224,7 @@ msgstr "" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4430,8 +4435,9 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "" @@ -4529,7 +4535,7 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4578,10 +4584,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4641,7 +4649,7 @@ msgid "Label template file" msgstr "" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "" @@ -5734,7 +5742,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -5862,10 +5870,10 @@ msgstr "" msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5890,13 +5898,13 @@ msgstr "" msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5975,7 +5983,7 @@ msgid "This option must be selected" msgstr "" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5983,12 +5991,17 @@ msgstr "" msgid "Category" msgstr "" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6011,7 +6024,8 @@ msgstr "" msgid "Default location for parts in this category" msgstr "" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6419,7 +6433,7 @@ msgstr "" msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" @@ -6447,7 +6461,7 @@ msgstr "" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" @@ -6456,7 +6470,7 @@ msgstr "" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" @@ -6464,7 +6478,7 @@ msgstr "" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6686,311 +6700,323 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +msgid "External Stock" +msgstr "" + +#: part/serializers.py:806 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:808 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7222,7 +7248,7 @@ msgid "Validate BOM" msgstr "" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" @@ -7406,7 +7432,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -8785,7 +8811,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -8797,7 +8823,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -8906,7 +8932,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -8987,7 +9013,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9060,77 +9086,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -10663,7 +10690,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -10677,7 +10704,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" @@ -11052,62 +11079,66 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +msgid "External stock" +msgstr "" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11450,29 +11481,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12314,64 +12345,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" diff --git a/InvenTree/locale/fa/LC_MESSAGES/django.po b/InvenTree/locale/fa/LC_MESSAGES/django.po index 8e5a5912d4..db05fa6d7c 100644 --- a/InvenTree/locale/fa/LC_MESSAGES/django.po +++ b/InvenTree/locale/fa/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2024-02-28 07:23\n" "Last-Translator: \n" "Language-Team: Persian\n" @@ -66,9 +66,9 @@ msgstr "تاریخ را وارد کنید" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "آدرس فایل تصویری از راه دور" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" @@ -1242,48 +1242,48 @@ msgstr "" msgid "Project code for this build order" msgstr "" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "" msgid "Stock Item" msgstr "" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "" @@ -1659,44 +1659,45 @@ msgstr "" msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1990,27 +1991,31 @@ msgstr "" msgid "Order Parts" msgstr "" -#: build/templates/build/detail.html:210 -msgid "Incomplete Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:214 -msgid "Create new build output" +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" msgstr "" #: build/templates/build/detail.html:215 +msgid "Incomplete Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:219 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "" msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "" @@ -4218,7 +4223,7 @@ msgstr "" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -5861,10 +5869,10 @@ msgstr "" msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "" msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "" msgid "Category" msgstr "" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,7 +6023,8 @@ msgstr "" msgid "Default location for parts in this category" msgstr "" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "" msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" @@ -6446,7 +6460,7 @@ msgstr "" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" @@ -6455,7 +6469,7 @@ msgstr "" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" @@ -6463,7 +6477,7 @@ msgstr "" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6685,311 +6699,323 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +msgid "External Stock" +msgstr "" + +#: part/serializers.py:806 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:808 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7221,7 +7247,7 @@ msgid "Validate BOM" msgstr "" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" @@ -7405,7 +7431,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -8784,7 +8810,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -8796,7 +8822,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -8905,7 +8931,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -8986,7 +9012,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9059,77 +9085,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -10662,7 +10689,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -10676,7 +10703,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" @@ -11051,62 +11078,66 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +msgid "External stock" +msgstr "" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11480,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12344,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14083,3 @@ msgstr "" #: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/InvenTree/locale/fi/LC_MESSAGES/django.po b/InvenTree/locale/fi/LC_MESSAGES/django.po index 99902bc110..1e1a2acb2f 100644 --- a/InvenTree/locale/fi/LC_MESSAGES/django.po +++ b/InvenTree/locale/fi/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2024-02-28 07:23\n" "Last-Translator: \n" "Language-Team: Finnish\n" @@ -66,9 +66,9 @@ msgstr "Anna päivämäärä" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "Nimi" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "Kuvatiedoston URL" msgid "Downloading images from remote URL is not enabled" msgstr "Kuvien lataaminen ei ole käytössä" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" @@ -1242,48 +1242,48 @@ msgstr "" msgid "Project code for this build order" msgstr "" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "" msgid "Quantity" msgstr "Määrä" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "" msgid "Stock Item" msgstr "Varastotuote" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "" @@ -1659,44 +1659,45 @@ msgstr "" msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1990,27 +1991,31 @@ msgstr "" msgid "Order Parts" msgstr "" -#: build/templates/build/detail.html:210 -msgid "Incomplete Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:214 -msgid "Create new build output" +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" msgstr "" #: build/templates/build/detail.html:215 +msgid "Incomplete Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:219 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "" msgid "Attachments" msgstr "Liitteet" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "Valitse valmistaja" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "Toimittaja" msgid "Select supplier" msgstr "Valitse toimittaja" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "Toimittajan varastonimike" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "" @@ -4218,7 +4223,7 @@ msgstr "" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "Käytössä" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "Toiminnot" @@ -5861,10 +5869,10 @@ msgstr "" msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "" msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "" msgid "Category" msgstr "Kategoria" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,7 +6023,8 @@ msgstr "" msgid "Default location for parts in this category" msgstr "" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "" msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" @@ -6446,7 +6460,7 @@ msgstr "" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" @@ -6455,7 +6469,7 @@ msgstr "" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" @@ -6463,7 +6477,7 @@ msgstr "" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6685,311 +6699,325 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "Valmistajan osanumero" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +#, fuzzy +#| msgid "External Link" +msgid "External Stock" +msgstr "Ulkoinen linkki" + +#: part/serializers.py:806 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:808 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "Luo raportti" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7221,7 +7249,7 @@ msgid "Validate BOM" msgstr "" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" @@ -7405,7 +7433,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -8784,7 +8812,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -8796,7 +8824,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -8905,7 +8933,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -8986,7 +9014,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9059,77 +9087,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -10662,7 +10691,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -10676,7 +10705,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" @@ -11051,62 +11080,68 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#, fuzzy +#| msgid "External Link" +msgid "External stock" +msgstr "Ulkoinen linkki" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11484,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12348,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14087,3 @@ msgstr "Oikeus muokata kohteita" #: users/models.py:413 msgid "Permission to delete items" msgstr "Oikeus poistaa kohteita" - diff --git a/InvenTree/locale/fr/LC_MESSAGES/django.po b/InvenTree/locale/fr/LC_MESSAGES/django.po index 5fd400cca7..9276718982 100644 --- a/InvenTree/locale/fr/LC_MESSAGES/django.po +++ b/InvenTree/locale/fr/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2024-02-28 07:23\n" "Last-Translator: \n" "Language-Team: French\n" @@ -66,9 +66,9 @@ msgstr "Entrer la date" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "Nom" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "URL du fichier image distant" msgid "Downloading images from remote URL is not enabled" msgstr "Le téléchargement des images depuis une URL distante n'est pas activé" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "Échec de la vérification du processus d'arrière-plan" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "Suivi" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "BuildOrder associé a cette fabrication" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "Code de statut de construction" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Code de lot" @@ -1242,48 +1242,48 @@ msgstr "Code du projet" msgid "Project code for this build order" msgstr "Code de projet pour cet ordre de construction" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "La commande de construction {build} a été effectuée" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "Une commande de construction a été effectuée" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "Pas d'ordre de production défini" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "L'ordre de production a déjà été réalisé" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "L'ordre de production de correspond pas à l'ordre de commande" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "La quantité doit être supérieure à zéro" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "La quantité ne peut pas être supérieure à la quantité de sortie" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "Création de l'objet" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "Création de l'objet" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "Création de l'objet" msgid "Quantity" msgstr "Quantité" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "Quantité requise pour la commande de construction" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "L'élément de construction doit spécifier une sortie de construction, la pièce maîtresse étant marquée comme objet traçable" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "La quantité allouée ({q}) ne doit pas excéder la quantité disponible ({a})" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "L'article de stock est suralloué" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "La quantité allouée doit être supérieure à zéro" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "La quantité doit être de 1 pour stock sérialisé" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "L'article de stock sélectionné ne correspond pas à la ligne BOM" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "L'article de stock sélectionné ne correspond pas à la ligne BOM" msgid "Stock Item" msgstr "Article en stock" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "Stock d'origine de l'article" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "Quantité de stock à allouer à la construction" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "Installer dans" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "Stock de destination de l'article" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "Une liste d'ordre de production doit être fourni" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "Emplacement des ordres de production achevés" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "Élément de la ligne de construction" msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part doit pointer sur la même pièce que l'ordre de construction" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "L'article doit être en stock" @@ -1659,44 +1659,45 @@ msgstr "Objets Optionnels" msgid "Allocate optional BOM items to build order" msgstr "Affecter des éléments de nomenclature facultatifs à l'ordre de fabrication" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "Article du BOM" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "En Commande" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "Stock requis pour la commande de construction" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "Ordre de commande en retard" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "L'ordre de commande {bo} est maintenant en retard" @@ -1990,27 +1991,31 @@ msgstr "Commander les pièces requises" msgid "Order Parts" msgstr "Commander des pièces" -#: build/templates/build/detail.html:210 +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" +msgstr "" + +#: build/templates/build/detail.html:215 msgid "Incomplete Build Outputs" msgstr "Sorties de construction incomplètes" -#: build/templates/build/detail.html:214 +#: build/templates/build/detail.html:219 msgid "Create new build output" msgstr "Créer une nouvelle sortie de construction" -#: build/templates/build/detail.html:215 +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "Nouvelle sortie de construction" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "Stock Consommé" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "Sorties de Construction terminées" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "Sorties de Construction terminées" msgid "Attachments" msgstr "Pieces jointes" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Notes de construction" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "Les pièces sont des templates par défaut" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "Sélectionner un fabricant" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "La pièce du fabricant liée doit faire référence à la même pièce d #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "Fournisseur" msgid "Select supplier" msgstr "Sélectionner un fournisseur" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "Unité de gestion des stocks des fournisseurs" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "Frais minimums (par exemple frais de stock)" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "Disponibilité mise à jour" msgid "Date of last update of availability data" msgstr "Date de dernière mise à jour des données de disponibilité" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "Devise par défaut utilisée pour ce fournisseur" @@ -4218,7 +4223,7 @@ msgstr "Supprimer image" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "Aucune information sur le fabricant disponible" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "Fournisseurs" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "Aucune information de fournisseur disponible" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "Fichier de modèle d'étiquette" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "Activé" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "Expéditions en attente" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -5861,10 +5869,10 @@ msgstr "" msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "" msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Prix Minimum" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "" msgid "Category" msgstr "Catégorie" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,7 +6023,8 @@ msgstr "Catégories de composants" msgid "Default location for parts in this category" msgstr "" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "" msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "Nom de test" @@ -6446,7 +6460,7 @@ msgstr "" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Requis" @@ -6455,7 +6469,7 @@ msgstr "Requis" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "Valeur requise" @@ -6463,7 +6477,7 @@ msgstr "Valeur requise" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6685,311 +6699,329 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "Devise d'achat de l'item" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "Copier l'image" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "Copier les paramètres" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +#, fuzzy +#| msgid "External Link" +msgid "External Stock" +msgstr "Lien Externe" + +#: part/serializers.py:806 +#, fuzzy +#| msgid "Deallocate Stock" +msgid "Unallocated Stock" +msgstr "Désallouer le Stock" + +#: part/serializers.py:808 +#, fuzzy +#| msgid "Part Stocktake" +msgid "Variant Stock" +msgstr "Inventaire des pièces" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7221,7 +7253,7 @@ msgid "Validate BOM" msgstr "" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" @@ -7405,7 +7437,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -8784,7 +8816,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -8796,7 +8828,7 @@ msgstr "" msgid "Serial number for this item" msgstr "Numéro de série pour cet article" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -8905,7 +8937,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -8986,7 +9018,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "Entrez les numéros de série pour les nouveaux articles" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9059,77 +9091,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -10662,7 +10695,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "Quantité requise" @@ -10676,7 +10709,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" @@ -11051,62 +11084,68 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#, fuzzy +#| msgid "External Link" +msgid "External stock" +msgstr "Lien Externe" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11488,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12352,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14091,3 @@ msgstr "Droit de modifier des élément" #: users/models.py:413 msgid "Permission to delete items" msgstr "Droit de supprimer des éléments" - diff --git a/InvenTree/locale/he/LC_MESSAGES/django.po b/InvenTree/locale/he/LC_MESSAGES/django.po index 4de37ba244..5ee21f0b8c 100644 --- a/InvenTree/locale/he/LC_MESSAGES/django.po +++ b/InvenTree/locale/he/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2024-02-28 07:23\n" "Last-Translator: \n" "Language-Team: Hebrew\n" @@ -66,9 +66,9 @@ msgstr "הזן תאריך סיום" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "שם" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" @@ -1242,48 +1242,48 @@ msgstr "" msgid "Project code for this build order" msgstr "" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "" msgid "Quantity" msgstr "כמות" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "" msgid "Stock Item" msgstr "" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "" @@ -1659,44 +1659,45 @@ msgstr "" msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1990,27 +1991,31 @@ msgstr "" msgid "Order Parts" msgstr "" -#: build/templates/build/detail.html:210 -msgid "Incomplete Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:214 -msgid "Create new build output" +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" msgstr "" #: build/templates/build/detail.html:215 +msgid "Incomplete Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:219 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "" msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "" @@ -4218,7 +4223,7 @@ msgstr "" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -5861,10 +5869,10 @@ msgstr "" msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "" msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "" msgid "Category" msgstr "" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,7 +6023,8 @@ msgstr "" msgid "Default location for parts in this category" msgstr "" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "" msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" @@ -6446,7 +6460,7 @@ msgstr "" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" @@ -6455,7 +6469,7 @@ msgstr "" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" @@ -6463,7 +6477,7 @@ msgstr "" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6685,311 +6699,323 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +msgid "External Stock" +msgstr "" + +#: part/serializers.py:806 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:808 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7221,7 +7247,7 @@ msgid "Validate BOM" msgstr "" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" @@ -7405,7 +7431,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -8784,7 +8810,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -8796,7 +8822,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -8905,7 +8931,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -8986,7 +9012,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9059,77 +9085,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -10662,7 +10689,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -10676,7 +10703,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" @@ -11051,62 +11078,66 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +msgid "External stock" +msgstr "" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11480,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12344,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14083,3 @@ msgstr "" #: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/InvenTree/locale/hi/LC_MESSAGES/django.po b/InvenTree/locale/hi/LC_MESSAGES/django.po index 272618c1c6..fa9044a7f6 100644 --- a/InvenTree/locale/hi/LC_MESSAGES/django.po +++ b/InvenTree/locale/hi/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2024-02-28 07:23\n" "Last-Translator: \n" "Language-Team: Hindi\n" @@ -66,9 +66,9 @@ msgstr "तारीख दर्ज करें" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" @@ -1242,48 +1242,48 @@ msgstr "" msgid "Project code for this build order" msgstr "" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "" msgid "Stock Item" msgstr "" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "" @@ -1659,44 +1659,45 @@ msgstr "" msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1990,27 +1991,31 @@ msgstr "" msgid "Order Parts" msgstr "" -#: build/templates/build/detail.html:210 -msgid "Incomplete Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:214 -msgid "Create new build output" +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" msgstr "" #: build/templates/build/detail.html:215 +msgid "Incomplete Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:219 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "" msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "" @@ -4218,7 +4223,7 @@ msgstr "" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -5861,10 +5869,10 @@ msgstr "" msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "" msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "" msgid "Category" msgstr "" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,7 +6023,8 @@ msgstr "" msgid "Default location for parts in this category" msgstr "" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "" msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" @@ -6446,7 +6460,7 @@ msgstr "" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" @@ -6455,7 +6469,7 @@ msgstr "" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" @@ -6463,7 +6477,7 @@ msgstr "" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6685,311 +6699,323 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +msgid "External Stock" +msgstr "" + +#: part/serializers.py:806 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:808 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7221,7 +7247,7 @@ msgid "Validate BOM" msgstr "" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" @@ -7405,7 +7431,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -8784,7 +8810,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -8796,7 +8822,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -8905,7 +8931,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -8986,7 +9012,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9059,77 +9085,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -10662,7 +10689,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -10676,7 +10703,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" @@ -11051,62 +11078,66 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +msgid "External stock" +msgstr "" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11480,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12344,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14083,3 @@ msgstr "" #: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/InvenTree/locale/hu/LC_MESSAGES/django.po b/InvenTree/locale/hu/LC_MESSAGES/django.po index b8fc4d3cfb..7fd610ab1f 100644 --- a/InvenTree/locale/hu/LC_MESSAGES/django.po +++ b/InvenTree/locale/hu/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2024-02-28 07:23\n" "Last-Translator: \n" "Language-Team: Hungarian\n" @@ -66,9 +66,9 @@ msgstr "Dátum megadása" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "Név" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "A távoli kép URL-je" msgid "Downloading images from remote URL is not enabled" msgstr "Képek letöltése távoli URL-ről nem engedélyezett" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "Háttér folyamat ellenőrzés sikertelen" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "Követett" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "Gyártás, amihez ez a gyártás hozzá van rendelve" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "Gyártás státusz kód" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Batch kód" @@ -1242,48 +1242,48 @@ msgstr "Projektszám" msgid "Project code for this build order" msgstr "Projekt kód a gyártáshoz" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "A {build} gyártási utasítás elkészült" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "Gyártási utasítás elkészült" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "Nincs gyártási kimenet megadva" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "Gyártási kimenet már kész" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "Gyártási kimenet nem egyezik a gyártási utasítással" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "Mennyiségnek nullánál többnek kell lennie" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "A mennyiség nem lehet több mint a gyártási mennyiség" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "Gyártás objektum" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "Gyártás objektum" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "Gyártás objektum" msgid "Quantity" msgstr "Mennyiség" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "Gyártáshoz szükséges mennyiség" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Gyártási tételnek meg kell adnia a gyártási kimenetet, mivel a fő darab egyedi követésre kötelezett" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "A lefoglalt mennyiség ({q}) nem lépheti túl a szabad készletet ({a})" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "Készlet túlfoglalva" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "Lefoglalt mennyiségnek nullánál többnek kell lennie" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "Egyedi követésre kötelezett tételeknél a menyiség 1 kell legyen" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "A készlet tétel nem egyezik az alkatrészjegyzékkel" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "A készlet tétel nem egyezik az alkatrészjegyzékkel" msgid "Stock Item" msgstr "Készlet tétel" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "Forrás készlet tétel" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "Készlet mennyiség amit foglaljunk a gyártáshoz" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "Beépítés ebbe" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "Cél készlet tétel" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "A gyártási kimenetek listáját meg kell adni" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "A kész gyártási kimenetek helye" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1512,7 +1512,8 @@ msgstr "Hiányos foglalás elfogadása" #: build/serializers.py:512 msgid "Complete outputs if stock has not been fully allocated" -msgstr "Kimenetek befejezése akkor is ha a készlet nem\n" +msgstr "" +"Kimenetek befejezése akkor is ha a készlet nem\n" "lett teljesen lefoglalva" #: build/serializers.py:592 @@ -1603,7 +1604,7 @@ msgstr "Gyártás sor tétel" msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part ugyanarra az alkatrészre kell mutasson mint a gyártási utasítás" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "A tételnek kell legyen készlete" @@ -1660,44 +1661,45 @@ msgstr "Opcionális tételek" msgid "Allocate optional BOM items to build order" msgstr "Opcionális tételek lefoglalása a gyártáshoz" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "Alkatrészjegyzék tétel" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "Lefoglalt készlet" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "Rendelve" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "Gyártásban" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "Elérhető készlet" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "A gyártási utasításhoz készlet szükséges" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "Késésben lévő gyártás" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "A {bo} gyártás most már késésben van" @@ -1991,27 +1993,31 @@ msgstr "Szükséges alkatrészek rendelése" msgid "Order Parts" msgstr "Alkatrész rendelés" -#: build/templates/build/detail.html:210 +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" +msgstr "" + +#: build/templates/build/detail.html:215 msgid "Incomplete Build Outputs" msgstr "Befejezetlen gyártási kimenetek" -#: build/templates/build/detail.html:214 +#: build/templates/build/detail.html:219 msgid "Create new build output" msgstr "Új gyártási kimenet létrehozása" -#: build/templates/build/detail.html:215 +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "Új gyártási kimenet" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "Felhasznált készlet" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "Befejezett gyártási kimenetek" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2027,15 +2033,15 @@ msgstr "Befejezett gyártási kimenetek" msgid "Attachments" msgstr "Mellékletek" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Gyártási megjegyzések" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "Lefoglalás kész" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "Minden sor rendben lefoglalva" @@ -2437,7 +2443,7 @@ msgid "Parts are templates by default" msgstr "Alkatrészek alapból sablon alkatrészek legyenek" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3496,7 +3502,7 @@ msgstr "" msgid "Price break quantity" msgstr "Ársáv mennyiség" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3973,7 +3979,7 @@ msgstr "Válassz alkatrészt" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3988,7 +3994,7 @@ msgid "Select manufacturer" msgstr "Gyártó kiválasztása" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4060,7 +4066,7 @@ msgstr "Kapcsolódó gyártói alkatrésznek ugyanarra a kiindulási alkatrészr #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4077,7 +4083,7 @@ msgstr "Beszállító" msgid "Select supplier" msgstr "Beszállító kiválasztása" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "Beszállítói cikkszám" @@ -4113,7 +4119,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimális díj (pl. tárolási díj)" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4158,7 +4164,7 @@ msgstr "Elérhetőség frissítve" msgid "Date of last update of availability data" msgstr "Utolsó elérhetőségi adat frissítés" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "Beszállító által használt alapértelmezett pénznem" @@ -4219,7 +4225,7 @@ msgstr "Kép törlése" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4430,8 +4436,9 @@ msgstr "Nincs elérhető gyártói információ" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "Beszállítók" @@ -4529,7 +4536,7 @@ msgid "No supplier information available" msgstr "Nincs elérhető beszállítói információ" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4578,10 +4585,12 @@ msgstr "Vonalkód hozzárendelése a beszállítói alkatrészhez" msgid "Update Part Availability" msgstr "Alkatrész elérhetőség frissítése" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4641,7 +4650,7 @@ msgid "Label template file" msgstr "Címke sablon fájl" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "Engedélyezve" @@ -5734,7 +5743,7 @@ msgid "Pending Shipments" msgstr "Függő szállítmányok" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "Műveletek" @@ -5862,10 +5871,10 @@ msgstr "Szülő neve" msgid "Category Path" msgstr "Kategória elérési út" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5890,13 +5899,13 @@ msgstr "Szülő IPN" msgid "Part IPN" msgstr "Alkatrész IPN" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Minimum ár" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5975,7 +5984,7 @@ msgid "This option must be selected" msgstr "Ennek az opciónak ki kll lennie választva" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5983,12 +5992,17 @@ msgstr "Ennek az opciónak ki kll lennie választva" msgid "Category" msgstr "Kategória" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Alapértelmezett hely" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Teljes készlet" @@ -6011,7 +6025,8 @@ msgstr "Alkatrész kategóriák" msgid "Default location for parts in this category" msgstr "Ebben a kategóriában lévő alkatrészek helye alapban" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6419,7 +6434,7 @@ msgstr "Teszt sablont csak követésre kötelezett alkatrészhez lehet csinálni msgid "Test with this name already exists for this part" msgstr "Erre az alkatrészre már létezik teszt ilyen névvel" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "Teszt név" @@ -6447,7 +6462,7 @@ msgstr "Adj hozzá egy leírást ehhez a teszthez" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Kötelező" @@ -6456,7 +6471,7 @@ msgstr "Kötelező" msgid "Is this test required to pass?" msgstr "Szükséges-e hogy ez a teszt sikeres legyen?" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "Kötelező érték" @@ -6464,7 +6479,7 @@ msgstr "Kötelező érték" msgid "Does this test require a value when adding a test result?" msgstr "Szükséges-e hogy ennek a tesztnek az eredményéhez kötelezően érték legyen rendelve?" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "Kötelező melléklet" @@ -6686,311 +6701,329 @@ msgstr "Alkatrész kapcsolat nem hozható létre önmagával" msgid "Duplicate relationship already exists" msgstr "Már létezik duplikált alkatrész kapcsolat" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Alkategóriák" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "Beszerzési pénzneme ennek a készlet tételnek" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "Nincs kiválasztva alkatrész" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "Válassz kategóriát" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "Eredeti alkatrész" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "Válassz eredeti alkatrészt a másoláshoz" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "Kép másolása" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "Kép másolása az eredeti alkatrészről" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "Alkatrészjegyzék másolása" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "Alkatrészjegyzék másolása az eredeti alkatrészről" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "Paraméterek másolása" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "Paraméterek másolása az eredeti alkatrészről" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "Megjegyzések másolása" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "Megjegyzések másolása az eredeti alkatrészről" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "Kezdeti készlet mennyiség" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Add meg a kezdeti készlet mennyiséget. Ha nulla akkor nem lesz készlet létrehozva." -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "Kezdeti készlet hely" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "Add meg a kezdeti készlet helyét" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "Válassz beszállítót (hagyd üresen ha nem kell létrehozni)" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "Válassz gyártót (hagyd üresen ha nem kell létrehozni)" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "Gyártói cikkszám" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "A kiválasztott cég nem érvényes beszállító" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "A kiválasztott cég nem érvényes gyártó" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "Van már ilyen gyártói alkatrész" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "Van már ilyen beszállítói alkatrész" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +#, fuzzy +#| msgid "Exclude External Stock" +msgid "External Stock" +msgstr "Külső készlet nélkül" + +#: part/serializers.py:806 +#, fuzzy +#| msgid "Allocated Stock" +msgid "Unallocated Stock" +msgstr "Lefoglalt készlet" + +#: part/serializers.py:808 +#, fuzzy +#| msgid "Allow Variant Stock" +msgid "Variant Stock" +msgstr "Készlet változatok engedélyezése" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Alkatrész másolása" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "Kezdeti adatok másolása egy másik alkatrészről" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "Kezdeti készlet" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "Kezdeti készlet mennyiség létrehozása" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "Beszállító információ" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "Kezdeti beszállító adatok hozzáadása" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "Kategória paraméterek másolása" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "Paraméter sablonok másolása a kiválasztott alkatrész kategóriából" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "Meglévő kép" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "A meglévő alkatrész képfájl neve" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "A képfájl nem létezik" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "Leltár riport korlátozása bizonyos alkatrészre és variánsra" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "Leltár riport korlátozása bizonyos alkatrész kategóriára és az alatta lévőkre" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "Leltár riport korlátozása bizonyos készlethelyre és az alatta lévőkre" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "Külső készlet nélkül" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "Külső helyeken lévő készlet nélkül" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "Riport létrehozása" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "Riport fájl létrehozása a számított leltár adatokkal" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "Alaktrészek frissítése" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "Megadott alkatrészek frissítése a számított leltár adatokkal" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "Leltár funkció nincs engedélyezve" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "Számított minimum ár felülbírálása" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "Minimum ár pénzneme" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "Számított maximum ár felülbírálása" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "Maximum ár pénzneme" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "Frissítés" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "Alkatrész árak frissítése" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Megadott pénznem átváltása {default_currency}-re sikertelen" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "A Minimum ár nem lehet nagyobb mint a Maximum ár" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "A Maximum ár nem lehet kisebb mint a Minimum ár" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "Válassz alkatrészt ahonnan az alkatrészjegyzéket másoljuk" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "Létező adat törlése" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "Meglévő alkatrészjegyzék tételek törlése a másolás előtt" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "Örököltekkel együtt" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "Sablon alkatrészektől örökölt alkatrészjegyzék tételek használata" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "Hibás sorok kihagyása" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "Engedély a hibás sorok kihagyására" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "Helyettesítő alkatrészek másolása" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "Helyettesítő alkatrészek másolása az alkatrészjegyzék tételek másolásakor" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "Meglévő alkatrészjegyzék törlése" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "Meglévő alkatrészjegyzék tételek törlése a feltöltés előtt" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "Nincs megadva alkatrész oszlop" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "Több egyező alkatrész is található" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "Nincs egyező alkatrész" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "Az alkatrész nem lett összetevőként jelölve" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "Mennyiség nincs megadva" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "Érvénytelen mennyiség" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "Legalább egy alkatrészjegyzék tétel szükséges" @@ -7222,7 +7255,7 @@ msgid "Validate BOM" msgstr "Alkatrészjegyzék jóváhagyása" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "Alkatrészjegyzék tétel hozzáadása" @@ -7406,7 +7439,7 @@ msgstr "Gyártáshoz lefoglalva" msgid "Allocated to Sales Orders" msgstr "Vevő rendeléshez lefoglalva" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "Gyártható" @@ -8785,7 +8818,7 @@ msgstr "Válassz egy egyező beszállítói alkatrészt ehhez a készlet tételh msgid "Where is this stock item located?" msgstr "Hol található ez az alkatrész?" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "A csomagolása ennek a készlet tételnek itt van tárolva" @@ -8797,7 +8830,7 @@ msgstr "Ez a tétel be van építve egy másik tételbe?" msgid "Serial number for this item" msgstr "Sorozatszám ehhez a tételhez" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "Batch kód ehhez a készlet tételhez" @@ -8906,7 +8939,7 @@ msgstr "Készlet tétel gyártás alatt" msgid "Serialized stock cannot be merged" msgstr "Követésre kötelezett készlet nem vonható össze" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "Duplikált készlet tételek vannak" @@ -8987,7 +9020,7 @@ msgstr "A mennyiség nem lépheti túl a rendelkezésre álló készletet ({q})" msgid "Enter serial numbers for new items" msgstr "Írd be a sorozatszámokat az új tételekhez" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "Cél készlet hely" @@ -9060,77 +9093,78 @@ msgstr "Válaszd ki a státuszváltásra szánt készlet tételeket" msgid "No stock items selected" msgstr "Nincs készlet tétel kiválasztva" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Alhelyek" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "Az alkatrésznek értékesíthetőnek kell lennie" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "A tétel egy vevő rendeléshez foglalt" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "A tétel egy gyártási utasításhoz foglalt" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "Vevő akihez rendeljük a készlet tételeket" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "A kiválasztott cég nem egy vevő" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "Készlet hozzárendelés megjegyzései" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "A készlet tételek listáját meg kell adni" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "Készlet összevonás megjegyzései" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "Nem egyező beszállítók megengedése" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "Különböző beszállítói alkatrészekből származó készletek összevonásának engedélyezése" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "Nem egyező állapotok megjelenítése" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "Különböző állapotú készletek összevonásának engedélyezése" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "Legalább két készlet tételt meg kell adni" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "Nincs változás" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "Készlet tétel elsődleges kulcs értéke" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "Készlet tétel státusz kódja" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "Készlet tranzakció megjegyzései" @@ -10663,7 +10697,7 @@ msgid "The following parts are low on required stock" msgstr "A következő alkatrészek szükséges készlete alacsony" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "Szükséges mennyiség" @@ -10677,7 +10711,7 @@ msgid "Click on the following link to view this part" msgstr "Klikk a következő linkre az alkatrész megjelenítéséhez" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "Minimum mennyiség" @@ -11052,62 +11086,68 @@ msgstr "Alkatrészjegyzék árazása nem teljes" msgid "No pricing available" msgstr "Nincsenek árak" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#, fuzzy +#| msgid "External Link" +msgid "External stock" +msgstr "Külső link" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "Nincs szabad" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "Változatokkal és helyettesítőkkel együtt" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "Változatokkal együtt" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "Helyettesítőkkel együtt" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "Fogyóeszköz tétel" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "Alkatrészjegyzék tétel jóváhagyása" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "Ez a sor jóvá lett hagyva" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "Helyettesítő alkatrészek szerkesztése" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "Alkatrészjegyzék tétel szerkesztése" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "Alkatrészjegyzék tétel törlése" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "Alkatrészjegyzék megtekintése" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "Nem találhatók alkatrészjegyzék tételek" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "Szükséges alkatrész" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "Örökölve a szülő alkatrészjegyzéktől" @@ -11450,29 +11490,29 @@ msgstr "Mennyiségi egység" msgid "Sufficient stock available" msgstr "Van elegendő" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "Fogyóeszköz tétel" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "Követett tétel" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "Gyártási készlet" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "Készlet rendelés" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "Lefoglalt készlet" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "Készlet foglalások törlése" @@ -12314,64 +12354,64 @@ msgstr "Alkategóriák betöltése" msgid "Subscribed category" msgstr "Értesítésre beállított kategória" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "Nincs a lekérdezéssel egyező teszt sablon" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "találat" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "Teszt eredmény szerkesztése" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "Teszt eredmény törlése" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "Ez a teszt a szülő alkatrészhez lett felvéve" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "Teszt eredmény sablon szerkesztése" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "Teszt eredmény sablon törlése" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "Nincs megadva dátum" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "A megadott dátum a múltban van" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "Spekulatív" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "Az alkatrészhez nem áll rendelkezésre ütemezési információ" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "Hiba az alkatrész ütemezési információinak betöltésekor" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "Ütemezett készlet mennyiség" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "Maximum mennyiség" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "Minimális készlet" @@ -14053,4 +14093,3 @@ msgstr "Jogosultság tételek szerkesztéséhez" #: users/models.py:413 msgid "Permission to delete items" msgstr "Jogosultság tételek törléséhez" - diff --git a/InvenTree/locale/id/LC_MESSAGES/django.po b/InvenTree/locale/id/LC_MESSAGES/django.po index be27e826e6..c788eee3cf 100644 --- a/InvenTree/locale/id/LC_MESSAGES/django.po +++ b/InvenTree/locale/id/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2024-02-28 07:23\n" "Last-Translator: \n" "Language-Team: Indonesian\n" @@ -66,9 +66,9 @@ msgstr "Masukkan tanggal" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "Nama" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "URL file gambar external" msgid "Downloading images from remote URL is not enabled" msgstr "Unduhan gambar dari URL external tidak aktif" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "Produksi induk dari produksi ini" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "Kode status pembuatan" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Kode Kelompok" @@ -1242,48 +1242,48 @@ msgstr "" msgid "Project code for this build order" msgstr "" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "Tidak ada hasil produksi yang ditentukan" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "Hasil produksi sudah selesai" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "Hasil produksi tidak sesuai dengan order produksi" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "Jumlah harus lebih besar daripada nol" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "" msgid "Quantity" msgstr "Jumlah" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Item produksi harus menentukan hasil produksi karena bagian utama telah ditandai sebagai dapat dilacak" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "Item stok teralokasikan terlalu banyak" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "Jumlah yang dialokasikan harus lebih dari nol" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "Jumlah harus 1 untuk stok dengan nomor seri" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "" msgid "Stock Item" msgstr "Stok Item" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "Sumber stok item" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "Jumlah stok yang dialokasikan ke produksi" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "Pasang ke" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "Tujuan stok item" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "Daftar hasil pesanan harus disediakan" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "Lokasi hasil pesanan yang selesai" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part harus mengarah ke bagian yang sesuai dengan order produksi" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "Item harus tersedia dalam stok" @@ -1659,44 +1659,45 @@ msgstr "" msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "Item tagihan material" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "Stok dibutuhkan untuk order produksi" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1990,27 +1991,31 @@ msgstr "" msgid "Order Parts" msgstr "" -#: build/templates/build/detail.html:210 -msgid "Incomplete Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:214 -msgid "Create new build output" +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" msgstr "" #: build/templates/build/detail.html:215 +msgid "Incomplete Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:219 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "" msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "" @@ -4218,7 +4223,7 @@ msgstr "" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -5861,10 +5869,10 @@ msgstr "" msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "" msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "" msgid "Category" msgstr "" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,7 +6023,8 @@ msgstr "" msgid "Default location for parts in this category" msgstr "" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "" msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" @@ -6446,7 +6460,7 @@ msgstr "" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" @@ -6455,7 +6469,7 @@ msgstr "" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" @@ -6463,7 +6477,7 @@ msgstr "" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6685,311 +6699,327 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +#, fuzzy +#| msgid "External Link" +msgid "External Stock" +msgstr "Tautan eksternal" + +#: part/serializers.py:806 +#, fuzzy +#| msgid "Accept Unallocated" +msgid "Unallocated Stock" +msgstr "Terima Tidak Teralokasikan" + +#: part/serializers.py:808 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7221,7 +7251,7 @@ msgid "Validate BOM" msgstr "" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" @@ -7405,7 +7435,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -8784,7 +8814,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -8796,7 +8826,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -8905,7 +8935,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -8986,7 +9016,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9059,77 +9089,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -10662,7 +10693,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -10676,7 +10707,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" @@ -11051,62 +11082,68 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#, fuzzy +#| msgid "External Link" +msgid "External stock" +msgstr "Tautan eksternal" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11486,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12350,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14089,3 @@ msgstr "" #: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/InvenTree/locale/it/LC_MESSAGES/django.po b/InvenTree/locale/it/LC_MESSAGES/django.po index a4087e5bd8..03e78a1721 100644 --- a/InvenTree/locale/it/LC_MESSAGES/django.po +++ b/InvenTree/locale/it/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2024-02-28 07:23\n" "Last-Translator: \n" "Language-Team: Italian\n" @@ -66,9 +66,9 @@ msgstr "Inserisci la data" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "Nome" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "URL del file immagine remota" msgid "Downloading images from remote URL is not enabled" msgstr "Il download delle immagini da URL remoto non è abilitato" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "Controllo in background non riuscito" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "Monitorato" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "Ordine di produzione a cui questa produzione viene assegnata" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "Codice stato di produzione" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Codice Lotto" @@ -1242,48 +1242,48 @@ msgstr "Codice del progetto" msgid "Project code for this build order" msgstr "Codice del progetto per questo ordine di produzione" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "L'ordine di produzione {build} è stato completato" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "L'ordine di produzione è stato completato" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "Nessun output di produzione specificato" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "La produzione è stata completata" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "L'output della produzione non corrisponde all'ordine di compilazione" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "La quantità deve essere maggiore di zero" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "La quantità non può essere maggiore della quantità in uscita" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "Crea oggetto" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "Crea oggetto" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "Crea oggetto" msgid "Quantity" msgstr "Quantità" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "Quantità richiesta per l'ordine di costruzione" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "L'elemento di compilazione deve specificare un output poiché la parte principale è contrassegnata come rintracciabile" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "La quantità assegnata ({q}) non deve essere maggiore della quantità disponibile ({a})" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "L'articolo in giacenza è sovrallocato" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "La quantità di assegnazione deve essere maggiore di zero" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "La quantità deve essere 1 per lo stock serializzato" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "L'articolo in stock selezionato non corrisponde alla voce nella BOM" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "L'articolo in stock selezionato non corrisponde alla voce nella BOM" msgid "Stock Item" msgstr "Articoli in magazzino" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "Origine giacenza articolo" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "Quantità di magazzino da assegnare per la produzione" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "Installa in" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "Destinazione articolo in giacenza" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "Deve essere fornito un elenco dei risultati di produzione" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "Posizione per gli output di build completati" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "Articolo linea di produzione" msgid "bom_item.part must point to the same part as the build order" msgstr "gli elementi degli articoli della distinta base devono puntare alla stessa parte dell'ordine di produzione" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "L'articolo deve essere disponibile" @@ -1659,44 +1659,45 @@ msgstr "Articoli Opzionali" msgid "Allocate optional BOM items to build order" msgstr "Assegna gli elementi opzionali della distinta base all'ordine di produzione" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "Distinta base (Bom)" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "Ordinato" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "Disponibilità in magazzino" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "Giacenza richiesta per l'ordine di produzione" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "Ordine di produzione in ritardo" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "L'ordine di produzione {bo} è in ritardo" @@ -1990,27 +1991,31 @@ msgstr "Ordina articoli richiesti" msgid "Order Parts" msgstr "Ordine Articoli" -#: build/templates/build/detail.html:210 +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" +msgstr "" + +#: build/templates/build/detail.html:215 msgid "Incomplete Build Outputs" msgstr "Produzione Incompleta" -#: build/templates/build/detail.html:214 +#: build/templates/build/detail.html:219 msgid "Create new build output" msgstr "Crea nuova produzione" -#: build/templates/build/detail.html:215 +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "Nuova Produzione" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "Produzioni Completate" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "Produzioni Completate" msgid "Attachments" msgstr "Allegati" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Genera Note" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "Gli articoli sono modelli per impostazione predefinita" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "Quantità prezzo limite" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "Seleziona articolo" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "Seleziona Produttore" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "L'articolo del costruttore collegato deve riferirsi alla stesso articolo #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "Fornitore" msgid "Select supplier" msgstr "Seleziona fornitore" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "Unità di giacenza magazzino fornitore" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "Onere minimo (ad esempio tassa di stoccaggio)" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "Disponibilità Aggiornata" msgid "Date of last update of availability data" msgstr "Data dell’ultimo aggiornamento dei dati sulla disponibilità" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "Valuta predefinita utilizzata per questo fornitore" @@ -4218,7 +4223,7 @@ msgstr "Elimina immagine" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "Nessuna informazione sul produttore disponibile" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "Fornitori" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "Nessuna informazione sul fornitore disponibile" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "File modello etichetta" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "Abilitato" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "Spedizione in sospeso" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "Azioni" @@ -5861,10 +5869,10 @@ msgstr "Nome Principale" msgid "Category Path" msgstr "Percorso Categoria" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "IPN Principale" msgid "Part IPN" msgstr "IPN Articolo" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Prezzo Minimo" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "Questa opzione deve essere selezionata" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "Questa opzione deve essere selezionata" msgid "Category" msgstr "Categoria" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Posizione Predefinita" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Giacenze Totali" @@ -6010,7 +6023,8 @@ msgstr "Categorie Articolo" msgid "Default location for parts in this category" msgstr "Posizione predefinita per gli articoli di questa categoria" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "Il modello di prova può essere creato solo per gli articoli rintracciab msgid "Test with this name already exists for this part" msgstr "Una prova con questo nome esiste già per questo articolo" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "Nome Test" @@ -6446,7 +6460,7 @@ msgstr "Inserisci descrizione per questa prova" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Richiesto" @@ -6455,7 +6469,7 @@ msgstr "Richiesto" msgid "Is this test required to pass?" msgstr "Questa prova è necessaria per passare?" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "Valore richiesto" @@ -6463,7 +6477,7 @@ msgstr "Valore richiesto" msgid "Does this test require a value when adding a test result?" msgstr "Questa prova richiede un valore quando si aggiunge un risultato di prova?" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "Allegato Richiesto" @@ -6685,311 +6699,329 @@ msgstr "Non si può creare una relazione tra l'articolo e sé stesso" msgid "Duplicate relationship already exists" msgstr "La relazione duplicata esiste già" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Sottocategorie" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "Valuta di acquisto di questo articolo in stock" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "Articolo Originale" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "Seleziona l'articolo originale da duplicare" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "Copia immagine" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "Copia immagine dall'articolo originale" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "Copia Distinta Base" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "Copia fattura dei materiali dall'articolo originale" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "Copia parametri" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "Copia i dati dei parametri dall'articolo originale" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "Quantità iniziale" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Specificare la quantità iniziale disponibile per questo Articolo. Se la quantità è zero, non viene aggiunta alcuna quantità." -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "Ubicazione Iniziale Magazzino" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "Specificare l'ubicazione iniziale del magazzino per questo Articolo" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "Seleziona il fornitore (o lascia vuoto per saltare)" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleziona il produttore (o lascia vuoto per saltare)" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "Codice articolo Produttore" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "L'azienda selezionata non è un fornitore valido" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "L'azienda selezionata non è un produttore valido" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "L'articolo del produttore che corrisponde a questo MPN esiste già" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "L'articolo del fornitore che corrisponde a questo SKU esiste già" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +#, fuzzy +#| msgid "External Link" +msgid "External Stock" +msgstr "Collegamento esterno" + +#: part/serializers.py:806 +#, fuzzy +#| msgid "Allocate Stock" +msgid "Unallocated Stock" +msgstr "Assegna Scorte" + +#: part/serializers.py:808 +#, fuzzy +#| msgid "Part Stock" +msgid "Variant Stock" +msgstr "Articolo Stock" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Duplica articolo" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "Copia i dati iniziali da un altro Articolo" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "Stock iniziale" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "Crea Articolo con quantità di scorta iniziale" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "Informazioni Fornitore" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "Aggiungi le informazioni iniziali del fornitore per questo articolo" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "Copia Parametri Categoria" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "Copia i parametri dai modelli della categoria articolo selezionata" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "Limitare il report d'inventario ad un articolo particolare e a eventuali articoli varianti" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "Limita il report d'inventario ad una particolare categoria articolo, e a eventuali categorie secondarie" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "Limita il report d'inventario ad una particolare ubicazione di magazzino, e a eventuali ubicazioni secondarie" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "Genera Report" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "Genera file di report contenente dati di inventario calcolati" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "Aggiorna Articoli" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "Aggiorna gli articoli specificati con i dati calcolati di inventario" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "La funzione Inventario non è abilitata" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "Aggiorna" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "Aggiorna i prezzi per questo articolo" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "Seleziona l'articolo da cui copiare la distinta base" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "Rimuovi Dati Esistenti" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "Rimuovi elementi distinta base esistenti prima di copiare" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "Includi Ereditato" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "Includi gli elementi Distinta Base ereditati da prodotti template" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "Salta Righe Non Valide" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "Abilita questa opzione per saltare le righe non valide" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "Copia Articoli sostitutivi" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copia articoli sostitutivi quando duplichi gli elementi distinta base" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "Cancella Distinta Base esistente" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "Rimuovi elementi distinta base esistenti prima del caricamento" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "Nessuna colonna articolo specificata" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "Trovati più articoli corrispondenti" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "Nessun articolo corrispondente trovato" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "L'articolo non è indicato come componente" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "Quantità non fornita" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "Quantità non valida" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "Almeno un elemento della distinta base è richiesto" @@ -7221,7 +7253,7 @@ msgid "Validate BOM" msgstr "Valida Distinta Base" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "Aggiungi elemento Distinta Base" @@ -7405,7 +7437,7 @@ msgstr "Assegnato agli Ordini di Produzione" msgid "Allocated to Sales Orders" msgstr "Assegnato agli Ordini di Vendita" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "Puoi produrre" @@ -8784,7 +8816,7 @@ msgstr "Seleziona un fornitore articolo corrispondente per questo elemento di ma msgid "Where is this stock item located?" msgstr "Dove si trova questo articolo di magazzino?" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "Imballaggio di questo articolo di magazzino è collocato in" @@ -8796,7 +8828,7 @@ msgstr "Questo elemento è stato installato su un altro elemento?" msgid "Serial number for this item" msgstr "Numero di serie per questo elemento" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "Codice lotto per questo elemento di magazzino" @@ -8905,7 +8937,7 @@ msgstr "L'elemento di magazzino è attualmente in produzione" msgid "Serialized stock cannot be merged" msgstr "Il magazzino serializzato non può essere unito" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "Duplica elementi di magazzino" @@ -8986,7 +9018,7 @@ msgstr "La quantità non deve superare la quantità disponibile ({q})" msgid "Enter serial numbers for new items" msgstr "Inserisci i numeri di serie per i nuovi elementi" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "Posizione magazzino di destinazione" @@ -9059,77 +9091,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Sottoallocazioni" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "L'articolo deve essere vendibile" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "L'elemento è assegnato a un ordine di vendita" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "Elemento assegnato a un ordine di costruzione" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "Cliente a cui assegnare elementi di magazzino" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "L'azienda selezionata non è un cliente" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "Note sull'assegnazione delle scorte" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "Deve essere fornito un elenco degli elementi di magazzino" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "Note di fusione di magazzino" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "Consenti fornitori non corrispondenti" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "Consenti di unire gli elementi di magazzino che hanno fornitori diversi" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "Consenti stato non corrispondente" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "Consenti di unire gli elementi di magazzino con diversi codici di stato" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "Devono essere riforniti almeno due elementi in magazzino" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "Valore di chiave primaria StockItem" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "Note sugli spostamenti di magazzino" @@ -10662,7 +10695,7 @@ msgid "The following parts are low on required stock" msgstr "I seguenti articoli sono pochi nel magazzino richiesto" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "Quantità richiesta" @@ -10676,7 +10709,7 @@ msgid "Click on the following link to view this part" msgstr "Clicca il seguente link per visualizzare questo articolo" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "Quantità minima" @@ -11051,62 +11084,68 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#, fuzzy +#| msgid "External Link" +msgid "External stock" +msgstr "Collegamento esterno" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11488,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12352,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14091,3 @@ msgstr "Permessi per modificare gli elementi" #: users/models.py:413 msgid "Permission to delete items" msgstr "Autorizzazione ad eliminare gli elementi" - diff --git a/InvenTree/locale/ja/LC_MESSAGES/django.po b/InvenTree/locale/ja/LC_MESSAGES/django.po index 241084973d..4899f61711 100644 --- a/InvenTree/locale/ja/LC_MESSAGES/django.po +++ b/InvenTree/locale/ja/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2024-02-28 07:23\n" "Last-Translator: \n" "Language-Team: Japanese\n" @@ -66,9 +66,9 @@ msgstr "日付を入力する" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "お名前" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "外部画像ファイルのURL" msgid "Downloading images from remote URL is not enabled" msgstr "外部URLからの画像ダウンロードは許可されていません" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "バックグラウンドワーカーのチェックに失敗しました" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" @@ -1242,48 +1242,48 @@ msgstr "" msgid "Project code for this build order" msgstr "" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "" msgid "Quantity" msgstr "数量" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "" msgid "Stock Item" msgstr "在庫商品" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "" @@ -1659,44 +1659,45 @@ msgstr "" msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1990,27 +1991,31 @@ msgstr "注文必須パーツ" msgid "Order Parts" msgstr "パーツの注文" -#: build/templates/build/detail.html:210 -msgid "Incomplete Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:214 -msgid "Create new build output" +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" msgstr "" #: build/templates/build/detail.html:215 +msgid "Incomplete Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:219 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "" msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "パーツはデフォルトのテンプレートです" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "仕入先" msgid "Select supplier" msgstr "" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "" @@ -4218,7 +4223,7 @@ msgstr "" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "仕入先" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -5861,10 +5869,10 @@ msgstr "" msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "" msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "" msgid "Category" msgstr "カテゴリ" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,7 +6023,8 @@ msgstr "パーツカテゴリ" msgid "Default location for parts in this category" msgstr "" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "" msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" @@ -6446,7 +6460,7 @@ msgstr "" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" @@ -6455,7 +6469,7 @@ msgstr "" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" @@ -6463,7 +6477,7 @@ msgstr "" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6685,311 +6699,325 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "サブカテゴリ" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "カテゴリを選択" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +#, fuzzy +#| msgid "External Link" +msgid "External Stock" +msgstr "外部リンク" + +#: part/serializers.py:806 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:808 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7221,7 +7249,7 @@ msgid "Validate BOM" msgstr "" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" @@ -7405,7 +7433,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -8784,7 +8812,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -8796,7 +8824,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -8905,7 +8933,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -8986,7 +9014,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9059,77 +9087,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "パーツは販売可能でなければなりません" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -10662,7 +10691,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -10676,7 +10705,7 @@ msgid "Click on the following link to view this part" msgstr "このパーツを表示するには、次のリンクをクリックしてください" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "最小在庫" @@ -11051,62 +11080,68 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#, fuzzy +#| msgid "External Link" +msgid "External stock" +msgstr "外部リンク" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11484,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12348,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14087,3 @@ msgstr "項目を編集する権限" #: users/models.py:413 msgid "Permission to delete items" msgstr "項目を削除する権限" - diff --git a/InvenTree/locale/ko/LC_MESSAGES/django.po b/InvenTree/locale/ko/LC_MESSAGES/django.po index 53bbb6d8b4..b88c8b2fa9 100644 --- a/InvenTree/locale/ko/LC_MESSAGES/django.po +++ b/InvenTree/locale/ko/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2024-02-28 07:23\n" "Last-Translator: \n" "Language-Team: Korean\n" @@ -66,9 +66,9 @@ msgstr "날짜 입력" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "이름" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "원격 이미지 파일의 URL" msgid "Downloading images from remote URL is not enabled" msgstr "원격 URL 에서 이미지 다운로드가 활성화되지 않음" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "Background worker 확인 실패" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" @@ -1242,48 +1242,48 @@ msgstr "" msgid "Project code for this build order" msgstr "" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "수량 값은 0보다 커야 합니다" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "" msgid "Quantity" msgstr "수량" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "" msgid "Stock Item" msgstr "" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "" @@ -1659,44 +1659,45 @@ msgstr "" msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1990,27 +1991,31 @@ msgstr "" msgid "Order Parts" msgstr "" -#: build/templates/build/detail.html:210 -msgid "Incomplete Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:214 -msgid "Create new build output" +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" msgstr "" #: build/templates/build/detail.html:215 +msgid "Incomplete Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:219 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "" msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "" @@ -4218,7 +4223,7 @@ msgstr "" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -5861,10 +5869,10 @@ msgstr "" msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "" msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "" msgid "Category" msgstr "" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,7 +6023,8 @@ msgstr "" msgid "Default location for parts in this category" msgstr "" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "" msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" @@ -6446,7 +6460,7 @@ msgstr "" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" @@ -6455,7 +6469,7 @@ msgstr "" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" @@ -6463,7 +6477,7 @@ msgstr "" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6685,311 +6699,325 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "이미지 복사" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +#, fuzzy +#| msgid "External Link" +msgid "External Stock" +msgstr "외부 링크" + +#: part/serializers.py:806 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:808 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7221,7 +7249,7 @@ msgid "Validate BOM" msgstr "" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" @@ -7405,7 +7433,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -8784,7 +8812,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -8796,7 +8824,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -8905,7 +8933,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -8986,7 +9014,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9059,77 +9087,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -10662,7 +10691,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -10676,7 +10705,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" @@ -11051,62 +11080,68 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#, fuzzy +#| msgid "External Link" +msgid "External stock" +msgstr "외부 링크" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11484,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12348,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14087,3 @@ msgstr "" #: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/InvenTree/locale/lv/LC_MESSAGES/django.po b/InvenTree/locale/lv/LC_MESSAGES/django.po new file mode 100644 index 0000000000..8ddd7c0515 --- /dev/null +++ b/InvenTree/locale/lv/LC_MESSAGES/django.po @@ -0,0 +1,14163 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-03-19 11:11+1100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" +#: InvenTree/api.py:198 +msgid "API endpoint not found" +msgstr "" + +#: InvenTree/api.py:462 +msgid "User does not have permission to view this model" +msgstr "" + +#: InvenTree/conversion.py:160 +#, python-brace-format +msgid "Invalid unit provided ({unit})" +msgstr "" + +#: InvenTree/conversion.py:177 +msgid "No value provided" +msgstr "" + +#: InvenTree/conversion.py:205 +#, python-brace-format +msgid "Could not convert {original} to {unit}" +msgstr "" + +#: InvenTree/conversion.py:207 +msgid "Invalid quantity supplied" +msgstr "" + +#: InvenTree/conversion.py:221 +#, python-brace-format +msgid "Invalid quantity supplied ({exc})" +msgstr "" + +#: InvenTree/exceptions.py:109 +msgid "Error details can be found in the admin panel" +msgstr "" + +#: InvenTree/fields.py:140 +msgid "Enter date" +msgstr "" + +#: InvenTree/fields.py:209 InvenTree/models.py:1022 build/serializers.py:438 +#: build/serializers.py:516 build/templates/build/sidebar.html:21 +#: company/models.py:835 company/templates/company/sidebar.html:37 +#: order/models.py:1271 order/templates/order/po_sidebar.html:11 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:59 +#: part/models.py:3174 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_base.html:172 +#: stock/admin.py:226 stock/models.py:2335 stock/models.py:2454 +#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 +#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 +#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 +#: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2201 +#: templates/js/translated/return_order.js:776 +#: templates/js/translated/sales_order.js:1067 +#: templates/js/translated/sales_order.js:1982 +#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +msgid "Notes" +msgstr "" + +#: InvenTree/format.py:164 +#, python-brace-format +msgid "Value '{name}' does not appear in pattern format" +msgstr "" + +#: InvenTree/format.py:175 +msgid "Provided value does not match required pattern: " +msgstr "" + +#: InvenTree/forms.py:128 +msgid "Enter password" +msgstr "" + +#: InvenTree/forms.py:129 +msgid "Enter new password" +msgstr "" + +#: InvenTree/forms.py:138 +msgid "Confirm password" +msgstr "" + +#: InvenTree/forms.py:139 +msgid "Confirm new password" +msgstr "" + +#: InvenTree/forms.py:143 +msgid "Old password" +msgstr "" + +#: InvenTree/forms.py:182 +msgid "Email (again)" +msgstr "" + +#: InvenTree/forms.py:186 +msgid "Email address confirmation" +msgstr "" + +#: InvenTree/forms.py:209 +msgid "You must type the same email each time." +msgstr "" + +#: InvenTree/forms.py:253 InvenTree/forms.py:261 +msgid "The provided primary email address is not valid." +msgstr "" + +#: InvenTree/forms.py:268 +msgid "The provided email domain is not approved." +msgstr "" + +#: InvenTree/forms.py:395 +msgid "Registration is disabled." +msgstr "" + +#: InvenTree/helpers.py:528 order/models.py:529 order/models.py:731 +msgid "Invalid quantity provided" +msgstr "" + +#: InvenTree/helpers.py:536 +msgid "Empty serial number string" +msgstr "" + +#: InvenTree/helpers.py:565 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:597 InvenTree/helpers.py:640 +#, python-brace-format +msgid "Invalid group range: {group}" +msgstr "" + +#: InvenTree/helpers.py:628 +#, python-brace-format +msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" +msgstr "" + +#: InvenTree/helpers.py:658 InvenTree/helpers.py:665 InvenTree/helpers.py:684 +#, python-brace-format +msgid "Invalid group sequence: {group}" +msgstr "" + +#: InvenTree/helpers.py:694 +msgid "No serial numbers found" +msgstr "" + +#: InvenTree/helpers.py:699 +msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" +msgstr "" + +#: InvenTree/helpers.py:817 +msgid "Remove HTML tags from this value" +msgstr "" + +#: InvenTree/helpers_model.py:150 +msgid "Connection error" +msgstr "" + +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +msgid "Server responded with invalid status code" +msgstr "" + +#: InvenTree/helpers_model.py:158 +msgid "Exception occurred" +msgstr "" + +#: InvenTree/helpers_model.py:168 +msgid "Server responded with invalid Content-Length value" +msgstr "" + +#: InvenTree/helpers_model.py:171 +msgid "Image size is too large" +msgstr "" + +#: InvenTree/helpers_model.py:183 +msgid "Image download exceeded maximum size" +msgstr "" + +#: InvenTree/helpers_model.py:188 +msgid "Remote server returned empty response" +msgstr "" + +#: InvenTree/helpers_model.py:196 +msgid "Supplied URL is not a valid image file" +msgstr "" + +#: InvenTree/locales.py:18 +msgid "Bulgarian" +msgstr "" + +#: InvenTree/locales.py:19 +msgid "Czech" +msgstr "" + +#: InvenTree/locales.py:20 +msgid "Danish" +msgstr "" + +#: InvenTree/locales.py:21 +msgid "German" +msgstr "" + +#: InvenTree/locales.py:22 +msgid "Greek" +msgstr "" + +#: InvenTree/locales.py:23 +msgid "English" +msgstr "" + +#: InvenTree/locales.py:24 +msgid "Spanish" +msgstr "" + +#: InvenTree/locales.py:25 +msgid "Spanish (Mexican)" +msgstr "" + +#: InvenTree/locales.py:26 +msgid "Farsi / Persian" +msgstr "" + +#: InvenTree/locales.py:27 +msgid "Finnish" +msgstr "" + +#: InvenTree/locales.py:28 +msgid "French" +msgstr "" + +#: InvenTree/locales.py:29 +msgid "Hebrew" +msgstr "" + +#: InvenTree/locales.py:30 +msgid "Hindi" +msgstr "" + +#: InvenTree/locales.py:31 +msgid "Hungarian" +msgstr "" + +#: InvenTree/locales.py:32 +msgid "Italian" +msgstr "" + +#: InvenTree/locales.py:33 +msgid "Japanese" +msgstr "" + +#: InvenTree/locales.py:34 +msgid "Korean" +msgstr "" + +#: InvenTree/locales.py:35 +msgid "Latvian" +msgstr "" + +#: InvenTree/locales.py:36 +msgid "Dutch" +msgstr "" + +#: InvenTree/locales.py:37 +msgid "Norwegian" +msgstr "" + +#: InvenTree/locales.py:38 +msgid "Polish" +msgstr "" + +#: InvenTree/locales.py:39 +msgid "Portuguese" +msgstr "" + +#: InvenTree/locales.py:40 +msgid "Portuguese (Brazilian)" +msgstr "" + +#: InvenTree/locales.py:41 +msgid "Russian" +msgstr "" + +#: InvenTree/locales.py:42 +msgid "Slovak" +msgstr "" + +#: InvenTree/locales.py:43 +msgid "Slovenian" +msgstr "" + +#: InvenTree/locales.py:44 +msgid "Serbian" +msgstr "" + +#: InvenTree/locales.py:45 +msgid "Swedish" +msgstr "" + +#: InvenTree/locales.py:46 +msgid "Thai" +msgstr "" + +#: InvenTree/locales.py:47 +msgid "Turkish" +msgstr "" + +#: InvenTree/locales.py:48 +msgid "Vietnamese" +msgstr "" + +#: InvenTree/locales.py:49 +msgid "Chinese (Simplified)" +msgstr "" + +#: InvenTree/locales.py:50 +msgid "Chinese (Traditional)" +msgstr "" + +#: InvenTree/magic_login.py:28 +#, python-brace-format +msgid "[{site_name}] Log in to the app" +msgstr "" + +#: InvenTree/magic_login.py:38 company/models.py:132 +#: company/templates/company/company_base.html:132 +#: templates/InvenTree/settings/user.html:49 +#: templates/js/translated/company.js:667 +msgid "Email" +msgstr "" + +#: InvenTree/models.py:107 +msgid "Error running plugin validation" +msgstr "" + +#: InvenTree/models.py:162 +msgid "Metadata must be a python dict object" +msgstr "" + +#: InvenTree/models.py:168 +msgid "Plugin Metadata" +msgstr "" + +#: InvenTree/models.py:169 +msgid "JSON metadata field, for use by external plugins" +msgstr "" + +#: InvenTree/models.py:399 +msgid "Improperly formatted pattern" +msgstr "" + +#: InvenTree/models.py:406 +msgid "Unknown format key specified" +msgstr "" + +#: InvenTree/models.py:412 +msgid "Missing required format key" +msgstr "" + +#: InvenTree/models.py:423 +msgid "Reference field cannot be empty" +msgstr "" + +#: InvenTree/models.py:431 +msgid "Reference must match required pattern" +msgstr "" + +#: InvenTree/models.py:463 +msgid "Reference number is too large" +msgstr "" + +#: InvenTree/models.py:537 +msgid "Missing file" +msgstr "" + +#: InvenTree/models.py:538 +msgid "Missing external link" +msgstr "" + +#: InvenTree/models.py:559 stock/models.py:2449 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "" + +#: InvenTree/models.py:560 +msgid "Select file to attach" +msgstr "" + +#: InvenTree/models.py:568 common/models.py:2961 company/models.py:145 +#: company/models.py:452 company/models.py:509 company/models.py:818 +#: order/models.py:279 order/models.py:1276 order/models.py:1690 +#: part/admin.py:55 part/models.py:918 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_base.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1309 +#: templates/js/translated/company.js:1663 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2456 +#: templates/js/translated/purchase_order.js:2041 +#: templates/js/translated/purchase_order.js:2205 +#: templates/js/translated/return_order.js:780 +#: templates/js/translated/sales_order.js:1056 +#: templates/js/translated/sales_order.js:1987 +msgid "Link" +msgstr "" + +#: InvenTree/models.py:569 build/models.py:309 part/models.py:919 +#: stock/models.py:822 +msgid "Link to external URL" +msgstr "" + +#: InvenTree/models.py:575 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "" + +#: InvenTree/models.py:576 +msgid "File comment" +msgstr "" + +#: InvenTree/models.py:584 InvenTree/models.py:585 common/models.py:2437 +#: common/models.py:2438 common/models.py:2662 common/models.py:2663 +#: common/models.py:2908 common/models.py:2909 part/models.py:3184 +#: part/models.py:3271 part/models.py:3364 part/models.py:3392 +#: plugin/models.py:251 plugin/models.py:252 +#: report/templates/report/inventree_test_report_base.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:100 +msgid "User" +msgstr "" + +#: InvenTree/models.py:589 +msgid "upload date" +msgstr "" + +#: InvenTree/models.py:611 +msgid "Filename must not be empty" +msgstr "" + +#: InvenTree/models.py:622 +msgid "Invalid attachment directory" +msgstr "" + +#: InvenTree/models.py:652 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "" + +#: InvenTree/models.py:655 +msgid "Filename missing extension" +msgstr "" + +#: InvenTree/models.py:664 +msgid "Attachment with this filename already exists" +msgstr "" + +#: InvenTree/models.py:671 +msgid "Error renaming file" +msgstr "" + +#: InvenTree/models.py:847 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:864 +msgid "Invalid choice" +msgstr "" + +#: InvenTree/models.py:894 common/models.py:2649 common/models.py:3047 +#: common/serializers.py:370 company/models.py:608 label/models.py:120 +#: machine/models.py:24 part/models.py:854 part/models.py:3615 +#: plugin/models.py:41 report/models.py:175 stock/models.py:76 +#: templates/InvenTree/settings/mixins/urls.html:13 +#: templates/InvenTree/settings/notifications.html:17 +#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin_settings.html:22 +#: templates/InvenTree/settings/settings_staff_js.html:67 +#: templates/InvenTree/settings/settings_staff_js.html:446 +#: templates/js/translated/company.js:666 +#: templates/js/translated/company.js:714 +#: templates/js/translated/company.js:903 +#: templates/js/translated/company.js:1155 +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +msgid "Name" +msgstr "" + +#: InvenTree/models.py:900 build/models.py:182 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:517 company/models.py:826 +#: company/templates/company/company_base.html:71 +#: company/templates/company/manufacturer_part.html:75 +#: company/templates/company/supplier_part.html:107 label/models.py:127 +#: order/models.py:265 order/models.py:1304 part/admin.py:303 part/admin.py:414 +#: part/models.py:877 part/models.py:3630 part/templates/part/category.html:82 +#: part/templates/part/part_base.html:170 +#: part/templates/part/part_scheduling.html:12 report/models.py:188 +#: report/models.py:654 report/models.py:728 +#: report/templates/report/inventree_build_order_base.html:117 +#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: templates/InvenTree/settings/notifications.html:19 +#: templates/InvenTree/settings/plugin_settings.html:27 +#: templates/InvenTree/settings/settings_staff_js.html:170 +#: templates/InvenTree/settings/settings_staff_js.html:451 +#: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 +#: templates/js/translated/build.js:2137 templates/js/translated/company.js:518 +#: templates/js/translated/company.js:1320 +#: templates/js/translated/company.js:1631 templates/js/translated/index.js:119 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/plugin.js:80 +#: templates/js/translated/purchase_order.js:1707 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2023 +#: templates/js/translated/return_order.js:314 +#: templates/js/translated/sales_order.js:802 +#: templates/js/translated/sales_order.js:1812 +#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 +msgid "Description" +msgstr "" + +#: InvenTree/models.py:901 stock/models.py:83 +msgid "Description (optional)" +msgstr "" + +#: InvenTree/models.py:910 +msgid "parent" +msgstr "" + +#: InvenTree/models.py:916 templates/js/translated/part.js:2794 +#: templates/js/translated/stock.js:2757 +msgid "Path" +msgstr "" + +#: InvenTree/models.py:1022 +msgid "Markdown notes (optional)" +msgstr "" + +#: InvenTree/models.py:1051 +msgid "Barcode Data" +msgstr "" + +#: InvenTree/models.py:1052 +msgid "Third party barcode data" +msgstr "" + +#: InvenTree/models.py:1058 +msgid "Barcode Hash" +msgstr "" + +#: InvenTree/models.py:1059 +msgid "Unique hash of barcode data" +msgstr "" + +#: InvenTree/models.py:1112 +msgid "Existing barcode found" +msgstr "" + +#: InvenTree/models.py:1155 +msgid "Server Error" +msgstr "" + +#: InvenTree/models.py:1156 +msgid "An error has been logged by the server." +msgstr "" + +#: InvenTree/serializers.py:62 part/models.py:4143 +msgid "Must be a valid number" +msgstr "" + +#: InvenTree/serializers.py:99 company/models.py:178 +#: company/templates/company/company_base.html:106 part/models.py:2992 +#: templates/InvenTree/settings/settings_staff_js.html:44 +#: templates/currency_data.html:5 +msgid "Currency" +msgstr "" + +#: InvenTree/serializers.py:102 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:441 +msgid "You do not have permission to change this user role." +msgstr "" + +#: InvenTree/serializers.py:453 +msgid "Only superusers can create new users" +msgstr "" + +#: InvenTree/serializers.py:472 +msgid "Your account has been created." +msgstr "" + +#: InvenTree/serializers.py:474 +msgid "Please use the password reset function to login" +msgstr "" + +#: InvenTree/serializers.py:481 +msgid "Welcome to InvenTree" +msgstr "" + +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "" + +#: InvenTree/serializers.py:576 +msgid "Invalid value" +msgstr "" + +#: InvenTree/serializers.py:596 +msgid "Data File" +msgstr "" + +#: InvenTree/serializers.py:597 +msgid "Select data file for upload" +msgstr "" + +#: InvenTree/serializers.py:614 +msgid "Unsupported file type" +msgstr "" + +#: InvenTree/serializers.py:620 +msgid "File is too large" +msgstr "" + +#: InvenTree/serializers.py:641 +msgid "No columns found in file" +msgstr "" + +#: InvenTree/serializers.py:644 +msgid "No data rows found in file" +msgstr "" + +#: InvenTree/serializers.py:757 +msgid "No data rows provided" +msgstr "" + +#: InvenTree/serializers.py:760 +msgid "No data columns supplied" +msgstr "" + +#: InvenTree/serializers.py:827 +#, python-brace-format +msgid "Missing required column: '{name}'" +msgstr "" + +#: InvenTree/serializers.py:836 +#, python-brace-format +msgid "Duplicate column: '{col}'" +msgstr "" + +#: InvenTree/serializers.py:859 +msgid "Remote Image" +msgstr "" + +#: InvenTree/serializers.py:860 +msgid "URL of remote image file" +msgstr "" + +#: InvenTree/serializers.py:878 +msgid "Downloading images from remote URL is not enabled" +msgstr "" + +#: InvenTree/status.py:66 part/serializers.py:1156 +msgid "Background worker check failed" +msgstr "" + +#: InvenTree/status.py:70 +msgid "Email backend not configured" +msgstr "" + +#: InvenTree/status.py:73 +msgid "InvenTree system health checks failed" +msgstr "" + +#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 +#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 +#: InvenTree/status_codes.py:182 generic/states/tests.py:17 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: InvenTree/status_codes.py:13 generic/states/tests.py:18 +msgid "Placed" +msgstr "" + +#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 +#: InvenTree/status_codes.py:169 generic/states/tests.py:19 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:161 +msgid "Complete" +msgstr "" + +#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 +#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 +msgid "Cancelled" +msgstr "" + +#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 +#: InvenTree/status_codes.py:67 +msgid "Lost" +msgstr "" + +#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 +#: InvenTree/status_codes.py:73 +msgid "Returned" +msgstr "" + +#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 +msgid "In Progress" +msgstr "" + +#: InvenTree/status_codes.py:43 order/models.py:1552 +#: templates/js/translated/sales_order.js:1523 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1957 +msgid "Shipped" +msgstr "" + +#: InvenTree/status_codes.py:62 +msgid "OK" +msgstr "" + +#: InvenTree/status_codes.py:63 +msgid "Attention needed" +msgstr "" + +#: InvenTree/status_codes.py:64 +msgid "Damaged" +msgstr "" + +#: InvenTree/status_codes.py:65 +msgid "Destroyed" +msgstr "" + +#: InvenTree/status_codes.py:66 +msgid "Rejected" +msgstr "" + +#: InvenTree/status_codes.py:70 +msgid "Quarantined" +msgstr "" + +#: InvenTree/status_codes.py:91 +msgid "Legacy stock tracking entry" +msgstr "" + +#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: InvenTree/status_codes.py:96 +msgid "Edited stock item" +msgstr "" + +#: InvenTree/status_codes.py:97 +msgid "Assigned serial number" +msgstr "" + +#: InvenTree/status_codes.py:100 +msgid "Stock counted" +msgstr "" + +#: InvenTree/status_codes.py:101 +msgid "Stock manually added" +msgstr "" + +#: InvenTree/status_codes.py:102 +msgid "Stock manually removed" +msgstr "" + +#: InvenTree/status_codes.py:105 +msgid "Location changed" +msgstr "" + +#: InvenTree/status_codes.py:106 +msgid "Stock updated" +msgstr "" + +#: InvenTree/status_codes.py:109 +msgid "Installed into assembly" +msgstr "" + +#: InvenTree/status_codes.py:110 +msgid "Removed from assembly" +msgstr "" + +#: InvenTree/status_codes.py:112 +msgid "Installed component item" +msgstr "" + +#: InvenTree/status_codes.py:113 +msgid "Removed component item" +msgstr "" + +#: InvenTree/status_codes.py:116 +msgid "Split from parent item" +msgstr "" + +#: InvenTree/status_codes.py:117 +msgid "Split child item" +msgstr "" + +#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 +msgid "Merged stock items" +msgstr "" + +#: InvenTree/status_codes.py:123 +msgid "Converted to variant" +msgstr "" + +#: InvenTree/status_codes.py:126 +msgid "Build order output created" +msgstr "" + +#: InvenTree/status_codes.py:127 +msgid "Build order output completed" +msgstr "" + +#: InvenTree/status_codes.py:128 +msgid "Build order output rejected" +msgstr "" + +#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 +msgid "Consumed by build order" +msgstr "" + +#: InvenTree/status_codes.py:132 +msgid "Shipped against Sales Order" +msgstr "" + +#: InvenTree/status_codes.py:135 +msgid "Received against Purchase Order" +msgstr "" + +#: InvenTree/status_codes.py:138 +msgid "Returned against Return Order" +msgstr "" + +#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: InvenTree/status_codes.py:142 +msgid "Returned from customer" +msgstr "" + +#: InvenTree/status_codes.py:149 +msgid "Production" +msgstr "" + +#: InvenTree/status_codes.py:185 +msgid "Return" +msgstr "" + +#: InvenTree/status_codes.py:188 +msgid "Repair" +msgstr "" + +#: InvenTree/status_codes.py:191 +msgid "Replace" +msgstr "" + +#: InvenTree/status_codes.py:194 +msgid "Refund" +msgstr "" + +#: InvenTree/status_codes.py:197 +msgid "Reject" +msgstr "" + +#: InvenTree/templatetags/inventree_extras.py:183 +msgid "Unknown database" +msgstr "" + +#: InvenTree/validators.py:31 InvenTree/validators.py:33 +msgid "Invalid physical unit" +msgstr "" + +#: InvenTree/validators.py:39 +msgid "Not a valid currency code" +msgstr "" + +#: InvenTree/validators.py:121 InvenTree/validators.py:137 +msgid "Overage value must not be negative" +msgstr "" + +#: InvenTree/validators.py:139 +msgid "Overage must not exceed 100%" +msgstr "" + +#: InvenTree/validators.py:145 +msgid "Invalid value for overage" +msgstr "" + +#: InvenTree/views.py:400 templates/InvenTree/settings/user.html:23 +msgid "Edit User Information" +msgstr "" + +#: InvenTree/views.py:412 templates/InvenTree/settings/user.html:20 +msgid "Set Password" +msgstr "" + +#: InvenTree/views.py:434 +msgid "Password fields must match" +msgstr "" + +#: InvenTree/views.py:442 +msgid "Wrong password provided" +msgstr "" + +#: InvenTree/views.py:650 templates/navbar.html:160 +msgid "System Information" +msgstr "" + +#: InvenTree/views.py:657 templates/navbar.html:171 +msgid "About InvenTree" +msgstr "" + +#: build/api.py:237 +msgid "Build must be cancelled before it can be deleted" +msgstr "" + +#: build/api.py:281 part/models.py:4021 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 +msgid "Consumable" +msgstr "" + +#: build/api.py:282 part/models.py:4015 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2530 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 +msgid "Optional" +msgstr "" + +#: build/api.py:283 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 +msgid "Tracked" +msgstr "" + +#: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 +#: templates/js/translated/build.js:2630 +#: templates/js/translated/sales_order.js:1929 +#: templates/js/translated/table_filters.js:571 +msgid "Allocated" +msgstr "" + +#: build/api.py:293 company/models.py:890 +#: company/templates/company/supplier_part.html:114 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:17 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/index.js:123 +#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 +msgid "Available" +msgstr "" + +#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/templates/build/build_base.html:27 +#: report/templates/report/inventree_build_order_base.html:105 +#: templates/email/build_order_completed.html:16 +#: templates/email/overdue_build_order.html:15 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 +msgid "Build Order" +msgstr "" + +#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/templates/build/index.html:8 build/templates/build/index.html:12 +#: order/templates/order/sales_order_detail.html:111 +#: order/templates/order/so_sidebar.html:13 +#: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:196 +#: templates/InvenTree/search.html:141 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:186 users/models.py:194 +msgid "Build Orders" +msgstr "" + +#: build/models.py:116 +msgid "Invalid choice for parent build" +msgstr "" + +#: build/models.py:127 +msgid "Build order part cannot be changed" +msgstr "" + +#: build/models.py:173 +msgid "Build Order Reference" +msgstr "" + +#: build/models.py:174 order/models.py:430 order/models.py:886 +#: order/models.py:1264 order/models.py:1981 part/admin.py:417 +#: part/models.py:4036 part/templates/part/upload_bom.html:54 +#: report/templates/report/inventree_bill_of_materials_report.html:139 +#: report/templates/report/inventree_po_report_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:26 +#: report/templates/report/inventree_so_report_base.html:28 +#: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 +#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2066 +#: templates/js/translated/return_order.js:729 +#: templates/js/translated/sales_order.js:1818 +msgid "Reference" +msgstr "" + +#: build/models.py:185 +msgid "Brief description of the build (optional)" +msgstr "" + +#: build/models.py:193 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "" + +#: build/models.py:194 +msgid "BuildOrder to which this build is allocated" +msgstr "" + +#: build/models.py:199 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1044 +#: order/models.py:1389 order/models.py:1532 order/models.py:1533 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3467 +#: part/models.py:3763 part/models.py:3894 part/models.py:3987 +#: part/models.py:4348 part/serializers.py:1102 part/serializers.py:1677 +#: part/templates/part/part_app_base.html:8 +#: part/templates/part/part_pricing.html:12 +#: part/templates/part/upload_bom.html:52 +#: report/templates/report/inventree_bill_of_materials_report.html:110 +#: report/templates/report/inventree_bill_of_materials_report.html:137 +#: report/templates/report/inventree_build_order_base.html:109 +#: report/templates/report/inventree_po_report_base.html:27 +#: report/templates/report/inventree_return_order_report_base.html:24 +#: report/templates/report/inventree_slr_report.html:102 +#: report/templates/report/inventree_so_report_base.html:27 +#: stock/serializers.py:267 stock/serializers.py:689 +#: templates/InvenTree/search.html:82 +#: templates/email/build_order_completed.html:17 +#: templates/email/build_order_required_stock.html:17 +#: templates/email/low_stock_notification.html:15 +#: templates/email/overdue_build_order.html:16 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 +#: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 +#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 +#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/company.js:348 +#: templates/js/translated/company.js:1106 +#: templates/js/translated/company.js:1261 +#: templates/js/translated/company.js:1549 templates/js/translated/index.js:109 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/purchase_order.js:751 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2008 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:710 +#: templates/js/translated/sales_order.js:300 +#: templates/js/translated/sales_order.js:1197 +#: templates/js/translated/sales_order.js:1598 +#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 +msgid "Part" +msgstr "" + +#: build/models.py:207 +msgid "Select part to build" +msgstr "" + +#: build/models.py:212 +msgid "Sales Order Reference" +msgstr "" + +#: build/models.py:216 +msgid "SalesOrder to which this build is allocated" +msgstr "" + +#: build/models.py:221 build/serializers.py:964 +#: templates/js/translated/build.js:1728 +#: templates/js/translated/sales_order.js:1185 +msgid "Source Location" +msgstr "" + +#: build/models.py:225 +msgid "Select location to take stock from for this build (leave blank to take from any stock location)" +msgstr "" + +#: build/models.py:230 +msgid "Destination Location" +msgstr "" + +#: build/models.py:234 +msgid "Select location where the completed items will be stored" +msgstr "" + +#: build/models.py:238 +msgid "Build Quantity" +msgstr "" + +#: build/models.py:241 +msgid "Number of stock items to build" +msgstr "" + +#: build/models.py:245 +msgid "Completed items" +msgstr "" + +#: build/models.py:247 +msgid "Number of stock items which have been completed" +msgstr "" + +#: build/models.py:251 +msgid "Build Status" +msgstr "" + +#: build/models.py:255 +msgid "Build status code" +msgstr "" + +#: build/models.py:264 build/serializers.py:280 order/serializers.py:571 +#: stock/models.py:826 stock/serializers.py:1333 +#: templates/js/translated/purchase_order.js:1129 +msgid "Batch Code" +msgstr "" + +#: build/models.py:268 build/serializers.py:281 +msgid "Batch code for this build output" +msgstr "" + +#: build/models.py:271 order/models.py:292 part/models.py:1078 +#: part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:339 +#: templates/js/translated/sales_order.js:827 +msgid "Creation Date" +msgstr "" + +#: build/models.py:275 +msgid "Target completion date" +msgstr "" + +#: build/models.py:276 +msgid "Target date for build completion. Build will be overdue after this date." +msgstr "" + +#: build/models.py:279 order/models.py:488 order/models.py:2026 +#: templates/js/translated/build.js:2245 +msgid "Completion Date" +msgstr "" + +#: build/models.py:285 +msgid "completed by" +msgstr "" + +#: build/models.py:293 templates/js/translated/build.js:2205 +msgid "Issued by" +msgstr "" + +#: build/models.py:294 +msgid "User who issued this build order" +msgstr "" + +#: build/models.py:302 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:310 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:228 part/models.py:1095 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_base.html:158 +#: templates/InvenTree/settings/settings_staff_js.html:150 +#: templates/js/translated/build.js:2217 +#: templates/js/translated/purchase_order.js:1764 +#: templates/js/translated/return_order.js:359 +#: templates/js/translated/table_filters.js:531 +msgid "Responsible" +msgstr "" + +#: build/models.py:303 +msgid "User or group responsible for this build order" +msgstr "" + +#: build/models.py:308 build/templates/build/detail.html:108 +#: company/templates/company/manufacturer_part.html:107 +#: company/templates/company/supplier_part.html:194 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:180 +#: part/templates/part/part_base.html:383 stock/models.py:822 +#: stock/templates/stock/item_base.html:200 +#: templates/js/translated/company.js:1009 +msgid "External Link" +msgstr "" + +#: build/models.py:313 +msgid "Build Priority" +msgstr "" + +#: build/models.py:316 +msgid "Priority of this build order" +msgstr "" + +#: build/models.py:323 common/models.py:129 order/admin.py:18 +#: order/models.py:274 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2142 +#: templates/js/translated/purchase_order.js:1711 +#: templates/js/translated/return_order.js:318 +#: templates/js/translated/sales_order.js:806 +#: templates/js/translated/table_filters.js:48 +#: templates/project_code_data.html:6 +msgid "Project Code" +msgstr "" + +#: build/models.py:324 +msgid "Project code for this build order" +msgstr "" + +#: build/models.py:575 +#, python-brace-format +msgid "Build order {build} has been completed" +msgstr "" + +#: build/models.py:581 +msgid "A build order has been completed" +msgstr "" + +#: build/models.py:799 build/models.py:874 +msgid "No build output specified" +msgstr "" + +#: build/models.py:802 +msgid "Build output is already completed" +msgstr "" + +#: build/models.py:805 +msgid "Build output does not match Build Order" +msgstr "" + +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 +#: build/serializers.py:831 order/models.py:526 order/serializers.py:423 +#: order/serializers.py:566 part/serializers.py:1460 part/serializers.py:1835 +#: stock/models.py:665 stock/models.py:1477 stock/serializers.py:472 +msgid "Quantity must be greater than zero" +msgstr "" + +#: build/models.py:883 build/serializers.py:228 +msgid "Quantity cannot be greater than the output quantity" +msgstr "" + +#: build/models.py:940 build/serializers.py:533 +#, python-brace-format +msgid "Build output {serial} has not passed all required tests" +msgstr "" + +#: build/models.py:1302 +msgid "Build object" +msgstr "" + +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 +#: build/serializers.py:247 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2459 +#: order/models.py:1247 order/models.py:1902 order/serializers.py:1328 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 +#: part/forms.py:48 part/models.py:3161 part/models.py:4009 +#: part/templates/part/part_pricing.html:16 +#: part/templates/part/upload_bom.html:53 +#: report/templates/report/inventree_bill_of_materials_report.html:138 +#: report/templates/report/inventree_build_order_base.html:113 +#: report/templates/report/inventree_po_report_base.html:29 +#: report/templates/report/inventree_slr_report.html:104 +#: report/templates/report/inventree_so_report_base.html:29 +#: report/templates/report/inventree_test_report_base.html:90 +#: report/templates/report/inventree_test_report_base.html:170 +#: stock/admin.py:160 stock/serializers.py:463 +#: stock/templates/stock/item_base.html:287 +#: stock/templates/stock/item_base.html:295 +#: stock/templates/stock/item_base.html:342 +#: templates/email/build_order_completed.html:18 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 +#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/company.js:1808 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/pricing.js:381 +#: templates/js/translated/pricing.js:474 +#: templates/js/translated/pricing.js:522 +#: templates/js/translated/pricing.js:616 +#: templates/js/translated/purchase_order.js:754 +#: templates/js/translated/purchase_order.js:1853 +#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/sales_order.js:317 +#: templates/js/translated/sales_order.js:1199 +#: templates/js/translated/sales_order.js:1518 +#: templates/js/translated/sales_order.js:1608 +#: templates/js/translated/sales_order.js:1698 +#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 +msgid "Quantity" +msgstr "" + +#: build/models.py:1317 +msgid "Required quantity for build order" +msgstr "" + +#: build/models.py:1397 +msgid "Build item must specify a build output, as master part is marked as trackable" +msgstr "" + +#: build/models.py:1406 +#, python-brace-format +msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" +msgstr "" + +#: build/models.py:1416 order/models.py:1853 +msgid "Stock item is over-allocated" +msgstr "" + +#: build/models.py:1422 order/models.py:1856 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: build/models.py:1428 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1489 +msgid "Selected stock item does not match BOM line" +msgstr "" + +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1172 +#: order/serializers.py:1193 stock/serializers.py:566 stock/serializers.py:1052 +#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: stock/templates/stock/item_base.html:23 +#: stock/templates/stock/item_base.html:194 +#: templates/js/translated/build.js:1742 +#: templates/js/translated/sales_order.js:301 +#: templates/js/translated/sales_order.js:1198 +#: templates/js/translated/sales_order.js:1499 +#: templates/js/translated/sales_order.js:1504 +#: templates/js/translated/sales_order.js:1605 +#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 +msgid "Stock Item" +msgstr "" + +#: build/models.py:1562 +msgid "Source stock item" +msgstr "" + +#: build/models.py:1575 +msgid "Stock quantity to allocate to build" +msgstr "" + +#: build/models.py:1583 +msgid "Install into" +msgstr "" + +#: build/models.py:1584 +msgid "Destination stock item" +msgstr "" + +#: build/serializers.py:160 build/serializers.py:840 +#: templates/js/translated/build.js:1319 +msgid "Build Output" +msgstr "" + +#: build/serializers.py:172 +msgid "Build output does not match the parent build" +msgstr "" + +#: build/serializers.py:176 +msgid "Output part does not match BuildOrder part" +msgstr "" + +#: build/serializers.py:180 +msgid "This build output has already been completed" +msgstr "" + +#: build/serializers.py:191 +msgid "This build output is not fully allocated" +msgstr "" + +#: build/serializers.py:211 build/serializers.py:248 +msgid "Enter quantity for build output" +msgstr "" + +#: build/serializers.py:269 +msgid "Integer quantity required for trackable parts" +msgstr "" + +#: build/serializers.py:272 +msgid "Integer quantity required, as the bill of materials contains trackable parts" +msgstr "" + +#: build/serializers.py:287 order/serializers.py:579 order/serializers.py:1332 +#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +msgid "Serial Numbers" +msgstr "" + +#: build/serializers.py:288 +msgid "Enter serial numbers for build outputs" +msgstr "" + +#: build/serializers.py:301 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:302 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:337 stock/api.py:978 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:555 +#: order/serializers.py:663 order/serializers.py:1668 part/serializers.py:1122 +#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 +#: stock/serializers.py:1196 stock/serializers.py:1452 +#: stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 +#: templates/js/translated/build.js:2370 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1511 +#: templates/js/translated/sales_order.js:1619 +#: templates/js/translated/sales_order.js:1627 +#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "" + +#: build/serializers.py:427 +msgid "Stock location for scrapped outputs" +msgstr "" + +#: build/serializers.py:433 +msgid "Discard Allocations" +msgstr "" + +#: build/serializers.py:434 +msgid "Discard any stock allocations for scrapped outputs" +msgstr "" + +#: build/serializers.py:439 +msgid "Reason for scrapping build output(s)" +msgstr "" + +#: build/serializers.py:499 +msgid "Location for completed build outputs" +msgstr "" + +#: build/serializers.py:505 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:910 +#: order/models.py:2005 order/serializers.py:587 stock/admin.py:165 +#: stock/serializers.py:801 stock/serializers.py:1340 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1723 +#: templates/js/translated/return_order.js:331 +#: templates/js/translated/sales_order.js:819 +#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 +msgid "Status" +msgstr "" + +#: build/serializers.py:511 +msgid "Accept Incomplete Allocation" +msgstr "" + +#: build/serializers.py:512 +msgid "Complete outputs if stock has not been fully allocated" +msgstr "" + +#: build/serializers.py:592 +msgid "Remove Allocated Stock" +msgstr "" + +#: build/serializers.py:593 +msgid "Subtract any stock which has already been allocated to this build" +msgstr "" + +#: build/serializers.py:599 +msgid "Remove Incomplete Outputs" +msgstr "" + +#: build/serializers.py:600 +msgid "Delete any build outputs which have not been completed" +msgstr "" + +#: build/serializers.py:627 +msgid "Not permitted" +msgstr "" + +#: build/serializers.py:628 +msgid "Accept as consumed by this build order" +msgstr "" + +#: build/serializers.py:629 +msgid "Deallocate before completing this build order" +msgstr "" + +#: build/serializers.py:651 +msgid "Overallocated Stock" +msgstr "" + +#: build/serializers.py:653 +msgid "How do you want to handle extra stock items assigned to the build order" +msgstr "" + +#: build/serializers.py:663 +msgid "Some stock items have been overallocated" +msgstr "" + +#: build/serializers.py:668 +msgid "Accept Unallocated" +msgstr "" + +#: build/serializers.py:669 +msgid "Accept that stock items have not been fully allocated to this build order" +msgstr "" + +#: build/serializers.py:679 templates/js/translated/build.js:315 +msgid "Required stock has not been fully allocated" +msgstr "" + +#: build/serializers.py:684 order/serializers.py:291 order/serializers.py:1235 +msgid "Accept Incomplete" +msgstr "" + +#: build/serializers.py:685 +msgid "Accept that the required number of build outputs have not been completed" +msgstr "" + +#: build/serializers.py:695 templates/js/translated/build.js:319 +msgid "Required build quantity has not been completed" +msgstr "" + +#: build/serializers.py:704 templates/js/translated/build.js:303 +msgid "Build order has incomplete outputs" +msgstr "" + +#: build/serializers.py:734 +msgid "Build Line" +msgstr "" + +#: build/serializers.py:744 +msgid "Build output" +msgstr "" + +#: build/serializers.py:752 +msgid "Build output must point to the same build" +msgstr "" + +#: build/serializers.py:788 +msgid "Build Line Item" +msgstr "" + +#: build/serializers.py:802 +msgid "bom_item.part must point to the same part as the build order" +msgstr "" + +#: build/serializers.py:817 stock/serializers.py:1065 +msgid "Item must be in stock" +msgstr "" + +#: build/serializers.py:865 order/serializers.py:1226 +#, python-brace-format +msgid "Available quantity ({q}) exceeded" +msgstr "" + +#: build/serializers.py:871 +msgid "Build output must be specified for allocation of tracked parts" +msgstr "" + +#: build/serializers.py:878 +msgid "Build output cannot be specified for allocation of untracked parts" +msgstr "" + +#: build/serializers.py:902 order/serializers.py:1478 +msgid "Allocation items must be provided" +msgstr "" + +#: build/serializers.py:965 +msgid "Stock location where parts are to be sourced (leave blank to take from any location)" +msgstr "" + +#: build/serializers.py:973 +msgid "Exclude Location" +msgstr "" + +#: build/serializers.py:974 +msgid "Exclude stock items from this selected location" +msgstr "" + +#: build/serializers.py:979 +msgid "Interchangeable Stock" +msgstr "" + +#: build/serializers.py:980 +msgid "Stock items in multiple locations can be used interchangeably" +msgstr "" + +#: build/serializers.py:985 +msgid "Substitute Stock" +msgstr "" + +#: build/serializers.py:986 +msgid "Allow allocation of substitute parts" +msgstr "" + +#: build/serializers.py:991 +msgid "Optional Items" +msgstr "" + +#: build/serializers.py:992 +msgid "Allocate optional BOM items to build order" +msgstr "" + +#: build/serializers.py:1097 part/models.py:3904 part/models.py:4340 +#: stock/api.py:745 +msgid "BOM Item" +msgstr "" + +#: build/serializers.py:1106 templates/js/translated/index.js:130 +msgid "Allocated Stock" +msgstr "" + +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:815 part/serializers.py:1478 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 +msgid "On Order" +msgstr "" + +#: build/serializers.py:1116 part/serializers.py:1480 +#: templates/js/translated/build.js:2618 +#: templates/js/translated/table_filters.js:360 +msgid "In Production" +msgstr "" + +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1491 +#: part/templates/part/part_base.html:192 +#: templates/js/translated/sales_order.js:1893 +msgid "Available Stock" +msgstr "" + +#: build/tasks.py:171 +msgid "Stock required for build order" +msgstr "" + +#: build/tasks.py:188 +msgid "Overdue Build Order" +msgstr "" + +#: build/tasks.py:193 +#, python-brace-format +msgid "Build order {bo} is now overdue" +msgstr "" + +#: build/templates/build/build_base.html:18 +msgid "Part thumbnail" +msgstr "" + +#: build/templates/build/build_base.html:38 +#: company/templates/company/supplier_part.html:35 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:38 +#: order/templates/order/sales_order_base.html:38 +#: part/templates/part/part_base.html:41 +#: stock/templates/stock/item_base.html:40 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 +msgid "Barcode actions" +msgstr "" + +#: build/templates/build/build_base.html:42 +#: company/templates/company/supplier_part.html:39 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:42 +#: order/templates/order/sales_order_base.html:42 +#: part/templates/part/part_base.html:44 +#: stock/templates/stock/item_base.html:44 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: build/templates/build/build_base.html:45 +#: company/templates/company/supplier_part.html:41 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:45 +#: order/templates/order/sales_order_base.html:45 +#: part/templates/part/part_base.html:47 +#: stock/templates/stock/item_base.html:47 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 +msgid "Unlink Barcode" +msgstr "" + +#: build/templates/build/build_base.html:47 +#: company/templates/company/supplier_part.html:43 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:47 +#: order/templates/order/sales_order_base.html:47 +#: part/templates/part/part_base.html:49 +#: stock/templates/stock/item_base.html:49 +#: stock/templates/stock/location.html:61 +msgid "Link Barcode" +msgstr "" + +#: build/templates/build/build_base.html:56 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:55 +#: order/templates/order/sales_order_base.html:55 +msgid "Print actions" +msgstr "" + +#: build/templates/build/build_base.html:60 +msgid "Print build order report" +msgstr "" + +#: build/templates/build/build_base.html:67 +msgid "Build actions" +msgstr "" + +#: build/templates/build/build_base.html:71 +msgid "Edit Build" +msgstr "" + +#: build/templates/build/build_base.html:73 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:76 +msgid "Duplicate Build" +msgstr "" + +#: build/templates/build/build_base.html:79 +msgid "Delete Build" +msgstr "" + +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 +msgid "Complete Build" +msgstr "" + +#: build/templates/build/build_base.html:107 +msgid "Build Description" +msgstr "" + +#: build/templates/build/build_base.html:117 +msgid "No build outputs have been created for this build order" +msgstr "" + +#: build/templates/build/build_base.html:124 +msgid "Build Order is ready to mark as completed" +msgstr "" + +#: build/templates/build/build_base.html:129 +msgid "Build Order cannot be completed as outstanding outputs remain" +msgstr "" + +#: build/templates/build/build_base.html:134 +msgid "Required build quantity has not yet been completed" +msgstr "" + +#: build/templates/build/build_base.html:139 +msgid "Stock has not been fully allocated to this Build Order" +msgstr "" + +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:285 +#: order/models.py:1282 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:192 +#: report/templates/report/inventree_build_order_base.html:125 +#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1740 +#: templates/js/translated/purchase_order.js:2148 +#: templates/js/translated/return_order.js:347 +#: templates/js/translated/return_order.js:751 +#: templates/js/translated/sales_order.js:835 +#: templates/js/translated/sales_order.js:1867 +msgid "Target Date" +msgstr "" + +#: build/templates/build/build_base.html:165 +#, python-format +msgid "This build was due on %(target)s" +msgstr "" + +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:122 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 +msgid "Overdue" +msgstr "" + +#: build/templates/build/build_base.html:177 +#: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 +msgid "Completed Outputs" +msgstr "" + +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1457 order/models.py:1524 +#: order/models.py:1638 order/models.py:1790 +#: order/templates/order/sales_order_base.html:9 +#: order/templates/order/sales_order_base.html:28 +#: report/templates/report/inventree_build_order_base.html:135 +#: report/templates/report/inventree_so_report_base.html:14 +#: stock/templates/stock/item_base.html:369 +#: templates/email/overdue_sales_order.html:15 +#: templates/js/translated/pricing.js:929 +#: templates/js/translated/sales_order.js:769 +#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/stock.js:2924 +msgid "Sales Order" +msgstr "" + +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_base.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" +msgstr "" + +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +msgid "Priority" +msgstr "" + +#: build/templates/build/build_base.html:273 +msgid "Delete Build Order" +msgstr "" + +#: build/templates/build/build_base.html:283 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:295 +msgid "Link Barcode to Build Order" +msgstr "" + +#: build/templates/build/detail.html:15 +msgid "Build Details" +msgstr "" + +#: build/templates/build/detail.html:38 +msgid "Stock Source" +msgstr "" + +#: build/templates/build/detail.html:43 +msgid "Stock can be taken from any available location." +msgstr "" + +#: build/templates/build/detail.html:49 order/models.py:1418 +#: templates/js/translated/purchase_order.js:2190 +msgid "Destination" +msgstr "" + +#: build/templates/build/detail.html:56 +msgid "Destination location not specified" +msgstr "" + +#: build/templates/build/detail.html:73 +msgid "Allocated Parts" +msgstr "" + +#: build/templates/build/detail.html:80 stock/admin.py:163 +#: stock/templates/stock/item_base.html:162 +#: templates/js/translated/build.js:1377 +#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 +msgid "Batch" +msgstr "" + +#: build/templates/build/detail.html:133 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:186 +#: templates/js/translated/build.js:2197 +msgid "Created" +msgstr "" + +#: build/templates/build/detail.html:144 +msgid "No target date set" +msgstr "" + +#: build/templates/build/detail.html:149 +#: order/templates/order/sales_order_base.html:202 +#: templates/js/translated/table_filters.js:689 +msgid "Completed" +msgstr "" + +#: build/templates/build/detail.html:153 +msgid "Build not complete" +msgstr "" + +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +msgid "Child Build Orders" +msgstr "" + +#: build/templates/build/detail.html:177 +msgid "Allocate Stock to Build" +msgstr "" + +#: build/templates/build/detail.html:181 +msgid "Deallocate stock" +msgstr "" + +#: build/templates/build/detail.html:182 +msgid "Deallocate Stock" +msgstr "" + +#: build/templates/build/detail.html:184 +msgid "Automatically allocate stock to build" +msgstr "" + +#: build/templates/build/detail.html:185 +msgid "Auto Allocate" +msgstr "" + +#: build/templates/build/detail.html:187 +msgid "Manually allocate stock to build" +msgstr "" + +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +msgid "Allocate Stock" +msgstr "" + +#: build/templates/build/detail.html:191 +msgid "Order required parts" +msgstr "" + +#: build/templates/build/detail.html:192 +#: templates/js/translated/purchase_order.js:795 +msgid "Order Parts" +msgstr "" + +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" +msgstr "" + +#: build/templates/build/detail.html:215 +msgid "Incomplete Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:219 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/detail.html:220 +msgid "New Build Output" +msgstr "" + +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +msgid "Consumed Stock" +msgstr "" + +#: build/templates/build/detail.html:249 +msgid "Completed Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:229 +#: company/templates/company/manufacturer_part.html:141 +#: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:39 +#: order/templates/order/po_sidebar.html:9 +#: order/templates/order/purchase_order_detail.html:84 +#: order/templates/order/return_order_detail.html:70 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:124 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 +#: stock/templates/stock/stock_sidebar.html:23 +msgid "Attachments" +msgstr "" + +#: build/templates/build/detail.html:276 +msgid "Build Notes" +msgstr "" + +#: build/templates/build/detail.html:434 +msgid "Allocation Complete" +msgstr "" + +#: build/templates/build/detail.html:435 +msgid "All lines have been fully allocated" +msgstr "" + +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +msgid "New Build Order" +msgstr "" + +#: build/templates/build/sidebar.html:5 +msgid "Build Order Details" +msgstr "" + +#: build/templates/build/sidebar.html:10 +msgid "Incomplete Outputs" +msgstr "" + +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" +msgstr "" + +#: common/files.py:65 +msgid "Error reading file (invalid encoding)" +msgstr "" + +#: common/files.py:70 +msgid "Error reading file (invalid format)" +msgstr "" + +#: common/files.py:72 +msgid "Error reading file (incorrect dimension)" +msgstr "" + +#: common/files.py:74 +msgid "Error reading file (data could be corrupted)" +msgstr "" + +#: common/forms.py:12 +msgid "File" +msgstr "" + +#: common/forms.py:12 +msgid "Select file to upload" +msgstr "" + +#: common/forms.py:25 +msgid "{name.title()} File" +msgstr "" + +#: common/forms.py:26 +#, python-brace-format +msgid "Select {name} file to upload" +msgstr "" + +#: common/models.py:71 +msgid "Updated" +msgstr "" + +#: common/models.py:72 +msgid "Timestamp of last update" +msgstr "" + +#: common/models.py:105 +msgid "Site URL is locked by configuration" +msgstr "" + +#: common/models.py:130 +msgid "Unique project code" +msgstr "" + +#: common/models.py:137 +msgid "Project description" +msgstr "" + +#: common/models.py:146 +msgid "User or group responsible for this project" +msgstr "" + +#: common/models.py:744 +msgid "Settings key (must be unique - case insensitive)" +msgstr "" + +#: common/models.py:748 +msgid "Settings value" +msgstr "" + +#: common/models.py:800 +msgid "Chosen value is not a valid option" +msgstr "" + +#: common/models.py:816 +msgid "Value must be a boolean value" +msgstr "" + +#: common/models.py:824 +msgid "Value must be an integer value" +msgstr "" + +#: common/models.py:861 +msgid "Key string must be unique" +msgstr "" + +#: common/models.py:1093 +msgid "No group" +msgstr "" + +#: common/models.py:1136 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1138 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1150 +msgid "No plugin" +msgstr "" + +#: common/models.py:1236 +msgid "Restart required" +msgstr "" + +#: common/models.py:1238 +msgid "A setting has been changed which requires a server restart" +msgstr "" + +#: common/models.py:1245 +msgid "Pending migrations" +msgstr "" + +#: common/models.py:1246 +msgid "Number of pending database migrations" +msgstr "" + +#: common/models.py:1251 +msgid "Server Instance Name" +msgstr "" + +#: common/models.py:1253 +msgid "String descriptor for the server instance" +msgstr "" + +#: common/models.py:1257 +msgid "Use instance name" +msgstr "" + +#: common/models.py:1258 +msgid "Use the instance name in the title-bar" +msgstr "" + +#: common/models.py:1263 +msgid "Restrict showing `about`" +msgstr "" + +#: common/models.py:1264 +msgid "Show the `about` modal only to superusers" +msgstr "" + +#: common/models.py:1269 company/models.py:107 company/models.py:108 +msgid "Company name" +msgstr "" + +#: common/models.py:1270 +msgid "Internal company name" +msgstr "" + +#: common/models.py:1274 +msgid "Base URL" +msgstr "" + +#: common/models.py:1275 +msgid "Base URL for server instance" +msgstr "" + +#: common/models.py:1281 +msgid "Default Currency" +msgstr "" + +#: common/models.py:1282 +msgid "Select base currency for pricing calculations" +msgstr "" + +#: common/models.py:1288 +msgid "Currency Update Interval" +msgstr "" + +#: common/models.py:1290 +msgid "How often to update exchange rates (set to zero to disable)" +msgstr "" + +#: common/models.py:1293 common/models.py:1349 common/models.py:1362 +#: common/models.py:1370 common/models.py:1379 common/models.py:1388 +#: common/models.py:1590 common/models.py:1612 common/models.py:1727 +#: common/models.py:1998 +msgid "days" +msgstr "" + +#: common/models.py:1297 +msgid "Currency Update Plugin" +msgstr "" + +#: common/models.py:1298 +msgid "Currency update plugin to use" +msgstr "" + +#: common/models.py:1303 +msgid "Download from URL" +msgstr "" + +#: common/models.py:1305 +msgid "Allow download of remote images and files from external URL" +msgstr "" + +#: common/models.py:1311 +msgid "Download Size Limit" +msgstr "" + +#: common/models.py:1312 +msgid "Maximum allowable download size for remote image" +msgstr "" + +#: common/models.py:1318 +msgid "User-agent used to download from URL" +msgstr "" + +#: common/models.py:1320 +msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" +msgstr "" + +#: common/models.py:1325 +msgid "Strict URL Validation" +msgstr "" + +#: common/models.py:1326 +msgid "Require schema specification when validating URLs" +msgstr "" + +#: common/models.py:1331 +msgid "Require confirm" +msgstr "" + +#: common/models.py:1332 +msgid "Require explicit user confirmation for certain action." +msgstr "" + +#: common/models.py:1337 +msgid "Tree Depth" +msgstr "" + +#: common/models.py:1339 +msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." +msgstr "" + +#: common/models.py:1345 +msgid "Update Check Interval" +msgstr "" + +#: common/models.py:1346 +msgid "How often to check for updates (set to zero to disable)" +msgstr "" + +#: common/models.py:1352 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:1353 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:1358 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1359 +msgid "Specify number of days between automated backup events" +msgstr "" + +#: common/models.py:1365 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1367 +msgid "Background task results will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1374 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1376 +msgid "Error logs will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1383 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1385 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1392 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:1393 +msgid "Enable barcode scanner support in the web interface" +msgstr "" + +#: common/models.py:1398 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1399 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1405 +msgid "Barcode Webcam Support" +msgstr "" + +#: common/models.py:1406 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:1411 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1412 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1417 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:1418 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:1421 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:1422 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:1427 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:1428 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:1433 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:1434 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1439 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1440 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1445 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1446 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1451 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:1452 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:1457 part/admin.py:108 part/models.py:3771 +#: report/models.py:181 stock/serializers.py:99 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 +msgid "Template" +msgstr "" + +#: common/models.py:1458 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:1463 part/admin.py:91 part/admin.py:431 part/models.py:1015 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "" + +#: common/models.py:1464 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:1469 part/admin.py:95 part/models.py:1021 +#: templates/js/translated/table_filters.js:729 +msgid "Component" +msgstr "" + +#: common/models.py:1470 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:1475 part/admin.py:100 part/models.py:1033 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:1476 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:1481 part/admin.py:104 part/models.py:1039 +#: templates/js/translated/table_filters.js:755 +msgid "Salable" +msgstr "" + +#: common/models.py:1482 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:1487 part/admin.py:113 part/models.py:1027 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "" + +#: common/models.py:1488 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:1493 part/admin.py:117 part/models.py:1049 +#: part/templates/part/part_base.html:154 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 +msgid "Virtual" +msgstr "" + +#: common/models.py:1494 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:1499 +msgid "Show Import in Views" +msgstr "" + +#: common/models.py:1500 +msgid "Display the import wizard in some part views" +msgstr "" + +#: common/models.py:1505 +msgid "Show related parts" +msgstr "" + +#: common/models.py:1506 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1511 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1512 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1517 templates/js/translated/part.js:107 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1519 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1525 +msgid "Part Name Display Format" +msgstr "" + +#: common/models.py:1526 +msgid "Format to display the part name" +msgstr "" + +#: common/models.py:1532 +msgid "Part Category Default Icon" +msgstr "" + +#: common/models.py:1533 +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1537 +msgid "Enforce Parameter Units" +msgstr "" + +#: common/models.py:1539 +msgid "If units are provided, parameter values must match the specified units" +msgstr "" + +#: common/models.py:1545 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1547 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1553 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1555 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1561 +msgid "Use Supplier Pricing" +msgstr "" + +#: common/models.py:1563 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "" + +#: common/models.py:1569 +msgid "Purchase History Override" +msgstr "" + +#: common/models.py:1571 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "" + +#: common/models.py:1577 +msgid "Use Stock Item Pricing" +msgstr "" + +#: common/models.py:1579 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "" + +#: common/models.py:1585 +msgid "Stock Item Pricing Age" +msgstr "" + +#: common/models.py:1587 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "" + +#: common/models.py:1594 +msgid "Use Variant Pricing" +msgstr "" + +#: common/models.py:1595 +msgid "Include variant pricing in overall pricing calculations" +msgstr "" + +#: common/models.py:1600 +msgid "Active Variants Only" +msgstr "" + +#: common/models.py:1602 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "" + +#: common/models.py:1608 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1610 +msgid "Number of days before part pricing is automatically updated" +msgstr "" + +#: common/models.py:1617 +msgid "Internal Prices" +msgstr "" + +#: common/models.py:1618 +msgid "Enable internal prices for parts" +msgstr "" + +#: common/models.py:1623 +msgid "Internal Price Override" +msgstr "" + +#: common/models.py:1625 +msgid "If available, internal prices override price range calculations" +msgstr "" + +#: common/models.py:1631 +msgid "Enable label printing" +msgstr "" + +#: common/models.py:1632 +msgid "Enable label printing from the web interface" +msgstr "" + +#: common/models.py:1637 +msgid "Label Image DPI" +msgstr "" + +#: common/models.py:1639 +msgid "DPI resolution when generating image files to supply to label printing plugins" +msgstr "" + +#: common/models.py:1645 +msgid "Enable Reports" +msgstr "" + +#: common/models.py:1646 +msgid "Enable generation of reports" +msgstr "" + +#: common/models.py:1651 templates/stats.html:25 +msgid "Debug Mode" +msgstr "" + +#: common/models.py:1652 +msgid "Generate reports in debug mode (HTML output)" +msgstr "" + +#: common/models.py:1657 +msgid "Log Report Errors" +msgstr "" + +#: common/models.py:1658 +msgid "Log errors which occur when generating reports" +msgstr "" + +#: common/models.py:1663 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:202 +msgid "Page Size" +msgstr "" + +#: common/models.py:1664 +msgid "Default page size for PDF reports" +msgstr "" + +#: common/models.py:1669 +msgid "Enable Test Reports" +msgstr "" + +#: common/models.py:1670 +msgid "Enable generation of test reports" +msgstr "" + +#: common/models.py:1675 +msgid "Attach Test Reports" +msgstr "" + +#: common/models.py:1677 +msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" +msgstr "" + +#: common/models.py:1683 +msgid "Globally Unique Serials" +msgstr "" + +#: common/models.py:1684 +msgid "Serial numbers for stock items must be globally unique" +msgstr "" + +#: common/models.py:1689 +msgid "Autofill Serial Numbers" +msgstr "" + +#: common/models.py:1690 +msgid "Autofill serial numbers in forms" +msgstr "" + +#: common/models.py:1695 +msgid "Delete Depleted Stock" +msgstr "" + +#: common/models.py:1697 +msgid "Determines default behaviour when a stock item is depleted" +msgstr "" + +#: common/models.py:1703 +msgid "Batch Code Template" +msgstr "" + +#: common/models.py:1705 +msgid "Template for generating default batch codes for stock items" +msgstr "" + +#: common/models.py:1710 +msgid "Stock Expiry" +msgstr "" + +#: common/models.py:1711 +msgid "Enable stock expiry functionality" +msgstr "" + +#: common/models.py:1716 +msgid "Sell Expired Stock" +msgstr "" + +#: common/models.py:1717 +msgid "Allow sale of expired stock" +msgstr "" + +#: common/models.py:1722 +msgid "Stock Stale Time" +msgstr "" + +#: common/models.py:1724 +msgid "Number of days stock items are considered stale before expiring" +msgstr "" + +#: common/models.py:1731 +msgid "Build Expired Stock" +msgstr "" + +#: common/models.py:1732 +msgid "Allow building with expired stock" +msgstr "" + +#: common/models.py:1737 +msgid "Stock Ownership Control" +msgstr "" + +#: common/models.py:1738 +msgid "Enable ownership control over stock locations and items" +msgstr "" + +#: common/models.py:1743 +msgid "Stock Location Default Icon" +msgstr "" + +#: common/models.py:1744 +msgid "Stock location default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1748 +msgid "Show Installed Stock Items" +msgstr "" + +#: common/models.py:1749 +msgid "Display installed stock items in stock tables" +msgstr "" + +#: common/models.py:1754 +msgid "Check BOM when installing items" +msgstr "" + +#: common/models.py:1756 +msgid "Installed stock items must exist in the BOM for the parent part" +msgstr "" + +#: common/models.py:1762 +msgid "Build Order Reference Pattern" +msgstr "" + +#: common/models.py:1764 +msgid "Required pattern for generating Build Order reference field" +msgstr "" + +#: common/models.py:1770 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1771 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1776 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1778 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1784 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1786 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1792 +msgid "Sales Order Reference Pattern" +msgstr "" + +#: common/models.py:1794 +msgid "Required pattern for generating Sales Order reference field" +msgstr "" + +#: common/models.py:1800 +msgid "Sales Order Default Shipment" +msgstr "" + +#: common/models.py:1801 +msgid "Enable creation of default shipment with sales orders" +msgstr "" + +#: common/models.py:1806 +msgid "Edit Completed Sales Orders" +msgstr "" + +#: common/models.py:1808 +msgid "Allow editing of sales orders after they have been shipped or completed" +msgstr "" + +#: common/models.py:1814 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/models.py:1816 +msgid "Required pattern for generating Purchase Order reference field" +msgstr "" + +#: common/models.py:1822 +msgid "Edit Completed Purchase Orders" +msgstr "" + +#: common/models.py:1824 +msgid "Allow editing of purchase orders after they have been shipped or completed" +msgstr "" + +#: common/models.py:1830 +msgid "Auto Complete Purchase Orders" +msgstr "" + +#: common/models.py:1832 +msgid "Automatically mark purchase orders as complete when all line items are received" +msgstr "" + +#: common/models.py:1839 +msgid "Enable password forgot" +msgstr "" + +#: common/models.py:1840 +msgid "Enable password forgot function on the login pages" +msgstr "" + +#: common/models.py:1845 +msgid "Enable registration" +msgstr "" + +#: common/models.py:1846 +msgid "Enable self-registration for users on the login pages" +msgstr "" + +#: common/models.py:1851 +msgid "Enable SSO" +msgstr "" + +#: common/models.py:1852 +msgid "Enable SSO on the login pages" +msgstr "" + +#: common/models.py:1857 +msgid "Enable SSO registration" +msgstr "" + +#: common/models.py:1859 +msgid "Enable self-registration via SSO for users on the login pages" +msgstr "" + +#: common/models.py:1865 +msgid "Email required" +msgstr "" + +#: common/models.py:1866 +msgid "Require user to supply mail on signup" +msgstr "" + +#: common/models.py:1871 +msgid "Auto-fill SSO users" +msgstr "" + +#: common/models.py:1873 +msgid "Automatically fill out user-details from SSO account-data" +msgstr "" + +#: common/models.py:1879 +msgid "Mail twice" +msgstr "" + +#: common/models.py:1880 +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:1885 +msgid "Password twice" +msgstr "" + +#: common/models.py:1886 +msgid "On signup ask users twice for their password" +msgstr "" + +#: common/models.py:1891 +msgid "Allowed domains" +msgstr "" + +#: common/models.py:1893 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" +msgstr "" + +#: common/models.py:1899 +msgid "Group on signup" +msgstr "" + +#: common/models.py:1900 +msgid "Group to which new users are assigned on registration" +msgstr "" + +#: common/models.py:1905 +msgid "Enforce MFA" +msgstr "" + +#: common/models.py:1906 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:1911 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:1913 +msgid "Check that all plugins are installed on startup - enable in container environments" +msgstr "" + +#: common/models.py:1921 +msgid "Check for plugin updates" +msgstr "" + +#: common/models.py:1922 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:1928 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:1929 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:1935 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:1936 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:1942 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:1943 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:1949 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:1950 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:1956 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:1957 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:1963 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:1964 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:1969 +msgid "Stocktake Functionality" +msgstr "" + +#: common/models.py:1971 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgstr "" + +#: common/models.py:1977 +msgid "Exclude External Locations" +msgstr "" + +#: common/models.py:1979 +msgid "Exclude stock items in external locations from stocktake calculations" +msgstr "" + +#: common/models.py:1985 +msgid "Automatic Stocktake Period" +msgstr "" + +#: common/models.py:1987 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" +msgstr "" + +#: common/models.py:1993 +msgid "Report Deletion Interval" +msgstr "" + +#: common/models.py:1995 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:2002 +msgid "Display Users full names" +msgstr "" + +#: common/models.py:2003 +msgid "Display Users full names instead of usernames" +msgstr "" + +#: common/models.py:2008 +msgid "Block Until Tests Pass" +msgstr "" + +#: common/models.py:2010 +msgid "Prevent build outputs from being completed until all required tests pass" +msgstr "" + +#: common/models.py:2016 +msgid "Enable Test Station Data" +msgstr "" + +#: common/models.py:2017 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/models.py:2029 common/models.py:2429 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:2070 +msgid "Hide inactive parts" +msgstr "" + +#: common/models.py:2072 +msgid "Hide inactive parts in results displayed on the homepage" +msgstr "" + +#: common/models.py:2078 +msgid "Show subscribed parts" +msgstr "" + +#: common/models.py:2079 +msgid "Show subscribed parts on the homepage" +msgstr "" + +#: common/models.py:2084 +msgid "Show subscribed categories" +msgstr "" + +#: common/models.py:2085 +msgid "Show subscribed part categories on the homepage" +msgstr "" + +#: common/models.py:2090 +msgid "Show latest parts" +msgstr "" + +#: common/models.py:2091 +msgid "Show latest parts on the homepage" +msgstr "" + +#: common/models.py:2096 +msgid "Show unvalidated BOMs" +msgstr "" + +#: common/models.py:2097 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2102 +msgid "Show recent stock changes" +msgstr "" + +#: common/models.py:2103 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2108 +msgid "Show low stock" +msgstr "" + +#: common/models.py:2109 +msgid "Show low stock items on the homepage" +msgstr "" + +#: common/models.py:2114 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:2115 +msgid "Show depleted stock items on the homepage" +msgstr "" + +#: common/models.py:2120 +msgid "Show needed stock" +msgstr "" + +#: common/models.py:2121 +msgid "Show stock items needed for builds on the homepage" +msgstr "" + +#: common/models.py:2126 +msgid "Show expired stock" +msgstr "" + +#: common/models.py:2127 +msgid "Show expired stock items on the homepage" +msgstr "" + +#: common/models.py:2132 +msgid "Show stale stock" +msgstr "" + +#: common/models.py:2133 +msgid "Show stale stock items on the homepage" +msgstr "" + +#: common/models.py:2138 +msgid "Show pending builds" +msgstr "" + +#: common/models.py:2139 +msgid "Show pending builds on the homepage" +msgstr "" + +#: common/models.py:2144 +msgid "Show overdue builds" +msgstr "" + +#: common/models.py:2145 +msgid "Show overdue builds on the homepage" +msgstr "" + +#: common/models.py:2150 +msgid "Show outstanding POs" +msgstr "" + +#: common/models.py:2151 +msgid "Show outstanding POs on the homepage" +msgstr "" + +#: common/models.py:2156 +msgid "Show overdue POs" +msgstr "" + +#: common/models.py:2157 +msgid "Show overdue POs on the homepage" +msgstr "" + +#: common/models.py:2162 +msgid "Show outstanding SOs" +msgstr "" + +#: common/models.py:2163 +msgid "Show outstanding SOs on the homepage" +msgstr "" + +#: common/models.py:2168 +msgid "Show overdue SOs" +msgstr "" + +#: common/models.py:2169 +msgid "Show overdue SOs on the homepage" +msgstr "" + +#: common/models.py:2174 +msgid "Show pending SO shipments" +msgstr "" + +#: common/models.py:2175 +msgid "Show pending SO shipments on the homepage" +msgstr "" + +#: common/models.py:2180 +msgid "Show News" +msgstr "" + +#: common/models.py:2181 +msgid "Show news on the homepage" +msgstr "" + +#: common/models.py:2186 +msgid "Inline label display" +msgstr "" + +#: common/models.py:2188 +msgid "Display PDF labels in the browser, instead of downloading as a file" +msgstr "" + +#: common/models.py:2194 +msgid "Default label printer" +msgstr "" + +#: common/models.py:2196 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:2202 +msgid "Inline report display" +msgstr "" + +#: common/models.py:2204 +msgid "Display PDF reports in the browser, instead of downloading as a file" +msgstr "" + +#: common/models.py:2210 +msgid "Search Parts" +msgstr "" + +#: common/models.py:2211 +msgid "Display parts in search preview window" +msgstr "" + +#: common/models.py:2216 +msgid "Search Supplier Parts" +msgstr "" + +#: common/models.py:2217 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2222 +msgid "Search Manufacturer Parts" +msgstr "" + +#: common/models.py:2223 +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2228 +msgid "Hide Inactive Parts" +msgstr "" + +#: common/models.py:2229 +msgid "Excluded inactive parts from search preview window" +msgstr "" + +#: common/models.py:2234 +msgid "Search Categories" +msgstr "" + +#: common/models.py:2235 +msgid "Display part categories in search preview window" +msgstr "" + +#: common/models.py:2240 +msgid "Search Stock" +msgstr "" + +#: common/models.py:2241 +msgid "Display stock items in search preview window" +msgstr "" + +#: common/models.py:2246 +msgid "Hide Unavailable Stock Items" +msgstr "" + +#: common/models.py:2248 +msgid "Exclude stock items which are not available from the search preview window" +msgstr "" + +#: common/models.py:2254 +msgid "Search Locations" +msgstr "" + +#: common/models.py:2255 +msgid "Display stock locations in search preview window" +msgstr "" + +#: common/models.py:2260 +msgid "Search Companies" +msgstr "" + +#: common/models.py:2261 +msgid "Display companies in search preview window" +msgstr "" + +#: common/models.py:2266 +msgid "Search Build Orders" +msgstr "" + +#: common/models.py:2267 +msgid "Display build orders in search preview window" +msgstr "" + +#: common/models.py:2272 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2273 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2278 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2280 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2286 +msgid "Search Sales Orders" +msgstr "" + +#: common/models.py:2287 +msgid "Display sales orders in search preview window" +msgstr "" + +#: common/models.py:2292 +msgid "Exclude Inactive Sales Orders" +msgstr "" + +#: common/models.py:2294 +msgid "Exclude inactive sales orders from search preview window" +msgstr "" + +#: common/models.py:2300 +msgid "Search Return Orders" +msgstr "" + +#: common/models.py:2301 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:2306 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:2308 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:2314 +msgid "Search Preview Results" +msgstr "" + +#: common/models.py:2316 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:2322 +msgid "Regex Search" +msgstr "" + +#: common/models.py:2323 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2328 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2329 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2334 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2335 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2340 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2341 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2346 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2347 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2352 +msgid "Date Format" +msgstr "" + +#: common/models.py:2353 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2366 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2367 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2372 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2374 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2380 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2382 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2388 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2389 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2394 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2396 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2402 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2404 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2410 +msgid "Receive error reports" +msgstr "" + +#: common/models.py:2411 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/models.py:2416 +msgid "Last used printing machines" +msgstr "" + +#: common/models.py:2417 +msgid "Save the last used printing machines for a user" +msgstr "" + +#: common/models.py:2460 +msgid "Price break quantity" +msgstr "" + +#: common/models.py:2467 company/serializers.py:486 order/admin.py:42 +#: order/models.py:1321 order/models.py:2226 +#: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 +#: templates/js/translated/pricing.js:621 +#: templates/js/translated/return_order.js:741 +msgid "Price" +msgstr "" + +#: common/models.py:2468 +msgid "Unit price at specified quantity" +msgstr "" + +#: common/models.py:2639 common/models.py:2824 +msgid "Endpoint" +msgstr "" + +#: common/models.py:2640 +msgid "Endpoint at which this webhook is received" +msgstr "" + +#: common/models.py:2650 +msgid "Name for this webhook" +msgstr "" + +#: common/models.py:2654 machine/models.py:39 part/admin.py:88 +#: part/models.py:1044 plugin/models.py:56 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 users/models.py:169 +msgid "Active" +msgstr "" + +#: common/models.py:2654 +msgid "Is this webhook active" +msgstr "" + +#: common/models.py:2670 users/models.py:148 +msgid "Token" +msgstr "" + +#: common/models.py:2671 +msgid "Token for access" +msgstr "" + +#: common/models.py:2679 +msgid "Secret" +msgstr "" + +#: common/models.py:2680 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:2788 +msgid "Message ID" +msgstr "" + +#: common/models.py:2789 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:2797 +msgid "Host" +msgstr "" + +#: common/models.py:2798 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:2806 +msgid "Header" +msgstr "" + +#: common/models.py:2807 +msgid "Header of this message" +msgstr "" + +#: common/models.py:2814 +msgid "Body" +msgstr "" + +#: common/models.py:2815 +msgid "Body of this message" +msgstr "" + +#: common/models.py:2825 +msgid "Endpoint on which this message was received" +msgstr "" + +#: common/models.py:2830 +msgid "Worked on" +msgstr "" + +#: common/models.py:2831 +msgid "Was the work on this message finished?" +msgstr "" + +#: common/models.py:2957 +msgid "Id" +msgstr "" + +#: common/models.py:2959 templates/js/translated/company.js:955 +#: templates/js/translated/news.js:44 +msgid "Title" +msgstr "" + +#: common/models.py:2963 templates/js/translated/news.js:60 +msgid "Published" +msgstr "" + +#: common/models.py:2965 templates/InvenTree/settings/plugin_settings.html:32 +#: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 +msgid "Author" +msgstr "" + +#: common/models.py:2967 templates/js/translated/news.js:52 +msgid "Summary" +msgstr "" + +#: common/models.py:2970 +msgid "Read" +msgstr "" + +#: common/models.py:2970 +msgid "Was this news item read?" +msgstr "" + +#: common/models.py:2987 company/models.py:155 part/models.py:928 +#: report/templates/report/inventree_bill_of_materials_report.html:126 +#: report/templates/report/inventree_bill_of_materials_report.html:148 +#: report/templates/report/inventree_return_order_report_base.html:35 +#: stock/templates/stock/item_base.html:133 templates/503.html:31 +#: templates/hover_image.html:7 templates/hover_image.html:9 +#: templates/modals.html:6 +msgid "Image" +msgstr "" + +#: common/models.py:2987 +msgid "Image file" +msgstr "" + +#: common/models.py:3029 +msgid "Unit name must be a valid identifier" +msgstr "" + +#: common/models.py:3048 +msgid "Unit name" +msgstr "" + +#: common/models.py:3055 templates/InvenTree/settings/settings_staff_js.html:75 +msgid "Symbol" +msgstr "" + +#: common/models.py:3056 +msgid "Optional unit symbol" +msgstr "" + +#: common/models.py:3063 templates/InvenTree/settings/settings_staff_js.html:71 +msgid "Definition" +msgstr "" + +#: common/models.py:3064 +msgid "Unit definition" +msgstr "" + +#: common/notifications.py:314 +#, python-brace-format +msgid "New {verbose_name}" +msgstr "" + +#: common/notifications.py:316 +msgid "A new order has been created and assigned to you" +msgstr "" + +#: common/notifications.py:322 +#, python-brace-format +msgid "{verbose_name} canceled" +msgstr "" + +#: common/notifications.py:324 +msgid "A order that is assigned to you was canceled" +msgstr "" + +#: common/notifications.py:330 common/notifications.py:337 +msgid "Items Received" +msgstr "" + +#: common/notifications.py:332 +msgid "Items have been received against a purchase order" +msgstr "" + +#: common/notifications.py:339 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:457 +msgid "Error raised by plugin" +msgstr "" + +#: common/serializers.py:333 +msgid "Is Running" +msgstr "" + +#: common/serializers.py:339 +msgid "Pending Tasks" +msgstr "" + +#: common/serializers.py:345 +msgid "Scheduled Tasks" +msgstr "" + +#: common/serializers.py:351 +msgid "Failed Tasks" +msgstr "" + +#: common/serializers.py:366 +msgid "Task ID" +msgstr "" + +#: common/serializers.py:366 +msgid "Unique task ID" +msgstr "" + +#: common/serializers.py:368 +msgid "Lock" +msgstr "" + +#: common/serializers.py:368 +msgid "Lock time" +msgstr "" + +#: common/serializers.py:370 +msgid "Task name" +msgstr "" + +#: common/serializers.py:372 +msgid "Function" +msgstr "" + +#: common/serializers.py:372 +msgid "Function name" +msgstr "" + +#: common/serializers.py:374 +msgid "Arguments" +msgstr "" + +#: common/serializers.py:374 +msgid "Task arguments" +msgstr "" + +#: common/serializers.py:377 +msgid "Keyword Arguments" +msgstr "" + +#: common/serializers.py:377 +msgid "Task keyword arguments" +msgstr "" + +#: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 +#: order/templates/order/purchase_order_detail.html:24 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: templates/patterns/wizard/upload.html:37 +msgid "Upload File" +msgstr "" + +#: common/views.py:84 order/templates/order/order_wizard/match_fields.html:52 +#: order/views.py:119 +#: part/templates/part/import_wizard/ajax_match_fields.html:45 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: templates/patterns/wizard/match_fields.html:51 +msgid "Match Fields" +msgstr "" + +#: common/views.py:84 +msgid "Match Items" +msgstr "" + +#: common/views.py:401 +msgid "Fields matching failed" +msgstr "" + +#: common/views.py:464 +msgid "Parts imported" +msgstr "" + +#: common/views.py:494 order/templates/order/order_wizard/match_fields.html:27 +#: order/templates/order/order_wizard/match_parts.html:19 +#: order/templates/order/order_wizard/po_upload.html:49 +#: part/templates/part/import_wizard/match_fields.html:27 +#: part/templates/part/import_wizard/match_references.html:19 +#: part/templates/part/import_wizard/part_upload.html:56 +#: templates/patterns/wizard/match_fields.html:26 +#: templates/patterns/wizard/upload.html:35 +msgid "Previous Step" +msgstr "" + +#: company/models.py:113 +msgid "Company description" +msgstr "" + +#: company/models.py:114 +msgid "Description of the company" +msgstr "" + +#: company/models.py:119 company/templates/company/company_base.html:100 +#: templates/InvenTree/settings/plugin_settings.html:54 +#: templates/js/translated/company.js:522 +msgid "Website" +msgstr "" + +#: company/models.py:119 +msgid "Company website URL" +msgstr "" + +#: company/models.py:124 +msgid "Phone number" +msgstr "" + +#: company/models.py:126 +msgid "Contact phone number" +msgstr "" + +#: company/models.py:133 +msgid "Contact email address" +msgstr "" + +#: company/models.py:138 company/templates/company/company_base.html:139 +#: order/models.py:319 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:214 +msgid "Contact" +msgstr "" + +#: company/models.py:140 +msgid "Point of contact" +msgstr "" + +#: company/models.py:146 +msgid "Link to external company information" +msgstr "" + +#: company/models.py:160 +msgid "is customer" +msgstr "" + +#: company/models.py:161 +msgid "Do you sell items to this company?" +msgstr "" + +#: company/models.py:166 +msgid "is supplier" +msgstr "" + +#: company/models.py:167 +msgid "Do you purchase items from this company?" +msgstr "" + +#: company/models.py:172 +msgid "is manufacturer" +msgstr "" + +#: company/models.py:173 +msgid "Does this company manufacture parts?" +msgstr "" + +#: company/models.py:181 +msgid "Default currency used for this company" +msgstr "" + +#: company/models.py:268 company/models.py:377 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:761 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:495 +msgid "Company" +msgstr "" + +#: company/models.py:378 +msgid "Select company" +msgstr "" + +#: company/models.py:383 +msgid "Address title" +msgstr "" + +#: company/models.py:384 +msgid "Title describing the address entry" +msgstr "" + +#: company/models.py:390 +msgid "Primary address" +msgstr "" + +#: company/models.py:391 +msgid "Set as primary address" +msgstr "" + +#: company/models.py:396 templates/js/translated/company.js:904 +#: templates/js/translated/company.js:961 +msgid "Line 1" +msgstr "" + +#: company/models.py:397 +msgid "Address line 1" +msgstr "" + +#: company/models.py:403 templates/js/translated/company.js:905 +#: templates/js/translated/company.js:967 +msgid "Line 2" +msgstr "" + +#: company/models.py:404 +msgid "Address line 2" +msgstr "" + +#: company/models.py:410 company/models.py:411 +#: templates/js/translated/company.js:973 +msgid "Postal code" +msgstr "" + +#: company/models.py:417 +msgid "City/Region" +msgstr "" + +#: company/models.py:418 +msgid "Postal code city/region" +msgstr "" + +#: company/models.py:424 +msgid "State/Province" +msgstr "" + +#: company/models.py:425 +msgid "State or province" +msgstr "" + +#: company/models.py:431 templates/js/translated/company.js:991 +msgid "Country" +msgstr "" + +#: company/models.py:432 +msgid "Address country" +msgstr "" + +#: company/models.py:438 +msgid "Courier shipping notes" +msgstr "" + +#: company/models.py:439 +msgid "Notes for shipping courier" +msgstr "" + +#: company/models.py:445 +msgid "Internal shipping notes" +msgstr "" + +#: company/models.py:446 +msgid "Shipping notes for internal use" +msgstr "" + +#: company/models.py:453 +msgid "Link to address information (external)" +msgstr "" + +#: company/models.py:484 company/models.py:785 stock/models.py:754 +#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:486 company/models.py:787 +msgid "Select part" +msgstr "" + +#: company/models.py:495 company/templates/company/company_base.html:76 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: stock/templates/stock/item_base.html:207 +#: templates/js/translated/company.js:506 +#: templates/js/translated/company.js:1108 +#: templates/js/translated/company.js:1286 +#: templates/js/translated/company.js:1601 +#: templates/js/translated/table_filters.js:796 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:496 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:502 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: templates/js/translated/company.js:351 +#: templates/js/translated/company.js:1107 +#: templates/js/translated/company.js:1302 +#: templates/js/translated/company.js:1620 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2054 +msgid "MPN" +msgstr "" + +#: company/models.py:503 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:510 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:518 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:575 company/models.py:602 company/models.py:811 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:609 +msgid "Parameter name" +msgstr "" + +#: company/models.py:615 +#: report/templates/report/inventree_test_report_base.html:104 +#: stock/models.py:2441 templates/js/translated/company.js:1156 +#: templates/js/translated/company.js:1409 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1519 +msgid "Value" +msgstr "" + +#: company/models.py:616 +msgid "Parameter value" +msgstr "" + +#: company/models.py:623 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1008 part/models.py:3622 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1415 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +msgid "Units" +msgstr "" + +#: company/models.py:624 +msgid "Parameter units" +msgstr "" + +#: company/models.py:725 +msgid "Pack units must be compatible with the base part units" +msgstr "" + +#: company/models.py:732 +msgid "Pack units must be greater than zero" +msgstr "" + +#: company/models.py:746 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:795 company/templates/company/company_base.html:81 +#: company/templates/company/supplier_part.html:129 order/models.py:453 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 +#: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:350 +#: templates/js/translated/company.js:510 +#: templates/js/translated/company.js:1574 templates/js/translated/part.js:1768 +#: templates/js/translated/pricing.js:498 +#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/table_filters.js:800 +msgid "Supplier" +msgstr "" + +#: company/models.py:796 +msgid "Select supplier" +msgstr "" + +#: company/models.py:802 part/serializers.py:510 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:812 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:819 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:827 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:834 company/templates/company/supplier_part.html:187 +#: part/admin.py:418 part/models.py:4044 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_po_report_base.html:32 +#: report/templates/report/inventree_return_order_report_base.html:27 +#: report/templates/report/inventree_slr_report.html:105 +#: report/templates/report/inventree_so_report_base.html:32 +#: stock/serializers.py:579 +msgid "Note" +msgstr "" + +#: company/models.py:843 part/models.py:1966 +msgid "base cost" +msgstr "" + +#: company/models.py:844 part/models.py:1967 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:851 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1350 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1636 +#: templates/js/translated/stock.js:2423 +msgid "Packaging" +msgstr "" + +#: company/models.py:852 +msgid "Part packaging" +msgstr "" + +#: company/models.py:857 templates/js/translated/company.js:1641 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:311 +#: templates/js/translated/purchase_order.js:841 +#: templates/js/translated/purchase_order.js:1103 +#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2102 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:859 +msgid "Total quantity supplied in a single pack. Leave empty for single items." +msgstr "" + +#: company/models.py:878 part/models.py:1973 +msgid "multiple" +msgstr "" + +#: company/models.py:879 +msgid "Order multiple" +msgstr "" + +#: company/models.py:891 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:897 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:898 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:155 +msgid "Default currency used for this supplier" +msgstr "" + +#: company/templates/company/company_base.html:21 +#: templates/js/translated/purchase_order.js:242 +msgid "Create Purchase Order" +msgstr "" + +#: company/templates/company/company_base.html:27 +msgid "Company actions" +msgstr "" + +#: company/templates/company/company_base.html:32 +msgid "Edit company information" +msgstr "" + +#: company/templates/company/company_base.html:33 +#: templates/js/translated/company.js:444 +msgid "Edit Company" +msgstr "" + +#: company/templates/company/company_base.html:37 +msgid "Delete company" +msgstr "" + +#: company/templates/company/company_base.html:38 +#: company/templates/company/company_base.html:162 +msgid "Delete Company" +msgstr "" + +#: company/templates/company/company_base.html:47 +#: company/templates/company/manufacturer_part.html:51 +#: company/templates/company/supplier_part.html:83 +#: part/templates/part/part_thumb.html:20 +#: report/templates/report/inventree_build_order_base.html:98 +#: report/templates/report/inventree_po_report_base.html:40 +#: report/templates/report/inventree_so_report_base.html:40 +#: report/templates/report/inventree_test_report_base.html:84 +#: report/templates/report/inventree_test_report_base.html:163 +msgid "Part image" +msgstr "" + +#: company/templates/company/company_base.html:55 +#: part/templates/part/part_thumb.html:12 +msgid "Upload new image" +msgstr "" + +#: company/templates/company/company_base.html:58 +#: part/templates/part/part_thumb.html:14 +msgid "Download image from URL" +msgstr "" + +#: company/templates/company/company_base.html:60 +#: part/templates/part/part_thumb.html:16 +msgid "Delete image" +msgstr "" + +#: company/templates/company/company_base.html:86 order/models.py:898 +#: order/models.py:1993 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:144 stock/models.py:807 +#: stock/models.py:808 stock/serializers.py:1100 +#: stock/templates/stock/item_base.html:405 +#: templates/email/overdue_sales_order.html:16 +#: templates/js/translated/company.js:502 +#: templates/js/translated/return_order.js:296 +#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:804 +msgid "Customer" +msgstr "" + +#: company/templates/company/company_base.html:111 +msgid "Uses default currency" +msgstr "" + +#: company/templates/company/company_base.html:118 order/models.py:329 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:221 +msgid "Address" +msgstr "" + +#: company/templates/company/company_base.html:125 +msgid "Phone" +msgstr "" + +#: company/templates/company/company_base.html:205 +#: part/templates/part/part_base.html:528 +msgid "Remove Image" +msgstr "" + +#: company/templates/company/company_base.html:206 +msgid "Remove associated image from this company" +msgstr "" + +#: company/templates/company/company_base.html:208 +#: part/templates/part/part_base.html:531 +#: templates/InvenTree/settings/user.html:88 +#: templates/InvenTree/settings/user_sso.html:43 +msgid "Remove" +msgstr "" + +#: company/templates/company/company_base.html:237 +#: part/templates/part/part_base.html:560 +msgid "Upload Image" +msgstr "" + +#: company/templates/company/company_base.html:252 +#: part/templates/part/part_base.html:614 +msgid "Download Image" +msgstr "" + +#: company/templates/company/detail.html:15 +#: company/templates/company/manufacturer_part_sidebar.html:7 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:147 +msgid "Supplier Parts" +msgstr "" + +#: company/templates/company/detail.html:19 +msgid "Create new supplier part" +msgstr "" + +#: company/templates/company/detail.html:20 +#: company/templates/company/manufacturer_part.html:123 +#: part/templates/part/detail.html:356 +msgid "New Supplier Part" +msgstr "" + +#: company/templates/company/detail.html:41 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:151 +msgid "Manufacturer Parts" +msgstr "" + +#: company/templates/company/detail.html:45 +msgid "Create new manufacturer part" +msgstr "" + +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +msgid "New Manufacturer Part" +msgstr "" + +#: company/templates/company/detail.html:65 +msgid "Supplier Stock" +msgstr "" + +#: company/templates/company/detail.html:75 +#: company/templates/company/sidebar.html:12 +#: company/templates/company/supplier_part_sidebar.html:7 +#: order/templates/order/order_base.html:13 +#: order/templates/order/purchase_orders.html:8 +#: order/templates/order/purchase_orders.html:12 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 +#: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 +#: templates/InvenTree/settings/sidebar.html:57 +#: templates/js/translated/search.js:205 templates/navbar.html:50 +#: users/models.py:195 +msgid "Purchase Orders" +msgstr "" + +#: company/templates/company/detail.html:79 +#: order/templates/order/purchase_orders.html:17 +msgid "Create new purchase order" +msgstr "" + +#: company/templates/company/detail.html:80 +#: order/templates/order/purchase_orders.html:18 +msgid "New Purchase Order" +msgstr "" + +#: company/templates/company/detail.html:101 +#: company/templates/company/sidebar.html:21 +#: order/templates/order/sales_order_base.html:13 +#: order/templates/order/sales_orders.html:8 +#: order/templates/order/sales_orders.html:15 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 +#: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 +#: templates/InvenTree/settings/sidebar.html:59 +#: templates/js/translated/search.js:219 templates/navbar.html:62 +#: users/models.py:196 +msgid "Sales Orders" +msgstr "" + +#: company/templates/company/detail.html:105 +#: order/templates/order/sales_orders.html:20 +msgid "Create new sales order" +msgstr "" + +#: company/templates/company/detail.html:106 +#: order/templates/order/sales_orders.html:21 +msgid "New Sales Order" +msgstr "" + +#: company/templates/company/detail.html:126 +msgid "Assigned Stock" +msgstr "" + +#: company/templates/company/detail.html:142 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:61 +#: templates/js/translated/search.js:232 templates/navbar.html:65 +#: users/models.py:197 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:146 +#: order/templates/order/return_orders.html:20 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:147 +#: order/templates/order/return_orders.html:21 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:168 +msgid "Company Notes" +msgstr "" + +#: company/templates/company/detail.html:183 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:187 +#: company/templates/company/detail.html:188 +msgid "Add Contact" +msgstr "" + +#: company/templates/company/detail.html:206 +msgid "Company addresses" +msgstr "" + +#: company/templates/company/detail.html:210 +#: company/templates/company/detail.html:211 +msgid "Add Address" +msgstr "" + +#: company/templates/company/manufacturer_part.html:15 company/views.py:37 +#: templates/InvenTree/search.html:180 templates/navbar.html:49 +msgid "Manufacturers" +msgstr "" + +#: company/templates/company/manufacturer_part.html:35 +#: company/templates/company/supplier_part.html:227 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 +msgid "Order part" +msgstr "" + +#: company/templates/company/manufacturer_part.html:39 +#: templates/js/translated/company.js:1333 +msgid "Edit manufacturer part" +msgstr "" + +#: company/templates/company/manufacturer_part.html:43 +#: templates/js/translated/company.js:1334 +msgid "Delete manufacturer part" +msgstr "" + +#: company/templates/company/manufacturer_part.html:65 +#: company/templates/company/supplier_part.html:97 +msgid "Internal Part" +msgstr "" + +#: company/templates/company/manufacturer_part.html:95 +msgid "No manufacturer information available" +msgstr "" + +#: company/templates/company/manufacturer_part.html:119 +#: company/templates/company/supplier_part.html:15 company/views.py:31 +#: part/admin.py:122 part/serializers.py:819 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 +msgid "Suppliers" +msgstr "" + +#: company/templates/company/manufacturer_part.html:156 +#: company/templates/company/manufacturer_part_sidebar.html:5 +#: part/templates/part/category_sidebar.html:20 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 +msgid "Parameters" +msgstr "" + +#: company/templates/company/manufacturer_part.html:160 +#: part/templates/part/detail.html:200 +#: templates/InvenTree/settings/category.html:12 +#: templates/InvenTree/settings/part_parameters.html:24 +msgid "New Parameter" +msgstr "" + +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 +msgid "Add Parameter" +msgstr "" + +#: company/templates/company/sidebar.html:6 +msgid "Manufactured Parts" +msgstr "" + +#: company/templates/company/sidebar.html:10 +msgid "Supplied Parts" +msgstr "" + +#: company/templates/company/sidebar.html:16 +msgid "Supplied Stock Items" +msgstr "" + +#: company/templates/company/sidebar.html:25 +msgid "Assigned Stock Items" +msgstr "" + +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 stock/models.py:765 +#: stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1590 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2279 +msgid "Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part.html:50 +#: templates/js/translated/company.js:1516 +msgid "Supplier part actions" +msgstr "" + +#: company/templates/company/supplier_part.html:55 +#: company/templates/company/supplier_part.html:56 +#: company/templates/company/supplier_part.html:228 +#: part/templates/part/detail.html:110 +msgid "Order Part" +msgstr "" + +#: company/templates/company/supplier_part.html:60 +#: company/templates/company/supplier_part.html:61 +msgid "Update Availability" +msgstr "" + +#: company/templates/company/supplier_part.html:63 +#: company/templates/company/supplier_part.html:64 +#: templates/js/translated/company.js:294 +msgid "Edit Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part.html:68 +#: company/templates/company/supplier_part.html:69 +#: templates/js/translated/company.js:269 +msgid "Duplicate Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part.html:73 +msgid "Delete Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part.html:74 +msgid "Delete Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part.html:133 +msgid "No supplier information available" +msgstr "" + +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:509 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 +#: templates/js/translated/pricing.js:510 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2029 +msgid "SKU" +msgstr "" + +#: company/templates/company/supplier_part.html:206 +msgid "Supplier Part Stock" +msgstr "" + +#: company/templates/company/supplier_part.html:209 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +msgid "Create new stock item" +msgstr "" + +#: company/templates/company/supplier_part.html:210 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: templates/js/translated/stock.js:537 +msgid "New Stock Item" +msgstr "" + +#: company/templates/company/supplier_part.html:223 +msgid "Supplier Part Orders" +msgstr "" + +#: company/templates/company/supplier_part.html:246 +msgid "Pricing Information" +msgstr "" + +#: company/templates/company/supplier_part.html:251 +#: templates/js/translated/company.js:398 +#: templates/js/translated/pricing.js:684 +msgid "Add Price Break" +msgstr "" + +#: company/templates/company/supplier_part.html:276 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:287 +msgid "Link Barcode to Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part.html:359 +msgid "Update Part Availability" +msgstr "" + +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:818 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:184 +#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location_sidebar.html:7 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: users/models.py:193 +msgid "Stock Items" +msgstr "" + +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "" + +#: company/views.py:32 +msgid "New Supplier" +msgstr "" + +#: company/views.py:38 +msgid "New Manufacturer" +msgstr "" + +#: company/views.py:43 templates/InvenTree/search.html:210 +#: templates/navbar.html:60 +msgid "Customers" +msgstr "" + +#: company/views.py:44 +msgid "New Customer" +msgstr "" + +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/views.py:52 +msgid "New Company" +msgstr "" + +#: label/api.py:247 +msgid "Error printing label" +msgstr "" + +#: label/models.py:120 +msgid "Label name" +msgstr "" + +#: label/models.py:128 +msgid "Label description" +msgstr "" + +#: label/models.py:136 +msgid "Label" +msgstr "" + +#: label/models.py:137 +msgid "Label template file" +msgstr "" + +#: label/models.py:143 part/models.py:3493 report/models.py:323 +#: templates/js/translated/part.js:2900 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "" + +#: label/models.py:144 +msgid "Label template is enabled" +msgstr "" + +#: label/models.py:149 +msgid "Width [mm]" +msgstr "" + +#: label/models.py:150 +msgid "Label width, specified in mm" +msgstr "" + +#: label/models.py:156 +msgid "Height [mm]" +msgstr "" + +#: label/models.py:157 +msgid "Label height, specified in mm" +msgstr "" + +#: label/models.py:163 report/models.py:316 +msgid "Filename Pattern" +msgstr "" + +#: label/models.py:164 +msgid "Pattern for generating label filenames" +msgstr "" + +#: label/models.py:313 label/models.py:352 label/models.py:377 +#: label/models.py:412 +msgid "Query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: label/models.py:314 label/models.py:353 label/models.py:378 +#: label/models.py:413 report/models.py:344 report/models.py:495 +#: report/models.py:531 report/models.py:567 report/models.py:749 +msgid "Filters" +msgstr "" + +#: label/templates/label/part/part_label.html:31 +#: label/templates/label/stockitem/qr.html:21 +#: label/templates/label/stocklocation/qr.html:20 +#: templates/allauth_2fa/setup.html:18 +#: web/static/web/assets/TemplateManagementPanel-e180d0d6.js:20 +msgid "QR Code" +msgstr "" + +#: label/templates/label/part/part_label_code128.html:31 +#: label/templates/label/stocklocation/qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" +msgstr "" + +#: machine/machine_types/label_printer.py:217 +msgid "Copies" +msgstr "" + +#: machine/machine_types/label_printer.py:218 +msgid "Number of copies to print for each label" +msgstr "" + +#: machine/machine_types/label_printer.py:233 +msgid "Connected" +msgstr "" + +#: machine/machine_types/label_printer.py:234 order/api.py:1461 +#: templates/js/translated/sales_order.js:1042 +msgid "Unknown" +msgstr "" + +#: machine/machine_types/label_printer.py:235 +msgid "Printing" +msgstr "" + +#: machine/machine_types/label_printer.py:236 +msgid "No media" +msgstr "" + +#: machine/machine_types/label_printer.py:237 +msgid "Disconnected" +msgstr "" + +#: machine/machine_types/label_printer.py:244 +msgid "Label Printer" +msgstr "" + +#: machine/machine_types/label_printer.py:245 +msgid "Directly print labels for various items." +msgstr "" + +#: machine/machine_types/label_printer.py:251 +msgid "Printer Location" +msgstr "" + +#: machine/machine_types/label_printer.py:252 +msgid "Scope the printer to a specific location" +msgstr "" + +#: machine/models.py:25 +msgid "Name of machine" +msgstr "" + +#: machine/models.py:29 +msgid "Machine Type" +msgstr "" + +#: machine/models.py:29 +msgid "Type of machine" +msgstr "" + +#: machine/models.py:34 machine/models.py:146 +msgid "Driver" +msgstr "" + +#: machine/models.py:35 +msgid "Driver used for the machine" +msgstr "" + +#: machine/models.py:39 +msgid "Machines can be disabled" +msgstr "" + +#: machine/models.py:95 +msgid "Driver available" +msgstr "" + +#: machine/models.py:100 +msgid "No errors" +msgstr "" + +#: machine/models.py:105 +msgid "Initialized" +msgstr "" + +#: machine/models.py:110 +msgid "Errors" +msgstr "" + +#: machine/models.py:117 +msgid "Machine status" +msgstr "" + +#: machine/models.py:145 +msgid "Machine" +msgstr "" + +#: machine/models.py:151 +msgid "Machine Config" +msgstr "" + +#: machine/models.py:156 +msgid "Config type" +msgstr "" + +#: order/admin.py:30 order/models.py:89 +#: report/templates/report/inventree_po_report_base.html:31 +#: report/templates/report/inventree_so_report_base.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2126 +#: templates/js/translated/sales_order.js:1847 +msgid "Total Price" +msgstr "" + +#: order/api.py:236 +msgid "No matching purchase order found" +msgstr "" + +#: order/api.py:1455 order/models.py:1371 order/models.py:1478 +#: order/templates/order/order_base.html:9 +#: order/templates/order/order_base.html:18 +#: report/templates/report/inventree_po_report_base.html:14 +#: stock/templates/stock/item_base.html:176 +#: templates/email/overdue_purchase_order.html:15 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 +#: templates/js/translated/purchase_order.js:168 +#: templates/js/translated/purchase_order.js:753 +#: templates/js/translated/purchase_order.js:1674 +#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +msgid "Purchase Order" +msgstr "" + +#: order/api.py:1459 order/models.py:2193 order/models.py:2244 +#: order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report_base.html:13 +#: templates/js/translated/return_order.js:281 +#: templates/js/translated/stock.js:2941 +msgid "Return Order" +msgstr "" + +#: order/models.py:90 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:95 order/serializers.py:65 +msgid "Order Currency" +msgstr "" + +#: order/models.py:98 order/serializers.py:66 +msgid "Currency for this order (leave blank to use company default)" +msgstr "" + +#: order/models.py:234 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:266 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:275 +msgid "Select project code for this order" +msgstr "" + +#: order/models.py:279 order/models.py:1276 order/models.py:1690 +msgid "Link to external page" +msgstr "" + +#: order/models.py:287 +msgid "Expected date for order delivery. Order will be overdue after this date." +msgstr "" + +#: order/models.py:301 +msgid "Created By" +msgstr "" + +#: order/models.py:309 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:320 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:330 +msgid "Company address for this order" +msgstr "" + +#: order/models.py:431 order/models.py:887 +msgid "Order reference" +msgstr "" + +#: order/models.py:439 order/models.py:911 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:454 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:465 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1703 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:466 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:475 +msgid "received by" +msgstr "" + +#: order/models.py:481 order/models.py:2019 +msgid "Issue Date" +msgstr "" + +#: order/models.py:482 order/models.py:2020 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:489 order/models.py:2027 +msgid "Date order was completed" +msgstr "" + +#: order/models.py:533 +msgid "Part supplier must match PO supplier" +msgstr "" + +#: order/models.py:727 +msgid "Quantity must be a positive number" +msgstr "" + +#: order/models.py:899 +msgid "Company to which the items are being sold" +msgstr "" + +#: order/models.py:922 order/models.py:2012 +msgid "Customer Reference " +msgstr "" + +#: order/models.py:923 order/models.py:2013 +msgid "Customer order reference code" +msgstr "" + +#: order/models.py:927 order/models.py:1644 +#: templates/js/translated/sales_order.js:843 +#: templates/js/translated/sales_order.js:1024 +msgid "Shipment Date" +msgstr "" + +#: order/models.py:936 +msgid "shipped by" +msgstr "" + +#: order/models.py:987 +msgid "Order cannot be completed as no parts have been assigned" +msgstr "" + +#: order/models.py:992 +msgid "Only an open order can be marked as complete" +msgstr "" + +#: order/models.py:996 templates/js/translated/sales_order.js:506 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:1001 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:1248 +msgid "Item quantity" +msgstr "" + +#: order/models.py:1265 +msgid "Line item reference" +msgstr "" + +#: order/models.py:1272 +msgid "Line item notes" +msgstr "" + +#: order/models.py:1284 +msgid "Target date for this line item (leave blank to use the target date from the order)" +msgstr "" + +#: order/models.py:1305 +msgid "Line item description (optional)" +msgstr "" + +#: order/models.py:1311 +msgid "Context" +msgstr "" + +#: order/models.py:1312 +msgid "Additional context for this line" +msgstr "" + +#: order/models.py:1322 +msgid "Unit price" +msgstr "" + +#: order/models.py:1355 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:1362 +msgid "deleted" +msgstr "" + +#: order/models.py:1370 order/models.py:1477 order/models.py:1523 +#: order/models.py:1637 order/models.py:1789 order/models.py:2192 +#: order/models.py:2243 templates/js/translated/sales_order.js:1488 +msgid "Order" +msgstr "" + +#: order/models.py:1390 +msgid "Supplier part" +msgstr "" + +#: order/models.py:1397 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2170 +#: templates/js/translated/return_order.js:764 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 +msgid "Received" +msgstr "" + +#: order/models.py:1398 +msgid "Number of items received" +msgstr "" + +#: order/models.py:1406 stock/models.py:926 stock/serializers.py:400 +#: stock/templates/stock/item_base.html:183 +#: templates/js/translated/stock.js:2310 +msgid "Purchase Price" +msgstr "" + +#: order/models.py:1407 +msgid "Unit purchase price" +msgstr "" + +#: order/models.py:1422 +msgid "Where does the Purchaser want this item to be stored?" +msgstr "" + +#: order/models.py:1511 +msgid "Virtual part cannot be assigned to a sales order" +msgstr "" + +#: order/models.py:1516 +msgid "Only salable parts can be assigned to a sales order" +msgstr "" + +#: order/models.py:1542 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 +msgid "Sale Price" +msgstr "" + +#: order/models.py:1543 +msgid "Unit sale price" +msgstr "" + +#: order/models.py:1553 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1645 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1651 templates/js/translated/sales_order.js:1036 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1652 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1660 +msgid "Checked By" +msgstr "" + +#: order/models.py:1661 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1668 order/models.py:1879 order/serializers.py:1343 +#: order/serializers.py:1453 templates/js/translated/model_renderers.js:448 +msgid "Shipment" +msgstr "" + +#: order/models.py:1669 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1677 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1678 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1685 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1686 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1706 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1709 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1825 order/models.py:1827 +msgid "Stock item has not been assigned" +msgstr "" + +#: order/models.py:1834 +msgid "Cannot allocate stock item to a line with a different part" +msgstr "" + +#: order/models.py:1837 +msgid "Cannot allocate stock to a line without a part" +msgstr "" + +#: order/models.py:1840 +msgid "Allocation quantity cannot exceed stock quantity" +msgstr "" + +#: order/models.py:1859 order/serializers.py:1220 +msgid "Quantity must be 1 for serialized stock item" +msgstr "" + +#: order/models.py:1862 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:1863 plugin/base/barcodes/api.py:481 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:1871 +msgid "Line" +msgstr "" + +#: order/models.py:1880 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:1893 order/models.py:2200 +#: templates/js/translated/return_order.js:722 +msgid "Item" +msgstr "" + +#: order/models.py:1894 +msgid "Select stock item to allocate" +msgstr "" + +#: order/models.py:1903 +msgid "Enter stock allocation quantity" +msgstr "" + +#: order/models.py:1982 +msgid "Return Order reference" +msgstr "" + +#: order/models.py:1994 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:2006 +msgid "Return order status" +msgstr "" + +#: order/models.py:2185 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:2201 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:2207 +msgid "Received Date" +msgstr "" + +#: order/models.py:2208 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:2219 templates/js/translated/return_order.js:733 +#: templates/js/translated/table_filters.js:123 +msgid "Outcome" +msgstr "" + +#: order/models.py:2220 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:2227 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:277 +msgid "Order cannot be cancelled" +msgstr "" + +#: order/serializers.py:292 order/serializers.py:1236 +msgid "Allow order to be closed with incomplete line items" +msgstr "" + +#: order/serializers.py:302 order/serializers.py:1246 +msgid "Order has incomplete line items" +msgstr "" + +#: order/serializers.py:430 +msgid "Order is not open" +msgstr "" + +#: order/serializers.py:451 +msgid "Auto Pricing" +msgstr "" + +#: order/serializers.py:453 +msgid "Automatically calculate purchase price based on supplier part data" +msgstr "" + +#: order/serializers.py:463 +msgid "Purchase price currency" +msgstr "" + +#: order/serializers.py:469 +msgid "Merge Items" +msgstr "" + +#: order/serializers.py:471 +msgid "Merge items with the same part, destination and target date into one line item" +msgstr "" + +#: order/serializers.py:489 +msgid "Supplier part must be specified" +msgstr "" + +#: order/serializers.py:492 +msgid "Purchase order must be specified" +msgstr "" + +#: order/serializers.py:500 +msgid "Supplier must match purchase order" +msgstr "" + +#: order/serializers.py:501 +msgid "Purchase order must match supplier" +msgstr "" + +#: order/serializers.py:540 order/serializers.py:1314 +msgid "Line Item" +msgstr "" + +#: order/serializers.py:546 +msgid "Line item does not match purchase order" +msgstr "" + +#: order/serializers.py:556 order/serializers.py:664 order/serializers.py:1669 +msgid "Select destination location for received items" +msgstr "" + +#: order/serializers.py:572 templates/js/translated/purchase_order.js:1130 +msgid "Enter batch code for incoming stock items" +msgstr "" + +#: order/serializers.py:580 templates/js/translated/purchase_order.js:1154 +msgid "Enter serial numbers for incoming stock items" +msgstr "" + +#: order/serializers.py:591 templates/js/translated/barcode.js:52 +msgid "Barcode" +msgstr "" + +#: order/serializers.py:592 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:608 +msgid "Barcode is already in use" +msgstr "" + +#: order/serializers.py:632 +msgid "An integer quantity must be provided for trackable parts" +msgstr "" + +#: order/serializers.py:680 order/serializers.py:1685 +msgid "Line items must be provided" +msgstr "" + +#: order/serializers.py:696 +msgid "Destination location must be specified" +msgstr "" + +#: order/serializers.py:707 +msgid "Supplied barcode values must be unique" +msgstr "" + +#: order/serializers.py:1064 +msgid "Sale price currency" +msgstr "" + +#: order/serializers.py:1124 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:1184 order/serializers.py:1323 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:1203 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:1333 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:1355 order/serializers.py:1461 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:1358 order/serializers.py:1464 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:1405 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:1412 +msgid "The following serial numbers are already allocated" +msgstr "" + +#: order/serializers.py:1639 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1645 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1648 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1677 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1755 +msgid "Line price currency" +msgstr "" + +#: order/tasks.py:25 +msgid "Overdue Purchase Order" +msgstr "" + +#: order/tasks.py:30 +#, python-brace-format +msgid "Purchase order {po} is now overdue" +msgstr "" + +#: order/tasks.py:75 +msgid "Overdue Sales Order" +msgstr "" + +#: order/tasks.py:80 +#, python-brace-format +msgid "Sales order {so} is now overdue" +msgstr "" + +#: order/templates/order/order_base.html:51 +msgid "Print purchase order report" +msgstr "" + +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:62 +#: order/templates/order/sales_order_base.html:62 +msgid "Export order to file" +msgstr "" + +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:72 +#: order/templates/order/sales_order_base.html:71 +msgid "Order actions" +msgstr "" + +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:76 +#: order/templates/order/sales_order_base.html:75 +msgid "Edit order" +msgstr "" + +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Cancel order" +msgstr "" + +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" +msgstr "" + +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:93 +msgid "Complete Order" +msgstr "" + +#: order/templates/order/order_base.html:91 +msgid "Supplier part thumbnail" +msgstr "" + +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:106 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:111 +msgid "Order Description" +msgstr "" + +#: order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:118 +msgid "Order Status" +msgstr "" + +#: order/templates/order/order_base.html:141 +msgid "No suppplier information available" +msgstr "" + +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:157 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:163 +#: order/templates/order/sales_order_base.html:173 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_base.html:121 +msgid "Issued" +msgstr "" + +#: order/templates/order/order_base.html:224 +msgid "Total cost" +msgstr "" + +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:239 +msgid "Total cost could not be calculated" +msgstr "" + +#: order/templates/order/order_base.html:318 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:330 +msgid "Link Barcode to Purchase Order" +msgstr "" + +#: order/templates/order/order_wizard/match_fields.html:9 +#: part/templates/part/import_wizard/ajax_match_fields.html:9 +#: part/templates/part/import_wizard/match_fields.html:9 +#: templates/patterns/wizard/match_fields.html:8 +msgid "Missing selections for the following required columns" +msgstr "" + +#: order/templates/order/order_wizard/match_fields.html:20 +#: part/templates/part/import_wizard/ajax_match_fields.html:20 +#: part/templates/part/import_wizard/match_fields.html:20 +#: templates/patterns/wizard/match_fields.html:19 +msgid "Duplicate selections found, see below. Fix them then retry submitting." +msgstr "" + +#: order/templates/order/order_wizard/match_fields.html:29 +#: order/templates/order/order_wizard/match_parts.html:21 +#: part/templates/part/import_wizard/match_fields.html:29 +#: part/templates/part/import_wizard/match_references.html:21 +#: templates/patterns/wizard/match_fields.html:28 +msgid "Submit Selections" +msgstr "" + +#: order/templates/order/order_wizard/match_fields.html:35 +#: part/templates/part/import_wizard/ajax_match_fields.html:28 +#: part/templates/part/import_wizard/match_fields.html:35 +#: templates/patterns/wizard/match_fields.html:34 +msgid "File Fields" +msgstr "" + +#: order/templates/order/order_wizard/match_fields.html:42 +#: part/templates/part/import_wizard/ajax_match_fields.html:35 +#: part/templates/part/import_wizard/match_fields.html:42 +#: templates/patterns/wizard/match_fields.html:41 +msgid "Remove column" +msgstr "" + +#: order/templates/order/order_wizard/match_fields.html:60 +#: part/templates/part/import_wizard/ajax_match_fields.html:53 +#: part/templates/part/import_wizard/match_fields.html:60 +#: templates/patterns/wizard/match_fields.html:59 +msgid "Duplicate selection" +msgstr "" + +#: order/templates/order/order_wizard/match_fields.html:71 +#: order/templates/order/order_wizard/match_parts.html:52 +#: part/templates/part/import_wizard/ajax_match_fields.html:64 +#: part/templates/part/import_wizard/ajax_match_references.html:42 +#: part/templates/part/import_wizard/match_fields.html:71 +#: part/templates/part/import_wizard/match_references.html:49 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1626 +#: templates/js/translated/purchase_order.js:696 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:506 +#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 +#: templates/patterns/wizard/match_fields.html:70 +msgid "Remove row" +msgstr "" + +#: order/templates/order/order_wizard/match_parts.html:12 +#: part/templates/part/import_wizard/ajax_match_references.html:12 +#: part/templates/part/import_wizard/match_references.html:12 +msgid "Errors exist in the submitted data" +msgstr "" + +#: order/templates/order/order_wizard/match_parts.html:28 +#: part/templates/part/import_wizard/ajax_match_references.html:21 +#: part/templates/part/import_wizard/match_references.html:28 +msgid "Row" +msgstr "" + +#: order/templates/order/order_wizard/match_parts.html:29 +msgid "Select Supplier Part" +msgstr "" + +#: order/templates/order/order_wizard/po_upload.html:8 +msgid "Return to Orders" +msgstr "" + +#: order/templates/order/order_wizard/po_upload.html:13 +msgid "Upload File for Purchase Order" +msgstr "" + +#: order/templates/order/order_wizard/po_upload.html:14 +msgid "Order is already processed. Files cannot be uploaded." +msgstr "" + +#: order/templates/order/order_wizard/po_upload.html:27 +#: part/templates/part/import_wizard/ajax_part_upload.html:10 +#: part/templates/part/import_wizard/part_upload.html:26 +#: templates/patterns/wizard/upload.html:13 +#, python-format +msgid "Step %(step)s of %(count)s" +msgstr "" + +#: order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_po_report_base.html:22 +#: report/templates/report/inventree_return_order_report_base.html:19 +#: report/templates/report/inventree_so_report_base.html:22 +msgid "Line Items" +msgstr "" + +#: order/templates/order/po_sidebar.html:7 +msgid "Received Stock" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:18 +msgid "Purchase Order Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:27 +#: order/templates/order/return_order_detail.html:24 +#: order/templates/order/sales_order_detail.html:24 +#: templates/js/translated/purchase_order.js:414 +#: templates/js/translated/return_order.js:459 +#: templates/js/translated/sales_order.js:237 +msgid "Add Line Item" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:31 +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:50 +#: order/templates/order/return_order_detail.html:45 +#: order/templates/order/sales_order_detail.html:41 +msgid "Extra Lines" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:56 +#: order/templates/order/return_order_detail.html:51 +#: order/templates/order/sales_order_detail.html:47 +msgid "Add Extra Line" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:74 +msgid "Received Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:99 +#: order/templates/order/return_order_detail.html:85 +#: order/templates/order/sales_order_detail.html:139 +msgid "Order Notes" +msgstr "" + +#: order/templates/order/return_order_base.html:18 +#: order/templates/order/sales_order_base.html:18 +msgid "Customer logo thumbnail" +msgstr "" + +#: order/templates/order/return_order_base.html:60 +msgid "Print return order report" +msgstr "" + +#: order/templates/order/return_order_base.html:64 +#: order/templates/order/sales_order_base.html:64 +msgid "Print packing list" +msgstr "" + +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:151 +#: templates/js/translated/return_order.js:309 +#: templates/js/translated/sales_order.js:797 +msgid "Customer Reference" +msgstr "" + +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:235 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1753 +#: templates/js/translated/return_order.js:381 +#: templates/js/translated/sales_order.js:855 +msgid "Total Cost" +msgstr "" + +#: order/templates/order/return_order_base.html:263 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:275 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:60 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:92 +#: templates/js/translated/sales_order.js:484 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:131 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_detail.html:99 +#: order/templates/order/so_sidebar.html:11 +msgid "Completed Shipments" +msgstr "" + +#: order/templates/order/sales_order_base.html:312 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:324 +msgid "Link Barcode to Sales Order" +msgstr "" + +#: order/templates/order/sales_order_detail.html:18 +msgid "Sales Order Items" +msgstr "" + +#: order/templates/order/sales_order_detail.html:67 +#: order/templates/order/so_sidebar.html:8 templates/InvenTree/index.html:284 +msgid "Pending Shipments" +msgstr "" + +#: order/templates/order/sales_order_detail.html:71 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +msgid "Actions" +msgstr "" + +#: order/templates/order/sales_order_detail.html:80 +msgid "New Shipment" +msgstr "" + +#: order/views.py:120 +msgid "Match Supplier Parts" +msgstr "" + +#: order/views.py:406 +msgid "Sales order not found" +msgstr "" + +#: order/views.py:412 +msgid "Price not found" +msgstr "" + +#: order/views.py:415 +#, python-brace-format +msgid "Updated {part} unit-price to {price}" +msgstr "" + +#: order/views.py:421 +#, python-brace-format +msgid "Updated {part} unit-price to {price} and quantity to {qty}" +msgstr "" + +#: part/admin.py:39 part/admin.py:404 part/models.py:3895 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:411 part/models.py:3896 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:903 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_slr_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 +#: templates/js/translated/stock.js:2035 +msgid "IPN" +msgstr "" + +#: part/admin.py:50 part/models.py:912 part/templates/part/part_base.html:277 +#: report/models.py:194 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2347 +msgid "Revision" +msgstr "" + +#: part/admin.py:53 part/admin.py:317 part/models.py:885 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +msgid "Keywords" +msgstr "" + +#: part/admin.py:60 +msgid "Part Image" +msgstr "" + +#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +msgid "Category ID" +msgstr "" + +#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +msgid "Category Name" +msgstr "" + +#: part/admin.py:71 part/admin.py:314 +msgid "Default Location ID" +msgstr "" + +#: part/admin.py:76 +msgid "Default Supplier ID" +msgstr "" + +#: part/admin.py:81 part/models.py:871 part/templates/part/part_base.html:177 +msgid "Variant Of" +msgstr "" + +#: part/admin.py:84 part/models.py:999 part/templates/part/part_base.html:203 +msgid "Minimum Stock" +msgstr "" + +#: part/admin.py:126 part/templates/part/part_base.html:197 +#: templates/js/translated/company.js:1679 +#: templates/js/translated/table_filters.js:355 +msgid "In Stock" +msgstr "" + +#: part/admin.py:138 part/templates/part/part_sidebar.html:27 +msgid "Used In" +msgstr "" + +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 +msgid "Building" +msgstr "" + +#: part/admin.py:155 part/models.py:3079 part/models.py:3093 +#: templates/js/translated/part.js:969 +msgid "Minimum Cost" +msgstr "" + +#: part/admin.py:158 part/models.py:3086 part/models.py:3100 +#: templates/js/translated/part.js:979 +msgid "Maximum Cost" +msgstr "" + +#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +msgid "Parent ID" +msgstr "" + +#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +msgid "Parent Name" +msgstr "" + +#: part/admin.py:318 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 +msgid "Category Path" +msgstr "" + +#: part/admin.py:323 part/models.py:390 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 +#: part/templates/part/category_sidebar.html:9 +#: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/navbar.html:24 users/models.py:190 +msgid "Parts" +msgstr "" + +#: part/admin.py:384 +msgid "BOM Level" +msgstr "" + +#: part/admin.py:387 +msgid "BOM Item ID" +msgstr "" + +#: part/admin.py:397 +msgid "Parent IPN" +msgstr "" + +#: part/admin.py:408 part/models.py:3897 +msgid "Part IPN" +msgstr "" + +#: part/admin.py:421 part/serializers.py:1256 +#: templates/js/translated/pricing.js:358 +#: templates/js/translated/pricing.js:1024 +msgid "Minimum Price" +msgstr "" + +#: part/admin.py:426 part/serializers.py:1271 +#: templates/js/translated/pricing.js:353 +#: templates/js/translated/pricing.js:1032 +msgid "Maximum Price" +msgstr "" + +#: part/api.py:118 +msgid "Starred" +msgstr "" + +#: part/api.py:120 +msgid "Filter by starred categories" +msgstr "" + +#: part/api.py:137 stock/api.py:281 +msgid "Depth" +msgstr "" + +#: part/api.py:137 +msgid "Filter by category depth" +msgstr "" + +#: part/api.py:155 stock/api.py:299 +msgid "Cascade" +msgstr "" + +#: part/api.py:157 +msgid "Include sub-categories in filtered results" +msgstr "" + +#: part/api.py:177 +msgid "Parent" +msgstr "" + +#: part/api.py:179 +msgid "Filter by parent category" +msgstr "" + +#: part/api.py:212 +msgid "Exclude Tree" +msgstr "" + +#: part/api.py:214 +msgid "Exclude sub-categories under the specified category" +msgstr "" + +#: part/api.py:455 +msgid "Has Results" +msgstr "" + +#: part/api.py:622 +msgid "Incoming Purchase Order" +msgstr "" + +#: part/api.py:640 +msgid "Outgoing Sales Order" +msgstr "" + +#: part/api.py:656 +msgid "Stock produced by Build Order" +msgstr "" + +#: part/api.py:740 +msgid "Stock required for Build Order" +msgstr "" + +#: part/api.py:887 +msgid "Valid" +msgstr "" + +#: part/api.py:888 +msgid "Validate entire Bill of Materials" +msgstr "" + +#: part/api.py:894 +msgid "This option must be selected" +msgstr "" + +#: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3840 +#: part/serializers.py:406 part/serializers.py:1112 +#: part/templates/part/part_base.html:260 stock/api.py:733 +#: templates/InvenTree/settings/settings_staff_js.html:300 +#: templates/js/translated/notification.js:60 +#: templates/js/translated/part.js:2377 +msgid "Category" +msgstr "" + +#: part/api.py:1828 +msgid "Uses" +msgstr "" + +#: part/bom.py:170 part/models.py:100 part/models.py:938 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +msgid "Default Location" +msgstr "" + +#: part/bom.py:171 part/serializers.py:820 +#: templates/email/low_stock_notification.html:16 +msgid "Total Stock" +msgstr "" + +#: part/forms.py:49 +msgid "Input quantity for price calculation" +msgstr "" + +#: part/models.py:81 part/models.py:3841 part/templates/part/category.html:16 +#: part/templates/part/part_app_base.html:10 +msgid "Part Category" +msgstr "" + +#: part/models.py:82 part/templates/part/category.html:136 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 +#: users/models.py:189 +msgid "Part Categories" +msgstr "" + +#: part/models.py:101 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 +msgid "Structural" +msgstr "" + +#: part/models.py:108 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:117 +msgid "Default keywords" +msgstr "" + +#: part/models.py:118 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:124 stock/models.py:89 stock/models.py:148 +#: templates/InvenTree/settings/settings_staff_js.html:456 +msgid "Icon" +msgstr "" + +#: part/models.py:125 stock/models.py:149 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:147 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:483 +msgid "Invalid choice for parent part" +msgstr "" + +#: part/models.py:531 part/models.py:538 +#, python-brace-format +msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" +msgstr "" + +#: part/models.py:550 +#, python-brace-format +msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" +msgstr "" + +#: part/models.py:615 +#, python-brace-format +msgid "IPN must match regex pattern {pattern}" +msgstr "" + +#: part/models.py:695 +msgid "Stock item with this serial number already exists" +msgstr "" + +#: part/models.py:800 +msgid "Duplicate IPN not allowed in part settings" +msgstr "" + +#: part/models.py:810 +msgid "Part with this Name, IPN and Revision already exists." +msgstr "" + +#: part/models.py:825 +msgid "Parts cannot be assigned to structural part categories!" +msgstr "" + +#: part/models.py:854 part/models.py:3896 +msgid "Part name" +msgstr "" + +#: part/models.py:859 +msgid "Is Template" +msgstr "" + +#: part/models.py:860 +msgid "Is this part a template part?" +msgstr "" + +#: part/models.py:870 +msgid "Is this part a variant of another part?" +msgstr "" + +#: part/models.py:878 +msgid "Part description (optional)" +msgstr "" + +#: part/models.py:886 +msgid "Part keywords to improve visibility in search results" +msgstr "" + +#: part/models.py:896 +msgid "Part category" +msgstr "" + +#: part/models.py:904 +msgid "Internal Part Number" +msgstr "" + +#: part/models.py:911 +msgid "Part revision or version number" +msgstr "" + +#: part/models.py:936 +msgid "Where is this item normally stored?" +msgstr "" + +#: part/models.py:982 part/templates/part/part_base.html:376 +msgid "Default Supplier" +msgstr "" + +#: part/models.py:983 +msgid "Default supplier part" +msgstr "" + +#: part/models.py:990 +msgid "Default Expiry" +msgstr "" + +#: part/models.py:991 +msgid "Expiry time (in days) for stock items of this part" +msgstr "" + +#: part/models.py:1000 +msgid "Minimum allowed stock level" +msgstr "" + +#: part/models.py:1009 +msgid "Units of measure for this part" +msgstr "" + +#: part/models.py:1016 +msgid "Can this part be built from other parts?" +msgstr "" + +#: part/models.py:1022 +msgid "Can this part be used to build other parts?" +msgstr "" + +#: part/models.py:1028 +msgid "Does this part have tracking for unique items?" +msgstr "" + +#: part/models.py:1034 +msgid "Can this part be purchased from external suppliers?" +msgstr "" + +#: part/models.py:1040 +msgid "Can this part be sold to customers?" +msgstr "" + +#: part/models.py:1044 +msgid "Is this part active?" +msgstr "" + +#: part/models.py:1050 +msgid "Is this a virtual part, such as a software product or license?" +msgstr "" + +#: part/models.py:1056 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:1057 +msgid "Stored BOM checksum" +msgstr "" + +#: part/models.py:1065 +msgid "BOM checked by" +msgstr "" + +#: part/models.py:1070 +msgid "BOM checked date" +msgstr "" + +#: part/models.py:1086 +msgid "Creation User" +msgstr "" + +#: part/models.py:1096 +msgid "Owner responsible for this part" +msgstr "" + +#: part/models.py:1101 part/templates/part/part_base.html:339 +#: stock/templates/stock/item_base.html:451 +#: templates/js/translated/part.js:2471 +msgid "Last Stocktake" +msgstr "" + +#: part/models.py:1974 +msgid "Sell multiple" +msgstr "" + +#: part/models.py:2993 +msgid "Currency used to cache pricing calculations" +msgstr "" + +#: part/models.py:3009 +msgid "Minimum BOM Cost" +msgstr "" + +#: part/models.py:3010 +msgid "Minimum cost of component parts" +msgstr "" + +#: part/models.py:3016 +msgid "Maximum BOM Cost" +msgstr "" + +#: part/models.py:3017 +msgid "Maximum cost of component parts" +msgstr "" + +#: part/models.py:3023 +msgid "Minimum Purchase Cost" +msgstr "" + +#: part/models.py:3024 +msgid "Minimum historical purchase cost" +msgstr "" + +#: part/models.py:3030 +msgid "Maximum Purchase Cost" +msgstr "" + +#: part/models.py:3031 +msgid "Maximum historical purchase cost" +msgstr "" + +#: part/models.py:3037 +msgid "Minimum Internal Price" +msgstr "" + +#: part/models.py:3038 +msgid "Minimum cost based on internal price breaks" +msgstr "" + +#: part/models.py:3044 +msgid "Maximum Internal Price" +msgstr "" + +#: part/models.py:3045 +msgid "Maximum cost based on internal price breaks" +msgstr "" + +#: part/models.py:3051 +msgid "Minimum Supplier Price" +msgstr "" + +#: part/models.py:3052 +msgid "Minimum price of part from external suppliers" +msgstr "" + +#: part/models.py:3058 +msgid "Maximum Supplier Price" +msgstr "" + +#: part/models.py:3059 +msgid "Maximum price of part from external suppliers" +msgstr "" + +#: part/models.py:3065 +msgid "Minimum Variant Cost" +msgstr "" + +#: part/models.py:3066 +msgid "Calculated minimum cost of variant parts" +msgstr "" + +#: part/models.py:3072 +msgid "Maximum Variant Cost" +msgstr "" + +#: part/models.py:3073 +msgid "Calculated maximum cost of variant parts" +msgstr "" + +#: part/models.py:3080 +msgid "Override minimum cost" +msgstr "" + +#: part/models.py:3087 +msgid "Override maximum cost" +msgstr "" + +#: part/models.py:3094 +msgid "Calculated overall minimum cost" +msgstr "" + +#: part/models.py:3101 +msgid "Calculated overall maximum cost" +msgstr "" + +#: part/models.py:3107 +msgid "Minimum Sale Price" +msgstr "" + +#: part/models.py:3108 +msgid "Minimum sale price based on price breaks" +msgstr "" + +#: part/models.py:3114 +msgid "Maximum Sale Price" +msgstr "" + +#: part/models.py:3115 +msgid "Maximum sale price based on price breaks" +msgstr "" + +#: part/models.py:3121 +msgid "Minimum Sale Cost" +msgstr "" + +#: part/models.py:3122 +msgid "Minimum historical sale price" +msgstr "" + +#: part/models.py:3128 +msgid "Maximum Sale Cost" +msgstr "" + +#: part/models.py:3129 +msgid "Maximum historical sale price" +msgstr "" + +#: part/models.py:3148 +msgid "Part for stocktake" +msgstr "" + +#: part/models.py:3153 +msgid "Item Count" +msgstr "" + +#: part/models.py:3154 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:3162 +msgid "Total available stock at time of stocktake" +msgstr "" + +#: part/models.py:3166 part/models.py:3249 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report_base.html:106 +#: templates/InvenTree/settings/plugin_settings.html:37 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 +#: templates/js/translated/pricing.js:950 +#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/stock.js:2821 +msgid "Date" +msgstr "" + +#: part/models.py:3167 +msgid "Date stocktake was performed" +msgstr "" + +#: part/models.py:3175 +msgid "Additional notes" +msgstr "" + +#: part/models.py:3185 +msgid "User who performed this stocktake" +msgstr "" + +#: part/models.py:3191 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3192 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3198 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3199 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3255 templates/InvenTree/settings/settings_staff_js.html:529 +msgid "Report" +msgstr "" + +#: part/models.py:3256 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3261 templates/InvenTree/settings/settings_staff_js.html:536 +msgid "Part Count" +msgstr "" + +#: part/models.py:3262 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3272 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3434 +msgid "Invalid template name - must include at least one alphanumeric character" +msgstr "" + +#: part/models.py:3445 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3456 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3473 templates/js/translated/part.js:2879 +msgid "Test Name" +msgstr "" + +#: part/models.py:3474 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3480 +msgid "Test Key" +msgstr "" + +#: part/models.py:3481 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3488 +msgid "Test Description" +msgstr "" + +#: part/models.py:3489 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3493 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3498 templates/js/translated/part.js:2908 +#: templates/js/translated/table_filters.js:477 +msgid "Required" +msgstr "" + +#: part/models.py:3499 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3504 templates/js/translated/part.js:2916 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3505 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3510 templates/js/translated/part.js:2923 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3512 +msgid "Does this test require a file attachment when adding a test result?" +msgstr "" + +#: part/models.py:3559 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3564 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3584 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3601 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3616 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3623 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3631 +msgid "Parameter description" +msgstr "" + +#: part/models.py:3637 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:821 +msgid "Checkbox" +msgstr "" + +#: part/models.py:3638 +msgid "Is this parameter a checkbox?" +msgstr "" + +#: part/models.py:3643 templates/js/translated/part.js:1636 +msgid "Choices" +msgstr "" + +#: part/models.py:3644 +msgid "Valid choices for this parameter (comma-separated)" +msgstr "" + +#: part/models.py:3721 +msgid "Invalid choice for parameter value" +msgstr "" + +#: part/models.py:3764 +msgid "Parent Part" +msgstr "" + +#: part/models.py:3772 part/models.py:3848 part/models.py:3849 +#: templates/InvenTree/settings/settings_staff_js.html:295 +msgid "Parameter Template" +msgstr "" + +#: part/models.py:3777 +msgid "Data" +msgstr "" + +#: part/models.py:3778 +msgid "Parameter Value" +msgstr "" + +#: part/models.py:3855 templates/InvenTree/settings/settings_staff_js.html:304 +msgid "Default Value" +msgstr "" + +#: part/models.py:3856 +msgid "Default Parameter Value" +msgstr "" + +#: part/models.py:3894 +msgid "Part ID or part name" +msgstr "" + +#: part/models.py:3895 +msgid "Unique part ID value" +msgstr "" + +#: part/models.py:3897 +msgid "Part IPN value" +msgstr "" + +#: part/models.py:3898 +msgid "Level" +msgstr "" + +#: part/models.py:3898 +msgid "BOM level" +msgstr "" + +#: part/models.py:3988 +msgid "Select parent part" +msgstr "" + +#: part/models.py:3998 +msgid "Sub part" +msgstr "" + +#: part/models.py:3999 +msgid "Select part to be used in BOM" +msgstr "" + +#: part/models.py:4010 +msgid "BOM quantity for this BOM item" +msgstr "" + +#: part/models.py:4016 +msgid "This BOM item is optional" +msgstr "" + +#: part/models.py:4022 +msgid "This BOM item is consumable (it is not tracked in build orders)" +msgstr "" + +#: part/models.py:4029 part/templates/part/upload_bom.html:55 +msgid "Overage" +msgstr "" + +#: part/models.py:4030 +msgid "Estimated build wastage quantity (absolute or percentage)" +msgstr "" + +#: part/models.py:4037 +msgid "BOM item reference" +msgstr "" + +#: part/models.py:4045 +msgid "BOM item notes" +msgstr "" + +#: part/models.py:4051 +msgid "Checksum" +msgstr "" + +#: part/models.py:4052 +msgid "BOM line checksum" +msgstr "" + +#: part/models.py:4057 templates/js/translated/table_filters.js:174 +msgid "Validated" +msgstr "" + +#: part/models.py:4058 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:4063 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1054 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:4064 +msgid "This BOM item is inherited by BOMs for variant parts" +msgstr "" + +#: part/models.py:4069 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4070 +msgid "Stock items for variant parts can be used for this BOM item" +msgstr "" + +#: part/models.py:4155 stock/models.py:649 +msgid "Quantity must be integer value for trackable parts" +msgstr "" + +#: part/models.py:4165 part/models.py:4167 +msgid "Sub part must be specified" +msgstr "" + +#: part/models.py:4307 +msgid "BOM Item Substitute" +msgstr "" + +#: part/models.py:4328 +msgid "Substitute part cannot be the same as the master part" +msgstr "" + +#: part/models.py:4341 +msgid "Parent BOM item" +msgstr "" + +#: part/models.py:4349 +msgid "Substitute part" +msgstr "" + +#: part/models.py:4365 +msgid "Part 1" +msgstr "" + +#: part/models.py:4373 +msgid "Part 2" +msgstr "" + +#: part/models.py:4374 +msgid "Select Related Part" +msgstr "" + +#: part/models.py:4393 +msgid "Part relationship cannot be created between a part and itself" +msgstr "" + +#: part/models.py:4398 +msgid "Duplicate relationship already exists" +msgstr "" + +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/templates/part/category_sidebar.html:7 +msgid "Subcategories" +msgstr "" + +#: part/serializers.py:185 +msgid "Results" +msgstr "" + +#: part/serializers.py:186 +msgid "Number of results recorded against this template" +msgstr "" + +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +msgid "Purchase currency of this stock item" +msgstr "" + +#: part/serializers.py:273 +msgid "Number of parts using this template" +msgstr "" + +#: part/serializers.py:397 +msgid "No parts selected" +msgstr "" + +#: part/serializers.py:407 +msgid "Select category" +msgstr "" + +#: part/serializers.py:437 +msgid "Original Part" +msgstr "" + +#: part/serializers.py:438 +msgid "Select original part to duplicate" +msgstr "" + +#: part/serializers.py:443 +msgid "Copy Image" +msgstr "" + +#: part/serializers.py:444 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:450 part/templates/part/detail.html:277 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:451 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:457 +msgid "Copy Parameters" +msgstr "" + +#: part/serializers.py:458 +msgid "Copy parameter data from original part" +msgstr "" + +#: part/serializers.py:464 +msgid "Copy Notes" +msgstr "" + +#: part/serializers.py:465 +msgid "Copy notes from original part" +msgstr "" + +#: part/serializers.py:478 +msgid "Initial Stock Quantity" +msgstr "" + +#: part/serializers.py:480 +msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." +msgstr "" + +#: part/serializers.py:487 +msgid "Initial Stock Location" +msgstr "" + +#: part/serializers.py:488 +msgid "Specify initial stock location for this Part" +msgstr "" + +#: part/serializers.py:500 +msgid "Select supplier (or leave blank to skip)" +msgstr "" + +#: part/serializers.py:516 +msgid "Select manufacturer (or leave blank to skip)" +msgstr "" + +#: part/serializers.py:526 +msgid "Manufacturer part number" +msgstr "" + +#: part/serializers.py:533 +msgid "Selected company is not a valid supplier" +msgstr "" + +#: part/serializers.py:542 +msgid "Selected company is not a valid manufacturer" +msgstr "" + +#: part/serializers.py:553 +msgid "Manufacturer part matching this MPN already exists" +msgstr "" + +#: part/serializers.py:560 +msgid "Supplier part matching this SKU already exists" +msgstr "" + +#: part/serializers.py:821 +msgid "External Stock" +msgstr "" + +#: part/serializers.py:823 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:826 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:851 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:852 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:858 templates/js/translated/part.js:102 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:859 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:865 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:866 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:874 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:875 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:880 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:881 +msgid "Filename of an existing part image" +msgstr "" + +#: part/serializers.py:898 +msgid "Image file does not exist" +msgstr "" + +#: part/serializers.py:1104 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:1114 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:1124 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:1130 +msgid "Exclude External Stock" +msgstr "" + +#: part/serializers.py:1131 +msgid "Exclude stock items in external locations" +msgstr "" + +#: part/serializers.py:1136 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1137 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:1142 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:1143 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:1151 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:1257 +msgid "Override calculated value for minimum price" +msgstr "" + +#: part/serializers.py:1264 +msgid "Minimum price currency" +msgstr "" + +#: part/serializers.py:1272 +msgid "Override calculated value for maximum price" +msgstr "" + +#: part/serializers.py:1279 +msgid "Maximum price currency" +msgstr "" + +#: part/serializers.py:1308 +msgid "Update" +msgstr "" + +#: part/serializers.py:1309 +msgid "Update pricing for this part" +msgstr "" + +#: part/serializers.py:1332 +#, python-brace-format +msgid "Could not convert from provided currencies to {default_currency}" +msgstr "" + +#: part/serializers.py:1339 +msgid "Minimum price must not be greater than maximum price" +msgstr "" + +#: part/serializers.py:1342 +msgid "Maximum price must not be less than minimum price" +msgstr "" + +#: part/serializers.py:1678 +msgid "Select part to copy BOM from" +msgstr "" + +#: part/serializers.py:1686 +msgid "Remove Existing Data" +msgstr "" + +#: part/serializers.py:1687 +msgid "Remove existing BOM items before copying" +msgstr "" + +#: part/serializers.py:1692 +msgid "Include Inherited" +msgstr "" + +#: part/serializers.py:1693 +msgid "Include BOM items which are inherited from templated parts" +msgstr "" + +#: part/serializers.py:1698 +msgid "Skip Invalid Rows" +msgstr "" + +#: part/serializers.py:1699 +msgid "Enable this option to skip invalid rows" +msgstr "" + +#: part/serializers.py:1704 +msgid "Copy Substitute Parts" +msgstr "" + +#: part/serializers.py:1705 +msgid "Copy substitute parts when duplicate BOM items" +msgstr "" + +#: part/serializers.py:1739 +msgid "Clear Existing BOM" +msgstr "" + +#: part/serializers.py:1740 +msgid "Delete existing BOM items before uploading" +msgstr "" + +#: part/serializers.py:1770 +msgid "No part column specified" +msgstr "" + +#: part/serializers.py:1814 +msgid "Multiple matching parts found" +msgstr "" + +#: part/serializers.py:1817 +msgid "No matching part found" +msgstr "" + +#: part/serializers.py:1820 +msgid "Part is not designated as a component" +msgstr "" + +#: part/serializers.py:1829 +msgid "Quantity not provided" +msgstr "" + +#: part/serializers.py:1837 +msgid "Invalid quantity" +msgstr "" + +#: part/serializers.py:1858 +msgid "At least one BOM item is required" +msgstr "" + +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2085 +msgid "Total Quantity" +msgstr "" + +#: part/stocktake.py:225 +msgid "Total Cost Min" +msgstr "" + +#: part/stocktake.py:226 +msgid "Total Cost Max" +msgstr "" + +#: part/stocktake.py:284 +msgid "Stocktake Report Available" +msgstr "" + +#: part/stocktake.py:285 +msgid "A new stocktake report is available for download" +msgstr "" + +#: part/tasks.py:37 +msgid "Low stock notification" +msgstr "" + +#: part/tasks.py:39 +#, python-brace-format +msgid "The available stock for {part.name} has fallen below the configured minimum level" +msgstr "" + +#: part/templates/part/bom.html:6 +msgid "You do not have permission to edit the BOM." +msgstr "" + +#: part/templates/part/bom.html:15 +msgid "The BOM this part has been changed, and must be validated" +msgstr "" + +#: part/templates/part/bom.html:17 +#, python-format +msgid "This BOM was last checked by %(checker)s on %(check_date)s" +msgstr "" + +#: part/templates/part/bom.html:21 +msgid "This BOM has not been validated." +msgstr "" + +#: part/templates/part/category.html:35 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:41 part/templates/part/category.html:45 +msgid "You are subscribed to notifications for this category" +msgstr "" + +#: part/templates/part/category.html:49 +msgid "Subscribe to notifications for this category" +msgstr "" + +#: part/templates/part/category.html:55 +msgid "Category Actions" +msgstr "" + +#: part/templates/part/category.html:60 +msgid "Edit category" +msgstr "" + +#: part/templates/part/category.html:61 +msgid "Edit Category" +msgstr "" + +#: part/templates/part/category.html:65 +msgid "Delete category" +msgstr "" + +#: part/templates/part/category.html:66 +msgid "Delete Category" +msgstr "" + +#: part/templates/part/category.html:102 +msgid "Top level part category" +msgstr "" + +#: part/templates/part/category.html:127 +msgid "Parts (Including subcategories)" +msgstr "" + +#: part/templates/part/category.html:165 +msgid "Create new part" +msgstr "" + +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +msgid "New Part" +msgstr "" + +#: part/templates/part/category.html:192 +#: templates/InvenTree/settings/part_parameters.html:7 +#: templates/InvenTree/settings/sidebar.html:49 +msgid "Part Parameters" +msgstr "" + +#: part/templates/part/category.html:211 +msgid "Create new part category" +msgstr "" + +#: part/templates/part/category.html:212 +msgid "New Category" +msgstr "" + +#: part/templates/part/category_sidebar.html:13 +msgid "Import Parts" +msgstr "" + +#: part/templates/part/copy_part.html:10 +#, python-format +msgid "Make a copy of part '%(full_name)s'." +msgstr "" + +#: part/templates/part/copy_part.html:14 +#: part/templates/part/create_part.html:11 +msgid "Possible Matching Parts" +msgstr "" + +#: part/templates/part/copy_part.html:15 +#: part/templates/part/create_part.html:12 +msgid "The new part may be a duplicate of these existing parts" +msgstr "" + +#: part/templates/part/create_part.html:17 +#, python-format +msgid "%(full_name)s - %(desc)s (%(match_per)s%% match)" +msgstr "" + +#: part/templates/part/detail.html:20 +msgid "Part Stock" +msgstr "" + +#: part/templates/part/detail.html:44 +msgid "Refresh scheduling data" +msgstr "" + +#: part/templates/part/detail.html:45 part/templates/part/prices.html:15 +#: templates/js/translated/tables.js:552 +msgid "Refresh" +msgstr "" + +#: part/templates/part/detail.html:66 +msgid "Add stocktake information" +msgstr "" + +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 +#: templates/InvenTree/settings/sidebar.html:53 +#: templates/js/translated/stock.js:2215 users/models.py:191 +msgid "Stocktake" +msgstr "" + +#: part/templates/part/detail.html:83 +msgid "Part Test Templates" +msgstr "" + +#: part/templates/part/detail.html:88 +msgid "Add Test Template" +msgstr "" + +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +msgid "Sales Order Allocations" +msgstr "" + +#: part/templates/part/detail.html:156 +msgid "Part Notes" +msgstr "" + +#: part/templates/part/detail.html:171 +msgid "Part Variants" +msgstr "" + +#: part/templates/part/detail.html:175 +msgid "Create new variant" +msgstr "" + +#: part/templates/part/detail.html:176 +msgid "New Variant" +msgstr "" + +#: part/templates/part/detail.html:199 +msgid "Add new parameter" +msgstr "" + +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +msgid "Related Parts" +msgstr "" + +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +msgid "Add Related" +msgstr "" + +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: report/templates/report/inventree_bill_of_materials_report.html:100 +msgid "Bill of Materials" +msgstr "" + +#: part/templates/part/detail.html:260 +msgid "Export actions" +msgstr "" + +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +msgid "Export BOM" +msgstr "" + +#: part/templates/part/detail.html:266 +msgid "Print BOM Report" +msgstr "" + +#: part/templates/part/detail.html:272 +msgid "BOM actions" +msgstr "" + +#: part/templates/part/detail.html:276 +msgid "Upload BOM" +msgstr "" + +#: part/templates/part/detail.html:278 +msgid "Validate BOM" +msgstr "" + +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 +msgid "Add BOM Item" +msgstr "" + +#: part/templates/part/detail.html:297 +msgid "Assemblies" +msgstr "" + +#: part/templates/part/detail.html:313 +msgid "Part Builds" +msgstr "" + +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +msgid "Build Order Allocations" +msgstr "" + +#: part/templates/part/detail.html:352 +msgid "Part Suppliers" +msgstr "" + +#: part/templates/part/detail.html:372 +msgid "Part Manufacturers" +msgstr "" + +#: part/templates/part/detail.html:659 +msgid "Related Part" +msgstr "" + +#: part/templates/part/detail.html:667 +msgid "Add Related Part" +msgstr "" + +#: part/templates/part/detail.html:752 +msgid "Add Test Result Template" +msgstr "" + +#: part/templates/part/import_wizard/ajax_part_upload.html:29 +#: part/templates/part/import_wizard/part_upload.html:14 +msgid "Insufficient privileges." +msgstr "" + +#: part/templates/part/import_wizard/part_upload.html:8 +msgid "Return to Parts" +msgstr "" + +#: part/templates/part/import_wizard/part_upload.html:13 +msgid "Import Parts from File" +msgstr "" + +#: part/templates/part/import_wizard/part_upload.html:31 +msgid "Requirements for part import" +msgstr "" + +#: part/templates/part/import_wizard/part_upload.html:33 +msgid "The part import file must contain the required named columns as provided in the " +msgstr "" + +#: part/templates/part/import_wizard/part_upload.html:33 +msgid "Part Import Template" +msgstr "" + +#: part/templates/part/import_wizard/part_upload.html:89 +msgid "Download Part Import Template" +msgstr "" + +#: part/templates/part/import_wizard/part_upload.html:92 +#: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 +msgid "Format" +msgstr "" + +#: part/templates/part/import_wizard/part_upload.html:93 +#: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 +#: templates/js/translated/order.js:130 +msgid "Select file format" +msgstr "" + +#: part/templates/part/part_app_base.html:12 +msgid "Part List" +msgstr "" + +#: part/templates/part/part_base.html:25 part/templates/part/part_base.html:29 +msgid "You are subscribed to notifications for this part" +msgstr "" + +#: part/templates/part/part_base.html:33 +msgid "Subscribe to notifications for this part" +msgstr "" + +#: part/templates/part/part_base.html:52 +#: stock/templates/stock/item_base.html:62 +#: stock/templates/stock/location.html:74 +msgid "Print Label" +msgstr "" + +#: part/templates/part/part_base.html:58 +msgid "Show pricing information" +msgstr "" + +#: part/templates/part/part_base.html:63 +#: stock/templates/stock/item_base.html:110 +#: stock/templates/stock/location.html:83 +msgid "Stock actions" +msgstr "" + +#: part/templates/part/part_base.html:70 +msgid "Count part stock" +msgstr "" + +#: part/templates/part/part_base.html:76 +msgid "Transfer part stock" +msgstr "" + +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +msgid "Part actions" +msgstr "" + +#: part/templates/part/part_base.html:94 +msgid "Duplicate part" +msgstr "" + +#: part/templates/part/part_base.html:97 +msgid "Edit part" +msgstr "" + +#: part/templates/part/part_base.html:100 +msgid "Delete part" +msgstr "" + +#: part/templates/part/part_base.html:119 +msgid "Part is a template part (variants can be made from this part)" +msgstr "" + +#: part/templates/part/part_base.html:123 +msgid "Part can be assembled from other parts" +msgstr "" + +#: part/templates/part/part_base.html:127 +msgid "Part can be used in assemblies" +msgstr "" + +#: part/templates/part/part_base.html:131 +msgid "Part stock is tracked by serial number" +msgstr "" + +#: part/templates/part/part_base.html:135 +msgid "Part can be purchased from external suppliers" +msgstr "" + +#: part/templates/part/part_base.html:139 +msgid "Part can be sold to customers" +msgstr "" + +#: part/templates/part/part_base.html:145 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:146 +#: templates/js/translated/company.js:1277 +#: templates/js/translated/company.js:1565 +#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 +msgid "Inactive" +msgstr "" + +#: part/templates/part/part_base.html:153 +msgid "Part is virtual (not a physical part)" +msgstr "" + +#: part/templates/part/part_base.html:163 +#: part/templates/part/part_base.html:682 +msgid "Show Part Details" +msgstr "" + +#: part/templates/part/part_base.html:218 +#: stock/templates/stock/item_base.html:388 +msgid "Allocated to Build Orders" +msgstr "" + +#: part/templates/part/part_base.html:227 +#: stock/templates/stock/item_base.html:381 +msgid "Allocated to Sales Orders" +msgstr "" + +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 +msgid "Minimum stock level" +msgstr "" + +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/pricing.js:391 +#: templates/js/translated/pricing.js:1054 +msgid "Price Range" +msgstr "" + +#: part/templates/part/part_base.html:352 +msgid "Latest Serial Number" +msgstr "" + +#: part/templates/part/part_base.html:356 +#: stock/templates/stock/item_base.html:322 +msgid "Search for serial number" +msgstr "" + +#: part/templates/part/part_base.html:444 +msgid "Part QR Code" +msgstr "" + +#: part/templates/part/part_base.html:461 +msgid "Link Barcode to Part" +msgstr "" + +#: part/templates/part/part_base.html:512 +msgid "Calculate" +msgstr "" + +#: part/templates/part/part_base.html:529 +msgid "Remove associated image from this part" +msgstr "" + +#: part/templates/part/part_base.html:580 +msgid "No matching images found" +msgstr "" + +#: part/templates/part/part_base.html:676 +msgid "Hide Part Details" +msgstr "" + +#: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:76 +#: part/templates/part/prices.html:227 templates/js/translated/pricing.js:485 +msgid "Supplier Pricing" +msgstr "" + +#: part/templates/part/part_pricing.html:26 +#: part/templates/part/part_pricing.html:52 +#: part/templates/part/part_pricing.html:95 +#: part/templates/part/part_pricing.html:110 +msgid "Unit Cost" +msgstr "" + +#: part/templates/part/part_pricing.html:40 +msgid "No supplier pricing available" +msgstr "" + +#: part/templates/part/part_pricing.html:48 part/templates/part/prices.html:90 +#: part/templates/part/prices.html:250 +msgid "BOM Pricing" +msgstr "" + +#: part/templates/part/part_pricing.html:66 +msgid "Unit Purchase Price" +msgstr "" + +#: part/templates/part/part_pricing.html:72 +msgid "Total Purchase Price" +msgstr "" + +#: part/templates/part/part_pricing.html:83 +msgid "No BOM pricing available" +msgstr "" + +#: part/templates/part/part_pricing.html:92 +msgid "Internal Price" +msgstr "" + +#: part/templates/part/part_pricing.html:123 +msgid "No pricing information is available for this part." +msgstr "" + +#: part/templates/part/part_scheduling.html:14 +msgid "Scheduled Quantity" +msgstr "" + +#: part/templates/part/part_sidebar.html:11 +msgid "Variants" +msgstr "" + +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:51 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +msgid "Stock" +msgstr "" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:39 +msgid "Pricing" +msgstr "" + +#: part/templates/part/part_sidebar.html:44 +msgid "Scheduling" +msgstr "" + +#: part/templates/part/part_sidebar.html:54 +msgid "Test Templates" +msgstr "" + +#: part/templates/part/part_thumb.html:11 +msgid "Select from existing images" +msgstr "" + +#: part/templates/part/prices.html:11 +msgid "Pricing Overview" +msgstr "" + +#: part/templates/part/prices.html:14 +msgid "Refresh Part Pricing" +msgstr "" + +#: part/templates/part/prices.html:17 +msgid "Override Part Pricing" +msgstr "" + +#: part/templates/part/prices.html:18 +#: templates/InvenTree/settings/settings_staff_js.html:80 +#: templates/InvenTree/settings/user.html:24 +#: templates/js/translated/helpers.js:100 +#: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 +#: templates/notes_buttons.html:4 +msgid "Edit" +msgstr "" + +#: part/templates/part/prices.html:28 stock/admin.py:247 +#: stock/templates/stock/item_base.html:446 +#: templates/js/translated/company.js:1693 +#: templates/js/translated/company.js:1703 +#: templates/js/translated/stock.js:2245 +msgid "Last Updated" +msgstr "" + +#: part/templates/part/prices.html:37 part/templates/part/prices.html:127 +msgid "Price Category" +msgstr "" + +#: part/templates/part/prices.html:38 part/templates/part/prices.html:128 +msgid "Minimum" +msgstr "" + +#: part/templates/part/prices.html:39 part/templates/part/prices.html:129 +msgid "Maximum" +msgstr "" + +#: part/templates/part/prices.html:51 part/templates/part/prices.html:174 +msgid "Internal Pricing" +msgstr "" + +#: part/templates/part/prices.html:64 part/templates/part/prices.html:206 +msgid "Purchase History" +msgstr "" + +#: part/templates/part/prices.html:98 part/templates/part/prices.html:274 +msgid "Variant Pricing" +msgstr "" + +#: part/templates/part/prices.html:106 +msgid "Pricing Overrides" +msgstr "" + +#: part/templates/part/prices.html:113 +msgid "Overall Pricing" +msgstr "" + +#: part/templates/part/prices.html:149 part/templates/part/prices.html:326 +msgid "Sale History" +msgstr "" + +#: part/templates/part/prices.html:157 +msgid "Sale price data is not available for this part" +msgstr "" + +#: part/templates/part/prices.html:164 +msgid "Price range data is not available for this part." +msgstr "" + +#: part/templates/part/prices.html:175 part/templates/part/prices.html:207 +#: part/templates/part/prices.html:228 part/templates/part/prices.html:251 +#: part/templates/part/prices.html:275 part/templates/part/prices.html:298 +#: part/templates/part/prices.html:327 +msgid "Jump to overview" +msgstr "" + +#: part/templates/part/prices.html:180 +msgid "Add Internal Price Break" +msgstr "" + +#: part/templates/part/prices.html:297 +msgid "Sale Pricing" +msgstr "" + +#: part/templates/part/prices.html:303 +msgid "Add Sell Price Break" +msgstr "" + +#: part/templates/part/pricing_javascript.html:24 +msgid "Update Pricing" +msgstr "" + +#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:704 +#: templates/js/translated/part.js:2140 templates/js/translated/part.js:2142 +msgid "No Stock" +msgstr "" + +#: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:120 +msgid "Low Stock" +msgstr "" + +#: part/templates/part/upload_bom.html:8 +msgid "Return to BOM" +msgstr "" + +#: part/templates/part/upload_bom.html:13 +msgid "Upload Bill of Materials" +msgstr "" + +#: part/templates/part/upload_bom.html:19 +msgid "BOM upload requirements" +msgstr "" + +#: part/templates/part/upload_bom.html:23 +#: part/templates/part/upload_bom.html:90 +msgid "Upload BOM File" +msgstr "" + +#: part/templates/part/upload_bom.html:29 +msgid "Submit BOM Data" +msgstr "" + +#: part/templates/part/upload_bom.html:37 +msgid "Requirements for BOM upload" +msgstr "" + +#: part/templates/part/upload_bom.html:39 +msgid "The BOM file must contain the required named columns as provided in the " +msgstr "" + +#: part/templates/part/upload_bom.html:39 +msgid "BOM Upload Template" +msgstr "" + +#: part/templates/part/upload_bom.html:40 +msgid "Each part must already exist in the database" +msgstr "" + +#: part/templates/part/variant_part.html:9 +msgid "Create new part variant" +msgstr "" + +#: part/templates/part/variant_part.html:10 +msgid "Create a new variant part from this template" +msgstr "" + +#: part/views.py:111 +msgid "Match References" +msgstr "" + +#: part/views.py:275 +#, python-brace-format +msgid "Can't import part {new_part.name} because there is no category assigned" +msgstr "" + +#: part/views.py:425 +msgid "Select Part Image" +msgstr "" + +#: part/views.py:448 +msgid "Updated part image" +msgstr "" + +#: part/views.py:451 +msgid "Part image not found" +msgstr "" + +#: part/views.py:545 +msgid "Part Pricing" +msgstr "" + +#: plugin/api.py:168 +msgid "Plugin cannot be deleted as it is currently active" +msgstr "" + +#: plugin/base/action/api.py:32 +msgid "No action specified" +msgstr "" + +#: plugin/base/action/api.py:41 +msgid "No matching action found" +msgstr "" + +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 +msgid "No match found for barcode data" +msgstr "" + +#: plugin/base/barcodes/api.py:128 +msgid "Match found for barcode data" +msgstr "" + +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 +msgid "Barcode matches existing item" +msgstr "" + +#: plugin/base/barcodes/api.py:293 +msgid "No matching part data found" +msgstr "" + +#: plugin/base/barcodes/api.py:310 +msgid "No matching supplier parts found" +msgstr "" + +#: plugin/base/barcodes/api.py:314 +msgid "Multiple matching supplier parts found" +msgstr "" + +#: plugin/base/barcodes/api.py:338 +msgid "Matched supplier part" +msgstr "" + +#: plugin/base/barcodes/api.py:387 +msgid "Item has already been received" +msgstr "" + +#: plugin/base/barcodes/api.py:424 +msgid "No match for supplier barcode" +msgstr "" + +#: plugin/base/barcodes/api.py:467 +msgid "Multiple matching line items found" +msgstr "" + +#: plugin/base/barcodes/api.py:470 +msgid "No matching line item found" +msgstr "" + +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +msgid "Barcode does not match an existing stock item" +msgstr "" + +#: plugin/base/barcodes/api.py:526 +msgid "Stock item does not match line item" +msgstr "" + +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 +#: templates/js/translated/sales_order.js:1917 +msgid "Insufficient stock available" +msgstr "" + +#: plugin/base/barcodes/api.py:559 +msgid "Stock item allocated to sales order" +msgstr "" + +#: plugin/base/barcodes/api.py:563 +msgid "Not enough information" +msgstr "" + +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +msgid "Found multiple matching supplier parts for barcode" +msgstr "" + +#: plugin/base/barcodes/mixins.py:197 +#, python-brace-format +msgid "Found multiple purchase orders matching '{order}'" +msgstr "" + +#: plugin/base/barcodes/mixins.py:201 +#, python-brace-format +msgid "No matching purchase order for '{order}'" +msgstr "" + +#: plugin/base/barcodes/mixins.py:207 +msgid "Purchase order does not match supplier" +msgstr "" + +#: plugin/base/barcodes/mixins.py:441 +msgid "Failed to find pending line item for supplier part" +msgstr "" + +#: plugin/base/barcodes/mixins.py:472 +msgid "Further information required to receive line item" +msgstr "" + +#: plugin/base/barcodes/mixins.py:480 +msgid "Received purchase order line item" +msgstr "" + +#: plugin/base/barcodes/serializers.py:21 +msgid "Scanned barcode data" +msgstr "" + +#: plugin/base/barcodes/serializers.py:81 +msgid "Purchase Order to allocate items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:87 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:105 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order has not been placed" +msgstr "" + +#: plugin/base/barcodes/serializers.py:119 +msgid "Location to receive items into" +msgstr "" + +#: plugin/base/barcodes/serializers.py:125 +msgid "Cannot select a structural location" +msgstr "" + +#: plugin/base/barcodes/serializers.py:139 +msgid "Sales Order to allocate items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:145 +msgid "Sales order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:153 +msgid "Sales order line item to allocate items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:160 +msgid "Sales order shipment to allocate items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:166 +msgid "Shipment has already been delivered" +msgstr "" + +#: plugin/base/barcodes/serializers.py:171 +msgid "Quantity to allocate" +msgstr "" + +#: plugin/base/label/label.py:39 +msgid "Label printing failed" +msgstr "" + +#: plugin/base/label/mixins.py:63 +msgid "Error rendering label to PDF" +msgstr "" + +#: plugin/base/label/mixins.py:76 +msgid "Error rendering label to HTML" +msgstr "" + +#: plugin/base/label/mixins.py:111 +msgid "Error rendering label to PNG" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:25 +msgid "InvenTree Barcodes" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:26 +msgid "Provides native support for barcodes" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/integration/core_notifications.py:35 +#: plugin/builtin/integration/currency_exchange.py:21 +#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_machine.py:64 +#: plugin/builtin/labels/label_sheet.py:63 +#: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 +#: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21 +msgid "InvenTree contributors" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:34 +msgid "InvenTree Notifications" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:36 +msgid "Integrated outgoing notification methods" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:41 +#: plugin/builtin/integration/core_notifications.py:80 +msgid "Enable email notifications" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:42 +#: plugin/builtin/integration/core_notifications.py:81 +msgid "Allow sending of emails for event notifications" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:47 +msgid "Enable slack notifications" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:49 +msgid "Allow sending of slack channel messages for event notifications" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:55 +msgid "Slack incoming webhook url" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:56 +msgid "URL that is used to send messages to a slack channel" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:164 +msgid "Open link" +msgstr "" + +#: plugin/builtin/integration/currency_exchange.py:22 +msgid "InvenTree Currency Exchange" +msgstr "" + +#: plugin/builtin/integration/currency_exchange.py:23 +msgid "Default currency exchange integration" +msgstr "" + +#: plugin/builtin/labels/inventree_label.py:20 +msgid "InvenTree PDF label printer" +msgstr "" + +#: plugin/builtin/labels/inventree_label.py:21 +msgid "Provides native support for printing PDF labels" +msgstr "" + +#: plugin/builtin/labels/inventree_label.py:29 +msgid "Debug mode" +msgstr "" + +#: plugin/builtin/labels/inventree_label.py:30 +msgid "Enable debug mode - returns raw HTML instead of PDF" +msgstr "" + +#: plugin/builtin/labels/inventree_machine.py:61 +msgid "InvenTree machine label printer" +msgstr "" + +#: plugin/builtin/labels/inventree_machine.py:62 +msgid "Provides support for printing using a machine" +msgstr "" + +#: plugin/builtin/labels/inventree_machine.py:150 +msgid "last used" +msgstr "" + +#: plugin/builtin/labels/inventree_machine.py:167 +msgid "Options" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:29 +msgid "Page size for the label sheet" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:34 +msgid "Skip Labels" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:35 +msgid "Skip this number of labels when printing label sheets" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:41 +msgid "Border" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:42 +msgid "Print a border around each label" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:208 +msgid "Landscape" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:48 +msgid "Print the label sheet in landscape mode" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:60 +msgid "InvenTree Label Sheet Printer" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:61 +msgid "Arrays multiple labels onto a single sheet" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:94 +msgid "Label is too large for page size" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:128 +msgid "No labels were generated" +msgstr "" + +#: plugin/builtin/suppliers/digikey.py:16 +msgid "Supplier Integration - DigiKey" +msgstr "" + +#: plugin/builtin/suppliers/digikey.py:17 +msgid "Provides support for scanning DigiKey barcodes" +msgstr "" + +#: plugin/builtin/suppliers/digikey.py:26 +msgid "The Supplier which acts as 'DigiKey'" +msgstr "" + +#: plugin/builtin/suppliers/lcsc.py:18 +msgid "Supplier Integration - LCSC" +msgstr "" + +#: plugin/builtin/suppliers/lcsc.py:19 +msgid "Provides support for scanning LCSC barcodes" +msgstr "" + +#: plugin/builtin/suppliers/lcsc.py:27 +msgid "The Supplier which acts as 'LCSC'" +msgstr "" + +#: plugin/builtin/suppliers/mouser.py:16 +msgid "Supplier Integration - Mouser" +msgstr "" + +#: plugin/builtin/suppliers/mouser.py:17 +msgid "Provides support for scanning Mouser barcodes" +msgstr "" + +#: plugin/builtin/suppliers/mouser.py:25 +msgid "The Supplier which acts as 'Mouser'" +msgstr "" + +#: plugin/builtin/suppliers/tme.py:18 +msgid "Supplier Integration - TME" +msgstr "" + +#: plugin/builtin/suppliers/tme.py:19 +msgid "Provides support for scanning TME barcodes" +msgstr "" + +#: plugin/builtin/suppliers/tme.py:27 +msgid "The Supplier which acts as 'TME'" +msgstr "" + +#: plugin/installer.py:194 plugin/installer.py:282 +msgid "Only staff users can administer plugins" +msgstr "" + +#: plugin/installer.py:197 +msgid "Plugin installation is disabled" +msgstr "" + +#: plugin/installer.py:248 +msgid "Installed plugin successfully" +msgstr "" + +#: plugin/installer.py:254 +#, python-brace-format +msgid "Installed plugin into {path}" +msgstr "" + +#: plugin/installer.py:273 +msgid "Plugin was not found in registry" +msgstr "" + +#: plugin/installer.py:276 +msgid "Plugin is not a packaged plugin" +msgstr "" + +#: plugin/installer.py:279 +msgid "Plugin package name not found" +msgstr "" + +#: plugin/installer.py:299 +msgid "Plugin uninstalling is disabled" +msgstr "" + +#: plugin/installer.py:303 +msgid "Plugin cannot be uninstalled as it is currently active" +msgstr "" + +#: plugin/installer.py:316 +msgid "Uninstalled plugin successfully" +msgstr "" + +#: plugin/models.py:30 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:31 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:34 users/models.py:89 +msgid "Key" +msgstr "" + +#: plugin/models.py:34 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:42 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:49 plugin/serializers.py:90 +msgid "Package Name" +msgstr "" + +#: plugin/models.py:51 +msgid "Name of the installed package, if the plugin was installed via PIP" +msgstr "" + +#: plugin/models.py:56 +msgid "Is the plugin active" +msgstr "" + +#: plugin/models.py:148 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 +msgid "Installed" +msgstr "" + +#: plugin/models.py:157 +msgid "Sample plugin" +msgstr "" + +#: plugin/models.py:165 +msgid "Builtin Plugin" +msgstr "" + +#: plugin/models.py:173 +msgid "Package Plugin" +msgstr "" + +#: plugin/models.py:197 templates/InvenTree/settings/plugin_settings.html:9 +#: templates/js/translated/plugin.js:51 +msgid "Plugin" +msgstr "" + +#: plugin/models.py:244 +msgid "Method" +msgstr "" + +#: plugin/plugin.py:264 +msgid "No author found" +msgstr "" + +#: plugin/registry.py:589 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" +msgstr "" + +#: plugin/registry.py:592 +#, python-brace-format +msgid "Plugin requires at least version {v}" +msgstr "" + +#: plugin/registry.py:594 +#, python-brace-format +msgid "Plugin requires at most version {v}" +msgstr "" + +#: plugin/samples/integration/sample.py:52 +msgid "Enable PO" +msgstr "" + +#: plugin/samples/integration/sample.py:53 +msgid "Enable PO functionality in InvenTree interface" +msgstr "" + +#: plugin/samples/integration/sample.py:58 +msgid "API Key" +msgstr "" + +#: plugin/samples/integration/sample.py:59 +msgid "Key required for accessing external API" +msgstr "" + +#: plugin/samples/integration/sample.py:63 +msgid "Numerical" +msgstr "" + +#: plugin/samples/integration/sample.py:64 +msgid "A numerical setting" +msgstr "" + +#: plugin/samples/integration/sample.py:69 +msgid "Choice Setting" +msgstr "" + +#: plugin/samples/integration/sample.py:70 +msgid "A setting with multiple choices" +msgstr "" + +#: plugin/samples/integration/sample_currency_exchange.py:15 +msgid "Sample currency exchange plugin" +msgstr "" + +#: plugin/samples/integration/sample_currency_exchange.py:18 +msgid "InvenTree Contributors" +msgstr "" + +#: plugin/serializers.py:81 +msgid "Source URL" +msgstr "" + +#: plugin/serializers.py:83 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "" + +#: plugin/serializers.py:92 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "" + +#: plugin/serializers.py:99 +#: templates/InvenTree/settings/plugin_settings.html:42 +#: templates/js/translated/plugin.js:86 +msgid "Version" +msgstr "" + +#: plugin/serializers.py:101 +msgid "Version specifier for the plugin. Leave blank for latest version." +msgstr "" + +#: plugin/serializers.py:106 +msgid "Confirm plugin installation" +msgstr "" + +#: plugin/serializers.py:108 +msgid "This will install this plugin now into the current instance. The instance will go into maintenance." +msgstr "" + +#: plugin/serializers.py:121 +msgid "Installation not confirmed" +msgstr "" + +#: plugin/serializers.py:123 +msgid "Either packagename of URL must be provided" +msgstr "" + +#: plugin/serializers.py:156 +msgid "Full reload" +msgstr "" + +#: plugin/serializers.py:157 +msgid "Perform a full reload of the plugin registry" +msgstr "" + +#: plugin/serializers.py:163 +msgid "Force reload" +msgstr "" + +#: plugin/serializers.py:165 +msgid "Force a reload of the plugin registry, even if it is already loaded" +msgstr "" + +#: plugin/serializers.py:172 +msgid "Collect plugins" +msgstr "" + +#: plugin/serializers.py:173 +msgid "Collect plugins and add them to the registry" +msgstr "" + +#: plugin/serializers.py:195 +msgid "Activate Plugin" +msgstr "" + +#: plugin/serializers.py:196 +msgid "Activate this plugin" +msgstr "" + +#: plugin/serializers.py:219 +msgid "Delete configuration" +msgstr "" + +#: plugin/serializers.py:220 +msgid "Delete the plugin configuration from the database" +msgstr "" + +#: report/api.py:158 +msgid "No valid objects provided to template" +msgstr "" + +#: report/api.py:197 report/api.py:234 +#, python-brace-format +msgid "Template file '{template}' is missing or does not exist" +msgstr "" + +#: report/api.py:319 +msgid "Test report" +msgstr "" + +#: report/helpers.py:15 +msgid "A4" +msgstr "" + +#: report/helpers.py:16 +msgid "A3" +msgstr "" + +#: report/helpers.py:17 +msgid "Legal" +msgstr "" + +#: report/helpers.py:18 +msgid "Letter" +msgstr "" + +#: report/models.py:176 +msgid "Template name" +msgstr "" + +#: report/models.py:182 +msgid "Report template file" +msgstr "" + +#: report/models.py:189 +msgid "Report template description" +msgstr "" + +#: report/models.py:195 +msgid "Report revision number (auto-increments)" +msgstr "" + +#: report/models.py:203 +msgid "Page size for PDF reports" +msgstr "" + +#: report/models.py:209 +msgid "Render report in landscape orientation" +msgstr "" + +#: report/models.py:317 +msgid "Pattern for generating report filenames" +msgstr "" + +#: report/models.py:324 +msgid "Report template is enabled" +msgstr "" + +#: report/models.py:346 +msgid "StockItem query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:353 +msgid "Include Installed Tests" +msgstr "" + +#: report/models.py:355 +msgid "Include test results for stock items installed inside assembled item" +msgstr "" + +#: report/models.py:423 +msgid "Build Filters" +msgstr "" + +#: report/models.py:424 +msgid "Build query filters (comma-separated list of key=value pairs" +msgstr "" + +#: report/models.py:463 +msgid "Part Filters" +msgstr "" + +#: report/models.py:464 +msgid "Part query filters (comma-separated list of key=value pairs" +msgstr "" + +#: report/models.py:496 +msgid "Purchase order query filters" +msgstr "" + +#: report/models.py:532 +msgid "Sales order query filters" +msgstr "" + +#: report/models.py:568 +msgid "Return order query filters" +msgstr "" + +#: report/models.py:640 +msgid "Snippet file with this name already exists" +msgstr "" + +#: report/models.py:647 +msgid "Snippet" +msgstr "" + +#: report/models.py:648 +msgid "Report snippet file" +msgstr "" + +#: report/models.py:655 +msgid "Snippet file description" +msgstr "" + +#: report/models.py:713 +msgid "Asset file with this name already exists" +msgstr "" + +#: report/models.py:721 +msgid "Asset" +msgstr "" + +#: report/models.py:722 +msgid "Report asset file" +msgstr "" + +#: report/models.py:729 +msgid "Asset file description" +msgstr "" + +#: report/models.py:751 +msgid "stock location query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/templates/report/inventree_bill_of_materials_report.html:133 +msgid "Materials needed" +msgstr "" + +#: report/templates/report/inventree_build_order_base.html:146 +msgid "Required For" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:15 +msgid "Supplier was deleted" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:30 +#: report/templates/report/inventree_so_report_base.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 +#: templates/js/translated/pricing.js:596 +#: templates/js/translated/pricing.js:834 +#: templates/js/translated/purchase_order.js:2116 +#: templates/js/translated/sales_order.js:1837 +msgid "Unit Price" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:55 +#: report/templates/report/inventree_return_order_report_base.html:48 +#: report/templates/report/inventree_so_report_base.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_po_report_base.html:72 +#: report/templates/report/inventree_so_report_base.html:72 +#: templates/js/translated/purchase_order.js:2018 +#: templates/js/translated/sales_order.js:1806 +msgid "Total" +msgstr "" + +#: report/templates/report/inventree_return_order_report_base.html:25 +#: report/templates/report/inventree_test_report_base.html:88 +#: stock/models.py:812 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 +#: templates/js/translated/build.js:2353 +#: templates/js/translated/model_renderers.js:224 +#: templates/js/translated/return_order.js:540 +#: templates/js/translated/return_order.js:724 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1611 +#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "" + +#: report/templates/report/inventree_slr_report.html:97 +msgid "Stock location items" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:21 +msgid "Stock Item Test Report" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:97 +msgid "Test Results" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:102 +#: templates/js/translated/stock.js:1492 +msgid "Test" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:103 +#: stock/models.py:2435 +msgid "Result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:130 +msgid "Pass" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:132 +msgid "Fail" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:154 +#: stock/templates/stock/stock_sidebar.html:16 +msgid "Installed Items" +msgstr "" + +#: report/templates/report/inventree_test_report_base.html:168 +#: stock/admin.py:162 templates/js/translated/stock.js:700 +#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +msgid "Serial" +msgstr "" + +#: report/templatetags/report.py:96 +msgid "Asset file does not exist" +msgstr "" + +#: report/templatetags/report.py:152 report/templatetags/report.py:217 +msgid "Image file not found" +msgstr "" + +#: report/templatetags/report.py:242 +msgid "part_image tag requires a Part instance" +msgstr "" + +#: report/templatetags/report.py:283 +msgid "company_image tag requires a Company instance" +msgstr "" + +#: stock/admin.py:52 stock/admin.py:172 +msgid "Location ID" +msgstr "" + +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 +msgid "Location Path" +msgstr "" + +#: stock/admin.py:149 +msgid "Stock Item ID" +msgstr "" + +#: stock/admin.py:168 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:180 +msgid "Supplier Part ID" +msgstr "" + +#: stock/admin.py:185 +msgid "Supplier ID" +msgstr "" + +#: stock/admin.py:191 +msgid "Supplier Name" +msgstr "" + +#: stock/admin.py:196 +msgid "Customer ID" +msgstr "" + +#: stock/admin.py:201 stock/models.py:792 +#: stock/templates/stock/item_base.html:354 +msgid "Installed In" +msgstr "" + +#: stock/admin.py:206 +msgid "Build ID" +msgstr "" + +#: stock/admin.py:216 +msgid "Sales Order ID" +msgstr "" + +#: stock/admin.py:221 +msgid "Purchase Order ID" +msgstr "" + +#: stock/admin.py:236 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:241 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:256 stock/models.py:886 +#: stock/templates/stock/item_base.html:433 +#: templates/js/translated/stock.js:2229 users/models.py:113 +msgid "Expiry Date" +msgstr "" + +#: stock/api.py:281 +msgid "Filter by location depth" +msgstr "" + +#: stock/api.py:301 +msgid "Include sub-locations in filtered results" +msgstr "" + +#: stock/api.py:322 +msgid "Parent Location" +msgstr "" + +#: stock/api.py:323 +msgid "Filter by parent location" +msgstr "" + +#: stock/api.py:568 templates/js/translated/table_filters.js:427 +msgid "External Location" +msgstr "" + +#: stock/api.py:753 +msgid "Part Tree" +msgstr "" + +#: stock/api.py:781 +msgid "Expiry date before" +msgstr "" + +#: stock/api.py:785 +msgid "Expiry date after" +msgstr "" + +#: stock/api.py:788 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 +msgid "Stale" +msgstr "" + +#: stock/api.py:874 +msgid "Quantity is required" +msgstr "" + +#: stock/api.py:880 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/api.py:911 +msgid "The given supplier part does not exist" +msgstr "" + +#: stock/api.py:921 +msgid "The supplier part has a pack size defined, but flag use_pack_size not set" +msgstr "" + +#: stock/api.py:952 +msgid "Serial numbers cannot be supplied for a non-trackable part" +msgstr "" + +#: stock/models.py:63 +msgid "Stock Location type" +msgstr "" + +#: stock/models.py:64 +msgid "Stock Location types" +msgstr "" + +#: stock/models.py:90 +msgid "Default icon for all locations that have no icon set (optional)" +msgstr "" + +#: stock/models.py:125 stock/models.py:774 +#: stock/templates/stock/location.html:17 +#: stock/templates/stock/stock_app_base.html:8 +msgid "Stock Location" +msgstr "" + +#: stock/models.py:126 stock/templates/stock/location.html:179 +#: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 +#: users/models.py:192 +msgid "Stock Locations" +msgstr "" + +#: stock/models.py:158 stock/models.py:935 +#: stock/templates/stock/item_base.html:247 +msgid "Owner" +msgstr "" + +#: stock/models.py:159 stock/models.py:936 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:167 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 +msgid "External" +msgstr "" + +#: stock/models.py:175 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 +msgid "Location type" +msgstr "" + +#: stock/models.py:185 +msgid "Stock location type of this location" +msgstr "" + +#: stock/models.py:254 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:626 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:656 stock/serializers.py:290 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:673 +#, python-brace-format +msgid "Part type ('{self.supplier_part.part}') must be {self.part}" +msgstr "" + +#: stock/models.py:683 stock/models.py:696 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:686 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:710 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:715 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:728 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:744 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:756 +msgid "Base part" +msgstr "" + +#: stock/models.py:766 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:778 +msgid "Where is this stock item located?" +msgstr "" + +#: stock/models.py:786 stock/serializers.py:1351 +msgid "Packaging this stock item is stored in" +msgstr "" + +#: stock/models.py:797 +msgid "Is this item installed in another item?" +msgstr "" + +#: stock/models.py:816 +msgid "Serial number for this item" +msgstr "" + +#: stock/models.py:830 stock/serializers.py:1334 +msgid "Batch code for this stock item" +msgstr "" + +#: stock/models.py:835 +msgid "Stock Quantity" +msgstr "" + +#: stock/models.py:845 +msgid "Source Build" +msgstr "" + +#: stock/models.py:848 +msgid "Build for this stock item" +msgstr "" + +#: stock/models.py:855 stock/templates/stock/item_base.html:363 +msgid "Consumed By" +msgstr "" + +#: stock/models.py:858 +msgid "Build order which consumed this stock item" +msgstr "" + +#: stock/models.py:867 +msgid "Source Purchase Order" +msgstr "" + +#: stock/models.py:871 +msgid "Purchase order for this stock item" +msgstr "" + +#: stock/models.py:877 +msgid "Destination Sales Order" +msgstr "" + +#: stock/models.py:888 +msgid "Expiry date for stock item. Stock will be considered expired after this date" +msgstr "" + +#: stock/models.py:906 +msgid "Delete on deplete" +msgstr "" + +#: stock/models.py:907 +msgid "Delete this Stock Item when stock is depleted" +msgstr "" + +#: stock/models.py:927 +msgid "Single unit purchase price at time of purchase" +msgstr "" + +#: stock/models.py:958 +msgid "Converted to part" +msgstr "" + +#: stock/models.py:1468 +msgid "Part is not set as trackable" +msgstr "" + +#: stock/models.py:1474 +msgid "Quantity must be integer" +msgstr "" + +#: stock/models.py:1482 +#, python-brace-format +msgid "Quantity must not exceed available stock quantity ({self.quantity})" +msgstr "" + +#: stock/models.py:1488 +msgid "Serial numbers must be a list of integers" +msgstr "" + +#: stock/models.py:1493 +msgid "Quantity does not match serial numbers" +msgstr "" + +#: stock/models.py:1501 stock/serializers.py:529 +msgid "Serial numbers already exist" +msgstr "" + +#: stock/models.py:1598 +msgid "Test template does not exist" +msgstr "" + +#: stock/models.py:1616 +msgid "Stock item has been assigned to a sales order" +msgstr "" + +#: stock/models.py:1620 +msgid "Stock item is installed in another item" +msgstr "" + +#: stock/models.py:1623 +msgid "Stock item contains other items" +msgstr "" + +#: stock/models.py:1626 +msgid "Stock item has been assigned to a customer" +msgstr "" + +#: stock/models.py:1629 +msgid "Stock item is currently in production" +msgstr "" + +#: stock/models.py:1632 +msgid "Serialized stock cannot be merged" +msgstr "" + +#: stock/models.py:1639 stock/serializers.py:1240 +msgid "Duplicate stock items" +msgstr "" + +#: stock/models.py:1643 +msgid "Stock items must refer to the same part" +msgstr "" + +#: stock/models.py:1651 +msgid "Stock items must refer to the same supplier part" +msgstr "" + +#: stock/models.py:1656 +msgid "Stock status codes must match" +msgstr "" + +#: stock/models.py:1873 +msgid "StockItem cannot be moved as it is not in stock" +msgstr "" + +#: stock/models.py:2336 +msgid "Entry notes" +msgstr "" + +#: stock/models.py:2402 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2408 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2435 +msgid "Test result" +msgstr "" + +#: stock/models.py:2442 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2450 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2454 +msgid "Test notes" +msgstr "" + +#: stock/models.py:2462 templates/js/translated/stock.js:1545 +msgid "Test station" +msgstr "" + +#: stock/models.py:2463 +msgid "The identifier of the test station where the test was performed" +msgstr "" + +#: stock/models.py:2469 +msgid "Started" +msgstr "" + +#: stock/models.py:2470 +msgid "The timestamp of the test start" +msgstr "" + +#: stock/models.py:2476 +msgid "Finished" +msgstr "" + +#: stock/models.py:2477 +msgid "The timestamp of the test finish" +msgstr "" + +#: stock/serializers.py:100 +msgid "Test template for this result" +msgstr "" + +#: stock/serializers.py:119 +msgid "Template ID or test name must be provided" +msgstr "" + +#: stock/serializers.py:151 +msgid "The test finished time cannot be earlier than the test started time" +msgstr "" + +#: stock/serializers.py:184 +msgid "Serial number is too large" +msgstr "" + +#: stock/serializers.py:282 +msgid "Use pack size when adding: the quantity defined is the number of packs" +msgstr "" + +#: stock/serializers.py:402 +msgid "Purchase price of this stock item, per unit or pack" +msgstr "" + +#: stock/serializers.py:464 +msgid "Enter number of stock items to serialize" +msgstr "" + +#: stock/serializers.py:477 +#, python-brace-format +msgid "Quantity must not exceed available stock quantity ({q})" +msgstr "" + +#: stock/serializers.py:484 +msgid "Enter serial numbers for new items" +msgstr "" + +#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +msgid "Destination stock location" +msgstr "" + +#: stock/serializers.py:502 +msgid "Optional note field" +msgstr "" + +#: stock/serializers.py:512 +msgid "Serial numbers cannot be assigned to this part" +msgstr "" + +#: stock/serializers.py:567 +msgid "Select stock item to install" +msgstr "" + +#: stock/serializers.py:574 +msgid "Quantity to Install" +msgstr "" + +#: stock/serializers.py:575 +msgid "Enter the quantity of items to install" +msgstr "" + +#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 +#: stock/serializers.py:806 +msgid "Add transaction note (optional)" +msgstr "" + +#: stock/serializers.py:588 +msgid "Quantity to install must be at least 1" +msgstr "" + +#: stock/serializers.py:596 +msgid "Stock item is unavailable" +msgstr "" + +#: stock/serializers.py:607 +msgid "Selected part is not in the Bill of Materials" +msgstr "" + +#: stock/serializers.py:620 +msgid "Quantity to install must not exceed available quantity" +msgstr "" + +#: stock/serializers.py:655 +msgid "Destination location for uninstalled item" +msgstr "" + +#: stock/serializers.py:690 +msgid "Select part to convert stock item into" +msgstr "" + +#: stock/serializers.py:703 +msgid "Selected part is not a valid option for conversion" +msgstr "" + +#: stock/serializers.py:720 +msgid "Cannot convert stock item with assigned SupplierPart" +msgstr "" + +#: stock/serializers.py:751 +msgid "Destination location for returned item" +msgstr "" + +#: stock/serializers.py:788 +msgid "Select stock items to change status" +msgstr "" + +#: stock/serializers.py:794 +msgid "No stock items selected" +msgstr "" + +#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location_sidebar.html:5 +msgid "Sublocations" +msgstr "" + +#: stock/serializers.py:1069 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:1073 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:1077 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:1101 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:1107 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:1115 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:1125 stock/serializers.py:1379 +msgid "A list of stock items must be provided" +msgstr "" + +#: stock/serializers.py:1204 +msgid "Stock merging notes" +msgstr "" + +#: stock/serializers.py:1209 +msgid "Allow mismatched suppliers" +msgstr "" + +#: stock/serializers.py:1210 +msgid "Allow stock items with different supplier parts to be merged" +msgstr "" + +#: stock/serializers.py:1215 +msgid "Allow mismatched status" +msgstr "" + +#: stock/serializers.py:1216 +msgid "Allow stock items with different status codes to be merged" +msgstr "" + +#: stock/serializers.py:1226 +msgid "At least two stock items must be provided" +msgstr "" + +#: stock/serializers.py:1293 +msgid "No Change" +msgstr "" + +#: stock/serializers.py:1322 +msgid "StockItem primary key value" +msgstr "" + +#: stock/serializers.py:1341 +msgid "Stock item status code" +msgstr "" + +#: stock/serializers.py:1369 +msgid "Stock transaction notes" +msgstr "" + +#: stock/templates/stock/item.html:17 +msgid "Stock Tracking Information" +msgstr "" + +#: stock/templates/stock/item.html:63 +msgid "Child Stock Items" +msgstr "" + +#: stock/templates/stock/item.html:72 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item.html:81 +#: stock/templates/stock/stock_sidebar.html:12 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:65 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +msgid "Delete Test Data" +msgstr "" + +#: stock/templates/stock/item.html:93 +msgid "Add Test Data" +msgstr "" + +#: stock/templates/stock/item.html:125 +msgid "Stock Item Notes" +msgstr "" + +#: stock/templates/stock/item.html:140 +msgid "Installed Stock Items" +msgstr "" + +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +msgid "Install Stock Item" +msgstr "" + +#: stock/templates/stock/item.html:274 +msgid "Delete all test results for this stock item" +msgstr "" + +#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +msgid "Add Test Result" +msgstr "" + +#: stock/templates/stock/item_base.html:33 +msgid "Locate stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:51 +msgid "Scan to Location" +msgstr "" + +#: stock/templates/stock/item_base.html:59 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 +msgid "Printing actions" +msgstr "" + +#: stock/templates/stock/item_base.html:75 +msgid "Stock adjustment actions" +msgstr "" + +#: stock/templates/stock/item_base.html:79 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +msgid "Count stock" +msgstr "" + +#: stock/templates/stock/item_base.html:81 +#: templates/js/translated/stock.js:1803 +msgid "Add stock" +msgstr "" + +#: stock/templates/stock/item_base.html:82 +#: templates/js/translated/stock.js:1812 +msgid "Remove stock" +msgstr "" + +#: stock/templates/stock/item_base.html:85 +msgid "Serialize stock" +msgstr "" + +#: stock/templates/stock/item_base.html:88 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +msgid "Transfer stock" +msgstr "" + +#: stock/templates/stock/item_base.html:91 +#: templates/js/translated/stock.js:1884 +msgid "Assign to customer" +msgstr "" + +#: stock/templates/stock/item_base.html:94 +msgid "Return to stock" +msgstr "" + +#: stock/templates/stock/item_base.html:97 +msgid "Uninstall stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:97 +msgid "Uninstall" +msgstr "" + +#: stock/templates/stock/item_base.html:101 +msgid "Install stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:101 +msgid "Install" +msgstr "" + +#: stock/templates/stock/item_base.html:115 +msgid "Convert to variant" +msgstr "" + +#: stock/templates/stock/item_base.html:118 +msgid "Duplicate stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:120 +msgid "Edit stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:123 +msgid "Delete stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 +#: templates/js/translated/build.js:2121 templates/navbar.html:38 +msgid "Build" +msgstr "" + +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/templates/stock/item_base.html:211 +msgid "No manufacturer set" +msgstr "" + +#: stock/templates/stock/item_base.html:251 +msgid "You are not in the list of owners of this item. This stock item cannot be edited." +msgstr "" + +#: stock/templates/stock/item_base.html:252 +#: stock/templates/stock/location.html:149 +msgid "Read only" +msgstr "" + +#: stock/templates/stock/item_base.html:265 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:271 +msgid "This stock item is in production and cannot be edited." +msgstr "" + +#: stock/templates/stock/item_base.html:272 +msgid "Edit the stock item from the build view." +msgstr "" + +#: stock/templates/stock/item_base.html:287 +msgid "This stock item is allocated to Sales Order" +msgstr "" + +#: stock/templates/stock/item_base.html:295 +msgid "This stock item is allocated to Build Order" +msgstr "" + +#: stock/templates/stock/item_base.html:311 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" +msgstr "" + +#: stock/templates/stock/item_base.html:317 +msgid "previous page" +msgstr "" + +#: stock/templates/stock/item_base.html:317 +msgid "Navigate to previous serial number" +msgstr "" + +#: stock/templates/stock/item_base.html:326 +msgid "next page" +msgstr "" + +#: stock/templates/stock/item_base.html:326 +msgid "Navigate to next serial number" +msgstr "" + +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: stock/templates/stock/item_base.html:398 +#: templates/js/translated/build.js:2378 +msgid "No location set" +msgstr "" + +#: stock/templates/stock/item_base.html:413 +msgid "Tests" +msgstr "" + +#: stock/templates/stock/item_base.html:419 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:437 +#, python-format +msgid "This StockItem expired on %(item.expiry_date)s" +msgstr "" + +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:163 +msgid "Expired" +msgstr "" + +#: stock/templates/stock/item_base.html:439 +#, python-format +msgid "This StockItem expires on %(item.expiry_date)s" +msgstr "" + +#: stock/templates/stock/item_base.html:455 +msgid "No stocktake performed" +msgstr "" + +#: stock/templates/stock/item_base.html:507 +#: templates/js/translated/stock.js:1951 +msgid "stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:532 +msgid "Edit Stock Status" +msgstr "" + +#: stock/templates/stock/item_base.html:541 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:552 +msgid "Link Barcode to Stock Item" +msgstr "" + +#: stock/templates/stock/item_base.html:616 +msgid "Select one of the part variants listed below." +msgstr "" + +#: stock/templates/stock/item_base.html:619 +msgid "Warning" +msgstr "" + +#: stock/templates/stock/item_base.html:620 +msgid "This action cannot be easily undone" +msgstr "" + +#: stock/templates/stock/item_base.html:628 +msgid "Convert Stock Item" +msgstr "" + +#: stock/templates/stock/item_base.html:662 +msgid "Return to Stock" +msgstr "" + +#: stock/templates/stock/item_serialize.html:5 +msgid "Create serialized items from this stock item." +msgstr "" + +#: stock/templates/stock/item_serialize.html:7 +msgid "Select quantity to serialize, and unique serial numbers." +msgstr "" + +#: stock/templates/stock/location.html:38 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:45 +msgid "Locate stock location" +msgstr "" + +#: stock/templates/stock/location.html:63 +msgid "Scan stock items into this location" +msgstr "" + +#: stock/templates/stock/location.html:63 +msgid "Scan In Stock Items" +msgstr "" + +#: stock/templates/stock/location.html:64 +msgid "Scan stock container into this location" +msgstr "" + +#: stock/templates/stock/location.html:64 +msgid "Scan In Container" +msgstr "" + +#: stock/templates/stock/location.html:75 +msgid "Print Location Report" +msgstr "" + +#: stock/templates/stock/location.html:104 +msgid "Location actions" +msgstr "" + +#: stock/templates/stock/location.html:106 +msgid "Edit location" +msgstr "" + +#: stock/templates/stock/location.html:108 +msgid "Delete location" +msgstr "" + +#: stock/templates/stock/location.html:138 +msgid "Top level stock location" +msgstr "" + +#: stock/templates/stock/location.html:144 +msgid "Location Owner" +msgstr "" + +#: stock/templates/stock/location.html:148 +msgid "You are not in the list of owners of this location. This stock location cannot be edited." +msgstr "" + +#: stock/templates/stock/location.html:217 +msgid "Create new stock location" +msgstr "" + +#: stock/templates/stock/location.html:218 +msgid "New Location" +msgstr "" + +#: stock/templates/stock/location.html:287 +#: templates/js/translated/stock.js:2572 +msgid "stock location" +msgstr "" + +#: stock/templates/stock/location.html:315 +msgid "Scanned stock container into this location" +msgstr "" + +#: stock/templates/stock/location.html:388 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:399 +msgid "Link Barcode to Stock Location" +msgstr "" + +#: stock/templates/stock/stock_app_base.html:16 +msgid "Loading..." +msgstr "" + +#: stock/templates/stock/stock_sidebar.html:5 +msgid "Stock Tracking" +msgstr "" + +#: stock/templates/stock/stock_sidebar.html:8 +msgid "Allocations" +msgstr "" + +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 +msgid "Permission Denied" +msgstr "" + +#: templates/403.html:15 +msgid "You do not have permission to view this page." +msgstr "" + +#: templates/403_csrf.html:11 +msgid "Authentication Failure" +msgstr "" + +#: templates/403_csrf.html:14 +msgid "You have been logged out from InvenTree." +msgstr "" + +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:150 +msgid "Login" +msgstr "" + +#: templates/404.html:6 templates/404.html:12 +msgid "Page Not Found" +msgstr "" + +#: templates/404.html:15 +msgid "The requested page does not exist" +msgstr "" + +#: templates/500.html:6 templates/500.html:12 +msgid "Internal Server Error" +msgstr "" + +#: templates/500.html:15 +#, python-format +msgid "The %(inventree_title)s server raised an internal error" +msgstr "" + +#: templates/500.html:16 +msgid "Refer to the error log in the admin interface for further details" +msgstr "" + +#: templates/503.html:11 templates/503.html:33 +msgid "Site is in Maintenance" +msgstr "" + +#: templates/503.html:39 +msgid "The site is currently in maintenance and should be up again soon!" +msgstr "" + +#: templates/InvenTree/index.html:7 +msgid "Index" +msgstr "" + +#: templates/InvenTree/index.html:39 +msgid "Subscribed Parts" +msgstr "" + +#: templates/InvenTree/index.html:52 +msgid "Subscribed Categories" +msgstr "" + +#: templates/InvenTree/index.html:62 +msgid "Latest Parts" +msgstr "" + +#: templates/InvenTree/index.html:77 +msgid "BOM Waiting Validation" +msgstr "" + +#: templates/InvenTree/index.html:106 +msgid "Recently Updated" +msgstr "" + +#: templates/InvenTree/index.html:134 +msgid "Depleted Stock" +msgstr "" + +#: templates/InvenTree/index.html:148 +msgid "Required for Build Orders" +msgstr "" + +#: templates/InvenTree/index.html:156 +msgid "Expired Stock" +msgstr "" + +#: templates/InvenTree/index.html:172 +msgid "Stale Stock" +msgstr "" + +#: templates/InvenTree/index.html:199 +msgid "Build Orders In Progress" +msgstr "" + +#: templates/InvenTree/index.html:210 +msgid "Overdue Build Orders" +msgstr "" + +#: templates/InvenTree/index.html:230 +msgid "Outstanding Purchase Orders" +msgstr "" + +#: templates/InvenTree/index.html:241 +msgid "Overdue Purchase Orders" +msgstr "" + +#: templates/InvenTree/index.html:262 +msgid "Outstanding Sales Orders" +msgstr "" + +#: templates/InvenTree/index.html:273 +msgid "Overdue Sales Orders" +msgstr "" + +#: templates/InvenTree/index.html:299 +msgid "InvenTree News" +msgstr "" + +#: templates/InvenTree/index.html:301 +msgid "Current News" +msgstr "" + +#: templates/InvenTree/notifications/history.html:9 +msgid "Notification History" +msgstr "" + +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:75 +msgid "Delete Notifications" +msgstr "" + +#: templates/InvenTree/notifications/inbox.html:9 +msgid "Pending Notifications" +msgstr "" + +#: templates/InvenTree/notifications/inbox.html:13 +#: templates/InvenTree/notifications/inbox.html:14 +msgid "Mark all as read" +msgstr "" + +#: templates/InvenTree/notifications/notifications.html:10 +#: templates/InvenTree/notifications/sidebar.html:5 +#: templates/InvenTree/settings/sidebar.html:17 +#: templates/InvenTree/settings/sidebar.html:37 templates/notifications.html:5 +msgid "Notifications" +msgstr "" + +#: templates/InvenTree/notifications/notifications.html:38 +msgid "No unread notifications found" +msgstr "" + +#: templates/InvenTree/notifications/notifications.html:58 +msgid "No notification history found" +msgstr "" + +#: templates/InvenTree/notifications/notifications.html:65 +msgid "Delete all read notifications" +msgstr "" + +#: templates/InvenTree/notifications/notifications.html:89 +#: templates/js/translated/notification.js:85 +msgid "Delete Notification" +msgstr "" + +#: templates/InvenTree/notifications/sidebar.html:8 +msgid "Inbox" +msgstr "" + +#: templates/InvenTree/notifications/sidebar.html:10 +msgid "History" +msgstr "" + +#: templates/InvenTree/search.html:8 +msgid "Search Results" +msgstr "" + +#: templates/InvenTree/settings/barcode.html:8 +msgid "Barcode Settings" +msgstr "" + +#: templates/InvenTree/settings/build.html:8 +msgid "Build Order Settings" +msgstr "" + +#: templates/InvenTree/settings/category.html:7 +msgid "Category Settings" +msgstr "" + +#: templates/InvenTree/settings/global.html:8 +msgid "Server Settings" +msgstr "" + +#: templates/InvenTree/settings/label.html:8 +#: templates/InvenTree/settings/user_labels.html:9 +msgid "Label Settings" +msgstr "" + +#: templates/InvenTree/settings/login.html:8 +msgid "Login Settings" +msgstr "" + +#: templates/InvenTree/settings/login.html:15 +msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" +msgstr "" + +#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/socialaccount/signup.html:5 +msgid "Signup" +msgstr "" + +#: templates/InvenTree/settings/login.html:34 +msgid "Single Sign On" +msgstr "" + +#: templates/InvenTree/settings/mixins/settings.html:5 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:147 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:5 +msgid "URLs" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:8 +#, python-format +msgid "The Base-URL for this plugin is %(base)s." +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:14 +msgid "URL" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:23 +msgid "Open in new tab" +msgstr "" + +#: templates/InvenTree/settings/notifications.html:9 +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" +msgstr "" + +#: templates/InvenTree/settings/notifications.html:18 +msgid "Slug" +msgstr "" + +#: templates/InvenTree/settings/part.html:7 +msgid "Part Settings" +msgstr "" + +#: templates/InvenTree/settings/part.html:42 +msgid "Part Import" +msgstr "" + +#: templates/InvenTree/settings/part.html:46 +msgid "Import Part" +msgstr "" + +#: templates/InvenTree/settings/part_parameters.html:20 +msgid "Part Parameter Templates" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:25 +msgid "Stocktake Reports" +msgstr "" + +#: templates/InvenTree/settings/physical_units.html:8 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Physical Units" +msgstr "" + +#: templates/InvenTree/settings/physical_units.html:12 +msgid "Add Unit" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:9 +#: templates/InvenTree/settings/sidebar.html:64 +msgid "Plugin Settings" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:15 +msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." +msgstr "" + +#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/sidebar.html:66 +msgid "Plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:42 +#: templates/InvenTree/settings/plugin.html:43 +#: templates/js/translated/plugin.js:151 +msgid "Install Plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:45 +#: templates/InvenTree/settings/plugin.html:46 +#: templates/js/translated/plugin.js:224 +msgid "Reload Plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:56 +msgid "External plugins are not enabled for this InvenTree installation" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:71 +msgid "Plugin Error Stack" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:80 +msgid "Stage" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:82 +#: templates/js/translated/notification.js:76 +msgid "Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:16 +msgid "Plugin information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:47 +msgid "no version information supplied" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:61 +msgid "License" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:70 +msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:76 +msgid "Package information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:82 +msgid "Installation method" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:85 +msgid "This plugin was installed as a package" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:87 +msgid "This plugin was found in a local server path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:93 +msgid "Installation path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:100 +#: templates/js/translated/plugin.js:68 +#: templates/js/translated/table_filters.js:496 +msgid "Builtin" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:101 +msgid "This is a builtin plugin which cannot be disabled" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:107 +#: templates/js/translated/plugin.js:72 +#: templates/js/translated/table_filters.js:500 +msgid "Sample" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:108 +msgid "This is a sample plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:113 +msgid "Commit Author" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:117 +#: templates/about.html:36 +msgid "Commit Date" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:121 +#: templates/about.html:29 +msgid "Commit Hash" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:125 +msgid "Commit Message" +msgstr "" + +#: templates/InvenTree/settings/po.html:7 +msgid "Purchase Order Settings" +msgstr "" + +#: templates/InvenTree/settings/pricing.html:7 +msgid "Pricing Settings" +msgstr "" + +#: templates/InvenTree/settings/pricing.html:34 +msgid "Exchange Rates" +msgstr "" + +#: templates/InvenTree/settings/pricing.html:38 +msgid "Update Now" +msgstr "" + +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 +msgid "Last Update" +msgstr "" + +#: templates/InvenTree/settings/pricing.html:50 +msgid "Never" +msgstr "" + +#: templates/InvenTree/settings/project_codes.html:8 +msgid "Project Code Settings" +msgstr "" + +#: templates/InvenTree/settings/project_codes.html:21 +#: templates/InvenTree/settings/sidebar.html:33 +msgid "Project Codes" +msgstr "" + +#: templates/InvenTree/settings/project_codes.html:25 +#: templates/InvenTree/settings/settings_staff_js.html:216 +msgid "New Project Code" +msgstr "" + +#: templates/InvenTree/settings/report.html:8 +#: templates/InvenTree/settings/user_reporting.html:9 +msgid "Report Settings" +msgstr "" + +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + +#: templates/InvenTree/settings/setting.html:31 +msgid "No value set" +msgstr "" + +#: templates/InvenTree/settings/setting.html:46 +msgid "Edit setting" +msgstr "" + +#: templates/InvenTree/settings/settings_js.html:58 +msgid "Edit Plugin Setting" +msgstr "" + +#: templates/InvenTree/settings/settings_js.html:60 +msgid "Edit Notification Setting" +msgstr "" + +#: templates/InvenTree/settings/settings_js.html:63 +msgid "Edit Global Setting" +msgstr "" + +#: templates/InvenTree/settings/settings_js.html:65 +msgid "Edit User Setting" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:49 +msgid "Rate" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:81 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:411 +msgid "Delete" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:95 +msgid "Edit Custom Unit" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:110 +msgid "Delete Custom Unit" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:124 +msgid "New Custom Unit" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:140 +msgid "No project codes found" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:158 +#: templates/js/translated/build.js:2226 +msgid "group" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:175 +#: templates/InvenTree/settings/settings_staff_js.html:189 +msgid "Edit Project Code" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:176 +#: templates/InvenTree/settings/settings_staff_js.html:203 +msgid "Delete Project Code" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:285 +msgid "No category parameter templates found" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:308 +#: templates/js/translated/part.js:1645 +msgid "Edit Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:309 +#: templates/js/translated/part.js:1646 +msgid "Delete Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:326 +msgid "Edit Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:353 +msgid "Delete Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:388 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:418 +msgid "Create Part Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:440 +msgid "No stock location types found" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:461 +msgid "Location count" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 +msgid "Edit Location Type" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:467 +msgid "Delete Location type" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:490 +msgid "Delete Location Type" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:37 +msgid "New Location Type" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:6 +#: templates/InvenTree/settings/user_settings.html:9 +msgid "User Settings" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:9 +msgid "Account" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:11 +msgid "Display" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:13 +msgid "Home Page" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:15 +#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/navbar.html:107 templates/search.html:8 +#: templates/search_form.html:6 templates/search_form.html:7 +msgid "Search" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:19 +#: templates/InvenTree/settings/sidebar.html:43 +msgid "Reporting" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:24 +msgid "Global Settings" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:45 +msgid "Categories" +msgstr "" + +#: templates/InvenTree/settings/so.html:7 +msgid "Sales Order Settings" +msgstr "" + +#: templates/InvenTree/settings/stock.html:7 +msgid "Stock Settings" +msgstr "" + +#: templates/InvenTree/settings/stock.html:33 +msgid "Stock Location Types" +msgstr "" + +#: templates/InvenTree/settings/user.html:13 +msgid "Account Settings" +msgstr "" + +#: templates/InvenTree/settings/user.html:19 +#: templates/account/password_reset_from_key.html:4 +#: templates/account/password_reset_from_key.html:7 +msgid "Change Password" +msgstr "" + +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:55 +msgid "The following email addresses are associated with your account:" +msgstr "" + +#: templates/InvenTree/settings/user.html:76 +msgid "Verified" +msgstr "" + +#: templates/InvenTree/settings/user.html:78 +msgid "Unverified" +msgstr "" + +#: templates/InvenTree/settings/user.html:80 +#: templates/js/translated/company.js:947 +msgid "Primary" +msgstr "" + +#: templates/InvenTree/settings/user.html:86 +msgid "Make Primary" +msgstr "" + +#: templates/InvenTree/settings/user.html:87 +msgid "Re-send Verification" +msgstr "" + +#: templates/InvenTree/settings/user.html:96 +msgid "Warning:" +msgstr "" + +#: templates/InvenTree/settings/user.html:97 +msgid "You currently do not have any email address set up. You should really add an email address so you can receive notifications, reset your password, etc." +msgstr "" + +#: templates/InvenTree/settings/user.html:105 +msgid "Add Email Address" +msgstr "" + +#: templates/InvenTree/settings/user.html:110 +msgid "Add Email" +msgstr "" + +#: templates/InvenTree/settings/user.html:120 +msgid "Multifactor" +msgstr "" + +#: templates/InvenTree/settings/user.html:125 +msgid "You have these factors available:" +msgstr "" + +#: templates/InvenTree/settings/user.html:135 +msgid "TOTP" +msgstr "" + +#: templates/InvenTree/settings/user.html:141 +msgid "Static" +msgstr "" + +#: templates/InvenTree/settings/user.html:150 +msgid "Multifactor authentication is not configured for your account" +msgstr "" + +#: templates/InvenTree/settings/user.html:157 +msgid "Change factors" +msgstr "" + +#: templates/InvenTree/settings/user.html:158 +msgid "Setup multifactor" +msgstr "" + +#: templates/InvenTree/settings/user.html:160 +msgid "Remove multifactor" +msgstr "" + +#: templates/InvenTree/settings/user.html:168 +msgid "Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:174 +msgid "Log out active sessions (except this one)" +msgstr "" + +#: templates/InvenTree/settings/user.html:175 +msgid "Log Out Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:184 +msgid "unknown on unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:185 +msgid "unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:189 +msgid "IP Address" +msgstr "" + +#: templates/InvenTree/settings/user.html:190 +msgid "Device" +msgstr "" + +#: templates/InvenTree/settings/user.html:191 +msgid "Last Activity" +msgstr "" + +#: templates/InvenTree/settings/user.html:204 +#, python-format +msgid "%(time)s ago (this session)" +msgstr "" + +#: templates/InvenTree/settings/user.html:206 +#, python-format +msgid "%(time)s ago" +msgstr "" + +#: templates/InvenTree/settings/user.html:218 +msgid "Do you really want to remove the selected email address?" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:29 +msgid "Theme Settings" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:39 +msgid "Select theme" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:50 +msgid "Set Theme" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:58 +msgid "Language Settings" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:67 +msgid "Select language" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:83 +#, python-format +msgid "%(lang_translated)s%% translated" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:85 +msgid "No translations available" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:92 +msgid "Set Language" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:95 +msgid "Some languages are not complete" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:97 +msgid "Show only sufficient" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:99 +msgid "and hidden." +msgstr "" + +#: templates/InvenTree/settings/user_display.html:99 +msgid "Show them too" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:106 +msgid "Help the translation efforts!" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:107 +msgid "Native language translation of the web application is community contributed via crowdin. Contributions are welcomed and encouraged." +msgstr "" + +#: templates/InvenTree/settings/user_display.html:108 +msgid "InvenTree Translation Project" +msgstr "" + +#: templates/InvenTree/settings/user_homepage.html:9 +msgid "Home Page Settings" +msgstr "" + +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" +msgstr "" + +#: templates/InvenTree/settings/user_sso.html:9 +msgid "Single Sign On Accounts" +msgstr "" + +#: templates/InvenTree/settings/user_sso.html:16 +msgid "You can sign in to your account using any of the following third party accounts:" +msgstr "" + +#: templates/InvenTree/settings/user_sso.html:52 +msgid "There are no social network accounts connected to this account." +msgstr "" + +#: templates/InvenTree/settings/user_sso.html:58 +msgid "Add SSO Account" +msgstr "" + +#: templates/InvenTree/settings/user_sso.html:67 +msgid "Single Sign On is not enabled for this server" +msgstr "" + +#: templates/about.html:9 +msgid "InvenTree Version" +msgstr "" + +#: templates/about.html:14 +msgid "Development Version" +msgstr "" + +#: templates/about.html:17 +msgid "Up to Date" +msgstr "" + +#: templates/about.html:19 +msgid "Update Available" +msgstr "" + +#: templates/about.html:43 +msgid "Commit Branch" +msgstr "" + +#: templates/about.html:49 +msgid "InvenTree Documentation" +msgstr "" + +#: templates/about.html:54 +msgid "API Version" +msgstr "" + +#: templates/about.html:59 +msgid "Python Version" +msgstr "" + +#: templates/about.html:64 +msgid "Django Version" +msgstr "" + +#: templates/about.html:69 +msgid "View Code on GitHub" +msgstr "" + +#: templates/about.html:74 +msgid "Credits" +msgstr "" + +#: templates/about.html:79 +msgid "Mobile App" +msgstr "" + +#: templates/about.html:84 +msgid "Submit Bug Report" +msgstr "" + +#: templates/about.html:91 templates/clip.html:4 +#: templates/js/translated/helpers.js:585 +msgid "copy to clipboard" +msgstr "" + +#: templates/about.html:91 +msgid "copy version information" +msgstr "" + +#: templates/account/base.html:66 templates/navbar.html:17 +msgid "InvenTree logo" +msgstr "" + +#: templates/account/email_confirm.html:6 +#: templates/account/email_confirm.html:9 +msgid "Confirm Email Address" +msgstr "" + +#: templates/account/email_confirm.html:15 +#, python-format +msgid "Please confirm that %(email)s is an email address for user %(user_display)s." +msgstr "" + +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 +msgid "Confirm" +msgstr "" + +#: templates/account/email_confirm.html:29 +#, python-format +msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." +msgstr "" + +#: templates/account/login.html:6 templates/account/login.html:17 +#: templates/account/login.html:38 templates/socialaccount/login.html:5 +msgid "Sign In" +msgstr "" + +#: templates/account/login.html:21 +msgid "Not a member?" +msgstr "" + +#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/signup.html:22 templates/socialaccount/signup.html:8 +#: templates/socialaccount/signup.html:23 +msgid "Sign Up" +msgstr "" + +#: templates/account/login.html:45 +msgid "Forgot Password?" +msgstr "" + +#: templates/account/login.html:53 +msgid "or log in with" +msgstr "" + +#: templates/account/logout.html:5 templates/account/logout.html:8 +#: templates/account/logout.html:20 +msgid "Sign Out" +msgstr "" + +#: templates/account/logout.html:10 +msgid "Are you sure you want to sign out?" +msgstr "" + +#: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 +msgid "Return to Site" +msgstr "" + +#: templates/account/password_reset.html:5 +#: templates/account/password_reset.html:12 +msgid "Password Reset" +msgstr "" + +#: templates/account/password_reset.html:18 +msgid "Forgotten your password? Enter your email address below, and we'll send you an email allowing you to reset it." +msgstr "" + +#: templates/account/password_reset.html:23 +msgid "Reset My Password" +msgstr "" + +#: templates/account/password_reset.html:27 templates/account/signup.html:37 +msgid "This function is currently disabled. Please contact an administrator." +msgstr "" + +#: templates/account/password_reset_from_key.html:7 +msgid "Bad Token" +msgstr "" + +#: templates/account/password_reset_from_key.html:11 +#, python-format +msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." +msgstr "" + +#: templates/account/password_reset_from_key.html:18 +msgid "Change password" +msgstr "" + +#: templates/account/password_reset_from_key.html:22 +msgid "Your password is now changed." +msgstr "" + +#: templates/account/signup.html:13 +#, python-format +msgid "Already have an account? Then please sign in." +msgstr "" + +#: templates/account/signup.html:28 +msgid "Use a SSO-provider for signup" +msgstr "" + +#: templates/account/signup_closed.html:5 +#: templates/account/signup_closed.html:8 +msgid "Sign Up Closed" +msgstr "" + +#: templates/account/signup_closed.html:10 +msgid "Sign up is currently closed." +msgstr "" + +#: templates/account/signup_closed.html:15 +#: templates/socialaccount/authentication_error.html:19 +#: templates/socialaccount/login.html:38 templates/socialaccount/signup.html:30 +msgid "Return to login page" +msgstr "" + +#: templates/admin_button.html:8 +msgid "View in administration panel" +msgstr "" + +#: templates/allauth_2fa/authenticate.html:5 +msgid "Two-Factor Authentication" +msgstr "" + +#: templates/allauth_2fa/authenticate.html:13 +msgid "Authenticate" +msgstr "" + +#: templates/allauth_2fa/backup_tokens.html:6 +msgid "Two-Factor Authentication Backup Tokens" +msgstr "" + +#: templates/allauth_2fa/backup_tokens.html:17 +msgid "Backup tokens have been generated, but are not revealed here for security reasons. Press the button below to generate new ones." +msgstr "" + +#: templates/allauth_2fa/backup_tokens.html:20 +msgid "No backup tokens are available. Press the button below to generate some." +msgstr "" + +#: templates/allauth_2fa/backup_tokens.html:28 +msgid "Generate Tokens" +msgstr "" + +#: templates/allauth_2fa/remove.html:6 +msgid "Disable Two-Factor Authentication" +msgstr "" + +#: templates/allauth_2fa/remove.html:9 +msgid "Are you sure?" +msgstr "" + +#: templates/allauth_2fa/remove.html:17 +msgid "Disable 2FA" +msgstr "" + +#: templates/allauth_2fa/setup.html:6 +msgid "Setup Two-Factor Authentication" +msgstr "" + +#: templates/allauth_2fa/setup.html:10 +msgid "Step 1" +msgstr "" + +#: templates/allauth_2fa/setup.html:14 +msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." +msgstr "" + +#: templates/allauth_2fa/setup.html:23 +msgid "Step 2" +msgstr "" + +#: templates/allauth_2fa/setup.html:27 +msgid "Input a token generated by the app:" +msgstr "" + +#: templates/allauth_2fa/setup.html:37 +msgid "Verify" +msgstr "" + +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:70 +msgid "Add Link" +msgstr "" + +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:48 +msgid "Add Attachment" +msgstr "" + +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:103 +msgid "Server Restart Required" +msgstr "" + +#: templates/base.html:106 +msgid "A configuration option has been changed which requires a server restart" +msgstr "" + +#: templates/base.html:106 templates/base.html:116 +msgid "Contact your system administrator for further information" +msgstr "" + +#: templates/base.html:113 +msgid "Pending Database Migrations" +msgstr "" + +#: templates/base.html:116 +msgid "There are pending database migrations which require attention" +msgstr "" + +#: templates/email/build_order_completed.html:9 +#: templates/email/canceled_order_assigned.html:9 +#: templates/email/new_order_assigned.html:9 +#: templates/email/overdue_build_order.html:9 +#: templates/email/overdue_purchase_order.html:9 +#: templates/email/overdue_sales_order.html:9 +#: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 +msgid "Click on the following link to view this order" +msgstr "" + +#: templates/email/build_order_required_stock.html:7 +msgid "Stock is required for the following build order" +msgstr "" + +#: templates/email/build_order_required_stock.html:8 +#, python-format +msgid "Build order %(build)s - building %(quantity)s x %(part)s" +msgstr "" + +#: templates/email/build_order_required_stock.html:10 +msgid "Click on the following link to view this build order" +msgstr "" + +#: templates/email/build_order_required_stock.html:14 +msgid "The following parts are low on required stock" +msgstr "" + +#: templates/email/build_order_required_stock.html:18 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +msgid "Required Quantity" +msgstr "" + +#: templates/email/build_order_required_stock.html:38 +#: templates/email/low_stock_notification.html:30 +msgid "You are receiving this email because you are subscribed to notifications for this part " +msgstr "" + +#: templates/email/low_stock_notification.html:9 +msgid "Click on the following link to view this part" +msgstr "" + +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/part.js:3218 +msgid "Minimum Quantity" +msgstr "" + +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +msgid "No Response" +msgstr "" + +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +msgid "No response from the InvenTree server" +msgstr "" + +#: templates/js/translated/api.js:232 +msgid "Error 400: Bad request" +msgstr "" + +#: templates/js/translated/api.js:233 +msgid "API request returned error code 400" +msgstr "" + +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +msgid "Error 401: Not Authenticated" +msgstr "" + +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +msgid "Authentication credentials not supplied" +msgstr "" + +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +msgid "Error 403: Permission Denied" +msgstr "" + +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +msgid "You do not have the required permissions to access this function" +msgstr "" + +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 +msgid "Error 404: Resource Not Found" +msgstr "" + +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +msgid "The requested resource could not be located on the server" +msgstr "" + +#: templates/js/translated/api.js:252 +msgid "Error 405: Method Not Allowed" +msgstr "" + +#: templates/js/translated/api.js:253 +msgid "HTTP method not allowed at URL" +msgstr "" + +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +msgid "Error 408: Timeout" +msgstr "" + +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +msgid "Connection timeout while requesting data from server" +msgstr "" + +#: templates/js/translated/api.js:261 +msgid "Error 503: Service Unavailable" +msgstr "" + +#: templates/js/translated/api.js:262 +msgid "The server is currently unavailable" +msgstr "" + +#: templates/js/translated/api.js:265 +msgid "Unhandled Error Code" +msgstr "" + +#: templates/js/translated/api.js:266 +msgid "Error code" +msgstr "" + +#: templates/js/translated/attachment.js:114 +msgid "All selected attachments will be deleted" +msgstr "" + +#: templates/js/translated/attachment.js:129 +msgid "Delete Attachments" +msgstr "" + +#: templates/js/translated/attachment.js:205 +msgid "Delete attachments" +msgstr "" + +#: templates/js/translated/attachment.js:253 +msgid "Attachment actions" +msgstr "" + +#: templates/js/translated/attachment.js:275 +msgid "No attachments found" +msgstr "" + +#: templates/js/translated/attachment.js:315 +msgid "Edit Attachment" +msgstr "" + +#: templates/js/translated/attachment.js:346 +msgid "Upload Date" +msgstr "" + +#: templates/js/translated/attachment.js:366 +msgid "Edit attachment" +msgstr "" + +#: templates/js/translated/attachment.js:374 +msgid "Delete attachment" +msgstr "" + +#: templates/js/translated/barcode.js:43 +msgid "Scan barcode data here using barcode scanner" +msgstr "" + +#: templates/js/translated/barcode.js:45 +msgid "Enter barcode data" +msgstr "" + +#: templates/js/translated/barcode.js:59 +msgid "Scan barcode using connected webcam" +msgstr "" + +#: templates/js/translated/barcode.js:138 +msgid "Enter optional notes for stock transfer" +msgstr "" + +#: templates/js/translated/barcode.js:139 +msgid "Enter notes" +msgstr "" + +#: templates/js/translated/barcode.js:188 +msgid "Server error" +msgstr "" + +#: templates/js/translated/barcode.js:217 +msgid "Unknown response from server" +msgstr "" + +#: templates/js/translated/barcode.js:252 +#: templates/js/translated/modals.js:1120 +msgid "Invalid server response" +msgstr "" + +#: templates/js/translated/barcode.js:372 +msgid "Scan barcode data" +msgstr "" + +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +msgid "Scan Barcode" +msgstr "" + +#: templates/js/translated/barcode.js:458 +msgid "No URL in response" +msgstr "" + +#: templates/js/translated/barcode.js:498 +msgid "This will remove the link to the associated barcode" +msgstr "" + +#: templates/js/translated/barcode.js:504 +msgid "Unlink" +msgstr "" + +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +msgid "Remove stock item" +msgstr "" + +#: templates/js/translated/barcode.js:610 +msgid "Scan Stock Items Into Location" +msgstr "" + +#: templates/js/translated/barcode.js:612 +msgid "Scan stock item barcode to check in to this location" +msgstr "" + +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 +msgid "Check In" +msgstr "" + +#: templates/js/translated/barcode.js:647 +msgid "No barcode provided" +msgstr "" + +#: templates/js/translated/barcode.js:687 +msgid "Stock Item already scanned" +msgstr "" + +#: templates/js/translated/barcode.js:691 +msgid "Stock Item already in this location" +msgstr "" + +#: templates/js/translated/barcode.js:698 +msgid "Added stock item" +msgstr "" + +#: templates/js/translated/barcode.js:707 +msgid "Barcode does not match valid stock item" +msgstr "" + +#: templates/js/translated/barcode.js:726 +msgid "Scan Stock Container Into Location" +msgstr "" + +#: templates/js/translated/barcode.js:728 +msgid "Scan stock container barcode to check in to this location" +msgstr "" + +#: templates/js/translated/barcode.js:762 +msgid "Barcode does not match valid stock location" +msgstr "" + +#: templates/js/translated/barcode.js:806 +msgid "Check Into Location" +msgstr "" + +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 +msgid "Barcode does not match a valid location" +msgstr "" + +#: templates/js/translated/bom.js:78 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:132 +msgid "Display row data" +msgstr "" + +#: templates/js/translated/bom.js:188 +msgid "Row Data" +msgstr "" + +#: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 +#: templates/js/translated/purchase_order.js:797 templates/modals.html:15 +#: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 +msgid "Close" +msgstr "" + +#: templates/js/translated/bom.js:306 +msgid "Download BOM Template" +msgstr "" + +#: templates/js/translated/bom.js:351 +msgid "Multi Level BOM" +msgstr "" + +#: templates/js/translated/bom.js:352 +msgid "Include BOM data for subassemblies" +msgstr "" + +#: templates/js/translated/bom.js:357 +msgid "Levels" +msgstr "" + +#: templates/js/translated/bom.js:358 +msgid "Select maximum number of BOM levels to export (0 = all levels)" +msgstr "" + +#: templates/js/translated/bom.js:365 +msgid "Include Alternative Parts" +msgstr "" + +#: templates/js/translated/bom.js:366 +msgid "Include alternative parts in exported BOM" +msgstr "" + +#: templates/js/translated/bom.js:371 +msgid "Include Parameter Data" +msgstr "" + +#: templates/js/translated/bom.js:372 +msgid "Include part parameter data in exported BOM" +msgstr "" + +#: templates/js/translated/bom.js:377 +msgid "Include Stock Data" +msgstr "" + +#: templates/js/translated/bom.js:378 +msgid "Include part stock data in exported BOM" +msgstr "" + +#: templates/js/translated/bom.js:383 +msgid "Include Manufacturer Data" +msgstr "" + +#: templates/js/translated/bom.js:384 +msgid "Include part manufacturer data in exported BOM" +msgstr "" + +#: templates/js/translated/bom.js:389 +msgid "Include Supplier Data" +msgstr "" + +#: templates/js/translated/bom.js:390 +msgid "Include part supplier data in exported BOM" +msgstr "" + +#: templates/js/translated/bom.js:395 +msgid "Include Pricing Data" +msgstr "" + +#: templates/js/translated/bom.js:396 +msgid "Include part pricing data in exported BOM" +msgstr "" + +#: templates/js/translated/bom.js:591 +msgid "Remove substitute part" +msgstr "" + +#: templates/js/translated/bom.js:645 +msgid "Select and add a new substitute part using the input below" +msgstr "" + +#: templates/js/translated/bom.js:656 +msgid "Are you sure you wish to remove this substitute part link?" +msgstr "" + +#: templates/js/translated/bom.js:662 +msgid "Remove Substitute Part" +msgstr "" + +#: templates/js/translated/bom.js:701 +msgid "Add Substitute" +msgstr "" + +#: templates/js/translated/bom.js:702 +msgid "Edit BOM Item Substitutes" +msgstr "" + +#: templates/js/translated/bom.js:764 +msgid "All selected BOM items will be deleted" +msgstr "" + +#: templates/js/translated/bom.js:780 +msgid "Delete selected BOM items?" +msgstr "" + +#: templates/js/translated/bom.js:826 +msgid "Delete items" +msgstr "" + +#: templates/js/translated/bom.js:936 +msgid "Load BOM for subassembly" +msgstr "" + +#: templates/js/translated/bom.js:946 +msgid "Substitutes Available" +msgstr "" + +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +msgid "Variant stock allowed" +msgstr "" + +#: templates/js/translated/bom.js:1014 +msgid "Substitutes" +msgstr "" + +#: templates/js/translated/bom.js:1139 +msgid "BOM pricing is complete" +msgstr "" + +#: templates/js/translated/bom.js:1144 +msgid "BOM pricing is incomplete" +msgstr "" + +#: templates/js/translated/bom.js:1151 +msgid "No pricing available" +msgstr "" + +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +msgid "External stock" +msgstr "" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 +#: templates/js/translated/sales_order.js:1910 +msgid "No Stock Available" +msgstr "" + +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +msgid "Includes variant and substitute stock" +msgstr "" + +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1907 +msgid "Includes variant stock" +msgstr "" + +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +msgid "Includes substitute stock" +msgstr "" + +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +msgid "Consumable item" +msgstr "" + +#: templates/js/translated/bom.js:1285 +msgid "Validate BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:1287 +msgid "This line has been validated" +msgstr "" + +#: templates/js/translated/bom.js:1289 +msgid "Edit substitute parts" +msgstr "" + +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 +msgid "Edit BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:1293 +msgid "Delete BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:1313 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1397 +msgid "No BOM items found" +msgstr "" + +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +msgid "Required Part" +msgstr "" + +#: templates/js/translated/bom.js:1683 +msgid "Inherited from parent BOM" +msgstr "" + +#: templates/js/translated/build.js:142 +msgid "Edit Build Order" +msgstr "" + +#: templates/js/translated/build.js:190 +msgid "Create Build Order" +msgstr "" + +#: templates/js/translated/build.js:222 +msgid "Cancel Build Order" +msgstr "" + +#: templates/js/translated/build.js:231 +msgid "Are you sure you wish to cancel this build?" +msgstr "" + +#: templates/js/translated/build.js:237 +msgid "Stock items have been allocated to this build order" +msgstr "" + +#: templates/js/translated/build.js:244 +msgid "There are incomplete outputs remaining for this build order" +msgstr "" + +#: templates/js/translated/build.js:296 +msgid "Build order is ready to be completed" +msgstr "" + +#: templates/js/translated/build.js:304 +msgid "This build order cannot be completed as there are incomplete outputs" +msgstr "" + +#: templates/js/translated/build.js:309 +msgid "Build Order is incomplete" +msgstr "" + +#: templates/js/translated/build.js:327 +msgid "Complete Build Order" +msgstr "" + +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 +msgid "Next available serial number" +msgstr "" + +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 +msgid "Latest serial number" +msgstr "" + +#: templates/js/translated/build.js:379 +msgid "The Bill of Materials contains trackable parts" +msgstr "" + +#: templates/js/translated/build.js:380 +msgid "Build outputs must be generated individually" +msgstr "" + +#: templates/js/translated/build.js:388 +msgid "Trackable parts can have serial numbers specified" +msgstr "" + +#: templates/js/translated/build.js:389 +msgid "Enter serial numbers to generate multiple single build outputs" +msgstr "" + +#: templates/js/translated/build.js:396 +msgid "Create Build Output" +msgstr "" + +#: templates/js/translated/build.js:427 +msgid "Allocate stock items to this build output" +msgstr "" + +#: templates/js/translated/build.js:435 +msgid "Deallocate stock from build output" +msgstr "" + +#: templates/js/translated/build.js:444 +msgid "Complete build output" +msgstr "" + +#: templates/js/translated/build.js:452 +msgid "Scrap build output" +msgstr "" + +#: templates/js/translated/build.js:459 +msgid "Delete build output" +msgstr "" + +#: templates/js/translated/build.js:479 +msgid "Are you sure you wish to deallocate the selected stock items from this build?" +msgstr "" + +#: templates/js/translated/build.js:497 +msgid "Deallocate Stock Items" +msgstr "" + +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 +msgid "Select Build Outputs" +msgstr "" + +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 +msgid "At least one build output must be selected" +msgstr "" + +#: templates/js/translated/build.js:598 +msgid "Selected build outputs will be marked as complete" +msgstr "" + +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 +msgid "Output" +msgstr "" + +#: templates/js/translated/build.js:630 +msgid "Complete Build Outputs" +msgstr "" + +#: templates/js/translated/build.js:727 +msgid "Selected build outputs will be marked as scrapped" +msgstr "" + +#: templates/js/translated/build.js:729 +msgid "Scrapped output are marked as rejected" +msgstr "" + +#: templates/js/translated/build.js:730 +msgid "Allocated stock items will no longer be available" +msgstr "" + +#: templates/js/translated/build.js:731 +msgid "The completion status of the build order will not be adjusted" +msgstr "" + +#: templates/js/translated/build.js:762 +msgid "Scrap Build Outputs" +msgstr "" + +#: templates/js/translated/build.js:852 +msgid "Selected build outputs will be deleted" +msgstr "" + +#: templates/js/translated/build.js:854 +msgid "Build output data will be permanently deleted" +msgstr "" + +#: templates/js/translated/build.js:855 +msgid "Allocated stock items will be returned to stock" +msgstr "" + +#: templates/js/translated/build.js:873 +msgid "Delete Build Outputs" +msgstr "" + +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +msgid "Allocated Quantity" +msgstr "" + +#: templates/js/translated/build.js:1003 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1025 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1043 +msgid "Scrap outputs" +msgstr "" + +#: templates/js/translated/build.js:1061 +msgid "Delete outputs" +msgstr "" + +#: templates/js/translated/build.js:1115 +msgid "build output" +msgstr "" + +#: templates/js/translated/build.js:1116 +msgid "build outputs" +msgstr "" + +#: templates/js/translated/build.js:1120 +msgid "Build output actions" +msgstr "" + +#: templates/js/translated/build.js:1294 +msgid "No active build outputs found" +msgstr "" + +#: templates/js/translated/build.js:1387 +msgid "Allocated Lines" +msgstr "" + +#: templates/js/translated/build.js:1401 +msgid "Required Tests" +msgstr "" + +#: templates/js/translated/build.js:1573 +#: templates/js/translated/purchase_order.js:611 +#: templates/js/translated/sales_order.js:1171 +msgid "Select Parts" +msgstr "" + +#: templates/js/translated/build.js:1574 +#: templates/js/translated/sales_order.js:1172 +msgid "You must select at least one part to allocate" +msgstr "" + +#: templates/js/translated/build.js:1637 +#: templates/js/translated/sales_order.js:1121 +msgid "Specify stock allocation quantity" +msgstr "" + +#: templates/js/translated/build.js:1714 +msgid "All Parts Allocated" +msgstr "" + +#: templates/js/translated/build.js:1715 +msgid "All selected parts have been fully allocated" +msgstr "" + +#: templates/js/translated/build.js:1729 +#: templates/js/translated/sales_order.js:1186 +msgid "Select source location (leave blank to take from all locations)" +msgstr "" + +#: templates/js/translated/build.js:1757 +msgid "Allocate Stock Items to Build Order" +msgstr "" + +#: templates/js/translated/build.js:1768 +#: templates/js/translated/sales_order.js:1283 +msgid "No matching stock locations" +msgstr "" + +#: templates/js/translated/build.js:1841 +#: templates/js/translated/sales_order.js:1362 +msgid "No matching stock items" +msgstr "" + +#: templates/js/translated/build.js:1938 +msgid "Automatic Stock Allocation" +msgstr "" + +#: templates/js/translated/build.js:1939 +msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" +msgstr "" + +#: templates/js/translated/build.js:1941 +msgid "If a location is specified, stock will only be allocated from that location" +msgstr "" + +#: templates/js/translated/build.js:1942 +msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" +msgstr "" + +#: templates/js/translated/build.js:1943 +msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" +msgstr "" + +#: templates/js/translated/build.js:1974 +msgid "Allocate Stock Items" +msgstr "" + +#: templates/js/translated/build.js:2080 +msgid "No builds matching query" +msgstr "" + +#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 +#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 +#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 +#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +msgid "Select" +msgstr "" + +#: templates/js/translated/build.js:2129 +msgid "Build order is overdue" +msgstr "" + +#: templates/js/translated/build.js:2175 +msgid "Progress" +msgstr "" + +#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +msgid "No user information" +msgstr "" + +#: templates/js/translated/build.js:2387 +#: templates/js/translated/sales_order.js:1646 +msgid "Edit stock allocation" +msgstr "" + +#: templates/js/translated/build.js:2388 +#: templates/js/translated/sales_order.js:1647 +msgid "Delete stock allocation" +msgstr "" + +#: templates/js/translated/build.js:2403 +msgid "Edit Allocation" +msgstr "" + +#: templates/js/translated/build.js:2415 +msgid "Remove Allocation" +msgstr "" + +#: templates/js/translated/build.js:2456 +msgid "build line" +msgstr "" + +#: templates/js/translated/build.js:2457 +msgid "build lines" +msgstr "" + +#: templates/js/translated/build.js:2475 +msgid "No build lines found" +msgstr "" + +#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 +msgid "Trackable part" +msgstr "" + +#: templates/js/translated/build.js:2540 +msgid "Unit Quantity" +msgstr "" + +#: templates/js/translated/build.js:2592 +#: templates/js/translated/sales_order.js:1915 +msgid "Sufficient stock available" +msgstr "" + +#: templates/js/translated/build.js:2647 +msgid "Consumable Item" +msgstr "" + +#: templates/js/translated/build.js:2652 +msgid "Tracked item" +msgstr "" + +#: templates/js/translated/build.js:2659 +#: templates/js/translated/sales_order.js:2016 +msgid "Build stock" +msgstr "" + +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +msgid "Order stock" +msgstr "" + +#: templates/js/translated/build.js:2668 +#: templates/js/translated/sales_order.js:2010 +msgid "Allocate stock" +msgstr "" + +#: templates/js/translated/build.js:2672 +msgid "Remove stock allocation" +msgstr "" + +#: templates/js/translated/company.js:98 +msgid "Add Manufacturer" +msgstr "" + +#: templates/js/translated/company.js:111 +#: templates/js/translated/company.js:213 +msgid "Add Manufacturer Part" +msgstr "" + +#: templates/js/translated/company.js:132 +msgid "Edit Manufacturer Part" +msgstr "" + +#: templates/js/translated/company.js:201 +#: templates/js/translated/purchase_order.js:93 +msgid "Add Supplier" +msgstr "" + +#: templates/js/translated/company.js:243 +#: templates/js/translated/purchase_order.js:318 +msgid "Add Supplier Part" +msgstr "" + +#: templates/js/translated/company.js:344 +msgid "All selected supplier parts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:360 +msgid "Delete Supplier Parts" +msgstr "" + +#: templates/js/translated/company.js:465 +msgid "Add new Company" +msgstr "" + +#: templates/js/translated/company.js:536 +msgid "Parts Supplied" +msgstr "" + +#: templates/js/translated/company.js:545 +msgid "Parts Manufactured" +msgstr "" + +#: templates/js/translated/company.js:560 +msgid "No company information found" +msgstr "" + +#: templates/js/translated/company.js:609 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:625 +#: templates/js/translated/company.js:748 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:662 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:668 +#: templates/js/translated/company.js:732 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:676 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:707 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:720 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:726 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:752 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:849 +msgid "Create New Address" +msgstr "" + +#: templates/js/translated/company.js:864 +#: templates/js/translated/company.js:1025 +msgid "Edit Address" +msgstr "" + +#: templates/js/translated/company.js:899 +msgid "All selected addresses will be deleted" +msgstr "" + +#: templates/js/translated/company.js:913 +msgid "Delete Addresses" +msgstr "" + +#: templates/js/translated/company.js:940 +msgid "No addresses found" +msgstr "" + +#: templates/js/translated/company.js:979 +msgid "Postal city" +msgstr "" + +#: templates/js/translated/company.js:985 +msgid "State/province" +msgstr "" + +#: templates/js/translated/company.js:997 +msgid "Courier notes" +msgstr "" + +#: templates/js/translated/company.js:1003 +msgid "Internal notes" +msgstr "" + +#: templates/js/translated/company.js:1029 +msgid "Delete Address" +msgstr "" + +#: templates/js/translated/company.js:1102 +msgid "All selected manufacturer parts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:1117 +msgid "Delete Manufacturer Parts" +msgstr "" + +#: templates/js/translated/company.js:1151 +msgid "All selected parameters will be deleted" +msgstr "" + +#: templates/js/translated/company.js:1165 +msgid "Delete Parameters" +msgstr "" + +#: templates/js/translated/company.js:1181 +#: templates/js/translated/company.js:1469 templates/js/translated/part.js:2244 +msgid "Order parts" +msgstr "" + +#: templates/js/translated/company.js:1198 +msgid "Delete manufacturer parts" +msgstr "" + +#: templates/js/translated/company.js:1230 +msgid "Manufacturer part actions" +msgstr "" + +#: templates/js/translated/company.js:1249 +msgid "No manufacturer parts found" +msgstr "" + +#: templates/js/translated/company.js:1269 +#: templates/js/translated/company.js:1557 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 +msgid "Template part" +msgstr "" + +#: templates/js/translated/company.js:1273 +#: templates/js/translated/company.js:1561 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 +msgid "Assembled part" +msgstr "" + +#: templates/js/translated/company.js:1393 templates/js/translated/part.js:1464 +msgid "No parameters found" +msgstr "" + +#: templates/js/translated/company.js:1428 templates/js/translated/part.js:1527 +msgid "Edit parameter" +msgstr "" + +#: templates/js/translated/company.js:1429 templates/js/translated/part.js:1528 +msgid "Delete parameter" +msgstr "" + +#: templates/js/translated/company.js:1446 templates/js/translated/part.js:1433 +msgid "Edit Parameter" +msgstr "" + +#: templates/js/translated/company.js:1455 templates/js/translated/part.js:1549 +msgid "Delete Parameter" +msgstr "" + +#: templates/js/translated/company.js:1486 +msgid "Delete supplier parts" +msgstr "" + +#: templates/js/translated/company.js:1536 +msgid "No supplier parts found" +msgstr "" + +#: templates/js/translated/company.js:1654 +msgid "Base Units" +msgstr "" + +#: templates/js/translated/company.js:1684 +msgid "Availability" +msgstr "" + +#: templates/js/translated/company.js:1715 +msgid "Edit supplier part" +msgstr "" + +#: templates/js/translated/company.js:1716 +msgid "Delete supplier part" +msgstr "" + +#: templates/js/translated/company.js:1769 +#: templates/js/translated/pricing.js:694 +msgid "Delete Price Break" +msgstr "" + +#: templates/js/translated/company.js:1779 +#: templates/js/translated/pricing.js:712 +msgid "Edit Price Break" +msgstr "" + +#: templates/js/translated/company.js:1794 +msgid "No price break information found" +msgstr "" + +#: templates/js/translated/company.js:1823 +msgid "Last updated" +msgstr "" + +#: templates/js/translated/company.js:1830 +msgid "Edit price break" +msgstr "" + +#: templates/js/translated/company.js:1831 +msgid "Delete price break" +msgstr "" + +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:672 +msgid "true" +msgstr "" + +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:673 +msgid "false" +msgstr "" + +#: templates/js/translated/filters.js:214 +msgid "Select filter" +msgstr "" + +#: templates/js/translated/filters.js:437 +msgid "Print Labels" +msgstr "" + +#: templates/js/translated/filters.js:441 +msgid "Print Reports" +msgstr "" + +#: templates/js/translated/filters.js:453 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:460 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:469 +msgid "Add new filter" +msgstr "" + +#: templates/js/translated/filters.js:477 +msgid "Clear all filters" +msgstr "" + +#: templates/js/translated/filters.js:582 +msgid "Create filter" +msgstr "" + +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 +msgid "Action Prohibited" +msgstr "" + +#: templates/js/translated/forms.js:380 +msgid "Create operation not allowed" +msgstr "" + +#: templates/js/translated/forms.js:395 +msgid "Update operation not allowed" +msgstr "" + +#: templates/js/translated/forms.js:409 +msgid "Delete operation not allowed" +msgstr "" + +#: templates/js/translated/forms.js:423 +msgid "View operation not allowed" +msgstr "" + +#: templates/js/translated/forms.js:800 +msgid "Keep this form open" +msgstr "" + +#: templates/js/translated/forms.js:903 +msgid "Enter a valid number" +msgstr "" + +#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/modals.html:43 +msgid "Form errors exist" +msgstr "" + +#: templates/js/translated/forms.js:1971 +msgid "No results found" +msgstr "" + +#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +msgid "Searching" +msgstr "" + +#: templates/js/translated/forms.js:2489 +msgid "Clear input" +msgstr "" + +#: templates/js/translated/forms.js:3091 +msgid "File Column" +msgstr "" + +#: templates/js/translated/forms.js:3091 +msgid "Field Name" +msgstr "" + +#: templates/js/translated/forms.js:3103 +msgid "Select Columns" +msgstr "" + +#: templates/js/translated/helpers.js:77 +msgid "YES" +msgstr "" + +#: templates/js/translated/helpers.js:80 +msgid "NO" +msgstr "" + +#: templates/js/translated/helpers.js:93 +msgid "True" +msgstr "" + +#: templates/js/translated/helpers.js:94 +msgid "False" +msgstr "" + +#: templates/js/translated/index.js:104 +msgid "No parts required for builds" +msgstr "" + +#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:54 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:72 +msgid "No Labels Found" +msgstr "" + +#: templates/js/translated/label.js:73 +msgid "No label templates found which match the selected items" +msgstr "" + +#: templates/js/translated/label.js:97 +msgid "selected" +msgstr "" + +#: templates/js/translated/label.js:133 +msgid "Printing Options" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print label" +msgstr "" + +#: templates/js/translated/label.js:148 +msgid "Print labels" +msgstr "" + +#: templates/js/translated/label.js:149 +msgid "Print" +msgstr "" + +#: templates/js/translated/label.js:155 +msgid "Select label template" +msgstr "" + +#: templates/js/translated/label.js:168 +msgid "Select plugin" +msgstr "" + +#: templates/js/translated/label.js:187 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 +msgid "Cancel" +msgstr "" + +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 +#: templates/modals.html:28 templates/modals.html:51 +msgid "Submit" +msgstr "" + +#: templates/js/translated/modals.js:156 +msgid "Form Title" +msgstr "" + +#: templates/js/translated/modals.js:445 +msgid "Waiting for server..." +msgstr "" + +#: templates/js/translated/modals.js:596 +msgid "Show Error Information" +msgstr "" + +#: templates/js/translated/modals.js:682 +msgid "Accept" +msgstr "" + +#: templates/js/translated/modals.js:740 +msgid "Loading Data" +msgstr "" + +#: templates/js/translated/modals.js:1011 +msgid "Invalid response from server" +msgstr "" + +#: templates/js/translated/modals.js:1011 +msgid "Form data missing from server response" +msgstr "" + +#: templates/js/translated/modals.js:1023 +msgid "Error posting form data" +msgstr "" + +#: templates/js/translated/modals.js:1120 +msgid "JSON response missing form data" +msgstr "" + +#: templates/js/translated/modals.js:1135 +msgid "Error 400: Bad Request" +msgstr "" + +#: templates/js/translated/modals.js:1136 +msgid "Server returned error code 400" +msgstr "" + +#: templates/js/translated/modals.js:1159 +msgid "Error requesting form data" +msgstr "" + +#: templates/js/translated/news.js:33 +msgid "No news found" +msgstr "" + +#: templates/js/translated/news.js:38 +#: templates/js/translated/notification.js:46 +#: templates/js/translated/part.js:1604 +msgid "ID" +msgstr "" + +#: templates/js/translated/notification.js:52 +msgid "Age" +msgstr "" + +#: templates/js/translated/notification.js:65 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:224 +msgid "Mark as unread" +msgstr "" + +#: templates/js/translated/notification.js:228 +msgid "Mark as read" +msgstr "" + +#: templates/js/translated/notification.js:254 +msgid "No unread notifications" +msgstr "" + +#: templates/js/translated/notification.js:296 templates/notifications.html:12 +msgid "Notifications will load here" +msgstr "" + +#: templates/js/translated/order.js:89 +msgid "Add Extra Line Item" +msgstr "" + +#: templates/js/translated/order.js:126 +msgid "Export Order" +msgstr "" + +#: templates/js/translated/order.js:241 +msgid "Duplicate Line" +msgstr "" + +#: templates/js/translated/order.js:255 +msgid "Edit Line" +msgstr "" + +#: templates/js/translated/order.js:268 +msgid "Delete Line" +msgstr "" + +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1991 +msgid "No line items found" +msgstr "" + +#: templates/js/translated/order.js:369 +msgid "Duplicate line" +msgstr "" + +#: templates/js/translated/order.js:370 +msgid "Edit line" +msgstr "" + +#: templates/js/translated/order.js:374 +msgid "Delete line" +msgstr "" + +#: templates/js/translated/part.js:90 +msgid "Part Attributes" +msgstr "" + +#: templates/js/translated/part.js:94 +msgid "Part Creation Options" +msgstr "" + +#: templates/js/translated/part.js:98 +msgid "Part Duplication Options" +msgstr "" + +#: templates/js/translated/part.js:121 +msgid "Add Part Category" +msgstr "" + +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 +msgid "Icon (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/part.js:352 +msgid "Create Part Category" +msgstr "" + +#: templates/js/translated/part.js:355 +msgid "Create new category after this one" +msgstr "" + +#: templates/js/translated/part.js:356 +msgid "Part category created" +msgstr "" + +#: templates/js/translated/part.js:370 +msgid "Edit Part Category" +msgstr "" + +#: templates/js/translated/part.js:383 +msgid "Are you sure you want to delete this part category?" +msgstr "" + +#: templates/js/translated/part.js:388 +msgid "Move to parent category" +msgstr "" + +#: templates/js/translated/part.js:397 +msgid "Delete Part Category" +msgstr "" + +#: templates/js/translated/part.js:401 +msgid "Action for parts in this category" +msgstr "" + +#: templates/js/translated/part.js:406 +msgid "Action for child categories" +msgstr "" + +#: templates/js/translated/part.js:430 +msgid "Create Part" +msgstr "" + +#: templates/js/translated/part.js:432 +msgid "Create another part after this one" +msgstr "" + +#: templates/js/translated/part.js:433 +msgid "Part created successfully" +msgstr "" + +#: templates/js/translated/part.js:461 +msgid "Edit Part" +msgstr "" + +#: templates/js/translated/part.js:463 +msgid "Part edited" +msgstr "" + +#: templates/js/translated/part.js:474 +msgid "Create Part Variant" +msgstr "" + +#: templates/js/translated/part.js:531 +msgid "Active Part" +msgstr "" + +#: templates/js/translated/part.js:532 +msgid "Part cannot be deleted as it is currently active" +msgstr "" + +#: templates/js/translated/part.js:546 +msgid "Deleting this part cannot be reversed" +msgstr "" + +#: templates/js/translated/part.js:548 +msgid "Any stock items for this part will be deleted" +msgstr "" + +#: templates/js/translated/part.js:549 +msgid "This part will be removed from any Bills of Material" +msgstr "" + +#: templates/js/translated/part.js:550 +msgid "All manufacturer and supplier information for this part will be deleted" +msgstr "" + +#: templates/js/translated/part.js:557 +msgid "Delete Part" +msgstr "" + +#: templates/js/translated/part.js:593 +msgid "You are subscribed to notifications for this item" +msgstr "" + +#: templates/js/translated/part.js:595 +msgid "You have subscribed to notifications for this item" +msgstr "" + +#: templates/js/translated/part.js:600 +msgid "Subscribe to notifications for this item" +msgstr "" + +#: templates/js/translated/part.js:602 +msgid "You have unsubscribed to notifications for this item" +msgstr "" + +#: templates/js/translated/part.js:619 +msgid "Validating the BOM will mark each line item as valid" +msgstr "" + +#: templates/js/translated/part.js:629 +msgid "Validate Bill of Materials" +msgstr "" + +#: templates/js/translated/part.js:632 +msgid "Validated Bill of Materials" +msgstr "" + +#: templates/js/translated/part.js:657 +msgid "Copy Bill of Materials" +msgstr "" + +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 +msgid "Low stock" +msgstr "" + +#: templates/js/translated/part.js:688 +msgid "No stock available" +msgstr "" + +#: templates/js/translated/part.js:748 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:771 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 +msgid "Virtual part" +msgstr "" + +#: templates/js/translated/part.js:806 +msgid "Subscribed part" +msgstr "" + +#: templates/js/translated/part.js:810 +msgid "Salable part" +msgstr "" + +#: templates/js/translated/part.js:889 +msgid "Schedule generation of a new stocktake report." +msgstr "" + +#: templates/js/translated/part.js:889 +msgid "Once complete, the stocktake report will be available for download." +msgstr "" + +#: templates/js/translated/part.js:897 +msgid "Generate Stocktake Report" +msgstr "" + +#: templates/js/translated/part.js:901 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:1050 +msgid "No stocktake information available" +msgstr "" + +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 +msgid "Edit Stocktake Entry" +msgstr "" + +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 +msgid "Delete Stocktake Entry" +msgstr "" + +#: templates/js/translated/part.js:1281 +msgid "No variants found" +msgstr "" + +#: templates/js/translated/part.js:1599 +msgid "No part parameter templates found" +msgstr "" + +#: templates/js/translated/part.js:1662 +msgid "Edit Part Parameter Template" +msgstr "" + +#: templates/js/translated/part.js:1674 +msgid "Any parameters which reference this template will also be deleted" +msgstr "" + +#: templates/js/translated/part.js:1682 +msgid "Delete Part Parameter Template" +msgstr "" + +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1655 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2154 +#: templates/js/translated/return_order.js:756 +#: templates/js/translated/sales_order.js:1875 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2221 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1969 +msgid "Delete part relationship" +msgstr "" + +#: templates/js/translated/part.js:1991 +msgid "Delete Part Relationship" +msgstr "" + +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +msgid "No parts found" +msgstr "" + +#: templates/js/translated/part.js:2200 +msgid "Set the part category for the selected parts" +msgstr "" + +#: templates/js/translated/part.js:2205 +msgid "Set Part Category" +msgstr "" + +#: templates/js/translated/part.js:2235 +msgid "Set category" +msgstr "" + +#: templates/js/translated/part.js:2287 +msgid "part" +msgstr "" + +#: templates/js/translated/part.js:2288 +msgid "parts" +msgstr "" + +#: templates/js/translated/part.js:2384 +msgid "No category" +msgstr "" + +#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/stock.js:2669 +msgid "Display as list" +msgstr "" + +#: templates/js/translated/part.js:2547 +msgid "Display as grid" +msgstr "" + +#: templates/js/translated/part.js:2645 +msgid "No subcategories found" +msgstr "" + +#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +msgid "Display as tree" +msgstr "" + +#: templates/js/translated/part.js:2761 +msgid "Load Subcategories" +msgstr "" + +#: templates/js/translated/part.js:2777 +msgid "Subscribed category" +msgstr "" + +#: templates/js/translated/part.js:2864 +msgid "No test templates matching query" +msgstr "" + +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +msgid "results" +msgstr "" + +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 +#: templates/js/translated/stock.js:1728 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/part.js:2941 +msgid "This test is defined for a parent part" +msgstr "" + +#: templates/js/translated/part.js:2957 +msgid "Edit Test Result Template" +msgstr "" + +#: templates/js/translated/part.js:2971 +msgid "Delete Test Result Template" +msgstr "" + +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +msgid "No date specified" +msgstr "" + +#: templates/js/translated/part.js:3053 +msgid "Specified date is in the past" +msgstr "" + +#: templates/js/translated/part.js:3059 +msgid "Speculative" +msgstr "" + +#: templates/js/translated/part.js:3109 +msgid "No scheduling information available for this part" +msgstr "" + +#: templates/js/translated/part.js:3115 +msgid "Error fetching scheduling information for this part" +msgstr "" + +#: templates/js/translated/part.js:3211 +msgid "Scheduled Stock Quantities" +msgstr "" + +#: templates/js/translated/part.js:3227 +msgid "Maximum Quantity" +msgstr "" + +#: templates/js/translated/part.js:3272 +msgid "Minimum Stock Level" +msgstr "" + +#: templates/js/translated/plugin.js:46 +msgid "No plugins found" +msgstr "" + +#: templates/js/translated/plugin.js:58 +msgid "This plugin is no longer installed" +msgstr "" + +#: templates/js/translated/plugin.js:60 +msgid "This plugin is active" +msgstr "" + +#: templates/js/translated/plugin.js:62 +msgid "This plugin is installed but not active" +msgstr "" + +#: templates/js/translated/plugin.js:117 templates/js/translated/plugin.js:186 +msgid "Disable Plugin" +msgstr "" + +#: templates/js/translated/plugin.js:119 templates/js/translated/plugin.js:186 +msgid "Enable Plugin" +msgstr "" + +#: templates/js/translated/plugin.js:158 +msgid "The Plugin was installed" +msgstr "" + +#: templates/js/translated/plugin.js:177 +msgid "Are you sure you want to enable this plugin?" +msgstr "" + +#: templates/js/translated/plugin.js:181 +msgid "Are you sure you want to disable this plugin?" +msgstr "" + +#: templates/js/translated/plugin.js:189 +msgid "Enable" +msgstr "" + +#: templates/js/translated/plugin.js:189 +msgid "Disable" +msgstr "" + +#: templates/js/translated/plugin.js:203 +msgid "Plugin updated" +msgstr "" + +#: templates/js/translated/pricing.js:159 +msgid "Error fetching currency data" +msgstr "" + +#: templates/js/translated/pricing.js:321 +msgid "No BOM data available" +msgstr "" + +#: templates/js/translated/pricing.js:463 +msgid "No supplier pricing data available" +msgstr "" + +#: templates/js/translated/pricing.js:572 +msgid "No price break data available" +msgstr "" + +#: templates/js/translated/pricing.js:755 +msgid "No purchase history data available" +msgstr "" + +#: templates/js/translated/pricing.js:791 +msgid "Purchase Price History" +msgstr "" + +#: templates/js/translated/pricing.js:894 +msgid "No sales history data available" +msgstr "" + +#: templates/js/translated/pricing.js:916 +msgid "Sale Price History" +msgstr "" + +#: templates/js/translated/pricing.js:1005 +msgid "No variant data available" +msgstr "" + +#: templates/js/translated/pricing.js:1045 +msgid "Variant Part" +msgstr "" + +#: templates/js/translated/purchase_order.js:169 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:176 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:177 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:184 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:185 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:206 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:223 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:431 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:448 +#: templates/js/translated/return_order.js:210 +#: templates/js/translated/sales_order.js:500 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:454 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:459 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:460 +#: templates/js/translated/sales_order.js:514 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:483 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:488 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:494 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:515 +#: templates/js/translated/return_order.js:164 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:520 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:612 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:637 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:646 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:664 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:705 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:755 +msgid "Merge" +msgstr "" + +#: templates/js/translated/purchase_order.js:859 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:878 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:1073 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1074 +#: templates/js/translated/return_order.js:492 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1104 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1115 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1191 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1205 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1206 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1209 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1217 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1228 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1280 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1305 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1307 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:561 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1334 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1402 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1403 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1417 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1682 +#: templates/js/translated/return_order.js:286 +#: templates/js/translated/sales_order.js:774 +#: templates/js/translated/sales_order.js:998 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1748 +#: templates/js/translated/return_order.js:354 +#: templates/js/translated/sales_order.js:851 +#: templates/js/translated/sales_order.js:1011 +msgid "Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1844 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1862 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1917 +#: templates/js/translated/sales_order.js:2070 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1932 +#: templates/js/translated/return_order.js:476 +#: templates/js/translated/return_order.js:669 +#: templates/js/translated/sales_order.js:2083 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1943 +#: templates/js/translated/return_order.js:682 +#: templates/js/translated/sales_order.js:2094 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/sales_order.js:2024 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:801 +#: templates/js/translated/sales_order.js:2025 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2227 +#: templates/js/translated/return_order.js:805 +#: templates/js/translated/sales_order.js:2031 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:63 +msgid "items selected" +msgstr "" + +#: templates/js/translated/report.js:71 +msgid "Select Report Template" +msgstr "" + +#: templates/js/translated/report.js:86 +msgid "Select Test Report Template" +msgstr "" + +#: templates/js/translated/report.js:140 +msgid "No Reports Found" +msgstr "" + +#: templates/js/translated/report.js:141 +msgid "No report templates found which match the selected items" +msgstr "" + +#: templates/js/translated/return_order.js:60 +#: templates/js/translated/sales_order.js:86 +msgid "Add Customer" +msgstr "" + +#: templates/js/translated/return_order.js:134 +msgid "Create Return Order" +msgstr "" + +#: templates/js/translated/return_order.js:149 +msgid "Edit Return Order" +msgstr "" + +#: templates/js/translated/return_order.js:169 +msgid "Issue Return Order" +msgstr "" + +#: templates/js/translated/return_order.js:186 +msgid "Are you sure you wish to cancel this Return Order?" +msgstr "" + +#: templates/js/translated/return_order.js:193 +msgid "Cancel Return Order" +msgstr "" + +#: templates/js/translated/return_order.js:218 +msgid "Complete Return Order" +msgstr "" + +#: templates/js/translated/return_order.js:266 +msgid "No return orders found" +msgstr "" + +#: templates/js/translated/return_order.js:300 +#: templates/js/translated/sales_order.js:788 +msgid "Invalid Customer" +msgstr "" + +#: templates/js/translated/return_order.js:562 +msgid "Receive Return Order Items" +msgstr "" + +#: templates/js/translated/return_order.js:693 +#: templates/js/translated/sales_order.js:2231 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:798 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:161 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:176 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:291 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:296 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:336 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:360 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:416 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:420 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:430 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:452 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:513 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:535 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:540 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:559 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:564 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:618 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:728 +msgid "No sales orders found" +msgstr "" + +#: templates/js/translated/sales_order.js:908 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:911 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:916 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:933 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:948 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:981 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:1006 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:1030 +#: templates/js/translated/sales_order.js:1529 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1048 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:1052 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1219 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1270 +msgid "Confirm stock allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1271 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1477 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1569 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1583 +msgid "Confirm Delete Operation" +msgstr "" + +#: templates/js/translated/sales_order.js:1584 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1623 +#: templates/js/translated/sales_order.js:1710 +#: templates/js/translated/stock.js:1773 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1631 +#: templates/js/translated/sales_order.js:1719 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:2008 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2012 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:2021 +#: templates/js/translated/sales_order.js:2209 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:2035 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:2038 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:2109 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2217 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:270 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:292 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:342 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:352 +msgid "Minimize results" +msgstr "" + +#: templates/js/translated/search.js:355 +msgid "Remove results" +msgstr "" + +#: templates/js/translated/stock.js:98 +msgid "Serialize Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:129 +msgid "Confirm Stock Serialization" +msgstr "" + +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 +msgid "Add Location type" +msgstr "" + +#: templates/js/translated/stock.js:202 +msgid "Edit Stock Location" +msgstr "" + +#: templates/js/translated/stock.js:217 +msgid "New Stock Location" +msgstr "" + +#: templates/js/translated/stock.js:219 +msgid "Create another location after this one" +msgstr "" + +#: templates/js/translated/stock.js:220 +msgid "Stock location created" +msgstr "" + +#: templates/js/translated/stock.js:234 +msgid "Are you sure you want to delete this stock location?" +msgstr "" + +#: templates/js/translated/stock.js:241 +msgid "Move to parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:250 +msgid "Delete Stock Location" +msgstr "" + +#: templates/js/translated/stock.js:254 +msgid "Action for stock items in this stock location" +msgstr "" + +#: templates/js/translated/stock.js:259 +msgid "Action for sub-locations" +msgstr "" + +#: templates/js/translated/stock.js:313 +msgid "This part cannot be serialized" +msgstr "" + +#: templates/js/translated/stock.js:349 +msgid "Add given quantity as packs instead of individual items" +msgstr "" + +#: templates/js/translated/stock.js:362 +msgid "Enter initial quantity for this stock item" +msgstr "" + +#: templates/js/translated/stock.js:368 +msgid "Enter serial numbers for new stock (or leave blank)" +msgstr "" + +#: templates/js/translated/stock.js:439 +msgid "Stock item duplicated" +msgstr "" + +#: templates/js/translated/stock.js:459 +msgid "Duplicate Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:475 +msgid "Are you sure you want to delete this stock item?" +msgstr "" + +#: templates/js/translated/stock.js:480 +msgid "Delete Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:501 +msgid "Edit Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:543 +msgid "Create another item after this one" +msgstr "" + +#: templates/js/translated/stock.js:555 +msgid "Created new stock item" +msgstr "" + +#: templates/js/translated/stock.js:568 +msgid "Created multiple stock items" +msgstr "" + +#: templates/js/translated/stock.js:593 +msgid "Find Serial Number" +msgstr "" + +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +msgid "Enter serial number" +msgstr "" + +#: templates/js/translated/stock.js:614 +msgid "Enter a serial number" +msgstr "" + +#: templates/js/translated/stock.js:634 +msgid "No matching serial number" +msgstr "" + +#: templates/js/translated/stock.js:643 +msgid "More than one matching result found" +msgstr "" + +#: templates/js/translated/stock.js:751 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:752 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:829 +msgid "Warning: Merge operation cannot be reversed" +msgstr "" + +#: templates/js/translated/stock.js:830 +msgid "Some information will be lost when merging stock items" +msgstr "" + +#: templates/js/translated/stock.js:832 +msgid "Stock transaction history will be deleted for merged items" +msgstr "" + +#: templates/js/translated/stock.js:833 +msgid "Supplier part information will be deleted for merged items" +msgstr "" + +#: templates/js/translated/stock.js:928 +msgid "Confirm stock item merge" +msgstr "" + +#: templates/js/translated/stock.js:929 +msgid "Merge Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1024 +msgid "Transfer Stock" +msgstr "" + +#: templates/js/translated/stock.js:1025 +msgid "Move" +msgstr "" + +#: templates/js/translated/stock.js:1031 +msgid "Count Stock" +msgstr "" + +#: templates/js/translated/stock.js:1032 +msgid "Count" +msgstr "" + +#: templates/js/translated/stock.js:1036 +msgid "Remove Stock" +msgstr "" + +#: templates/js/translated/stock.js:1037 +msgid "Take" +msgstr "" + +#: templates/js/translated/stock.js:1041 +msgid "Add Stock" +msgstr "" + +#: templates/js/translated/stock.js:1042 users/models.py:401 +msgid "Add" +msgstr "" + +#: templates/js/translated/stock.js:1046 +msgid "Delete Stock" +msgstr "" + +#: templates/js/translated/stock.js:1143 +msgid "Quantity cannot be adjusted for serialized stock" +msgstr "" + +#: templates/js/translated/stock.js:1143 +msgid "Specify stock quantity" +msgstr "" + +#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1178 +msgid "Select at least one available stock item" +msgstr "" + +#: templates/js/translated/stock.js:1224 +msgid "Confirm stock adjustment" +msgstr "" + +#: templates/js/translated/stock.js:1360 +msgid "PASS" +msgstr "" + +#: templates/js/translated/stock.js:1362 +msgid "FAIL" +msgstr "" + +#: templates/js/translated/stock.js:1367 +msgid "NO RESULT" +msgstr "" + +#: templates/js/translated/stock.js:1447 +msgid "Pass test" +msgstr "" + +#: templates/js/translated/stock.js:1450 +msgid "Add test result" +msgstr "" + +#: templates/js/translated/stock.js:1473 +msgid "No test results found" +msgstr "" + +#: templates/js/translated/stock.js:1537 +msgid "Test Date" +msgstr "" + +#: templates/js/translated/stock.js:1550 +msgid "Test started" +msgstr "" + +#: templates/js/translated/stock.js:1559 +msgid "Test finished" +msgstr "" + +#: templates/js/translated/stock.js:1713 +msgid "Edit Test Result" +msgstr "" + +#: templates/js/translated/stock.js:1733 +msgid "Delete Test Result" +msgstr "" + +#: templates/js/translated/stock.js:1765 +msgid "In production" +msgstr "" + +#: templates/js/translated/stock.js:1769 +msgid "Installed in Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:1777 +msgid "Assigned to Sales Order" +msgstr "" + +#: templates/js/translated/stock.js:1783 +msgid "No stock location set" +msgstr "" + +#: templates/js/translated/stock.js:1839 +msgid "Change stock status" +msgstr "" + +#: templates/js/translated/stock.js:1848 +msgid "Merge stock" +msgstr "" + +#: templates/js/translated/stock.js:1897 +msgid "Delete stock" +msgstr "" + +#: templates/js/translated/stock.js:1952 +msgid "stock items" +msgstr "" + +#: templates/js/translated/stock.js:1957 +msgid "Scan to location" +msgstr "" + +#: templates/js/translated/stock.js:1968 +msgid "Stock Actions" +msgstr "" + +#: templates/js/translated/stock.js:2012 +msgid "Load installed items" +msgstr "" + +#: templates/js/translated/stock.js:2090 +msgid "Stock item is in production" +msgstr "" + +#: templates/js/translated/stock.js:2095 +msgid "Stock item assigned to sales order" +msgstr "" + +#: templates/js/translated/stock.js:2098 +msgid "Stock item assigned to customer" +msgstr "" + +#: templates/js/translated/stock.js:2101 +msgid "Serialized stock item has been allocated" +msgstr "" + +#: templates/js/translated/stock.js:2103 +msgid "Stock item has been fully allocated" +msgstr "" + +#: templates/js/translated/stock.js:2105 +msgid "Stock item has been partially allocated" +msgstr "" + +#: templates/js/translated/stock.js:2108 +msgid "Stock item has been installed in another item" +msgstr "" + +#: templates/js/translated/stock.js:2110 +msgid "Stock item has been consumed by a build order" +msgstr "" + +#: templates/js/translated/stock.js:2114 +msgid "Stock item has expired" +msgstr "" + +#: templates/js/translated/stock.js:2116 +msgid "Stock item will expire soon" +msgstr "" + +#: templates/js/translated/stock.js:2121 +msgid "Stock item has been rejected" +msgstr "" + +#: templates/js/translated/stock.js:2123 +msgid "Stock item is lost" +msgstr "" + +#: templates/js/translated/stock.js:2125 +msgid "Stock item is destroyed" +msgstr "" + +#: templates/js/translated/stock.js:2129 +#: templates/js/translated/table_filters.js:350 +msgid "Depleted" +msgstr "" + +#: templates/js/translated/stock.js:2294 +msgid "Supplier part not specified" +msgstr "" + +#: templates/js/translated/stock.js:2341 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2469 +msgid "No stock items matching query" +msgstr "" + +#: templates/js/translated/stock.js:2573 +msgid "stock locations" +msgstr "" + +#: templates/js/translated/stock.js:2728 +msgid "Load Sublocations" +msgstr "" + +#: templates/js/translated/stock.js:2846 +msgid "Details" +msgstr "" + +#: templates/js/translated/stock.js:2850 +msgid "No changes" +msgstr "" + +#: templates/js/translated/stock.js:2862 +msgid "Part information unavailable" +msgstr "" + +#: templates/js/translated/stock.js:2884 +msgid "Location no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2901 +msgid "Build order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2916 +msgid "Purchase order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2933 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2950 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2969 +msgid "Customer no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2987 +msgid "Stock item no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:3005 +msgid "Added" +msgstr "" + +#: templates/js/translated/stock.js:3013 +msgid "Removed" +msgstr "" + +#: templates/js/translated/stock.js:3085 +msgid "No installed items" +msgstr "" + +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +msgid "Uninstall Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:3197 +msgid "Select stock item to uninstall" +msgstr "" + +#: templates/js/translated/stock.js:3218 +msgid "Install another stock item into this item" +msgstr "" + +#: templates/js/translated/stock.js:3219 +msgid "Stock items can only be installed if they meet the following criteria" +msgstr "" + +#: templates/js/translated/stock.js:3221 +msgid "The Stock Item links to a Part which is the BOM for this Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:3222 +msgid "The Stock Item is currently available in stock" +msgstr "" + +#: templates/js/translated/stock.js:3223 +msgid "The Stock Item is not already installed in another item" +msgstr "" + +#: templates/js/translated/stock.js:3224 +msgid "The Stock Item is tracked by either a batch code or serial number" +msgstr "" + +#: templates/js/translated/stock.js:3237 +msgid "Select part to install" +msgstr "" + +#: templates/js/translated/stock.js:3300 +msgid "Select one or more stock items" +msgstr "" + +#: templates/js/translated/stock.js:3313 +msgid "Selected stock items" +msgstr "" + +#: templates/js/translated/stock.js:3317 +msgid "Change Stock Status" +msgstr "" + +#: templates/js/translated/table_filters.js:74 +msgid "Has project code" +msgstr "" + +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 +msgid "Order status" +msgstr "" + +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +msgid "Trackable Part" +msgstr "" + +#: templates/js/translated/table_filters.js:162 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:166 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:182 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 +msgid "Has Pricing" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 +msgid "Include sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:235 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:267 +msgid "Has location type" +msgstr "" + +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 +msgid "Serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:326 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:331 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:335 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:336 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:341 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:346 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:351 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:361 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:365 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:366 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:371 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:376 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:400 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:409 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:414 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:415 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:419 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:423 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:436 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:442 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:456 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:460 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:515 +msgid "Build status" +msgstr "" + +#: templates/js/translated/table_filters.js:712 +msgid "Include parts in subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:717 +msgid "Show active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:725 +msgid "Available stock" +msgstr "" + +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:829 +msgid "Has Units" +msgstr "" + +#: templates/js/translated/table_filters.js:734 +msgid "Part has defined units" +msgstr "" + +#: templates/js/translated/table_filters.js:738 +msgid "Has IPN" +msgstr "" + +#: templates/js/translated/table_filters.js:739 +msgid "Part has internal part number" +msgstr "" + +#: templates/js/translated/table_filters.js:743 +msgid "In stock" +msgstr "" + +#: templates/js/translated/table_filters.js:751 +msgid "Purchasable" +msgstr "" + +#: templates/js/translated/table_filters.js:763 +msgid "Has stocktake entries" +msgstr "" + +#: templates/js/translated/table_filters.js:825 +msgid "Has Choices" +msgstr "" + +#: templates/js/translated/tables.js:92 +msgid "Display calendar view" +msgstr "" + +#: templates/js/translated/tables.js:102 +msgid "Display list view" +msgstr "" + +#: templates/js/translated/tables.js:112 +msgid "Display tree view" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:136 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:186 +msgid "Export Table Data" +msgstr "" + +#: templates/js/translated/tables.js:190 +msgid "Select File Format" +msgstr "" + +#: templates/js/translated/tables.js:529 +msgid "Loading data" +msgstr "" + +#: templates/js/translated/tables.js:532 +msgid "rows per page" +msgstr "" + +#: templates/js/translated/tables.js:537 +msgid "Showing all rows" +msgstr "" + +#: templates/js/translated/tables.js:539 +msgid "Showing" +msgstr "" + +#: templates/js/translated/tables.js:539 +msgid "to" +msgstr "" + +#: templates/js/translated/tables.js:539 +msgid "of" +msgstr "" + +#: templates/js/translated/tables.js:539 +msgid "rows" +msgstr "" + +#: templates/js/translated/tables.js:546 +msgid "No matching results" +msgstr "" + +#: templates/js/translated/tables.js:549 +msgid "Hide/Show pagination" +msgstr "" + +#: templates/js/translated/tables.js:555 +msgid "Toggle" +msgstr "" + +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: templates/js/translated/tables.js:561 +msgid "All" +msgstr "" + +#: templates/navbar.html:45 +msgid "Buy" +msgstr "" + +#: templates/navbar.html:57 +msgid "Sell" +msgstr "" + +#: templates/navbar.html:121 +msgid "Show Notifications" +msgstr "" + +#: templates/navbar.html:124 +msgid "New Notifications" +msgstr "" + +#: templates/navbar.html:144 users/models.py:188 +msgid "Admin" +msgstr "" + +#: templates/navbar.html:148 +msgid "Logout" +msgstr "" + +#: templates/notes_buttons.html:6 templates/notes_buttons.html:7 +msgid "Save" +msgstr "" + +#: templates/notifications.html:9 +msgid "Show all notifications and history" +msgstr "" + +#: templates/qr_code.html:11 +msgid "QR data not provided" +msgstr "" + +#: templates/registration/logged_out.html:7 +msgid "You were logged out successfully." +msgstr "" + +#: templates/registration/logged_out.html:9 +msgid "Log in again" +msgstr "" + +#: templates/search.html:9 +msgid "Show full search results" +msgstr "" + +#: templates/search.html:12 +msgid "Clear search" +msgstr "" + +#: templates/search.html:15 +msgid "Close search menu" +msgstr "" + +#: templates/socialaccount/authentication_error.html:5 +msgid "Social Network Login Failure" +msgstr "" + +#: templates/socialaccount/authentication_error.html:8 +msgid "Account Login Failure" +msgstr "" + +#: templates/socialaccount/authentication_error.html:11 +msgid "An error occurred while attempting to login via your social network account." +msgstr "" + +#: templates/socialaccount/authentication_error.html:13 +msgid "Contact your system administrator for further information." +msgstr "" + +#: templates/socialaccount/login.html:13 +#, python-format +msgid "Connect %(provider)s" +msgstr "" + +#: templates/socialaccount/login.html:15 +#, python-format +msgid "You are about to connect a new third party account from %(provider)s." +msgstr "" + +#: templates/socialaccount/login.html:17 +#, python-format +msgid "Sign In Via %(provider)s" +msgstr "" + +#: templates/socialaccount/login.html:19 +#, python-format +msgid "You are about to sign in using a third party account from %(provider)s." +msgstr "" + +#: templates/socialaccount/login.html:24 +msgid "Continue" +msgstr "" + +#: templates/socialaccount/login.html:29 +msgid "Invalid SSO Provider" +msgstr "" + +#: templates/socialaccount/login.html:31 +msgid "The selected SSO provider is invalid, or has not been correctly configured" +msgstr "" + +#: templates/socialaccount/signup.html:11 +#, python-format +msgid "You are about to use your %(provider_name)s account to login to %(site_name)s." +msgstr "" + +#: templates/socialaccount/signup.html:13 +msgid "As a final step, please complete the following form" +msgstr "" + +#: templates/socialaccount/snippets/provider_list.html:26 +msgid "Provider has not been configured" +msgstr "" + +#: templates/socialaccount/snippets/provider_list.html:35 +msgid "No SSO providers have been configured" +msgstr "" + +#: templates/stats.html:13 +msgid "Instance Name" +msgstr "" + +#: templates/stats.html:18 +msgid "Database" +msgstr "" + +#: templates/stats.html:26 +msgid "Server is running in debug mode" +msgstr "" + +#: templates/stats.html:33 +msgid "Docker Mode" +msgstr "" + +#: templates/stats.html:34 +msgid "Server is deployed using docker" +msgstr "" + +#: templates/stats.html:39 +msgid "Plugin Support" +msgstr "" + +#: templates/stats.html:43 +msgid "Plugin support enabled" +msgstr "" + +#: templates/stats.html:45 +msgid "Plugin support disabled" +msgstr "" + +#: templates/stats.html:52 +msgid "Server status" +msgstr "" + +#: templates/stats.html:55 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:57 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:64 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:67 +msgid "Background worker not running" +msgstr "" + +#: templates/stats.html:75 +msgid "Email Settings" +msgstr "" + +#: templates/stats.html:78 +msgid "Email settings not configured" +msgstr "" + +#: templates/yesnolabel.html:4 +msgid "Yes" +msgstr "" + +#: templates/yesnolabel.html:6 +msgid "No" +msgstr "" + +#: users/admin.py:104 +msgid "Users" +msgstr "" + +#: users/admin.py:105 +msgid "Select which users are assigned to this group" +msgstr "" + +#: users/admin.py:249 +msgid "The following users are members of multiple groups" +msgstr "" + +#: users/admin.py:283 +msgid "Personal info" +msgstr "" + +#: users/admin.py:285 +msgid "Permissions" +msgstr "" + +#: users/admin.py:288 +msgid "Important dates" +msgstr "" + +#: users/authentication.py:29 users/models.py:127 +msgid "Token has been revoked" +msgstr "" + +#: users/authentication.py:32 +msgid "Token has expired" +msgstr "" + +#: users/models.py:70 +msgid "API Token" +msgstr "" + +#: users/models.py:71 +msgid "API Tokens" +msgstr "" + +#: users/models.py:107 +msgid "Token Name" +msgstr "" + +#: users/models.py:108 +msgid "Custom token name" +msgstr "" + +#: users/models.py:114 +msgid "Token expiry date" +msgstr "" + +#: users/models.py:122 +msgid "Last Seen" +msgstr "" + +#: users/models.py:123 +msgid "Last time the token was used" +msgstr "" + +#: users/models.py:127 +msgid "Revoked" +msgstr "" + +#: users/models.py:384 +msgid "Permission set" +msgstr "" + +#: users/models.py:393 +msgid "Group" +msgstr "" + +#: users/models.py:397 +msgid "View" +msgstr "" + +#: users/models.py:397 +msgid "Permission to view items" +msgstr "" + +#: users/models.py:401 +msgid "Permission to add items" +msgstr "" + +#: users/models.py:405 +msgid "Change" +msgstr "" + +#: users/models.py:407 +msgid "Permissions to edit items" +msgstr "" + +#: users/models.py:413 +msgid "Permission to delete items" +msgstr "" diff --git a/InvenTree/locale/nl/LC_MESSAGES/django.po b/InvenTree/locale/nl/LC_MESSAGES/django.po index 815cece6e3..28689c4a0e 100644 --- a/InvenTree/locale/nl/LC_MESSAGES/django.po +++ b/InvenTree/locale/nl/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2024-02-28 07:23\n" "Last-Translator: \n" "Language-Team: Dutch\n" @@ -66,9 +66,9 @@ msgstr "Voer datum in" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "Naam" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "URL van extern afbeeldingsbestand" msgid "Downloading images from remote URL is not enabled" msgstr "Afbeeldingen van externe URL downloaden is niet ingeschakeld" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "Achtergrondwerker check is gefaald" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "Gevolgd" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "Productieorder waar deze productie aan is toegewezen" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "Productiestatuscode" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Batchcode" @@ -1242,48 +1242,48 @@ msgstr "Project Code" msgid "Project code for this build order" msgstr "Project code voor deze build order" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Productieorder {build} is voltooid" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "Een productieorder is voltooid" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "Geen productie uitvoer opgegeven" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "Productie uitvoer is al voltooid" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "Productuitvoer komt niet overeen met de Productieorder" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "Hoeveelheid moet groter zijn dan nul" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "Hoeveelheid kan niet groter zijn dan aantal" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "Bouw object" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "Bouw object" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "Bouw object" msgid "Quantity" msgstr "Hoeveelheid" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "Vereiste hoeveelheid voor bouwopdracht" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Productieartikel moet een productieuitvoer specificeren, omdat het hoofdonderdeel gemarkeerd is als traceerbaar" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Toegewezen hoeveelheid ({q}) mag de beschikbare voorraad ({a}) niet overschrijden" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "Voorraad item is te veel toegewezen" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "Toewijzing hoeveelheid moet groter zijn dan nul" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "Hoeveelheid moet 1 zijn voor geserialiseerde voorraad" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "Geselecteerde voorraadartikelen komen niet overeen met de BOM-regel" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "Geselecteerde voorraadartikelen komen niet overeen met de BOM-regel" msgid "Stock Item" msgstr "Voorraadartikel" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "Bron voorraadartikel" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "Voorraad hoeveelheid toe te wijzen aan productie" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "Installeren in" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "Bestemming voorraadartikel" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "Een lijst van productieuitvoeren moet worden verstrekt" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "Locatie van voltooide productieuitvoeren" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "Bouw lijn-item" msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part moet naar hetzelfde onderdeel wijzen als de productieorder" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "Artikel moet op voorraad zijn" @@ -1659,44 +1659,45 @@ msgstr "Optionele Items" msgid "Allocate optional BOM items to build order" msgstr "Alloceer optionele BOM items om bestelling te bouwen" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "Stuklijstartikel" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "In bestelling" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "Beschikbare Voorraad" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "Voorraad vereist voor productieorder" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "Achterstallige Productieorder" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Productieorder {bo} is nu achterstallig" @@ -1990,27 +1991,31 @@ msgstr "Vereiste onderdelen bestellen" msgid "Order Parts" msgstr "Onderdelen bestellen" -#: build/templates/build/detail.html:210 +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" +msgstr "" + +#: build/templates/build/detail.html:215 msgid "Incomplete Build Outputs" msgstr "Onvolledige Productieuitvoeren" -#: build/templates/build/detail.html:214 +#: build/templates/build/detail.html:219 msgid "Create new build output" msgstr "Nieuwe productieuitvoer aanmaken" -#: build/templates/build/detail.html:215 +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "Nieuwe Productieuitvoer" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "Verbruikte voorraad" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "Voltooide Productieuitvoeren" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "Voltooide Productieuitvoeren" msgid "Attachments" msgstr "Bijlagen" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Productie notities" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "Onderdelen zijn standaard sjablonen" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "Onderdeel selecteren" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "Fabrikant selecteren" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "Gekoppeld fabrikant onderdeel moet verwijzen naar hetzelfde basis onderd #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "Leverancier" msgid "Select supplier" msgstr "Leverancier selecteren" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimale kosten (bijv. voorraadkosten)" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "" @@ -4218,7 +4223,7 @@ msgstr "" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "Geen fabrikanten informatie beschikbaar" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "Leveranciers" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "Geen leveranciersinformatie beschikbaar" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "Label template bestand" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "Ingeschakeld" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "Verzendingen in behandeling" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "Acties" @@ -5861,10 +5869,10 @@ msgstr "" msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "" msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "" msgid "Category" msgstr "" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Standaard locatie" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Totale Voorraad" @@ -6010,7 +6023,8 @@ msgstr "Onderdeel Categorieën" msgid "Default location for parts in this category" msgstr "Standaard locatie voor onderdelen in deze categorie" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "" msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" @@ -6446,7 +6460,7 @@ msgstr "" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" @@ -6455,7 +6469,7 @@ msgstr "" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" @@ -6463,7 +6477,7 @@ msgstr "" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6685,311 +6699,329 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "Geen onderdelen geselecteerd" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "Afbeelding kopiëren" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "Afbeelding kopiëren van het oorspronkelijke onderdeel" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "Parameters kopiëren" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "Parameter data kopiëren van het originele onderdeel" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +#, fuzzy +#| msgid "External Link" +msgid "External Stock" +msgstr "Externe Link" + +#: part/serializers.py:806 +#, fuzzy +#| msgid "Deallocate Stock" +msgid "Unallocated Stock" +msgstr "Voorraad niet meer toewijzen" + +#: part/serializers.py:808 +#, fuzzy +#| msgid "Part Stocktake" +msgid "Variant Stock" +msgstr "Voorraadcontrole onderdeel" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "Ongeldige hoeveelheid" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7221,7 +7253,7 @@ msgid "Validate BOM" msgstr "" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" @@ -7405,7 +7437,7 @@ msgstr "Toegewezen aan Productieorder" msgid "Allocated to Sales Orders" msgstr "Toegewezen aan verkooporders" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -8784,7 +8816,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -8796,7 +8828,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -8905,7 +8937,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -8986,7 +9018,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9059,77 +9091,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Sublocaties" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "Artikel is toegewezen aan een verkooporder" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "Artikel is toegewezen aan een productieorder" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -10662,7 +10695,7 @@ msgid "The following parts are low on required stock" msgstr "De volgende onderdelen hebben een lage vereiste voorraad" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "Vereiste Hoeveelheid" @@ -10676,7 +10709,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" @@ -11051,62 +11084,68 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#, fuzzy +#| msgid "External Link" +msgid "External stock" +msgstr "Externe Link" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11488,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12352,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14091,3 @@ msgstr "" #: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/InvenTree/locale/no/LC_MESSAGES/django.po b/InvenTree/locale/no/LC_MESSAGES/django.po index f455cfd926..a21d14eb30 100644 --- a/InvenTree/locale/no/LC_MESSAGES/django.po +++ b/InvenTree/locale/no/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2024-02-28 07:23\n" "Last-Translator: \n" "Language-Team: Norwegian\n" @@ -66,9 +66,9 @@ msgstr "Oppgi dato" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "Navn" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "URLtil ekstern bildefil" msgid "Downloading images from remote URL is not enabled" msgstr "Nedlasting av bilder fra ekstern URL er ikke aktivert" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "Sjekk av bakgrunnsarbeider mislyktes" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "Spores" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "Produksjonsordre som denne produksjonen er tildelt" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "Produksjonsstatuskode" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Batchkode" @@ -1242,48 +1242,48 @@ msgstr "Prosjektkode" msgid "Project code for this build order" msgstr "Prosjektkode for denne produksjonsordren" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Produksjonsordre {build} er fullført" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "En produksjonsordre er fullført" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "Ingen produksjonsartikkel spesifisert" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "Produksjonsartikkelen er allerede fullført" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "Produksjonsartikkelen samsvarer ikke med produksjonsordren" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "Mengden må være større enn null" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "Kvantitet kan ikke være større enn utgangsantallet" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "Produksjonsobjekt" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "Produksjonsobjekt" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "Produksjonsobjekt" msgid "Quantity" msgstr "Antall" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "Påkrevd antall for produksjonsordre" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Produksjonselement må spesifisere en produksjonsartikkel, da master-del er merket som sporbar" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Tildelt antall ({q}) kan ikke overstige tilgjengelig lagerbeholdning ({a})" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "Lagervaren er overtildelt" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "Tildelingsantall må være større enn null" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "Mengden må være 1 for serialisert lagervare" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "Valgt lagervare samsvarer ikke med BOM-linjen" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "Valgt lagervare samsvarer ikke med BOM-linjen" msgid "Stock Item" msgstr "Lagervare" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "Kildelagervare" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "Lagerantall å tildele til produksjonen" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "Monteres i" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "Lagervare for montering" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "En liste over produksjonsartikler må oppgis" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "Plassering for ferdige produksjonsartikler" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "Produksjonsartikkel" msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part må peke på den samme delen som produksjonsordren" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "Artikkelen må være på lager" @@ -1659,44 +1659,45 @@ msgstr "Valgfrie artikler" msgid "Allocate optional BOM items to build order" msgstr "Tildel valgfrie BOM-artikler til produksjonsordre" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "BOM-artikkel" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "Tildelt lagerbeholdning" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "I bestilling" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "I produksjon" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "Tilgjengelig lagerbeholdning" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "Lagerbeholdning kreves for produksjonsordre" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "Forfalt produksjonsordre" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Produksjonsordre {bo} er nå forfalt" @@ -1990,27 +1991,31 @@ msgstr "Bestill nødvendige deler" msgid "Order Parts" msgstr "Bestill deler" -#: build/templates/build/detail.html:210 +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" +msgstr "" + +#: build/templates/build/detail.html:215 msgid "Incomplete Build Outputs" msgstr "Ufullstendige Produksjonsartikler" -#: build/templates/build/detail.html:214 +#: build/templates/build/detail.html:219 msgid "Create new build output" msgstr "Opprett ny produksjonsartikkel" -#: build/templates/build/detail.html:215 +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "Ny Produksjonsartikkel" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "Brukt lagerbeholdning" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "Fullførte produksjonsartikkel" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "Fullførte produksjonsartikkel" msgid "Attachments" msgstr "Vedlegg" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Produksjonsnotater" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "Tildeling fullført" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "Alle linjer er fullt tildelt" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "Deler er maler som standard" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "Antall for prisbrudd" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "Velg del" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "Velg produsent" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "Den sammenkoblede produsentdelen må referere til samme basisdel" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "Leverandør" msgid "Select supplier" msgstr "Velg leverandør" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "Leverandørens lagerbeholdningsenhet" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimum betaling (f.eks. lageravgift)" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "Tilgjengelighet oppdatert" msgid "Date of last update of availability data" msgstr "Dato for siste oppdatering av tilgjengelighetsdata" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "Standardvaluta brukt for denne leverandøren" @@ -4218,7 +4223,7 @@ msgstr "Slett bilde" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "Ingen produsentinformasjon tilgjengelig" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "Leverandører" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "Ingen leverandørinformasjon tilgjengelig" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "Etikett-malfil" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "Aktivert" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "Ventende forsendelser" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "Handlinger" @@ -5861,10 +5869,10 @@ msgstr "Overordnet navn" msgid "Category Path" msgstr "Sti til kategori" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "Overodnet IPN" msgid "Part IPN" msgstr "Del -IPN" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Minstepris" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "Dette alternativet må være valgt" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "Dette alternativet må være valgt" msgid "Category" msgstr "Kategori" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Standard plassering" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Total lagerbeholdning" @@ -6010,7 +6023,8 @@ msgstr "Delkategorier" msgid "Default location for parts in this category" msgstr "Standardplassering for deler i denne kategorien" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "Testmaler kan bare bli opprettet for sporbare deler" msgid "Test with this name already exists for this part" msgstr "Test med dette navnet finnes allerede for denne delen" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "Testnavn" @@ -6446,7 +6460,7 @@ msgstr "Legg inn beskrivelse for denne testen" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Påkrevd" @@ -6455,7 +6469,7 @@ msgstr "Påkrevd" msgid "Is this test required to pass?" msgstr "Er det påkrevd at denne testen bestås?" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "Krever verdi" @@ -6463,7 +6477,7 @@ msgstr "Krever verdi" msgid "Does this test require a value when adding a test result?" msgstr "Krever denne testen en verdi når det legges til et testresultat?" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "Krever vedlegg" @@ -6685,311 +6699,329 @@ msgstr "Del-forhold kan ikke opprettes mellom en del og seg selv" msgid "Duplicate relationship already exists" msgstr "Duplikatforhold eksisterer allerede" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Underkategorier" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "Innkjøpsvaluta for lagervaren" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "Ingen deler valgt" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "Velg kategori" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "Original Del" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "Velg original del å duplisere" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "Kopier Bilde" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "Kopier bilde fra originaldel" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "Kopier Stykkliste" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "Kopier stykkliste fra original del" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "Kopier parametere" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "Kopier parameterdata fra originaldel" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "Kopier notater" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "Kopier notater fra originaldel" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "Innledende lagerbeholdning" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Angi initiell lagermengde for denne delen. Hvis antall er null, er ingen lagerbeholdning lagt til." -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "Innledende lagerplassering" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "Angi initiell lagerplasering for denne delen" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "Velg leverandør (eller la stå tom for å hoppe over)" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "Velg produsent (eller la stå tom for å hoppe over)" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "Produsentens delenummer" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "Valgt firma er ikke en gyldig leverandør" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "Valgt firma er ikke en gyldig produsent" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "Produsentdel som matcher dette MPN-et, finnes allerede" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "Leverandørdel som matcher denne SKU-en, finnes allerede" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +#, fuzzy +#| msgid "Exclude External Stock" +msgid "External Stock" +msgstr "Ekskluder ekstern lagerbeholdning" + +#: part/serializers.py:806 +#, fuzzy +#| msgid "Allocated Stock" +msgid "Unallocated Stock" +msgstr "Tildelt lagerbeholdning" + +#: part/serializers.py:808 +#, fuzzy +#| msgid "Part Stock" +msgid "Variant Stock" +msgstr "Dellager" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Dupliser del" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "Kopier innledende data fra en annen del" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "Innledende lagerbeholdning" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "Lag en del med innledende lagermengde" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "Leverandøropplysninger" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "Legg til innledende leverandørinformasjon for denne delen" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "Kopier kategoriparametre" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "Kopier parametermaler fra valgt delkategori" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "Eksisterende bilde" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "Filnavn for et eksisterende del-bilde" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "Bildefilen finnes ikke" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "Begrens lagerbeholdningsrapport til en bestemt del og enhver variant av delen" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "Begrens lagerbeholdningsrapport til en bestemt delkategori og alle underkategorier" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "Begrens lagerbeholdningsrapport til en bestemt plasering og eventuelle underplasseringer" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "Ekskluder ekstern lagerbeholdning" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "Ekskluder lagervarer i eksterne lokasjoner" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "Generer rapport" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "Genererer rapport som inneholder beregnede lagerdata" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "Oppdater deler" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "Oppdater spesifiserte deler med beregnede lagerbeholdningsdata" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "Lagerbeholdningsfunksjonalitet er ikke aktivert" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "Overstyr beregnet verdi for minimumspris" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "Valuta for minstepris" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "Overstyr beregnet verdi for maksimal pris" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "Valuta for maksimal pris" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "Oppdater" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "Oppdater priser for denne delen" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Kan ikke konvertere fra gitte valutaer til {default_currency}" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "Minsteprisen kan ikke være større enn maksimal pris" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "Maksimal pris kan ikke være mindre enn minstepris" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "Velg del å kopiere BOM fra" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "Fjern eksisterende data" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "Fjern eksisterende BOM-artikler før kopiering" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "Inkluder arvede" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "Inkluder BOM-artikler som er arvet fra maldeler" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "Hopp over ugyldige rader" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "Aktiver dette alternativet for å hoppe over ugyldige rader" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "Kopier erstatningsdeler" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopier erstatningsdeler når BOM-elementer dupliseres" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "Nullstill eksisterende BOM" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "Fjern eksisterende BOM-artikler før opplastning" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "Ingen del-kolonne angitt" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "Flere samsvarende deler funnet" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "Ingen samsvarende del funnet" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "Delen er ikke betegnet som en komponent" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "Antall ikke oppgitt" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "Ugyldig antall" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "Minst en BOM-artikkel kreves" @@ -7221,7 +7253,7 @@ msgid "Validate BOM" msgstr "Godkjenn BOM" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "Legg til BOM-artikkel" @@ -7405,7 +7437,7 @@ msgstr "Tildelt til produksjonsordrer" msgid "Allocated to Sales Orders" msgstr "Tildelt til Salgsordrer" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "Kan Produsere" @@ -8784,7 +8816,7 @@ msgstr "Velg en tilsvarende leverandørdel for denne lagervaren" msgid "Where is this stock item located?" msgstr "Hvor er denne lagervaren plassert?" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "Inpakningen denne lagervaren er lagret i" @@ -8796,7 +8828,7 @@ msgstr "Er denne artikkelen montert i en annen artikkel?" msgid "Serial number for this item" msgstr "Serienummer for denne artikkelen" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "Batchkode for denne lagervaren" @@ -8905,7 +8937,7 @@ msgstr "Lagervare er for tiden i produksjon" msgid "Serialized stock cannot be merged" msgstr "Serialisert lagerbeholdning kan ikke slås sammen" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "Duplisert lagervare" @@ -8986,7 +9018,7 @@ msgstr "Antall kan ikke overstige tilgjengelig lagerbeholdning ({q})" msgid "Enter serial numbers for new items" msgstr "Angi serienummer for nye artikler" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "Til Lagerplassering" @@ -9059,77 +9091,78 @@ msgstr "Velg lagervarer for å endre status" msgid "No stock items selected" msgstr "Ingen lagervarer valgt" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Underplasseringer" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "Delen må være salgbar" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "Artikkelen er tildelt en salgsordre" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "Artikkelen er tildelt en produksjonsordre" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "Kunde å tilordne lagervarer" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "Valgt firma er ikke en kunde" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "Lagervare-tildelignsnotater" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "En liste av lagervarer må oppgis" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "Notater om lagersammenslåing" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "Tillat forskjellige leverandører" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "Tillat lagervarer med forskjellige leverandørdeler å slås sammen" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "Tillat forskjellig status" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "Tillat lagervarer med forskjellige statuskoder å slås sammen" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "Minst to lagervarer må oppgis" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "Lagervare primærnøkkel verdi" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "Lagervare statuskode" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "Lager transaksjonsnotater" @@ -10662,7 +10695,7 @@ msgid "The following parts are low on required stock" msgstr "Følgende deler har for lav lagerbeholdning" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "Antall som kreves" @@ -10676,7 +10709,7 @@ msgid "Click on the following link to view this part" msgstr "Klikk på følgende lenke for å se denne delen" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "Minimum antall" @@ -11051,62 +11084,68 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#, fuzzy +#| msgid "External Link" +msgid "External stock" +msgstr "Ekstern lenke" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11488,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12352,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14091,3 @@ msgstr "Tillatelse til å endre elementer" #: users/models.py:413 msgid "Permission to delete items" msgstr "Tillatelse til å slette elementer" - diff --git a/InvenTree/locale/pl/LC_MESSAGES/django.po b/InvenTree/locale/pl/LC_MESSAGES/django.po index 9e8ff1ccb7..2717fa3ce1 100644 --- a/InvenTree/locale/pl/LC_MESSAGES/django.po +++ b/InvenTree/locale/pl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" -"PO-Revision-Date: 2024-02-28 07:23\n" +"POT-Creation-Date: 2024-03-02 07:22+0000\n" +"PO-Revision-Date: 2024-03-06 10:36\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -28,7 +28,7 @@ msgstr "Użytkownik nie ma uprawnień do przeglądania tego modelu" #: InvenTree/conversion.py:160 #, python-brace-format msgid "Invalid unit provided ({unit})" -msgstr "" +msgstr "Nieprawidłowa jednostka ({unit})" #: InvenTree/conversion.py:170 msgid "No value provided" @@ -66,9 +66,9 @@ msgstr "Wprowadź dane" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "Nazwa" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "Adres URL zdalnego pliku obrazu" msgid "Downloading images from remote URL is not enabled" msgstr "Pobieranie obrazów ze zdalnego URL nie jest włączone" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "Sprawdzenie robotnika w tle nie powiodło się" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "Śledzony" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "Zamówienie budowy, do którego budowa jest przypisana" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "Kod statusu budowania" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Kod partii" @@ -1242,48 +1242,48 @@ msgstr "Kod projektu" msgid "Project code for this build order" msgstr "Kod projektu dla tego zlecenia produkcji" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Kolejność kompilacji {build} została zakończona" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "Kolejność kompilacji została zakończona" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "Nie określono danych wyjściowych budowy" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "Budowanie wyjścia jest już ukończone" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "Skompilowane dane wyjściowe nie pasują do kolejności kompilacji" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "Ilość musi być większa niż zero" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "Ilość nie może być większa niż ilość wyjściowa" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" -msgstr "" +msgstr "Wyjście budowy {serial} nie przeszło wszystkich testów" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" -msgstr "" +msgstr "Zbuduj obiekt" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "" msgid "Quantity" msgstr "Ilość" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "Wymagana ilość dla zlecenia produkcji" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "Alokowana ilość musi być większa niż zero" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "" msgid "Stock Item" msgstr "Element magazynowy" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "Lokalizacja magazynowania przedmiotu" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "Zainstaluj do" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "Docelowa lokalizacja magazynowa przedmiotu" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "Towar musi znajdować się w magazynie" @@ -1659,44 +1659,45 @@ msgstr "Przedmiot opcjonalny" msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "Element BOM" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "W Zamówieniu" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" -msgstr "" +msgstr "W produkcji" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "Dostępna ilość" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1990,27 +1991,31 @@ msgstr "Zamów wymagane komponenty" msgid "Order Parts" msgstr "Zamów komponent" -#: build/templates/build/detail.html:210 -msgid "Incomplete Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:214 -msgid "Create new build output" +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" msgstr "" #: build/templates/build/detail.html:215 +msgid "Incomplete Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:219 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "" msgid "Attachments" msgstr "Załączniki" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Notatki tworzenia" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "Wybierz część" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "Wybierz producenta" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "Dostawca" msgid "Select supplier" msgstr "Wybierz dostawcę" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "Domyślna waluta używana dla tego dostawcy" @@ -4218,7 +4223,7 @@ msgstr "" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "Dostawcy" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "Aktywne" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "Oczekujące przesyłki" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "Akcje" @@ -5861,10 +5869,10 @@ msgstr "" msgid "Category Path" msgstr "Ścieżka kategorii" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "" msgid "Part IPN" msgstr "IPN komponentu" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "Ta opcja musi być zaznaczona" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "Ta opcja musi być zaznaczona" msgid "Category" msgstr "Kategoria" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Domyślna lokalizacja" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,7 +6023,8 @@ msgstr "Kategorie części" msgid "Default location for parts in this category" msgstr "Domyślna lokalizacja dla komponentów w tej kategorii" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "" msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "Nazwa testu" @@ -6446,7 +6460,7 @@ msgstr "Wprowadź opis do tego testu" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Wymagane" @@ -6455,7 +6469,7 @@ msgstr "Wymagane" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "Wymaga wartości" @@ -6463,7 +6477,7 @@ msgstr "Wymaga wartości" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "Wymaga załącznika" @@ -6685,311 +6699,323 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Podkategorie" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "Waluta zakupu tego towaru" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "Kopiuj obraz" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "Kopiuj BOM" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "Kopiuj parametry" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +msgid "External Stock" +msgstr "" + +#: part/serializers.py:806 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:808 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Duplikuj część" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "Usuń istniejące dane" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "Pomiń nieprawidłowe wiersze" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "Włącz tę opcję, aby pominąć nieprawidłowe wiersze" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "Wyczyść istniejący BOM" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "Nie podano ilości" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "Nieprawidłowa ilość" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7221,7 +7247,7 @@ msgid "Validate BOM" msgstr "Weryfikuj BOM" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "Dodaj część do BOM" @@ -7405,7 +7431,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "Przypisane do zamówień sprzedaży" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -8784,7 +8810,7 @@ msgstr "Wybierz pasującą część dostawcy dla tego towaru" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -8796,7 +8822,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -8905,7 +8931,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -8986,7 +9012,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9059,77 +9085,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Podlokalizacje" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "Część musi być dostępna do sprzedaży" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -10662,7 +10689,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "Wymagana ilość" @@ -10676,7 +10703,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "Minimalna ilość" @@ -11051,62 +11078,66 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +msgid "External stock" +msgstr "" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11480,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12344,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14083,3 @@ msgstr "Uprawnienie do edycji przedmiotów" #: users/models.py:413 msgid "Permission to delete items" msgstr "Uprawnienie do usuwania przedmiotów" - diff --git a/InvenTree/locale/pt/LC_MESSAGES/django.po b/InvenTree/locale/pt/LC_MESSAGES/django.po index 4760472c36..64791dc6ae 100644 --- a/InvenTree/locale/pt/LC_MESSAGES/django.po +++ b/InvenTree/locale/pt/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2024-02-28 07:23\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" @@ -66,9 +66,9 @@ msgstr "Insira uma Data" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "Nome" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "URL do arquivo de imagem remoto" msgid "Downloading images from remote URL is not enabled" msgstr "Baixar imagens de URL remota não está habilitado" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "Falha em verificar o histórico do trabalhador" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "Monitorado" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "Pedido de produção para qual este serviço está alocado" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "Código de situação da produção" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Código de Lote" @@ -1242,48 +1242,48 @@ msgstr "Código do projeto" msgid "Project code for this build order" msgstr "Código do projeto para este pedido de produção" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "O Pedido de produção {build} foi concluído!" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "Um pedido de produção foi concluído" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "Nenhuma saída de produção especificada" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "Saída de produção já completada" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "Saída da produção não corresponde ao Pedido de Produção" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "Quantidade deve ser maior que zero" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "Quantidade não pode ser maior do que a quantidade de saída" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "Objeto de produção" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "Objeto de produção" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "Objeto de produção" msgid "Quantity" msgstr "Quantidade" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "Quantidade necessária para o pedido de produção" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Item de produção deve especificar a saída, pois peças mestres estão marcadas como rastreáveis" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Quantidade alocada ({q}) não deve exceder a quantidade disponível em estoque ({a})" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "O item do estoque está sobre-alocado" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "Quantidade alocada deve ser maior que zero" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "Quantidade deve ser 1 para estoque serializado" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "Item estoque selecionado não coincide com linha da LDM" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "Item estoque selecionado não coincide com linha da LDM" msgid "Stock Item" msgstr "Item de estoque" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "Origem do item em estoque" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "Quantidade do estoque para alocar à produção" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "Instalar em" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "Destino do Item do Estoque" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "Uma lista de saídas de produção deve ser fornecida" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "Local para saídas de produção concluídas" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "Item da linha de produção" msgid "bom_item.part must point to the same part as the build order" msgstr "bin_item.part deve indicar a mesma peça do pedido de produção" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "Item deve estar em estoque" @@ -1659,44 +1659,45 @@ msgstr "Itens opcionais" msgid "Allocate optional BOM items to build order" msgstr "Alocar itens LDM opcionais para o pedido de produção" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "Item LDM" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "Estoque Alocado" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "No pedido" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "Em Produção" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "Estoque Disponível" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "Estoque obrigatório para o pedido de produção" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "Pedido de produção vencido" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Pedido de produção {bo} está atrasada" @@ -1990,27 +1991,31 @@ msgstr "Pedir peças necessárias" msgid "Order Parts" msgstr "Pedir Peças" -#: build/templates/build/detail.html:210 +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" +msgstr "" + +#: build/templates/build/detail.html:215 msgid "Incomplete Build Outputs" msgstr "Saída de Produção Incompletas" -#: build/templates/build/detail.html:214 +#: build/templates/build/detail.html:219 msgid "Create new build output" msgstr "Criar nova saída de produção" -#: build/templates/build/detail.html:215 +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "Nova saída de produção" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "Consumir estoque" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "Saídas de Produção concluídas" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "Saídas de Produção concluídas" msgid "Attachments" msgstr "Anexos" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Notas de produção" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "Alocação Completa" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "Todas as linhas foram totalmente alocadas" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "Peças são modelos por padrão" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "Salvar as últimas máquinas de impressão usadas para um usuário" msgid "Price break quantity" msgstr "Quantidade de Parcelamentos" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "Selecionar peça" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "Selecionar fabricante" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "Parte do fabricante vinculado deve fazer referência à mesma peça base #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "Fornecedor" msgid "Select supplier" msgstr "Selecione o fornecedor" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "Unidade de reserva de estoque fornecedor" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "Taxa mínima (ex.: taxa de estoque)" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "Disponibilidade Atualizada" msgid "Date of last update of availability data" msgstr "Data da última atualização da disponibilidade dos dados" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "Moeda padrão utilizada para este fornecedor" @@ -4218,7 +4223,7 @@ msgstr "Excluir imagem" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "Nenhuma informação do fabricante disponível" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "Fornecedores" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "Nenhuma informação do fornecedor está disponível" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "Vincular Código de Barras à Peça do Fornecedor" msgid "Update Part Availability" msgstr "Atualizar Disponibilidade de Peças" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "Arquivo de modelo de etiqueta" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "Habilitado" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "Envios Pendentes" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "Ações" @@ -5861,10 +5869,10 @@ msgstr "Nome Paternal" msgid "Category Path" msgstr "Caminho da Categoria" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "IPN Paternal" msgid "Part IPN" msgstr "IPN da Peça" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Preço Mínimo" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "Esta opção deve ser selecionada" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "Esta opção deve ser selecionada" msgid "Category" msgstr "Categoria" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Local Padrão" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Estoque Total" @@ -6010,7 +6023,8 @@ msgstr "Categorias de Peça" msgid "Default location for parts in this category" msgstr "Local padrão para peças desta categoria" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "Modelos de teste só podem ser criados para peças rastreáveis" msgid "Test with this name already exists for this part" msgstr "O teste com este nome já existe para esta peça" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "Nome de Teste" @@ -6446,7 +6460,7 @@ msgstr "Digite a descrição para este teste" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Requerido" @@ -6455,7 +6469,7 @@ msgstr "Requerido" msgid "Is this test required to pass?" msgstr "Este teste é obrigatório passar?" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "Requer Valor" @@ -6463,7 +6477,7 @@ msgstr "Requer Valor" msgid "Does this test require a value when adding a test result?" msgstr "Este teste requer um valor ao adicionar um resultado de teste?" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "Anexo obrigatório" @@ -6685,311 +6699,329 @@ msgstr "Relacionamento da peça não pode ser criada com ela mesma" msgid "Duplicate relationship already exists" msgstr "Relação duplicada já existe" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Sub-categorias" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "Moeda de compra deste item de estoque" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "Nenhuma parte selecionada" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "Selecionar categoria" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "Peça Original" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "Selecione a peça original para duplicar" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "Copiar imagem" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "Copiar imagem da peça original" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "Copiar LDM" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "Copiar lista de materiais da peça original" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "Copiar Parâmetros" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "Copiar dados do parâmetro da peça original" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "Copiar Notas" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "Copiar imagem da peça original" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "Quantidade Inicial de Estoque" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Especificar a quantidade inicial de estoque para a peça. Se for zero, nenhum estoque é adicionado." -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "Local Inicial do Estoque" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "Especifique o local do estoque inicial para esta Peça" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "Selecione o fornecedor (ou deixe em branco para pular)" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "Selecione fabricante (ou deixe em branco para pular)" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "Número de Peça do Fabricante" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "A empresa selecionada não é um fornecedor válido" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "A empresa selecionada não é um fabricante válido" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "A peça do fabricante que corresponde a essa MPN já existe" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "A peça do fornecedor que corresponde a essa SKU já existe" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +#, fuzzy +#| msgid "Exclude External Stock" +msgid "External Stock" +msgstr "Excluir Estoque externo" + +#: part/serializers.py:806 +#, fuzzy +#| msgid "Allocated Stock" +msgid "Unallocated Stock" +msgstr "Estoque Alocado" + +#: part/serializers.py:808 +#, fuzzy +#| msgid "Part Stock" +msgid "Variant Stock" +msgstr "Estoque da Peça" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Peça duplicada" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "Copiar dados iniciais de outra peça" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "Estoque inicial" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "Criar peça com a quantidade inicial de estoque" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "Informações do Fornecedor" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "Adicionar informação inicial de fornecedor para esta peça" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "Copiar Parâmetros da Categoria" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "Copiar modelos de parâmetros a partir de categoria de peça selecionada" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "Imagem Existente" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "Nome de arquivo de uma imagem de peça existente" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "A imagem não existe" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "Limitar o relatório de balanço a uma determinada peça e quaisquer peças variantes" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "Limitar o relatório de balanço a uma determinada categoria, e qualquer peças filhas" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "Limitar o relatório de balanço a um determinado local de estoque, e qualquer local filho" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "Excluir Estoque externo" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "Excluir itens de estoque em locais externos" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "Gerar relatório" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "Gerar arquivo de relatório contendo dados de estoque calculados" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "Atualizar Peças" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "Atualizar peças especificadas com dados de estoque calculados" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "Função de Balanço de Estoque não está ativada" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "Sobrepor valor calculado para preço mínimo" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "Moeda do preço mínimo" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "Sobrepor valor calculado para preço máximo" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "Moeda do preço máximo" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "Atualizar" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "Atualizar preços desta peça" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Não foi possível converter das moedas fornecidas para {default_currency}" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "Preço mínimo não pode ser maior que o preço máximo" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "Preço máximo não pode ser menor que o preço mínimo" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "Selecionar peça para copiar a LDM" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "Remover Dado Existente" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "Remova itens LDM existentes antes de copiar" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "Incluir Herdados" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "Incluir itens LDM que são herdados de peças modelo" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "Pular Linhas inválidas" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "Habilitar esta opção para pular linhas inválidas" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "Copiar Peças Substitutas" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copiar peças de substitutas quando duplicar itens de LDM" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "Limpar LDM Existente" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "Apagar itens LDM existentes antes de carregar" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "Nenhuma coluna de peça especificada" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "Múltiplas peças correspondentes encontradas" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "Nenhuma peça correspondente encontrada" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "Peça não está designada como componente" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "Quantidade não foi fornecida" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "Quantidade Inválida" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "Pelo menos um item LDM é necessário" @@ -7221,7 +7253,7 @@ msgid "Validate BOM" msgstr "Validar LDM" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "Adicionar Item LDM" @@ -7405,7 +7437,7 @@ msgstr "Alocado para Pedidos de Construção" msgid "Allocated to Sales Orders" msgstr "Alocado para Pedidos de Venda" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "Pode Produzir" @@ -8784,7 +8816,7 @@ msgstr "Selecione uma peça do fornecedor correspondente para este item de estoq msgid "Where is this stock item located?" msgstr "Onde está localizado este item de estoque?" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "Embalagem deste item de estoque está armazenado em" @@ -8796,7 +8828,7 @@ msgstr "Este item está instalado em outro item?" msgid "Serial number for this item" msgstr "Número de série para este item" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "Código do lote para este item de estoque" @@ -8905,7 +8937,7 @@ msgstr "Item no estoque está em produção no momento" msgid "Serialized stock cannot be merged" msgstr "Itens de série não podem ser mesclados" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "Item de estoque duplicado" @@ -8986,7 +9018,7 @@ msgstr "Quantidade não deve exceder a quantidade disponível em estoque ({q})" msgid "Enter serial numbers for new items" msgstr "Inserir número de série para novos itens" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "Local de destino do estoque" @@ -9059,77 +9091,78 @@ msgstr "Selecionar itens de estoque para mudar estados" msgid "No stock items selected" msgstr "Nenhum item de estoque selecionado" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Sub-locais" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "Parte deve ser comercializável" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "Item é alocado para um pedido de venda" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "Item está alocado a um pedido de produção" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "Cliente para atribuir itens de estoque" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "A empresa selecionada não é um cliente" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "Nodas atribuídas a estoque" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "Uma lista de item de estoque deve ser providenciada" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "Notas de fusão de estoque" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "Permitir fornecedores divergentes" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "Permitir a fusão de itens de estoque de fornecedores diferentes" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "Permitir estado incompatível" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "Permitir a fusão de itens de estoque com estado diferentes" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "Ao menos dois itens de estoque devem ser providenciados" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "Valor da chave primária do Item Estoque" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "Código de estado do item estoque" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "Notas da transação de estoque" @@ -10662,7 +10695,7 @@ msgid "The following parts are low on required stock" msgstr "As peças a seguir estão abaixo do estoque requerido" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "Quantidade Requerida" @@ -10676,7 +10709,7 @@ msgid "Click on the following link to view this part" msgstr "Clique no link abaixo para ver esta peça" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "Quantidade Mínima" @@ -11051,62 +11084,68 @@ msgstr "Preços da BOM estão incompletos" msgid "No pricing available" msgstr "Nenhum preço disponível" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#, fuzzy +#| msgid "External Link" +msgid "External stock" +msgstr "Link Externo" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "Nenhum Estoque Disponível" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "Incluir estoque de variantes e substitutos" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "Incluir estoque de variantes" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "Incluir estoque de substitutos" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "Itens consumíveis" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "Validar Item da BOM" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "Esta linha foi validada" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "Editar peças substitutas" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "Editar Item da BOM" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "Apagar Item da BOM" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "Ver BOM" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "Nenhum item da BOM encontrado" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "Peça Requerida" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "Herdado da BOM paternal" @@ -11449,29 +11488,29 @@ msgstr "Quantidade Unitária" msgid "Sufficient stock available" msgstr "Estoque suficiente disponível" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "Item Consumível" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "Item rastreado" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "Estoque de produção" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "Pedir Estoque" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "Alocar Estoque" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "Remover alocação de estoque" @@ -12313,64 +12352,64 @@ msgstr "Carregar Subcategorias" msgid "Subscribed category" msgstr "Categoria inscrita" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "Nenhum modelo de teste corresponde à consulta" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "Editar resultados de teste" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "Excluir resultado do teste" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "Este teste é definido para uma peça parental" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "Editar Modelo de Resultado de Teste" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "Excluir Modelo de Resultado de Teste" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "Nenhuma data especificada" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "Data especificada está no passado" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "Especulativo" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "Nenhuma informação de agendamento para esta peça" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "Erro ao obter informações de agendamento para esta peça" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "Quantidades de Estoque Agendadas" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "Quantidade Máxima" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "Nível Mínimo de Estoque" @@ -14052,4 +14091,3 @@ msgstr "Permissões para editar itens" #: users/models.py:413 msgid "Permission to delete items" msgstr "Permissão para excluir itens" - diff --git a/InvenTree/locale/ru/LC_MESSAGES/django.po b/InvenTree/locale/ru/LC_MESSAGES/django.po index 07d58a56d0..9fe6057224 100644 --- a/InvenTree/locale/ru/LC_MESSAGES/django.po +++ b/InvenTree/locale/ru/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" -"PO-Revision-Date: 2024-02-28 07:23\n" +"POT-Creation-Date: 2024-03-02 07:22+0000\n" +"PO-Revision-Date: 2024-03-06 10:36\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -66,9 +66,9 @@ msgstr "Введите дату" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "Название" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "ССЫЛКА файла изображения на удаленном msgid "Downloading images from remote URL is not enabled" msgstr "Загрузка изображений с удаленного URL-адреса не включена" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "Проверка фонового работника не удалась" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "Отслеживается" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "Заказ на производство, которому принад #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "Код статуса заказа на производство" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Код партии" @@ -1242,48 +1242,48 @@ msgstr "Код проекта" msgid "Project code for this build order" msgstr "Код проекта для этого заказа на производство" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Заказ на производство {build} был завершен" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "Заказ на производство был завершен" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "Продукция не указана" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "Продукция уже произведена" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "Продукция не совпадает с заказом на производство" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "Количество должно быть больше нуля" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "Количество не может быть больше количества продукции" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "Объект производства" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "Объект производства" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "Объект производства" msgid "Quantity" msgstr "Количество" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "Требуемое количество для заказа на производство" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Элемент производства должен указать продукцию, как главную деталь помеченную как отслеживаемая" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Резервируемое количество ({q}) не должно превышать доступное количество на складе ({a})" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "Складская позиция перераспределена" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "Резервируемое количество должно быть больше нуля" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "Количество должно быть 1 для сериализованных запасов" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "Выбранная складская позиция не соответствует позиции в BOM" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "Выбранная складская позиция не соответ msgid "Stock Item" msgstr "Складская позиция" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "Исходная складская позиция" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "Количество на складе для производства" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "Установить в" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "Целевая складская позиция" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "Необходимо представить список выхода деталей" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "Место хранения для завершенной продукц #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "Позиция для производства" msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part должна указывать на ту же часть, что и заказ на производство" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "Элемент должен быть в наличии" @@ -1659,44 +1659,45 @@ msgstr "Необязательные элементы" msgid "Allocate optional BOM items to build order" msgstr "Зарезервировать необязательные позиции BOM для заказа на производство" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "Позиция BOM" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "Зарезервированные Запасы" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "В заказе" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "В производстве" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "Доступный запас" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "Необходимый запас для заказа на производство" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "Просроченный заказ сборки" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Заказ на производство {bo} просрочен" @@ -1990,27 +1991,31 @@ msgstr "" msgid "Order Parts" msgstr "Заказать детали" -#: build/templates/build/detail.html:210 +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" +msgstr "" + +#: build/templates/build/detail.html:215 msgid "Incomplete Build Outputs" msgstr "Незавершенная продукция" -#: build/templates/build/detail.html:214 +#: build/templates/build/detail.html:219 msgid "Create new build output" msgstr "Создать выход производства" -#: build/templates/build/detail.html:215 +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "Новая продукция" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "Поглощенные Остатки" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "Завершенная продукция" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "Завершенная продукция" msgid "Attachments" msgstr "Файлы" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Записи производства" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "Резервирование Завершено" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "Все позиции были полностью зарезервированы" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "По умолчанию детали являются шаблонами" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "Выберите деталь" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "Выберите производителя" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "Поставщик" msgid "Select supplier" msgstr "Выберите поставщика" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "Код поставщика" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "Валюта по умолчанию для этого поставщика" @@ -4218,7 +4223,7 @@ msgstr "Удалить изображение" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "Поставщики" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "Включено" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "Ожидающие отправления" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "Действия" @@ -5861,10 +5869,10 @@ msgstr "Имя родителя" msgid "Category Path" msgstr "Путь к категории" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "Родительский IPN" msgid "Part IPN" msgstr "IPN детали" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Минимальная цена" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "Необходимо выбрать эту опцию" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "Необходимо выбрать эту опцию" msgid "Category" msgstr "Категория" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Место хранения по умолчанию" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Общий запас" @@ -6010,7 +6023,8 @@ msgstr "Категория детали" msgid "Default location for parts in this category" msgstr "Место хранения по умолчанию для деталей этой категории" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "Шаблоны тестирования могут быть создан msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "Название теста" @@ -6446,7 +6460,7 @@ msgstr "Введите описание для этого теста" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Требуется" @@ -6455,7 +6469,7 @@ msgstr "Требуется" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "Требуется значение" @@ -6463,7 +6477,7 @@ msgstr "Требуется значение" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6685,311 +6699,323 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Подкатегории" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "Валюта закупки складской позиции" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "Не выбрана ни одна деталь" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "Выберите категорию" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "Оригинальная деталь" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "Копировать Изображение" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "Скопировать BOM" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "Скопировать параметры" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "Копировать Записи" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "Скопировать записи из оригинальной детали" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "Код производителя" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +msgid "External Stock" +msgstr "" + +#: part/serializers.py:806 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:808 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Дублировать деталь" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "Начальный запас" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "Копировать параметры категории" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "Копировать шаблоны параметров из выбранной категории деталей" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "Существующее изображение" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "Исключить складские позиции в внешних местах хранения" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "Создать отчет" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "Обновить детали" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "Обновить" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "Подходящая деталь не найдена" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "Некорректное количество" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7221,7 +7247,7 @@ msgid "Validate BOM" msgstr "Проверить BOM" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "Добавить элемент BOM" @@ -7405,7 +7431,7 @@ msgstr "Зарезервировано заказами на производс msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "Можно произвести" @@ -8784,7 +8810,7 @@ msgstr "Выберите соответствующего поставщика msgid "Where is this stock item located?" msgstr "Где находиться эта складская позиция?" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "Упаковка этой складской позиции хранится в" @@ -8796,7 +8822,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "Код партии для этой складской позиции" @@ -8905,7 +8931,7 @@ msgstr "Складская позиция в производстве" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "Дублировать складские позиции" @@ -8986,7 +9012,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "Введите серийные номера для новых элементов" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9059,77 +9085,78 @@ msgstr "Выберите складские позиции для изменен msgid "No stock items selected" msgstr "Не выбрано ни одной складской позиции" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Места хранения" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "Элемент зарезервирован для заказа на производство" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "Покупатель для назначения складских позиций" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "Выбранная компания не является покупателем" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "Записи о назначенных запасах" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "Необходимо предоставить список складских позиций" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "Записи о слияниях запасов" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "Разрешить слияние складских позиций с различными поставщиками" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "Разрешить слияние складских позиций с различными статусами" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "Необходимо предоставить как минимум 2 складские позиции" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "Статус складской позиции" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "Записи о перемещениях запасов" @@ -10074,7 +10101,7 @@ msgstr "Настройки пользователя" #: templates/InvenTree/settings/sidebar.html:9 msgid "Account" -msgstr "Аккуант" +msgstr "Учетная запись" #: templates/InvenTree/settings/sidebar.html:11 msgid "Display" @@ -10662,7 +10689,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "Требуемое кол-во" @@ -10676,7 +10703,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "Минимальное количество" @@ -11051,62 +11078,66 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +msgid "External stock" +msgstr "" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "Расходник" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "Редактировать элемент BOM" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "Удалить элемент BOM" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "Просмотр BOM" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "Необходимая деталь" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11480,29 @@ msgstr "Количество единиц" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "Расходник" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "Отслеживаемый элемент" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "Запасы производства" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "Заказать запасы" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "Зарезервировать Остатки" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12344,64 @@ msgstr "" msgid "Subscribed category" msgstr "Категория с подпиской" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "результаты" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "Редактировать результаты тестирования" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "Приблизительный" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "Максимальное количество" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14083,3 @@ msgstr "Разрешение на редактирование элементо #: users/models.py:413 msgid "Permission to delete items" msgstr "Разрешение на удаление элементов" - diff --git a/InvenTree/locale/sk/LC_MESSAGES/django.po b/InvenTree/locale/sk/LC_MESSAGES/django.po index 8a47436eff..cc3c548673 100644 --- a/InvenTree/locale/sk/LC_MESSAGES/django.po +++ b/InvenTree/locale/sk/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2024-02-28 07:23\n" "Last-Translator: \n" "Language-Team: Slovak\n" @@ -66,9 +66,9 @@ msgstr "" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" @@ -1242,48 +1242,48 @@ msgstr "" msgid "Project code for this build order" msgstr "" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "" msgid "Stock Item" msgstr "" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "" @@ -1659,44 +1659,45 @@ msgstr "" msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1990,27 +1991,31 @@ msgstr "" msgid "Order Parts" msgstr "" -#: build/templates/build/detail.html:210 -msgid "Incomplete Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:214 -msgid "Create new build output" +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" msgstr "" #: build/templates/build/detail.html:215 +msgid "Incomplete Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:219 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "" msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "" @@ -4218,7 +4223,7 @@ msgstr "" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -5861,10 +5869,10 @@ msgstr "" msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "" msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "" msgid "Category" msgstr "" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,7 +6023,8 @@ msgstr "" msgid "Default location for parts in this category" msgstr "" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "" msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" @@ -6446,7 +6460,7 @@ msgstr "" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" @@ -6455,7 +6469,7 @@ msgstr "" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" @@ -6463,7 +6477,7 @@ msgstr "" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6685,311 +6699,323 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +msgid "External Stock" +msgstr "" + +#: part/serializers.py:806 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:808 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7221,7 +7247,7 @@ msgid "Validate BOM" msgstr "" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" @@ -7405,7 +7431,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -8784,7 +8810,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -8796,7 +8822,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -8905,7 +8931,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -8986,7 +9012,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9059,77 +9085,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -10662,7 +10689,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -10676,7 +10703,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" @@ -11051,62 +11078,66 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +msgid "External stock" +msgstr "" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11480,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12344,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14083,3 @@ msgstr "" #: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/InvenTree/locale/sl/LC_MESSAGES/django.po b/InvenTree/locale/sl/LC_MESSAGES/django.po index 710a9e9ef2..bf2f3ebd2b 100644 --- a/InvenTree/locale/sl/LC_MESSAGES/django.po +++ b/InvenTree/locale/sl/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2024-02-28 07:23\n" "Last-Translator: \n" "Language-Team: Slovenian\n" @@ -66,9 +66,9 @@ msgstr "Vnesi datum" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "Ime" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "Povezava do oddaljene slike" msgid "Downloading images from remote URL is not enabled" msgstr "Prenos slik iz oddaljene povezave ni omogočen" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "Nadzor dela v ozadju neuspel" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "Nalog izgradnje na katerega se ta izgradnaj nanaša" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "Koda statusa izgradnje" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Številka serije" @@ -1242,48 +1242,48 @@ msgstr "" msgid "Project code for this build order" msgstr "" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Nalog izgradnje {build} je dokončan" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "Nalog izgradnej dokončan" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "Ni določena izgradnja" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "Igradnja je že dokončana" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "Izgradnja se ne ujema s nalogom izdelave" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "" msgid "Quantity" msgstr "Količina" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Izdelana postavka mora imeti izgradnjo, če je glavni del označen kot sledljiv" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Prestavljena zaloga ({q}) ne sme presegati zaloge ({a})" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "Preveč zaloge je prestavljene" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "Prestavljena količina mora biti večja od 0" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "Količina za zalogo s serijsko številko mora biti 1" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "" msgid "Stock Item" msgstr "Postavka zaloge" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "Izvorna postavka zaloge" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "Količina zaloge za prestavljanje za izgradnjo" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "Inštaliraj v" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "Destinacija postavke zaloge" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "" @@ -1659,44 +1659,45 @@ msgstr "" msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1990,27 +1991,31 @@ msgstr "" msgid "Order Parts" msgstr "" -#: build/templates/build/detail.html:210 -msgid "Incomplete Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:214 -msgid "Create new build output" +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" msgstr "" #: build/templates/build/detail.html:215 +msgid "Incomplete Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:219 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "" msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "" @@ -4218,7 +4223,7 @@ msgstr "" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -5861,10 +5869,10 @@ msgstr "" msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "" msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "" msgid "Category" msgstr "" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,7 +6023,8 @@ msgstr "" msgid "Default location for parts in this category" msgstr "" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "" msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" @@ -6446,7 +6460,7 @@ msgstr "" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" @@ -6455,7 +6469,7 @@ msgstr "" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" @@ -6463,7 +6477,7 @@ msgstr "" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6685,311 +6699,325 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +#, fuzzy +#| msgid "External Link" +msgid "External Stock" +msgstr "Zunanja povezava" + +#: part/serializers.py:806 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:808 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7221,7 +7249,7 @@ msgid "Validate BOM" msgstr "" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" @@ -7405,7 +7433,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -8784,7 +8812,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -8796,7 +8824,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -8905,7 +8933,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -8986,7 +9014,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9059,77 +9087,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -10662,7 +10691,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -10676,7 +10705,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" @@ -11051,62 +11080,68 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#, fuzzy +#| msgid "External Link" +msgid "External stock" +msgstr "Zunanja povezava" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11484,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12348,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14087,3 @@ msgstr "" #: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/InvenTree/locale/sr/LC_MESSAGES/django.po b/InvenTree/locale/sr/LC_MESSAGES/django.po index 4891fe39cc..33943d4adf 100644 --- a/InvenTree/locale/sr/LC_MESSAGES/django.po +++ b/InvenTree/locale/sr/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2024-02-28 07:23\n" "Last-Translator: \n" "Language-Team: Serbian (Latin)\n" @@ -66,9 +66,9 @@ msgstr "Unesite datum" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "Ime" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "URL udaljene slike" msgid "Downloading images from remote URL is not enabled" msgstr "Preuzimanje slika s udaljenog URL-a nije omogućeno" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "Provera pozadinskog radnika nije uspjela" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" @@ -1242,48 +1242,48 @@ msgstr "" msgid "Project code for this build order" msgstr "" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "" msgid "Stock Item" msgstr "" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "" @@ -1659,44 +1659,45 @@ msgstr "" msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1990,27 +1991,31 @@ msgstr "" msgid "Order Parts" msgstr "" -#: build/templates/build/detail.html:210 -msgid "Incomplete Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:214 -msgid "Create new build output" +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" msgstr "" #: build/templates/build/detail.html:215 +msgid "Incomplete Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:219 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "" msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "" @@ -4218,7 +4223,7 @@ msgstr "" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -5861,10 +5869,10 @@ msgstr "" msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "" msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "" msgid "Category" msgstr "" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,7 +6023,8 @@ msgstr "" msgid "Default location for parts in this category" msgstr "" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "" msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" @@ -6446,7 +6460,7 @@ msgstr "" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" @@ -6455,7 +6469,7 @@ msgstr "" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" @@ -6463,7 +6477,7 @@ msgstr "" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6685,311 +6699,323 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +msgid "External Stock" +msgstr "" + +#: part/serializers.py:806 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:808 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7221,7 +7247,7 @@ msgid "Validate BOM" msgstr "" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" @@ -7405,7 +7431,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -8784,7 +8810,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -8796,7 +8822,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -8905,7 +8931,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -8986,7 +9012,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9059,77 +9085,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -10662,7 +10689,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -10676,7 +10703,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" @@ -11051,62 +11078,66 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +msgid "External stock" +msgstr "" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11480,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12344,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14083,3 @@ msgstr "" #: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/InvenTree/locale/sv/LC_MESSAGES/django.po b/InvenTree/locale/sv/LC_MESSAGES/django.po index c82eea9991..1a63e8e1a9 100644 --- a/InvenTree/locale/sv/LC_MESSAGES/django.po +++ b/InvenTree/locale/sv/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2024-02-28 07:23\n" "Last-Translator: \n" "Language-Team: Swedish\n" @@ -66,9 +66,9 @@ msgstr "Ange datum" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "Namn" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "URL för fjärrbildsfil" msgid "Downloading images from remote URL is not enabled" msgstr "Nedladdning av bilder från fjärr-URL är inte aktiverad" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "Kontroll av bakgrundsarbetare misslyckades" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "Byggorder till vilken detta bygge är tilldelad" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "Bygg statuskod" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Batchkod" @@ -1242,48 +1242,48 @@ msgstr "Projektkod" msgid "Project code for this build order" msgstr "" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Byggorder {build} har slutförts" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "En byggorder har slutförts" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "Ingen byggutgång angiven" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "Byggutgång är redan slutförd" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "Byggutgång matchar inte bygg order" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "" msgid "Quantity" msgstr "Antal" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Byggobjekt måste ange en byggutgång, eftersom huvuddelen är markerad som spårbar" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Tilldelad kvantitet ({q}) får inte överstiga tillgängligt lagersaldo ({a})" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "Lagerposten är överallokerad" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "Allokeringsmängden måste vara större än noll" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "Antal måste vara 1 för serialiserat lager" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "" msgid "Stock Item" msgstr "Artikel i lager" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "Källa lagervara" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "Lagersaldo att allokera för att bygga" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "Installera till" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "Destination lagervara" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "" @@ -1659,44 +1659,45 @@ msgstr "" msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1990,27 +1991,31 @@ msgstr "Beställ obligatoriska delar" msgid "Order Parts" msgstr "Beställ delar" -#: build/templates/build/detail.html:210 -msgid "Incomplete Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:214 -msgid "Create new build output" +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" msgstr "" #: build/templates/build/detail.html:215 +msgid "Incomplete Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:219 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "" msgid "Attachments" msgstr "Bilagor" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Bygganteckningar" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "Leverantör" msgid "Select supplier" msgstr "Välj leverantör" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "" @@ -4218,7 +4223,7 @@ msgstr "Radera bild" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "Leverantörer" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -5861,10 +5869,10 @@ msgstr "" msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "" msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "" msgid "Category" msgstr "Kategori" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,7 +6023,8 @@ msgstr "" msgid "Default location for parts in this category" msgstr "" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "" msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" @@ -6446,7 +6460,7 @@ msgstr "" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" @@ -6455,7 +6469,7 @@ msgstr "" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" @@ -6463,7 +6477,7 @@ msgstr "" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6685,311 +6699,327 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Underkategorier" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "Välj kategori" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +#, fuzzy +#| msgid "External Link" +msgid "External Stock" +msgstr "Extern länk" + +#: part/serializers.py:806 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:808 +#, fuzzy +#| msgid "In Stock" +msgid "Variant Stock" +msgstr "I lager" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "Generera rapport" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7221,7 +7251,7 @@ msgid "Validate BOM" msgstr "" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" @@ -7405,7 +7435,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -8784,7 +8814,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -8796,7 +8826,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -8905,7 +8935,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -8986,7 +9016,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9059,77 +9089,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -10662,7 +10693,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -10676,7 +10707,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" @@ -11051,62 +11082,68 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#, fuzzy +#| msgid "External Link" +msgid "External stock" +msgstr "Extern länk" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11486,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12350,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "resultat" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14089,3 @@ msgstr "" #: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/InvenTree/locale/th/LC_MESSAGES/django.po b/InvenTree/locale/th/LC_MESSAGES/django.po index 1f7f53fc5f..f1c5fbb529 100644 --- a/InvenTree/locale/th/LC_MESSAGES/django.po +++ b/InvenTree/locale/th/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2024-02-28 07:23\n" "Last-Translator: \n" "Language-Team: Thai\n" @@ -66,9 +66,9 @@ msgstr "ป้อนวันที่" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "ชื่อ" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" @@ -1242,48 +1242,48 @@ msgstr "" msgid "Project code for this build order" msgstr "" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "" msgid "Stock Item" msgstr "" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "" @@ -1659,44 +1659,45 @@ msgstr "" msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1990,27 +1991,31 @@ msgstr "" msgid "Order Parts" msgstr "" -#: build/templates/build/detail.html:210 -msgid "Incomplete Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:214 -msgid "Create new build output" +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" msgstr "" #: build/templates/build/detail.html:215 +msgid "Incomplete Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:219 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "" msgid "Attachments" msgstr "" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "" @@ -4218,7 +4223,7 @@ msgstr "" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -5861,10 +5869,10 @@ msgstr "" msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "" msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "" msgid "Category" msgstr "" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,7 +6023,8 @@ msgstr "" msgid "Default location for parts in this category" msgstr "" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "" msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" @@ -6446,7 +6460,7 @@ msgstr "" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" @@ -6455,7 +6469,7 @@ msgstr "" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" @@ -6463,7 +6477,7 @@ msgstr "" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6685,311 +6699,323 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +msgid "External Stock" +msgstr "" + +#: part/serializers.py:806 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:808 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7221,7 +7247,7 @@ msgid "Validate BOM" msgstr "" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" @@ -7405,7 +7431,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -8784,7 +8810,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -8796,7 +8822,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -8905,7 +8931,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -8986,7 +9012,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9059,77 +9085,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -10662,7 +10689,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -10676,7 +10703,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" @@ -11051,62 +11078,66 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +msgid "External stock" +msgstr "" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11480,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12344,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14083,3 @@ msgstr "" #: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/InvenTree/locale/tr/LC_MESSAGES/django.po b/InvenTree/locale/tr/LC_MESSAGES/django.po index e2eb65ff87..87aa424aef 100644 --- a/InvenTree/locale/tr/LC_MESSAGES/django.po +++ b/InvenTree/locale/tr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" -"PO-Revision-Date: 2024-02-28 07:23\n" +"POT-Creation-Date: 2024-03-02 07:22+0000\n" +"PO-Revision-Date: 2024-03-06 10:36\n" "Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -28,7 +28,7 @@ msgstr "Kullanıcının bu modeli görüntüleme izni yok" #: InvenTree/conversion.py:160 #, python-brace-format msgid "Invalid unit provided ({unit})" -msgstr "" +msgstr "Geçersiz ürün girildi ({unit})" #: InvenTree/conversion.py:170 msgid "No value provided" @@ -66,9 +66,9 @@ msgstr "Tarih giriniz" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -345,7 +345,7 @@ msgstr "E-posta" #: InvenTree/models.py:107 msgid "Error running plugin validation" -msgstr "" +msgstr "Eklenti doğrulama sırasında hata oluştu" #: InvenTree/models.py:162 msgid "Metadata must be a python dict object" @@ -377,11 +377,11 @@ msgstr "Referans alanı boş olamaz" #: InvenTree/models.py:431 msgid "Reference must match required pattern" -msgstr "" +msgstr "Referans {pattern} deseniyle mutlaka eşleşmeli" #: InvenTree/models.py:463 msgid "Reference number is too large" -msgstr "" +msgstr "Referans sayısı çok fazla" #: InvenTree/models.py:537 msgid "Missing file" @@ -473,7 +473,7 @@ msgstr "Dosya adı değiştirilirken hata" #: InvenTree/models.py:847 msgid "Duplicate names cannot exist under the same parent" -msgstr "" +msgstr "Aynı kaynak altında birden fazla aynı isim kullanılamaz" #: InvenTree/models.py:864 msgid "Invalid choice" @@ -523,7 +523,7 @@ msgstr "Adı" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -551,7 +551,7 @@ msgstr "Yol" #: InvenTree/models.py:1022 msgid "Markdown notes (optional)" -msgstr "" +msgstr "Markdown notları (isteğe bağlı)" #: InvenTree/models.py:1051 msgid "Barcode Data" @@ -567,11 +567,11 @@ msgstr "Barkod Hash" #: InvenTree/models.py:1059 msgid "Unique hash of barcode data" -msgstr "" +msgstr "Barkod verisinin benzersiz hash'i" #: InvenTree/models.py:1112 msgid "Existing barcode found" -msgstr "" +msgstr "Var olan barkod bulundu" #: InvenTree/models.py:1155 msgid "Server Error" @@ -579,7 +579,7 @@ msgstr "Sunucu Hatası" #: InvenTree/models.py:1156 msgid "An error has been logged by the server." -msgstr "" +msgstr "Bir hafta sunucu tarafından kayıt edildi." #: InvenTree/serializers.py:62 part/models.py:4134 msgid "Must be a valid number" @@ -594,27 +594,27 @@ msgstr "Para birimi" #: InvenTree/serializers.py:102 msgid "Select currency from available options" -msgstr "" +msgstr "Var olan seçeneklerden bir döviz birimi seçin" #: InvenTree/serializers.py:436 msgid "You do not have permission to change this user role." -msgstr "" +msgstr "Bu kullanıcı rolünü değiştirmek için izniniz yok." #: InvenTree/serializers.py:448 msgid "Only superusers can create new users" -msgstr "" +msgstr "Sadece süper kullanıcılar yeni kullanıcı oluşturabilir" #: InvenTree/serializers.py:467 msgid "Your account has been created." -msgstr "" +msgstr "Kullanıcı hesabınız oluşturulmuştur." #: InvenTree/serializers.py:469 msgid "Please use the password reset function to login" -msgstr "" +msgstr "Giriş yapmak için lütfen şifre sıfırlama fonksiyonunu kullanınız" #: InvenTree/serializers.py:476 msgid "Welcome to InvenTree" -msgstr "" +msgstr "InvenTree'ye Hoşgeldiniz" #: InvenTree/serializers.py:537 msgid "Filename" @@ -668,17 +668,17 @@ msgstr "Tekrarlanan kolon ismi:'{col}'" #: InvenTree/serializers.py:854 msgid "Remote Image" -msgstr "" +msgstr "Uzaktan Görüntüler" #: InvenTree/serializers.py:855 msgid "URL of remote image file" -msgstr "" +msgstr "Uzaktan görüntü dosya URL'si" #: InvenTree/serializers.py:873 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "Arka plan çalışanı kontrolü başarısız oldu" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "Bu yapım işinin tahsis edildiği yapım işi emri" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "Yapım işi durum kodu" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Sıra numarası" @@ -1242,48 +1242,48 @@ msgstr "" msgid "Project code for this build order" msgstr "" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "Yapım işi çıktısı belirtilmedi" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "Yapım işi çıktısı zaten tamamlanmış" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "Yapım işi çıktısı, yapım işi emri ile eşleşmiyor" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "" msgid "Quantity" msgstr "Miktar" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Ana parça izlenebilir olarak işaretlendiğinden, yapım işi çıktısı için bir yapım işi ögesi belirtmelidir" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "Stok kalemi fazladan tahsis edilmiş" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "Tahsis edilen miktar sıfırdan büyük olmalıdır" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "Seri numaralı stok için miktar bir olmalı" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "" msgid "Stock Item" msgstr "Stok Kalemi" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "Kaynak stok kalemi" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "Yapım işi için tahsis edilen stok miktarı" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "Kurulduğu yer" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "Hedef stok kalemi" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "" @@ -1659,44 +1659,45 @@ msgstr "" msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1990,27 +1991,31 @@ msgstr "Gerekli parçaları sipariş edin" msgid "Order Parts" msgstr "Parça Siparişi" -#: build/templates/build/detail.html:210 +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" +msgstr "" + +#: build/templates/build/detail.html:215 msgid "Incomplete Build Outputs" msgstr "Tamamlanmamış Yapım İşi Çıktıları" -#: build/templates/build/detail.html:214 +#: build/templates/build/detail.html:219 msgid "Create new build output" msgstr "Yeni yapım işi çıktısı oluştur" -#: build/templates/build/detail.html:215 +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "Tamamlanmış Yapım İşi Çıktıları" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "Tamamlanmış Yapım İşi Çıktıları" msgid "Attachments" msgstr "Ekler" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Yapım İşi Notları" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "Parçaları varsayılan olan şablondur" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "Parça seçin" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "Üretici seçin" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "Tedarikçi" msgid "Select supplier" msgstr "Tedarikçi seçin" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "" @@ -4218,7 +4223,7 @@ msgstr "" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "Etiket şablon listesi" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "Etkin" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "İşlemler" @@ -5861,10 +5869,10 @@ msgstr "" msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "" msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "" msgid "Category" msgstr "" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Varsayılan Konum" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,7 +6023,8 @@ msgstr "Parça Kategorileri" msgid "Default location for parts in this category" msgstr "Bu kategori içindeki parçalar için varsayılan konum" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "Test şablonları sadece takip edilebilir paçalar için oluşturulabili msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "Test Adı" @@ -6446,7 +6460,7 @@ msgstr "" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Gerekli" @@ -6455,7 +6469,7 @@ msgstr "Gerekli" msgid "Is this test required to pass?" msgstr "Testi geçmesi için bu gerekli mi?" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" @@ -6463,7 +6477,7 @@ msgstr "" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6685,311 +6699,323 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Alt kategoriler" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +msgid "External Stock" +msgstr "" + +#: part/serializers.py:806 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:808 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7221,7 +7247,7 @@ msgid "Validate BOM" msgstr "" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" @@ -7405,7 +7431,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -8784,7 +8810,7 @@ msgstr "Bu stok kalemi için tedarikçi parçası seçin" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -8796,7 +8822,7 @@ msgstr "" msgid "Serial number for this item" msgstr "Bu öge için seri numarası" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -8905,7 +8931,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -8986,7 +9012,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9059,77 +9085,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Alt konumlar" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -10662,7 +10689,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -10676,7 +10703,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" @@ -11051,62 +11078,66 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +msgid "External stock" +msgstr "" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11480,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12344,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14083,3 @@ msgstr "Parçaları düzenleme izni" #: users/models.py:413 msgid "Permission to delete items" msgstr "Parçaları silme izni" - diff --git a/InvenTree/locale/vi/LC_MESSAGES/django.po b/InvenTree/locale/vi/LC_MESSAGES/django.po index 5826ccb63e..97043eea21 100644 --- a/InvenTree/locale/vi/LC_MESSAGES/django.po +++ b/InvenTree/locale/vi/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2024-02-28 07:23\n" "Last-Translator: \n" "Language-Team: Vietnamese\n" @@ -66,9 +66,9 @@ msgstr "Nhập ngày" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "Tên" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "URL của tệp hình ảnh bên ngoài" msgid "Downloading images from remote URL is not enabled" msgstr "Chức năng tải hình ảnh từ URL bên ngoài không được bật" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "Nhân công chạy ngầm kiểm tra thất bại" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "Đã theo dõi" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "Đơn đặt bản dựng với bản dựng này đã được phân b #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "Mã trạng thái bản dựng" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Mã lô hàng" @@ -1242,48 +1242,48 @@ msgstr "Mã dự án" msgid "Project code for this build order" msgstr "Mã dự án cho đơn đặt bản dựng này" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Đơn đặt bản dựng {build} đã được hoàn thành" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "Một đơn đặt bản dựng đã được hoàn thành" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "Không có đầu ra bản dựng đã được chỉ ra" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "Đầu ra bản dựng đã được hoàn thiện" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "Đầu ra bản dựng không phù hợp với đơn đặt bản dựng" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "Số lượng phải lớn hơn 0" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "Số lượng không thể lớn hơn số lượng đầu ra" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "Dựng đối tượng" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "Dựng đối tượng" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "Dựng đối tượng" msgid "Quantity" msgstr "Số lượng" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "Yêu cầu số lượng để dựng đơn đặt" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Xây dựng mục phải xác định đầu ra, bởi vì sản phẩm chủ được đánh dấu là có thể theo dõi" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Số lượng được phân bổ ({q}) không thể vượt quá số lượng có trong kho ({a})" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "Kho hàng đã bị phân bổ quá đà" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "Số lượng phân bổ phải lớn hơn 0" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "Số lượng phải là 1 cho kho sê ri" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "Hàng trong kho đã chọn không phù hợp với đường BOM" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "Hàng trong kho đã chọn không phù hợp với đường BOM" msgid "Stock Item" msgstr "Kho hàng" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "Kho hàng gốc" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "Số lượng kho hàng cần chỉ định để xây dựng" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "Cài đặt vào" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "Kho hàng đích" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "Danh sách đầu ra bản dựng phải được cung cấp" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "Vị trí cho đầu ra bản dựng hoàn thiện" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "Mục chi tiết bản dựng" msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part phải trỏ đến phần tương tự của đơn đặt bản dựng" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "Hàng hóa phải trong kho" @@ -1659,44 +1659,45 @@ msgstr "Mục tùy chọn" msgid "Allocate optional BOM items to build order" msgstr "Phân bổ các mục hóa đơn vật liệu tùy chọn đến đơn đặt bản dựng" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "Mục BOM" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "Bật đơn hàng" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "Đang sản xuất" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "Số hàng tồn" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "Kho được yêu cầu cho đặt hàng bản dựng" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "Đơn đặt bản dựng quá hạn" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Đặt hàng bản dựng {bo} đang quá hạn" @@ -1990,27 +1991,31 @@ msgstr "Đơn đặt yêu cầu sản phẩm" msgid "Order Parts" msgstr "Đặt hàng sản phẩm" -#: build/templates/build/detail.html:210 +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" +msgstr "" + +#: build/templates/build/detail.html:215 msgid "Incomplete Build Outputs" msgstr "Đầu ra bản dựng chưa hoàn thành" -#: build/templates/build/detail.html:214 +#: build/templates/build/detail.html:219 msgid "Create new build output" msgstr "Tạo đầu ra bản dựng mới" -#: build/templates/build/detail.html:215 +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "Đầu ra bản dựng mới" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "Kho tiêu thụ" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "Đầu ra bản dựng hoàn thiện" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "Đầu ra bản dựng hoàn thiện" msgid "Attachments" msgstr "Tập tin đính kèm" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "Ghi chép bản dựng" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "Sản phẩm là mẫu bởi mặc định" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "Số lượng giá phá vỡ" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "Chọn sản phẩm" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "Chọn nhà sản xuất" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "Sản phẩm nhà sản xuất đã liên kết phải tham chiếu vớ #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "Nhà cung cấp" msgid "Select supplier" msgstr "Chọn nhà cung cấp" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "Đơn vị quản lý kho nhà cung cấp" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "Thu phí tối thiểu (vd: phí kho bãi)" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "Sẵn hàng đã được cập nhật" msgid "Date of last update of availability data" msgstr "Ngày cập nhật cuối thông tin tồn kho" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "Tiền tệ mặc định được sử dụng cho nhà cung cấp này" @@ -4218,7 +4223,7 @@ msgstr "Xóa ảnh" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "Chưa có thông tin nhà sản xuất" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "Nhà cung cấp" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "Chưa có thông tin nhà cung cấp" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "Liên kết mã vạch đến hàng hóa nhà cung cấp" msgid "Update Part Availability" msgstr "Cập nhật độ sẵn sàng sản phẩm" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "Tệp mẫu nhãn" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "Đã bật" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "Vận chuyển đang chờ xử lý" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "Chức năng" @@ -5861,10 +5869,10 @@ msgstr "Tên cha" msgid "Category Path" msgstr "Đưỡng dẫn danh mục" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "IPN cha" msgid "Part IPN" msgstr "IPN sản phẩm" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Giá thấp nhất" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "Tùy chọn này phải được chọn" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "Tùy chọn này phải được chọn" msgid "Category" msgstr "Danh mục" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Điểm bán mặc định" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Tổng số lượng" @@ -6010,7 +6023,8 @@ msgstr "Danh mục sản phẩm" msgid "Default location for parts in this category" msgstr "Vị trí mặc định cho sản phẩm trong danh mục này" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "Chỉ có thể tạo mẫu kiểm thử cho sản phẩm có thể theo msgid "Test with this name already exists for this part" msgstr "Kiểm thử với tên này đã tồn tại cho sản phẩm này" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "Tên kiểm thử" @@ -6446,7 +6460,7 @@ msgstr "Nhập mô tả cho kiểm thử này" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Bắt buộc" @@ -6455,7 +6469,7 @@ msgstr "Bắt buộc" msgid "Is this test required to pass?" msgstr "Kiểm thử này bắt buộc phải đạt?" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "Giá trị bắt buộc" @@ -6463,7 +6477,7 @@ msgstr "Giá trị bắt buộc" msgid "Does this test require a value when adding a test result?" msgstr "Kiểm thử này yêu cầu 1 giá trị khi thêm một kết quả kiểm thử?" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "Yêu cầu đính kèm" @@ -6685,311 +6699,329 @@ msgstr "Không thể tạo mối quan hệ giữa một sản phẩm và chính msgid "Duplicate relationship already exists" msgstr "Đã tồn tại mối quan hệ trùng lặp" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "Phụ mục" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "Loại tiền mua hàng của hàng hóa này" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "Chưa chọn sản phẩm" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "Chọn danh mục" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "Sản phẩm gốc" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "Chọn sản phẩm gốc để nhân bản" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "Sao chép ảnh" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "Sao chép hình ảnh từ sản phẩm gốc" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "Sao chép BOM" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "Sao chép định mức nguyên vật liệu từ sản phẩm gốc" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "Sao chép thông số" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "Sao chép thông tin tham số từ sản phẩm gốc" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "Sao chép ghi chú" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "Sao chép ghi chú từ sản phẩm gốc" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "Số liệu tồn kho ban đầu" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Chỉ ra số lượng tồn kho ban đầu cho sản phẩm. Nếu điền là không, không thêm kho nào." -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "Vị trí kho ban đầu" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "Chỉ định vị trí kho ban đầu cho sản phẩm này" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "Chọn nhà cung cấp (hoặc để trống để bỏ qua)" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "Chọn nhà sản xuất (hoặc để trống để bỏ qua)" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "Mã số nhà sản xuất" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "Công ty đã chọn không phải là nhà cung ứng hợp lệ" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "Công ty đã chọn không phải là nhà sản xuất hợp lệ" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "Mã số nhà sản xuất khớp với MPN này đã tồn tại" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "Mã số nhà cung cấp khớp với SKU này đã tồn tại" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +#, fuzzy +#| msgid "Exclude External Stock" +msgid "External Stock" +msgstr "Ngoại trừ kho bên ngoài" + +#: part/serializers.py:806 +#, fuzzy +#| msgid "Deallocate Stock" +msgid "Unallocated Stock" +msgstr "Phân kho" + +#: part/serializers.py:808 +#, fuzzy +#| msgid "Part Stock" +msgid "Variant Stock" +msgstr "Kho hàng" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Nhân bản sản phẩm" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "Sao chép dữ liệu ban đầu từ sản phẩm khác" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "Số liệu kho ban đầu" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "Tạo sản phẩm với số lượng tồn kho ban đầu" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "Thông tin nhà cung cấp" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "Thêm thông tin nhà cung cấp ban đầu cho sản phẩm này" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "Sao chép thông số nhóm hàng" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "Sao chép mẫu tham số từ nhóm sản phẩm được chọn" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "Ảnh hiện có" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "Tên tệp của ảnh sản phẩm hiện hữu" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "Tệp hình ảnh không tồn tại" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "Hạn chế báo cáo kiểm kê với sản phẩm riêng biệt và sản phẩm biến thể bất kỳ" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "Hạn chế báo cáo kiểm kê với danh mục sản phẩm riêng biệt và danh mục con bất kỳ" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "Hạn chế báo cáo kiểm kê với vị trí kho riêng biệt và vị trí con bất kỳ" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "Ngoại trừ kho bên ngoài" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "Loại trừ hàng trong kho của vị trí bên ngoài" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "Tạo báo cáo" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "Tạo tệp báo cáo chứa dữ liệu kiểm kê đã tính toán" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "Cập nhật sản phẩm" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "Cập nhật sản phẩm cụ thể với dữ liệu kiểm kê đã tính" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "Chức năng kiểm kê chưa được bật" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "Giá trị tính toán ghi đè cho giá tối thiểu" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "Tiền tế giá tối thiểu" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "Giá trị tính toán ghi đè cho giá tối đa" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "Tiền tế giá tối đa" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "Cập nhật" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "Cập nhật giá cho sản phẩm này" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Không thể chuyển đổi từ tiền tệ đã cung cấp cho {default_currency}" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "Giá tối thiểu không được lớn hơn giá tối đa" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "Giá tối đa không được nhỏ hơn giá tối thiểu" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "Chọn sản phẩm để sao chép định mức nguyên vật liệu" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "Xóa dữ liệu đã tồn tại" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "Xóa mục BOM đã tồn tại trước khi sao chép" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "Bao gồm thừa hưởng" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "Bao gồm mục BOM được thừa hưởng từ sản phẩm mẫu" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "Bỏ qua dòng không hợp lệ" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "Bật tùy chọn này để bỏ qua dòng không hợp lệ" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "Sao chép sản phẩm thay thế" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "Sao chép sản phẩm thay thế khi nhân bản hàng hóa BOM" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "Dọn dẹp BOM đang tồn tại" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "Xóa mục BOM đang tồn tại trước khi tải lên" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "Chưa chỉ ra cột sản phẩm" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "Tìm thấy nhiều sản phẩm phù hợp" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "Không tìm thấy sản phẩm nào" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "Sản phẩm không được chỉ định như là một thành phần" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "Chưa cung cấp số lượng" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "Số lượng không hợp lệ" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "Buộc phải nhập ít nhất một mục BOM" @@ -7221,7 +7253,7 @@ msgid "Validate BOM" msgstr "Xác minh BOM" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "Thêm mục BOM" @@ -7405,7 +7437,7 @@ msgstr "Phân bổ đến đơn đặt bản dựng" msgid "Allocated to Sales Orders" msgstr "Phân bổ đến đơn bán hàng" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "Có thể dựng" @@ -8784,7 +8816,7 @@ msgstr "Chọn sản phẩm nhà cung cấp khớp với hàng hóa trong kho n msgid "Where is this stock item located?" msgstr "Hàng trong kho này được đặt ở đâu?" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "Đóng gói hàng hóa này được lưu trữ lại" @@ -8796,7 +8828,7 @@ msgstr "Mục này đã được cài đặt trong mục khác?" msgid "Serial number for this item" msgstr "Số sê ri cho mục này" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "Mã lô cho hàng trong kho này" @@ -8905,7 +8937,7 @@ msgstr "Hàng trong kho hiện đang sản xuất" msgid "Serialized stock cannot be merged" msgstr "Không thể hợp nhất kho nối tiếp" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "Mặt hàng trùng lặp" @@ -8986,7 +9018,7 @@ msgstr "Số lượng phải không vượt quá số lượng trong kho đang c msgid "Enter serial numbers for new items" msgstr "Điền số sêri cho hàng hóa mới" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "Vị trí kho đích" @@ -9059,77 +9091,78 @@ msgstr "Chọn mặt hàng để đổi trạng thái" msgid "No stock items selected" msgstr "Không có mặt hàng nào được chọn" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Kho phụ" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "Sản phẩm phải có thể bán được" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "Hàng hóa được phân bổ đến một đơn hàng bán" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "Hàng hóa được phân bổ đến một đơn đặt bản dựng" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "Khách hàng được gán vào các mặt hàng" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "Công ty đã chọn không phải là khách hàng" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "Ghi chú phân bổ kho" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "Phải cung cấp danh sách mặt hàng" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "Ghi chú gộp kho" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "Cho phép nhiều nhà cung không khớp" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "Cho phép mặt hàng cùng sản phẩm nhà cung cấp khác phải được gộp" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "Cho phép trạng thái không khớp" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "Cho phép mặt hàng với mã trạng thái khác nhau để gộp lại" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "Cần cung cấp ít nhất hai mặt hàng" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "Giá trị khóa chính mặt hàng" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "Mã trạng thái mặt hàng" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "Ghi chú giao dịch kho" @@ -10662,7 +10695,7 @@ msgid "The following parts are low on required stock" msgstr "Sản phẩm sau còn ít hàng trong kho yêu cầu" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "Số lượng bắt buộc" @@ -10676,7 +10709,7 @@ msgid "Click on the following link to view this part" msgstr "Nhấp chuột vào liên kết dưới đây để xem sản phẩm này" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "Số lượng tối thiểu" @@ -11051,62 +11084,68 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#, fuzzy +#| msgid "External Link" +msgid "External stock" +msgstr "Liên kết bên ngoài" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11488,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12352,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14091,3 @@ msgstr "Quyển để sửa mục" #: users/models.py:413 msgid "Permission to delete items" msgstr "Quyền để xóa mục" - diff --git a/InvenTree/locale/zh/LC_MESSAGES/django.po b/InvenTree/locale/zh/LC_MESSAGES/django.po index 380b4d78d5..e4dbd73737 100644 --- a/InvenTree/locale/zh/LC_MESSAGES/django.po +++ b/InvenTree/locale/zh/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 04:05+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2024-02-28 07:23\n" "Last-Translator: \n" "Language-Team: Chinese Traditional\n" @@ -66,9 +66,9 @@ msgstr "輸入日期" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -523,7 +523,7 @@ msgstr "名稱" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -678,7 +678,7 @@ msgstr "遠端圖片的URL" msgid "Downloading images from remote URL is not enabled" msgstr "尚未啟用從遠端URL下載圖片" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "背景工作程式檢查失敗" @@ -960,7 +960,7 @@ msgid "Tracked" msgstr "" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1044,11 +1044,11 @@ msgstr "這張生產工單對應的上層生產工單" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1147,7 +1147,7 @@ msgid "Build status code" msgstr "生產狀態代碼" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "批量代碼" @@ -1242,48 +1242,48 @@ msgstr "專案代碼" msgid "Project code for this build order" msgstr "此生產工單隸屬的專案代碼" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "生產工單 {build} 已經完成" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "一張生產工單已經完成" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "尚未指定生產品項" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "生產成品已經完成" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "生產品項與生產工單不符" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "數量必須大於零" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 msgid "Quantity cannot be greater than the output quantity" msgstr "數量不能大於工單生產數量" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 msgid "Build object" msgstr "" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1310,7 +1310,7 @@ msgstr "" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1330,38 +1330,38 @@ msgstr "" msgid "Quantity" msgstr "數量" -#: build/models.py:1301 +#: build/models.py:1317 msgid "Required quantity for build order" msgstr "生產工單所需數量" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "分配的數量({q})不能超過可用的庫存數量({a})" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "庫存品項超額分配" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "分配的數量必須大於零" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "有序號的品項數量必須為1" -#: build/models.py:1473 +#: build/models.py:1489 msgid "Selected stock item does not match BOM line" msgstr "選擇的庫存品項和BOM的項目不符" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1376,19 +1376,19 @@ msgstr "選擇的庫存品項和BOM的項目不符" msgid "Stock Item" msgstr "庫存品項" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "來源庫存項目" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "要分配的庫存數量" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "安裝到" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "目的庫存品項" @@ -1452,9 +1452,9 @@ msgid "A list of build outputs must be provided" msgstr "必須提供產出清單" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1494,7 +1494,7 @@ msgstr "" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1602,7 +1602,7 @@ msgstr "" msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "商品必須有庫存" @@ -1659,44 +1659,45 @@ msgstr "" msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1990,27 +1991,31 @@ msgstr "" msgid "Order Parts" msgstr "" -#: build/templates/build/detail.html:210 -msgid "Incomplete Build Outputs" -msgstr "" - -#: build/templates/build/detail.html:214 -msgid "Create new build output" +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" msgstr "" #: build/templates/build/detail.html:215 +msgid "Incomplete Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:219 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 msgid "Consumed Stock" msgstr "" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2026,15 +2031,15 @@ msgstr "" msgid "Attachments" msgstr "附件" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 msgid "All lines have been fully allocated" msgstr "" @@ -2436,7 +2441,7 @@ msgid "Parts are templates by default" msgstr "" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3495,7 +3500,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -3972,7 +3977,7 @@ msgstr "" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -3987,7 +3992,7 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4059,7 +4064,7 @@ msgstr "" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4076,7 +4081,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "" @@ -4112,7 +4117,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4157,7 +4162,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "" @@ -4218,7 +4223,7 @@ msgstr "" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4429,8 +4434,9 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "" @@ -4528,7 +4534,7 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4577,10 +4583,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4640,7 +4648,7 @@ msgid "Label template file" msgstr "" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "" @@ -5733,7 +5741,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -5861,10 +5869,10 @@ msgstr "" msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -5889,13 +5897,13 @@ msgstr "" msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -5974,7 +5982,7 @@ msgid "This option must be selected" msgstr "" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -5982,12 +5990,17 @@ msgstr "" msgid "Category" msgstr "" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6010,7 +6023,8 @@ msgstr "" msgid "Default location for parts in this category" msgstr "" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6418,7 +6432,7 @@ msgstr "" msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" @@ -6446,7 +6460,7 @@ msgstr "" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" @@ -6455,7 +6469,7 @@ msgstr "" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" @@ -6463,7 +6477,7 @@ msgstr "" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6685,311 +6699,327 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 msgid "No parts selected" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:397 msgid "Select category" msgstr "" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 msgid "Copy Notes" msgstr "" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +#, fuzzy +#| msgid "External Link" +msgid "External Stock" +msgstr "外部連結" + +#: part/serializers.py:806 +#, fuzzy +#| msgid "Allocate Stock" +msgid "Unallocated Stock" +msgstr "分配庫存" + +#: part/serializers.py:808 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 msgid "Existing Image" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7221,7 +7251,7 @@ msgid "Validate BOM" msgstr "" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" @@ -7405,7 +7435,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -8784,7 +8814,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -8796,7 +8826,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -8905,7 +8935,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -8986,7 +9016,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "" @@ -9059,77 +9089,78 @@ msgstr "" msgid "No stock items selected" msgstr "" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 msgid "No Change" msgstr "" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -10662,7 +10693,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -10676,7 +10707,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" @@ -11051,62 +11082,68 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#, fuzzy +#| msgid "External Link" +msgid "External stock" +msgstr "外部連結" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -11449,29 +11486,29 @@ msgstr "" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 msgid "Remove stock allocation" msgstr "" @@ -12313,64 +12350,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14052,4 +14089,3 @@ msgstr "" #: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po b/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po index 6be00343a6..b9979984b8 100644 --- a/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po +++ b/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-28 06:44+0000\n" +"POT-Creation-Date: 2024-03-05 00:41+0000\n" "PO-Revision-Date: 2023-02-28 22:38\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" @@ -72,9 +72,9 @@ msgstr "输入日期" #: report/templates/report/inventree_build_order_base.html:172 #: stock/admin.py:226 stock/models.py:2335 stock/models.py:2451 #: stock/serializers.py:479 stock/serializers.py:632 stock/serializers.py:728 -#: stock/serializers.py:778 stock/serializers.py:1081 stock/serializers.py:1170 -#: stock/serializers.py:1335 stock/templates/stock/stock_sidebar.html:25 -#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1259 +#: stock/serializers.py:778 stock/serializers.py:1087 stock/serializers.py:1176 +#: stock/serializers.py:1341 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1674 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 #: templates/js/translated/purchase_order.js:2201 @@ -542,7 +542,7 @@ msgstr "名称" #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 #: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2887 +#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 #: templates/js/translated/plugin.js:80 #: templates/js/translated/purchase_order.js:1707 #: templates/js/translated/purchase_order.js:1850 @@ -703,7 +703,7 @@ msgstr "远程图像文件的 URL" msgid "Downloading images from remote URL is not enabled" msgstr "未启用从远程 URL下载图像" -#: InvenTree/status.py:66 part/serializers.py:1120 +#: InvenTree/status.py:66 part/serializers.py:1138 msgid "Background worker check failed" msgstr "后台工作人员检查失败" @@ -1003,7 +1003,7 @@ msgid "Tracked" msgstr "" #: build/api.py:285 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2626 +#: templates/js/translated/build.js:2630 #: templates/js/translated/sales_order.js:1929 #: templates/js/translated/table_filters.js:571 msgid "Allocated" @@ -1091,11 +1091,11 @@ msgstr "此次生产匹配的订单" #: build/models.py:199 build/templates/build/build_base.html:97 #: build/templates/build/detail.html:29 company/models.py:1044 #: order/models.py:1389 order/models.py:1532 order/models.py:1533 -#: part/api.py:1528 part/models.py:389 part/models.py:3003 part/models.py:3147 -#: part/models.py:3291 part/models.py:3314 part/models.py:3335 -#: part/models.py:3357 part/models.py:3458 part/models.py:3754 -#: part/models.py:3885 part/models.py:3978 part/models.py:4339 -#: part/serializers.py:1066 part/serializers.py:1631 +#: part/api.py:1528 part/api.py:1820 part/models.py:389 part/models.py:3003 +#: part/models.py:3147 part/models.py:3291 part/models.py:3314 +#: part/models.py:3335 part/models.py:3357 part/models.py:3458 +#: part/models.py:3754 part/models.py:3885 part/models.py:3978 +#: part/models.py:4339 part/serializers.py:1084 part/serializers.py:1659 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 @@ -1194,7 +1194,7 @@ msgid "Build status code" msgstr "生产状态代码" #: build/models.py:264 build/serializers.py:280 order/serializers.py:549 -#: stock/models.py:826 stock/serializers.py:1300 +#: stock/models.py:826 stock/serializers.py:1306 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "批量代码" @@ -1293,52 +1293,52 @@ msgstr "商品二维码" msgid "Project code for this build order" msgstr "此构建订单的优先级" -#: build/models.py:559 +#: build/models.py:575 #, python-brace-format msgid "Build order {build} has been completed" msgstr "生产订单 {build} 已完成" -#: build/models.py:565 +#: build/models.py:581 msgid "A build order has been completed" msgstr "生产订单已完成" -#: build/models.py:783 build/models.py:858 +#: build/models.py:799 build/models.py:874 msgid "No build output specified" msgstr "未指定生产产出" -#: build/models.py:786 +#: build/models.py:802 msgid "Build output is already completed" msgstr "生产产出已完成" -#: build/models.py:789 +#: build/models.py:805 msgid "Build output does not match Build Order" msgstr "生产产出与订单不匹配" -#: build/models.py:862 build/serializers.py:223 build/serializers.py:262 +#: build/models.py:878 build/serializers.py:223 build/serializers.py:262 #: build/serializers.py:831 order/models.py:526 order/serializers.py:401 -#: order/serializers.py:544 part/serializers.py:1423 part/serializers.py:1789 +#: order/serializers.py:544 part/serializers.py:1442 part/serializers.py:1817 #: stock/models.py:665 stock/models.py:1477 stock/serializers.py:450 msgid "Quantity must be greater than zero" msgstr "数量必须大于0" -#: build/models.py:867 build/serializers.py:228 +#: build/models.py:883 build/serializers.py:228 #, fuzzy #| msgid "Quantity must be greater than zero" msgid "Quantity cannot be greater than the output quantity" msgstr "数量必须大于0" -#: build/models.py:924 build/serializers.py:533 +#: build/models.py:940 build/serializers.py:533 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1286 +#: build/models.py:1302 #, fuzzy #| msgid "Build Notes" msgid "Build object" msgstr "生产备注" -#: build/models.py:1300 build/models.py:1558 build/serializers.py:210 +#: build/models.py:1316 build/models.py:1574 build/serializers.py:210 #: build/serializers.py:247 build/templates/build/build_base.html:102 #: build/templates/build/detail.html:34 common/models.py:2432 #: order/models.py:1247 order/models.py:1902 order/serializers.py:1306 @@ -1365,7 +1365,7 @@ msgstr "生产备注" #: templates/js/translated/company.js:1808 #: templates/js/translated/model_renderers.js:230 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3332 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 @@ -1385,42 +1385,42 @@ msgstr "生产备注" msgid "Quantity" msgstr "数量" -#: build/models.py:1301 +#: build/models.py:1317 #, fuzzy #| msgid "Stock required for build order" msgid "Required quantity for build order" msgstr "生产订单所需的库存" -#: build/models.py:1381 +#: build/models.py:1397 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "生产项必须指定生产产出,因为主部件已经被标记为可追踪的" -#: build/models.py:1390 +#: build/models.py:1406 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "分配数量 ({q}) 不得超过可用库存数量 ({a})" -#: build/models.py:1400 order/models.py:1853 +#: build/models.py:1416 order/models.py:1853 msgid "Stock item is over-allocated" msgstr "库存物品分配过度!" -#: build/models.py:1406 order/models.py:1856 +#: build/models.py:1422 order/models.py:1856 msgid "Allocation quantity must be greater than zero" msgstr "分配数量必须大于0" -#: build/models.py:1412 +#: build/models.py:1428 msgid "Quantity must be 1 for serialized stock" msgstr "序列化库存的数量必须是 1" -#: build/models.py:1473 +#: build/models.py:1489 #, fuzzy #| msgid "Selected stock item not found in BOM" msgid "Selected stock item does not match BOM line" msgstr "在BOM中找不到选定的库存项" -#: build/models.py:1545 build/serializers.py:811 order/serializers.py:1150 -#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1019 -#: stock/serializers.py:1131 stock/templates/stock/item_base.html:10 +#: build/models.py:1561 build/serializers.py:811 order/serializers.py:1150 +#: order/serializers.py:1171 stock/serializers.py:544 stock/serializers.py:1025 +#: stock/serializers.py:1137 stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 #: templates/js/translated/build.js:1742 @@ -1435,19 +1435,19 @@ msgstr "在BOM中找不到选定的库存项" msgid "Stock Item" msgstr "库存项" -#: build/models.py:1546 +#: build/models.py:1562 msgid "Source stock item" msgstr "源库存项" -#: build/models.py:1559 +#: build/models.py:1575 msgid "Stock quantity to allocate to build" msgstr "分配到生产的数量" -#: build/models.py:1567 +#: build/models.py:1583 msgid "Install into" msgstr "安装到" -#: build/models.py:1568 +#: build/models.py:1584 msgid "Destination stock item" msgstr "目标库存项" @@ -1511,9 +1511,9 @@ msgid "A list of build outputs must be provided" msgstr "必须提供生产产出列表" #: build/serializers.py:426 build/serializers.py:498 order/serializers.py:533 -#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1086 +#: order/serializers.py:641 order/serializers.py:1646 part/serializers.py:1104 #: stock/serializers.py:472 stock/serializers.py:627 stock/serializers.py:723 -#: stock/serializers.py:1163 stock/serializers.py:1419 +#: stock/serializers.py:1169 stock/serializers.py:1425 #: stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 #: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 @@ -1559,7 +1559,7 @@ msgstr "已完成生产产出的仓储地点" #: build/serializers.py:505 build/templates/build/build_base.html:151 #: build/templates/build/detail.html:62 order/models.py:910 #: order/models.py:2005 order/serializers.py:565 stock/admin.py:165 -#: stock/serializers.py:774 stock/serializers.py:1307 +#: stock/serializers.py:774 stock/serializers.py:1313 #: stock/templates/stock/item_base.html:427 #: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 #: templates/js/translated/purchase_order.js:1308 @@ -1671,7 +1671,7 @@ msgstr "删除参数" msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part 必须与生产订单指向相同的部件" -#: build/serializers.py:817 stock/serializers.py:1032 +#: build/serializers.py:817 stock/serializers.py:1038 msgid "Item must be in stock" msgstr "项目必须在库存中" @@ -1728,44 +1728,45 @@ msgstr "可选项目" msgid "Allocate optional BOM items to build order" msgstr "分配可选的BOM项目来建立订单" -#: build/serializers.py:1096 part/models.py:3895 part/models.py:4331 +#: build/serializers.py:1097 part/models.py:3895 part/models.py:4331 #: stock/api.py:745 msgid "BOM Item" msgstr "BOM项" -#: build/serializers.py:1105 templates/js/translated/index.js:130 +#: build/serializers.py:1106 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1110 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:1441 part/templates/part/part_base.html:210 -#: templates/js/translated/bom.js:1202 templates/js/translated/build.js:2614 -#: templates/js/translated/part.js:709 templates/js/translated/part.js:2148 +#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:798 part/serializers.py:1460 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1115 part/serializers.py:1443 +#: build/serializers.py:1116 part/serializers.py:1462 #: templates/js/translated/build.js:2618 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "正在生产" -#: build/serializers.py:1120 part/bom.py:172 part/serializers.py:1454 +#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1473 #: part/templates/part/part_base.html:192 #: templates/js/translated/sales_order.js:1893 msgid "Available Stock" msgstr "可用库存" -#: build/tasks.py:149 +#: build/tasks.py:171 msgid "Stock required for build order" msgstr "生产订单所需的库存" -#: build/tasks.py:166 +#: build/tasks.py:188 msgid "Overdue Build Order" msgstr "超时构建顺序" -#: build/tasks.py:171 +#: build/tasks.py:193 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "生成订单 {bo} 现在已过期" @@ -2069,29 +2070,35 @@ msgstr "订单所需部件" msgid "Order Parts" msgstr "订购商品" -#: build/templates/build/detail.html:210 +#: build/templates/build/detail.html:205 +#, fuzzy +#| msgid "Untracked stock has been fully allocated for this Build Order" +msgid "Available stock has been filtered based on specified source location for this build order" +msgstr "未跟踪的库存已完全分配给此生产订单" + +#: build/templates/build/detail.html:215 msgid "Incomplete Build Outputs" msgstr "未完成的生产产出" -#: build/templates/build/detail.html:214 +#: build/templates/build/detail.html:219 msgid "Create new build output" msgstr "创建新构建输出" -#: build/templates/build/detail.html:215 +#: build/templates/build/detail.html:220 msgid "New Build Output" msgstr "新建构建输出" -#: build/templates/build/detail.html:232 build/templates/build/sidebar.html:15 +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 #, fuzzy #| msgid "Minimum Stock" msgid "Consumed Stock" msgstr "最低库存" -#: build/templates/build/detail.html:244 +#: build/templates/build/detail.html:249 msgid "Completed Build Outputs" msgstr "已完成构建输出" -#: build/templates/build/detail.html:256 build/templates/build/sidebar.html:19 +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 #: company/templates/company/detail.html:229 #: company/templates/company/manufacturer_part.html:141 #: company/templates/company/manufacturer_part_sidebar.html:9 @@ -2107,15 +2114,15 @@ msgstr "已完成构建输出" msgid "Attachments" msgstr "附件" -#: build/templates/build/detail.html:271 +#: build/templates/build/detail.html:276 msgid "Build Notes" msgstr "生产备注" -#: build/templates/build/detail.html:426 +#: build/templates/build/detail.html:434 msgid "Allocation Complete" msgstr "分配完成" -#: build/templates/build/detail.html:427 +#: build/templates/build/detail.html:435 #, fuzzy #| msgid "Required stock has not been fully allocated" msgid "All lines have been fully allocated" @@ -2534,7 +2541,7 @@ msgid "Parts are templates by default" msgstr "" #: common/models.py:1456 part/admin.py:91 part/admin.py:431 part/models.py:1015 -#: templates/js/translated/bom.js:1633 +#: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" @@ -3625,7 +3632,7 @@ msgstr "" msgid "Price break quantity" msgstr "" -#: common/models.py:2440 company/serializers.py:484 order/admin.py:42 +#: common/models.py:2440 company/serializers.py:486 order/admin.py:42 #: order/models.py:1321 order/models.py:2226 #: templates/js/translated/company.js:1813 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 @@ -4146,7 +4153,7 @@ msgstr "选择商品" #: company/models.py:495 company/templates/company/company_base.html:76 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:497 +#: company/templates/company/supplier_part.html:145 part/serializers.py:505 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:506 #: templates/js/translated/company.js:1108 @@ -4161,7 +4168,7 @@ msgid "Select manufacturer" msgstr "选择制造商" #: company/models.py:502 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:507 +#: company/templates/company/supplier_part.html:153 part/serializers.py:515 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1107 #: templates/js/translated/company.js:1302 @@ -4235,7 +4242,7 @@ msgstr "" #: company/models.py:795 company/templates/company/company_base.html:81 #: company/templates/company/supplier_part.html:129 order/models.py:453 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:481 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:489 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4252,7 +4259,7 @@ msgstr "供应商" msgid "Select supplier" msgstr "选择供应商" -#: company/models.py:802 part/serializers.py:492 +#: company/models.py:802 part/serializers.py:500 msgid "Supplier stock keeping unit" msgstr "" @@ -4288,7 +4295,7 @@ msgid "Minimum charge (e.g. stocking fee)" msgstr "最低收费(例如库存费)" #: company/models.py:851 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1317 +#: stock/admin.py:224 stock/models.py:785 stock/serializers.py:1323 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1636 #: templates/js/translated/stock.js:2387 @@ -4333,7 +4340,7 @@ msgstr "" msgid "Date of last update of availability data" msgstr "" -#: company/serializers.py:153 +#: company/serializers.py:155 msgid "Default currency used for this supplier" msgstr "该公司使用的默认货币" @@ -4396,7 +4403,7 @@ msgstr "" #: company/templates/company/company_base.html:86 order/models.py:898 #: order/models.py:1993 order/templates/order/return_order_base.html:131 #: order/templates/order/sales_order_base.html:144 stock/models.py:807 -#: stock/models.py:808 stock/serializers.py:1067 +#: stock/models.py:808 stock/serializers.py:1073 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:502 @@ -4621,8 +4628,9 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/templates/part/part_sidebar.html:33 -#: templates/InvenTree/search.html:190 templates/navbar.html:48 +#: part/admin.py:122 part/serializers.py:802 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 msgid "Suppliers" msgstr "供应商" @@ -4724,7 +4732,7 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:491 +#: part/bom.py:311 part/serializers.py:499 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 #: templates/js/translated/purchase_order.js:1851 @@ -4773,10 +4781,12 @@ msgstr "" msgid "Update Part Availability" msgstr "" -#: company/templates/company/supplier_part_sidebar.html:5 part/stocktake.py:223 +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:801 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:760 stock/templates/stock/location.html:170 +#: stock/serializers.py:760 stock/serializers.py:924 +#: stock/templates/stock/location.html:170 #: stock/templates/stock/location.html:184 #: stock/templates/stock/location.html:196 #: stock/templates/stock/location_sidebar.html:7 @@ -4838,7 +4848,7 @@ msgid "Label template file" msgstr "标签模板文件" #: label/models.py:143 part/models.py:3484 report/models.py:322 -#: templates/js/translated/part.js:2891 +#: templates/js/translated/part.js:2900 #: templates/js/translated/table_filters.js:481 msgid "Enabled" msgstr "已启用" @@ -6013,7 +6023,7 @@ msgid "Pending Shipments" msgstr "" #: order/templates/order/sales_order_detail.html:71 -#: templates/js/translated/bom.js:1271 templates/js/translated/filters.js:296 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" msgstr "" @@ -6143,10 +6153,10 @@ msgstr "" msgid "Category Path" msgstr "类别路径" -#: part/admin.py:323 part/models.py:390 part/serializers.py:259 -#: part/serializers.py:373 part/templates/part/cat_link.html:3 -#: part/templates/part/category.html:23 part/templates/part/category.html:141 -#: part/templates/part/category.html:161 +#: part/admin.py:323 part/models.py:390 part/serializers.py:112 +#: part/serializers.py:265 part/serializers.py:381 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 @@ -6171,13 +6181,13 @@ msgstr "" msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1220 +#: part/admin.py:421 part/serializers.py:1238 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1235 +#: part/admin.py:426 part/serializers.py:1253 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" @@ -6264,7 +6274,7 @@ msgid "This option must be selected" msgstr "" #: part/api.py:1541 part/models.py:895 part/models.py:3385 part/models.py:3831 -#: part/serializers.py:388 part/serializers.py:1076 +#: part/serializers.py:396 part/serializers.py:1094 #: part/templates/part/part_base.html:260 stock/api.py:733 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 @@ -6272,12 +6282,17 @@ msgstr "" msgid "Category" msgstr "类别" +#: part/api.py:1828 +msgid "Uses" +msgstr "" + #: part/bom.py:170 part/models.py:100 part/models.py:938 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "默认仓储地点" -#: part/bom.py:171 templates/email/low_stock_notification.html:16 +#: part/bom.py:171 part/serializers.py:803 +#: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6300,7 +6315,8 @@ msgstr "商品类别" msgid "Default location for parts in this category" msgstr "此类别商品的默认仓储地点" -#: part/models.py:106 stock/models.py:165 templates/js/translated/stock.js:2736 +#: part/models.py:106 stock/models.py:165 templates/js/translated/part.js:2810 +#: templates/js/translated/stock.js:2736 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" @@ -6713,7 +6729,7 @@ msgstr "" msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:3464 templates/js/translated/part.js:2870 +#: part/models.py:3464 templates/js/translated/part.js:2879 msgid "Test Name" msgstr "" @@ -6741,7 +6757,7 @@ msgstr "" msgid "Is this test enabled?" msgstr "" -#: part/models.py:3489 templates/js/translated/part.js:2899 +#: part/models.py:3489 templates/js/translated/part.js:2908 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" @@ -6750,7 +6766,7 @@ msgstr "" msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3495 templates/js/translated/part.js:2907 +#: part/models.py:3495 templates/js/translated/part.js:2916 msgid "Requires Value" msgstr "" @@ -6758,7 +6774,7 @@ msgstr "" msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3501 templates/js/translated/part.js:2914 +#: part/models.py:3501 templates/js/translated/part.js:2923 msgid "Requires Attachment" msgstr "" @@ -6986,327 +7002,345 @@ msgstr "" msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:128 part/templates/part/category.html:122 -#: part/templates/part/category.html:207 +#: part/serializers.py:114 part/serializers.py:134 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 #: part/templates/part/category_sidebar.html:7 msgid "Subcategories" msgstr "子类别" -#: part/serializers.py:172 +#: part/serializers.py:178 msgid "Results" msgstr "" -#: part/serializers.py:173 +#: part/serializers.py:179 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:197 part/serializers.py:215 stock/serializers.py:384 +#: part/serializers.py:203 part/serializers.py:221 stock/serializers.py:384 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:260 +#: part/serializers.py:266 msgid "Number of parts using this template" msgstr "" -#: part/serializers.py:379 +#: part/serializers.py:387 #, fuzzy #| msgid "Rejected" msgid "No parts selected" msgstr "已拒绝" -#: part/serializers.py:389 +#: part/serializers.py:397 #, fuzzy #| msgid "Set category" msgid "Select category" msgstr "设置类别" -#: part/serializers.py:419 +#: part/serializers.py:427 msgid "Original Part" msgstr "" -#: part/serializers.py:420 +#: part/serializers.py:428 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:425 +#: part/serializers.py:433 msgid "Copy Image" msgstr "" -#: part/serializers.py:426 +#: part/serializers.py:434 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:432 part/templates/part/detail.html:277 +#: part/serializers.py:440 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:433 +#: part/serializers.py:441 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:439 +#: part/serializers.py:447 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:440 +#: part/serializers.py:448 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:454 #, fuzzy #| msgid "Company Notes" msgid "Copy Notes" msgstr "公司备注" -#: part/serializers.py:447 +#: part/serializers.py:455 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:460 +#: part/serializers.py:468 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:470 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:469 +#: part/serializers.py:477 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:470 +#: part/serializers.py:478 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:482 +#: part/serializers.py:490 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:498 +#: part/serializers.py:506 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:508 +#: part/serializers.py:516 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:523 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:524 +#: part/serializers.py:532 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:535 +#: part/serializers.py:543 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:550 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:815 part/templates/part/copy_part.html:9 +#: part/serializers.py:804 +#, fuzzy +#| msgid "External Link" +msgid "External Stock" +msgstr "外部链接" + +#: part/serializers.py:806 +#, fuzzy +#| msgid "Unallocate Stock" +msgid "Unallocated Stock" +msgstr "未分配库存" + +#: part/serializers.py:808 +#, fuzzy +#| msgid "Part Stock" +msgid "Variant Stock" +msgstr "商品库存" + +#: part/serializers.py:833 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "复制部件" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:822 templates/js/translated/part.js:102 +#: part/serializers.py:840 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:847 msgid "Supplier Information" msgstr "" -#: part/serializers.py:830 +#: part/serializers.py:848 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:838 +#: part/serializers.py:856 msgid "Copy Category Parameters" msgstr "复制类别参数" -#: part/serializers.py:839 +#: part/serializers.py:857 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:844 +#: part/serializers.py:862 #, fuzzy #| msgid "Existing barcode found" msgid "Existing Image" msgstr "发现现有条码" -#: part/serializers.py:845 +#: part/serializers.py:863 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:862 +#: part/serializers.py:880 #, fuzzy #| msgid "Part image not found" msgid "Image file does not exist" msgstr "未找到商品图像" -#: part/serializers.py:1068 +#: part/serializers.py:1086 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1078 +#: part/serializers.py:1096 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1088 +#: part/serializers.py:1106 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1094 +#: part/serializers.py:1112 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1095 +#: part/serializers.py:1113 #, fuzzy #| msgid "Exclude stock items from this selected location" msgid "Exclude stock items in external locations" msgstr "从该选定的仓储地点排除库存项" -#: part/serializers.py:1100 +#: part/serializers.py:1118 msgid "Generate Report" msgstr "" -#: part/serializers.py:1101 +#: part/serializers.py:1119 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1106 +#: part/serializers.py:1124 msgid "Update Parts" msgstr "" -#: part/serializers.py:1107 +#: part/serializers.py:1125 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1221 +#: part/serializers.py:1239 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1228 +#: part/serializers.py:1246 #, fuzzy #| msgid "Uses default currency" msgid "Minimum price currency" msgstr "使用默认货币" -#: part/serializers.py:1236 +#: part/serializers.py:1254 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1243 +#: part/serializers.py:1261 #, fuzzy #| msgid "Uses default currency" msgid "Maximum price currency" msgstr "使用默认货币" -#: part/serializers.py:1272 +#: part/serializers.py:1290 msgid "Update" msgstr "" -#: part/serializers.py:1273 +#: part/serializers.py:1291 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1296 +#: part/serializers.py:1314 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1303 +#: part/serializers.py:1321 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1306 +#: part/serializers.py:1324 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1632 +#: part/serializers.py:1660 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1640 +#: part/serializers.py:1668 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1641 +#: part/serializers.py:1669 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1646 +#: part/serializers.py:1674 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1647 +#: part/serializers.py:1675 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1652 +#: part/serializers.py:1680 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1653 +#: part/serializers.py:1681 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1658 +#: part/serializers.py:1686 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1659 +#: part/serializers.py:1687 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1693 +#: part/serializers.py:1721 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1694 +#: part/serializers.py:1722 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1724 +#: part/serializers.py:1752 msgid "No part column specified" msgstr "" -#: part/serializers.py:1768 +#: part/serializers.py:1796 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1771 +#: part/serializers.py:1799 msgid "No matching part found" msgstr "" -#: part/serializers.py:1774 +#: part/serializers.py:1802 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1783 +#: part/serializers.py:1811 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1791 +#: part/serializers.py:1819 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1812 +#: part/serializers.py:1840 msgid "At least one BOM item is required" msgstr "" @@ -7542,7 +7576,7 @@ msgid "Validate BOM" msgstr "" #: part/templates/part/detail.html:283 part/templates/part/detail.html:284 -#: templates/js/translated/bom.js:1314 templates/js/translated/bom.js:1315 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 msgid "Add BOM Item" msgstr "" @@ -7728,7 +7762,7 @@ msgstr "" msgid "Allocated to Sales Orders" msgstr "" -#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1213 +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 msgid "Can Build" msgstr "" @@ -9243,7 +9277,7 @@ msgstr "" msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:786 stock/serializers.py:1318 +#: stock/models.py:786 stock/serializers.py:1324 msgid "Packaging this stock item is stored in" msgstr "" @@ -9255,7 +9289,7 @@ msgstr "" msgid "Serial number for this item" msgstr "" -#: stock/models.py:830 stock/serializers.py:1301 +#: stock/models.py:830 stock/serializers.py:1307 msgid "Batch code for this stock item" msgstr "" @@ -9371,7 +9405,7 @@ msgstr "" msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1639 stock/serializers.py:1207 +#: stock/models.py:1639 stock/serializers.py:1213 msgid "Duplicate stock items" msgstr "" @@ -9456,7 +9490,7 @@ msgstr "" msgid "Enter serial numbers for new items" msgstr "输入新项目的序列号" -#: stock/serializers.py:473 stock/serializers.py:1164 stock/serializers.py:1420 +#: stock/serializers.py:473 stock/serializers.py:1170 stock/serializers.py:1426 msgid "Destination stock location" msgstr "目标库存位置" @@ -9539,81 +9573,82 @@ msgstr "在BOM中找不到选定的库存项" msgid "No stock items selected" msgstr "库存项已创建" -#: stock/serializers.py:863 stock/templates/stock/location.html:165 +#: stock/serializers.py:863 stock/serializers.py:926 +#: stock/templates/stock/location.html:165 #: stock/templates/stock/location.html:213 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1036 +#: stock/serializers.py:1042 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1040 +#: stock/serializers.py:1046 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1044 +#: stock/serializers.py:1050 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1068 +#: stock/serializers.py:1074 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1074 +#: stock/serializers.py:1080 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1082 +#: stock/serializers.py:1088 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1092 stock/serializers.py:1346 +#: stock/serializers.py:1098 stock/serializers.py:1352 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1171 +#: stock/serializers.py:1177 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1176 +#: stock/serializers.py:1182 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1177 +#: stock/serializers.py:1183 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1182 +#: stock/serializers.py:1188 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1183 +#: stock/serializers.py:1189 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1193 +#: stock/serializers.py:1199 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1260 +#: stock/serializers.py:1266 #, fuzzy #| msgid "Change" msgid "No Change" msgstr "更改" -#: stock/serializers.py:1289 +#: stock/serializers.py:1295 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1308 +#: stock/serializers.py:1314 #, fuzzy #| msgid "Stock item created" msgid "Stock item status code" msgstr "库存项已创建" -#: stock/serializers.py:1336 +#: stock/serializers.py:1342 msgid "Stock transaction notes" msgstr "" @@ -11204,7 +11239,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1668 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 msgid "Required Quantity" msgstr "" @@ -11218,7 +11253,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3209 +#: templates/js/translated/part.js:3218 msgid "Minimum Quantity" msgstr "" @@ -11601,62 +11636,68 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1182 templates/js/translated/build.js:2596 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#, fuzzy +#| msgid "External Link" +msgid "External stock" +msgstr "外部链接" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 #: templates/js/translated/sales_order.js:1910 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1187 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1189 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 #: templates/js/translated/part.js:1256 #: templates/js/translated/sales_order.js:1907 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1191 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1219 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 msgid "Consumable item" msgstr "" -#: templates/js/translated/bom.js:1279 +#: templates/js/translated/bom.js:1285 msgid "Validate BOM Item" msgstr "" -#: templates/js/translated/bom.js:1281 +#: templates/js/translated/bom.js:1287 msgid "This line has been validated" msgstr "" -#: templates/js/translated/bom.js:1283 +#: templates/js/translated/bom.js:1289 msgid "Edit substitute parts" msgstr "" -#: templates/js/translated/bom.js:1285 templates/js/translated/bom.js:1480 +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 msgid "Edit BOM Item" msgstr "" -#: templates/js/translated/bom.js:1287 +#: templates/js/translated/bom.js:1293 msgid "Delete BOM Item" msgstr "" -#: templates/js/translated/bom.js:1307 +#: templates/js/translated/bom.js:1313 msgid "View BOM" msgstr "" -#: templates/js/translated/bom.js:1391 +#: templates/js/translated/bom.js:1397 msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1651 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 msgid "Required Part" msgstr "" -#: templates/js/translated/bom.js:1677 +#: templates/js/translated/bom.js:1683 msgid "Inherited from parent BOM" msgstr "" @@ -12043,33 +12084,33 @@ msgstr "数量" msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2643 +#: templates/js/translated/build.js:2647 #, fuzzy #| msgid "Minimum Stock" msgid "Consumable Item" msgstr "最低库存" -#: templates/js/translated/build.js:2648 +#: templates/js/translated/build.js:2652 #, fuzzy #| msgid "Stock Item" msgid "Tracked item" msgstr "库存项" -#: templates/js/translated/build.js:2655 +#: templates/js/translated/build.js:2659 #: templates/js/translated/sales_order.js:2016 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2660 templates/js/translated/stock.js:1829 +#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1829 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2664 +#: templates/js/translated/build.js:2668 #: templates/js/translated/sales_order.js:2010 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2668 +#: templates/js/translated/build.js:2672 #, fuzzy #| msgid "Confirm stock allocation" msgid "Remove stock allocation" @@ -12983,64 +13024,64 @@ msgstr "" msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2855 +#: templates/js/translated/part.js:2864 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2877 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2927 templates/js/translated/stock.js:1446 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1446 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2928 templates/js/translated/stock.js:1447 +#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1447 #: templates/js/translated/stock.js:1692 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2932 +#: templates/js/translated/part.js:2941 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2948 +#: templates/js/translated/part.js:2957 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2962 +#: templates/js/translated/part.js:2971 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3041 templates/js/translated/part.js:3042 +#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3044 +#: templates/js/translated/part.js:3053 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3050 +#: templates/js/translated/part.js:3059 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3100 +#: templates/js/translated/part.js:3109 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3106 +#: templates/js/translated/part.js:3115 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3202 +#: templates/js/translated/part.js:3211 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3227 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3263 +#: templates/js/translated/part.js:3272 msgid "Minimum Stock Level" msgstr "" @@ -14883,9 +14924,6 @@ msgstr "删除项目权限" #~ msgid "Build to allocate parts" #~ msgstr "生产以分配部件" -#~ msgid "Untracked stock has been fully allocated for this Build Order" -#~ msgstr "未跟踪的库存已完全分配给此生产订单" - #~ msgid "Untracked stock has not been fully allocated for this Build Order" #~ msgstr "未跟踪的库存尚未完全分配给此生产订单" diff --git a/InvenTree/machine/api.py b/InvenTree/machine/api.py index 9448d2ea99..3bd2853467 100644 --- a/InvenTree/machine/api.py +++ b/InvenTree/machine/api.py @@ -144,7 +144,9 @@ class MachineRestart(APIView): permission_classes = [permissions.IsAuthenticated] - @extend_schema(responses={200: MachineSerializers.MachineRestartSerializer()}) + @extend_schema( + request=None, responses={200: MachineSerializers.MachineRestartSerializer()} + ) def post(self, request, pk): """Restart machine by pk.""" machine = get_machine(pk) diff --git a/InvenTree/order/serializers.py b/InvenTree/order/serializers.py index 3405e7b8b8..90f9aa0a0d 100644 --- a/InvenTree/order/serializers.py +++ b/InvenTree/order/serializers.py @@ -5,7 +5,16 @@ from decimal import Decimal from django.core.exceptions import ValidationError as DjangoValidationError from django.db import models, transaction -from django.db.models import BooleanField, Case, ExpressionWrapper, F, Q, Value, When +from django.db.models import ( + BooleanField, + Case, + ExpressionWrapper, + F, + Prefetch, + Q, + Value, + When, +) from django.utils.translation import gettext_lazy as _ from rest_framework import serializers @@ -14,6 +23,8 @@ from sql_util.utils import SubqueryCount import order.models import part.filters +import part.filters as part_filters +import part.models as part_models import stock.models import stock.serializers from common.serializers import ProjectCodeSerializer @@ -375,6 +386,17 @@ class PurchaseOrderLineItemSerializer(InvenTreeModelSerializer): - "total_price" = purchase_price * quantity - "overdue" status (boolean field) """ + queryset = queryset.prefetch_related( + Prefetch( + 'part__part', + queryset=part_models.Part.objects.annotate( + category_default_location=part_filters.annotate_default_location( + 'category__' + ) + ).prefetch_related(None), + ) + ) + queryset = queryset.annotate( total_price=ExpressionWrapper( F('purchase_price') * F('quantity'), output_field=models.DecimalField() diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py index 68d606a551..7b7ec1c7e5 100644 --- a/InvenTree/part/api.py +++ b/InvenTree/part/api.py @@ -1767,6 +1767,7 @@ class BomFilter(rest_filters.FilterSet): part_active = rest_filters.BooleanFilter( label='Master part is active', field_name='part__active' ) + part_trackable = rest_filters.BooleanFilter( label='Master part is trackable', field_name='part__trackable' ) @@ -1775,6 +1776,7 @@ class BomFilter(rest_filters.FilterSet): sub_part_trackable = rest_filters.BooleanFilter( label='Sub part is trackable', field_name='sub_part__trackable' ) + sub_part_assembly = rest_filters.BooleanFilter( label='Sub part is an assembly', field_name='sub_part__assembly' ) @@ -1814,6 +1816,22 @@ class BomFilter(rest_filters.FilterSet): return queryset.filter(q_a | q_b).distinct() + part = rest_filters.ModelChoiceFilter( + queryset=Part.objects.all(), method='filter_part', label=_('Part') + ) + + def filter_part(self, queryset, name, part): + """Filter the queryset based on the specified part.""" + return queryset.filter(part.get_bom_item_filter()) + + uses = rest_filters.ModelChoiceFilter( + queryset=Part.objects.all(), method='filter_uses', label=_('Uses') + ) + + def filter_uses(self, queryset, name, part): + """Filter the queryset based on the specified part.""" + return queryset.filter(part.get_used_in_bom_item_filter()) + class BomMixin: """Mixin class for BomItem API endpoints.""" @@ -1889,62 +1907,6 @@ class BomList(BomMixin, ListCreateDestroyAPIView): return JsonResponse(data, safe=False) return Response(data) - def filter_queryset(self, queryset): - """Custom query filtering for the BomItem list API.""" - queryset = super().filter_queryset(queryset) - - params = self.request.query_params - - # Filter by part? - part = params.get('part', None) - - if part is not None: - """ - If we are filtering by "part", there are two cases to consider: - - a) Bom items which are defined for *this* part - b) Inherited parts which are defined for a *parent* part - - So we need to construct two queries! - """ - - # First, check that the part is actually valid! - try: - part = Part.objects.get(pk=part) - - queryset = queryset.filter(part.get_bom_item_filter()) - - except (ValueError, Part.DoesNotExist): - pass - - """ - Filter by 'uses'? - - Here we pass a part ID and return BOM items for any assemblies which "use" (or "require") that part. - - There are multiple ways that an assembly can "use" a sub-part: - - A) Directly specifying the sub_part in a BomItem field - B) Specifying a "template" part with inherited=True - C) Allowing variant parts to be substituted - D) Allowing direct substitute parts to be specified - - - BOM items which are "inherited" by parts which are variants of the master BomItem - """ - uses = params.get('uses', None) - - if uses is not None: - try: - # Extract the part we are interested in - uses_part = Part.objects.get(pk=uses) - - queryset = queryset.filter(uses_part.get_used_in_bom_item_filter()) - - except (ValueError, Part.DoesNotExist): - pass - - return queryset - filter_backends = SEARCH_ORDER_FILTER_ALIAS search_fields = [ diff --git a/InvenTree/part/filters.py b/InvenTree/part/filters.py index f7303cc190..4d247529b9 100644 --- a/InvenTree/part/filters.py +++ b/InvenTree/part/filters.py @@ -107,7 +107,7 @@ def annotate_on_order_quantity(reference: str = ''): ) -def annotate_total_stock(reference: str = ''): +def annotate_total_stock(reference: str = '', filter: Q = None): """Annotate 'total stock' quantity against a queryset. - This function calculates the 'total stock' for a given part @@ -121,6 +121,9 @@ def annotate_total_stock(reference: str = ''): # Stock filter only returns 'in stock' items stock_filter = stock.models.StockItem.IN_STOCK_FILTER + if filter is not None: + stock_filter &= filter + return Coalesce( SubquerySum(f'{reference}stock_items__quantity', filter=stock_filter), Decimal(0), @@ -216,9 +219,7 @@ def annotate_sales_order_allocations(reference: str = ''): ) -def variant_stock_query( - reference: str = '', filter: Q = stock.models.StockItem.IN_STOCK_FILTER -): +def variant_stock_query(reference: str = '', filter: Q = None): """Create a queryset to retrieve all stock items for variant parts under the specified part. - Useful for annotating a queryset with aggregated information about variant parts @@ -227,11 +228,16 @@ def variant_stock_query( reference: The relationship reference of the part from the current model filter: Q object which defines how to filter the returned StockItem instances """ + stock_filter = stock.models.StockItem.IN_STOCK_FILTER + + if filter: + stock_filter &= filter + return stock.models.StockItem.objects.filter( part__tree_id=OuterRef(f'{reference}tree_id'), part__lft__gt=OuterRef(f'{reference}lft'), part__rght__lt=OuterRef(f'{reference}rght'), - ).filter(filter) + ).filter(stock_filter) def annotate_variant_quantity(subquery: Q, reference: str = 'quantity'): @@ -281,6 +287,32 @@ def annotate_category_parts(): ) +def annotate_default_location(reference=''): + """Construct a queryset that finds the closest default location in the part's category tree. + + If the part's category has its own default_location, this is returned. + If not, the category tree is traversed until a value is found. + """ + subquery = part.models.PartCategory.objects.filter( + tree_id=OuterRef(f'{reference}tree_id'), + lft__lt=OuterRef(f'{reference}lft'), + rght__gt=OuterRef(f'{reference}rght'), + level__lte=OuterRef(f'{reference}level'), + parent__isnull=False, + ) + + return Coalesce( + F(f'{reference}default_location'), + Subquery( + subquery.order_by('-level') + .filter(default_location__isnull=False) + .values('default_location') + ), + Value(None), + output_field=IntegerField(), + ) + + def annotate_sub_categories(): """Construct a queryset annotation which returns the number of subcategories for each provided category.""" subquery = part.models.PartCategory.objects.filter( diff --git a/InvenTree/part/migrations/0109_auto_20230517_1048.py b/InvenTree/part/migrations/0109_auto_20230517_1048.py index 01e3ad0026..d2ef071050 100644 --- a/InvenTree/part/migrations/0109_auto_20230517_1048.py +++ b/InvenTree/part/migrations/0109_auto_20230517_1048.py @@ -138,6 +138,8 @@ def update_parameter_values(apps, schema_editor): class Migration(migrations.Migration): + atomic = False + dependencies = [ ('part', '0108_auto_20230516_1334'), ] diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py index c962ba3d81..b20eff7453 100644 --- a/InvenTree/part/models.py +++ b/InvenTree/part/models.py @@ -3428,6 +3428,13 @@ class PartTestTemplate(InvenTree.models.InvenTreeMetadataModel): self.key = helpers.generateTestKey(self.test_name) + if len(self.key) == 0: + raise ValidationError({ + 'test_name': _( + 'Invalid template name - must include at least one alphanumeric character' + ) + }) + self.validate_unique() super().clean() @@ -3445,7 +3452,9 @@ class PartTestTemplate(InvenTree.models.InvenTreeMetadataModel): if tests.exists(): raise ValidationError({ - 'test_name': _('Test with this name already exists for this part') + 'test_name': _( + 'Test template with the same key already exists for part' + ) }) super().validate_unique(exclude) diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index 175c1b5036..f02ade9ed9 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -74,12 +74,14 @@ class CategorySerializer(InvenTree.serializers.InvenTreeModelSerializer): 'level', 'parent', 'part_count', + 'subcategories', 'pathstring', 'path', 'starred', 'url', 'structural', 'icon', + 'parent_default_location', ] def __init__(self, *args, **kwargs): @@ -99,13 +101,22 @@ class CategorySerializer(InvenTree.serializers.InvenTreeModelSerializer): def annotate_queryset(queryset): """Annotate extra information to the queryset.""" # Annotate the number of 'parts' which exist in each category (including subcategories!) - queryset = queryset.annotate(part_count=part.filters.annotate_category_parts()) + queryset = queryset.annotate( + part_count=part.filters.annotate_category_parts(), + subcategories=part.filters.annotate_sub_categories(), + ) + + queryset = queryset.annotate( + parent_default_location=part.filters.annotate_default_location('parent__') + ) return queryset url = serializers.CharField(source='get_absolute_url', read_only=True) - part_count = serializers.IntegerField(read_only=True) + part_count = serializers.IntegerField(read_only=True, label=_('Parts')) + + subcategories = serializers.IntegerField(read_only=True, label=_('Subcategories')) level = serializers.IntegerField(read_only=True) @@ -115,6 +126,8 @@ class CategorySerializer(InvenTree.serializers.InvenTreeModelSerializer): child=serializers.DictField(), source='get_path', read_only=True ) + parent_default_location = serializers.IntegerField(read_only=True) + class CategoryTree(InvenTree.serializers.InvenTreeModelSerializer): """Serializer for PartCategory tree.""" @@ -277,11 +290,13 @@ class PartBriefSerializer(InvenTree.serializers.InvenTreeModelSerializer): 'pk', 'IPN', 'barcode_hash', + 'category_default_location', 'default_location', 'name', 'revision', 'full_name', 'description', + 'image', 'thumbnail', 'active', 'assembly', @@ -307,6 +322,9 @@ class PartBriefSerializer(InvenTree.serializers.InvenTreeModelSerializer): self.fields.pop('pricing_min') self.fields.pop('pricing_max') + category_default_location = serializers.IntegerField(read_only=True) + + image = InvenTree.serializers.InvenTreeImageSerializerField(read_only=True) thumbnail = serializers.CharField(source='get_thumbnail_url', read_only=True) # Pricing fields @@ -603,6 +621,7 @@ class PartSerializer( 'allocated_to_build_orders', 'allocated_to_sales_orders', 'building', + 'category_default_location', 'in_stock', 'ordering', 'required_for_build_orders', @@ -610,6 +629,7 @@ class PartSerializer( 'stock_item_count', 'suppliers', 'total_in_stock', + 'external_stock', 'unallocated_stock', 'variant_stock', # Fields only used for Part creation @@ -734,6 +754,12 @@ class PartSerializer( ) ) + queryset = queryset.annotate( + external_stock=part.filters.annotate_total_stock( + filter=Q(location__external=True) + ) + ) + # Annotate with the total 'available stock' quantity # This is the current stock, minus any allocations queryset = queryset.annotate( @@ -751,6 +777,12 @@ class PartSerializer( required_for_sales_orders=part.filters.annotate_sales_order_requirements(), ) + queryset = queryset.annotate( + category_default_location=part.filters.annotate_default_location( + 'category__' + ) + ) + return queryset def get_starred(self, part) -> bool: @@ -780,14 +812,18 @@ class PartSerializer( allocated_to_sales_orders = serializers.FloatField(read_only=True) building = serializers.FloatField(read_only=True) in_stock = serializers.FloatField(read_only=True) - ordering = serializers.FloatField(read_only=True) + ordering = serializers.FloatField(read_only=True, label=_('On Order')) required_for_build_orders = serializers.IntegerField(read_only=True) required_for_sales_orders = serializers.IntegerField(read_only=True) - stock_item_count = serializers.IntegerField(read_only=True) - suppliers = serializers.IntegerField(read_only=True) - total_in_stock = serializers.FloatField(read_only=True) - unallocated_stock = serializers.FloatField(read_only=True) - variant_stock = serializers.FloatField(read_only=True) + stock_item_count = serializers.IntegerField(read_only=True, label=_('Stock Items')) + suppliers = serializers.IntegerField(read_only=True, label=_('Suppliers')) + total_in_stock = serializers.FloatField(read_only=True, label=_('Total Stock')) + external_stock = serializers.FloatField(read_only=True, label=_('External Stock')) + unallocated_stock = serializers.FloatField( + read_only=True, label=_('Unallocated Stock') + ) + category_default_location = serializers.IntegerField(read_only=True) + variant_stock = serializers.FloatField(read_only=True, label=_('Variant Stock')) minimum_stock = serializers.FloatField() @@ -1387,6 +1423,7 @@ class BomItemSerializer(InvenTree.serializers.InvenTreeModelSerializer): 'available_stock', 'available_substitute_stock', 'available_variant_stock', + 'external_stock', # Annotated field describing quantity on order 'on_order', # Annotated field describing quantity being built @@ -1456,6 +1493,8 @@ class BomItemSerializer(InvenTree.serializers.InvenTreeModelSerializer): available_substitute_stock = serializers.FloatField(read_only=True) available_variant_stock = serializers.FloatField(read_only=True) + external_stock = serializers.FloatField(read_only=True) + @staticmethod def setup_eager_loading(queryset): """Prefetch against the provided queryset to speed up database access.""" @@ -1534,6 +1573,13 @@ class BomItemSerializer(InvenTree.serializers.InvenTreeModelSerializer): ) ) + # Calculate 'external_stock' + queryset = queryset.annotate( + external_stock=part.filters.annotate_total_stock( + reference=ref, filter=Q(location__external=True) + ) + ) + ref = 'substitutes__part__' # Extract similar information for any 'substitute' parts diff --git a/InvenTree/part/test_part.py b/InvenTree/part/test_part.py index 98f9dc5410..57f91af817 100644 --- a/InvenTree/part/test_part.py +++ b/InvenTree/part/test_part.py @@ -6,6 +6,7 @@ from django.conf import settings from django.core.cache import cache from django.core.exceptions import ValidationError from django.test import TestCase +from django.test.utils import override_settings from allauth.account.models import EmailAddress @@ -63,6 +64,7 @@ class TemplateTagTest(InvenTreeTestCase): """Test the 'instance name' setting.""" self.assertEqual(inventree_extras.inventree_instance_name(), 'InvenTree') + @override_settings(SITE_URL=None) def test_inventree_base_url(self): """Test that the base URL tag returns correctly.""" self.assertEqual(inventree_extras.inventree_base_url(), '') @@ -431,6 +433,29 @@ class TestTemplateTest(TestCase): self.assertEqual(variant.getTestTemplates().count(), n + 1) + def test_key_generation(self): + """Test the key generation method.""" + variant = Part.objects.get(pk=10004) + + invalid_names = ['', '+', '+++++++', ' ', '<>$&&&'] + + for name in invalid_names: + template = PartTestTemplate(part=variant, test_name=name) + with self.assertRaises(ValidationError): + template.clean() + + valid_names = [ + 'Собранный щит', + '!! 123 Собранный щит <><><> $$$$$ !!!', + '----hello world----', + 'Olá Mundo', + '我不懂中文', + ] + + for name in valid_names: + template = PartTestTemplate(part=variant, test_name=name) + template.clean() + class PartSettingsTest(InvenTreeTestCase): """Tests to ensure that the user-configurable default values work as expected. diff --git a/InvenTree/plugin/apps.py b/InvenTree/plugin/apps.py index affc62587d..8c037ba114 100644 --- a/InvenTree/plugin/apps.py +++ b/InvenTree/plugin/apps.py @@ -10,7 +10,7 @@ from django.apps import AppConfig from maintenance_mode.core import set_maintenance_mode -from InvenTree.ready import canAppAccessDatabase, isInMainThread +from InvenTree.ready import canAppAccessDatabase, isInMainThread, isInWorkerThread from plugin import registry logger = logging.getLogger('inventree') @@ -24,7 +24,8 @@ class PluginAppConfig(AppConfig): def ready(self): """The ready method is extended to initialize plugins.""" # skip loading if we run in a background thread - if not isInMainThread(): + + if not isInMainThread() and not isInWorkerThread(): return if not canAppAccessDatabase( diff --git a/InvenTree/plugin/base/event/events.py b/InvenTree/plugin/base/event/events.py index 125d1b17bf..752a7a8d85 100644 --- a/InvenTree/plugin/base/event/events.py +++ b/InvenTree/plugin/base/event/events.py @@ -117,7 +117,7 @@ def allow_table_event(table_name): return False # pragma: no cover # Prevent table events when in testing mode (saves a lot of time) - if settings.TESTING: + if settings.TESTING and not settings.TESTING_TABLE_EVENTS: return False table_name = table_name.lower().strip() diff --git a/InvenTree/report/api.py b/InvenTree/report/api.py index 2b39a96e84..315c6b0159 100644 --- a/InvenTree/report/api.py +++ b/InvenTree/report/api.py @@ -17,31 +17,14 @@ import common.models import InvenTree.helpers import order.models import part.models +import report.models +import report.serializers from InvenTree.api import MetadataView from InvenTree.exceptions import log_error from InvenTree.filters import InvenTreeSearchFilter from InvenTree.mixins import ListCreateAPI, RetrieveAPI, RetrieveUpdateDestroyAPI from stock.models import StockItem, StockItemAttachment, StockLocation -from .models import ( - BillOfMaterialsReport, - BuildReport, - PurchaseOrderReport, - ReturnOrderReport, - SalesOrderReport, - StockLocationReport, - TestReport, -) -from .serializers import ( - BOMReportSerializer, - BuildReportSerializer, - PurchaseOrderReportSerializer, - ReturnOrderReportSerializer, - SalesOrderReportSerializer, - StockLocationReportSerializer, - TestReportSerializer, -) - class ReportListView(ListCreateAPI): """Generic API class for report templates.""" @@ -264,7 +247,12 @@ class ReportPrintMixin: except Exception as exc: # Log the exception to the database - log_error(request.path) + if InvenTree.helpers.str2bool( + common.models.InvenTreeSetting.get_setting( + 'REPORT_LOG_ERRORS', cache=False + ) + ): + log_error(request.path) # Re-throw the exception to the client as a DRF exception raise ValidationError({ @@ -287,8 +275,8 @@ class StockItemTestReportMixin(ReportFilterMixin): ITEM_MODEL = StockItem ITEM_KEY = 'item' - queryset = TestReport.objects.all() - serializer_class = TestReportSerializer + queryset = report.models.TestReport.objects.all() + serializer_class = report.serializers.TestReportSerializer class StockItemTestReportList(StockItemTestReportMixin, ReportListView): @@ -338,8 +326,8 @@ class BOMReportMixin(ReportFilterMixin): ITEM_MODEL = part.models.Part ITEM_KEY = 'part' - queryset = BillOfMaterialsReport.objects.all() - serializer_class = BOMReportSerializer + queryset = report.models.BillOfMaterialsReport.objects.all() + serializer_class = report.serializers.BOMReportSerializer class BOMReportList(BOMReportMixin, ReportListView): @@ -372,8 +360,8 @@ class BuildReportMixin(ReportFilterMixin): ITEM_MODEL = build.models.Build ITEM_KEY = 'build' - queryset = BuildReport.objects.all() - serializer_class = BuildReportSerializer + queryset = report.models.BuildReport.objects.all() + serializer_class = report.serializers.BuildReportSerializer class BuildReportList(BuildReportMixin, ReportListView): @@ -406,8 +394,8 @@ class PurchaseOrderReportMixin(ReportFilterMixin): ITEM_MODEL = order.models.PurchaseOrder ITEM_KEY = 'order' - queryset = PurchaseOrderReport.objects.all() - serializer_class = PurchaseOrderReportSerializer + queryset = report.models.PurchaseOrderReport.objects.all() + serializer_class = report.serializers.PurchaseOrderReportSerializer class PurchaseOrderReportList(PurchaseOrderReportMixin, ReportListView): @@ -434,8 +422,8 @@ class SalesOrderReportMixin(ReportFilterMixin): ITEM_MODEL = order.models.SalesOrder ITEM_KEY = 'order' - queryset = SalesOrderReport.objects.all() - serializer_class = SalesOrderReportSerializer + queryset = report.models.SalesOrderReport.objects.all() + serializer_class = report.serializers.SalesOrderReportSerializer class SalesOrderReportList(SalesOrderReportMixin, ReportListView): @@ -462,8 +450,8 @@ class ReturnOrderReportMixin(ReportFilterMixin): ITEM_MODEL = order.models.ReturnOrder ITEM_KEY = 'order' - queryset = ReturnOrderReport.objects.all() - serializer_class = ReturnOrderReportSerializer + queryset = report.models.ReturnOrderReport.objects.all() + serializer_class = report.serializers.ReturnOrderReportSerializer class ReturnOrderReportList(ReturnOrderReportMixin, ReportListView): @@ -489,8 +477,8 @@ class StockLocationReportMixin(ReportFilterMixin): ITEM_MODEL = StockLocation ITEM_KEY = 'location' - queryset = StockLocationReport.objects.all() - serializer_class = StockLocationReportSerializer + queryset = report.models.StockLocationReport.objects.all() + serializer_class = report.serializers.StockLocationReportSerializer class StockLocationReportList(StockLocationReportMixin, ReportListView): @@ -511,7 +499,57 @@ class StockLocationReportPrint(StockLocationReportMixin, ReportPrintMixin, Retri pass +class ReportSnippetList(ListCreateAPI): + """API endpoint for listing ReportSnippet objects.""" + + queryset = report.models.ReportSnippet.objects.all() + serializer_class = report.serializers.ReportSnippetSerializer + + +class ReportSnippetDetail(RetrieveUpdateDestroyAPI): + """API endpoint for a single ReportSnippet object.""" + + queryset = report.models.ReportSnippet.objects.all() + serializer_class = report.serializers.ReportSnippetSerializer + + +class ReportAssetList(ListCreateAPI): + """API endpoint for listing ReportAsset objects.""" + + queryset = report.models.ReportAsset.objects.all() + serializer_class = report.serializers.ReportAssetSerializer + + +class ReportAssetDetail(RetrieveUpdateDestroyAPI): + """API endpoint for a single ReportAsset object.""" + + queryset = report.models.ReportAsset.objects.all() + serializer_class = report.serializers.ReportAssetSerializer + + report_api_urls = [ + # Report assets + path( + 'asset/', + include([ + path( + '/', ReportAssetDetail.as_view(), name='api-report-asset-detail' + ), + path('', ReportAssetList.as_view(), name='api-report-asset-list'), + ]), + ), + # Report snippets + path( + 'snippet/', + include([ + path( + '/', + ReportSnippetDetail.as_view(), + name='api-report-snippet-detail', + ), + path('', ReportSnippetList.as_view(), name='api-report-snippet-list'), + ]), + ), # Purchase order reports path( 'po/', @@ -528,7 +566,7 @@ report_api_urls = [ path( 'metadata/', MetadataView.as_view(), - {'model': PurchaseOrderReport}, + {'model': report.models.PurchaseOrderReport}, name='api-po-report-metadata', ), path( @@ -558,7 +596,7 @@ report_api_urls = [ path( 'metadata/', MetadataView.as_view(), - {'model': SalesOrderReport}, + {'model': report.models.SalesOrderReport}, name='api-so-report-metadata', ), path( @@ -586,7 +624,7 @@ report_api_urls = [ path( 'metadata/', MetadataView.as_view(), - {'model': ReturnOrderReport}, + {'model': report.models.ReturnOrderReport}, name='api-so-report-metadata', ), path( @@ -617,7 +655,7 @@ report_api_urls = [ path( 'metadata/', MetadataView.as_view(), - {'model': BuildReport}, + {'model': report.models.BuildReport}, name='api-build-report-metadata', ), path( @@ -645,7 +683,7 @@ report_api_urls = [ path( 'metadata/', MetadataView.as_view(), - {'model': BillOfMaterialsReport}, + {'model': report.models.BillOfMaterialsReport}, name='api-bom-report-metadata', ), path('', BOMReportDetail.as_view(), name='api-bom-report-detail'), @@ -671,7 +709,7 @@ report_api_urls = [ path( 'metadata/', MetadataView.as_view(), - {'report': TestReport}, + {'report': report.models.TestReport}, name='api-stockitem-testreport-metadata', ), path( @@ -705,7 +743,7 @@ report_api_urls = [ path( 'metadata/', MetadataView.as_view(), - {'report': StockLocationReport}, + {'report': report.models.StockLocationReport}, name='api-stocklocation-report-metadata', ), path( diff --git a/InvenTree/report/models.py b/InvenTree/report/models.py index 269b38ee6c..7958ffb08d 100644 --- a/InvenTree/report/models.py +++ b/InvenTree/report/models.py @@ -7,6 +7,7 @@ import sys from django.conf import settings from django.core.cache import cache +from django.core.exceptions import ValidationError from django.core.validators import FileExtensionValidator from django.db import models from django.template import Context, Template @@ -585,10 +586,7 @@ class ReturnOrderReport(ReportTemplateBase): def rename_snippet(instance, filename): """Function to rename a report snippet once uploaded.""" - filename = os.path.basename(filename) - - path = os.path.join('report', 'snippets', filename) - + path = ReportSnippet.snippet_path(filename) fullpath = settings.MEDIA_ROOT.joinpath(path).resolve() # If the snippet file is the *same* filename as the one being uploaded, @@ -610,6 +608,40 @@ class ReportSnippet(models.Model): Useful for 'common' template actions, sub-templates, etc """ + def __str__(self) -> str: + """String representation of a ReportSnippet instance.""" + return f'snippets/{self.filename}' + + @property + def filename(self): + """Return the filename of the asset.""" + path = self.snippet.name + if path: + return os.path.basename(path) + else: + return '-' + + @staticmethod + def snippet_path(filename): + """Return the fully-qualified snippet path for the given filename.""" + return os.path.join('report', 'snippets', os.path.basename(str(filename))) + + def validate_unique(self, exclude=None): + """Validate that this report asset is unique.""" + proposed_path = self.snippet_path(self.snippet) + + if ( + ReportSnippet.objects.filter(snippet=proposed_path) + .exclude(pk=self.pk) + .count() + > 0 + ): + raise ValidationError({ + 'snippet': _('Snippet file with this name already exists') + }) + + return super().validate_unique(exclude) + snippet = models.FileField( upload_to=rename_snippet, verbose_name=_('Snippet'), @@ -626,19 +658,20 @@ class ReportSnippet(models.Model): def rename_asset(instance, filename): """Function to rename an asset file when uploaded.""" - filename = os.path.basename(filename) - - path = os.path.join('report', 'assets', filename) + path = ReportAsset.asset_path(filename) + fullpath = settings.MEDIA_ROOT.joinpath(path).resolve() # If the asset file is the *same* filename as the one being uploaded, # delete the original one from the media directory if str(filename) == str(instance.asset): - fullpath = settings.MEDIA_ROOT.joinpath(path).resolve() - if fullpath.exists(): + # Check for existing asset file with the same name logger.info("Deleting existing asset file: '%s'", filename) os.remove(fullpath) + # Ensure the cache is deleted for this asset + cache.delete(fullpath) + return path @@ -652,7 +685,35 @@ class ReportAsset(models.Model): def __str__(self): """String representation of a ReportAsset instance.""" - return os.path.basename(self.asset.name) + return f'assets/{self.filename}' + + @property + def filename(self): + """Return the filename of the asset.""" + path = self.asset.name + if path: + return os.path.basename(path) + else: + return '-' + + @staticmethod + def asset_path(filename): + """Return the fully-qualified asset path for the given filename.""" + return os.path.join('report', 'assets', os.path.basename(str(filename))) + + def validate_unique(self, exclude=None): + """Validate that this report asset is unique.""" + proposed_path = self.asset_path(self.asset) + + if ( + ReportAsset.objects.filter(asset=proposed_path).exclude(pk=self.pk).count() + > 0 + ): + raise ValidationError({ + 'asset': _('Asset file with this name already exists') + }) + + return super().validate_unique(exclude) # Asset file asset = models.FileField( diff --git a/InvenTree/report/serializers.py b/InvenTree/report/serializers.py index 362aa3519e..320c489a37 100644 --- a/InvenTree/report/serializers.py +++ b/InvenTree/report/serializers.py @@ -1,20 +1,13 @@ """API serializers for the reporting models.""" +from rest_framework import serializers + +import report.models from InvenTree.serializers import ( InvenTreeAttachmentSerializerField, InvenTreeModelSerializer, ) -from .models import ( - BillOfMaterialsReport, - BuildReport, - PurchaseOrderReport, - ReturnOrderReport, - SalesOrderReport, - StockLocationReport, - TestReport, -) - class ReportSerializerBase(InvenTreeModelSerializer): """Base class for report serializer.""" @@ -24,7 +17,16 @@ class ReportSerializerBase(InvenTreeModelSerializer): @staticmethod def report_fields(): """Generic serializer fields for a report template.""" - return ['pk', 'name', 'description', 'template', 'filters', 'enabled'] + return [ + 'pk', + 'name', + 'description', + 'template', + 'filters', + 'page_size', + 'landscape', + 'enabled', + ] class TestReportSerializer(ReportSerializerBase): @@ -33,7 +35,7 @@ class TestReportSerializer(ReportSerializerBase): class Meta: """Metaclass options.""" - model = TestReport + model = report.models.TestReport fields = ReportSerializerBase.report_fields() @@ -43,7 +45,7 @@ class BuildReportSerializer(ReportSerializerBase): class Meta: """Metaclass options.""" - model = BuildReport + model = report.models.BuildReport fields = ReportSerializerBase.report_fields() @@ -53,7 +55,7 @@ class BOMReportSerializer(ReportSerializerBase): class Meta: """Metaclass options.""" - model = BillOfMaterialsReport + model = report.models.BillOfMaterialsReport fields = ReportSerializerBase.report_fields() @@ -63,7 +65,7 @@ class PurchaseOrderReportSerializer(ReportSerializerBase): class Meta: """Metaclass options.""" - model = PurchaseOrderReport + model = report.models.PurchaseOrderReport fields = ReportSerializerBase.report_fields() @@ -73,7 +75,7 @@ class SalesOrderReportSerializer(ReportSerializerBase): class Meta: """Metaclass options.""" - model = SalesOrderReport + model = report.models.SalesOrderReport fields = ReportSerializerBase.report_fields() @@ -83,7 +85,7 @@ class ReturnOrderReportSerializer(ReportSerializerBase): class Meta: """Metaclass options.""" - model = ReturnOrderReport + model = report.models.ReturnOrderReport fields = ReportSerializerBase.report_fields() @@ -93,5 +95,30 @@ class StockLocationReportSerializer(ReportSerializerBase): class Meta: """Metaclass options.""" - model = StockLocationReport + model = report.models.StockLocationReport fields = ReportSerializerBase.report_fields() + + +class ReportSnippetSerializer(InvenTreeModelSerializer): + """Serializer class for the ReportSnippet model.""" + + class Meta: + """Metaclass options.""" + + model = report.models.ReportSnippet + + fields = ['pk', 'snippet', 'description'] + + snippet = InvenTreeAttachmentSerializerField() + + +class ReportAssetSerializer(InvenTreeModelSerializer): + """Serializer class for the ReportAsset model.""" + + class Meta: + """Meta class options.""" + + model = report.models.ReportAsset + fields = ['pk', 'asset', 'description'] + + asset = InvenTreeAttachmentSerializerField() diff --git a/InvenTree/report/templates/report/inventree_bill_of_materials_report.html b/InvenTree/report/templates/report/inventree_bill_of_materials_report.html index f2dd287b5b..8f34911bfc 100644 --- a/InvenTree/report/templates/report/inventree_bill_of_materials_report.html +++ b/InvenTree/report/templates/report/inventree_bill_of_materials_report.html @@ -11,7 +11,7 @@ margin-top: 4cm; {% endblock page_margin %} {% block bottom_left %} -content: "v{{ report_revision }} - {{ date.isoformat }}"; +content: "v{{ report_revision }} - {% format_date date %}"; {% endblock bottom_left %} {% block bottom_center %} diff --git a/InvenTree/report/templates/report/inventree_build_order_base.html b/InvenTree/report/templates/report/inventree_build_order_base.html index 23b76f85b2..dfb177a9fa 100644 --- a/InvenTree/report/templates/report/inventree_build_order_base.html +++ b/InvenTree/report/templates/report/inventree_build_order_base.html @@ -74,7 +74,7 @@ margin-top: 4cm; {% endblock style %} {% block bottom_left %} -content: "v{{ report_revision }} - {{ date.isoformat }}"; +content: "v{{ report_revision }} - {% format_date date %}"; {% endblock bottom_left %} {% block header_content %} @@ -119,13 +119,13 @@ content: "v{{ report_revision }} - {{ date.isoformat }}"; {% trans "Issued" %} - {% render_date build.creation_date %} + {% format_date build.creation_date %} {% trans "Target Date" %} {% if build.target_date %} - {% render_date build.target_date %} + {% format_date build.target_date %} {% else %} Not specified {% endif %} diff --git a/InvenTree/report/templates/report/inventree_order_report_base.html b/InvenTree/report/templates/report/inventree_order_report_base.html index ceaf3edd7e..6f936681dc 100644 --- a/InvenTree/report/templates/report/inventree_order_report_base.html +++ b/InvenTree/report/templates/report/inventree_order_report_base.html @@ -12,7 +12,7 @@ margin-top: 4cm; {% endblock page_margin %} {% block bottom_left %} -content: "v{{ report_revision }} - {{ date.isoformat }}"; +content: "v{{ report_revision }} - {% format_date date %}"; {% endblock bottom_left %} {% block bottom_center %} diff --git a/InvenTree/report/templates/report/inventree_slr_report.html b/InvenTree/report/templates/report/inventree_slr_report.html index f10c74d318..f2e13ff843 100644 --- a/InvenTree/report/templates/report/inventree_slr_report.html +++ b/InvenTree/report/templates/report/inventree_slr_report.html @@ -11,7 +11,7 @@ margin-top: 4cm; {% endblock page_margin %} {% block bottom_left %} -content: "v{{ report_revision }} - {{ date.isoformat }}"; +content: "v{{ report_revision }} - {% format_date date %}"; {% endblock bottom_left %} {% block bottom_center %} diff --git a/InvenTree/report/templates/report/inventree_test_report_base.html b/InvenTree/report/templates/report/inventree_test_report_base.html index 3afcdb474b..4e25b4598f 100644 --- a/InvenTree/report/templates/report/inventree_test_report_base.html +++ b/InvenTree/report/templates/report/inventree_test_report_base.html @@ -10,7 +10,7 @@ } {% block bottom_left %} -content: "{{ date.isoformat }}"; +content: "{% format_date date %}"; {% endblock bottom_left %} {% block bottom_center %} @@ -133,7 +133,7 @@ content: "{% trans 'Stock Item Test Report' %}"; {% endif %} {{ test_result.value }} {{ test_result.user.username }} - {{ test_result.date.date.isoformat }} + {% format_date test_result.date.date %} {% else %} {% if test_template.required %} {% trans "No result (required)" %} diff --git a/InvenTree/report/templatetags/report.py b/InvenTree/report/templatetags/report.py index e66cc326a9..aea2105abb 100644 --- a/InvenTree/report/templatetags/report.py +++ b/InvenTree/report/templatetags/report.py @@ -410,7 +410,10 @@ def format_number(number, **kwargs): except ValueError: pass - value = str(number) + # Re-encode, and normalize again + value = Decimal(number).normalize() + value = format(value, 'f') + value = str(value) leading = kwargs.get('leading', None) @@ -422,3 +425,37 @@ def format_number(number, **kwargs): pass return value + + +@register.simple_tag +def format_datetime(datetime, timezone=None, format=None): + """Format a datetime object for display. + + Arguments: + datetime: The datetime object to format + timezone: The timezone to use for the date (defaults to the server timezone) + format: The format string to use (defaults to ISO formatting) + """ + datetime = InvenTree.helpers.to_local_time(datetime, timezone) + + if format: + return datetime.strftime(format) + else: + return datetime.isoformat() + + +@register.simple_tag +def format_date(date, timezone=None, format=None): + """Format a date object for display. + + Arguments: + date: The date to format + timezone: The timezone to use for the date (defaults to the server timezone) + format: The format string to use (defaults to ISO formatting) + """ + date = InvenTree.helpers.to_local_time(date, timezone).date() + + if format: + return date.strftime(format) + else: + return date.isoformat() diff --git a/InvenTree/report/tests.py b/InvenTree/report/tests.py index ab9b68f83c..2296a2f5db 100644 --- a/InvenTree/report/tests.py +++ b/InvenTree/report/tests.py @@ -8,10 +8,12 @@ from pathlib import Path from django.conf import settings from django.core.cache import cache from django.http.response import StreamingHttpResponse -from django.test import TestCase +from django.test import TestCase, override_settings from django.urls import reverse +from django.utils import timezone from django.utils.safestring import SafeString +import pytz from PIL import Image import report.models as report_models @@ -153,6 +155,37 @@ class ReportTagTest(TestCase): self.assertEqual(report_tags.multiply(2.3, 4), 9.2) self.assertEqual(report_tags.divide(100, 5), 20) + @override_settings(TIME_ZONE='America/New_York') + def test_date_tags(self): + """Test for date formatting tags. + + - Source timezone is Australia/Sydney + - Server timezone is America/New York + """ + time = timezone.datetime( + year=2024, + month=3, + day=13, + hour=12, + minute=30, + second=0, + tzinfo=pytz.timezone('Australia/Sydney'), + ) + + # Format a set of tests: timezone, format, expected + tests = [ + (None, None, '2024-03-12T22:25:00-04:00'), + (None, '%d-%m-%y', '12-03-24'), + ('UTC', None, '2024-03-13T02:25:00+00:00'), + ('UTC', '%d-%B-%Y', '13-March-2024'), + ('Europe/Amsterdam', None, '2024-03-13T03:25:00+01:00'), + ('Europe/Amsterdam', '%y-%m-%d %H:%M', '24-03-13 03:25'), + ] + + for tz, fmt, expected in tests: + result = report_tags.format_datetime(time, tz, fmt) + self.assertEqual(result, expected) + class BarcodeTagTest(TestCase): """Unit tests for the barcode template tags.""" diff --git a/InvenTree/stock/migrations/0109_add_additional_test_fields.py b/InvenTree/stock/migrations/0109_add_additional_test_fields.py new file mode 100644 index 0000000000..7366b1136e --- /dev/null +++ b/InvenTree/stock/migrations/0109_add_additional_test_fields.py @@ -0,0 +1,29 @@ +# Generated by Django 3.2.23 on 2023-12-18 18:52 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('stock', '0108_auto_20240219_0252'), + ] + + operations = [ + migrations.AddField( + model_name='stockitemtestresult', + name='finished_datetime', + field=models.DateTimeField(blank=True, default=datetime.datetime.now, help_text='The timestamp of the test finish', verbose_name='Finished'), + ), + migrations.AddField( + model_name='stockitemtestresult', + name='started_datetime', + field=models.DateTimeField(blank=True, default=datetime.datetime.now, help_text='The timestamp of the test start', verbose_name='Started'), + ), + migrations.AddField( + model_name='stockitemtestresult', + name='test_station', + field=models.CharField(blank=True, help_text='The identifier of the test station where the test was performed', max_length=500, verbose_name='Test station'), + ), + ] diff --git a/InvenTree/stock/models.py b/InvenTree/stock/models.py index 99d3ae9eee..749a2ca6fd 100644 --- a/InvenTree/stock/models.py +++ b/InvenTree/stock/models.py @@ -2363,6 +2363,9 @@ class StockItemTestResult(InvenTree.models.InvenTreeMetadataModel): value: Recorded test output value (optional) attachment: Link to StockItem attachment (optional) notes: Extra user notes related to the test (optional) + test_station: the name of the test station where the test was performed + started_datetime: Date when the test was started + finished_datetime: Date when the test was finished user: User who uploaded the test result date: Date the test result was recorded """ @@ -2453,4 +2456,27 @@ class StockItemTestResult(InvenTree.models.InvenTreeMetadataModel): user = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True) + test_station = models.CharField( + blank=True, + max_length=500, + verbose_name=_('Test station'), + help_text=_('The identifier of the test station where the test was performed'), + ) + + started_datetime = models.DateTimeField( + default=datetime.now, + blank=True, + verbose_name=_('Started'), + help_text=_('The timestamp of the test start'), + ) + + finished_datetime = models.DateTimeField( + default=datetime.now, + blank=True, + verbose_name=_('Finished'), + help_text=_('The timestamp of the test finish'), + ) + + user = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True) + date = models.DateTimeField(auto_now_add=True, editable=False) diff --git a/InvenTree/stock/serializers.py b/InvenTree/stock/serializers.py index cae8460a41..c0fc676945 100644 --- a/InvenTree/stock/serializers.py +++ b/InvenTree/stock/serializers.py @@ -6,7 +6,7 @@ from decimal import Decimal from django.core.exceptions import ValidationError as DjangoValidationError from django.db import transaction -from django.db.models import BooleanField, Case, Count, Q, Value, When +from django.db.models import BooleanField, Case, Count, Prefetch, Q, Value, When from django.db.models.functions import Coalesce from django.utils.translation import gettext_lazy as _ @@ -20,6 +20,7 @@ import company.models import InvenTree.helpers import InvenTree.serializers import InvenTree.status_codes +import part.filters as part_filters import part.models as part_models import stock.filters from company.serializers import SupplierPartSerializer @@ -63,6 +64,9 @@ class StockItemTestResultSerializer(InvenTree.serializers.InvenTreeModelSerializ 'value', 'attachment', 'notes', + 'test_station', + 'started_datetime', + 'finished_datetime', 'user', 'user_detail', 'date', @@ -136,7 +140,18 @@ class StockItemTestResultSerializer(InvenTree.serializers.InvenTreeModelSerializ part=stock_item.part, test_name=test_name ) - return super().validate(data) + data = super().validate(data) + + started = data.get('started_datetime') + finished = data.get('finished_datetime') + + if started is not None and finished is not None and started > finished: + raise ValidationError({ + 'finished_datetime': _( + 'The test finished time cannot be earlier than the test started time' + ) + }) + return data class StockItemSerializerBrief(InvenTree.serializers.InvenTreeModelSerializer): @@ -289,7 +304,14 @@ class StockItemSerializer(InvenTree.serializers.InvenTreeTagModelSerializer): 'location', 'sales_order', 'purchase_order', - 'part', + Prefetch( + 'part', + queryset=part_models.Part.objects.annotate( + category_default_location=part_filters.annotate_default_location( + 'category__' + ) + ).prefetch_related(None), + ), 'part__category', 'part__pricing_data', 'supplier_part', @@ -576,9 +598,14 @@ class InstallStockItemSerializer(serializers.Serializer): parent_item = self.context['item'] parent_part = parent_item.part - # Check if the selected part is in the Bill of Materials of the parent item - if not parent_part.check_if_part_in_bom(stock_item.part): - raise ValidationError(_('Selected part is not in the Bill of Materials')) + if common.models.InvenTreeSetting.get_setting( + 'STOCK_ENFORCE_BOM_INSTALLATION', backup_value=True, cache=False + ): + # Check if the selected part is in the Bill of Materials of the parent item + if not parent_part.check_if_part_in_bom(stock_item.part): + raise ValidationError( + _('Selected part is not in the Bill of Materials') + ) return stock_item @@ -886,6 +913,7 @@ class LocationSerializer(InvenTree.serializers.InvenTreeTagModelSerializer): 'pathstring', 'path', 'items', + 'sublocations', 'owner', 'icon', 'custom_icon', @@ -911,13 +939,18 @@ class LocationSerializer(InvenTree.serializers.InvenTreeTagModelSerializer): def annotate_queryset(queryset): """Annotate extra information to the queryset.""" # Annotate the number of stock items which exist in this category (including subcategories) - queryset = queryset.annotate(items=stock.filters.annotate_location_items()) + queryset = queryset.annotate( + items=stock.filters.annotate_location_items(), + sublocations=stock.filters.annotate_sub_locations(), + ) return queryset url = serializers.CharField(source='get_absolute_url', read_only=True) - items = serializers.IntegerField(read_only=True) + items = serializers.IntegerField(read_only=True, label=_('Stock Items')) + + sublocations = serializers.IntegerField(read_only=True, label=_('Sublocations')) level = serializers.IntegerField(read_only=True) diff --git a/InvenTree/stock/templates/stock/item.html b/InvenTree/stock/templates/stock/item.html index 30272d53a9..33810b6da6 100644 --- a/InvenTree/stock/templates/stock/item.html +++ b/InvenTree/stock/templates/stock/item.html @@ -183,7 +183,10 @@ $('#stock-item-install').click(function() { + {% settings_value "STOCK_ENFORCE_BOM_INSTALLATION" as enforce_bom %} + installStockItem({{ item.pk }}, {{ item.part.pk }}, { + enforce_bom: {% js_bool enforce_bom %}, onSuccess: function(response) { $("#installed-table").bootstrapTable('refresh'); } @@ -228,10 +231,13 @@ }); }); + {% settings_value "TEST_STATION_DATA" as test_station_fields %} + loadStockTestResultsTable( $("#test-result-table"), { part: {{ item.part.id }}, stock_item: {{ item.id }}, + test_station_fields: {% js_bool test_station_fields %} } ); diff --git a/InvenTree/templates/InvenTree/settings/report.html b/InvenTree/templates/InvenTree/settings/report.html index baf57c9bfc..683625bd74 100644 --- a/InvenTree/templates/InvenTree/settings/report.html +++ b/InvenTree/templates/InvenTree/settings/report.html @@ -15,6 +15,7 @@ {% include "InvenTree/settings/setting.html" with key="REPORT_ENABLE" icon="fa-file-pdf" %} {% include "InvenTree/settings/setting.html" with key="REPORT_DEFAULT_PAGE_SIZE" icon="fa-print" %} {% include "InvenTree/settings/setting.html" with key="REPORT_DEBUG_MODE" icon="fa-laptop-code" %} + {% include "InvenTree/settings/setting.html" with key="REPORT_LOG_ERRORS" icon="fa-exclamation-circle" %} {% include "InvenTree/settings/setting.html" with key="REPORT_ENABLE_TEST_REPORT" icon="fa-vial" %} {% include "InvenTree/settings/setting.html" with key="REPORT_ATTACH_TEST_REPORT" icon="fa-file-upload" %} diff --git a/InvenTree/templates/InvenTree/settings/stock.html b/InvenTree/templates/InvenTree/settings/stock.html index 388118555c..9ccca21af0 100644 --- a/InvenTree/templates/InvenTree/settings/stock.html +++ b/InvenTree/templates/InvenTree/settings/stock.html @@ -22,6 +22,8 @@ {% include "InvenTree/settings/setting.html" with key="STOCK_OWNERSHIP_CONTROL" icon="fa-users" %} {% include "InvenTree/settings/setting.html" with key="STOCK_LOCATION_DEFAULT_ICON" icon="fa-icons" %} {% include "InvenTree/settings/setting.html" with key="STOCK_SHOW_INSTALLED_ITEMS" icon="fa-sitemap" %} + {% include "InvenTree/settings/setting.html" with key="STOCK_ENFORCE_BOM_INSTALLATION" icon="fa-check-circle" %} + {% include "InvenTree/settings/setting.html" with key="TEST_STATION_DATA" icon="fa-network-wired" %} diff --git a/InvenTree/templates/js/translated/bom.js b/InvenTree/templates/js/translated/bom.js index ebf1caec67..11d03c095e 100644 --- a/InvenTree/templates/js/translated/bom.js +++ b/InvenTree/templates/js/translated/bom.js @@ -1172,12 +1172,18 @@ function loadBomTable(table, options={}) { var available_stock = availableQuantity(row); + var external_stock = row.external_stock ?? 0; + var text = renderLink(`${available_stock}`, url); if (row.sub_part_detail && row.sub_part_detail.units) { text += ` ${row.sub_part_detail.units}`; } + if (external_stock > 0) { + text += makeIconBadge('fa-sitemap', `{% trans "External stock" %}: ${external_stock}`); + } + if (available_stock <= 0) { text += makeIconBadge('fa-times-circle icon-red', '{% trans "No Stock Available" %}'); } else { diff --git a/InvenTree/templates/js/translated/build.js b/InvenTree/templates/js/translated/build.js index 97b9ba3095..a8026414b7 100644 --- a/InvenTree/templates/js/translated/build.js +++ b/InvenTree/templates/js/translated/build.js @@ -2618,6 +2618,10 @@ function loadBuildLineTable(table, build_id, options={}) { icons += makeIconBadge('fa-tools icon-blue', `{% trans "In Production" %}: ${formatDecimal(row.in_production)}`); } + if (row.external_stock > 0) { + icons += makeIconBadge('fa-sitemap', `{% trans "External stock" %}: ${row.external_stock}`); + } + return renderLink(text, url) + icons; } }, @@ -2730,6 +2734,7 @@ function loadBuildLineTable(table, build_id, options={}) { allocateStockToBuild(build_id, [row], { output: options.output, + source_location: options.location, success: function() { $(table).bootstrapTable('refresh'); } diff --git a/InvenTree/templates/js/translated/forms.js b/InvenTree/templates/js/translated/forms.js index 6d448a0d14..3f5539b7d8 100644 --- a/InvenTree/templates/js/translated/forms.js +++ b/InvenTree/templates/js/translated/forms.js @@ -2590,6 +2590,9 @@ function constructInput(name, parameters, options={}) { case 'date': func = constructDateInput; break; + case 'datetime': + func = constructDateTimeInput; + break; case 'candy': func = constructCandyInput; break; @@ -2860,6 +2863,19 @@ function constructDateInput(name, parameters) { } +/* + * Construct a field for a datetime input + */ +function constructDateTimeInput(name, parameters) { + + return constructInputOptions( + name, + 'datetimeinput form-control', + 'datetime', + parameters + ); +} + /* * Construct a "candy" field input * No actual field data! diff --git a/InvenTree/templates/js/translated/part.js b/InvenTree/templates/js/translated/part.js index 240734e958..ffcea223d3 100644 --- a/InvenTree/templates/js/translated/part.js +++ b/InvenTree/templates/js/translated/part.js @@ -2804,6 +2804,15 @@ function loadPartCategoryTable(table, options) { title: '{% trans "Parts" %}', switchable: true, sortable: true, + }, + { + field: 'structural', + title: '{% trans "Structural" %}', + switchable: true, + sortable: true, + formatter: function(value) { + return yesNoLabel(value); + } } ] }); diff --git a/InvenTree/templates/js/translated/stock.js b/InvenTree/templates/js/translated/stock.js index c6a1f5f2de..5254eec00f 100644 --- a/InvenTree/templates/js/translated/stock.js +++ b/InvenTree/templates/js/translated/stock.js @@ -1367,11 +1367,11 @@ function noResultBadge() { return `{% trans "NO RESULT" %}`; } -function formatDate(row) { +function formatDate(row, date, options={}) { // Function for formatting date field - var html = renderDate(row.date); + var html = renderDate(date, options); - if (row.user_detail) { + if (row.user_detail && !options.no_user_detail) { html += `${row.user_detail.username}`; } @@ -1392,6 +1392,13 @@ function stockItemTestResultFields(options={}) { notes: { icon: 'fa-sticky-note', }, + test_station: {}, + started_datetime: { + icon: 'fa-calendar-alt', + }, + finished_datetime: { + icon: 'fa-calendar-alt', + }, stock_item: { hidden: true, }, @@ -1530,7 +1537,30 @@ function loadStockTestResultsTable(table, options) { title: '{% trans "Test Date" %}', sortable: true, formatter: function(value, row) { - return formatDate(row); + return formatDate(row, row.date); + }, + }, + { + field: 'test_station', + title: '{% trans "Test station" %}', + visible: false, + }, + { + field: 'started_timestamp', + title: '{% trans "Test started" %}', + sortable: true, + visible: false, + formatter: function(value, row) { + return formatDate(row, row.started_datetime, {showTime: true, no_user_detail: true}); + }, + }, + { + field: 'finished_timestamp', + title: '{% trans "Test finished" %}', + sortable: true, + visible: false, + formatter: function(value, row) { + return formatDate(row, row.finished_datetime, {showTime: true, no_user_detail: true}); }, }, { @@ -1656,6 +1686,12 @@ function loadStockTestResultsTable(table, options) { fields['template']['value'] = templateId; fields['template']['filters']['part'] = options.part; + if (!options.test_station_fields) { + delete fields['test_station']; + delete fields['started_datetime']; + delete fields['finished_datetime']; + } + constructForm('{% url "api-stock-test-result-list" %}', { method: 'POST', fields: fields, @@ -3204,7 +3240,7 @@ function installStockItem(stock_item_id, part_id, options={}) { auto_fill: true, filters: { trackable: true, - in_bom_for: part_id, + in_bom_for: options.enforce_bom ? part_id : undefined, } }, stock_item: { diff --git a/InvenTree/users/models.py b/InvenTree/users/models.py index 806f39586d..701b7e8105 100644 --- a/InvenTree/users/models.py +++ b/InvenTree/users/models.py @@ -717,7 +717,10 @@ def check_user_role(user, role, permission): # First, check the cache key = f'role_{user}_{role}_{permission}' - result = cache.get(key) + try: + result = cache.get(key) + except Exception: + result = None if result is not None: return result @@ -745,7 +748,11 @@ def check_user_role(user, role, permission): break # Save result to cache - cache.set(key, result, timeout=3600) + try: + cache.set(key, result, timeout=3600) + except Exception: + pass + return result diff --git a/contrib/packager.io/functions.sh b/contrib/packager.io/functions.sh index a0509a504a..97dbd71027 100755 --- a/contrib/packager.io/functions.sh +++ b/contrib/packager.io/functions.sh @@ -183,7 +183,7 @@ function create_initscripts() { ${INIT_CMD} stop nginx echo "# Setting up nginx to ${SETUP_NGINX_FILE}" # Always use the latest nginx config; important if new headers are added / needed for security - cp ${APP_HOME}/docker/production/nginx.prod.conf ${SETUP_NGINX_FILE} + cp ${APP_HOME}/contrib/packager.io/nginx.prod.conf ${SETUP_NGINX_FILE} sed -i s/inventree-server:8000/localhost:6000/g ${SETUP_NGINX_FILE} sed -i s=var/www=opt/inventree/data=g ${SETUP_NGINX_FILE} # Start nginx diff --git a/contrib/packager.io/nginx.prod.conf b/contrib/packager.io/nginx.prod.conf new file mode 100644 index 0000000000..a78b9ebd0f --- /dev/null +++ b/contrib/packager.io/nginx.prod.conf @@ -0,0 +1,67 @@ + +server { + + # Listen for connection on (internal) port 80 + # If you are exposing this server to the internet, you should use HTTPS! + # In which case, you should also set up a redirect from HTTP to HTTPS, and listen on port 443 + # See the Nginx documentation for more details + listen 80; + + real_ip_header proxy_protocol; + + location / { + + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-By $server_addr:$server_port; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header CLIENT_IP $remote_addr; + + proxy_pass_request_headers on; + + proxy_redirect off; + + client_max_body_size 100M; + + proxy_buffering off; + proxy_request_buffering off; + + # Do not touch this unless you have a specific reason - this and the docker-compose need to match + proxy_pass http://inventree-server:8000; + } + + # Redirect any requests for static files + location /static/ { + alias /var/www/static/; + autoindex on; + + # Caching settings + expires 30d; + add_header Pragma public; + add_header Cache-Control "public"; + } + + # Redirect any requests for media files + location /media/ { + alias /var/www/media/; + + # Media files require user authentication + auth_request /auth; + + # Content header to force download + add_header Content-disposition "attachment"; + } + + # Use the 'user' API endpoint for auth + location /auth { + internal; + + proxy_pass http://inventree-server:8000/auth/; + + proxy_pass_request_body off; + proxy_set_header Content-Length ""; + proxy_set_header X-Original-URI $request_uri; + } + +} diff --git a/docker/.env b/docker/.env index 39ac250ccb..447ede63b4 100644 --- a/docker/.env +++ b/docker/.env @@ -43,7 +43,7 @@ INVENTREE_AUTO_UPDATE=True # Image tag that should be used INVENTREE_TAG=stable -# Site URL - update this to match your host (and update the Caddyfile too!) +# Site URL - update this to match your host INVENTREE_SITE_URL="http://inventree.localhost" COMPOSE_PROJECT_NAME=inventree diff --git a/docker/Caddyfile b/docker/Caddyfile index ad7b2c26ba..8e5e2f81a7 100644 --- a/docker/Caddyfile +++ b/docker/Caddyfile @@ -4,33 +4,51 @@ # - INVENTREE_SERVER: The internal URL of the Inventree container (default: http://inventree-server:8000) (log_common) { - log { - output file /var/log/caddy/{args.0}.access.log - } + log { + output file /var/log/caddy/{args[0]}.access.log + } +} + +(cors-headers) { + header Allow GET,HEAD,OPTIONS + header Access-Control-Allow-Origin * + header Access-Control-Allow-Methods GET,HEAD,OPTIONS + header Access-Control-Allow-Headers Authorization,Content-Type,User-Agent + + @cors_preflight{args[0]} method OPTIONS + + handle @cors_preflight{args[0]} { + respond "" 204 + } } # Change the host to your domain (this will serve at inventree.localhost) {$INVENTREE_SITE_URL:inventree.localhost} { - import log_common inventree + import log_common inventree - encode gzip + encode gzip - request_body { - max_size 100MB - } + request_body { + max_size 100MB + } - handle_path /static/* { - root * /var/www/static - file_server - } + handle_path /static/* { + import cors-headers static - handle_path /media/* { - forward_auth {$INVENTREE_SERVER:"http://inventree-server:8000"} { - uri /auth/ - } - root * /var/www/media - file_server - } + root * /var/www/static + file_server + } - reverse_proxy {$INVENTREE_SERVER:"http://inventree-server:8000"} + handle_path /media/* { + import cors-headers media + + root * /var/www/media + file_server + + forward_auth {$INVENTREE_SERVER:"http://inventree-server:8000"} { + uri /auth/ + } + } + + reverse_proxy {$INVENTREE_SERVER:"http://inventree-server:8000"} } diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 7b948cf7ab..5fa1532481 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -4,7 +4,7 @@ version: "3.8" # - PostgreSQL as the database backend # - gunicorn as the InvenTree web server # - django-q as the InvenTree background worker process -# - nginx as a reverse proxy +# - Caddy as a reverse proxy # - redis as the cache manager (optional, disabled by default) # --------------------- diff --git a/docker/install_build_packages.sh b/docker/install_build_packages.sh index ca7ea49ddf..358a256e7f 100644 --- a/docker/install_build_packages.sh +++ b/docker/install_build_packages.sh @@ -4,6 +4,7 @@ # Note that for postgreslql, we use the 13 version, which matches the version used in the InvenTree docker image apk add gcc g++ musl-dev openssl-dev libffi-dev cargo python3-dev openldap-dev \ + libstdc++ build-base linux-headers py3-grpcio \ jpeg-dev openjpeg-dev libwebp-dev zlib-dev \ sqlite sqlite-dev \ mariadb-connector-c-dev mariadb-client mariadb-dev \ diff --git a/docs/.gitignore b/docs/.gitignore index ecbeb1b0ab..ea8649cfa3 100644 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -10,6 +10,9 @@ env/ _build/ site/ +# Generated API schema files +docs/api/schema/*.yml + # Temp files releases.json versions.json diff --git a/docs/docs/api/api.md b/docs/docs/api/api.md index 0d8b24b128..7f2c9328d0 100644 --- a/docs/docs/api/api.md +++ b/docs/docs/api/api.md @@ -17,6 +17,17 @@ The API is self-documenting, and the documentation is provided alongside any Inv {% include 'img.html' %} {% endwith %} +### Schema Description + The API schema is also documented in the [API Schema](./schema.md) page. + +### Generating Schema File + +If you want to generate the API schema file yourself (for example to use with an external client, use the `invoke schema` command. Run with the `-help` command to see available options. + +``` +invoke schema -help +``` + ## Authentication Users must be authenticated to gain access to the InvenTree API. The API accepts either basic username:password authentication, or token authentication. Token authentication is recommended as it provides much faster API access. diff --git a/docs/docs/api/schema.md b/docs/docs/api/schema.md new file mode 100644 index 0000000000..441e977e2e --- /dev/null +++ b/docs/docs/api/schema.md @@ -0,0 +1,40 @@ +--- +title: InvenTree API Schema +--- + +The InvenTree API is implemented using the [Django REST framework](https://www.django-rest-framework.org). +The API schema as documented below is generated using the [drf-spectactular](https://github.com/tfranzel/drf-spectacular/) extension. + +## API Version + +This documentation is for API version: `171` + +!!! tip "API Schema History" + We track API schema changes, and provide a snapshot of each API schema version in the [API schema repository](https://github.com/inventree/schema/). + +## API Schema File + +The API schema file is available for download, and can be used for generating client libraries, or for testing API endpoints. + +## API Schema Documentation + +API schema documentation is split into the following categories: + +| Category | Description | +| --- | --- | +| [Authorization and Authentication](./schema/auth.md) | Authorization and Authentication | +| [Background Task Management](./schema/background-task.md) | Background Task Management | +| [Barcode Scanning](./schema/barcode.md) | Barcode Scanning | +| [Bill of Materials](./schema/bom.md) | Bill of Materials | +| [Build Order Management](./schema/build.md) | Build Order Management | +| [Company Management](./schema/company.md) | Company Management | +| [Label Printing](./schema/label.md) | Label Printing | +| [External Machine Management](./schema/machine.md) | External Machine Management | +| [External Order Management](./schema/order.md) | External Order Management | +| [Parts and Part Categories](./schema/part.md) | Parts and Part Categories | +| [Plugin Functionality](./schema/plugins.md) | Plugin Functionality | +| [Report Generation](./schema/report.md) | Report Generation | +| [Settings Management](./schema/settings.md) | Settings Management | +| [Stock and Stock Locations](./schema/stock.md) | Stock and Stock Locations | +| [User Management](./schema/user.md) | User Management | +| [General](./schema/general.md) | General API endpoints | diff --git a/docs/docs/api/schema/auth.md b/docs/docs/api/schema/auth.md new file mode 100644 index 0000000000..62c8b50103 --- /dev/null +++ b/docs/docs/api/schema/auth.md @@ -0,0 +1,7 @@ +--- +title: Authorization and Authentication +--- + +The *Authorization and Authentication* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/auth.yml)] diff --git a/docs/docs/api/schema/background-task.md b/docs/docs/api/schema/background-task.md new file mode 100644 index 0000000000..b1d5ad0b92 --- /dev/null +++ b/docs/docs/api/schema/background-task.md @@ -0,0 +1,7 @@ +--- +title: Background Task Management +--- + +The *Background Task Management* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/background-task.yml)] diff --git a/docs/docs/api/schema/barcode.md b/docs/docs/api/schema/barcode.md new file mode 100644 index 0000000000..c0f5cab2bf --- /dev/null +++ b/docs/docs/api/schema/barcode.md @@ -0,0 +1,7 @@ +--- +title: Barcode Scanning +--- + +The *Barcode Scanning* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/barcode.yml)] diff --git a/docs/docs/api/schema/bom.md b/docs/docs/api/schema/bom.md new file mode 100644 index 0000000000..cdfd1ff9c2 --- /dev/null +++ b/docs/docs/api/schema/bom.md @@ -0,0 +1,7 @@ +--- +title: Bill of Materials +--- + +The *Bill of Materials* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/bom.yml)] diff --git a/docs/docs/api/schema/build.md b/docs/docs/api/schema/build.md new file mode 100644 index 0000000000..3de0e521c6 --- /dev/null +++ b/docs/docs/api/schema/build.md @@ -0,0 +1,7 @@ +--- +title: Build Order Management +--- + +The *Build Order Management* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/build.yml)] diff --git a/docs/docs/api/schema/company.md b/docs/docs/api/schema/company.md new file mode 100644 index 0000000000..924d899ad4 --- /dev/null +++ b/docs/docs/api/schema/company.md @@ -0,0 +1,7 @@ +--- +title: Company Management +--- + +The *Company Management* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/company.yml)] diff --git a/docs/docs/api/schema/general.md b/docs/docs/api/schema/general.md new file mode 100644 index 0000000000..5da17b815d --- /dev/null +++ b/docs/docs/api/schema/general.md @@ -0,0 +1,7 @@ +--- +title: General API Endpoints +--- + +The *General API Endpoints* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/general.yml)] diff --git a/docs/docs/api/schema/label.md b/docs/docs/api/schema/label.md new file mode 100644 index 0000000000..d4bc47e57c --- /dev/null +++ b/docs/docs/api/schema/label.md @@ -0,0 +1,7 @@ +--- +title: Label Printing +--- + +The *Label Printing* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/label.yml)] diff --git a/docs/docs/api/schema/machine.md b/docs/docs/api/schema/machine.md new file mode 100644 index 0000000000..2fbadd41e6 --- /dev/null +++ b/docs/docs/api/schema/machine.md @@ -0,0 +1,7 @@ +--- +title: External Machine Management +--- + +The *External Machine Management* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/machine.yml)] diff --git a/docs/docs/api/schema/order.md b/docs/docs/api/schema/order.md new file mode 100644 index 0000000000..7f6c8fdfd7 --- /dev/null +++ b/docs/docs/api/schema/order.md @@ -0,0 +1,7 @@ +--- +title: External Order Management +--- + +The *External Order Management* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/order.yml)] diff --git a/docs/docs/api/schema/part.md b/docs/docs/api/schema/part.md new file mode 100644 index 0000000000..67c73eb0fb --- /dev/null +++ b/docs/docs/api/schema/part.md @@ -0,0 +1,7 @@ +--- +title: Parts and Part Categories +--- + +The *Parts and Part Categories* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/part.yml)] diff --git a/docs/docs/api/schema/plugins.md b/docs/docs/api/schema/plugins.md new file mode 100644 index 0000000000..ee0263cffa --- /dev/null +++ b/docs/docs/api/schema/plugins.md @@ -0,0 +1,7 @@ +--- +title: Plugin Functionality +--- + +The *Plugin Functionality* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/plugins.yml)] diff --git a/docs/docs/api/schema/report.md b/docs/docs/api/schema/report.md new file mode 100644 index 0000000000..dfad6d74be --- /dev/null +++ b/docs/docs/api/schema/report.md @@ -0,0 +1,7 @@ +--- +title: Report Generation +--- + +The *Report Generation* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/report.yml)] diff --git a/docs/docs/api/schema/settings.md b/docs/docs/api/schema/settings.md new file mode 100644 index 0000000000..4a6d4f4337 --- /dev/null +++ b/docs/docs/api/schema/settings.md @@ -0,0 +1,7 @@ +--- +title: Settings Management +--- + +The *Settings Management* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/settings.yml)] diff --git a/docs/docs/api/schema/stock.md b/docs/docs/api/schema/stock.md new file mode 100644 index 0000000000..7b961e4b5b --- /dev/null +++ b/docs/docs/api/schema/stock.md @@ -0,0 +1,7 @@ +--- +title: Stock and Stock Locations +--- + +The *Stock and Stock Locations* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/stock.yml)] diff --git a/docs/docs/api/schema/user.md b/docs/docs/api/schema/user.md new file mode 100644 index 0000000000..e0ebba2770 --- /dev/null +++ b/docs/docs/api/schema/user.md @@ -0,0 +1,7 @@ +--- +title: User Management +--- + +The *User Management* section of the InvenTree API schema is documented below. + +[OAD(./docs/docs/api/schema/user.yml)] diff --git a/docs/docs/assets/images/report/template-editor.png b/docs/docs/assets/images/report/template-editor.png new file mode 100644 index 0000000000..20b8e8bbfe Binary files /dev/null and b/docs/docs/assets/images/report/template-editor.png differ diff --git a/docs/docs/assets/images/report/template-table.png b/docs/docs/assets/images/report/template-table.png new file mode 100644 index 0000000000..36ec1164fd Binary files /dev/null and b/docs/docs/assets/images/report/template-table.png differ diff --git a/docs/docs/concepts/units.md b/docs/docs/concepts/units.md index d65d122bc5..7b26ae445f 100644 --- a/docs/docs/concepts/units.md +++ b/docs/docs/concepts/units.md @@ -34,6 +34,15 @@ Scientific notation is also supported, and can be used to represent very large o !!! tip "Case Sensitive" Support for scientific notation is case sensitive. For example, `1E3` is a valid value, but `1e3` is not. +### Feet and Inches + +Shorthand notation is supported for feet and inches. For example, the following values would all be considered *valid*: + +- `3'`: `3 feet` +- `6"` : `6 inches` + +However, note that compound measurements (e.g. `3'6"`) are not supported. + ### Case Sensitivity The pint library is case sensitive, and units must be specified in the correct case. For example, `kg` is a valid unit, but `KG` is not. In particular, you need to pay close attention when using SI prefixes (e.g. `k` for kilo, `M` for mega, `n` for nano, etc). @@ -48,7 +57,7 @@ The [unit of measure](../part/part.md#units-of-measure) field for the [Part](../ ### Supplier Part -The [supplier part](../part/part/#supplier-parts) model uses real-world units to convert between supplier part quantities and internal stock quantities. Unit conversion rules ensure that only compatible unit types can be supplied +The [supplier part](../part/part.md/#supplier-parts) model uses real-world units to convert between supplier part quantities and internal stock quantities. Unit conversion rules ensure that only compatible unit types can be supplied ### Part Parameter diff --git a/docs/docs/extend/plugins/tags.md b/docs/docs/extend/plugins/tags.md index ebcfdc3502..c7853e0baa 100644 --- a/docs/docs/extend/plugins/tags.md +++ b/docs/docs/extend/plugins/tags.md @@ -8,7 +8,7 @@ Several models in InvenTree can be tagged with arbitrary tags. Tags are useful f Tags are shared between all models that can be tagged. The following models can be tagged: -- [Parts](../../part/part.md) and [Supplier Parts](../../order/company#supplier-parts)/[Manufacturer Part](../../order/company#manufacturer-parts) +- [Parts](../../part/part.md) and [Supplier Parts](../../order/company.md#supplier-parts)/[Manufacturer Part](../../order/company.md#manufacturer-parts) - [Stock Items](../../stock/stock.md#stock-item) / [Stock Location](../../stock/stock.md#stock-location) diff --git a/docs/docs/part/create.md b/docs/docs/part/create.md index 0eab451789..46750fbd67 100644 --- a/docs/docs/part/create.md +++ b/docs/docs/part/create.md @@ -64,6 +64,6 @@ If the *Add Supplier Data* option is checked, then supplier part and manufacture The following alternative methods for creating parts are supported: -- [Via the REST API](../../api/api) -- [Using the Python library](../../api/python) -- [Within the Admin interface](../../settings/admin) +- [Via the REST API](../api/api.md) +- [Using the Python library](../api/python/python.md) +- [Within the Admin interface](../settings/admin.md) diff --git a/docs/docs/part/notification.md b/docs/docs/part/notification.md index 48d0bffde9..27aed5a9cd 100644 --- a/docs/docs/part/notification.md +++ b/docs/docs/part/notification.md @@ -7,7 +7,7 @@ title: Part Notifications Users can select to receive notifications when certain events occur. !!! warning "Email Configuration Required" - External notifications require correct [email configuration](../../start/config/#email-settings). They also need to be enabled in the settings under notifications`. + External notifications require correct [email configuration](../start/config.md#email-settings). They also need to be enabled in the settings under notifications`. !!! warning "Valid Email Address" Each user must have a valid email address associated with their account to receive email notifications @@ -50,7 +50,7 @@ Any users who are subscribed to notifications for the part in question will rece ### Build Order Notification -When a new [Build Order](../../build/build/) is created, the InvenTree software checks to see if any of the parts required to complete the order are low on stock. +When a new [Build Order](../build/build.md) is created, the InvenTree software checks to see if any of the parts required to complete the order are low on stock. If there are any parts with low stock, a notification is generated for any users subscribed to notifications for the part being built. diff --git a/docs/docs/part/trackable.md b/docs/docs/part/trackable.md index 55aba96f89..4810c0a94c 100644 --- a/docs/docs/part/trackable.md +++ b/docs/docs/part/trackable.md @@ -2,7 +2,7 @@ title: Trackable Parts --- -Denoting a part as *Trackble* changes the way that [stock items](../../stock/stock) associated with the particular part are handled in the database. A trackable part also has more restrictions imposed by the database scheme. +Denoting a part as *Trackble* changes the way that [stock items](../stock/stock.md) associated with the particular part are handled in the database. A trackable part also has more restrictions imposed by the database scheme. ## Stock Tracking diff --git a/docs/docs/releases/0.1.5.md b/docs/docs/releases/0.1.5.md index 593c68cc39..1199a8e317 100644 --- a/docs/docs/releases/0.1.5.md +++ b/docs/docs/releases/0.1.5.md @@ -24,7 +24,7 @@ Refer to the [build documentation](../build/build.md#overdue-builds) for more in ### Stock Item Expiry -[#1202](https://github.com/inventree/InvenTree/pull/1202) introduces the concept of an *Expiry Date* for Stock Items. For further information, refer to the [expiry documentation](../../stock/expiry). +[#1202](https://github.com/inventree/InvenTree/pull/1202) introduces the concept of an *Expiry Date* for Stock Items. For further information, refer to the [expiry documentation](../stock/expiry.md). ### Stock Ownership diff --git a/docs/docs/releases/0.2.1.md b/docs/docs/releases/0.2.1.md index 036e03ec7b..c992bd7db6 100644 --- a/docs/docs/releases/0.2.1.md +++ b/docs/docs/releases/0.2.1.md @@ -14,7 +14,7 @@ title: Release 0.2.1 !!! warning "Configuration Required" Refer to the [email configuration - options](../../start/config/#email-settings). + options](../start/config.md#email-settings). ### Manufacturer Parts diff --git a/docs/docs/releases/0.6.0.md b/docs/docs/releases/0.6.0.md index 90a0971499..5edd0d2d97 100644 --- a/docs/docs/releases/0.6.0.md +++ b/docs/docs/releases/0.6.0.md @@ -54,7 +54,7 @@ PR [#2119](https://github.com/inventree/InvenTree/pull/2119) adds the ability to ### SSO Support -PR [#2017](https://github.com/inventree/InvenTree/pull/2017) adds support for SSO (single sign on) authentication. SSO integration requires configuration by the system administrator. Refer to the [SSO documentation](../settings/sso) for further information. +PR [#2017](https://github.com/inventree/InvenTree/pull/2017) adds support for SSO (single sign on) authentication. SSO integration requires configuration by the system administrator. Refer to the [SSO documentation](../settings/SSO.md) for further information. ### BOM Substitution @@ -74,7 +74,7 @@ PR [#2208](https://github.com/inventree/InvenTree/pull/2208) provides notificati ### MFA Support -PR [#2221](https://github.com/inventree/InvenTree/pull/2221) adds support for MFA (multi factor authentication). This enables admins to require all users to enable MFA as a second auth step. Refer to the [documentation](../settings/mfa) for further information. +PR [#2221](https://github.com/inventree/InvenTree/pull/2221) adds support for MFA (multi factor authentication). This enables admins to require all users to enable MFA as a second auth step. Refer to the [documentation](../settings/MFA.md) for further information. ### Stock Item Forms PR [#2198](https://github.com/inventree/InvenTree/pull/2198) provides a major refactor of stock item forms, for creating and editing stock items. These forms have been migrated to the REST API, providing a much more responsive user experience. diff --git a/docs/docs/report/bom.md b/docs/docs/report/bom.md index f6f2864e01..13de616082 100644 --- a/docs/docs/report/bom.md +++ b/docs/docs/report/bom.md @@ -40,7 +40,7 @@ margin-top: 4cm; {% endblock %} {% block bottom_left %} -content: "v{{report_revision}} - {{ date.isoformat }}"; +content: "v{{report_revision}} - {% format_date date %}"; {% endblock %} {% block bottom_center %} diff --git a/docs/docs/report/build.md b/docs/docs/report/build.md index f1b138f5eb..ab6b740d7e 100644 --- a/docs/docs/report/build.md +++ b/docs/docs/report/build.md @@ -186,7 +186,7 @@ margin-top: 4cm; {% endblock %} {% block bottom_left %} -content: "v{{report_revision}} - {{ date.isoformat }}"; +content: "v{{report_revision}} - {% format_date date %}"; {% endblock %} {% block header_content %} @@ -230,13 +230,13 @@ content: "v{{report_revision}} - {{ date.isoformat }}"; {% trans "Issued" %} - {% render_date build.creation_date %} + {% format_date build.creation_date %} {% trans "Target Date" %} {% if build.target_date %} - {% render_date build.target_date %} + {% format_date build.target_date %} {% else %} Not specified {% endif %} diff --git a/docs/docs/report/helpers.md b/docs/docs/report/helpers.md index 6aa5475e23..b275ede4b9 100644 --- a/docs/docs/report/helpers.md +++ b/docs/docs/report/helpers.md @@ -64,7 +64,7 @@ To return an element corresponding to a certain key in a container which support {% endraw %} ``` -## Formatting Numbers +## Number Formatting The helper function `format_number` allows for some common number formatting options. It takes a number (or a number-like string) as an input, as well as some formatting arguments. It returns a *string* containing the formatted number: @@ -78,7 +78,33 @@ The helper function `format_number` allows for some common number formatting opt {% endraw %} ``` -## Rendering Currency +## Date Formatting + +For rendering date and datetime information, the following helper functions are available: + +- `format_date`: Format a date object +- `format_datetime`: Format a datetime object + +Each of these helper functions takes a date or datetime object as an input, and returns a *string* containing the formatted date or datetime. The following additional arguments are available: + +| Argument | Description | +| --- | --- | +| timezone | Specify the timezone to render the date in. If not specified, uses the InvenTree server timezone | +| format | Specify the format string to use for rendering the date. If not specified, uses ISO formatting. Refer to the [datetime format codes](https://docs.python.org/3/library/datetime.html#format-codes) for more information! | + +### Example + +A simple example of using the date formatting helper functions: + +```html +{% raw %} +{% load report %} +Date: {% format_date my_date timezone="Australia/Sydney" %} +Datetime: {% format_datetime my_datetime format="%d-%m-%Y %H:%M%S" %} +{% endraw %} +``` + +## Currency Formatting The helper function `render_currency` allows for simple rendering of currency data. This function can also convert the specified amount of currency into a different target currency: diff --git a/docs/docs/report/report.md b/docs/docs/report/report.md index e82ac5ead6..1bd05c3c6d 100644 --- a/docs/docs/report/report.md +++ b/docs/docs/report/report.md @@ -117,6 +117,7 @@ So, if you are writing a template which has custom formatting, (or any other sec ```html {% raw %} +{% load l10n %}